Plugin Directory

Changeset 3785848


Ignore:
Timestamp:
11/05/2026 11:35:36 AM (5 hours ago)
Author:
mattytap
Message:

Update to version 3.7.0 from GitHub

Location:
mattytap-sermons
Files:
4 added
16 edited
1 copied

Legend:

Unmodified
Added
Removed
  • mattytap-sermons/tags/3.7.0/assets/js/plyr.js

    r3573498 r3785848  
    55        };
    66} else {
    7         sm_data.debug = sm_data.debug === '1';
    8         sm_data.use_native_player_safari = sm_data.use_native_player_safari === '1';
     7        // The plugin sends 1 or 0; Sermon Manager sent '1' or '0'. Accept both.
     8        sm_data.debug = String( sm_data.debug ) === '1';
     9        sm_data.use_native_player_safari = String( sm_data.use_native_player_safari ) === '1';
    910}
    1011
    1112window.addEventListener( 'DOMContentLoaded', function () {
    12         const players = Plyr.setup( document.querySelectorAll( '.wpfc-sermon-player,.wpfc-sermon-video-player' ), {
     13        const options = {
    1314                debug: sm_data.debug,
    1415                enabled: sm_data.use_native_player_safari ? ( !/Safari/.test( navigator.userAgent ) || ( /Safari/.test( navigator.userAgent ) && /Chrome|OPR/.test( navigator.userAgent ) ) ) : true,
    15         } );
     16                // Ask YouTube and Vimeo to track visitors less: YouTube plays from youtube-nocookie.com.
     17                youtube: { noCookie: true },
     18                vimeo: { dnt: true },
     19        };
     20
     21        // Load Plyr's icons from this site, when the plugin says where they are.
     22        if ( sm_data.icon_url ) {
     23                options.iconUrl = sm_data.icon_url;
     24        }
     25
     26        const players = Plyr.setup( document.querySelectorAll( '.wpfc-sermon-player,.wpfc-sermon-video-player' ), options );
    1627
    1728        for ( let p in players ) {
  • mattytap-sermons/tags/3.7.0/assets/js/plyr.min.js

    r3573498 r3785848  
    1 "undefined"==typeof sm_data?sm_data={debug:!1,use_native_player_safari:!1}:(sm_data.debug="1"===sm_data.debug,sm_data.use_native_player_safari="1"===sm_data.use_native_player_safari),window.addEventListener("DOMContentLoaded",function(){const a=Plyr.setup(document.querySelectorAll(".wpfc-sermon-player,.wpfc-sermon-video-player"),{debug:sm_data.debug,enabled:!sm_data.use_native_player_safari||!/Safari/.test(navigator.userAgent)||/Safari/.test(navigator.userAgent)&&/Chrome|OPR/.test(navigator.userAgent)});for(let b in a)a.hasOwnProperty(b)&&a[b].on("loadedmetadata ready",function(a){let b=a.detail.plyr;void 0!==b.elements.original.dataset.plyr_seek&&(b.currentTime=parseInt(b.elements.original.dataset.plyr_seek),b.embed.setCurrentTime(parseInt(b.elements.original.dataset.plyr_seek)))})});
     1"undefined"==typeof sm_data?sm_data={debug:!1,use_native_player_safari:!1}:(sm_data.debug="1"===String(sm_data.debug),sm_data.use_native_player_safari="1"===String(sm_data.use_native_player_safari)),window.addEventListener("DOMContentLoaded",(function(){const e={debug:sm_data.debug,enabled:!sm_data.use_native_player_safari||(!/Safari/.test(navigator.userAgent)||/Safari/.test(navigator.userAgent)&&/Chrome|OPR/.test(navigator.userAgent)),youtube:{noCookie:!0},vimeo:{dnt:!0}};sm_data.icon_url&&(e.iconUrl=sm_data.icon_url);const a=Plyr.setup(document.querySelectorAll(".wpfc-sermon-player,.wpfc-sermon-video-player"),e);for(let e in a)a.hasOwnProperty(e)&&a[e].on("loadedmetadata ready",(function(e){let a=e.detail.plyr;void 0!==a.elements.original.dataset.plyr_seek&&(a.currentTime=parseInt(a.elements.original.dataset.plyr_seek))}))}));
  • mattytap-sermons/tags/3.7.0/includes/sm-core-functions.php

    r3702401 r3785848  
    14751475        }
    14761476
     1477        // The placeholder the Sermon Browser and Series Engine importers insert, waiting for an excerpt.
     1478        if ( '%todo_render%' === $content ) {
     1479                return true;
     1480        }
     1481
    14771482        $sermon = get_post( $post );
    14781483
  • mattytap-sermons/tags/3.7.0/includes/sm-pro-compat-functions.php

    r3724218 r3785848  
    147147// Late, so that a page builder or other plugin that owns one of these names keeps it.
    148148add_action( 'wp_loaded', 'sm_pro_compat_register_shortcodes' );
     149
     150/**
     151 * Renders the Pro-style sermon grid block, as found on sites coming from
     152 * Church Sermon Manager, as the plugin's own sermon list.
     153 *
     154 * The block's count and sort settings carry across; its layout settings don't.
     155 *
     156 * @since 3.7.0
     157 *
     158 * @param array $attributes Block attributes, as saved in the post.
     159 *
     160 * @return string The sermon list HTML.
     161 */
     162function sm_pro_compat_sermon_grid_block( $attributes ) {
     163        $attributes = (array) $attributes;
     164        $atts       = array();
     165
     166        if ( isset( $attributes['postscount'] ) ) {
     167                $atts['count'] = $attributes['postscount'];
     168        }
     169
     170        foreach ( array( 'order' => 'order', 'orderBy' => 'orderby' ) as $from => $to ) {
     171                if ( isset( $attributes[ $from ] ) ) {
     172                        $atts[ $to ] = $attributes[ $from ];
     173                }
     174        }
     175
     176        return sm_pro_compat_archive_shortcode( $atts );
     177}
     178
     179/**
     180 * Registers the Pro-style sermon blocks, each only if nothing else has claimed it.
     181 *
     182 * @since 3.7.0
     183 */
     184function sm_pro_compat_register_blocks() {
     185        if ( ! function_exists( 'register_block_type' ) ) {
     186                return;
     187        }
     188
     189        $blocks = array(
     190                'sermons-blog-layout/sermons-grid'     => 'sm_pro_compat_sermon_grid_block',
     191                'sermons-taxonomy-layout/sermons-grid' => 'sm_pro_compat_taxonomy_shortcode',
     192        );
     193
     194        foreach ( $blocks as $name => $callback ) {
     195                if ( ! WP_Block_Type_Registry::get_instance()->is_registered( $name ) ) {
     196                        register_block_type( $name, array( 'render_callback' => $callback ) );
     197                }
     198        }
     199}
     200
     201// Late, so that a plugin that owns one of these names keeps it.
     202add_action( 'init', 'sm_pro_compat_register_blocks', 99 );
    149203
    150204/**
  • mattytap-sermons/tags/3.7.0/languages/mattytap-sermons.pot

    r3773815 r3785848  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Mattytap Sermons 3.6.3\n"
     5"Project-Id-Version: Mattytap Sermons 3.7.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mattytap-sermons\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-10-29T18:59:06+00:00\n"
     12"POT-Creation-Date: 2026-11-05T11:28:36+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    1818#. translators: %s: The plugin name. Effectively "<strong>Mattytap Sermons</strong>".
    1919#: sermons.php
    20 #: sermons.php:927
     20#: sermons.php:929
    2121msgid "Mattytap Sermons"
    2222msgstr ""
    … …  
    18531853
    18541854#: includes/sm-core-functions.php:1422
    1855 #: includes/sm-core-functions.php:1488
     1855#: includes/sm-core-functions.php:1493
    18561856msgid "Bible Text:"
    18571857msgstr ""
    18581858
    18591859#: includes/sm-core-functions.php:1438
    1860 #: includes/sm-core-functions.php:1488
     1860#: includes/sm-core-functions.php:1493
    18611861msgid "Series:"
    18621862msgstr ""
    … …  
    18781878msgstr ""
    18791879
    1880 #: includes/sm-pro-compat-functions.php:191
     1880#: includes/sm-pro-compat-functions.php:245
    18811881msgid "Mattytap Sermons found settings left by Sermon Manager Pro."
    18821882msgstr ""
    18831883
    1884 #: includes/sm-pro-compat-functions.php:192
     1884#: includes/sm-pro-compat-functions.php:246
    18851885msgid "Your sermons, series, preachers, files and main podcast feed have all carried over. Pro's custom layouts, its extra podcasts and its page-builder widgets are not part of Mattytap Sermons: pages that used Pro's sermon archive shortcode now show the standard sermon list, and Pro's extra podcast feeds now carry every sermon. Pro's data is left untouched in the database."
    18861886msgstr ""
    18871887
    1888 #: includes/sm-pro-compat-functions.php:194
     1888#: includes/sm-pro-compat-functions.php:248
    18891889msgid "Read more about switching from Pro"
    18901890msgstr ""
    18911891
    1892 #: includes/sm-pro-compat-functions.php:196
     1892#: includes/sm-pro-compat-functions.php:250
    18931893msgid "Dismiss this notice"
    18941894msgstr ""
    18951895
    1896 #: sermons.php:702
     1896#: sermons.php:704
    18971897msgid "Import failed. Please check that you selected a valid export file, then try again."
    18981898msgstr ""
    18991899
    1900 #: sermons.php:706
     1900#: sermons.php:708
    19011901msgid "Import done!"
    19021902msgstr ""
    19031903
    19041904#. translators: %s: The plugin name. Effectively "<strong>Mattytap Sermons</strong>".
    1905 #: sermons.php:927
     1905#: sermons.php:929
    19061906#, php-format
    19071907msgid "%s requires output buffering to be turned on to display content. It is currently off. Please enable it or contact your hosting provider for help. Most of plugin functionality will be disabled until output buffering is enabled."
  • mattytap-sermons/tags/3.7.0/readme.txt

    r3773815 r3785848  
    55Tested up to: 7.1
    66Requires PHP: 8.1
    7 Stable tag: 3.6.3
     7Stable tag: 3.7.0
    88License: GPLv2
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    8383Nothing of Pro's is deleted, so you can switch back if you need to. Deactivate Sermon Manager Pro and Sermon Manager before activating Mattytap Sermons.
    8484
     85= I'm coming from Church Sermon Manager. What carries over? =
     86
     87Church Sermon Manager is built on Sermon Manager and includes Sermon Manager Pro's features, so the switch works the same way. Deactivate Church Sermon Manager first, then activate Mattytap Sermons. WordPress won't activate it while the other is still running, though nothing is harmed if you try.
     88
     89Your sermons, series, preachers, topics, books, service types, images, settings and main podcast feed all carry over. Pages using its sermon archive shortcodes or its sermon grid block show the standard sermon list. Its custom layouts, page-builder widgets and extra podcast feeds behave as described for Sermon Manager Pro above. Nothing is deleted, so you can switch back.
     90
     91= Can I show my sermons on another website or in a podcast app? =
     92
     93Yes. Your sermons are published as a podcast feed at your sermon archive's address with `feed/` added, for example `https://example.com/sermons/feed/`. Each series, preacher, topic and book has its own feed too: add `feed/` to the end of its page's address. Podcast apps can subscribe to any of these, and website builders with a podcast or RSS block can show them on another site.
     94
     95For developers, the same sermons are available as data through the WordPress REST API at `/wp-json/wp/v2/wpfc_sermon`.
     96
    8597= How do I report a bug or request a feature? =
    8698
    … …  
    90102
    91103No. Mattytap Sermons is GPLv2 free software with no paid tier, no premium add-ons, and no commercial support. Bug fixes, feature requests, and translation contributions are welcome through GitHub.
     104
     105== External services ==
     106
     107Mattytap Sermons doesn't need any outside service to work. A few features do reach one, either in a visitor's browser or from your own site. Each is listed here with what is sent, when, and how to avoid it.
     108
     109* **Bible verse popups (Faithlife Reftagger).** On sermon pages, the visitor's browser loads a script from api.reftagger.com, which turns Bible references into links that show the verse when hovered. It's on by default, as it was in Sermon Manager. Turn it off under Sermons > Settings > Verse > Verse Popups. Faithlife [terms](https://faithlife.com/terms) and [privacy](https://faithlife.com/privacy).
     110* **YouTube and Vimeo.** A sermon given a YouTube or Vimeo address in its Video Link field plays in that service's own player, which the visitor's browser loads from YouTube or Vimeo when the sermon is opened. With the Plyr player, the default, YouTube videos come from youtube-nocookie.com, YouTube's reduced-tracking address, though YouTube may still set cookies of its own, and Vimeo is asked not to track the visitor. Plyr also asks noembed.com for a YouTube video's title. A video pasted into the Video Embed Code field plays exactly as pasted. Nothing is embedded unless a sermon has a video. YouTube [terms](https://www.youtube.com/t/terms) and [privacy](https://policies.google.com/privacy). Vimeo [terms](https://vimeo.com/terms) and [privacy](https://vimeo.com/privacy). [noembed](https://noembed.com/).
     111* **Audio file size.** When a sermon is saved with an audio file address rather than an uploaded file, your site sends a single request to that address to read the file's size for the podcast feed. Only public web addresses are checked, and nothing about your site is sent.
     112* **PodTrac.** Off by default. If you turn on PodTrac Tracking under Sermons > Settings > Podcast, the audio links in your podcast feed pass through dts.podtrac.com, so podcast apps fetch each episode by way of PodTrac, which counts the download. PodTrac [privacy](https://www.podtrac.com/privacy-policy/).
     113* **Importing a Sermon Manager export file.** When you import an export file under Sermons > Import/Export, your site downloads each attached file from the address recorded in the export. Only public web addresses are fetched.
     114
     115The Plyr player's icons are part of the plugin and load from your own site.
    92116
    93117== Screenshots ==
    … …  
    101125
    102126== Changelog ==
     127
     128= 3.7.0 =
     129
     130* Improved: with the Plyr player, YouTube sermons now play from youtube-nocookie.com, YouTube's reduced-tracking address, and Vimeo is asked not to track visitors. The player's icons now load from your own site instead of cdn.plyr.io. The player looks and works as before.
     131* Improved: for sites coming from Church Sermon Manager, its sermon grid block now shows the standard sermon list instead of nothing, keeping the block's number of sermons and sort order. Its taxonomy grid block shows nothing, as Sermon Manager Pro's taxonomy shortcode already does.
     132* Fix: the podcast feed now gives its explicit-content flag as `false`, the form Apple Podcasts currently documents, rather than the older `no`. The meaning is unchanged.
     133* Fix: podcast episodes in M4A, MP4, M4V or MOV format are now labelled with their own file type in the feed, rather than as MP3. Inherited from Sermon Manager.
     134* Fix: sermons imported from Sermon Browser or Series Engine with no description no longer show "%todo_render%" as their text. This covers sermons already imported too; the next save replaces it with the usual search summary. Inherited from Sermon Manager.
     135* Fix: the "Use native player on Safari" setting under Settings > Debug works again. Since 3.1 it had no effect.
     136* New: readme sections on the outside services the plugin can reach, on showing your sermons elsewhere, and on switching from Church Sermon Manager.
    103137
    104138= 3.6.3 =
    … …  
    371405== Upgrade Notice ==
    372406
     407= 3.7.0 =
     408
     409Privacy and podcast feed improvements, a landing for sites coming from Church Sermon Manager, and three fixes. Sermon pages look the same as before; no data migration.
     410
    373411= 3.6.3 =
    374412
  • mattytap-sermons/tags/3.7.0/sermons.php

    r3773815 r3785848  
    44 * Plugin URI: https://github.com/mattytap/Mattytap-Sermons
    55 * Description: A maintained restoration of WP-for-Church's Sermon Manager: add audio and video sermons, manage preachers, series, and more.
    6  * Version: 3.6.3
     6 * Version: 3.7.0
    77 * Author: Matt Fawcett (restoration); WP for Church (original)
    88 * Author URI: https://github.com/mattytap
    … …  
    337337                                        'debug'                    => defined( 'WP_DEBUG' ) && WP_DEBUG === true ? 1 : 0,
    338338                                        'use_native_player_safari' => SermonManager::getOption( 'use_native_player_safari', false ) ? 1 : 0,
     339                                        // Plyr's own icons, served from here rather than from cdn.plyr.io.
     340                                        'icon_url'                 => SM_URL . 'assets/vendor/svg/plyr.svg',
    339341                                );
    340342                                wp_add_inline_script(
  • mattytap-sermons/tags/3.7.0/views/wpfc-podcast-feed.php

    r3724191 r3785848  
    281281                        <itunes:email><?php echo esc_html( $owner_email ); ?></itunes:email>
    282282                </itunes:owner>
    283                 <itunes:explicit>no</itunes:explicit>
     283                <itunes:explicit>false</itunes:explicit>
    284284                <?php if ( $cover_image_url ) : ?>
    285285                        <itunes:image href="<?php echo esc_url( $cover_image_url ); ?>"/>
    … …  
    344344                                        $audio = preg_replace( '/^https:/i', 'http:', $audio );
    345345                                }
     346
     347                                // Name the file's real type, from the types Apple Podcasts accepts; MP3 when it can't be told.
     348                                $audio_types = array(
     349                                        'm4a' => 'audio/x-m4a',
     350                                        'mp4' => 'video/mp4',
     351                                        'm4v' => 'video/x-m4v',
     352                                        'mov' => 'video/quicktime',
     353                                );
     354                                $audio_ext   = strtolower( pathinfo( (string) wp_parse_url( $audio, PHP_URL_PATH ), PATHINFO_EXTENSION ) );
     355                                $audio_type  = isset( $audio_types[ $audio_ext ] ) ? $audio_types[ $audio_ext ] : 'audio/mpeg';
    346356                                ?>
    347357
    … …  
    376386                                                <enclosure url="<?php echo esc_url( $audio ); ?>"
    377387                                                                length="<?php echo esc_attr( $audio_file_size ); ?>"
    378                                                                 type="audio/mpeg"/>
     388                                                                type="<?php echo esc_attr( $audio_type ); ?>"/>
    379389                                        <?php endif; ?>
    380390
  • mattytap-sermons/trunk/assets/js/plyr.js

    r3573498 r3785848  
    55        };
    66} else {
    7         sm_data.debug = sm_data.debug === '1';
    8         sm_data.use_native_player_safari = sm_data.use_native_player_safari === '1';
     7        // The plugin sends 1 or 0; Sermon Manager sent '1' or '0'. Accept both.
     8        sm_data.debug = String( sm_data.debug ) === '1';
     9        sm_data.use_native_player_safari = String( sm_data.use_native_player_safari ) === '1';
    910}
    1011
    1112window.addEventListener( 'DOMContentLoaded', function () {
    12         const players = Plyr.setup( document.querySelectorAll( '.wpfc-sermon-player,.wpfc-sermon-video-player' ), {
     13        const options = {
    1314                debug: sm_data.debug,
    1415                enabled: sm_data.use_native_player_safari ? ( !/Safari/.test( navigator.userAgent ) || ( /Safari/.test( navigator.userAgent ) && /Chrome|OPR/.test( navigator.userAgent ) ) ) : true,
    15         } );
     16                // Ask YouTube and Vimeo to track visitors less: YouTube plays from youtube-nocookie.com.
     17                youtube: { noCookie: true },
     18                vimeo: { dnt: true },
     19        };
     20
     21        // Load Plyr's icons from this site, when the plugin says where they are.
     22        if ( sm_data.icon_url ) {
     23                options.iconUrl = sm_data.icon_url;
     24        }
     25
     26        const players = Plyr.setup( document.querySelectorAll( '.wpfc-sermon-player,.wpfc-sermon-video-player' ), options );
    1627
    1728        for ( let p in players ) {
  • mattytap-sermons/trunk/assets/js/plyr.min.js

    r3573498 r3785848  
    1 "undefined"==typeof sm_data?sm_data={debug:!1,use_native_player_safari:!1}:(sm_data.debug="1"===sm_data.debug,sm_data.use_native_player_safari="1"===sm_data.use_native_player_safari),window.addEventListener("DOMContentLoaded",function(){const a=Plyr.setup(document.querySelectorAll(".wpfc-sermon-player,.wpfc-sermon-video-player"),{debug:sm_data.debug,enabled:!sm_data.use_native_player_safari||!/Safari/.test(navigator.userAgent)||/Safari/.test(navigator.userAgent)&&/Chrome|OPR/.test(navigator.userAgent)});for(let b in a)a.hasOwnProperty(b)&&a[b].on("loadedmetadata ready",function(a){let b=a.detail.plyr;void 0!==b.elements.original.dataset.plyr_seek&&(b.currentTime=parseInt(b.elements.original.dataset.plyr_seek),b.embed.setCurrentTime(parseInt(b.elements.original.dataset.plyr_seek)))})});
     1"undefined"==typeof sm_data?sm_data={debug:!1,use_native_player_safari:!1}:(sm_data.debug="1"===String(sm_data.debug),sm_data.use_native_player_safari="1"===String(sm_data.use_native_player_safari)),window.addEventListener("DOMContentLoaded",(function(){const e={debug:sm_data.debug,enabled:!sm_data.use_native_player_safari||(!/Safari/.test(navigator.userAgent)||/Safari/.test(navigator.userAgent)&&/Chrome|OPR/.test(navigator.userAgent)),youtube:{noCookie:!0},vimeo:{dnt:!0}};sm_data.icon_url&&(e.iconUrl=sm_data.icon_url);const a=Plyr.setup(document.querySelectorAll(".wpfc-sermon-player,.wpfc-sermon-video-player"),e);for(let e in a)a.hasOwnProperty(e)&&a[e].on("loadedmetadata ready",(function(e){let a=e.detail.plyr;void 0!==a.elements.original.dataset.plyr_seek&&(a.currentTime=parseInt(a.elements.original.dataset.plyr_seek))}))}));
  • mattytap-sermons/trunk/includes/sm-core-functions.php

    r3702401 r3785848  
    14751475        }
    14761476
     1477        // The placeholder the Sermon Browser and Series Engine importers insert, waiting for an excerpt.
     1478        if ( '%todo_render%' === $content ) {
     1479                return true;
     1480        }
     1481
    14771482        $sermon = get_post( $post );
    14781483
  • mattytap-sermons/trunk/includes/sm-pro-compat-functions.php

    r3724218 r3785848  
    147147// Late, so that a page builder or other plugin that owns one of these names keeps it.
    148148add_action( 'wp_loaded', 'sm_pro_compat_register_shortcodes' );
     149
     150/**
     151 * Renders the Pro-style sermon grid block, as found on sites coming from
     152 * Church Sermon Manager, as the plugin's own sermon list.
     153 *
     154 * The block's count and sort settings carry across; its layout settings don't.
     155 *
     156 * @since 3.7.0
     157 *
     158 * @param array $attributes Block attributes, as saved in the post.
     159 *
     160 * @return string The sermon list HTML.
     161 */
     162function sm_pro_compat_sermon_grid_block( $attributes ) {
     163        $attributes = (array) $attributes;
     164        $atts       = array();
     165
     166        if ( isset( $attributes['postscount'] ) ) {
     167                $atts['count'] = $attributes['postscount'];
     168        }
     169
     170        foreach ( array( 'order' => 'order', 'orderBy' => 'orderby' ) as $from => $to ) {
     171                if ( isset( $attributes[ $from ] ) ) {
     172                        $atts[ $to ] = $attributes[ $from ];
     173                }
     174        }
     175
     176        return sm_pro_compat_archive_shortcode( $atts );
     177}
     178
     179/**
     180 * Registers the Pro-style sermon blocks, each only if nothing else has claimed it.
     181 *
     182 * @since 3.7.0
     183 */
     184function sm_pro_compat_register_blocks() {
     185        if ( ! function_exists( 'register_block_type' ) ) {
     186                return;
     187        }
     188
     189        $blocks = array(
     190                'sermons-blog-layout/sermons-grid'     => 'sm_pro_compat_sermon_grid_block',
     191                'sermons-taxonomy-layout/sermons-grid' => 'sm_pro_compat_taxonomy_shortcode',
     192        );
     193
     194        foreach ( $blocks as $name => $callback ) {
     195                if ( ! WP_Block_Type_Registry::get_instance()->is_registered( $name ) ) {
     196                        register_block_type( $name, array( 'render_callback' => $callback ) );
     197                }
     198        }
     199}
     200
     201// Late, so that a plugin that owns one of these names keeps it.
     202add_action( 'init', 'sm_pro_compat_register_blocks', 99 );
    149203
    150204/**
  • mattytap-sermons/trunk/languages/mattytap-sermons.pot

    r3773815 r3785848  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Mattytap Sermons 3.6.3\n"
     5"Project-Id-Version: Mattytap Sermons 3.7.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mattytap-sermons\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-10-29T18:59:06+00:00\n"
     12"POT-Creation-Date: 2026-11-05T11:28:36+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    1818#. translators: %s: The plugin name. Effectively "<strong>Mattytap Sermons</strong>".
    1919#: sermons.php
    20 #: sermons.php:927
     20#: sermons.php:929
    2121msgid "Mattytap Sermons"
    2222msgstr ""
    … …  
    18531853
    18541854#: includes/sm-core-functions.php:1422
    1855 #: includes/sm-core-functions.php:1488
     1855#: includes/sm-core-functions.php:1493
    18561856msgid "Bible Text:"
    18571857msgstr ""
    18581858
    18591859#: includes/sm-core-functions.php:1438
    1860 #: includes/sm-core-functions.php:1488
     1860#: includes/sm-core-functions.php:1493
    18611861msgid "Series:"
    18621862msgstr ""
    … …  
    18781878msgstr ""
    18791879
    1880 #: includes/sm-pro-compat-functions.php:191
     1880#: includes/sm-pro-compat-functions.php:245
    18811881msgid "Mattytap Sermons found settings left by Sermon Manager Pro."
    18821882msgstr ""
    18831883
    1884 #: includes/sm-pro-compat-functions.php:192
     1884#: includes/sm-pro-compat-functions.php:246
    18851885msgid "Your sermons, series, preachers, files and main podcast feed have all carried over. Pro's custom layouts, its extra podcasts and its page-builder widgets are not part of Mattytap Sermons: pages that used Pro's sermon archive shortcode now show the standard sermon list, and Pro's extra podcast feeds now carry every sermon. Pro's data is left untouched in the database."
    18861886msgstr ""
    18871887
    1888 #: includes/sm-pro-compat-functions.php:194
     1888#: includes/sm-pro-compat-functions.php:248
    18891889msgid "Read more about switching from Pro"
    18901890msgstr ""
    18911891
    1892 #: includes/sm-pro-compat-functions.php:196
     1892#: includes/sm-pro-compat-functions.php:250
    18931893msgid "Dismiss this notice"
    18941894msgstr ""
    18951895
    1896 #: sermons.php:702
     1896#: sermons.php:704
    18971897msgid "Import failed. Please check that you selected a valid export file, then try again."
    18981898msgstr ""
    18991899
    1900 #: sermons.php:706
     1900#: sermons.php:708
    19011901msgid "Import done!"
    19021902msgstr ""
    19031903
    19041904#. translators: %s: The plugin name. Effectively "<strong>Mattytap Sermons</strong>".
    1905 #: sermons.php:927
     1905#: sermons.php:929
    19061906#, php-format
    19071907msgid "%s requires output buffering to be turned on to display content. It is currently off. Please enable it or contact your hosting provider for help. Most of plugin functionality will be disabled until output buffering is enabled."
  • mattytap-sermons/trunk/readme.txt

    r3773815 r3785848  
    55Tested up to: 7.1
    66Requires PHP: 8.1
    7 Stable tag: 3.6.3
     7Stable tag: 3.7.0
    88License: GPLv2
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    8383Nothing of Pro's is deleted, so you can switch back if you need to. Deactivate Sermon Manager Pro and Sermon Manager before activating Mattytap Sermons.
    8484
     85= I'm coming from Church Sermon Manager. What carries over? =
     86
     87Church Sermon Manager is built on Sermon Manager and includes Sermon Manager Pro's features, so the switch works the same way. Deactivate Church Sermon Manager first, then activate Mattytap Sermons. WordPress won't activate it while the other is still running, though nothing is harmed if you try.
     88
     89Your sermons, series, preachers, topics, books, service types, images, settings and main podcast feed all carry over. Pages using its sermon archive shortcodes or its sermon grid block show the standard sermon list. Its custom layouts, page-builder widgets and extra podcast feeds behave as described for Sermon Manager Pro above. Nothing is deleted, so you can switch back.
     90
     91= Can I show my sermons on another website or in a podcast app? =
     92
     93Yes. Your sermons are published as a podcast feed at your sermon archive's address with `feed/` added, for example `https://example.com/sermons/feed/`. Each series, preacher, topic and book has its own feed too: add `feed/` to the end of its page's address. Podcast apps can subscribe to any of these, and website builders with a podcast or RSS block can show them on another site.
     94
     95For developers, the same sermons are available as data through the WordPress REST API at `/wp-json/wp/v2/wpfc_sermon`.
     96
    8597= How do I report a bug or request a feature? =
    8698
    … …  
    90102
    91103No. Mattytap Sermons is GPLv2 free software with no paid tier, no premium add-ons, and no commercial support. Bug fixes, feature requests, and translation contributions are welcome through GitHub.
     104
     105== External services ==
     106
     107Mattytap Sermons doesn't need any outside service to work. A few features do reach one, either in a visitor's browser or from your own site. Each is listed here with what is sent, when, and how to avoid it.
     108
     109* **Bible verse popups (Faithlife Reftagger).** On sermon pages, the visitor's browser loads a script from api.reftagger.com, which turns Bible references into links that show the verse when hovered. It's on by default, as it was in Sermon Manager. Turn it off under Sermons > Settings > Verse > Verse Popups. Faithlife [terms](https://faithlife.com/terms) and [privacy](https://faithlife.com/privacy).
     110* **YouTube and Vimeo.** A sermon given a YouTube or Vimeo address in its Video Link field plays in that service's own player, which the visitor's browser loads from YouTube or Vimeo when the sermon is opened. With the Plyr player, the default, YouTube videos come from youtube-nocookie.com, YouTube's reduced-tracking address, though YouTube may still set cookies of its own, and Vimeo is asked not to track the visitor. Plyr also asks noembed.com for a YouTube video's title. A video pasted into the Video Embed Code field plays exactly as pasted. Nothing is embedded unless a sermon has a video. YouTube [terms](https://www.youtube.com/t/terms) and [privacy](https://policies.google.com/privacy). Vimeo [terms](https://vimeo.com/terms) and [privacy](https://vimeo.com/privacy). [noembed](https://noembed.com/).
     111* **Audio file size.** When a sermon is saved with an audio file address rather than an uploaded file, your site sends a single request to that address to read the file's size for the podcast feed. Only public web addresses are checked, and nothing about your site is sent.
     112* **PodTrac.** Off by default. If you turn on PodTrac Tracking under Sermons > Settings > Podcast, the audio links in your podcast feed pass through dts.podtrac.com, so podcast apps fetch each episode by way of PodTrac, which counts the download. PodTrac [privacy](https://www.podtrac.com/privacy-policy/).
     113* **Importing a Sermon Manager export file.** When you import an export file under Sermons > Import/Export, your site downloads each attached file from the address recorded in the export. Only public web addresses are fetched.
     114
     115The Plyr player's icons are part of the plugin and load from your own site.
    92116
    93117== Screenshots ==
    … …  
    101125
    102126== Changelog ==
     127
     128= 3.7.0 =
     129
     130* Improved: with the Plyr player, YouTube sermons now play from youtube-nocookie.com, YouTube's reduced-tracking address, and Vimeo is asked not to track visitors. The player's icons now load from your own site instead of cdn.plyr.io. The player looks and works as before.
     131* Improved: for sites coming from Church Sermon Manager, its sermon grid block now shows the standard sermon list instead of nothing, keeping the block's number of sermons and sort order. Its taxonomy grid block shows nothing, as Sermon Manager Pro's taxonomy shortcode already does.
     132* Fix: the podcast feed now gives its explicit-content flag as `false`, the form Apple Podcasts currently documents, rather than the older `no`. The meaning is unchanged.
     133* Fix: podcast episodes in M4A, MP4, M4V or MOV format are now labelled with their own file type in the feed, rather than as MP3. Inherited from Sermon Manager.
     134* Fix: sermons imported from Sermon Browser or Series Engine with no description no longer show "%todo_render%" as their text. This covers sermons already imported too; the next save replaces it with the usual search summary. Inherited from Sermon Manager.
     135* Fix: the "Use native player on Safari" setting under Settings > Debug works again. Since 3.1 it had no effect.
     136* New: readme sections on the outside services the plugin can reach, on showing your sermons elsewhere, and on switching from Church Sermon Manager.
    103137
    104138= 3.6.3 =
    … …  
    371405== Upgrade Notice ==
    372406
     407= 3.7.0 =
     408
     409Privacy and podcast feed improvements, a landing for sites coming from Church Sermon Manager, and three fixes. Sermon pages look the same as before; no data migration.
     410
    373411= 3.6.3 =
    374412
  • mattytap-sermons/trunk/sermons.php

    r3773815 r3785848  
    44 * Plugin URI: https://github.com/mattytap/Mattytap-Sermons
    55 * Description: A maintained restoration of WP-for-Church's Sermon Manager: add audio and video sermons, manage preachers, series, and more.
    6  * Version: 3.6.3
     6 * Version: 3.7.0
    77 * Author: Matt Fawcett (restoration); WP for Church (original)
    88 * Author URI: https://github.com/mattytap
    … …  
    337337                                        'debug'                    => defined( 'WP_DEBUG' ) && WP_DEBUG === true ? 1 : 0,
    338338                                        'use_native_player_safari' => SermonManager::getOption( 'use_native_player_safari', false ) ? 1 : 0,
     339                                        // Plyr's own icons, served from here rather than from cdn.plyr.io.
     340                                        'icon_url'                 => SM_URL . 'assets/vendor/svg/plyr.svg',
    339341                                );
    340342                                wp_add_inline_script(
  • mattytap-sermons/trunk/views/wpfc-podcast-feed.php

    r3724191 r3785848  
    281281                        <itunes:email><?php echo esc_html( $owner_email ); ?></itunes:email>
    282282                </itunes:owner>
    283                 <itunes:explicit>no</itunes:explicit>
     283                <itunes:explicit>false</itunes:explicit>
    284284                <?php if ( $cover_image_url ) : ?>
    285285                        <itunes:image href="<?php echo esc_url( $cover_image_url ); ?>"/>
    … …  
    344344                                        $audio = preg_replace( '/^https:/i', 'http:', $audio );
    345345                                }
     346
     347                                // Name the file's real type, from the types Apple Podcasts accepts; MP3 when it can't be told.
     348                                $audio_types = array(
     349                                        'm4a' => 'audio/x-m4a',
     350                                        'mp4' => 'video/mp4',
     351                                        'm4v' => 'video/x-m4v',
     352                                        'mov' => 'video/quicktime',
     353                                );
     354                                $audio_ext   = strtolower( pathinfo( (string) wp_parse_url( $audio, PHP_URL_PATH ), PATHINFO_EXTENSION ) );
     355                                $audio_type  = isset( $audio_types[ $audio_ext ] ) ? $audio_types[ $audio_ext ] : 'audio/mpeg';
    346356                                ?>
    347357
    … …  
    376386                                                <enclosure url="<?php echo esc_url( $audio ); ?>"
    377387                                                                length="<?php echo esc_attr( $audio_file_size ); ?>"
    378                                                                 type="audio/mpeg"/>
     388                                                                type="<?php echo esc_attr( $audio_type ); ?>"/>
    379389                                        <?php endif; ?>
    380390
Note: See TracChangeset for help on using the changeset viewer.