diff --git a/css/OLD/jquery.datepicker.css b/css/OLD/jquery.datepicker.css deleted file mode 100644 index bf8a62a..0000000 --- a/css/OLD/jquery.datepicker.css +++ /dev/null @@ -1,189 +0,0 @@ -div.datepicker { - position: relative; - width: 196px; - height: 147px; - position: absolute; - cursor: default; - top: 0; - left: 0; - display: none; -} -.datepickerContainer { - background: white; - position: absolute; - top: 10px; - left: 10px; -} -.datepickerBorderT { - position: absolute; - left: 10px; - top: 0; - right: 10px; - height: 10px; - background: url(../img/datepicker_t.png); -} -.datepickerBorderB { - position: absolute; - left: 10px; - bottom: 0; - right: 10px; - height: 10px; - background: url(../img/datepicker_b.png); -} -.datepickerBorderL { - position: absolute; - left: 0; - bottom: 10px; - top: 10px; - width: 10px; - background: url(../img/datepicker_l.png); -} -.datepickerBorderR { - position: absolute; - right: 0; - bottom: 10px; - top: 10px; - width: 10px; - background: url(../img/datepicker_r.png); -} -.datepickerBorderTL { - position: absolute; - top: 0; - left: 0; - width: 10px; - height: 10px; - background: url(../img/datepicker_tl.png); -} -.datepickerBorderTR { - position: absolute; - top: 0; - right: 0; - width: 10px; - height: 10px; - background: url(../img/datepicker_tr.png); -} -.datepickerBorderBL { - position: absolute; - bottom: 0; - left: 0; - width: 10px; - height: 10px; - background: url(../img/datepicker_bl.png); -} -.datepickerBorderBR { - position: absolute; - bottom: 0; - right: 0; - width: 10px; - height: 10px; - background: url(../img/datepicker_br.png); -} -.datepickerHidden { - display: none; -} -div.datepicker table { - border-collapse:collapse; -} -div.datepicker a { - color: #222; - text-decoration: none; - cursor: default; - outline: none; -} -div.datepicker table td { - text-align: right; - padding: 0; - margin: 0; -} -div.datepicker th { - text-align: center; - color: #999; - font-weight: normal; -} -div.datepicker tbody th { - text-align: left; -} -div.datepicker tbody a { - display: block; -} -.datepickerDays a { - width: 20px; - line-height: 16px; - height: 16px; - padding-right: 2px; -} -.datepickerYears a, -.datepickerMonths a{ - width: 44px; - line-height: 36px; - height: 36px; - text-align: center; -} -td.datepickerNotInMonth a { - color: #eee; -} -tbody.datepickerDays td.datepickerSelected{ - background: #ccc; -} -tbody.datepickerDays td.datepickerNotInMonth.datepickerSelected { - background: #17384d; -} -tbody.datepickerYears td.datepickerSelected, -tbody.datepickerMonths td.datepickerSelected{ - background: #17384d; -} -div.datepicker a:hover, -div.datepicker a:hover { - color: red; -} -div.datepicker td.datepickerNotInMonth a:hover { - color: #999; -} -div.datepicker tbody th { - text-align: left; -} -.datepickerSpace div { - width: 20px; -} -.datepickerGoNext a, -.datepickerGoPrev a, -.datepickerMonth a { - text-align: center; - height: 20px; - line-height: 20px; -} -.datepickerGoNext a { - float: right; - width: 20px; -} -.datepickerGoPrev a { - float: left; - width: 20px; -} -table.datepickerViewDays tbody.datepickerMonths, -table.datepickerViewDays tbody.datepickerYears { - display: none; -} -table.datepickerViewMonths tbody.datepickerDays, -table.datepickerViewMonths tbody.datepickerYears, -table.datepickerViewMonths tr.datepickerDoW { - display: none; -} -table.datepickerViewYears tbody.datepickerDays, -table.datepickerViewYears tbody.datepickerMonths, -table.datepickerViewYears tr.datepickerDoW { - display: none; -} -td.datepickerDisabled a, -td.datepickerDisabled.datepickerNotInMonth a{ - color: #333; -} -td.datepickerDisabled a:hover { - color: #333; -} -td.datepickerSpecial a { - background: #700; -} -td.datepickerSpecial.datepickerSelected a { - background: #a00; -} \ No newline at end of file diff --git a/css/OLD/soundmap-admin OLD.css b/css/OLD/soundmap-admin OLD.css deleted file mode 100644 index 111e705..0000000 --- a/css/OLD/soundmap-admin OLD.css +++ /dev/null @@ -1,18 +0,0 @@ - -#map_canvas, #map_canvas_options{width:100%; height:400px;} -#sound-att-table {width:100%; table-layout: fixed; word-break: break-word; border-collapse: collapse;} -#sound-att-table th{text-align:left;} -#sound-att-table .soundmap-att-left{width:60%; padding-right:6px} -#sound-att-table tr {border-bottom:1px solid #666;} -#sound-att-table td {padding: 3px 0;} - -.uploadFileQueued{ - height:36px; - margin:10px 0; -} - -.filename{ - position:relative; - margin-top:10px; - font-weight: bold; -} diff --git a/css/OLD/soundmap-admin.css b/css/OLD/soundmap-admin.css deleted file mode 100644 index e4f135c..0000000 --- a/css/OLD/soundmap-admin.css +++ /dev/null @@ -1,135 +0,0 @@ - -#map_canvas, #map_canvas_options{width:100%; height:400px;} -#sound-att-table {width:100%; table-layout: fixed; word-break: break-word; border-collapse: collapse;} -#sound-att-table th{text-align:left;} -#sound-att-table .soundmap-att-left{width:60%; padding-right:6px} -#sound-att-table tr {border-bottom:1px solid #666;} -#sound-att-table td {padding: 3px 0;} - -#sound-att-table .soundmap-att-left span{ - float: left; -} - -.uploadFileQueued{ - height:36px; - margin:10px 0; -} - -.filename{ - position:relative; - margin-top:10px; - font-weight: bold; -} - -#uploader_drop{ - height: 100px; - width: 100%; -} - -#uploader{ -} - -#uploader_drop.hover{ - background-color: #94cde7; -} - -#uploader_over.hover{ - display: block; -} - -#uploader_buttons{ - text-align: center; - width: 100%; - margin-top: 20px; - -} -#uploader_buttons h4{ - border: 0; - background-image: none; - background-color: transparent; - font-size: 18px; - margin-bottom: 5px; - font-weight: normal; -} -.fileItem{ - height: 40px; -} -.fileItem .fileName{ - margin-left: 10px; -} -.meter { - height: 8px; /* Can be anything */ - position: relative; - background: #555; - -moz-border-radius: 25px; - -webkit-border-radius: 25px; - border-radius: 25px; - padding: 0px; - -webkit-box-shadow: inset 0 -1px 1px rgba(255,255,255,0.3); - -moz-box-shadow : inset 0 -1px 1px rgba(255,255,255,0.3); - box-shadow : inset 0 -1px 1px rgba(255,255,255,0.3); -} - -.meter > span { - display: block; - height: 100%; - -webkit-border-top-right-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -moz-border-radius-topright: 8px; - -moz-border-radius-bottomright: 8px; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; - -webkit-border-top-left-radius: 20px; - -webkit-border-bottom-left-radius: 20px; - -moz-border-radius-topleft: 20px; - -moz-border-radius-bottomleft: 20px; - border-top-left-radius: 20px; - border-bottom-left-radius: 20px; - background-color: rgb(43,194,83); - background-image: -webkit-gradient( - linear, - left bottom, - left top, - color-stop(0, rgb(43,194,83)), - color-stop(1, rgb(84,240,84)) - ); - background-image: -webkit-linear-gradient( - center bottom, - rgb(43,194,83) 37%, - rgb(84,240,84) 69% - ); - background-image: -moz-linear-gradient( - center bottom, - rgb(43,194,83) 37%, - rgb(84,240,84) 69% - ); - background-image: -ms-linear-gradient( - center bottom, - rgb(43,194,83) 37%, - rgb(84,240,84) 69% - ); - background-image: -o-linear-gradient( - center bottom, - rgb(43,194,83) 37%, - rgb(84,240,84) 69% - ); - -webkit-box-shadow: - inset 0 2px 9px rgba(255,255,255,0.3), - inset 0 -2px 6px rgba(0,0,0,0.4); - -moz-box-shadow: - inset 0 2px 9px rgba(255,255,255,0.3), - inset 0 -2px 6px rgba(0,0,0,0.4); - position: relative; - overflow: hidden; -} - - - -.file-delete{ - display: block; - width: 11px; - height: 11px; - background-image: url(../img/delete.png); - float: right; - margin-top: 3px; -} diff --git a/js/soundmap.front.js b/js/soundmap.front.js index 323899f..a38561d 100644 --- a/js/soundmap.front.js +++ b/js/soundmap.front.js @@ -97,7 +97,7 @@ layer.on('click', self.onMarkerClick); } }).addTo(this.map); - this.map.fitBounds(this.markers.getBounds()); + if (this.markers.getBounds()) this.map.fitBounds(this.markers.getBounds()); }, ajaxFail: function(){ diff --git a/soundmap.php b/soundmap.php index c00aa62..cf6b03d 100644 --- a/soundmap.php +++ b/soundmap.php @@ -92,10 +92,18 @@ if (!class_exists('Soundmap')){ 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); @@ -120,15 +128,17 @@ if (!class_exists('Soundmap')){ echo '
'; $out = ''; if ($files){ - foreach($files as $file){ - $data = wp_prepare_attachment_for_js( $file ); - $out .= "
- -
{$data['title']}
-
- Borrar
"; + foreach($files as $file) { + $data = wp_prepare_attachment_for_js( $file ); + if (is_array($data)) : + $out .= "
+ +
{$data['title']}
+
+ Borrar
"; + endif; } } echo '
' . $out . '
'; @@ -325,10 +335,12 @@ if (!class_exists('Soundmap')){ $soundmark_lat = $_POST['soundmap_marker_lat']; $soundmark_lng = $_POST['soundmap_marker_lng']; $soundmark_author = $_POST['soundmap_marker_author']; + $soundmark_date = $_POST['soundmap_marker_date']; update_post_meta($post_id, 'soundmap_marker_lat', $soundmark_lat); update_post_meta($post_id, 'soundmap_marker_lng', $soundmark_lng); update_post_meta($post_id, 'soundmap_marker_author', $soundmark_author); + update_post_meta($post_id, 'soundmap_marker_date', $soundmark_date); //before searching on all the $_POST array, let's take a look if there is any upload first! @@ -383,33 +395,135 @@ if (!class_exists('Soundmap')){ 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 */ + /* REST API Options */ add_action('rest_api_init', function() { - register_rest_field('marker','georeference', - array( - 'get_callback' => 'marker_get_georeference', - 'schema' => null - ) - ); - }); - add_action('rest_api_init',function() { - register_rest_field('marker','media', + + /* REST API expand fields */ + + register_rest_field('marker','media', array( 'get_callback' => 'marker_get_media', 'schema' => null ) ); - }); - add_action('rest_api_init', function() { - register_rest_field('marker','author', + 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); diff --git a/soundmap.php.000 b/soundmap.php.000 new file mode 100644 index 0000000..51ce41e --- /dev/null +++ b/soundmap.php.000 @@ -0,0 +1,792 @@ +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'); + // Ya no es necesario + //add_meta_box('soundmap-email', __("Uploader Mail", 'soundmap'), array($this, 'email_meta_box'), 'marker', 'side', 'low'); + } //metaboxes_register_callback + + function email_meta_box(){ + global $post; + $mail = get_post_meta($post->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 .= "
+ +
"; + 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();