Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/BbCode/Helper/YouTube.php
<?php

namespace XF\BbCode\Helper;

use function
intval;

class
YouTube
{
    public static function
matchCallback($url, $matchedId, \XF\Entity\BbCodeMediaSite $site, $siteId)
    {
        if (
preg_match('#(\?|&)(t|time_continue)=(?P<time>[0-9hms]+)#si', $url, $matches))
        {
           
$matchedId .= ':' . self::getSecondsFromTimeString($matches['time']);
        }

        if (
preg_match('/(?:\?|&)list=(?P<list>[a-z0-9-_]+)/si', $url, $matches))
        {
           
$matchedId .= ', list: ' . $matches['list'];
        }

        return
$matchedId;
    }

    public static function
htmlCallback($mediaKey, array $site, $siteId)
    {
       
$params = [];

        if (
preg_match_all('/(\s*,\s*(?P<param>[a-z0-9]+):\s*(?P<value>[a-z0-9-_]+))/si', $mediaKey, $matches, PREG_SET_ORDER))
        {
            foreach (
$matches AS $match)
            {
               
$params[$match['param']] = rawurlencode($match['value']);
               
$mediaKey = str_replace($match[1], '', $mediaKey);
            }
        }

       
$mediaInfo = explode(':', $mediaKey);

       
$params['id'] = rawurlencode($mediaInfo[0]);
       
$params['start'] = isset($mediaInfo[1]) ? intval($mediaInfo[1]) : 0;

        return \
XF::app()->templater()->renderTemplate('public:_media_site_embed_youtube', $params);
    }

   
/**
     * @param $startTime String in the format 00h00m00s, larger components optional
     *
     * @return int
     */
   
public static function getSecondsFromTimeString($timeString)
    {
       
$seconds = 0;

        if (
preg_match('#^(?P<hours>\d+h)?(?P<minutes>\d+m)?(?P<seconds>\d+s?)$#si', $timeString, $time))
        {
           
$seconds = intval($time['seconds']);
           
$seconds += 60 * intval($time['minutes']);
           
$seconds += 3600 * intval($time['hours']);
        }

        return
$seconds;
    }
}