Esempio n. 1
0
function powerpress_get_enclosure_data_podpress($post_id, $mediaNum = 0, $include_premium = false)
{
    $podPressMedia = powerpress_get_post_meta($post_id, 'podPressMedia');
    if (!$podPressMedia) {
        $podPressMedia = powerpress_get_post_meta($post_id, '_podPressMedia');
    }
    // handles latest verions of PodPress
    if ($podPressMedia) {
        if (!is_array($podPressMedia)) {
            // Sometimes the stored data gets messed up, we can fix it here:
            $podPressMedia = powerpress_repair_serialize($podPressMedia);
            $podPressMedia = @unserialize($podPressMedia);
        }
        // Do it a second time in case it is double serialized
        if (!is_array($podPressMedia)) {
            // Sometimes the stored data gets messed up, we can fix it here:
            $podPressMedia = powerpress_repair_serialize($podPressMedia);
            $podPressMedia = @unserialize($podPressMedia);
        }
        if (is_array($podPressMedia) && isset($podPressMedia[$mediaNum]) && isset($podPressMedia[$mediaNum]['URI'])) {
            if ($include_premium == false && isset($podPressMedia[$mediaNum]['premium_only']) && ($podPressMedia[$mediaNum]['premium_only'] == 'on' || $podPressMedia[$mediaNum]['premium_only'] == true)) {
                return false;
            }
            $Data = array();
            $Data['id'] = $post_id;
            $Data['feed'] = 'podcast';
            $Data['duration'] = 0;
            $Data['url'] = '';
            $Data['size'] = 0;
            $Data['type'] = '';
            $Data['width'] = '';
            $Data['height'] = '';
            $Data['url'] = $podPressMedia[$mediaNum]['URI'];
            if (isset($podPressMedia[$mediaNum]['size'])) {
                $Data['size'] = $podPressMedia[$mediaNum]['size'];
            }
            if (isset($PodPressSettings[$mediaNum]['duration'])) {
                $Data['duration'] = $podPressMedia[$mediaNum]['duration'];
            }
            if (isset($PodPressSettings[$mediaNum]['previewImage'])) {
                $Data['image'] = $podPressMedia[$mediaNum]['previewImage'];
            }
            if (strpos($Data['url'], 'http://') !== 0 && strpos($Data['url'], 'https://') !== 0) {
                $PodPressSettings = get_option('podPress_config');
                if ($PodPressSettings && isset($PodPressSettings['mediaWebPath'])) {
                    $Data['url'] = rtrim($PodpressSettings['mediaWebPath'], '/') . '/' . ltrim($Data['url'], '/');
                }
                unset($PodPressSettings);
            }
            if (strpos($Data['url'], 'http://') !== 0 && strpos($Data['url'], 'https://') !== 0) {
                $Settings = get_option('powerpress_general');
                if ($Settings && isset($Settings['default_url'])) {
                    $Data['url'] = rtrim($Settings['default_url'], '/') . '/' . ltrim($Data['url'], '/');
                }
            }
            if (strpos($Data['url'], 'http://') !== 0 && strpos($Data['url'], 'https://') !== 0) {
                return false;
            }
            $Data['type'] = powerpress_get_contenttype($Data['url']);
            // Detect the content type
            $Data['url'] = powerpress_add_redirect_url($Data['url'], $Data['feed']);
            // Add redirects to Media URL
            return $Data;
        }
    }
    return false;
}
function powerpress_get_podpress_episodes($hide_errors = true)
{
    global $wpdb;
    $PodpressSettings = get_option('podPress_config');
    if (empty($PodpressSettings)) {
        $PodpressSettings = array();
        $PodpressSettings['mediaWebPath'] = '';
        $powerpress_settings = get_option('powerpress_general');
        if (!empty($powerpress_settings['default_url'])) {
            $PodpressSettings['mediaWebPath'] = $powerpress_settings['default_url'];
            powerpress_page_message_add_notice(sprintf(__('Unable to detect PodPress media URL setting. Using the PowerPress setting "Default Media URL" (%s) instead.', 'powerpress'), esc_attr($PodpressSettings['mediaWebPath'])));
        } else {
            // We need to print a warning that they need to configure their podPress settings as the settings are no longer found in the database.
            powerpress_page_message_add_error(__('Unable to detect PodPress media URL setting. Please set the "Default Media URL" setting in PowerPress to properly import podcast episodes.', 'powerpress'));
        }
    }
    $media_url = $PodpressSettings['mediaWebPath'];
    if (substr($media_url, 0, -1) != '/') {
        $media_url .= '/';
    }
    // Make sure the URL has a trailing slash
    $return = array();
    $return['feeds_required'] = 0;
    $query = "SELECT p.ID, p.post_title, p.post_date, pm.meta_value ";
    $query .= "FROM {$wpdb->posts} AS p ";
    $query .= "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id ";
    $query .= "WHERE (pm.meta_key = 'podPressMedia' OR pm.meta_key = '_podPressMedia') ";
    $query .= "AND p.post_type != 'revision' ";
    $query .= "GROUP BY p.ID ";
    $query .= "ORDER BY p.post_date DESC ";
    $results_data = $wpdb->get_results($query, ARRAY_A);
    if ($results_data) {
        while (list($null, $row) = each($results_data)) {
            //$return = $row;
            $podpress_data = @unserialize($row['meta_value']);
            if (!$podpress_data) {
                $podpress_data_serialized = powerpress_repair_serialize($row['meta_value']);
                $podpress_data = @unserialize($podpress_data_serialized);
                if (!is_array($podpress_data) && is_string($podpress_data)) {
                    $podpress_data_two = @unserialize($podpress_data);
                    if (!is_array($podpress_data_two)) {
                        $podpress_data_serialized = powerpress_repair_serialize($podpress_data);
                        $podpress_data_two = @unserialize($podPressMedia);
                    }
                    if (is_array($podpress_data_two)) {
                        $podpress_data = $podpress_data_two;
                    }
                }
            } else {
                if (is_string($podpress_data)) {
                    // May have been double serialized...
                    $podpress_unserialized = @unserialize($podpress_data);
                    if (!$podpress_unserialized) {
                        $podpress_data_serialized = powerpress_repair_serialize($podpress_data);
                        $podpress_unserialized = @unserialize($podpress_data_serialized);
                    }
                    $podpress_data = $podpress_unserialized;
                }
            }
            if ($podpress_data) {
                if (!is_array($podpress_data)) {
                    // display a warning here...
                    if ($hide_errors == false) {
                        powerpress_page_message_add_error(sprintf(__('Error decoding PodPress data for post "%s"', 'powerpress'), est_attr($row['post_title'])));
                    }
                    continue;
                }
                $clean_data = array();
                while (list($episode_index, $episode_data) = each($podpress_data)) {
                    if (trim($episode_data['URI']) != '') {
                        $MediaURL = $episode_data['URI'];
                        if (strtolower(substr($MediaURL, 0, 4)) != 'http') {
                            $MediaURL = $media_url . rtrim($episode_data['URI'], '/');
                        }
                        if (!powerpress_only_include_ext($MediaURL)) {
                            // Skip this media type
                            continue;
                        }
                        $clean_data[$episode_index] = array();
                        $clean_data[$episode_index]['url'] = $MediaURL;
                        $clean_data[$episode_index]['size'] = $episode_data['size'];
                        if (trim($episode_data['duration']) && $episode_data['duration'] != 'UNKNOWN') {
                            $clean_data[$episode_index]['duration'] = powerpress_readable_duration($episode_data['duration'], true);
                        }
                        $ContentType = powerpress_get_contenttype($episode_data['URI']);
                        if ($ContentType) {
                            $clean_data[$episode_index]['type'] = trim($ContentType);
                        }
                        if (!empty($episode_data['previewImage'])) {
                            $clean_data[$episode_index]['image'] = $episode_data['previewImage'];
                        }
                    }
                }
                if (count($clean_data) == 0) {
                    continue;
                }
                // Go to the next record...
                if ($return['feeds_required'] < count($clean_data)) {
                    $return['feeds_required'] = count($clean_data);
                }
                $return[$row['ID']] = array();
                $return[$row['ID']]['podpress_data'] = $clean_data;
                $return[$row['ID']]['post_title'] = $row['post_title'];
                $return[$row['ID']]['post_date'] = $row['post_date'];
                // Check that there is no other enclosure...
                $enclosure_data = get_post_meta($row['ID'], 'enclosure', true);
                if ($enclosure_data) {
                    $Included = false;
                    list($EnclosureURL, $null) = explode("\n", $enclosure_data);
                    $return[$row['ID']]['enclosure'] = $enclosure_data;
                    while (list($episode_index_temp, $episode_data_temp) = each($clean_data)) {
                        if (trim($EnclosureURL) == trim($episode_data_temp['url'])) {
                            $Included = true;
                            break;
                            // We found the media already.
                        } else {
                            if (trim($episode_data_temp['url']) == '') {
                                unset($clean_data[$episode_index_temp]);
                                // Empty URL, lets remove it so we don't accidently use it
                            }
                        }
                    }
                    reset($clean_data);
                    if ($Included == false && $return['feeds_required'] < count($clean_data) + 1) {
                        $return['feeds_required'] = count($clean_data) + 1;
                        // We can't remove this enclosure
                    }
                }
                // Check for additional itunes data in the database..
                if (false) {
                    $itunes_data = get_post_meta($row['ID'], 'podPressPostSpecific', true);
                    if ($itunes_data && is_array($itunes_data)) {
                        $return[$row['ID']]['itunes'] = array();
                        // Add iTunes stuff...
                        if ($itunes_data['itunes:subtitle'] != '##PostExcerpt##' && $itunes_data['itunes:subtitle'] != '') {
                            $return[$row['ID']]['itunes']['subtitle'] = $itunes_data['itunes:subtitle'];
                        }
                        if ($itunes_data['itunes:summary'] != '##PostExcerpt##' && $itunes_data['itunes:summary'] != '##Global##' && $itunes_data['itunes:summary'] != '') {
                            $return[$row['ID']]['itunes']['summary'] = $itunes_data['itunes:summary'];
                        }
                        if ($itunes_data['itunes:author'] != '##Global##' && $itunes_data['itunes:author'] != '') {
                            $return[$row['ID']]['itunes']['author'] = $itunes_data['itunes:author'];
                        }
                        if (strtolower($itunes_data['itunes:explicit']) == 'yes') {
                            $return[$row['ID']]['itunes']['explicit'] = 'yes';
                        }
                        if (strtolower($itunes_data['itunes:block']) == 'yes') {
                            $return[$row['ID']]['itunes']['block'] = 'yes';
                        }
                        if (count($return[$row['ID']]['itunes']) == 0) {
                            unset($return[$row['ID']]['itunes']);
                        }
                    }
                }
            }
        }
    }
    return $return;
}