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); }
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(); } });
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; }