092a8bc7ce
- Removed all backup/duplicate files - Removed test files from root - Consolidated documentation to /docs/ - Moved scripts to /scripts/ - Renamed f_* directories (removed prefix) - Organized icons and assets - Removed unused vendor directories - Cleaned up redundant config files
1637 lines
93 KiB
PHP
1637 lines
93 KiB
PHP
<?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.
|
|
|*******************************************************************************************************************/
|
|
|
|
defined('_ISVALID') or header('Location: /error');
|
|
use Embed\Embed;
|
|
|
|
class VImport
|
|
{
|
|
/* import feeds layout */
|
|
public function videoFeeds_layout()
|
|
{
|
|
global $cfg, $language, $side, $db, $smarty;
|
|
|
|
$err = false;
|
|
if ($cfg['paid_memberships'] == 1) {
|
|
$err = VUpload::subscriptionCheck('video');
|
|
}
|
|
|
|
$categ_list = $language['backend.import.feed.categ.list'];
|
|
$region_list = explode(',', $language['backend.import.feed.region.list']);
|
|
$type_list = explode(',', $language['backend.import.feed.type.list']);
|
|
$time_list = explode(',', $language['backend.import.feed.time.list']);
|
|
$results_list = explode(',', $language['backend.import.feed.results.list']);
|
|
$results_ch_list = explode(',', $language['backend.import.feed.results.channel.list']);
|
|
$feed_ch_list = explode(',', $language['backend.import.feed.results.feed.list']);
|
|
$feed_vimeo_list = explode(',', $language['backend.import.feed.results.vimeo.list']);
|
|
$results_vimeo_list = explode(',', $language['backend.import.feed.results.vimeo.feed']);
|
|
$feed_dm_list = explode(',', $language['backend.import.feed.results.dm.list']);
|
|
$results_dm_list = explode(',', $language['backend.import.feed.results.dm.feed']);
|
|
$type_list_dm = explode(',', $language['backend.import.feed.dm.filters.list']);
|
|
$categ_dm_list = explode(',', $language['backend.import.feed.categ.dm.list']);
|
|
$sort_list_dm = explode(',', $language['backend.import.feed.dm.sort.list']);
|
|
$region_list_dm = explode(',', $language['backend.import.feed.region.dm.list']);
|
|
$search_on_list = explode(',', $language['backend.import.feed.search.list']);
|
|
$feed_def_list = explode(',', $language['backend.import.feed.type.def.list']);
|
|
$feed_dim_list = explode(',', $language['backend.import.feed.type.dim.list']);
|
|
$feed_dur_list = explode(',', $language['backend.import.feed.type.dur.list']);
|
|
$feed_emb_list = explode(',', $language['backend.import.feed.type.emb.list']);
|
|
$feed_lic_list = explode(',', $language['backend.import.feed.type.lic.list']);
|
|
$feed_syn_list = explode(',', $language['backend.import.feed.type.syn.list']);
|
|
$feed_type_list = explode(',', $language['backend.import.feed.type.type.list']);
|
|
|
|
$yt_channel_list = explode("\n", $cfg['import_yt_channel_list']);
|
|
$dm_channel_list = explode("\n", $cfg['import_dm_user_list']);
|
|
$vi_channel_list = explode("\n", $cfg['import_vi_user_list']);
|
|
/* many select lists */
|
|
$category_list = self::getCategoryList();
|
|
$def_ht = self::selectList('feed_def', $feed_def_list, 1);
|
|
$dim_ht = self::selectList('feed_dim', $feed_dim_list, 1);
|
|
$dur_ht = self::selectList('feed_dur', $feed_dur_list, 1);
|
|
$emb_ht = self::selectList('feed_emb', $feed_emb_list, 1);
|
|
$lic_ht = self::selectList('feed_lic', $feed_lic_list, 1);
|
|
$syn_ht = self::selectList('feed_syn', $feed_syn_list, 1);
|
|
$type_ht = self::selectList('feed_type', $feed_type_list, 1);
|
|
$categ_ht = self::selectList('feed_categ', $categ_list, 1);
|
|
$region_ht = self::selectList('feed_region', $region_list, 1);
|
|
$time_ht = self::selectList('feed_time', $time_list, 0);
|
|
$results_ht = self::selectList('feed_results', $results_list, 0);
|
|
$channel_ht = self::selectList('feed_channel_yt', $yt_channel_list, 0);
|
|
$channel_dm_ht = self::selectList('feed_channel_dm', $dm_channel_list, 0);
|
|
$channel_vi_ht = self::selectList('feed_channel_vimeo', $vi_channel_list, 0);
|
|
$results_ch_ht = self::selectList('feed_results_ch', $results_ch_list, 0);
|
|
$feed_ch_ht = self::selectList('feed_type_ch', $feed_ch_list, 0);
|
|
$category_feed = self::selectList('assign_category_feed', $category_list, 1);
|
|
$category_ch = self::selectList('assign_category_channel', $category_list, 1);
|
|
$category_file = self::selectList('assign_category_file', $category_list, 1);
|
|
$category_dm = self::selectList('assign_category_dm', $category_list, 1);
|
|
$category_vimeo = self::selectList('assign_category_vimeo', $category_list, 1);
|
|
$category_dm_type = self::selectList('assign_category_dm_type', $category_list, 1);
|
|
$category_dm_ht = self::selectList('assign_category_dm_video', $categ_dm_list, 1);
|
|
$type_dm_ht = self::selectList('feed_type_dm_video', $type_list_dm, 1);
|
|
$sort_dm_ht = self::selectList('feed_sort_dm_video', $sort_list_dm, 1);
|
|
|
|
$feed_vimeo_ht = self::selectList('feed_type_vimeo', $feed_vimeo_list, 0);
|
|
$results_vimeo_ht = self::selectList('feed_results_vimeo', $results_vimeo_list, 0);
|
|
$feed_dm_ht = self::selectList('feed_type_dm', $feed_dm_list, 0);
|
|
$results_dm_ht = self::selectList('feed_results_dm', $results_dm_list, 0);
|
|
$region_dm_ht = self::selectList('feed_region_dm', $region_list_dm, 1);
|
|
$results_dm_type_ht = self::selectList('feed_results_dm_type', $results_dm_list, 0);
|
|
$search_ht = self::selectList('search_on', $search_on_list, 0);
|
|
|
|
$all = ($cfg['import_yt'] == 0 and $cfg['import_dm'] == 0 and $cfg['import_vi'] == 0) ? 0 : 1;
|
|
if ($side == 'frontend') {
|
|
$uid = intval($_SESSION['USER_ID']);
|
|
$p = $db->execute(sprintf("SELECT `usr_perm` FROM `db_accountuser` WHERE `usr_id`='%s' LIMIT 1;", $uid));
|
|
$perm = unserialize($p->fields['usr_perm']);
|
|
}
|
|
/* layout start */
|
|
$html = $side == 'frontend' ? '
|
|
<div class="tabs tabs-style-line no-display">
|
|
<nav>
|
|
<ul>
|
|
' . (($cfg['video_module'] == 1 and $cfg['video_uploads'] == 1) ? '<li><a class="icon icon-video" href="' . $cfg['main_url'] . '/' . VHref::getKey('upload') . '?t=video"><span>' . $language['upload.menu.video'] . '</span></a></li>' : null) . '
|
|
' . (($cfg['video_module'] == 1 and $cfg['video_uploads'] == 1) ? '<li><a class="icon icon-video" href="' . $cfg['main_url'] . '/' . VHref::getKey('upload') . '?t=short"><span>' . $language['upload.menu.video'] . '</span></a></li>' : null) . '
|
|
' . (($cfg['import_yt'] == 1 or $cfg['import_dm'] == 1 or $cfg['import_vi'] == 1) ? '<li class="tab-current"><a class="icon icon-video" href="' . $cfg['main_url'] . '/' . VHref::getKey('import') . '?t=video"><span>' . $language['upload.menu.grab'] . '</span></a></li>' : null) . '
|
|
' . (($cfg['image_module'] == 1 and $cfg['image_uploads'] == 1) ? '<li><a class="icon icon-image" href="' . $cfg['main_url'] . '/' . VHref::getKey('upload') . '?t=image"><span>' . $language['upload.menu.image'] . '</span></a></li>' : null) . '
|
|
' . (($cfg['audio_module'] == 1 and $cfg['audio_uploads'] == 1) ? '<li><a class="icon icon-headphones" href="' . $cfg['main_url'] . '/' . VHref::getKey('upload') . '?t=audio"><span>' . $language['upload.menu.audio'] . '</span></a></li>' : null) . '
|
|
' . (($cfg['document_module'] == 1 and $cfg['document_uploads'] == 1) ? '<li><a class="icon icon-file" href="' . $cfg['main_url'] . '/' . VHref::getKey('upload') . '?t=document"><span>' . $language['upload.menu.document'] . '</span></a></li>' : null) . '
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
' . ($err ? '<br>' . VGenerate::noticeTpl('', $err, '') : null) . '
|
|
<div class="clearfix"></div>
|
|
' : '';
|
|
|
|
$html .= '<div id="import-wrap" class="container' . ($side == 'frontend' ? '-off' : null) . ' cbp-spmenu-push vs-column">';
|
|
$html .= '<div class="vs-column half">';
|
|
$html .= '<div class="left-float wd380 all-paddings10 entry-list" id="left-side"' . ($side == 'frontend' ? ' style="padding: 15px 0;"' : null) . '>';
|
|
$html .= '<ul class="responsive-accordion responsive-accordion-default bm-larger">';
|
|
/* embed single file */
|
|
if ($side == 'backend' or ($side == 'frontend' and intval($perm['perm_embed_single']) == 1 and !$err)) {
|
|
if ($all == 1) {
|
|
$html .= '<li>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb active">';
|
|
$html .= VGenerate::simpleDivWrap('top-padding5 wd90p all-paddings5 bold pointer', '', '<i class="icon-link"></i> ' . $language['backend.import.embed.h1'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: block;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: none;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel active">';
|
|
$html .= '<form id="embed-file-form" method="post" action="" class="entry-form-class">';
|
|
$html .= VGenerate::sigleInputEntry('text', 'left-float lh20 wd140', '<label>' . $language['backend.embed.youtube'] . '</label>', 'left-float', 'be_video_url', 'text-input wd190', '');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.assign.c'] . '</label><div class="left-float selector">' . $category_file . '</div>');
|
|
$html .= $side == 'backend' ? VGenerate::simpleDivWrap('row top-padding15', '', '<label>' . $language['backend.import.feed.assign'] . '</label><div class="left-float selector">' . self::username_selectList('import_single') . '</div>') : null;
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<div class="clearfix"></div><br>' . VGenerate::basicInput('button', 'find_video_file', 'button-grey search-button form-button save-entry-button find-video-file', '', 'embed', '<span>' . $language['backend.embed.video.find'] . '</span>'));
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
} else {
|
|
$html .= VGenerate::simpleDivWrap('row', '', $language['backend.import.menu.disabled.functions']);
|
|
}
|
|
}
|
|
if ($cfg['import_yt'] == 1) {
|
|
if ($side == 'backend' or ($side == 'frontend' and intval($perm['perm_embed_yt_video']) == 1 and !$err)) {
|
|
$resnr = ((int) $_POST['yt_video_results'] > 0) ? (int) $_POST['yt_video_results'] : 10;
|
|
/* import youtube video feeds */
|
|
$html .= '<li>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb">';
|
|
$html .= VGenerate::simpleDivWrap('top-padding5 wd90p all-paddings5 bold pointer', '', '<i class="icon-youtube"></i> ' . $language['backend.import.feed.h1'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: block;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: none;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel" style="display: none;">';
|
|
$html .= '<form id="video-feed-form" method="post" action="" class="entry-form-class">';
|
|
$html .= VGenerate::sigleInputEntry('text', 'left-float lh20 wd140', '<label>' . $language['backend.import.search.for'] . '</label>', 'left-float', 'be_search_term', 'text-input wd190', '');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.categ'] . '</label><div class="left-float selector">' . $categ_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.def'] . '</label><div class="left-float selector">' . $def_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.dim'] . '</label><div class="left-float selector">' . $dim_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.dur'] . '</label><div class="left-float selector">' . $dur_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.emb'] . '</label><div class="left-float selector">' . $emb_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.lic'] . '</label><div class="left-float selector">' . $lic_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.syn'] . '</label><div class="left-float selector">' . $syn_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type.type'] . '</label><div class="left-float selector">' . $type_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row no-display', '', VGenerate::sigleInputEntry('text', 'left-float lh20 wd140', $language['backend.import.feed.type.res'], 'left-float', 'yt_video_results', 'text-input wd190', $resnr));
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.prevpage'] . '</label><span class="left-float lh20 prev-page">##prevPageToken##</span>', 'float: left;');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.nextpage'] . '</label><span class="left-float lh20 next-page">##nextPageToken##</span>', 'float: right;');
|
|
$html .= '<div class="clearfix"></div><br>';
|
|
$html .= VGenerate::simpleDivWrap('row no-display', '', '<div class="left-float lh20 wd140">' . $language['backend.import.currpage'] . '</div><div class="left-float lh20 current-page">##currentPageToken##</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.assign.c'] . '</label><div class="left-float selector">' . $category_feed . '</div>');
|
|
$html .= $side == 'backend' ? VGenerate::simpleDivWrap('row top-padding15', '', '<label>' . $language['backend.import.feed.assign'] . '</label><div class="left-float selector">' . self::username_selectList('import_yt_video') . '</div>') : null;
|
|
$html .= self::selectEntries('list_video_feed', 'import_video_feed', true);
|
|
$html .= VGenerate::simpleDivWrap('row no-display', '', '<br>' . VGenerate::basicInput('button', $btn1, 'search-button form-button ' . str_replace('_', '-', 'list_video_feed_yt'), '', 'import', $language['backend.import.feed.list']));
|
|
$html .= VGenerate::sigleInputEntry('text', 'left-float lh20 wd140 no-display', 'form', 'left-float no-display', 'list_video_feed_hid', 'text-input wd190 list-video-feed-hid', 'video-feed-form');
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
}
|
|
if ($side == 'backend' or ($side == 'frontend' and intval($perm['perm_embed_yt_channel']) == 1 and !$err)) {
|
|
$resnr = ((int) $_POST['yt_channel_results'] > 0) ? (int) $_POST['yt_channel_results'] : 10;
|
|
/* import youtube channel feeds */
|
|
$html .= '<li>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb">';
|
|
$html .= VGenerate::simpleDivWrap('top-padding5 wd90p all-paddings5 bold pointer', '', '<i class="icon-youtube"></i> ' . $language['backend.import.channel.h1'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: block;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: none;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel" style="display: none;">';
|
|
$html .= '<form id="channel-feed-form" method="post" action="" class="entry-form-class">';
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.channel'] . '</label><div class="left-float selector">' . $channel_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row no-display', '', VGenerate::sigleInputEntry('text', 'left-float lh20 wd140', $language['backend.import.feed.type.res'], 'left-float', 'yt_channel_results', 'text-input wd190', $resnr));
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.prevpage'] . '</label><span class="left-float lh20 prev-page">##prevPageToken##</span>', 'float: left;');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.nextpage'] . '</label><span class="left-float lh20 next-page">##nextPageToken##</span>', 'float: right;');
|
|
$html .= '<div class="clearfix"></div><br>';
|
|
$html .= VGenerate::simpleDivWrap('row no-display', '', '<div class="left-float lh20 wd140">' . $language['backend.import.currpage'] . '</div><div class="left-float lh20 current-page">##currentPageToken##</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.assign.c'] . '</label><div class="left-float selector">' . $category_ch . '</div>');
|
|
$html .= $side == 'backend' ? VGenerate::simpleDivWrap('row top-padding15', '', '<label>' . $language['backend.import.feed.assign'] . '</label><div class="left-float selector">' . self::username_selectList('import_yt_channel') . '</div>') : null;
|
|
$html .= self::selectEntries('list_channel_feed', 'import_channel_feed', true);
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
}
|
|
}
|
|
if ($cfg['import_vi'] == 1) {
|
|
if ($side == 'backend' or ($side == 'frontend' and intval($perm['perm_embed_vi_user']) == 1 and !$err)) {
|
|
/* import vimeo user feeds */
|
|
$html .= '<li>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb">';
|
|
$html .= VGenerate::simpleDivWrap('top-padding5 wd90p all-paddings5 bold pointer', '', '<i class="icon-vimeo"></i> ' . $language['backend.import.vimeo.h1'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: block;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: none;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel" style="display: none;">';
|
|
$html .= '<form id="vimeo-user-form" method="post" action="" class="entry-form-class">';
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.user'] . '</label><div class="left-float selector">' . $channel_vi_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type'] . '</label><div class="left-float selector">' . $feed_vimeo_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.results'] . '</label><div class="left-float selector">' . $results_vimeo_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.assign.c'] . '</label><div class="left-float selector">' . $category_vimeo . '</div>');
|
|
$html .= $side == 'backend' ? VGenerate::simpleDivWrap('row top-padding15', '', '<label>' . $language['backend.import.feed.assign'] . '</label><div class="left-float selector">' . self::username_selectList('import_vimeo_channel') . '</div>') : null;
|
|
$html .= self::selectEntries('list_vimeo_feed', 'import_vimeo_feed', true);
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
}
|
|
}
|
|
if ($cfg['import_dm'] == 1) {
|
|
if ($side == 'backend' or ($side == 'frontend' and intval($perm['perm_embed_dm_video']) == 1 and !$err)) {
|
|
/* import dailymotion video feeds */
|
|
$html .= '<li>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb">';
|
|
$html .= VGenerate::simpleDivWrap('top-padding5 wd90p all-paddings5 bold pointer', '', '<i class="icon-libreoffice"></i> ' . $language['backend.import.dm.video.h1'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: block;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: none;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel" style="display: none;">';
|
|
$html .= '<form id="dailymotion-video-form" method="post" action="" class="entry-form-class">';
|
|
$html .= VGenerate::sigleInputEntry('text', 'left-float lh20 wd140', '<label>' . $language['backend.import.search.for'] . '</label>', 'left-float', 'be_search_term', 'text-input wd190', '');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.categ'] . '</label><div class="left-float selector">' . $category_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.region'] . '</label><div class="left-float selector">' . $region_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type'] . '</label><div class="left-float selector">' . $type_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.sort'] . '</label><div class="left-float selector">' . $sort_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.results'] . '</label><div class="left-float selector">' . $results_dm_type_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.assign.c'] . '</label><div class="left-float selector">' . $category_dm_type . '</div>');
|
|
$html .= $side == 'backend' ? VGenerate::simpleDivWrap('row top-padding15', '', '<label>' . $language['backend.import.feed.assign'] . '</label><div class="left-float selector">' . self::username_selectList('import_dm_video') . '</div>') : null;
|
|
$html .= self::selectEntries('list_dailymotion_feed_video', 'import_dailymotion_feed_video', true);
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
}
|
|
if ($side == 'backend' or ($side == 'frontend' and intval($perm['perm_embed_dm_user']) == 1 and !$err)) {
|
|
/* import dailymotion user feeds */
|
|
$html .= '<li>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb">';
|
|
$html .= VGenerate::simpleDivWrap('top-padding5 wd90p all-paddings5 bold pointer', '', '<i class="icon-libreoffice"></i> ' . $language['backend.import.dm.h1'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: block;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: none;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel" style="display: none;">';
|
|
$html .= '<form id="dailymotion-user-form" method="post" action="" class="entry-form-class">';
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.user'] . '</label><div class="left-float selector">' . $channel_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.type'] . '</label><div class="left-float selector">' . $feed_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.results'] . '</label><div class="left-float selector">' . $results_dm_ht . '</div>');
|
|
$html .= VGenerate::simpleDivWrap('row', '', '<label>' . $language['backend.import.feed.assign.c'] . '</label><div class="left-float selector">' . $category_dm . '</div>');
|
|
$html .= $side == 'backend' ? VGenerate::simpleDivWrap('row top-padding15', '', '<label>' . $language['backend.import.feed.assign'] . '</label><div class="left-float selector">' . self::username_selectList('import_dm_channel') . '</div>') : null;
|
|
$html .= self::selectEntries('list_dailymotion_feed', 'import_dailymotion_feed', true);
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
}
|
|
}
|
|
$html .= '</ul>';
|
|
$html .= '</div>'; //end left-side
|
|
$html .= '</div>';
|
|
$html .= '<div class="vs-column half fit">';
|
|
$html .= '<form id="right-side-form" method="post" action=""' . ($side == 'frontend' ? ' style="padding: 15px 0px 15px 0px;"' : null) . '>';
|
|
$html .= '<div class="left-float wd560" id="right-side">';
|
|
$html .= '</div>'; //end right-side
|
|
$html .= '</form>';
|
|
$html .= '</div>';
|
|
$html .= '</div>'; //end import-wrap
|
|
$html .= '<div class="clearfix"></div>';
|
|
|
|
$html .= '
|
|
<script type="text/javascript">
|
|
var error_html = \'<div class="pointer left-float wdmax" id="cb-response"><div class="error-message" id="error-message" onclick="$(this).replaceWith(""); $("#cb-response").replaceWith(""); $("#cb-response-wrap").replaceWith("");"><p class="error-message-text">No entries selected! Please select one or more entries.</p></div>\';
|
|
' . ($side == 'frontend' ? '$(window).resize(function() {dinamicSizeSetFunction_menu();});$(function() {dinamicSizeSetFunction_menu();});' : null) . '
|
|
</script>
|
|
';
|
|
|
|
return $html;
|
|
}
|
|
/* check for existing accounts */
|
|
public function chkAccount()
|
|
{
|
|
global $db, $language;
|
|
|
|
$chk = $db->execute("SELECT `usr_key`, `usr_user` FROM `db_accountuser` WHERE `usr_status`='1' ORDER BY `usr_user` LIMIT 1;");
|
|
$err = $chk->fields['usr_key'] == '' ? $language['upload.err.msg.13'] : null;
|
|
return $err;
|
|
}
|
|
/* get "other" category id */
|
|
public function getOther()
|
|
{
|
|
global $db;
|
|
|
|
$c = $db->execute("SELECT `ct_id` FROM `db_categories` WHERE (`ct_name`='Other' OR `ct_descr` LIKE '%other%') AND `ct_type`='video' LIMIT 1;");
|
|
$ct_id = $c->fields['ct_id'];
|
|
|
|
return ($ct_id > 0 ? $ct_id : 1);
|
|
}
|
|
/* select all/none entries */
|
|
public function selectEntries($btn1, $btn2, $list_button = false)
|
|
{
|
|
global $language, $cfg;
|
|
|
|
$sel = '<div class="right-float lh25 wd140" style="float: right;">
|
|
<div class="row icheck-box all">
|
|
<input type="radio" name="select_entries_on" value="all"><label>' . $language['backend.import.select.all'] . '</label>
|
|
<input type="radio" name="select_entries_off" value="none"><label>' . $language['backend.import.unselect.all'] . '</label>
|
|
</div>
|
|
</div>';
|
|
|
|
$sel = null;
|
|
|
|
if ($cfg['import_mode'] == 'ask') {
|
|
$save_action = '
|
|
<div class="place-left">
|
|
<div class="icheck-box ask">
|
|
<input type="radio" name="save_action" value="embed" checked="checked">
|
|
<label>' . $language['backend.import.embed'] . '</label>
|
|
<input type="radio" name="save_action" value="download" style="margin-left: 20px;">
|
|
<label>' . $language['backend.import.download'] . '</label>
|
|
</div>
|
|
</div>
|
|
';
|
|
} else {
|
|
$save_action = '<div class="row no-display"><input type="hidden" name="save_action" value="' . $cfg['import_mode'] . '" readonly="readonly" /></div>';
|
|
}
|
|
|
|
$button = VGenerate::simpleDivWrap('row', '', '<div class="clearfix"></div><br><div class="left-float">' . VGenerate::basicInput('button', $btn1, 'button-grey save-entry-button search-list-entry search-button form-button ' . str_replace('_', '-', $btn1), '', 'import', '<span>' . $language['backend.import.feed.list'] . '</span>') . '</div>');
|
|
$html = $list_button ? $button : $save_action;
|
|
|
|
return $html;
|
|
}
|
|
/* submit YOUTUBE video feeds */
|
|
public function processVideoFeed()
|
|
{
|
|
global $cfg;
|
|
|
|
if (isset($_POST['feed_categ'])) {
|
|
//standard feeds
|
|
$out = self::getAndPrintStandardFeeds('m1');
|
|
} else {
|
|
//channel feeds
|
|
$out = self::getAndPrintStandardFeeds('m2');
|
|
}
|
|
|
|
echo $out;
|
|
}
|
|
/* submit VIMEO user video feeds */
|
|
public function processVimeoFeed()
|
|
{
|
|
global $class_filter, $language, $cfg, $smarty, $side;
|
|
|
|
$user = $class_filter->clr_str(trim($_POST['feed_channel_vimeo']));
|
|
$type = $class_filter->clr_str($_POST['feed_type_vimeo']);
|
|
$results = $class_filter->clr_str($_POST['feed_results_vimeo']);
|
|
|
|
$smarty->assign('page_display', 'tpl_import');
|
|
|
|
switch ($results) {
|
|
case '1_-_20':$page = 1;
|
|
break;
|
|
case '21_-_40':$page = 2;
|
|
break;
|
|
case '41_-_60':$page = 3;
|
|
break;
|
|
default:$page = 1;
|
|
break;
|
|
}
|
|
|
|
$vimeo_api = 'http://vimeo.com/api/v2/' . $user . '/' . $type . '.php?page=' . $page;
|
|
|
|
$r = VServer::curl_tt($vimeo_api);
|
|
$res = unserialize($r);
|
|
$count = 1;
|
|
$checked = count($_POST['import_id']);
|
|
$error = false;
|
|
|
|
$btn1 = 'list_vimeo_feed';
|
|
$btn2 = 'import_vimeo_feed';
|
|
$usr = 'assign_username_import_vimeo_channel';
|
|
|
|
$btn = VGenerate::basicInput('button', $btn2, 'no-display save-videos-button search-button form-button ' . str_replace('_', '-', $btn2), '', 'import', $language['backend.import.feed.import']);
|
|
|
|
if ($_GET['do'] == 'import-vimeo-feed' and $checked == 0) {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.nosel'], '');
|
|
} elseif ($_POST[$usr] == '' and $side == 'backend' and $_GET['do'] == 'import-vimeo-feed') {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.username'], '');
|
|
}
|
|
|
|
if (is_array($res)) {
|
|
$html = '<div class="entry-list wdmax">';
|
|
$html .= '<div class="section-top-bar" id="ct-wrapper">';
|
|
$html .= '<div class="left-float left-padding5">';
|
|
$html .= '<div class="sortings">';
|
|
$html .= '<div class="icheck-box fetched place-left" id="checkselect-all-entries"><input type="checkbox" id="check-all" /></div>';
|
|
$html .= self::selectEntries($btn1, $btn2);
|
|
$html .= $btn;
|
|
$html .= '</div>';
|
|
$html .= '<div class="page-actions">' . $smarty->fetch("tpl_backend/tpl_settings/ct-save-open-close.tpl") . '</div>';
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '<div class="entry-response">' . $error . '</div>';
|
|
$html .= '<ul class="responsive-accordion responsive-accordion-default bm-larger">';
|
|
foreach ($res as $v) {
|
|
$db_categ_id = 0;
|
|
$tmb = array(
|
|
0 => $v['thumbnail_large'],
|
|
1 => $v['thumbnail_medium'],
|
|
2 => $v['thumbnail_medium'],
|
|
3 => $v['thumbnail_medium'],
|
|
);
|
|
|
|
$html .= '<li>';
|
|
$html .= '<div>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb active">';
|
|
$html .= '<span class="icheck-box fetched"><input type="checkbox" name="import_id[]"' . ((count($_POST['import_id']) > 0 and in_array($v['id'], $_POST['import_id'])) ? ' checked="checked"' : null) . ' class="import-selected" value="' . $v['id'] . '" /></span>';
|
|
$html .= VGenerate::simpleDivWrap('entry-title-off ct-bullet-label left-float right-padding10 link', '', '', '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: none;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: block;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel active" style="display: block;">';
|
|
$html .= VGenerate::simpleDivWrap('left-float vs-column thirds', '', '<a href="http://vimeo.com/' . $v['id'] . '" target="_blank"><img width="168" src="' . $v['thumbnail_medium'] . '" /></a>');
|
|
$html .= '<div class="left-float wd300 left-padding10 vs-column two_thirds fit">';
|
|
|
|
$html .= !$error ? self::saveCheck($v['id'], array(
|
|
"title" => $v['title'],
|
|
"description" => $v['description'],
|
|
"tags" => $v['tags'],
|
|
"category" => ((isset($_POST['assign_category_vimeo']) and $_POST['assign_category_vimeo'] != '') ? intval($_POST['assign_category_vimeo']) : ($db_categ_id > 0 ? $db_categ_id : self::getOther())),
|
|
"duration" => $v['duration'],
|
|
"key" => $v['id'],
|
|
"src" => 'vimeo',
|
|
"url" => $v['url'],
|
|
"tmb" => $tmb)) : null;
|
|
|
|
$html .= VGenerate::simpleDivWrap('row bold embed-title', '', $v['title']);
|
|
$d = str_replace('<br />', "\n", $v['description']);
|
|
$html .= VGenerate::simpleDivWrap('row embed-description', '', VUserinfo::truncateString($d, 200));
|
|
$html .= '</div><div class="clearfix"></div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
|
|
$count++;
|
|
}
|
|
$html .= '</ul>';
|
|
$html .= '</div>';
|
|
|
|
$html .= VGenerate::declareJS(self::grabberjs());
|
|
$html .= '<script type="text/javascript">' . $smarty->fetch($cfg['javascript_dir_be'] . '/settings-accordion.js') . '</script>';
|
|
|
|
} else {
|
|
$html = $r;
|
|
}
|
|
|
|
$ht = '<div style="overflow-y: scroll; height: 640px;">' . $html . '</div>';
|
|
|
|
echo $ht;
|
|
}
|
|
/* submit DAILYMOTION user and video feeds */
|
|
public function processDailymotionFeed()
|
|
{
|
|
global $class_filter, $db, $language, $smarty, $cfg, $side;
|
|
|
|
$_do = $class_filter->clr_str($_GET['do']);
|
|
$user = $class_filter->clr_str(trim($_POST['feed_channel_dm']));
|
|
$type = $class_filter->clr_str($_POST['feed_type_dm']);
|
|
$type_video = $class_filter->clr_str($_POST['feed_type_dm_video']);
|
|
$categ_video = $class_filter->clr_str($_POST['assign_category_dm_video']);
|
|
$sort_video = $class_filter->clr_str($_POST['feed_sort_dm_video']);
|
|
$region_video = $class_filter->clr_str($_POST['feed_region_dm']);
|
|
$search_video = $class_filter->clr_str($_POST['be_search_term']);
|
|
|
|
$results = ($_do == 'dm-feed' or $_do == 'import-dm-user') ? $class_filter->clr_str($_POST['feed_results_dm']) : $class_filter->clr_str($_POST['feed_results_dm_type']);
|
|
$fr = explode("-", $results);
|
|
$feed_start = substr($fr[0], 0, -1);
|
|
$feed_max = substr($fr[1], 1);
|
|
$feed_stop = 50;
|
|
$feed_page = $feed_max / $feed_stop;
|
|
|
|
$dm_api = 'https://api.dailymotion.com';
|
|
$dm_get = ($_do == 'dm-feed' or $_do == 'import-dm-user') ? '/user/' . $user . '/' . $type : '/videos';
|
|
$dm_param = '?page=' . $feed_page . '&limit=' . $feed_stop . '&fields=description,duration,tags,title,channel,thumbnail_url,thumbnail_small_url,thumbnail_medium_url,thumbnail_large_url,url,id';
|
|
if ($_do == 'dm-video' or $_do == 'import-dm-video') {
|
|
$dm_param .= ($type_video != '' ? '&filters=' . $type_video : null);
|
|
$dm_param .= ($categ_video != '' ? '&channel=' . $categ_video : null);
|
|
$dm_param .= ($sort_video != '' ? '&sort=' . $sort_video : null);
|
|
$dm_param .= ($region_video != '' ? '&language=' . $region_video : null);
|
|
$dm_param .= ($search_video != '' ? '&search=' . urlencode($search_video) : null);
|
|
}
|
|
$dm_api = $dm_api . $dm_get . $dm_param;
|
|
|
|
$rs = VServer::curl_tt($dm_api);
|
|
$res = json_decode($rs, true);
|
|
$err = $res['error']['message'] != '' ? $res['error']['message'] : false;
|
|
$error = false;
|
|
$total = count($res['list']);
|
|
$checked = is_array($_POST['import_id']) ? count($_POST['import_id']) : 0;
|
|
|
|
if ($_do == 'dm-feed' or $_do == 'import-dm-user') {
|
|
$btn1 = 'list_dailymotion_feed';
|
|
$btn2 = 'import_dailymotion_feed';
|
|
$usr = 'assign_username_import_dm_channel';
|
|
} else {
|
|
$btn1 = 'list_dailymotion_feed_video';
|
|
$btn2 = 'import_dailymotion_feed_video';
|
|
$usr = 'assign_username_import_dm_video';
|
|
}
|
|
|
|
$smarty->assign('page_display', 'tpl_import');
|
|
|
|
$btn = VGenerate::basicInput('button', $btn2, 'no-display save-videos-button search-button form-button ' . str_replace('_', '-', $btn2), '', 'import', $language['backend.import.feed.import']);
|
|
|
|
if (($_GET['do'] == 'import-dm-user' or $_GET['do'] == 'import-dm-video') and $checked == 0) {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.nosel'], '');
|
|
} elseif ($_POST[$usr] == '' and $side == 'backend' and ($_GET['do'] == 'import-dm-user' or $_GET['do'] == 'import-dm-video')) {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.username'], '');
|
|
}
|
|
|
|
$i = 0;
|
|
$count = 1;
|
|
|
|
$html = '<div class="entry-list wdmax">';
|
|
$html .= '<div class="section-top-bar" id="ct-wrapper">';
|
|
$html .= '<div class="left-float left-padding5">';
|
|
$html .= '<div class="sortings">';
|
|
$html .= '<div class="icheck-box fetched place-left" id="checkselect-all-entries"><input type="checkbox" id="check-all" /></div>';
|
|
$html .= self::selectEntries($btn1, $btn2);
|
|
$html .= $btn;
|
|
$html .= '</div>';
|
|
$html .= '<div class="page-actions">' . $smarty->fetch("tpl_backend/tpl_settings/ct-save-open-close.tpl") . '</div>';
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '</div>'; //end left-float
|
|
$html .= '</div>'; //end section-top-bar
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '<div class="entry-response">' . ($err != '' ? $err : $error) . '</div>';
|
|
$html .= '<ul class="responsive-accordion responsive-accordion-default bm-larger">';
|
|
foreach ($res['list'] as $k => $v) {
|
|
$dbc = $db->execute(sprintf("SELECT `ct_id`, `ct_name` FROM `db_categories` WHERE `ct_type`='video' AND `ct_active`='1' AND `ct_name` LIKE '%s' OR `ct_descr` LIKE '%s';", '%' . $v['channel'] . '%', '%' . $v['channel'] . '%'));
|
|
$db_categ_id = $dbc->fields['ct_id'];
|
|
$ct_name = $dbc->fields['ct_name'];
|
|
$tmb = array(
|
|
0 => $v['thumbnail_large_url'],
|
|
1 => $v['thumbnail_medium_url'],
|
|
2 => $v['thumbnail_medium_url'],
|
|
3 => $v['thumbnail_medium_url'],
|
|
);
|
|
|
|
$html .= '<li>';
|
|
$html .= '<div>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb active">';
|
|
$html .= '<span class="icheck-box fetched"><input type="checkbox" name="import_id[]"' . ((is_array($_POST['import_id']) and count($_POST['import_id']) > 0 and in_array($v['id'], $_POST['import_id'])) ? ' checked="checked"' : null) . ' class="import-selected" value="' . $v['id'] . '" /></span>';
|
|
$html .= VGenerate::simpleDivWrap('entry-title-off ct-bullet-label left-float right-padding10 link', '', '', '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: none;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: block;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel active" style="display: block;">';
|
|
$html .= VGenerate::simpleDivWrap('left-float vs-column thirds', '', '<a href="' . $v['url'] . '" target="_blank"><img width="168" src="' . $v['thumbnail_medium_url'] . '" /></a>');
|
|
$html .= '<div class="left-float wd300 left-padding10 vs-column two_thirds fit">';
|
|
$html .= (!$err and !$error) ? self::saveCheck($v['id'], array(
|
|
"title" => $v['title'],
|
|
"description" => $v['description'],
|
|
"tags" => implode(" ", $v['tags']),
|
|
"category" => ((isset($_POST['assign_category_dm_type']) and $_POST['assign_category_dm_type'] != '') ? intval($_POST['assign_category_dm_type']) : ((isset($_POST['assign_category_dm']) and $_POST['assign_category_dm'] != '') ? intval($_POST['assign_category_dm']) : ($db_categ_id > 0 ? $db_categ_id : self::getOther()))),
|
|
"duration" => $v['duration'],
|
|
"key" => $v['id'],
|
|
"src" => 'dailymotion',
|
|
"url" => $v['url'],
|
|
"tmb" => $tmb)) : null;
|
|
|
|
$html .= VGenerate::simpleDivWrap('row bold embed-title', '', $v['title']);
|
|
$d = str_replace('<br />', "\n", $v['description']);
|
|
$html .= VGenerate::simpleDivWrap('row embed-description', '', VUserinfo::truncateString($d, 200));
|
|
$html .= VGenerate::simpleDivWrap('row greyed-out embed-category', '', $language['backend.import.category'] . ($ct_name != '' ? $ct_name : $v['channel']));
|
|
$html .= '</div><div class="clearfix"></div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
|
|
$count++;
|
|
}
|
|
$html .= '</ul>';
|
|
$html .= '</div>';
|
|
|
|
$html .= VGenerate::declareJS(self::grabberjs());
|
|
$html .= '<script type="text/javascript">' . $smarty->fetch($cfg['javascript_dir_be'] . '/settings-accordion.js') . '</script>';
|
|
|
|
$ht = '<div style="overflow-y: scroll; height: 640px;">' . $html . '</div>';
|
|
|
|
echo $ht;
|
|
}
|
|
private static function durationFromString($string)
|
|
{
|
|
if (is_array($string) and isset($string[0])) {
|
|
$string = $string[0];
|
|
}
|
|
|
|
if (substr($string, 0, 2) === "PT") {
|
|
$period = new DateInterval($string);
|
|
$totalSeconds = $period->s + $period->i * 60;
|
|
} else {
|
|
if (strpos($string, ":") !== false) {
|
|
$exp = explode(":", $string);
|
|
$ext = count($exp);
|
|
|
|
if ($ext == 2) {
|
|
$hours = 0;
|
|
|
|
list($minutes, $seconds) = $exp;
|
|
} elseif ($ext == 3) {
|
|
list($hours, $minutes, $seconds) = $exp;
|
|
}
|
|
|
|
$totalSeconds = $hours * 3600 + $minutes * 60 + $seconds;
|
|
} else {
|
|
$totalSeconds = $string;
|
|
}
|
|
}
|
|
|
|
return (float) $totalSeconds;
|
|
}
|
|
private static function extractUniqueWords($inputArray, $limit = 10)
|
|
{
|
|
$uniqueWords = array();
|
|
$count = 0;
|
|
|
|
foreach ($inputArray as $text) {
|
|
$words = explode(" ", $text);
|
|
|
|
foreach ($words as $word) {
|
|
// Remove non-alphanumeric characters and convert to lowercase
|
|
$word = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $word));
|
|
|
|
// Check if the word is longer than 4 characters and not in the $uniqueWords array
|
|
if (strlen($word) > 4 && !in_array($word, $uniqueWords)) {
|
|
$uniqueWords[] = $word;
|
|
$count++;
|
|
}
|
|
|
|
// Stop after reaching the specified limit
|
|
if ($count >= $limit) {
|
|
break 2; // Break both the inner and outer loops
|
|
}
|
|
}
|
|
}
|
|
|
|
return $uniqueWords;
|
|
}
|
|
/* submit single video embed */
|
|
public function processVideoEmbed()
|
|
{
|
|
global $class_filter, $language, $cfg;
|
|
|
|
require_once 'f_core/f_classes/class_oembed/vendor/autoload.php';
|
|
|
|
// $video_url = $class_filter->clr_str($_POST['be_video_url']);
|
|
$video_url = htmlspecialchars($_POST['be_video_url']);
|
|
$video_categ = $class_filter->clr_str($_POST['assign_category_file']);
|
|
$u = parse_url($video_url);
|
|
$h = explode('.', $u['host']);
|
|
$src = $h[(count($h) - 2)];
|
|
$src = ($src == 'youtu' ? 'youtube' : $src);
|
|
$data = array();
|
|
$duration = null;
|
|
$short = 0;
|
|
|
|
try {
|
|
$embed = new Embed();
|
|
$info = $embed->get($video_url);
|
|
$title = $info->title;
|
|
$thumb = $info->image;
|
|
$code = $info->code->html;
|
|
$description = $info->description ?: $title;
|
|
$tags = $info->keywords ?: $title;
|
|
|
|
if ($src == 'facebook') {
|
|
$metas = $info->getMetas()->all();
|
|
$title = $metas['og:title'][0];
|
|
$description = $metas['og:description'][0];
|
|
$thumb = $metas['og:image'][0];
|
|
$tags = implode(' ', self::extractUniqueWords(array_slice($metas['og:title'], 0, 10)));
|
|
$code = '<style type="text/css">.fb-video{width:640px;height:360px}.fb-video > span, .fb-video iframe{width:100% !important;height:100% !important}</style><div id="fb-root"></div><script async defer src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.2"></script><div class="fb-video" data-href="' . $video_url . '" data-allowfullscreen="true" data-width="640px"></div>';
|
|
}
|
|
if (is_array($tags)) {
|
|
$tags = implode(' ', self::extractUniqueWords(array_slice($tags, 0, 10)));
|
|
}
|
|
if (strpos($u['path'], "/shorts/") !== false) {
|
|
$short = 1;
|
|
}
|
|
if ($title and $thumb and $code) {
|
|
$metas = $info->getMetas()->all();
|
|
|
|
if (isset($metas['og:video:duration'])) {
|
|
$duration = $metas['og:video:duration'];
|
|
} elseif (isset($metas['video:duration'])) {
|
|
$duration = $metas['video:duration'];
|
|
} elseif (isset($metas['duration'][0])) {
|
|
$duration = $metas['duration'][0];
|
|
} elseif (isset($metas['duration'])) {
|
|
$duration = $metas['duration'];
|
|
}
|
|
if ($duration) {
|
|
$duration = self::durationFromString($duration);
|
|
}
|
|
if (!$duration) {
|
|
$ld = $info->getLinkedData()->all();
|
|
|
|
if (isset($ld[0]['duration'])) {
|
|
$duration = $ld[0]['duration'];
|
|
} elseif (isset($ld['duration'])) {
|
|
$duration = $ld['duration'];
|
|
}
|
|
|
|
if ($duration) {
|
|
$duration = self::durationFromString($duration);
|
|
}
|
|
}
|
|
if (!$duration) {
|
|
$duration = 1;
|
|
}
|
|
|
|
$key = md5($video_url);
|
|
|
|
if ($src == 'youtube') {
|
|
$u = parse_url($video_url);
|
|
$v = explode('&', $u['query']);
|
|
$id = $class_filter->clr_str(substr($v[0], 2));
|
|
|
|
if ($id == '') {
|
|
$id = str_replace("/", "", $u['path']);
|
|
}
|
|
|
|
$key = str_replace('shorts', '', $id);
|
|
|
|
if ($short) {
|
|
$thumb = 'https://i.ytimg.com/vi/' . $key . '/hq720.jpg';
|
|
}
|
|
}
|
|
|
|
$data['src'] = $src;
|
|
$data['title'] = $title;
|
|
$data['description'] = $description;
|
|
$data['duration'] = $duration;
|
|
$data['tags'] = $tags;
|
|
$data['url'] = $info->url;
|
|
$data['code'] = $code;
|
|
$data['key'] = $key;
|
|
$data['category'] = null;
|
|
$data['short'] = $short;
|
|
$data['tmb'] = array(
|
|
0 => $thumb,
|
|
1 => $thumb,
|
|
);
|
|
|
|
$html = self::embedFile_details($src, $data);
|
|
|
|
echo $html;
|
|
} else {
|
|
echo VGenerate::noticeTpl('', 'Unable to extract video data.', '');
|
|
return false;
|
|
}
|
|
} catch (Exception $e) {
|
|
echo VGenerate::noticeTpl('', $e->getMessage(), '');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* print details about embedded video */
|
|
public function embedFile_details($src, $info)
|
|
{
|
|
global $cfg, $db, $class_filter, $language, $smarty, $side;
|
|
|
|
$ec = preg_replace('/(width|height)="[^"]*"/', '$1="100%"', $info['code']);
|
|
$video_categ = $class_filter->clr_str($_POST['assign_category_file']);
|
|
$username = $class_filter->clr_str($_POST['assign_username_import_single']);
|
|
$db_uid = $class_filter->clr_str($_POST['assign_username']);
|
|
|
|
if ($cfg['import_mode'] == 'ask') {
|
|
$save_action = '<div class="row icheck-box ask"><input type="radio" name="save_action" value="embed" checked="checked" /><label>' . $language['backend.import.embed'] . '</label> <input type="radio" name="save_action" value="download" /><label>' . $language['backend.import.download'] . '</label></div>';
|
|
} else {
|
|
$save_action = '<div class="row no-display"><input type="hidden" name="save_action" value="' . $cfg['import_mode'] . '" readonly="readonly" /></div>';
|
|
}
|
|
|
|
$error = false;
|
|
|
|
if ($video_categ == '' and $_GET['do'] == 'video-embed') {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.category'], '');
|
|
} elseif ($username == '' and $_GET['do'] == 'video-embed' and $side == 'backend') {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.username'], '');
|
|
}
|
|
|
|
$smarty->assign('page_display', 'tpl_import');
|
|
|
|
$html = '<div class="entry-list wdmax">';
|
|
$html .= '<div class="section-top-bar" id="ct-wrapper">';
|
|
$html .= '<div class="left-float left-padding5">';
|
|
$html .= '<div class="sortings">';
|
|
$html .= VGenerate::simpleDivWrap('row', '', $save_action);
|
|
$html .= VGenerate::basicInput('button', 'embed_video_file', 'no-display save-videos-button search-button form-button embed-video-file', '', 'embed', $language['backend.embed.video.save']);
|
|
$html .= '</div>';
|
|
$html .= '<div class="page-actions">' . $smarty->fetch("tpl_backend/tpl_settings/ct-save-open-close.tpl") . '</div>';
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '<div class="entry-response">' . $error . '</div>';
|
|
|
|
$html .= '<ul class="responsive-accordion responsive-accordion-default bm-larger">';
|
|
$html .= '<li>';
|
|
$html .= '<div>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb active">';
|
|
$html .= VGenerate::simpleDivWrap('entry-title-off ct-bullet-label left-float right-padding10 link', '', $info['title'], '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: none;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: block;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel active d-column">';
|
|
|
|
if ($_GET['do'] == 'video-embed' and !$error) {
|
|
//save embedded video
|
|
$info['url'] = $class_filter->clr_str($_POST['be_video_url']);
|
|
$html .= VGenerate::simpleDivWrap('row', '', self::saveCheck($info['key'], $info));
|
|
}
|
|
|
|
$html .= '<div class="d-flex d-column">';
|
|
$html .= '<div class="vs-column full embed-player">' . $ec . '</div>';
|
|
$html .= '<div class="vs-column full fit embed-info">';
|
|
|
|
$html .= VGenerate::simpleDivWrap('row embed-description', '', str_replace("\n", '<br>', $info['description']));
|
|
$html .= VGenerate::simpleDivWrap('row greyed-out embed-tags', '', 'tags: ' . $info['tags']);
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
$html .= '</ul>';
|
|
$html .= '</div>';
|
|
|
|
$html .= VGenerate::declareJS(self::grabberjs());
|
|
$html .= '<script type="text/javascript">' . $smarty->fetch($cfg['javascript_dir_be'] . '/settings-accordion.js') . '</script>';
|
|
|
|
return $html;
|
|
}
|
|
|
|
/* check and save selected files, save single embedded file */
|
|
public function saveCheck($db_rkey, $info)
|
|
{
|
|
global $language, $class_filter, $db;
|
|
|
|
$ok = null;
|
|
$_do = $class_filter->clr_str($_GET['do']);
|
|
$checked = $_do == 'video-embed' ? 1 : (is_array($_POST['import_id']) ? count($_POST['import_id']) : 0);
|
|
$save_action = $class_filter->clr_str($_POST['save_action']);
|
|
if ($_do == 'video-embed' or (substr($_GET['do'], 0, 6) == 'import' and $checked > 0)) {
|
|
if ($_do == 'video-embed' or (in_array($db_rkey, $_POST['import_id']))) {
|
|
$act = self::embedFile_save(array(
|
|
"title" => $info['title'],
|
|
"description" => $info['description'],
|
|
"tags" => $info['tags'],
|
|
"category" => $info['category'],
|
|
"duration" => $info['duration'],
|
|
"key" => $info['key'],
|
|
"src" => $info['src'],
|
|
"url" => $info['url'],
|
|
"tmb" => $info['tmb'],
|
|
"short" => (int) $info['short'],
|
|
));
|
|
|
|
if ($db->Affected_Rows() > 0) {
|
|
$ok = '<span class="conf-green lh20 left-margin5">' . ($save_action == 'download' ? $language['backend.embed.confirmed.dl'] : $language['backend.embed.confirmed']) . '</span>';
|
|
} else {
|
|
$ok = '<span class="err-red lh20 left-margin5">' . $language['backend.embed.failed'] . '</span>';
|
|
}
|
|
}
|
|
}
|
|
|
|
return $ok;
|
|
}
|
|
/* save file to database */
|
|
public function embedFile_save($info)
|
|
{
|
|
global $class_database, $cfg, $db, $class_filter, $side, $smarty;
|
|
|
|
$err = false;
|
|
$short = (isset($info['short']) and $info['short'] == 1);
|
|
$type = $short ? 'short' : 'video';
|
|
$filekey = VUserinfo::generateRandomString(10);
|
|
$chk = $class_database->singleFieldValue('db_' . $type . 'files', 'db_id', 'file_key', $filekey);
|
|
|
|
for ($i = 1; $i <= 10; $i++) {
|
|
$chk = $class_database->singleFieldValue('db_' . $type . 'files', 'db_id', 'file_key', $filekey);
|
|
|
|
if ($chk) {
|
|
$filekey = VUserinfo::generateRandomString(10);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
$ukey = $side == 'backend' ? $class_filter->clr_str($_POST['assign_username']) : $_SESSION['USER_KEY'];
|
|
if ($ukey == '' and $side != 'backend') {
|
|
header("Location:" . $cfg['main_url'] . '/' . VHref::getKey('signout'));
|
|
exit;
|
|
}
|
|
$info['title'] = $class_filter->clr_str($info['title']);
|
|
$info['description'] = $class_filter->clr_str(str_replace(array('<br />', '<br>'), array("\n", "\n"), $info['description']));
|
|
$info['tags'] = str_replace('quot', '', $info['tags']);
|
|
$info['tags'] = str_replace('amp', '', $info['tags']);
|
|
|
|
$categ = isset($_POST['assign_category_file']) ? $class_filter->clr_str($_POST['assign_category_file']) :
|
|
(isset($_POST['assign_category_feed']) ? $class_filter->clr_str($_POST['assign_category_feed']) :
|
|
(isset($_POST['assign_category_channel']) ? $class_filter->clr_str($_POST['assign_category_channel']) :
|
|
(isset($_POST['assign_category_dm_type']) ? $class_filter->clr_str($_POST['assign_category_dm_type']) :
|
|
(isset($_POST['assign_category_dm']) ? $class_filter->clr_str($_POST['assign_category_dm']) :
|
|
(isset($_POST['assign_category_vimeo']) ? $class_filter->clr_str($_POST['assign_category_vimeo']) : self::getOther())))));
|
|
|
|
if ($side == 'backend') {
|
|
$ukey = isset($_POST['assign_category_file']) ? $class_filter->clr_str($_POST['assign_username_import_single']) :
|
|
(isset($_POST['assign_category_feed']) ? $class_filter->clr_str($_POST['assign_username_import_yt_video']) :
|
|
(isset($_POST['assign_category_channel']) ? $class_filter->clr_str($_POST['assign_username_import_yt_channel']) :
|
|
(isset($_POST['assign_category_dm_type']) ? $class_filter->clr_str($_POST['assign_username_import_dm_video']) :
|
|
(isset($_POST['assign_category_dm']) ? $class_filter->clr_str($_POST['assign_username_import_dm_channel']) :
|
|
(isset($_POST['assign_category_vimeo']) ? $class_filter->clr_str($_POST['assign_username_import_vimeo_channel']) : self::getOther())))));
|
|
}
|
|
|
|
$usr_id = $side == 'backend' ? $class_database->singleFieldValue('db_accountuser', 'usr_id', 'usr_key', $ukey) : intval($_SESSION['USER_ID']);
|
|
$save_action = $class_filter->clr_str($_POST['save_action']);
|
|
$db_approved = (($cfg['file_approval'] == 1 or $save_action == 'download') ? 0 : 1);
|
|
|
|
$v_info = array(
|
|
"usr_id" => $usr_id,
|
|
"file_key" => $filekey,
|
|
"old_file_key" => 0,
|
|
"file_type" => 'embed',
|
|
"file_name" => 'none',
|
|
"file_size" => 0,
|
|
"file_duration" => $class_filter->clr_str(($info['duration'] == '' or (int) $info['duration'] == 0) ? 1 : $info['duration']),
|
|
"upload_date" => date("Y-m-d H:i:s"),
|
|
"is_subscription" => ($side == 'frontend' ? intval($cfg['paid_memberships']) : 0),
|
|
"file_views" => 0,
|
|
"file_comments" => 0,
|
|
"file_responses" => 0,
|
|
"file_like" => 0,
|
|
"file_dislike" => 0,
|
|
"file_mobile" => 1,
|
|
"embed_key" => $class_filter->clr_str(str_replace('shorts', '', $info['key'])),
|
|
"embed_src" => $class_filter->clr_str($info['src']),
|
|
"embed_url" => $class_filter->clr_str($info['url']),
|
|
"file_title" => $info['title'],
|
|
"file_description" => $info['description'],
|
|
"file_tags" => VForm::clearTag($info['tags']),
|
|
"file_category" => intval($categ != '' ? $categ : $info['category']),
|
|
"approved" => $db_approved,
|
|
"privacy" => "public",
|
|
"comments" => "all",
|
|
"comment_votes" => 1,
|
|
"rating" => 1,
|
|
"responding" => "all",
|
|
"embedding" => 1,
|
|
"social" => 1,
|
|
);
|
|
|
|
if ($cfg['paid_memberships'] == 1 and $side == 'frontend' and $save_action == 'embed') {
|
|
$err = VUpload::subscriptionCheck($type);
|
|
$db_id = 0;
|
|
}
|
|
if (!$err) {
|
|
$do_db = $class_database->doInsert('db_' . $type . 'files', $v_info);
|
|
$db_id = $db->Insert_ID();
|
|
}
|
|
|
|
if ($db_id > 0) {
|
|
if ($save_action == 'download') {
|
|
$v_que = array(
|
|
"file_key" => $filekey,
|
|
"usr_key" => $ukey,
|
|
);
|
|
$do_db = $class_database->doInsert('db_videodl', $v_que);
|
|
}
|
|
$activity = ($cfg['activity_logging'] == 1 and $action = new VActivity($usr_id, 0)) ? $action->addTo('log_upload', $type . ':' . $filekey) : null;
|
|
|
|
$src_folder = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/';
|
|
foreach ($info['tmb'] as $k => $tmb) {
|
|
//download thumbnails
|
|
$tmb = $info['tmb'][$k];
|
|
$file_loc = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/' . $k . '.tmp.jpg';
|
|
$file_src = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/0.tmp.jpg';
|
|
$d1 = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey;
|
|
if (!is_dir($d1)) {
|
|
mkdir($d1);
|
|
}
|
|
|
|
if ($info['src'] == 'youtube' and $k == 0) {
|
|
$cmd = 'curl -r 0-25 --silent ' . $tmb . ' | identify -format "%wx%h" -';
|
|
// error_log($cmd);
|
|
exec($cmd . ' 2>&1', $output);
|
|
|
|
$dim = $output[0];
|
|
|
|
if ($dim == '120x90') {
|
|
$tmb = str_replace('maxresdefault.jpg', 'mqdefault.jpg', $tmb);
|
|
}
|
|
}
|
|
|
|
$ch = curl_init($tmb);
|
|
$fp = fopen($file_loc, 'wb');
|
|
curl_setopt($ch, CURLOPT_FILE, $fp);
|
|
curl_setopt($ch, CURLOPT_HEADER, 0);
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
curl_exec($ch);
|
|
curl_close($ch);
|
|
fclose($fp);
|
|
|
|
if (file_exists($file_loc) and $k > 0) {
|
|
$conv = new VDocument();
|
|
$conv->log_setup($filekey, true);
|
|
$dst_folder_tmb = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/';
|
|
|
|
if ($conv->createThumbs_ffmpeg($src_folder, $k, 640, 360, $filekey, $ukey, $file_src, $short)) {
|
|
$final = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/' . $k . '.jpg';
|
|
|
|
if (file_exists($final)) {
|
|
unlink($file_loc);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (file_exists($file_src)) {
|
|
$conv = new VDocument();
|
|
$conv->log_setup($filekey, true);
|
|
$dst_folder_tmb = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/';
|
|
|
|
if ($conv->createThumbs_ffmpeg($src_folder, 0, 640, 360, $filekey, $ukey, $file_src, $short)) {
|
|
$final = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/0.jpg';
|
|
|
|
if (file_exists($final)) {
|
|
unlink($file_src);
|
|
}
|
|
}
|
|
}
|
|
if (!VGenerate::isImage($cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/0.jpg')) {
|
|
if (file_exists($cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/0.jpg')) {
|
|
unlink($cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/0.jpg');
|
|
}
|
|
|
|
if (file_exists($cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/1.jpg')) {
|
|
unlink($cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/1.jpg');
|
|
}
|
|
|
|
$tmp_file = str_replace($cfg['main_url'], $cfg['main_dir'], VUseraccount::getProfileImage($usr_id, false));
|
|
if ($tmp_file && is_file($tmp_file)) {
|
|
$src_folder = $cfg['media_files_dir'] . '/' . $ukey . '/t/' . $filekey . '/';
|
|
$conv = new VDocument();
|
|
$conv->log_setup($filekey, false);
|
|
|
|
if ($conv->createThumbs_ffmpeg($src_folder, '1', 320, 180, $filekey, $ukey, $tmp_file, $short)) {}
|
|
if ($conv->createThumbs_ffmpeg($src_folder, '0', 640, 360, $filekey, $ukey, $tmp_file, $short)) {}
|
|
}
|
|
}
|
|
$ct_update = $db->execute(sprintf("UPDATE `db_accountuser` SET `usr_%s_count`=`usr_%s_count`+1 WHERE `usr_id`='%s' LIMIT 1;", $type[0], $type[0], $usr_id));
|
|
if ($cfg['paid_memberships'] == 1 and $side == 'frontend' and $save_action == 'embed') {
|
|
$ct_update = $db->execute(sprintf("UPDATE `db_packusers` SET `pk_total_%s`=`pk_total_%s`+1 WHERE `usr_id`='%s' LIMIT 1;", $type, $type, $usr_id));
|
|
}
|
|
}
|
|
}
|
|
|
|
/* get youtube tags from title */
|
|
public function yt_tags($string)
|
|
{
|
|
$tags = array();
|
|
$arr = explode(' ', $string);
|
|
|
|
foreach ($arr as $word) {
|
|
if (strlen($word) > 4) {
|
|
$tags[] = VUserinfo::clearString($word);
|
|
}
|
|
}
|
|
|
|
if ($tags[0][0]) {
|
|
return str_replace(array('amp', 'quot'), array('', ''), implode(" ", $tags));
|
|
}
|
|
}
|
|
/* single file embed, get YOUTUBE details */
|
|
public function embedFile_youtube($url)
|
|
{
|
|
return;
|
|
|
|
global $class_filter, $language, $cfg;
|
|
|
|
$DEVELOPER_KEY = $cfg['youtube_api_key'];
|
|
|
|
$client = new Google_Client();
|
|
$client->setDeveloperKey($DEVELOPER_KEY);
|
|
// Define an object that will be used to make all API requests.
|
|
$youtube = new Google_Service_YouTube($client);
|
|
|
|
$info = array();
|
|
$v = explode('&', $url['query']);
|
|
$id = $url['path'] == "/watch" ? $class_filter->clr_str(substr($v[0], 2)) : null;
|
|
|
|
if ($id == '') {
|
|
$id = str_replace(array("/live", "/"), array("", ""), $url['path']);
|
|
}
|
|
|
|
try {
|
|
$videosResponse = $youtube->videos->listVideos('snippet,contentDetails,statistics,status', array(
|
|
'id' => $id,
|
|
));
|
|
|
|
foreach ($videosResponse['items'] as $videoResult) {
|
|
$info['src'] = 'youtube';
|
|
$info['key'] = $id;
|
|
$info['title'] = $videoResult['snippet']['title'];
|
|
$info['description'] = $videoResult['snippet']['description'];
|
|
$info['tags'] = self::yt_tags($class_filter->clr_str($info['title']));
|
|
$info['category'] = $language['backend.import.feed.categ.list'][$videoResult['snippet']['categoryId']];
|
|
$date = new DateTime('1970-01-01');
|
|
$date->add(new DateInterval($videoResult['contentDetails']['duration']));
|
|
$duration = $date->format('H:i:s');
|
|
$d = explode(':', $duration);
|
|
$info['duration'] = ($d[0] * 60 * 60) + ($d[1] * 60) + ($d[2]);
|
|
|
|
$tmb = array(
|
|
0 => "http://i.ytimg.com/vi/" . $id . "/maxresdefault.jpg",
|
|
1 => "http://i.ytimg.com/vi/" . $id . "/mqdefault.jpg",
|
|
2 => "http://i.ytimg.com/vi/" . $id . "/mqdefault.jpg",
|
|
3 => "http://i.ytimg.com/vi/" . $id . "/mqdefault.jpg",
|
|
);
|
|
$info['tmb'] = $tmb;
|
|
}
|
|
} catch (Google_Service_Exception $e) {
|
|
$htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage()));
|
|
} catch (Google_Exception $e) {
|
|
$htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
|
|
htmlspecialchars($e->getMessage()));
|
|
}
|
|
|
|
$html = self::embedFile_details('youtube', $info);
|
|
|
|
echo $html;
|
|
}
|
|
/* single file embed, get VIMEO details */
|
|
public function embedFile_vimeo($url)
|
|
{
|
|
global $class_filter;
|
|
$info = array();
|
|
$id = $class_filter->clr_str(substr($url['path'], 1));
|
|
$vimeo_api = 'http://vimeo.com/api/v2/video/' . $id . '.php';
|
|
|
|
$r = unserialize(VServer::curl_tt($vimeo_api));
|
|
|
|
$info['src'] = 'vimeo';
|
|
$info['key'] = $id;
|
|
$info['title'] = $r[0]['title'];
|
|
$info['description'] = $r[0]['description'];
|
|
$info['tags'] = str_replace(',', ' ', $r[0]['tags']);
|
|
$info['category'] = '';
|
|
$info['duration'] = $r[0]['duration'];
|
|
|
|
$tmb = array(
|
|
0 => $r[0]['thumbnail_large'],
|
|
1 => $r[0]['thumbnail_medium'],
|
|
2 => $r[0]['thumbnail_medium'],
|
|
3 => $r[0]['thumbnail_medium'],
|
|
);
|
|
$info['tmb'] = $tmb;
|
|
|
|
$html = self::embedFile_details('vimeo', $info);
|
|
|
|
echo $html;
|
|
}
|
|
/* single file embed, get DAILYMOTION details */
|
|
public function embedFile_dailymotion($url)
|
|
{
|
|
$info = array();
|
|
$p = explode('_', $url['path']);
|
|
$id = str_replace('/video/', '', $p[0]);
|
|
$dm_api = 'https://api.dailymotion.com/video/' . $id . '?fields=description,duration,tags,title,channel,thumbnail_url,thumbnail_small_url,thumbnail_medium_url,thumbnail_large_url';
|
|
|
|
$rs = VServer::curl_tt($dm_api);
|
|
$r = json_decode($rs);
|
|
|
|
$info['src'] = 'dailymotion';
|
|
$info['key'] = $id;
|
|
$info['title'] = $r->{'title'};
|
|
$info['description'] = $r->{'description'};
|
|
$info['tags'] = implode(" ", $r->{'tags'});
|
|
$info['category'] = $r->{'channel'};
|
|
$info['duration'] = $r->{'duration'};
|
|
|
|
$tmb = array(
|
|
0 => $r->{'thumbnail_url'},
|
|
1 => $r->{'thumbnail_medium_url'},
|
|
2 => $r->{'thumbnail_medium_url'},
|
|
3 => $r->{'thumbnail_medium_url'},
|
|
);
|
|
$info['tmb'] = $tmb;
|
|
|
|
$html = self::embedFile_details('dailymotion', $info);
|
|
|
|
echo $html;
|
|
}
|
|
|
|
/* youtube video feeds functions */
|
|
public function getAndPrintVideoFeed($api_url, $feed_type)
|
|
{
|
|
global $language, $class_filter;
|
|
|
|
$response = VServer::curl_tt($api_url);
|
|
$results = json_decode($response);
|
|
|
|
$res = self::printVideoFeed($results, $feed_type);
|
|
$html = $res == '' ? $language['backend.import.feed.stop'] : $res;
|
|
|
|
return '<div style="overflow-y: scroll; height: 640px;">' . $html . '</div>';
|
|
}
|
|
|
|
public function printVideoFeed($videoFeed, $feed_type)
|
|
{
|
|
global $class_filter, $language, $cfg, $smarty, $side;
|
|
|
|
$error = false;
|
|
$count = 1;
|
|
|
|
if (is_array($videoFeed) and count($videoFeed) == 0) {
|
|
return false;
|
|
}
|
|
|
|
$smarty->assign('page_display', 'tpl_import');
|
|
|
|
$checked = is_array($_POST['import_id']) ? count($_POST['import_id']) : 0;
|
|
|
|
switch ($feed_type) {
|
|
case "m1":
|
|
$form = 'video-feed-form';
|
|
$btn1 = 'list_video_feed';
|
|
$btn2 = 'import_video_feed';
|
|
$usr = 'assign_username_import_yt_video';
|
|
break;
|
|
case "m2":
|
|
$form = 'channel-feed-form';
|
|
$btn1 = 'list_channel_feed';
|
|
$btn2 = 'import_channel_feed';
|
|
$usr = 'assign_username_import_yt_channel';
|
|
break;
|
|
}
|
|
|
|
$btn = VGenerate::basicInput('button', $btn2, 'no-display save-videos-button search-button form-button ' . str_replace('_', '-', $btn2), '', 'import', $language['backend.import.feed.import']);
|
|
|
|
if (($_GET['do'] == 'import-yt-channel' or $_GET['do'] == 'import-yt-video') and $checked == 0) {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.nosel'], '');
|
|
} elseif ($_POST[$usr] == '' and $side == 'backend' and ($_GET['do'] == 'import-yt-channel' or $_GET['do'] == 'import-yt-video')) {
|
|
$error = VGenerate::noticeTpl('', $language['backend.embed.username'], '');
|
|
}
|
|
$html = null;
|
|
|
|
$html .= '<div class="entry-list wdmax">';
|
|
$html .= '<div class="section-top-bar" id="ct-wrapper">';
|
|
$html .= '<div class="left-float left-padding5">';
|
|
$html .= '<div class="sortings">';
|
|
$html .= '<div class="icheck-box fetched place-left" id="checkselect-all-entries"><input type="checkbox" id="check-all" /></div>';
|
|
$html .= self::selectEntries($btn1, $btn2);
|
|
$html .= $btn;
|
|
$html .= '</div>';
|
|
$html .= '<div class="page-actions">' . $smarty->fetch("tpl_backend/tpl_settings/ct-save-open-close.tpl") . '</div>';
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '</div>'; //end left-float
|
|
$html .= '</div>'; //end section-top-bar
|
|
$html .= '<div class="clearfix"></div>';
|
|
$html .= '<div class="entry-response">' . $error . '</div>';
|
|
|
|
$html .= '<ul class="responsive-accordion responsive-accordion-default bm-larger">';
|
|
foreach ($videoFeed as $videoEntry) {
|
|
if (is_array($videoEntry)) {
|
|
foreach ($videoEntry as $k => $videoEntryDetails) {
|
|
if ($k >= 0) {
|
|
$_id = $videoEntryDetails->id->videoId;
|
|
$_title = $videoEntryDetails->id->videoTitle;
|
|
|
|
$html .= '<li>';
|
|
$html .= '<div>';
|
|
$html .= '<div class="responsive-accordion-head jc-sb active">';
|
|
$html .= '<span class="icheck-box fetched"><input type="checkbox" name="import_id[]"' . (($checked > 0 and in_array($_id, $_POST['import_id'])) ? ' checked="checked"' : null) . ' class="import-selected" value="' . $_id . '" /></span>';
|
|
$html .= VGenerate::simpleDivWrap('entry-title-off ct-bullet-label left-float right-padding10 link', '', $_title, '', 'span');
|
|
$html .= '<i class="fa fa-chevron-down responsive-accordion-plus fa-fw iconBe-chevron-down" style="display: none;"></i>';
|
|
$html .= '<i class="fa fa-chevron-up responsive-accordion-minus fa-fw iconBe-chevron-up" style="display: block;"></i>';
|
|
$html .= '</div>';
|
|
$html .= '<div class="responsive-accordion-panel active" style="display: block;">';
|
|
$html .= VGenerate::simpleDivWrap('left-float vs-column thirds', '', '<a href="http://www.youtube.com/watch?v=' . $_id . '" target="_blank"><img width="168" src="http://i.ytimg.com/vi/' . $_id . '/0.jpg" /></a>');
|
|
$html .= '<div class="left-float wd400 left-padding10 vs-column two_thirds fit">';
|
|
$html .= self::printVideoEntry($videoFeed, $_id, $error);
|
|
$html .= '</div><div class="clearfix"></div>';
|
|
$html .= '</div>';
|
|
$html .= '</div>';
|
|
$html .= '</li>';
|
|
|
|
$count++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$html .= '</ul>';
|
|
$html .= '</div>';
|
|
|
|
$nextPageToken = $videoFeed->nextPageToken;
|
|
$prevPageToken = $videoFeed->prevPageToken;
|
|
$currentPageToken = isset($_GET['token']) ? $class_filter->clr_str($_GET['token']) : null;
|
|
|
|
$pjsct = $prevPageToken != '' ? '<a href="javascript:;" class="class-token prev-token" rel-form="' . $form . '" onclick="$("#' . $form . ' .class-token").removeClass("active-token"); $(this).addClass("active-token"); $("#' . $form . ' .current-page").html("' . $prevPageToken . '"); $(".list-video-feed-yt").click();">' . $prevPageToken . '</a>' : '##prevPageToken##';
|
|
$njsct = '<a href="javascript:;" class="class-token next-token" rel-form="' . $form . '" onclick="$("#' . $form . ' .class-token").removeClass("active-token"); $(this).addClass("active-token"); $("#' . $form . ' .current-page").html("' . $nextPageToken . '"); $(".list-video-feed-hid").val("' . $form . '"); $(".list-video-feed-yt").click();">' . $nextPageToken . '</a>';
|
|
$cjsct = $currentPageToken != '' ? '<a href="javascript:;" class="class-token current-token" rel-form="' . $form . '" onclick="$("#' . $form . ' .class-token").removeClass("active-token"); $(this).addClass("active-token"); $("#' . $form . ' .current-page").html("' . $currentPageToken . '"); $(".list-video-feed-yt").click();">' . $currentPageToken . '</a>' : '##currentPageToken##';
|
|
|
|
$js = '$(document).ready(function(){$("#' . $form . ' .next-page").html(\'' . $njsct . '\');$("#' . $form . ' .prev-page").html(\'' . $pjsct . '\');$("#' . $form . ' .current-page").html(\'' . $cjsct . '\');});';
|
|
$js .= self::grabberjs();
|
|
|
|
$html .= VGenerate::declareJS($js);
|
|
$html .= '<script type="text/javascript">' . $smarty->fetch($cfg['javascript_dir_be'] . '/settings-accordion.js') . '</script>';
|
|
|
|
return $html;
|
|
}
|
|
|
|
public function grabberjs()
|
|
{
|
|
$js .= '$(".icheck-box.fetched input").each(function () {
|
|
var self = $(this);
|
|
self.iCheck({
|
|
checkboxClass: "icheckbox_square-blue",
|
|
radioClass: "iradio_square-blue",
|
|
increaseArea: "20%"
|
|
});
|
|
});
|
|
$(".embed-title").each(function () {
|
|
var self = $(this).text();
|
|
|
|
$(this).parent().parent().parent().find(".entry-title-off").first().append(self);
|
|
$(this).detach();
|
|
});
|
|
$(document).on({click: function () {
|
|
$("#right-side .responsive-accordion div.responsive-accordion-head").addClass("active");
|
|
$("#right-side .responsive-accordion div.responsive-accordion-panel").addClass("active").show();
|
|
$("#right-side .responsive-accordion i.responsive-accordion-plus").hide();
|
|
$("#right-side .responsive-accordion i.responsive-accordion-minus").show();
|
|
resizeDelimiter();
|
|
}}, "#all-open");
|
|
|
|
$(document).on({click: function () {
|
|
$("#right-side .responsive-accordion div.responsive-accordion-head").removeClass("active");
|
|
$("#right-side .responsive-accordion div.responsive-accordion-panel").removeClass("active").hide();
|
|
$("#right-side .responsive-accordion i.responsive-accordion-plus").show();
|
|
$("#right-side .responsive-accordion i.responsive-accordion-minus").hide();
|
|
$("#ct_entry").val("");
|
|
resizeDelimiter();
|
|
}}, "#all-close");
|
|
|
|
$("#checkselect-all-entries input").on("ifChecked", function () {
|
|
$("#import-wrap .responsive-accordion input").iCheck("check");
|
|
});
|
|
$("#checkselect-all-entries input").on("ifUnchecked", function () {
|
|
$("#import-wrap .responsive-accordion input").iCheck("uncheck");
|
|
});
|
|
|
|
$(".icheck-box.ask input").each(function () {
|
|
var self = $(this);
|
|
label = self.parent().parent().find("label").first();
|
|
label_text = label.text();
|
|
label.detach();
|
|
self.iCheck({
|
|
checkboxClass: "icheckbox_line-blue place-left",
|
|
radioClass: "iradio_line-blue place-left",
|
|
insert: "<div class=\"icheck_line-icon\"></div>" + label_text
|
|
});
|
|
});
|
|
';
|
|
|
|
return $js;
|
|
}
|
|
|
|
public function printVideoEntry($videoFeed, $_id, $error = false)
|
|
{
|
|
global $class_filter, $db, $cfg, $language;
|
|
|
|
$DEVELOPER_KEY = $cfg['youtube_api_key'];
|
|
$client = new Google_Client();
|
|
$client->setDeveloperKey($DEVELOPER_KEY);
|
|
$youtube = new Google_Service_YouTube($client);
|
|
|
|
$videosResponse = $youtube->videos->listVideos('snippet,contentDetails,statistics,status', array('id' => $_id));
|
|
|
|
foreach ($videosResponse['items'] as $videoResult) {
|
|
|
|
$category = str_replace(' ', '%', VForm::clearTag($language['backend.import.feed.categ.list'][$videoResult['snippet']['categoryId']]));
|
|
$dbc = $db->execute(sprintf("SELECT `ct_id`, `ct_name` FROM `db_categories` WHERE `ct_type`='video' AND `ct_active`='1' AND `ct_name` LIKE '%s' OR `ct_descr` LIKE '%s';", '%' . $category . '%', '%' . $category . '%'));
|
|
|
|
$db_uid = $class_filter->clr_str($_POST['assign_username']);
|
|
$date = new DateTime('1970-01-01');
|
|
$date->add(new DateInterval($videoResult['contentDetails']['duration']));
|
|
$duration = $date->format('H:i:s');
|
|
$d = explode(':', $duration);
|
|
$db_duration = ($d[0] * 60 * 60) + ($d[1] * 60) + ($d[2]);
|
|
$db_categ_id = intval($dbc->fields['ct_id']);
|
|
$db_categ_name = $dbc->fields['ct_name'];
|
|
$db_title = $videoResult['snippet']['title'];
|
|
$db_tags = self::yt_tags($class_filter->clr_str($db_title));
|
|
$db_desc = $videoResult['snippet']['description'];
|
|
$db_rkey = $_id;
|
|
$tmb = array(
|
|
0 => "http://i.ytimg.com/vi/" . $db_rkey . "/maxresdefault.jpg",
|
|
1 => "http://i.ytimg.com/vi/" . $db_rkey . "/mqdefault.jpg",
|
|
2 => "http://i.ytimg.com/vi/" . $db_rkey . "/mqdefault.jpg",
|
|
3 => "http://i.ytimg.com/vi/" . $db_rkey . "/mqdefault.jpg",
|
|
);
|
|
|
|
$html = !$error ? self::saveCheck($db_rkey, array(
|
|
"title" => $db_title,
|
|
"description" => $db_desc,
|
|
"tags" => $db_tags,
|
|
"category" => ((isset($_POST['assign_category_feed']) and $_POST['assign_category_feed'] != '') ? intval($_POST['assign_category_feed']) : ((isset($_POST['assign_category_channel']) and $_POST['assign_category_channel'] != '') ? intval($_POST['assign_category_channel']) : ($db_categ_id > 0 ? $db_categ_id : self::getOther()))),
|
|
"duration" => $db_duration,
|
|
"key" => $db_rkey,
|
|
"src" => 'youtube',
|
|
"url" => 'http://www.youtube.com/watch?v=' . $db_rkey,
|
|
"tmb" => $tmb)) : null;
|
|
|
|
$html .= VGenerate::simpleDivWrap('row embed-title', '', $db_title);
|
|
$html .= VGenerate::simpleDivWrap('row embed-description', '', VUserinfo::truncateString($db_desc, 200));
|
|
$html .= VGenerate::simpleDivWrap('row embed-category greyed-out', '', $language['backend.import.category'] . $db_categ_name);
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
public function getAndPrintStandardFeeds($m)
|
|
{
|
|
global $class_filter, $cfg;
|
|
|
|
$DEVELOPER_KEY = $cfg['youtube_api_key'];
|
|
$token = (isset($_GET['token']) and $_GET['token'] != "undefined") ? $class_filter->clr_str($_GET['token']) : false;
|
|
|
|
switch ($m) {
|
|
case "m1": //video feeds
|
|
$feed_region = $class_filter->clr_str($_POST['feed_region']);
|
|
$feed_category = $class_filter->clr_str($_POST['feed_categ']);
|
|
$feed_def = $class_filter->clr_str($_POST['feed_def']);
|
|
$feed_dim = $class_filter->clr_str($_POST['feed_dim']);
|
|
$feed_dur = $class_filter->clr_str($_POST['feed_dur']);
|
|
$feed_emb = $class_filter->clr_str($_POST['feed_emb']);
|
|
$feed_lic = $class_filter->clr_str($_POST['feed_lic']);
|
|
$feed_syn = $class_filter->clr_str($_POST['feed_syn']);
|
|
$feed_type = $class_filter->clr_str($_POST['feed_type']);
|
|
$feed_search = str_replace(' ', '+', $class_filter->clr_str($_POST['be_search_term']));
|
|
|
|
$region = $feed_region != '' ? '&regionCode=' . $feed_region : null;
|
|
$category = $feed_category != '' ? '&videoCategoryId=' . $feed_category : null;
|
|
$def = $feed_def != '' ? '&videoDefinition=' . $feed_def : null;
|
|
$dim = $feed_dim != '' ? '&videoDimension=' . $feed_dim : null;
|
|
$dur = $feed_dur != '' ? '&videoDuration=' . $feed_dur : null;
|
|
$emb = $feed_emb != '' ? '&videoEmbeddable=' . $feed_emb : null;
|
|
$lic = $feed_lic != '' ? '&videoLicense=' . $feed_lic : null;
|
|
$syn = $feed_syn != '' ? '&videoSyndicated=' . $feed_syn : null;
|
|
$type = $feed_type != '' ? '&videoType=' . $feed_type : null;
|
|
$search = $feed_search != '' ? '&q=' . $feed_search : null;
|
|
$page = $token ? '&pageToken=' . $token : null;
|
|
$max = (int) $_POST['yt_video_results'];
|
|
|
|
$YOUTUBE_FEED = 'https://www.googleapis.com/youtube/v3/search?part=snippet' . $search . '&maxResults=' . $max . $region . $def . $dim . $dur . $emb . $lic . $syn . $type . '&type=video' . $category . '&key=' . $DEVELOPER_KEY . $page;
|
|
break;
|
|
case "m2": //channel feeds
|
|
$username_get = $class_filter->clr_str(trim($_POST['feed_channel_yt']));
|
|
$ch_id = self::getYTchannelID($username_get);
|
|
$search = '&channelId=' . ($ch_id != '' ? $ch_id : $username_get);
|
|
$page = $token ? '&pageToken=' . $token : null;
|
|
$max = (int) $_POST['yt_channel_results'];
|
|
|
|
$YOUTUBE_FEED = 'https://www.googleapis.com/youtube/v3/search?part=snippet' . $search . '&maxResults=' . $max . '&type=video&order=date&key=' . $DEVELOPER_KEY . $page;
|
|
break;
|
|
}
|
|
|
|
return self::getAndPrintVideoFeed($YOUTUBE_FEED, $m);
|
|
}
|
|
/* end youtube video feeds functions */
|
|
|
|
public function getYTchannelID($username)
|
|
{
|
|
global $cfg;
|
|
|
|
$api_url = 'https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=' . $username . '&key=' . $cfg['youtube_api_key'];
|
|
|
|
$result = json_decode(VServer::curl_tt($api_url));
|
|
|
|
return $result->items[0]->id;
|
|
}
|
|
|
|
/* generate various select lists */
|
|
public function selectList($name, $for, $show_blank)
|
|
{
|
|
global $db, $language;
|
|
|
|
$_ht = '<select name="' . $name . '" class="select-input wd200">';
|
|
$_ht .= $show_blank == 1 ? '<option value=""> -- </option>' : null;
|
|
|
|
$feed_type_ch = array('uploads', 'favorites');
|
|
$feed_time = array('today', 'this_week', 'this_month', 'all_time');
|
|
$feed_vimeo = array('videos', 'likes', 'appears_in', 'subscriptions');
|
|
$feed_dm = array('videos', 'favorites', 'features', 'subscriptions');
|
|
$feed_dm_type = array('featured', 'hd', 'official', 'creative', 'creative-official', 'buzz', 'buzz-premium', '3d', 'live');
|
|
$c = 0;
|
|
$yt_categ = $language['backend.import.feed.categ.list'];
|
|
$feed_yt_categ = array_keys($yt_categ);
|
|
$feed_dm_categ = array('animals', 'creation', 'auto', 'school', 'shortfilms', 'fun', 'videogames', 'gaylesbian', 'kids', 'lifestyle', 'music', 'news', 'people', 'sexy', 'sport', 'tv', 'tech', 'travel', 'webcam');
|
|
$feed_dm_sort = array('recent', 'visited', 'visited-hour', 'visited-today', 'visited-week', 'visited-month', 'commented', 'commented-hour', 'commented-today', 'commented-week', 'commented-month', 'rated', 'rated-hour', 'rated-today', 'rated-week', 'rated-month', 'ranking');
|
|
$search = array('youtube', 'dailymotion', 'metacafe', 'vimeo');
|
|
$feed_categ = array();
|
|
$rs = $db->execute("SELECT `ct_id` FROM `db_categories` WHERE `ct_type`='video' AND `ct_active`='1';");
|
|
while (!$rs->EOF) {
|
|
$feed_categ[] = $rs->fields['ct_id'];
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
foreach ($for as $k => $val) {
|
|
switch ($name) {
|
|
case "feed_type_ch":
|
|
$ov = $feed_type_ch[$k];
|
|
break;
|
|
case "feed_type_dm":
|
|
$ov = $feed_dm[$k];
|
|
break;
|
|
case "feed_type_dm_video":
|
|
$ov = $feed_dm_type[$k];
|
|
break;
|
|
case "feed_time":
|
|
$ov = $feed_time[$k];
|
|
break;
|
|
case "feed_type_vimeo":
|
|
$ov = $feed_vimeo[$k];
|
|
break;
|
|
case "assign_category_dm_video":
|
|
$ov = $feed_dm_categ[$k];
|
|
break;
|
|
case "search_on":
|
|
$ov = $search[$k];
|
|
break;
|
|
case "feed_categ":
|
|
$ov = $feed_yt_categ[$c];
|
|
$c = $c + 1;
|
|
break;
|
|
case "assign_category_feed":
|
|
case "assign_category_channel":
|
|
case "assign_category_dm_type":
|
|
case "assign_category_dm":
|
|
case "assign_category_vimeo":
|
|
case "assign_category_file":
|
|
$ov = $feed_categ[$k];
|
|
break;
|
|
case "feed_sort_dm_video":
|
|
$ov = $feed_dm_sort[$k];
|
|
break;
|
|
case "feed_results":
|
|
case "feed_results_ch":
|
|
case "feed_results_vimeo":
|
|
case "feed_results_dm":
|
|
case "feed_results_dm_type":
|
|
$ov = str_replace(' ', '_', strtolower($val));
|
|
break;
|
|
default:
|
|
$ov = $val;
|
|
break;
|
|
}
|
|
$_ht .= '<option value="' . trim($ov) . '">' . trim($val) . '</option>';
|
|
}
|
|
$_ht .= '</select>';
|
|
|
|
return $_ht;
|
|
}
|
|
/* get category list */
|
|
public function getCategoryList()
|
|
{
|
|
require_once 'f_core/config.backend.php';
|
|
global $db, $cfg;
|
|
|
|
$c = array();
|
|
$_section = (strstr($_SERVER['REQUEST_URI'], $backend_access_url) == true) ? 'backend' : 'frontend';
|
|
|
|
$res = $db->execute("SELECT `ct_name`, `ct_lang` FROM `db_categories` WHERE `ct_type`='video' AND `ct_active`='1';");
|
|
if ($res->fields['ct_name']) {
|
|
while (!$res->EOF) {
|
|
if ($res->fields['ct_lang'] != '') {
|
|
$cl = unserialize($res->fields['ct_lang']);
|
|
$ln = ((isset($_SESSION['be_lang']) and $_section == 'backend') ? $_SESSION['be_lang'] : ((isset($_SESSION['fe_lang']) and $_section == 'frontend') ? $_SESSION['fe_lang'] : 'en_US'));
|
|
$c[] = $ln != 'en_US' ? $cl[$ln] : $res->fields['ct_name'];
|
|
} else {
|
|
$c[] = $res->fields['ct_name'];
|
|
}
|
|
|
|
$res->MoveNext();
|
|
}
|
|
}
|
|
return $c;
|
|
}
|
|
/* get username list */
|
|
public function getUsernameList()
|
|
{
|
|
global $db;
|
|
|
|
$u = array();
|
|
|
|
$res = $db->execute("SELECT `usr_key`, `usr_user` FROM `db_accountuser` WHERE `usr_status`='1' ORDER BY `usr_user`;");
|
|
|
|
if ($res->fields['usr_key']) {
|
|
return $res;
|
|
}
|
|
}
|
|
/* generate html username select list */
|
|
public function username_selectList($name)
|
|
{
|
|
$input_name = $name ? 'assign_username_' . $name : 'assign_username';
|
|
$input_id = str_replace('_', '-', $input_name);
|
|
|
|
$html = '<input type="text" name="' . $input_name . '_key" id="' . $input_id . '-key" class="assign-username">';
|
|
$html .= '<input type="text" name="' . $input_name . '" id="' . $input_id . '" class="assign-username-value no-display">';
|
|
|
|
return $html;
|
|
}
|
|
}
|