Ejemplo n.º 1
0
 /**
  * Fetch form data for EpisodeAssets multiselect.
  * 
  * @param  \Podlove\Model\Episode $episode
  * @return array
  */
 public static function episode_assets_form($episode)
 {
     $episode_assets = Model\EpisodeAsset::all();
     // field to generate option list
     $asset_options = array();
     // values for option list
     $asset_values = array();
     foreach ($episode_assets as $asset) {
         if (!($file_type = $asset->file_type())) {
             continue;
         }
         // get formats configured for this show
         $asset_options[$asset->id] = $asset->title;
         // find out which formats are active
         $asset_values[$asset->id] = NULL !== Model\MediaFile::find_by_episode_id_and_episode_asset_id($episode->id, $asset->id);
     }
     // FIXME: empty checkbox -> no file id
     // solution: when one checks the box, an AJAX request has to create and validate the file
     $episode_assets_form = array('label' => __('Media Files', 'podlove'), 'description' => '', 'options' => $asset_options, 'default' => true, 'multi_values' => $asset_values, 'multiselect_callback' => function ($asset_id) use($episode) {
         $asset = \Podlove\Model\EpisodeAsset::find_by_id($asset_id);
         $format = $asset->file_type();
         $file = \Podlove\Model\MediaFile::find_by_episode_id_and_episode_asset_id($episode->id, $asset->id);
         $attributes = array('data-template' => $asset->url_template, 'data-extension' => $format->extension, 'data-size' => is_object($file) ? $file->size : 0, 'data-episode-asset-id' => $asset->id, 'data-episode-id' => $episode->id);
         if ($file) {
             $attributes['data-id'] = $file->id;
         }
         $out = '';
         foreach ($attributes as $key => $value) {
             $out .= sprintf('%s="%s" ', $key, $value);
         }
         return $out;
     });
     if (empty($asset_options)) {
         $episode_assets_form['description'] = sprintf('<span style="color: red">%s</span>', __('You need to configure feeds for this show. No feeds, no fun.', 'podlove')) . ' ' . sprintf('<a href="%s">%s</a>', admin_url('admin.php?page=podlove_shows_settings_handle&action=edit&show=' . $show->id), __('Edit this show', 'podlove'));
     }
     return $episode_assets_form;
 }
Ejemplo n.º 2
0
 /**
  * Get playable files for player, based on episode and player assignments.
  * 
  * @param  array  $formats      array of formats like mp3, mp3, ogg, opus, webm
  * @param  string $media_type   audio or video
  * @return array of \Podlove\Model\MediaFile
  */
 private function get_playable_files($formats, $media_type)
 {
     $playable_files = array();
     foreach ($formats as $format) {
         if (!isset($this->player_format_assignments[$media_type][$format])) {
             continue;
         }
         $episode_asset = EpisodeAsset::find_by_id($this->player_format_assignments[$media_type][$format]);
         if (!$episode_asset) {
             continue;
         }
         $media_file = MediaFile::find_by_episode_id_and_episode_asset_id($this->episode->id, $episode_asset->id);
         if ($media_file && $media_file->is_valid()) {
             $playable_files[] = $media_file;
         }
     }
     return $playable_files;
 }
Ejemplo n.º 3
0
 public function update_asset_position()
 {
     $asset_id = (int) $_REQUEST['asset_id'];
     $position = (double) $_REQUEST['position'];
     Model\EpisodeAsset::find_by_id($asset_id)->update_attributes(array('position' => $position));
     die;
 }
    /**
     * Fetch form data for EpisodeAssets multiselect.
     * 
     * @param  \Podlove\Model\Episode $episode
     * @return array
     */
    public static function episode_assets_form($episode)
    {
        $episode_assets = Model\EpisodeAsset::all();
        // field to generate option list
        $asset_options = array();
        // values for option list
        $asset_values = array();
        foreach ($episode_assets as $asset) {
            if (!($file_type = $asset->file_type())) {
                continue;
            }
            // get formats configured for this show
            $asset_options[$asset->id] = $asset->title;
            // find out which formats are active
            $asset_values[$asset->id] = NULL !== Model\MediaFile::find_by_episode_id_and_episode_asset_id($episode->id, $asset->id);
        }
        // FIXME: empty checkbox -> no file id
        // solution: when one checks the box, an AJAX request has to create and validate the file
        $episode_assets_form = array('label' => __('Media Files', 'podlove'), 'description' => '', 'options' => $asset_options, 'default' => true, 'multi_values' => $asset_values, 'before' => function () {
            ?>
				<table class='media_file_table' border="0" cellspacing="0">
					<tr>
						<th><?php 
            echo __('Enable', 'podlove');
            ?>
</th>
						<th><?php 
            echo __('Asset', 'podlove');
            ?>
</th>
						<th><?php 
            echo __('Asset File Name', 'podlove');
            ?>
</th>
						<th><?php 
            echo __('Filesize', 'podlove');
            ?>
</th>
						<th><?php 
            echo __('Status', 'podlove');
            ?>
</th>
						<th></th>
					</tr>
				<?php 
        }, 'after' => function () {
            ?>
				</table>
				<p>
					<span class="description">
						<?php 
            echo __('Media File Base URL', 'podlove') . ': ' . \Podlove\Model\Podcast::get()->media_file_base_uri;
            ?>
					</span>
				</p>
				<?php 
        }, 'around_each' => function ($callback) {
            ?>
				<tr class="media_file_row">
					<td class="enable">
					</td>
					<td class="asset">
						<?php 
            call_user_func($callback);
            ?>
					</td>
					<td class="url"></td>
					<td class="size"></td>
					<td class="status"></td>
					<td class="update"></td>
				</tr>
				<?php 
        }, 'multiselect_callback' => function ($asset_id) use($episode) {
            $asset = \Podlove\Model\EpisodeAsset::find_by_id($asset_id);
            $format = $asset->file_type();
            $file = \Podlove\Model\MediaFile::find_by_episode_id_and_episode_asset_id($episode->id, $asset->id);
            $size = is_object($file) ? (int) $file->size : 0;
            if ($size === 1) {
                $size = "unknown";
            }
            $attributes = array('data-template' => \Podlove\Model\Podcast::get()->get_url_template(), 'data-size' => $size, 'data-episode-asset-id' => $asset->id, 'data-episode-id' => $episode->id, 'data-file-url' => is_object($file) ? $file->get_file_url() : '');
            if ($file) {
                $attributes['data-id'] = $file->id;
            }
            $out = '';
            foreach ($attributes as $key => $value) {
                $out .= sprintf('%s="%s" ', $key, $value);
            }
            return $out;
        });
        if (empty($asset_options)) {
            $episode_assets_form['description'] = sprintf('<span style="color: red">%s</span>', __('You need to configure assets for this show. No assets, no fun.', 'podlove')) . ' ' . sprintf('<a href="%s">%s</a>', admin_url('admin.php?page=podlove_episode_assets_settings_handle'), __('Configure Assets', 'podlove'));
        }
        return $episode_assets_form;
    }
