feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory - Added PROJECT_OVERVIEW.md with feature highlights and getting started guide - Added ARCHITECTURE.md with system design and technical details - Added SECURITY.md with comprehensive security implementation guide - Added DEVELOPMENT.md with development workflows and best practices - Added DEPLOYMENT.md with production deployment instructions - Added API.md with complete REST API documentation - Added CONTRIBUTING.md with contribution guidelines - Added CHANGELOG.md with version history and migration notes - Reorganized all documentation files into docs/ directory for better organization - Updated README.md with proper documentation links and quick navigation - Enhanced project structure with professional documentation standards
This commit is contained in:
27
f_modules/m_frontend/m_player/adv.php
Normal file
27
f_modules/m_frontend/m_player/adv.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
|
||||
$ad_impr = $class_filter->clr_str($_GET["impression"]);
|
||||
$ad_click = $class_filter->clr_str($_GET["click"]);
|
||||
$ad_type = $class_filter->clr_str($_GET["t"]);
|
||||
$ad_key = ($ad_impr != '' ? $ad_impr : $ad_click);
|
||||
$ad_click_track = $class_database->singleFieldValue('db_' . $ad_type . 'adentries', 'ad_click_track', 'ad_key', $ad_key);
|
||||
|
||||
$db_field = $ad_impr != '' ? 'ad_impressions' : ($ad_click != '' ? 'ad_clicks' : null);
|
||||
$u = ($db_field != '' and $ad_click_track == 1) ? $db->execute(sprintf("UPDATE `db_%sadentries` SET `%s`=`%s`+1 WHERE `ad_key`='%s' LIMIT 1;", $ad_type, $db_field, $db_field, $ad_key)) : null;
|
||||
8
f_modules/m_frontend/m_player/audio_playlist.php
Normal file
8
f_modules/m_frontend/m_player/audio_playlist.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// Audio playlist player - basic implementation
|
||||
echo "<h1>Audio Playlist Player</h1>";
|
||||
echo "<p>Audio playlist functionality coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
276
f_modules/m_frontend/m_player/embed.php
Normal file
276
f_modules/m_frontend/m_player/embed.php
Normal file
@@ -0,0 +1,276 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
include_once 'f_core/f_classes/class.membership.php';
|
||||
|
||||
$type = isset($_GET["a"]) ? 'audio' : (isset($_GET["l"]) ? 'live' : (isset($_GET["s"]) ? 'short' : 'video'));
|
||||
$file_key = $class_filter->clr_str($_GET[$type[0]]);
|
||||
$pl_key = $class_filter->clr_str($_GET["p"]);
|
||||
$cfg[] = $class_database->getConfigurations('video_player,audio_player,affiliate_tracking_id');
|
||||
$_cfg = unserialize($class_database->singleFieldValue('db_fileplayers', 'db_config', 'db_name', $cfg["video_player"] . '_embed'));
|
||||
|
||||
if ($pl_key) {
|
||||
$pl = unserialize($class_database->singleFieldValue('db_' . $type . 'playlists', 'pl_files', 'pl_key', $pl_key));
|
||||
$file_key = $pl[0];
|
||||
}
|
||||
|
||||
$u = $db->execute(sprintf("SELECT
|
||||
A.`usr_key`, A.`usr_live`,
|
||||
B.`usr_id`, B.`embed_src`,
|
||||
B.`file_title`, B.`file_category`, B.`thumb_cache`
|
||||
FROM
|
||||
`db_accountuser` A, `db_%sfiles` B
|
||||
WHERE
|
||||
A.`usr_id`=B.`usr_id` AND
|
||||
B.`file_key`='%s'
|
||||
LIMIT 1;", $type, $file_key));
|
||||
$usr_key = $u->fields["usr_key"];
|
||||
$channel_id = (int) $u->fields["usr_id"];
|
||||
$title = $u->fields["file_title"];
|
||||
$embed_src = $u->fields["embed_src"];
|
||||
$live = $u->fields["usr_live"];
|
||||
$thumb_cache = $u->fields["thumb_cache"];
|
||||
$thumb_cache = $thumb_cache > 1 ? $thumb_cache : null;
|
||||
$mob = VHref::isMobile();
|
||||
|
||||
$tmb = $cfg["media_files_url"] . '/' . $usr_key . '/t/' . $file_key . '/0' . $thumb_cache . '.jpg';
|
||||
|
||||
// Membership gating (scaffold): if a tier is required and viewer lacks access, show upsell instead of player
|
||||
if (VMembership::enabled()) {
|
||||
$reqTier = VMembership::getRequiredTierForFile($type, $file_key);
|
||||
if ($reqTier && !VMembership::hasAccess((int) $_SESSION['USER_ID'], $channel_id, $reqTier)) {
|
||||
$join_url = $cfg['main_url'] . '/' . VHref::getKey('channel') . '/' . $usr_key . '#join';
|
||||
echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">'
|
||||
. '<title>' . htmlspecialchars($title, ENT_QUOTES, 'UTF-8') . '</title>'
|
||||
. '<style>html,body{height:100%;margin:0} .gate{display:flex;align-items:center;justify-content:center;height:100%;background:#000;color:#fff;text-align:center} .btn{display:inline-block;margin-top:12px;padding:10px 16px;background:#ff4e45;color:#fff;text-decoration:none;border-radius:4px} img{max-width:100%;opacity:.35}</style>'
|
||||
. '</head><body><div class="gate"><div><img src="' . htmlspecialchars($tmb, ENT_QUOTES, 'UTF-8') . '" alt=""/><div>Members-only video</div><a class="btn" href="' . $join_url . '" target="_top">Join to watch</a></div></div></body></html>';
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($cfg["video_player"]) {
|
||||
case "vjs":
|
||||
$tmb_url = VGenerate::thumbSigned($type, $file_key, array($usr_key, $thumb_cache));
|
||||
if ($type == 'short') {
|
||||
$_cfg["vjs_advertising"] = 0;
|
||||
}
|
||||
|
||||
if ($_cfg["vjs_advertising"] == 1 and $embed_src == 'local') {
|
||||
$t = $db->execute(sprintf("SELECT `vjs_ads` FROM `db_%sfiles` WHERE `file_key`='%s' LIMIT 1;", $type, $file_key));
|
||||
$ads = $t->fields["vjs_ads"];
|
||||
|
||||
if ($ads != '') {
|
||||
//found ads assigned to video
|
||||
$ar = unserialize($ads);
|
||||
$sql = sprintf("SELECT `ad_id`, `ad_key`, `ad_client`, `ad_tag`, `ad_skip`, `ad_comp_div`, `ad_comp_id`, `ad_comp_w`, `ad_comp_h` FROM `db_vjsadentries` WHERE `ad_type`='dedicated' AND `ad_active`='1'%s AND `ad_id` IN (%s) ORDER BY RAND() LIMIT 1;", ($mob ? " AND `ad_mobile`='1'" : null), ($ar[0] > 0 ? implode(',', $ar) : 0));
|
||||
$t = $db->execute($sql);
|
||||
} else {
|
||||
//check for category ads
|
||||
$t = $db->execute(sprintf("SELECT `ct_ads` FROM `db_categories` WHERE `ct_id`='%s' LIMIT 1;", $res->fields["file_category"]));
|
||||
$ads = $t->fields["ct_ads"];
|
||||
if ($ads != '') {
|
||||
//found ads assigned to category
|
||||
$ar = unserialize($ads);
|
||||
$sql = sprintf("SELECT `ad_id`, `ad_key`, `ad_client`, `ad_tag`, `ad_skip`, `ad_comp_div`, `ad_comp_id`, `ad_comp_w`, `ad_comp_h` FROM `db_vjsadentries` WHERE `ad_type`='dedicated' AND `ad_active`='1'%s AND `ad_id` IN (%s) ORDER BY RAND() LIMIT 1;", ($mob ? " AND `ad_mobile`='1'" : null), ($ar[0] > 0 ? implode(',', $ar) : 0));
|
||||
$t = $db->execute($sql);
|
||||
} else {
|
||||
//no video ads assigned/generate a random ad
|
||||
$sql = sprintf("SELECT `ad_id`, `ad_key`, `ad_client`, `ad_tag`, `ad_skip`, `ad_comp_div`, `ad_comp_id`, `ad_comp_w`, `ad_comp_h` FROM `db_vjsadentries` WHERE `ad_type`='shared' AND `ad_active`='1'%s ORDER BY RAND() LIMIT 1;", ($mob ? " AND `ad_mobile`='1'" : null));
|
||||
$t = $db->execute($sql);
|
||||
}
|
||||
}
|
||||
|
||||
if ($t->fields["ad_id"]) {
|
||||
$ad_client = ($t->fields["ad_client"] == 'custom' ? 'vast' : $t->fields["ad_client"]);
|
||||
$ad_tag_url = ($t->fields["ad_client"] == 'custom' ? $cfg['main_url'] . '/' . VHref::getKey('vast') . '?t=vjs&v=' . $t->fields["ad_key"] : $t->fields["ad_tag"]);
|
||||
$ad_skip = ($t->fields["ad_client"] == 'custom' ? $t->fields["ad_skip"] : false);
|
||||
$ad_tag_comp = $t->fields["ad_comp_div"];
|
||||
$ad_tag_comp_id = $t->fields["ad_comp_id"];
|
||||
$ad_tag_comp_w = $t->fields["ad_comp_w"];
|
||||
$ad_tag_comp_h = $t->fields["ad_comp_h"];
|
||||
|
||||
$smarty->assign('ad_client', ($ad_client == 'custom' ? 'vast' : $t->fields["ad_client"]));
|
||||
}
|
||||
}
|
||||
$css = '<link rel="stylesheet" type="text/css" href="https://vjs.zencdn.net/5.19/video-js.min.css" /><style>html, body { height: 100%; padding: 0; margin: 0; }</style>';
|
||||
$css_extra = '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/videojs-styles.min.css" />';
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['styles_url'] . '/theme/theme.min.css" />';
|
||||
if ($_cfg["vjs_advertising"] == 1 and $embed_src == 'local') {
|
||||
if ($ad_client == 'vast' or $ad_client == 'custom') {
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/videojs.vast.vpaid.min.css" />';
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/vast-button.css" />';
|
||||
} elseif ($ad_client == 'ima') {
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/videojs.ads.css" />';
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/videojs.ima.css" />';
|
||||
} elseif ($ad_client == 'vamp') {
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/videojs.ads.css" />';
|
||||
$css_extra .= '<link rel="stylesheet" type="text/css" href="' . $cfg['scripts_url'] . '/shared/videojs/vast-button.css" />';
|
||||
}
|
||||
if ($ad_tag_comp == 1) {
|
||||
$css_extra .= '<script type="text/javascript">var googletag = googletag || {};googletag.cmd = googletag.cmd || [];(function() {var gads = document.createElement("script");gads.async = true;gads.type = "text/javascript";gads.src = "//www.googletagservices.com/tag/js/gpt.js";var node = document.getElementsByTagName("script")[0];node.parentNode.insertBefore(gads, node);})();</script>';
|
||||
$css_extra .= '<script type="text/javascript">googletag.cmd.push(function() {googletag.defineSlot("' . $ad_tag_comp_id . '", [' . $ad_tag_comp_w . ', ' . $ad_tag_comp_h . '], "ima-companionDiv").addService(googletag.companionAds()).addService(googletag.pubads());googletag.companionAds().setRefreshUnfilledSlots(true);googletag.pubads().enableVideoAds();googletag.enableServices();});</script>';
|
||||
}
|
||||
}
|
||||
$player_key = null;
|
||||
$player_style = 'width: 100%; height: 100%;';
|
||||
$player_br = null;
|
||||
$player_cp = null;
|
||||
$player_js = 'https://vjs.zencdn.net/5.19/video.min.js';
|
||||
|
||||
$player_js_extra = '<script type="text/javascript">var current_url = "' . $cfg["main_url"] . '/"; var logo="' . $_cfg["vjs_logo_file"] . '"; var logohref="' . $cfg["main_url"] . '/' . VGenerate::fileHref($type[0], $file_key, $title) . '"</script>';
|
||||
if ($_cfg["vjs_advertising"] == 1) {
|
||||
$player_js_extra .= '<script type="text/javascript">var fk="' . $file_key . '";var ad_skip="' . $ad_skip . '";var em=1;var ad_client="' . ($ad_client == 'custom' ? 'vast' : $ad_client) . '";var adTagUrl="' . $ad_tag_url . '";var compjs="' . ($mob ? 'ads.mob' : ($ad_tag_comp == 1 ? 'ads.comp' : 'ads')) . '";</script>';
|
||||
if ($ad_client == 'ima' and $embed_src == 'local') {
|
||||
$player_js_extra .= '<script type="text/javascript" src="https://imasdk.googleapis.com/js/sdkloader/ima3.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs.ads.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs.ima.js"></script>';
|
||||
} elseif ($ad_client == 'vamp' and $embed_src == 'local') {
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs.ads.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/vast-client.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/vmap-client.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs-ad-scheduler.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/ads.vmap.js"></script>';
|
||||
} elseif (($ad_client == 'vast' or $ad_client == 'custom') and $embed_src == 'local') {
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs_5.vast.vpaid.min.js"></script>';
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/ads.vast.js"></script>';
|
||||
}
|
||||
}
|
||||
$player_js_extra .= '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs-scripts.min.js"></script>';
|
||||
$player_js_extra .= $live == 1 ? '<script type="text/javascript" src="' . $cfg['scripts_url'] . '/shared/videojs/videojs-hlsjs-plugin.js"></script>' : null;
|
||||
$player_js_extra .= $live == 1 ? '<script type="text/javascript">$(window).on("unload", function(){var fd = new FormData();fd.append("c", "' . $file_key . '");navigator.sendBeacon("' . $cfg["main_url"] . '/' . VHref::getKey("viewers") . '?c=' . $file_key . '", fd);});</script>' : null;
|
||||
|
||||
$css_extra .= '<style>
|
||||
.vjs-has-started:not(.vjs-paused) #play,.vjs-big-play-button{display:none !important}.play-btn{width:40px;height:40px;background:radial-gradient(#06a2cb 50%,rgba(255,255,255,0.15) 52%);border-radius:50%;display:inline-block;margin:auto;position:absolute;overflow:hidden;top:0;right:0;bottom:0;left:0;z-index:2}.play-btn::after{content:\'\';position:absolute;left:50%;top:50%;-webkit-transform:translateX(-40%) translateY(-50%);transform:translateX(-40%) translateY(-50%);width:0;height:0;border-top:8px solid transparent;border-bottom:8px solid transparent;border-left:15px solid #fff;z-index:100;-webkit-transition:all 400ms cubic-bezier(0.55,0.055,0.675,0.19);transition:all 400ms cubic-bezier(0.55,0.055,0.675,0.19)}.play-btn:before{content:\'\';position:absolute;width:50px;height:50px;-webkit-animation-delay:0s;animation-delay:0s;-webkit-animation:pulsate1 2s;animation:pulsate1 2s;-webkit-animation-direction:forwards;animation-direction:forwards;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:steps;animation-timing-function:steps;opacity:9;border-radius:50%;border:2px solid #7abbec;top:-12%;left:-12%;background:solid #7abbec}.play-btn:hover::after{border-left:15px solid #333;-webkit-transform:scale(20);transform:scale(20)}.play-btn:hover::before{content:\'\';position:absolute;left:50%;top:50%;-webkit-transform:translateX(-40%) translateY(-50%);transform:translateX(-40%) translateY(-50%);width:0;height:0;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-left:20px solid #06a2cb;z-index:200;-webkit-animation:none;animation:none;border-radius:0}@-webkit-keyframes pulsate1{0%{-webkit-transform:scale(0.6,0.6);transform:scale(0.6,0.6);opacity:1}100%{-webkit-transform:scale(1,1);transform:scale(1,1);opacity:0}}@keyframes pulsate1{0%{-webkit-transform:scale(0.6,0.6);transform:scale(0.6,0.6);opacity:1}100%{-webkit-transform:scale(1,1);transform:scale(1,1);opacity:0}}@-webkit-keyframes pulsate2{0%{-webkit-transform:scale(0.1,0.1);transform:scale(0.1,0.1);opacity:1}100%{-webkit-transform:scale(1,1);transform:scale(1,1);opacity:0}}@-webkit-keyframes spin{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.stroke-dotted{opacity:0;stroke-dasharray:4,5;stroke-width:1px;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-animation:spin 4s infinite linear;animation:spin 4s infinite linear;-webkit-transition:opacity 1s ease,stroke-width 1s ease;transition:opacity 1s ease,stroke-width 1s ease}.stroke-solid{stroke-dashoffset:0;stroke-dashArray:300;stroke-width:4px;-webkit-transition:stroke-dashoffset 1s ease,opacity 1s ease;transition:stroke-dashoffset 1s ease,opacity 1s ease}.icon{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:-webkit-transform 200ms ease-out;transition:-webkit-transform 200ms ease-out;transition:transform 200ms ease-out;transition:transform 200ms ease-out,-webkit-transform 200ms ease-out}#play:hover .stroke-dotted{stroke-width:4px;opacity:1}#play:hover .stroke-solid{opacity:0;stroke-dashoffset:300}#play:hover .icon{-webkit-transform:scale(1.05);transform:scale(1.05)}#play{cursor:pointer;position:absolute;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}@font-face{font-family:\'icomoonmlm\';src:url(\'../fonts/icomoonmlm.eot\');src:url(\'../fonts/icomoonmlm.eot?#iefix\') format(\'embedded-opentype\'),url(\'../fonts/icomoonmlm.woff\') format(\'woff\'),url(\'../fonts/icomoonmlm.ttf\') format(\'truetype\'),url(\'../fonts/icomoonmlm.svg#icomoon\') format(\'svg\');font-weight:normal;font-style:normal}
|
||||
.video-js .vjs-progress-control,.vjs-default-skin .vjs-progress-control{height:10px;bottom:36px;background-color:transparent}
|
||||
.video-js .vjs-control-bar,.vjs-default-skin .vjs-control-bar{background-color:transparent}
|
||||
.video-js .vjs-progress-control .vjs-slider,.vjs-default-skin .vjs-progress-control .vjs-slider{height:3px}
|
||||
.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress div{height:3px}
|
||||
.video-js .vjs-play-progress:before,.vjs-default-skin .vjs-play-progress:before{height:3px}
|
||||
.vjs-progress-control:hover .vjs-play-progress:before{height:12px}
|
||||
.video-js button, .video-js .vjs-menu-button{color:#ddd !important}
|
||||
.video-js button:hover, .video-js .vjs-menu-button:hover{color:#fff !important}
|
||||
.video-js .vjs-time-control{font-family:"Roboto", Arial;font-size:13px}
|
||||
.video-js .vjs-fullscreen-control,.vjs-default-skin .vjs-fullscreen-control{margin-right:10px;margin-left:5px}
|
||||
.vjs-resolution-button .vjs-resolution-button-label,.video-js .vjs-playback-rate .vjs-playback-rate-value,.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value{line-height:40px;font-family:"Roboto", Arial;font-size:13px;font-weight:500}
|
||||
.vjs-resolution-button{margin-left:5px !important}
|
||||
.video-js .vjs-menu, .vjs-default-skin .vjs-menu{bottom:10px;z-index:9999}
|
||||
.vjs-resolution-button .vjs-menu li{font-family:"Roboto",Arial;font-size:12px}
|
||||
.vjs-error .vjs-error-display:before,.vjs-menu .vjs-menu-content, .vjs-no-js{font-family:"Roboto",Arial}
|
||||
.vjs-menu li{padding:0.5em 0}
|
||||
.vjs-volume-menu-button:hover + .vjs-current-time{left:170px;transition:all .3s;-webkit-transition:all .3s}
|
||||
.vjs-volume-menu-button:hover + .vjs-current-time + .vjs-time-divider{left:202px;transition:all .3s;-webkit-transition:all .3s}
|
||||
.vjs-volume-menu-button:hover + .vjs-current-time + .vjs-time-divider + .vjs-duration{left:214px;transition:all .3s;-webkit-transition:all .3s}
|
||||
.pv-text{position:absolute;width:100%;bottom:75px;text-align:center;display:none}
|
||||
.pv-text span{position:relative;font-size:14px;padding:15px 25px;border-radius:5px;border:1px solid #666}
|
||||
.pv-text i{position:absolute;font-size:8px;right:5px;top:7px;cursor:pointer}
|
||||
.vjs-user-inactive .pv-text{display:none !important}
|
||||
.vjs-paused.vjs-user-inactive .pv-text{display:block !important}
|
||||
.vjs-hd{padding-top: 56.25%;width: 100%;position: relative;}
|
||||
.live-embed{position:absolute;top:0}
|
||||
</style>
|
||||
';
|
||||
break;
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<title><?php echo $title; ?></title>
|
||||
<?php
|
||||
echo $css;
|
||||
if (isset($css_extra)) {
|
||||
echo $css_extra;
|
||||
}
|
||||
?>
|
||||
<script type="text/javascript" src="<?php echo $cfg['javascript_url']; ?>/jquery.min.js"></script>
|
||||
<script type="text/javascript">jQuery.migrateMute=true;</script>
|
||||
<script type="text/javascript">if(navigator.platform==='iPad'||navigator.platform==='iPhone'||navigator.platform==='iPod'){WebFont.load({google:{families:['Roboto:300,400,500,600,700']}});}</script>
|
||||
<script type="text/javascript" src="<?php echo $player_js; ?>"></script>
|
||||
<script type="text/javascript"><?php echo $player_key; ?></script>
|
||||
<?php
|
||||
if (isset($player_js_extra)) {
|
||||
echo $player_js_extra;
|
||||
}
|
||||
?>
|
||||
</head>
|
||||
<body style="overflow: hidden;" class="<?php echo ($mob ? 'touch' : ''); ?>">
|
||||
<div style="<?php echo $player_style; ?>" id="embed-player-<?php echo $file_key; ?>"<?php echo $player_cp;
|
||||
echo $divdata; ?>><?php echo $player_br; ?><?php echo $player_src; ?>
|
||||
<?php
|
||||
if (($_cfg["vjs_advertising"] == 1 and !VHref::isMobile()) or ($_cfg["vjs_advertising"] == 1 and VHref::isMobile() and $embed_src == 'local' and $ad_client == 'vast') or ($_cfg["vjs_advertising"] == 1 and VHref::isMobile() and $embed_src != 'local') or ($_cfg["vjs_advertising"] == 0 and (!VHref::isMobile() or (VHref::isMobile() and ($embed_src == 'local' or $embed_src == 'youtube'))))) {
|
||||
$phtml = (($type[0] == 'v' or $type[0] == 'l' or $type[0] == 's') and $cfg["video_player"] == 'vjs') ? '<' . (($type == 'live' or $type == 'short') ? 'video' : $type) . ' id="view-player-' . $file_key . '" oncontextmenu="return false;" style="width: 100%; height: 100%;" preload="none" class="video-js vjs-default-skin vjs-big-play-centered" />' : null;
|
||||
$phtml .= ($type[0] == 'a' and $cfg["audio_player"] == 'vjs') ? '<' . $type . ' id="view-player-' . $file_key . '" style="width: 100%; height: 100%;" oncontextmenu="return false;" preload="none" class="video-js vjs-default-skin vjs-big-play-centered" />' : null;
|
||||
} else {
|
||||
$phtml = '<div id="ima-placeholder" class="video-js vjs-big-play-centered" style="background: #000 url(' . $tmb_url . ') no-repeat center center; z-index: 100; background-size: contain; width: 100%; height: 100%"><button class="vjs-big-play-button" type="button" aria-live="polite" title="Play Video" aria-disabled="false"><span class="vjs-control-text">Play Video</span></button></div>';
|
||||
}
|
||||
if (($cfg["video_player"] == 'vjs' and ($type[0] == 'v' or $type[0] == 'l' or $type[0] == 's')) or ($cfg["audio_player"] == 'vjs' and $type[0] == 'a')) {
|
||||
$first_sub = null;
|
||||
$other_sub = null;
|
||||
$thumb_file = $cfg["media_files_dir"] . '/' . $usr_key . '/t/' . $file_key . '/p/thumbnails.vtt';
|
||||
|
||||
if (file_exists($thumb_file)) {
|
||||
$first_sub .= '<track kind="metadata" src="' . $cfg["media_files_url"] . '/' . $usr_key . '/t/' . $file_key . '/p/thumbnails.vtt"></track>';
|
||||
}
|
||||
|
||||
$sub_file = $class_database->singleFieldValue('db_' . $type . 'subs', 'vjs_subs', 'file_key', $file_key);
|
||||
|
||||
if ($sub_file != '') {
|
||||
$sub_arr = unserialize($sub_file);
|
||||
|
||||
foreach ($sub_arr as $sub_file => $sub_arr) {
|
||||
if ($sub_arr['default'] == '1') {
|
||||
$first_sub .= '<track kind="captions" default src="' . $cfg["main_url"] . '/f_data/data_subtitles/' . VPlayers::FPsubtitle($sub_file) . '" label="' . $sub_arr['label'] . '" />';
|
||||
} else {
|
||||
$other_sub .= '<track kind="captions" src="' . $cfg["main_url"] . '/f_data/data_subtitles/' . VPlayers::FPsubtitle($sub_file) . '" label="' . $sub_arr['label'] . '" />';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$phtml .= $first_sub . $other_sub;
|
||||
|
||||
if ($embed_src == 'local' and $_cfg["vjs_advertising"] == 1) {
|
||||
if (($cfg["video_player"] == 'vjs' and ($type[0] == 'v' or $type[0] == 'l')) or ($cfg["audio_player"] == 'vjs' and $type[0] == 'a')) {
|
||||
if ($_cfg["vjs_advertising"] == 1 and $ad_client == 'ima') {
|
||||
$phtml .= '<div id="ima-companionDiv"><script type="text/javascript">$(document).ready(function(){if (typeof googletag != "undefined") {googletag.cmd.push(function() { googletag.display("ima-companionDiv"); });}});</script></div>';
|
||||
$phtml .= '<script type="text/javascript">$(document).ready(function(){var script = document.createElement("script"); script.src = "' . $cfg["scripts_url"] . '/shared/videojs/"+compjs+".js"; script.onload = function () { if (compjs == "ads.comp" || compjs == "ads.mob") {var ads = new Ads();} }; document.head.appendChild(script); }); </script>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo $phtml;
|
||||
$b = $cfg["main_url"] . '/' . VHref::getKey("viewers") . '?e=1&' . $type[0] . '=' . $file_key;
|
||||
?>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
<?php
|
||||
echo (($type == 'video' and (($cfg["video_player"] == 'vjs' and $_cfg["vjs_advertising"] == 0) or ($mob and $ad_client != 'vast') or (!$mob and $ad_client != 'vast') or (strpos($_SERVER["HTTP_REFERER"], $cfg["main_url"]) !== false))) ? '$(document).ready(function(){' : '');
|
||||
echo ($cfg['video_player'] == 'vjs' ? VPlayers::VJSJS('embed', $usr_key, $file_key) : ($cfg["video_player"] == 'jw' ? VPlayers::JWJS('embed', $usr_key, $file_key) : VPlayers::FPJS('embed', $usr_key, $file_key)));
|
||||
echo (($type == 'video' and (($cfg["video_player"] == 'vjs' and $_cfg["vjs_advertising"] == 0) or ($mob and $ad_client != 'vast') or (!$mob and $ad_client != 'vast') or (strpos($_SERVER["HTTP_REFERER"], $cfg["main_url"]) !== false))) ? '});' : '');
|
||||
?>
|
||||
</script>
|
||||
</body>
|
||||
<?php if ($cfg["google_analytics"] != ''): ?>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=<?=$cfg["google_analytics"]?>"></script>
|
||||
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','<?=$cfg["google_analytics"]?>');</script>
|
||||
<?php endif;?>
|
||||
</html>
|
||||
117
f_modules/m_frontend/m_player/embed_blog.php
Normal file
117
f_modules/m_frontend/m_player/embed_blog.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
|
||||
$type = 'blog';
|
||||
$file_key = $class_filter->clr_str($_GET[$type[0]]);
|
||||
$cfg[] = $class_database->getConfigurations('image_player,affiliate_tracking_id');
|
||||
$u = $db->execute(sprintf("SELECT
|
||||
A.`usr_key`,
|
||||
B.`usr_id`,
|
||||
B.`file_title`, B.`thumb_cache`
|
||||
FROM
|
||||
`db_accountuser` A, `db_%sfiles` B
|
||||
WHERE
|
||||
A.`usr_id`=B.`usr_id` AND
|
||||
B.`file_key`='%s'
|
||||
LIMIT 1;", $type, $file_key));
|
||||
$usr_key = $u->fields["usr_key"];
|
||||
$title = $u->fields["file_title"];
|
||||
$thumb_cache = $u->fields["thumb_cache"];
|
||||
$thumb_cache = $thumb_cache > 1 ? $thumb_cache : null;
|
||||
$tmb = $cfg["media_files_url"] . '/' . $usr_key . '/t/' . $file_key . '/0' . $thumb_cache . '.jpg';
|
||||
|
||||
$href_key = 'blogs';
|
||||
$blog_tpl = $cfg["media_files_dir"] . '/' . $usr_key . '/b/' . $file_key . '.tplb';
|
||||
$blog_html = null;
|
||||
|
||||
if (file_exists($blog_tpl)) {
|
||||
$blog_html = file_get_contents($blog_tpl);
|
||||
$parse = preg_match_all("/\[([^]].*?)\]/", $blog_html, $matches);
|
||||
$media = $matches[1];
|
||||
|
||||
if ($media[0]) {
|
||||
foreach ($media as $media_entry) {
|
||||
$a = explode("_", $media_entry);
|
||||
|
||||
$mtype = $a[1];
|
||||
$mkey = $a[2];
|
||||
|
||||
/* embed code player sizes */
|
||||
$ps = array();
|
||||
$ps[0]["w"] = '100%';
|
||||
$ps[0]["h"] = 500;
|
||||
|
||||
switch ($mtype[0]) {
|
||||
case "l":
|
||||
case "v": //embed code for video and audio is generated from within player cfg after initialization (class.players.php)
|
||||
$vi = sprintf("SELECT A.`file_type`, A.`embed_src`, A.`embed_key`, A.`embed_url`, B.`usr_key` FROM `db_videofiles` A, `db_accountuser` B WHERE A.`usr_id`=B.`usr_id` AND A.`file_key`='%s' LIMIT 1;", $mkey);
|
||||
$mrs = $db->execute($vi);
|
||||
$msrc = $mrs->fields["file_type"];
|
||||
$membed_src = $mrs->fields["embed_src"];
|
||||
$membed_key = $mrs->fields["embed_key"];
|
||||
$membed_url = $mrs->fields["embed_url"];
|
||||
$mukey = $mrs->fields["usr_key"];
|
||||
|
||||
if ($msrc == 'embed') {
|
||||
$mec = VPlayers::playerEmbedCodes($membed_src, array("key" => $membed_key, "url" => $membed_url), $ps[0]["w"], $ps[0]["h"]);
|
||||
} else {
|
||||
$mec = '<iframe id="file-embed-' . md5($mkey) . '" type="text/html" width="' . $ps[0]["w"] . '" height="' . $ps[0]["h"] . '" src="' . $cfg["main_url"] . '/embed?v=' . $mkey . '" frameborder="0" allowfullscreen></iframe>';
|
||||
}
|
||||
break;
|
||||
case "a": //embed code for video and audio is generated from within player cfg after initialization (class.players.php)
|
||||
$mec = '<iframe id="file-embed-' . md5($mkey) . '" type="text/html" width="' . $ps[0]["w"] . '" height="' . $ps[0]["h"] . '" src="' . $cfg["main_url"] . '/embed?a=' . $mkey . '" frameborder="0" allowfullscreen></iframe>';
|
||||
break;
|
||||
case "d": //embed code for documents is generated from within player cfg after page load (class.players.php)
|
||||
$mdoc = VGenerate::thumbSigned(array("type" => "doc", "server" => "upload", "key" => '/' . $mukey . '/d/' . $mkey . '.pdf'), $mkey, $mukey, 0, 1);
|
||||
$mec = '<embed src="' . $mdoc . '" width="' . $ps[0]["w"] . '" height="' . $ps[0]["h"] . '">';
|
||||
break;
|
||||
case "i":
|
||||
switch ($cfg["image_player"]) {
|
||||
case "jq":
|
||||
$_js = null;
|
||||
//$thumb_link = VGenerate::thumbSigned($mtype, $mkey, $mukey, 0, 1, 1);
|
||||
$image_link = VGenerate::thumbSigned($mtype, $mkey, $mukey, 0, 1, 0);
|
||||
|
||||
//$mec = '[url=' . $image_link . '][img=320x240]' . $thumb_link . '[/img][/url]';
|
||||
$mec = '<img src="' . $image_link . '">';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$blog_html = str_replace("[" . $media_entry . "]", $mec, $blog_html);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?php echo $title; ?></title>
|
||||
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
|
||||
</head>
|
||||
<body style="">
|
||||
<div id="view-player-<?php echo $file_key; ?>"><?php echo $blog_html; ?></div>
|
||||
</body>
|
||||
<?php if ($cfg["google_analytics"] != ''): ?>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=<?=$cfg["google_analytics"]?>"></script>
|
||||
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','<?=$cfg["google_analytics"]?>');</script>
|
||||
<?php endif;?>
|
||||
</html>
|
||||
149
f_modules/m_frontend/m_player/embed_doc.php
Normal file
149
f_modules/m_frontend/m_player/embed_doc.php
Normal file
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
include_once $class_language->setLanguageFile('frontend', 'language.view');
|
||||
|
||||
$type = 'doc';
|
||||
$file_key = $class_filter->clr_str($_GET[$type[0]]);
|
||||
$cfg[] = $class_database->getConfigurations('affiliate_tracking_id');
|
||||
$mobile = VHref::isMobile();
|
||||
|
||||
$u = $db->execute(sprintf("SELECT
|
||||
A.`usr_key`,
|
||||
B.`usr_id`,
|
||||
B.`file_title`, B.`thumb_cache`
|
||||
FROM
|
||||
`db_accountuser` A, `db_%sfiles` B
|
||||
WHERE
|
||||
A.`usr_id`=B.`usr_id` AND
|
||||
B.`file_key`='%s'
|
||||
LIMIT 1;", $type, $file_key));
|
||||
$usr_key = $u->fields["usr_key"];
|
||||
$title = $u->fields["file_title"];
|
||||
$thumb_cache = $u->fields["thumb_cache"];
|
||||
$thumb_cache = $thumb_cache > 1 ? $thumb_cache : null;
|
||||
$tmb = $cfg["media_files_url"] . '/' . $usr_key . '/t/' . $file_key . '/0' . $thumb_cache . '.jpg';
|
||||
|
||||
$doc_src = $cfg["media_files_dir"] . '/' . $usr_key . '/d/' . md5($cfg["global_salt_key"] . $file_key) . '.pdf';
|
||||
$src = VGenerate::thumbSigned(array("type" => "doc", "server" => "upload", "key" => '/' . $usr_key . '/d/' . md5($cfg["global_salt_key"] . $file_key) . '.pdf'), $file_key, $usr_key, 0, 1);
|
||||
|
||||
if (!file_exists($doc_src)) {
|
||||
$doc_src = $cfg["media_files_dir"] . '/' . $usr_key . '/d/' . $file_key . '.pdf';
|
||||
$src = VGenerate::thumbSigned(array("type" => "doc", "server" => "upload", "key" => '/' . $usr_key . '/d/' . $file_key . '.pdf'), $file_key, $usr_key, 0, 1);
|
||||
}
|
||||
|
||||
if (!file_exists($doc_src)) {
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head profile="http://www.w3.org/2005/10/profile">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<title><?php echo $title; ?></title>
|
||||
<?php if ($mobile): ?>
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/dealfonso/pdfjs-viewer@1.1/pdfjs-viewer.min.css">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons+Outlined">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.12.313/pdf.min.js"></script>
|
||||
<?php endif;?>
|
||||
<script type="text/javascript" src="<?php echo $cfg['javascript_url']; ?>/jquery.min.js"></script>
|
||||
<script type="text/javascript">jQuery.migrateMute=true;</script>
|
||||
<script type="text/javascript">if(navigator.platform==='iPad'||navigator.platform==='iPhone'||navigator.platform==='iPod'){WebFont.load({google:{families:['Roboto:300,400,500,600,700']}});}</script>
|
||||
<?php if ($mobile): ?>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/gh/dealfonso/pdfjs-viewer@1.1/pdfjs-viewer.min.js"></script>
|
||||
<script defer>
|
||||
var url = "<?php echo $src; ?>";
|
||||
var container = document.getElementById('view-player-<?php echo $file_key; ?>');
|
||||
$("document").ready(function(){
|
||||
var pdfjsLib = window["pdfjs-dist/build/pdf"];
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.12.313/pdf.worker.min.js";
|
||||
|
||||
let pdfViewer = new PDFjsViewer($(".pdfjs-viewer"), {
|
||||
onZoomChange: function (zoom) {
|
||||
zoom = parseInt(zoom * 10000) / 100;
|
||||
$(".zoomval").text(zoom + "%");
|
||||
},
|
||||
onActivePageChanged: function (page, pageno) {
|
||||
$(".pageno").text(pageno + "/" + this.getPageCount());
|
||||
}
|
||||
});
|
||||
pdfViewer.loadDocument(url).then(function () {pdfViewer.setZoom("fit")});
|
||||
|
||||
$("#pdfViewer-first").on("click", function() {pdfViewer.first()});
|
||||
$("#pdfViewer-prev").on("click", function() {pdfViewer.prev();return false});
|
||||
$("#pdfViewer-next").on("click", function() {pdfViewer.next();return false});
|
||||
$("#pdfViewer-last").on("click", function() {pdfViewer.last()});
|
||||
$("#pdfViewer-zoomOut").on("click", function() {pdfViewer.setZoom('out')});
|
||||
$("#pdfViewer-zoomIn").on("click", function() {pdfViewer.setZoom('in')});
|
||||
$("#pdfViewer-zoomWidth").on("click", function() {pdfViewer.setZoom('width')});
|
||||
$("#pdfViewer-zoomHeight").on("click", function() {pdfViewer.setZoom('height')});
|
||||
$("#pdfViewer-zoomFit").on("click", function() {pdfViewer.setZoom('fit')});
|
||||
});
|
||||
</script>
|
||||
<?php endif;?>
|
||||
<style>
|
||||
html,body{width:100%;height:100%;margin:0;padding:0;overflow:hidden}#doc-pagination{display:flex;align-items:center;justify-content:center;margin-bottom:10px}#doc-pagination span#page_wrap{margin:0 15px}
|
||||
#view-player-<?php echo $file_key; ?>{width:100%;height:100%}
|
||||
<?php if ($mobile): ?>
|
||||
#view-player-<?php echo $file_key; ?>{width:100%;height:100%;overflow:scroll !important;position:relative;/*padding-bottom:56.25%;padding-top:0;*/}
|
||||
.pdftoolbar, .pdftoolbar i{font-size:16px;vertical-align:middle}
|
||||
.pdftoolbar span{margin-right:0.5em;margin-left:0.5em;font-size:14px}
|
||||
.pdftoolbar .btn-sm{}
|
||||
.pdftoolbar{width:100%;height:auto;background:#ddd;z-index:100}
|
||||
<?php endif;?>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?php if ($mobile): ?>
|
||||
<?php endif;?>
|
||||
<div style="width:100%;height:100%;position:relative;"><div id="view-player-<?php echo $file_key; ?>" class="pdfViewer singlePageView" style="">
|
||||
<?php if ($mobile): ?>
|
||||
<div class="pdftoolbar text-center row m-0 p-0">
|
||||
<div class="col-12 col-lg-6 my-1">
|
||||
<button class="btn btn-secondary btn-sm btn-first" id="pdfViewer-first"><i class="material-icons-outlined">skip_previous</i></button>
|
||||
<button class="btn btn-secondary btn-sm btn-prev" id="pdfViewer-prev"><i class="material-icons-outlined">navigate_before</i></button>
|
||||
<span class="pageno"></span>
|
||||
<button class="btn btn-secondary btn-sm btn-next" id="pdfViewer-next"><i class="material-icons-outlined">navigate_next</i></button>
|
||||
<button class="btn btn-secondary btn-sm btn-last" id="pdfViewer-last"><i class="material-icons-outlined">skip_next</i></button>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 my-1">
|
||||
<button class="btn btn-secondary btn-sm" id="pdfViewer-zoomOut"><i class="material-icons-outlined">zoom_out</i></button>
|
||||
<span class="zoomval">100%</span>
|
||||
<button class="btn btn-secondary btn-sm" id="pdfViewer-zoomIn"><i class="material-icons-outlined">zoom_in</i></button>
|
||||
<button class="btn btn-secondary btn-sm ms-3" id="pdfViewer-zoomWidth"><i class="material-icons-outlined">swap_horiz</i></button>
|
||||
<button class="btn btn-secondary btn-sm" id="pdfViewer-zoomHeight"><i class="material-icons-outlined">swap_vert</i></button>
|
||||
<button class="btn btn-secondary btn-sm" id="pdfViewer-zoomFit"><i class="material-icons-outlined">fit_screen</i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pdfjs-viewer h-100"></div>
|
||||
<?php else: ?>
|
||||
</div></div>
|
||||
<script type="text/javascript">$(document).ready(function(){$("#view-player-<?php echo $file_key; ?>").html('<embed src="<?php echo $src; ?>" width="100%" height="100%">')});</script>
|
||||
<?php endif;?>
|
||||
</body>
|
||||
<?php if ($cfg["google_analytics"] != ''): ?>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=<?=$cfg["google_analytics"]?>"></script>
|
||||
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','<?=$cfg["google_analytics"]?>');</script>
|
||||
<?php endif;?>
|
||||
</html>
|
||||
8
f_modules/m_frontend/m_player/flowplayer.php
Normal file
8
f_modules/m_frontend/m_player/flowplayer.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// Flow Player integration - basic implementation
|
||||
echo "<h1>Flow Player</h1>";
|
||||
echo "<p>Flow Player integration coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
8
f_modules/m_frontend/m_player/freepaper.php
Normal file
8
f_modules/m_frontend/m_player/freepaper.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// Freepaper player - basic implementation
|
||||
echo "<h1>Freepaper Player</h1>";
|
||||
echo "<p>Freepaper functionality coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
8
f_modules/m_frontend/m_player/image_playlist.php
Normal file
8
f_modules/m_frontend/m_player/image_playlist.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// Image playlist player - basic implementation
|
||||
echo "<h1>Image Playlist Player</h1>";
|
||||
echo "<p>Image playlist functionality coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
8
f_modules/m_frontend/m_player/jwplayer.php
Normal file
8
f_modules/m_frontend/m_player/jwplayer.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// JW Player integration - basic implementation
|
||||
echo "<h1>JW Player</h1>";
|
||||
echo "<p>JW Player integration coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
8
f_modules/m_frontend/m_player/related.php
Normal file
8
f_modules/m_frontend/m_player/related.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// Related videos - basic implementation
|
||||
echo "<h1>Related Videos</h1>";
|
||||
echo "<p>Related videos functionality coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
116
f_modules/m_frontend/m_player/vast.php
Normal file
116
f_modules/m_frontend/m_player/vast.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
$main_dir = realpath(dirname(__FILE__) . '/../../../');
|
||||
set_include_path($main_dir);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
|
||||
$ad_key = $class_filter->clr_str($_GET["v"]);
|
||||
$ad_type = $class_filter->clr_str($_GET["t"]);
|
||||
|
||||
if ($ad_key == '' or $ad_type == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$u = $db->execute(sprintf("SELECT * FROM `db_%sadentries` WHERE `ad_key`='%s' LIMIT 1;", $ad_type, $ad_key));
|
||||
|
||||
$ad_duration = gmdate("H:i:s", $u->fields["ad_duration"]);
|
||||
$ad_click_url = $u->fields["ad_click_url"];
|
||||
$ad_custom_url = $u->fields["ad_custom_url"];
|
||||
$ad_click_url = $ad_custom_url != '' ? $ad_custom_url : $u->fields["ad_click_url"];
|
||||
$ad_file = $class_database->singleFieldValue('db_jwadcodes', 'db_code', 'db_key', $u->fields["ad_custom"]);
|
||||
$ad_file_type = $class_database->singleFieldValue('db_jwadcodes', 'db_type', 'db_key', $u->fields["ad_custom"]);
|
||||
$ad_file_loc = $ad_file_type == 'code' ? $ad_file : $cfg["player_url"] . '/ad_files/' . $ad_file;
|
||||
$ad_ext = VFileinfo::getExtension($ad_file);
|
||||
$ad_width = $u->fields["ad_width"];
|
||||
$ad_width = (intval($ad_width) > 0) ? ' width="' . $ad_width . '"' : null;
|
||||
$ad_height = $u->fields["ad_height"];
|
||||
$ad_height = (intval($ad_height) > 0) ? ' height="' . $ad_height . '"' : null;
|
||||
$ad_bitrate = $u->fields["ad_bitrate"];
|
||||
$ad_bitrate = (intval($ad_bitrate) > 0) ? ' bitrate="' . $ad_bitrate . '"' : null;
|
||||
$impr = $cfg["main_url"] . '/' . VHref::getKey("adv") . '?t=' . $ad_type . '&impression=' . $ad_key;
|
||||
$ctr = $cfg["main_url"] . '/' . VHref::getKey("adv") . '?t=' . $ad_type . '&click=' . $ad_key;
|
||||
|
||||
$pixel = $cfg["player_url"] . '/ad_files/single-pixel-ar7.gif';
|
||||
|
||||
header("Content-type: text/xml");
|
||||
echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>';
|
||||
?>
|
||||
<VAST version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd">
|
||||
<Ad id="812030">
|
||||
<InLine>
|
||||
<AdSystem>VS</AdSystem>
|
||||
<AdTitle>EasyStream Static VAST Template 2.0</AdTitle>
|
||||
<Description>date of revision 10-04-14</Description>
|
||||
<Impression id="ft_vast_i">
|
||||
<![CDATA[<?php echo $impr; ?>]]>
|
||||
</Impression>
|
||||
<Impression id="3rdparty">
|
||||
<![CDATA[]]>
|
||||
</Impression>
|
||||
<Impression id="3rdparty">
|
||||
<![CDATA[]]>
|
||||
</Impression>
|
||||
<Creatives>
|
||||
<Creative sequence="1">
|
||||
<Linear>
|
||||
<Duration>00:00:15</Duration>
|
||||
<TrackingEvents>
|
||||
<Tracking event="start">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
<Tracking event="midpoint">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
<Tracking event="firstQuartile">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
<Tracking event="thirdQuartile">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
<Tracking event="complete">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
<Tracking event="mute">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
<Tracking event="fullscreen">
|
||||
<![CDATA[<?php echo $pixel; ?>]]>
|
||||
</Tracking>
|
||||
</TrackingEvents>
|
||||
<VideoClicks>
|
||||
<ClickThrough>
|
||||
<![CDATA[<?php echo $ad_click_url; ?>]]>
|
||||
</ClickThrough>
|
||||
<ClickTracking><![CDATA[<?php echo $ctr; ?>]]></ClickTracking>
|
||||
</VideoClicks>
|
||||
<MediaFiles>
|
||||
<MediaFile id="1" delivery="progressive" type="video/<?php echo $ad_ext; ?>"<?php echo $ad_bitrate; ?><?php echo $ad_width; ?><?php echo $ad_height; ?>>
|
||||
<![CDATA[<?php echo $ad_file_loc; ?>]]>
|
||||
</MediaFile>
|
||||
</MediaFiles>
|
||||
</Linear>
|
||||
</Creative>
|
||||
<Creative sequence="1">
|
||||
<CompanionAds>
|
||||
</CompanionAds>
|
||||
</Creative>
|
||||
</Creatives>
|
||||
</InLine>
|
||||
</Ad>
|
||||
</VAST>
|
||||
8
f_modules/m_frontend/m_player/video_playlist.php
Normal file
8
f_modules/m_frontend/m_player/video_playlist.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
define("_ISVALID", true);
|
||||
include_once "f_core/config.core.php";
|
||||
// Video playlist player - basic implementation
|
||||
echo "<h1>Video Playlist Player</h1>";
|
||||
echo "<p>Video playlist functionality coming soon...</p>";
|
||||
echo "<a href=\"/\">← Back to Home</a>";
|
||||
?>
|
||||
43
f_modules/m_frontend/m_player/vmap.php
Normal file
43
f_modules/m_frontend/m_player/vmap.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
define('_ISVALID', true);
|
||||
|
||||
include_once 'f_core/config.core.php';
|
||||
|
||||
$type = isset($_GET['a']) ? 'audio' : (isset($_GET['l']) ? 'live' : (isset($_GET['s']) ? 'short' : 'video'));
|
||||
$file_key = $class_filter->clr_str($_GET[$type[0]]);
|
||||
|
||||
// Basic VMAP that points to a VAST pre-roll for this request.
|
||||
// This is a scaffold; a rules engine can fill multiple AdBreaks.
|
||||
header('Content-type: text/xml');
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>';
|
||||
?>
|
||||
<VMAP xmlns="http://www.iab.net/videosuite/vmap" version="1.0">
|
||||
<AdBreak breakType="linear" breakId="preroll" timeOffset="start">
|
||||
<AdSource id="1" allowMultipleAds="false" followRedirects="true">
|
||||
<VASTAdData>
|
||||
<?php
|
||||
$vast = $cfg['main_url'] . '/' . VHref::getKey('vast') . '?t=vjs&v=' . htmlspecialchars($file_key, ENT_QUOTES, 'UTF-8');
|
||||
echo '<VAST xmlns="http://schemas.xmlsoap.org/ads/vast/3.0"><Ad><InLine><AdSystem>VS</AdSystem><AdTitle>VMAP VAST Wrapper</AdTitle><Creatives><Creative><Linear><TrackingEvents></TrackingEvents><MediaFiles></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>'; // minimal placeholder
|
||||
?>
|
||||
</VASTAdData>
|
||||
<AdTagURI templateType="vast3">
|
||||
<![CDATA[<?php echo $vast; ?>]]>
|
||||
</AdTagURI>
|
||||
</AdSource>
|
||||
</AdBreak>
|
||||
</VMAP>
|
||||
|
||||
Reference in New Issue
Block a user