function podlove_handle_media_file_download()
{
    $download_media_file = podlove_get_query_var('download_media_file');
    if (!$download_media_file) {
        return;
    }
    // tell WP Super Cache to not cache download links
    if (!defined('DONOTCACHEPAGE')) {
        define('DONOTCACHEPAGE', true);
    }
    // use this hook to short-circuit the download logic
    if (apply_filters('podlove_pre_media_file_download', false, $download_media_file)) {
        exit;
    }
    $media_file_id = (int) $download_media_file;
    $media_file = Model\MediaFile::find_by_id($media_file_id);
    if (!$media_file) {
        status_header(404);
        exit;
    }
    $episode_asset = $media_file->episode_asset();
    if (!$episode_asset || !$episode_asset->downloadable) {
        status_header(404);
        exit;
    }
    do_action('podlove_download_file', $media_file);
    // build redirect url
    $location = $media_file->add_ptm_parameters($media_file->get_file_url(), ['source' => trim(podlove_get_query_var('ptm_source')), 'context' => trim(podlove_get_query_var('ptm_context'))]);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: " . $location);
    exit;
}
 public static function update()
 {
     $file_id = (int) $_REQUEST['file_id'];
     $file = MediaFile::find_by_id($file_id);
     if (isset($_REQUEST['slug'])) {
         self::simulate_temporary_episode_slug($_REQUEST['slug']);
     }
     $info = $file->determine_file_size();
     $file->save();
     $result = array();
     $result['file_url'] = $file->get_file_url();
     $result['file_id'] = $file_id;
     $result['reachable'] = podlove_is_resolved_and_reachable_http_status($info['http_code']);
     $result['file_size'] = $file->size;
     if (!$result['reachable']) {
         $info['certinfo'] = print_r($info['certinfo'], true);
         $info['php_open_basedir'] = ini_get('open_basedir');
         $info['php_safe_mode'] = ini_get('safe_mode');
         $info['php_curl'] = in_array('curl', get_loaded_extensions());
         $info['curl_exec'] = function_exists('curl_exec');
         $errorLog = "--- # Can't reach {$file->get_file_url()}\n";
         $errorLog .= "--- # Please include this output when you report a bug\n";
         foreach ($info as $key => $value) {
             $errorLog .= "{$key}: {$value}\n";
         }
         \Podlove\Log::get()->addError($errorLog);
     }
     Ajax::respond_with_json($result);
 }
Beispiel #3
0
function handle_direct_download()
{
    if (!isset($_GET['download_media_file'])) {
        return;
    }
    $media_file_id = (int) $_GET['download_media_file'];
    $media_file = Model\MediaFile::find_by_id($media_file_id);
    if (!$media_file) {
        status_header(404);
        exit;
    }
    $episode_asset = $media_file->episode_asset();
    if (!$episode_asset || !$episode_asset->downloadable) {
        status_header(404);
        exit;
    }
    // tell WP Super Cache to not cache download links
    if (!defined('DONOTCACHEPAGE')) {
        define('DONOTCACHEPAGE', true);
    }
    header("Expires: 0");
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header("Content-Type: application/force-download");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=" . $media_file->get_download_file_name());
    header("Content-Transfer-Encoding: binary");
    if ($media_file->size > 0) {
        header('Content-Length: ' . $media_file->size);
    }
    ob_clean();
    flush();
    readfile($media_file->get_file_url());
    exit;
}
    public function dashoard_template()
    {
        ?>
		<style type="text/css">
		#podlove-log {
			height: 500px;
			overflow: auto;
			font-family: monospace;
			font-size: 14px;
			line-height: 18px;
			padding: 5px;
		}

		.log-level-200 {  }
		.log-level-400 { color: #95002B; }
		.log-level-550 { background: #95002B; color: #FAD4AF; }
		.log-level-550 a { color: #F4E6AD; }
		</style>

		<script type="text/javascript">
		jQuery(function($) {
			$(document).ready(function() {
				// scroll down
				$("#podlove-log").scrollTop($("#podlove-log")[0].scrollHeight);
			});
		});
		</script>

		<?php 
        if ($timezone = get_option('timezone_string')) {
            date_default_timezone_set($timezone);
        }
        ?>

		<div id="podlove-log">
		<?php 
        foreach (LogTable::find_all_by_where("time > " . strtotime("-1 week")) as $log_entry) {
            ?>
			<div class="log-entry log-level-<?php 
            echo $log_entry->level;
            ?>
">
				<span class="log-date">
					[<?php 
            echo date('Y-m-d H:i:s', $log_entry->time);
            ?>
]
				</span>
				<span class="log-message">
					<?php 
            echo $log_entry->message;
            ?>
				</span>
				<span class="log-extra">
					<?php 
            $data = json_decode($log_entry->context);
            if (isset($data->media_file_id)) {
                if ($media_file = Model\MediaFile::find_by_id($data->media_file_id)) {
                    if ($episode = $media_file->episode()) {
                        if ($asset = $media_file->episode_asset()) {
                            echo sprintf('<a href="%s">%s/%s</a>', get_edit_post_link($episode->post_id), $episode->slug, $asset->title);
                        }
                    }
                }
            }
            if (isset($data->error)) {
                echo sprintf(' "%s"', $data->error);
            }
            if (isset($data->episode_id)) {
                if ($episode = Model\Episode::find_by_id($data->episode_id)) {
                    echo sprintf(' <a href="%s">%s</a>', get_edit_post_link($episode->post_id), get_the_title($episode->post_id));
                }
            }
            if (isset($data->http_code)) {
                echo " HTTP Status: " . $data->http_code;
            }
            if (isset($data->mime_type) && isset($data->expected_mime_type)) {
                echo " Expected: {$data->expected_mime_type}, but found: {$data->mime_type}";
            }
            if (isset($data->type) && $data->type == 'twig') {
                echo sprintf('in template "%s" line %d', $data->template, $data->line);
            }
            ?>
				</span>
			</div>
		<?php 
        }
        ?>
		</div>
		<?php 
    }
<?php

use Podlove\Model;
// devalidate caches when media file has changed
add_action('podlove_media_file_content_has_changed', function ($media_file_id) {
    if ($media_file = Model\MediaFile::find_by_id($media_file_id)) {
        if ($episode = $media_file->episode()) {
            $episode->delete_caches();
        }
    }
});
// devalidate caches when episode content has changed
add_action('podlove_episode_content_has_changed', function ($episode_id) {
    if ($episode = Model\Episode::find_by_id($episode_id)) {
        $episode->delete_caches();
    }
});
Beispiel #6
0
function update_file()
{
    $file_id = $_REQUEST['file_id'];
    $file = \Podlove\Model\MediaFile::find_by_id($file_id);
    $info = $file->determine_file_size();
    $file->save();
    $result = array();
    $result['file_id'] = $file_id;
    $result['reachable'] = $info['http_code'] >= 200 && $info['http_code'] < 300;
    $result['file_size'] = $info['download_content_length'];
    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Content-type: application/json');
    echo json_encode($result);
    die;
}