Ejemplo n.º 5
0
/**
 * Provides shortcode to display web player.
 *
 * Right now there is only audio support.
 *
 * Usage:
 * 	[podlove-web-player]
 * 	
 * @param  array $options
 * @return string
 */
function webplayer_shortcode($options)
{
    global $post;
    $episode = Model\Episode::find_or_create_by_post_id($post->ID);
    $podcast = Model\Podcast::get_instance();
    $formats_data = get_option('podlove_webplayer_formats');
    if (!count($formats_data)) {
        return;
    }
    $available_formats = array();
    $audio_formats = array('mp3', 'mp4', 'ogg');
    foreach ($audio_formats as $audio_format) {
        $episode_asset = Model\EpisodeAsset::find_by_id($formats_data['audio'][$audio_format]);
        if (!$episode_asset) {
            continue;
        }
        $media_file = Model\MediaFile::find_by_episode_id_and_episode_asset_id($episode->id, $episode_asset->id);
        if ($media_file) {
            $available_formats[] = sprintf('%s="%s"', $audio_format, $media_file->get_file_url());
        }
    }
    $chapters = '';
    if ($episode->chapters) {
        $chapters = 'chapters="_podlove_chapters"';
    }
    return do_shortcode('[podloveaudio ' . implode(' ', $available_formats) . ' ' . $chapters . ']');
}
 private function edit_template()
 {
     $episode_asset = \Podlove\Model\EpisodeAsset::find_by_id($_REQUEST['episode_asset']);
     echo '<h3>' . sprintf(__('Edit Episode Asset: %s', 'podlove'), $episode_asset->title) . '</h3>';
     $this->form_template($episode_asset, 'save');
 }
 /**
  * Return real file URL
  *
  * For public facing URLs, use ::get_public_file_url().
  *
  * @return string
  */
 public function get_file_url()
 {
     return $this->with_blog_scope(function () {
         $podcast = Podcast::get();
         $episode = $this->episode();
         $episode_asset = EpisodeAsset::find_by_id($this->episode_asset_id);
         $file_type = FileType::find_by_id($episode_asset->file_type_id);
         if (!$episode_asset || !$file_type || !$episode) {
             return '';
         }
         $template = $podcast->get_url_template();
         $template = apply_filters('podlove_file_url_template', $template);
         $template = str_replace('%media_file_base_url%', trailingslashit($podcast->media_file_base_uri), $template);
         $template = str_replace('%episode_slug%', \Podlove\slugify($episode->slug), $template);
         $template = str_replace('%suffix%', $episode_asset->suffix, $template);
         $template = str_replace('%format_extension%', $file_type->extension, $template);
         return trim($template);
     });
 }
 /**
  * Get playable files for player, based on episode and player assignments.
  * 
  * @param  array  $formats      array of formats like mp3, mp3, ogg, opus, webm
  * @param  string $media_type   audio or video
  * @return array of \Podlove\Model\MediaFile
  */
 private function get_playable_files($formats, $media_type)
 {
     $playable_files = [];
     $player_format_assignments = get_option('podlove_webplayer_formats');
     if (empty($player_format_assignments)) {
         error_log(print_r("Podlove Web Player: No assets are assigned.", true));
         return [];
     }
     foreach ($formats as $format) {
         if (!isset($player_format_assignments[$media_type][$format])) {
             continue;
         }
         $episode_asset = EpisodeAsset::find_by_id($player_format_assignments[$media_type][$format]);
         if (!$episode_asset) {
             continue;
         }
         $media_file = MediaFile::find_by_episode_id_and_episode_asset_id($this->episode->id, $episode_asset->id);
         if ($media_file && $media_file->is_valid()) {
             $playable_files[] = $media_file;
         }
     }
     return $playable_files;
 }