map is showing and files are enqueued and included the right way
This commit is contained in:
132
:w
Normal file
132
:w
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Plugin Name: map_prof
|
||||||
|
Plugin URI:
|
||||||
|
Description: add/remove locations on map at publication/deletion of posts
|
||||||
|
Author: hugogogo
|
||||||
|
Version: 1.0.0
|
||||||
|
Author URI:
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once('./console_log.php');
|
||||||
|
//require_once('./mp_gapi.php');
|
||||||
|
|
||||||
|
function wpa_enqueue_scripts() {
|
||||||
|
$path = plugins_url('mp_style.css', __FILE__);
|
||||||
|
wp_enqueue_style('mp_style', $path, [], null, false);
|
||||||
|
|
||||||
|
// $path = mp_url_api();
|
||||||
|
// wp_enqueue_script('mp_gapi', $path, [], null, true);
|
||||||
|
|
||||||
|
$path = plugins_url('mp_create_map.js', __FILE__);
|
||||||
|
// wp_enqueue_script('mp_create_map', $path, ['mp_gapi'], null, true);
|
||||||
|
wp_enqueue_script('mp_create_map', $path, [], null, true);
|
||||||
|
}
|
||||||
|
add_action( 'wp_enqueue_scripts', 'wpa_enqueue_scripts' );
|
||||||
|
|
||||||
|
function mp_add_div() {
|
||||||
|
$mp_api_script = '<div id="map"></div>';
|
||||||
|
return $mp_api_script;
|
||||||
|
}
|
||||||
|
function mp_add_api() {
|
||||||
|
$mp_create_url = array(
|
||||||
|
'src' => 'https://maps.googleapis.com/maps/api/js',
|
||||||
|
'key' => 'AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE',
|
||||||
|
'callback' => 'mp_init_map',
|
||||||
|
);
|
||||||
|
$mp_src = "";
|
||||||
|
foreach ($mp_create_url as $url_key => $url_value) {
|
||||||
|
if ($url_key === 'src') {
|
||||||
|
$mp_src .= $url_value;
|
||||||
|
if (count($mp_create_url > 1))
|
||||||
|
$mp_src .= "?";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$mp_src .= "&" . $url_key . "=" . $url_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
$mp_api_script = '<script async defer ';
|
||||||
|
$mp_api_script .= 'src="' . $mp_src . '"></script>';
|
||||||
|
return $mp_api_script;
|
||||||
|
}
|
||||||
|
function show_map() {
|
||||||
|
$mp_api_script = mp_add_div();
|
||||||
|
$mp_api_script .= mp_add_api();
|
||||||
|
return $mp_api_script;
|
||||||
|
}
|
||||||
|
add_shortcode('lejourduprof_map', 'show_map');
|
||||||
|
//add_shortcode('lejourduprof_map', 'mp_add_div');
|
||||||
|
|
||||||
|
|
||||||
|
//function print_content($content){
|
||||||
|
//
|
||||||
|
// // print only on the page 'map', and other conditions
|
||||||
|
// // https://developer.wordpress.org/reference/hooks/the_content/
|
||||||
|
// if (!( is_page('map_prof') && in_the_loop() && is_main_query() ))
|
||||||
|
// return $content;
|
||||||
|
//
|
||||||
|
// // https://developer.wordpress.org/reference/functions/get_posts/
|
||||||
|
// $get_posts_args = array(
|
||||||
|
// 'numberposts' => -1,
|
||||||
|
// 'post_status' => 'publish',
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// $posts_list = get_posts($get_posts_args);
|
||||||
|
// $content .= "<p>";
|
||||||
|
// $content .= "nb posts published : ";
|
||||||
|
// $content .= count($posts_list);
|
||||||
|
// $content .= "</p>";
|
||||||
|
// foreach ($posts_list as $post_value) {
|
||||||
|
// $content .= "<div>";
|
||||||
|
// $content .= "- post title: [";
|
||||||
|
// $content .= $post_value->post_title;
|
||||||
|
// $content .= "] - content: [";
|
||||||
|
// $content .= $post_value->post_content;
|
||||||
|
// $content .= "]";
|
||||||
|
// $content .= "</div>";
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // TESTS : print posts full content
|
||||||
|
// //
|
||||||
|
// //$posts_list = get_posts($args);
|
||||||
|
// //$content .= "<p>";
|
||||||
|
// //$content .= "nb posts published : ";
|
||||||
|
// //$content .= count($posts_list);
|
||||||
|
// //$content .= "</p>";
|
||||||
|
// //foreach ($posts_list as $post_key => $post_value) {
|
||||||
|
// // $content .= "<p>";
|
||||||
|
// // $content .= "post content : ";
|
||||||
|
// // $content .= $post_key;
|
||||||
|
// // $content .= " : ";
|
||||||
|
// // $content .= "<br>";
|
||||||
|
// // foreach ($post_value as $key => $value) {
|
||||||
|
// // $content .= "- [";
|
||||||
|
// // $content .= $key;
|
||||||
|
// // $content .= "]: [";
|
||||||
|
// // $content .= $value;
|
||||||
|
// // $content .= "]<br>";
|
||||||
|
// // }
|
||||||
|
// // $content .= "</p>";
|
||||||
|
// //}
|
||||||
|
//
|
||||||
|
// $content .= '<div id="map"></div>';
|
||||||
|
// $content .= '<script>
|
||||||
|
// function initMap() {
|
||||||
|
// var location = {lat: 38.8833, lng: -77.0167};
|
||||||
|
// var map = new google.maps.Map(document.getElementById("map"), {
|
||||||
|
// zoom: 12,
|
||||||
|
// center: location
|
||||||
|
// });
|
||||||
|
// var marker = new google.maps.Marker({
|
||||||
|
// position: location,
|
||||||
|
// map: map
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// </script>';
|
||||||
|
// $content .= '<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE&callback=initMap"></script>';
|
||||||
|
//
|
||||||
|
// return $content;
|
||||||
|
//};
|
||||||
|
//add_action('the_content', 'print_content', 1);
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -21,7 +21,7 @@ function ink_menu_page() {
|
|||||||
}
|
}
|
||||||
function ink_gm_setting(){
|
function ink_gm_setting(){
|
||||||
?>
|
?>
|
||||||
<h2> Google Map </h2>
|
<h2>Google Map</h2>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<div class="ink_set">
|
<div class="ink_set">
|
||||||
<label>Latitude : </label>
|
<label>Latitude : </label>
|
||||||
@@ -56,25 +56,24 @@ function my_init_script() {
|
|||||||
wp_enqueue_script('my_script', $script_path, array('jquery'));
|
wp_enqueue_script('my_script', $script_path, array('jquery'));
|
||||||
$style_path = plugins_url('style.css', __FILE__);
|
$style_path = plugins_url('style.css', __FILE__);
|
||||||
wp_enqueue_style('my_style', $style_path);
|
wp_enqueue_style('my_style', $style_path);
|
||||||
console_log("urlencode : " . urlencode("128 rue de la croix nivert, paris"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_shortcode('googlemap', 'show_google_map');
|
||||||
function show_google_map() {
|
function show_google_map() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$GoogleMap_Latitude = get_option('googleMap_latitude_position');
|
$GoogleMap_Latitude = get_option('googleMap_latitude_position');
|
||||||
$GoogleMap_Longitude = get_option('googleMap_longitude_position');
|
$GoogleMap_Longitude = get_option('googleMap_longitude_position');
|
||||||
$GoogleMap_zoom = get_option('map_zoom_value');
|
$GoogleMap_zoom = get_option('map_zoom_value');
|
||||||
//src="https://maps.googleapis.com/maps/api/geocode/json?address=paris&key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE
|
//src="https://maps.googleapis.com/maps/api/geocode/json?address=paris&key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE
|
||||||
?>
|
return '
|
||||||
<script
|
<script
|
||||||
src="http://maps.googleapis.com/maps/api/js?&sensor=false?&key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE">
|
src="https://maps.googleapis.com/maps/api/js?&sensor=false?&key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE">
|
||||||
</script>
|
</script>
|
||||||
<div class="latitude"><?php echo $GoogleMap_Latitude; ?></div>
|
<div class="latitude"><?php echo $GoogleMap_Latitude; ?></div>
|
||||||
<div class="longitude" ><?php echo $GoogleMap_Longitude; ?></div>
|
<div class="longitude" ><?php echo $GoogleMap_Longitude; ?></div>
|
||||||
<div class="zoom"><?php echo $GoogleMap_zoom; ?></div>
|
<div class="zoom"><?php echo $GoogleMap_zoom; ?></div>
|
||||||
<div id="showmap"> </div>
|
<div id="showmap"> </div>
|
||||||
<?php
|
';
|
||||||
}
|
}
|
||||||
|
|
||||||
add_shortcode('googlemap', 'show_google_map');
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -8,108 +8,92 @@ Version: 1.0.0
|
|||||||
Author URI:
|
Author URI:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
add_action( 'init', 'my_init_script' );
|
include_once(dirname(__FILE__) . '/mp_console_log.php');
|
||||||
function my_init_script() {
|
require_once(dirname(__FILE__) . '/mp_url_api.php');
|
||||||
$style_path = plugins_url('style.css', __FILE__);
|
|
||||||
wp_enqueue_style('my_style', $style_path);
|
add_action( 'wp_enqueue_scripts', 'wpa_enqueue_scripts' );
|
||||||
|
function wpa_enqueue_scripts() {
|
||||||
|
wp_enqueue_style( 'mp_style', plugins_url('mp_style.css', __FILE__), '', '', false);
|
||||||
|
wp_enqueue_script('mp_init_map', plugins_url('mp_init_map.js', __FILE__), '', '', true);
|
||||||
|
wp_enqueue_script('mp_google_api', mp_url_api(), ['mp_init_map'], '', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if block theme : https://wordpress.org/support/topic/twenty-twenty-two-cpt-template-error-theme-without-header-is-deprecated/
|
add_shortcode('lejourduprof_map', 'mp_add_div');
|
||||||
function add_map_api(){
|
function mp_add_div() {
|
||||||
?>
|
$mp_api_script = '<div id="map">map here</div>';
|
||||||
<script type="text/javascript" src="https://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
|
return $mp_api_script;
|
||||||
<script type="text/javascript" defer>
|
|
||||||
//<![CDATA[
|
|
||||||
import Map from 'ol/Map';
|
|
||||||
import View from 'ol/View';
|
|
||||||
import OSM from 'ol/source/OSM';
|
|
||||||
import TileLayer from 'ol/layer/Tile';
|
|
||||||
|
|
||||||
new Map({
|
|
||||||
layers: [
|
|
||||||
new TileLayer({source: new OSM()}),
|
|
||||||
],
|
|
||||||
view: new View({
|
|
||||||
center: [0, 0],
|
|
||||||
zoom: 2,
|
|
||||||
}),
|
|
||||||
target: 'map',
|
|
||||||
});
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<?php
|
|
||||||
}
|
}
|
||||||
//add_action('wp_head', 'add_map_api');
|
|
||||||
|
|
||||||
function print_content($content){
|
|
||||||
|
|
||||||
// print only on the page 'map', and other conditions
|
//function print_content($content){
|
||||||
// https://developer.wordpress.org/reference/hooks/the_content/
|
//
|
||||||
if (!( is_page('map_prof') && in_the_loop() && is_main_query() ))
|
// // print only on the page 'map', and other conditions
|
||||||
return $content;
|
// // https://developer.wordpress.org/reference/hooks/the_content/
|
||||||
|
// if (!( is_page('map_prof') && in_the_loop() && is_main_query() ))
|
||||||
// https://developer.wordpress.org/reference/functions/get_posts/
|
// return $content;
|
||||||
$get_posts_args = array(
|
//
|
||||||
'numberposts' => -1,
|
// // https://developer.wordpress.org/reference/functions/get_posts/
|
||||||
'post_status' => 'publish',
|
// $get_posts_args = array(
|
||||||
);
|
// 'numberposts' => -1,
|
||||||
|
// 'post_status' => 'publish',
|
||||||
$posts_list = get_posts($get_posts_args);
|
// );
|
||||||
$content .= "<p>";
|
//
|
||||||
$content .= "nb posts published : ";
|
// $posts_list = get_posts($get_posts_args);
|
||||||
$content .= count($posts_list);
|
// $content .= "<p>";
|
||||||
$content .= "</p>";
|
// $content .= "nb posts published : ";
|
||||||
foreach ($posts_list as $post_value) {
|
// $content .= count($posts_list);
|
||||||
$content .= "<div>";
|
// $content .= "</p>";
|
||||||
$content .= "- post title: [";
|
// foreach ($posts_list as $post_value) {
|
||||||
$content .= $post_value->post_title;
|
// $content .= "<div>";
|
||||||
$content .= "] - content: [";
|
// $content .= "- post title: [";
|
||||||
$content .= $post_value->post_content;
|
// $content .= $post_value->post_title;
|
||||||
$content .= "]";
|
// $content .= "] - content: [";
|
||||||
$content .= "</div>";
|
// $content .= $post_value->post_content;
|
||||||
}
|
// $content .= "]";
|
||||||
|
// $content .= "</div>";
|
||||||
// TESTS : print posts full content
|
// }
|
||||||
//
|
//
|
||||||
//$posts_list = get_posts($args);
|
// // TESTS : print posts full content
|
||||||
//$content .= "<p>";
|
// //
|
||||||
//$content .= "nb posts published : ";
|
// //$posts_list = get_posts($args);
|
||||||
//$content .= count($posts_list);
|
// //$content .= "<p>";
|
||||||
//$content .= "</p>";
|
// //$content .= "nb posts published : ";
|
||||||
//foreach ($posts_list as $post_key => $post_value) {
|
// //$content .= count($posts_list);
|
||||||
// $content .= "<p>";
|
// //$content .= "</p>";
|
||||||
// $content .= "post content : ";
|
// //foreach ($posts_list as $post_key => $post_value) {
|
||||||
// $content .= $post_key;
|
// // $content .= "<p>";
|
||||||
// $content .= " : ";
|
// // $content .= "post content : ";
|
||||||
// $content .= "<br>";
|
// // $content .= $post_key;
|
||||||
// foreach ($post_value as $key => $value) {
|
// // $content .= " : ";
|
||||||
// $content .= "- [";
|
// // $content .= "<br>";
|
||||||
// $content .= $key;
|
// // foreach ($post_value as $key => $value) {
|
||||||
// $content .= "]: [";
|
// // $content .= "- [";
|
||||||
// $content .= $value;
|
// // $content .= $key;
|
||||||
// $content .= "]<br>";
|
// // $content .= "]: [";
|
||||||
// }
|
// // $content .= $value;
|
||||||
// $content .= "</p>";
|
// // $content .= "]<br>";
|
||||||
//}
|
// // }
|
||||||
|
// // $content .= "</p>";
|
||||||
$content .= '<div id="map"></div>';
|
// //}
|
||||||
$content .= '<script>
|
//
|
||||||
function initMap() {
|
// $content .= '<div id="map"></div>';
|
||||||
var location = {lat: 38.8833, lng: -77.0167};
|
// $content .= '<script>
|
||||||
var map = new google.maps.Map(document.getElementById("map"), {
|
// function initMap() {
|
||||||
zoom: 12,
|
// var location = {lat: 38.8833, lng: -77.0167};
|
||||||
center: location
|
// var map = new google.maps.Map(document.getElementById("map"), {
|
||||||
});
|
// zoom: 12,
|
||||||
var marker = new google.maps.Marker({
|
// center: location
|
||||||
position: location,
|
// });
|
||||||
map: map
|
// var marker = new google.maps.Marker({
|
||||||
});
|
// position: location,
|
||||||
}
|
// map: map
|
||||||
</script>';
|
// });
|
||||||
$content .= '<script async defer src="https://maps.googleapis.com/maps/api/js?sensor=false&key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE&callback=initMap"></script>';
|
// }
|
||||||
|
// </script>';
|
||||||
return $content;
|
// $content .= '<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE&callback=initMap"></script>';
|
||||||
};
|
//
|
||||||
add_action('the_content', 'print_content', 1);
|
// return $content;
|
||||||
|
//};
|
||||||
|
//add_action('the_content', 'print_content', 1);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
11
srcs/plugins/map_prof/mp_console_log.php
Normal file
11
srcs/plugins/map_prof/mp_console_log.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
// https://stackify.com/how-to-log-to-console-in-php/
|
||||||
|
function mp_console_log($output, $with_script_tags = true) {
|
||||||
|
$js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) .
|
||||||
|
');';
|
||||||
|
if ($with_script_tags) {
|
||||||
|
$js_code = '<script>' . $js_code . '</script>';
|
||||||
|
}
|
||||||
|
echo $js_code;
|
||||||
|
}
|
||||||
|
?>
|
||||||
11
srcs/plugins/map_prof/mp_init_map.js
Normal file
11
srcs/plugins/map_prof/mp_init_map.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
function mp_init_map() {
|
||||||
|
var location = {lat: 38.8833, lng: -77.0167};
|
||||||
|
var map = new google.maps.Map(document.getElementById("map"), {
|
||||||
|
zoom: 12,
|
||||||
|
center: location
|
||||||
|
});
|
||||||
|
var marker = new google.maps.Marker({
|
||||||
|
position: location,
|
||||||
|
map: map
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -2,3 +2,6 @@
|
|||||||
height: 500px;
|
height: 500px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
#temoin {
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
25
srcs/plugins/map_prof/mp_url_api.php
Normal file
25
srcs/plugins/map_prof/mp_url_api.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
function mp_url_api() {
|
||||||
|
$mp_url = array(
|
||||||
|
'src' => 'https://maps.googleapis.com/maps/api/js',
|
||||||
|
'sensor' => 'false',
|
||||||
|
'key' => 'AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE',
|
||||||
|
'callback' => 'mp_init_map',
|
||||||
|
);
|
||||||
|
$mp_src = "";
|
||||||
|
foreach ($mp_url as $url_key => $url_value) {
|
||||||
|
if ($url_key === 'src') {
|
||||||
|
$mp_src .= $url_value;
|
||||||
|
if (count($mp_url > 1))
|
||||||
|
$mp_src .= "?";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$mp_src .= "&" . $url_key . "=" . $url_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
//$mp_api_script = '<script async defer ';
|
||||||
|
//$mp_api_script .= 'src="' . $mp_src . '"></script>';
|
||||||
|
//return $mp_api_script;
|
||||||
|
return $mp_src;
|
||||||
|
}
|
||||||
|
?>
|
||||||
@@ -11,6 +11,8 @@ RUN apk update && apk add \
|
|||||||
# nginx conf
|
# nginx conf
|
||||||
COPY ./conf/nginx.conf.alpine /etc/nginx/nginx.conf
|
COPY ./conf/nginx.conf.alpine /etc/nginx/nginx.conf
|
||||||
COPY ./conf/inception_nginx.conf /etc/nginx/http.d/
|
COPY ./conf/inception_nginx.conf /etc/nginx/http.d/
|
||||||
|
# dir for logs
|
||||||
|
RUN mkdir -p /var/log/nginx/
|
||||||
|
|
||||||
# create user www-data and assign it to group www-data
|
# create user www-data and assign it to group www-data
|
||||||
RUN adduser -S www-data && \
|
RUN adduser -S www-data && \
|
||||||
|
|||||||
@@ -9,18 +9,40 @@ server {
|
|||||||
|
|
||||||
root /var/www/html/; # contains default nginx index.nginx-debian.html
|
root /var/www/html/; # contains default nginx index.nginx-debian.html
|
||||||
index index.html index.php; # defines files that will be used as index (https://nginx.org/en/docs/http/ngx_http_index_module.html)
|
index index.html index.php; # defines files that will be used as index (https://nginx.org/en/docs/http/ngx_http_index_module.html)
|
||||||
|
|
||||||
|
access_log /var/log/nginx/${WP_URL}.access.log;
|
||||||
|
error_log /var/log/nginx/${WP_URL}.error.log;
|
||||||
|
|
||||||
location / {
|
# use fastcgi for all php files
|
||||||
try_files $uri $uri/ =404; # from /etc/nginx/sites-enabled/default : First attempt to serve request as file, then as directory, then fall back to displaying a 404
|
|
||||||
}
|
|
||||||
|
|
||||||
# pass PHP scripts to FastCGI (PHP-FPM) server
|
|
||||||
location ~ \.php$ {
|
location ~ \.php$ {
|
||||||
try_files $uri =404;
|
|
||||||
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_pass wordpress:9000;
|
fastcgi_pass wordpress:9000;
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# followings are from :
|
||||||
|
# https://www.farinspace.com/wordpress-nginx-rewrite-rules/
|
||||||
|
|
||||||
|
# unless the request is for a valid file, send to bootstrap
|
||||||
|
# without this, permalinks changes don't work
|
||||||
|
if (!-e $request_filename) {
|
||||||
|
rewrite ^(.+)$ /index.php?q=$1 last;
|
||||||
|
}
|
||||||
|
|
||||||
|
## enforce NO www
|
||||||
|
#if ($host ~* ^www\.(.*)) {
|
||||||
|
# set $host_without_www $1;
|
||||||
|
# rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
|
||||||
|
#}
|
||||||
|
|
||||||
|
## catch all
|
||||||
|
#error_page 404 /index.php;
|
||||||
|
|
||||||
|
## deny access to apache .htaccess files
|
||||||
|
#location ~ /\.ht {
|
||||||
|
# deny all;
|
||||||
|
#}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user