register_hooks(); $this->register_filters(); $this->register_shortcode(); } function register_shortcode() { add_shortcode('soinumapa-map',array($this,'shortcode_map')); } function shortcode_map($atts) { return '
'; } function register_content_type(){ $labels = array( 'name' => __('Marks', 'soundmap'), 'singular_name' => __('Mark', 'soundmap'), 'add_new' => _x('Add New', 'marker', 'soundmap'), 'add_new_item' => __('Add New Marker', 'soundmap'), 'edit_item' => __('Edit Marker', 'soundmap'), 'new_item' => __('New Marker', 'soundmap'), 'all_items' => __('All Markers', 'soundmap'), 'view_item' => __('View Marker', 'soundmap'), 'search_items' => __('Search Markers', 'soundmap'), 'not_found' => __('No markers found', 'soundmap'), 'not_found_in_trash' => __('No markers found in Trash', 'soundmap'), 'parent_item_colon' => '', 'menu_name' => 'Markers' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'marker', 'with_front' => false ), 'capability_type' => 'post', 'has_archive' => true, 'show_in_rest' => true, 'hierarchical' => false, 'menu_position' => 5, 'register_meta_box_cb' => array($this, 'metaboxes_register_callback'), 'supports' => array('title','editor','thumbnail') ); register_post_type('marker',$args); register_taxonomy_for_object_type('category', 'marker'); register_taxonomy_for_object_type('post_tag', 'marker'); } // register_content_type function init(){ $this->config['on_page'] = FALSE; $this->load_options(); $this->register_content_type(); }// init function metaboxes_register_callback(){ add_meta_box('soundmap-map', __("Place the Marker", 'soundmap'), array($this, 'map_meta_box'), 'marker', 'normal', 'high'); add_meta_box('soundmap-media-info', __("Info", 'soundmap'), array($this,'info_meta_box'), 'marker', 'side', 'high'); add_meta_box('soundmap-media-attachments', __("Media files attached.", 'soundmap'), array($this, 'attachments_meta_box'), 'marker', 'side', 'high'); add_meta_box('soundmap-media-date', __("Media data registered.", 'soundmap'), array($this, 'date_meta_box'), 'marker', 'side', 'high'); // Ya no es necesario //add_meta_box('soundmap-email', __("Uploader Mail", 'soundmap'), array($this, 'email_meta_box'), 'marker', 'side', 'low'); } //metaboxes_register_callback function date_meta_box( $post ) { $custom_date = get_post_meta( $post->ID, 'soundmap_marker_date', true ); ?> ID, 'EMAIL', TRUE); echo "

" . $mail . "

"; } function info_meta_box(){ global $post; $soundmap_author = get_post_meta($post->ID, 'soundmap_marker_author', TRUE); echo ''; echo ''; } function attachments_meta_box(){ global $post; $files = get_post_meta($post->ID, 'soundmap_attachments_id', FALSE); echo '
'; echo '
'; $out = ''; if ($files){ foreach($files as $file) { $data = wp_prepare_attachment_for_js( $file ); if (is_array($data)) : $out .= "
{$data['title']}

Borrar
"; endif; } } echo '
' . $out . '
'; echo '
'; } function map_meta_box(){ global $post; $soundmap_lat = get_post_meta($post->ID, 'soundmap_marker_lat', TRUE); $soundmap_lng = get_post_meta($post->ID, 'soundmap_marker_lng', TRUE); echo ''; echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; } function load_options(){ $_config = array(); //Load defaults; $defaults = array(); $defaults['on_page'] = FALSE; $defaults['origin']['lat'] = 0; $defaults['origin']['lng'] = 0; $defaults['origin']['zoom'] = 10; $defaults['mapType'] = 'SATELLITE'; $defaults['player_plugin'] = ""; $_config = maybe_unserialize(get_option('soundmap')); $_config = wp_parse_args($_config, $defaults); $this->config = $_config; //Load text domain for translations load_plugin_textdomain('soundmap', "wp-content/plugins/soundmap/languages", dirname( plugin_basename( __FILE__ ) ) . "/languages"); } //load_options function admin_menu(){ add_options_page(__('Sound Map Configuration','soundmap'), __('Sound Map','soundmap'), 'manage_options', 'soundmap-options-menu', array($this, 'admin_menu_page_callback')); }// admin_menu function enqueue_map_scripts(){ wp_enqueue_script('leafletjs','https://unpkg.com/leaflet@1.9.3/dist/leaflet.js',array(),'1.9.3',TRUE); // add Leaflet.js wp_enqueue_style('leafletcss',"https://unpkg.com/leaflet@1.9.3/dist/leaflet.css",array(),'1.9.3','all'); // add CSS Leaflet } function wp_enqueue_scripts(){ $this->enqueue_map_scripts(); wp_enqueue_script('jquery'); wp_enqueue_script('underscore'); wp_enqueue_script('mediaelement'); wp_enqueue_script('soundmap-front', plugins_url('js/soundmap.front.js', __FILE__), array(), '0.1', TRUE); wp_enqueue_style('soundmap-front-css', plugins_url('css/soundmap.front.css', __FILE__), array(), '0.1', 'all'); $params = array(); $params['origin'] = $this->config['origin']; $params['mapType'] = $this->config['mapType']; $params['locale'] = get_locale(); $params['ajaxurl'] = admin_url('admin-ajax.php'); wp_localize_script('soundmap-front','Soundmap',$params); } function admin_enqueue_scripts($hook){ global $current_screen; if (($hook == 'post-new.php' || $hook == 'post.php') && $current_screen->post_type == "marker"){ $this->enqueue_map_scripts(); wp_enqueue_script('underscore'); wp_enqueue_style('soundmap-add-css', plugins_url('css/soundmap.add.css', __FILE__), array(), '0.1', 'all'); wp_enqueue_script('soundmap-add', plugins_url('js/soundmap.add.js', __FILE__), array(), '0.1', TRUE); $params = array(); $params['origin'] = $this->config['origin']; $params['mapType'] = $this->config['mapType']; $params['locale'] = get_locale(); wp_localize_script('soundmap-add','Soundmap',$params); }else if($hook == 'settings_page_soundmap-options-menu'){ $this->enqueue_map_scripts(); wp_enqueue_script('underscore'); wp_enqueue_script('soundmap-config', plugins_url('js/soundmap.config.js', __FILE__), array(), '0.1', TRUE); wp_enqueue_style('soundmap-config-css', plugins_url('css/soundmap.config.css', __FILE__), array(), '0.1', 'all'); $params = array(); $params['origin'] = $this->config['origin']; $params['mapType'] = $this->config['mapType']; $params['locale'] = get_locale(); wp_localize_script('soundmap-config','Soundmap',$params); }//if } // admin_enqueue_scripts function save_options(){ $_config = array(); //Load defaults; $_config ['origin']['lat'] = $_POST['soundmap_op_origin_lat']; $_config ['origin']['lng'] = $_POST['soundmap_op_origin_lng']; $_config ['origin']['zoom'] = $_POST['soundmap_op_origin_zoom']; $_config ['mapType'] = $_POST['soundmap_op_origin_type']; if(isset($_POST['soundmap_op_plugin'])) $_config ['player_plugin'] = $_POST['soundmap_op_plugin']; update_option('soundmap',maybe_serialize($_config)); $this->config = wp_parse_args($_config, $this->config); }// save_post function admin_menu_page_callback(){ if (!current_user_can('manage_options')) { wp_die( __('You do not have sufficient permissions to access this page.') ); } // verify this came from the our screen and with proper authorization, // because save_post can be triggered at other times if (isset($_POST['soundmap_op_noncename'])){ if ( !wp_verify_nonce( $_POST['soundmap_op_noncename'], plugin_basename( __FILE__ ) ) ) return; $this->save_options(); $this->load_options(); } ?>







'>

$value){ add_post_meta($post_id, 'soundmap_attachments_id', $value); }; }else{ delete_post_meta($post_id, 'soundmap_attachments_id'); // PORQUE? esto genera un null //add_post_meta($post_id, 'soundmap_attachments_id', 'null'); }; delete_transient( 'soundmap_JSON_markers' ); } function wp_print_footer_scripts(){ $params = array(); $params['ajaxurl'] = admin_url( 'admin-ajax.php' ); if (isset($this->config['query'])){ if(is_array($this->config['query'])){ $params ['query'] = json_encode($this->config['query']); }else{ $params ['query'] = $this->config['query']; } } $params['plugin_url'] = plugins_url( $path = '', __FILE__); wp_localize_script( 'soundmap', 'WP_Soundmap', $params); } function register_hooks(){ add_action('init', array($this, 'init')); add_action('admin_menu', array($this, 'admin_menu')); add_action('save_post', array($this,'save_post')); add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts')); add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); add_action('init', array($this, 'add_feed')); //AJAX ACTIONS add_action('wp_ajax_soundmap_JSON_load_markers',array($this, 'JSON_load_markers')); add_action('wp_ajax_nopriv_soundmap_JSON_load_markers',array($this, 'JSON_load_markers')); add_action('wp_ajax_nopriv_soundmap_load_infowindow', array($this, 'load_infowindow')); add_action('wp_ajax_soundmap_load_infowindow', array($this, 'load_infowindow')); add_action('wp_ajax_soundmap-get-markers',array($this, 'soundmap_get_markers')); add_action('wp_ajax_nopriv_soundmap-get-markers',array($this,'soundmap_get_markers')); add_action('wp_ajax_soundmap-get-content',array($this, 'soundmap_get_content')); /* REST API Options */ add_action('rest_api_init', function() { /* REST API expand fields */ register_rest_field('marker','media', array( 'get_callback' => 'marker_get_media', 'schema' => null ) ); register_rest_field('marker','author', array( 'get_callback' => 'marker_get_author', 'schema' => null ) ); register_rest_field('marker','georeference', array( 'get_callback' => 'marker_get_georeference', 'schema' => null ) ); /* REST API utils for migration - Temp functions */ register_rest_route('soundmap', '/translate/post', array( 'methods' => 'GET', 'callback' => 'soundmap_save_post_translation', 'permission_callback' => '__return_true' )); register_rest_route('soundmap', '/translate/term', array( 'methods' => 'GET', 'callback' => 'soundmap_save_term_translation', 'permission_callback' => '__return_true' )); }); function soundmap_save_term_translation($request) { $taxonomy=$request->get_param('taxonomy'); $termA=$request->get_param('termA'); // slug $langA=$request->get_param('langA'); // locale $response = false; if ( isset($taxonomy) && isset($termA) ) : $termB = $termA."-es"; $termC = $termA."-en"; if ( term_exists($termA) && term_exists($termB) && term_exists($termC) ) : pll_set_term_language(term_exists($termA), 'eu'); pll_set_term_language(term_exists($termB), 'es'); pll_set_term_language(term_exists($termC), 'en'); $translation = array( 'eu' => term_exists($termA), 'es' => term_exists($termB), 'en' => term_exists($termC) ); pll_save_term_translations($translation); $response = true; endif; endif; return new WP_REST_Response($response); } function soundmap_post_exists( $id ) { return is_string( get_post_status( $id ) ); } function soundmap_save_post_translation($request) { // http://docker:8089/wp-json/soundmap/translate/post?postA=43688&langA=es&postB=12707&langB=eu $postA=$request->get_param('postA'); // slug $langA=$request->get_param('langA'); // locale //$postB=$request->get_param('postB'); //$langB=$request->get_param('langB'); $response = false; if ( isset($postA) ) : $pA = get_page_by_path( $postA, OBJECT, 'marker' ); $pB = get_page_by_path( $postA."-es", OBJECT, 'marker' ); $pC = get_page_by_path( $postA."-en", OBJECT, 'marker' ); //return new WP_REST_Response(get_page_by_path( "lesaka-ekaitz-elektromagnetikoa-es", OBJECT, 'marker' )); if ( $pA && $pB && $pC ) : pll_set_post_language($pA->ID, 'eu'); pll_set_post_language($pB->ID, 'es'); pll_set_post_language($pC->ID, 'en'); $translation = array( 'eu' => $pA->ID, 'es' => $pB->ID, 'en' => $pC->ID ); pll_save_post_translations($translation); $response = true; endif; endif; return new WP_REST_Response($response); } function marker_get_georeference ($object, $field_name, $request){ //return $object['id']; $lat = get_post_meta($object['id'], 'soundmap_marker_lat', true); $lng = get_post_meta($object['id'], 'soundmap_marker_lng', true); return [$lng,$lat]; } function marker_get_author ($object,$field_name, $request) { return get_post_meta($object['id'],'soundmap_marker_author',true); } function marker_get_media ($object, $field_name, $request) { $files = get_post_meta($object['id'], 'soundmap_attachments_id', FALSE); $files_str = []; if ($files) : foreach($files as $file){ $data = wp_prepare_attachment_for_js( $file ); array_push($files_str,$data); } endif; return $files_str; } /* add_action('wp_ajax_nopriv_soundmap_file_uploaded', array($this, 'ajax_file_uploaded_callback')); add_action('wp_ajax_nopriv_soundmap_save_public_upload', array($this, 'save_public_upload')); add_action('wp_ajax_nopriv_soundmap_verify_captcha', array($this, 'verify_captcha'));*/ } function add_feed(){ global $wp_rewrite; add_feed('podcast', array($this, 'customfeed')); add_action('generate_rewrite_rules', array($this, 'rewrite_rules')); $wp_rewrite->flush_rules(); } function rewrite_rules($wp_rewrite){ $new_rules = array( 'feed/(.+)' => 'index.php?feed='.$wp_rewrite->preg_index(1) ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } function customfeed(){ load_template( WP_PLUGIN_DIR . '/soundmap/theme/rss-markers.php'); // You'll create a your-custom-feed.php file in your theme's directory } function soundmap_get_content(){ if (!isset($_POST['id'])) wp_send_json_error(); $id = $_POST['id']; $marker = get_post($id); if(!$marker) wp_send_json_error(); global $post; $post = $marker; setup_postdata($marker); $mark = new stdclass(); $mark->id = $id; $mark->autor = get_post_meta($id, 'soundmap_marker_author', TRUE); $mark->files = array(); $files = get_post_meta($id, 'soundmap_attachments_id', FALSE); foreach ($files as $key => $value){ $att = wp_prepare_attachment_for_js( $value ); $mark->files[] = $att; } if ($theme=$this->get_template_include('window')){ ob_start(); include ($theme); $mark->html = ob_get_clean(); } wp_send_json_success($mark); } function load_infowindow(){ $marker_id = $_REQUEST['marker']; $marker = get_post($marker_id); global $post; $post = $marker; setup_postdata($marker); if(!$marker) die(); $feature = new stdclass(); $feature->autor = get_post_meta($marker_id, 'soundmap_marker_author', TRUE); $files = get_post_meta($marker_id, 'soundmap_attachments_id', FALSE); $info['m_files'] = array(); foreach ($files as $key => $value){ $file = array(); $att = get_post($value); $file['id'] = $value; $file['fileURI'] = wp_get_attachment_url($value); $file['filePath'] = get_attached_file($value); $file['info'] = "";//soundmap_get_id3info($file['filePath']); $file['name'] = $att->post_name; $info['m_files'][] = $file; } if ($theme=$this->get_template_include('window')){ ob_start(); include ($theme); $output = ob_get_flush(); wp_send_json_success($output); } die(); } function get_template_include($templ){ if (!$templ) return FALSE; $theme_file = TEMPLATEPATH . DIRECTORY_SEPARATOR . $templ . '.php'; $plugin_file = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . 'soundmap' . DIRECTORY_SEPARATOR . 'theme' . DIRECTORY_SEPARATOR . 'theme_' . $templ . '.php'; if (file_exists($theme_file)) return $theme_file; if(file_exists($plugin_file)) return $plugin_file; return FALSE; } function soundmap_get_markers(){ /*if (!isset($_POST['query'])) wp_send_json_error();*/ $q = $_POST['query']; if (!is_array($q)) {$q=array($q); } if (is_array($q)){ $options = array( 'post_type' => 'marker', 'post_status' => 'publish' ); $options = array_merge($options, $q); $query = new WP_Query($options); if ( !$query->have_posts() ) wp_send_json_error(); $posts = $query->posts; $feature_collection = new stdclass(); $feature_collection->type = 'FeatureCollection'; $feature_collection->features = array(); foreach($posts as $post){ $post_id = $post->ID; $m_lat = get_post_meta($post_id,'soundmap_marker_lat', TRUE); $m_lng = get_post_meta($post_id,'soundmap_marker_lng', TRUE); $title = get_the_title ($post_id); $feature = new stdclass(); $feature->type = 'Feature'; $feature->geometry = new stdclass(); $feature->geometry->type = 'Point'; $feature->geometry->coordinates = array(floatval($m_lng), floatval($m_lat)); $feature->properties = new stdclass(); $feature->properties->id = $post_id; $feature->properties->title = $title; /*$feature->properties = array(); $feature->properties['title']=$title; $feature->properties['id']=$id; $feature->properties['marker-color']="#ff00ff";*/ //$feature->properties['title']="ssss"; $feature_collection->features[] = $feature; } wp_send_json_success($feature_collection); } } function JSON_load_markers(){ if (!isset($_POST['query'])) return; //checkeo la cache $save_transient = false; if ($_POST['query']=='all'){ $transient_data = get_transient( 'soundmap_JSON_markers' ); if($transient_data !== false){ echo json_encode($transient_data); die(); } $query = new WP_Query(array('post_type' => 'marker', 'post_status' => 'publish')); $save_transient = true; }else{ if (!is_array($_POST["query"])){ $markers_list = json_decode($_POST['query']); }else{$markers_list = $_POST['query'];} $query = new WP_Query(array('post_type' => 'marker', 'post_status' => 'publish', 'post__in' => $markers_list)); } $markers = array(); if ( !$query->have_posts() ) die(); $posts = $query->posts; $feature_collection = new stdclass(); $feature_collection->type = 'FeatureCollection'; $feature_collection->features = array(); foreach($posts as $post){ $post_id = $post->ID; $m_lat = get_post_meta($post_id,'soundmap_marker_lat', TRUE); $m_lng = get_post_meta($post_id,'soundmap_marker_lng', TRUE); $title = get_the_title ($post_id); $feature = new stdclass(); $feature->type = 'Feature'; $feature->geometry = new stdclass(); $feature->geometry->type = 'Point'; $feature->geometry->coordinates = array(floatval($m_lng), floatval($m_lat)); $feature->properties = new stdclass(); $feature->properties->id = $post_id; $feature->properties->title = $title; $feature_collection->features[] = $feature; } if ($save_transient) set_transient( 'soundmap_JSON_markers', $feature_collection, 60*60*12 ); echo json_encode($feature_collection); die(); } function register_filters(){ //add_filter( 'pre_get_posts', array($this, 'pre_get_posts')); } function set_query($query){ if (!is_array($query)){ //miramos si es texto if ($query == "all"){ $this->config['query'] = 'all'; } }else{ $this->config['query'] = $query; } } function getID3($file){ $getID3 = new getID3; $result = array(); $fileInfo = $getID3->analyze($file); if(isset($fileInfo['error'])) return; if (isset($fileInfo['playtime_string'])) $result['play_time'] = $fileInfo['playtime_string']; if (isset($fileInfo['fileformat'])) $result['format'] = $fileInfo['fileformat']; return $result; } } } global $soundmap; $soundmap = new Soundmap();