| Current Path : /var/www/html/plugins/content/jdownloads/ |
| Current File : /var/www/html/plugins/content/jdownloads/jdownloads.php |
<?php
/**
* jDownloads Content Plugin
* Version 4.0
* For Joomla 4.0 and higher
* Original created by Marco Pelozzi - marco.u3@bluewin.ch - www.redorion.com
* Modified and reworked by Arno Betz - jDownloads.com - 2018 - 2022
*
* Usage:
* {jd_file file==*ID} where *ID stands for the ID-number of the download in jDownloads.
* {jd_file category==1 count==5} category==1 is the chosen category id. count==5 is die number of viewed downloads from this category, when it is 0 all files are listed.
* {jd_file cat_hottest==1 count==5} Views the 5 most downloaded files from a given category ID.
* {jd_file cat_latest==1 count==5} Views the 5 last added files from a given category ID.
* {jd_file latest==5} Views the 5 newest downloads.
* {jd_file hottest==5} Views the 5 top downloads.
* {jd_file updated==5} Views the 5 last updated downloads.
* {jd_file onlinelayout==layout name} Additional to the placeholders above, you can use this to select for the view a different file layout.
* So it is possible to use in the same content various layouts.
* Example: {jd_file onlinelayout==Simple File List}{jd_file latest==5}
*
*
*
*/
defined('_JEXEC') or die;
setlocale(LC_ALL, 'C.UTF-8', 'C');
use Joomla\String\StringHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Router\Route;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\Event\Event;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\Filesystem\File;
use Joomla\Filesystem\Folder;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Helper\UserGroupsHelper;
use Joomla\Database\DatabaseInterface;
use JDownloads\Component\JDownloads\Site\Helper\JDHelper;
use JDownloads\Component\JDownloads\Site\Helper\RouteHelper;
$classname = 'JDownloads\Component\JDownloads\Site\Helper\JDHelper';
if (!class_exists($classname)) {
$path = JPATH_SITE . '/components/com_jdownloads/src/Helper/JDHelper.php';
if (is_file($path)) {
include_once $path;
\JLoader::register($classname, $path);
} else {
return false;
}
}
global $cat_link_itemidsPlg;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$app = Factory::getApplication();
$jdContentType='';
if ($app->isClient('site')){
// Get all published single category menu links
$db->setQuery("SELECT id, link from #__menu WHERE link LIKE 'index.php?option=com_jdownloads&view=category%' AND published = 1");
$cat_link_itemidsPlg = $db->loadAssocList();
if ($cat_link_itemidsPlg){
for ($i=0; $i < count($cat_link_itemidsPlg); $i++){
$cat_link_itemidsPlg[$i]['catid'] = substr( strrchr ( $cat_link_itemidsPlg[$i]['link'], '=' ), 1);
}
}
// get current category menu ID when exist and all needed menu IDs for the header links
global $menuItemids;
$menuItemids = JDHelper::getMenuItemids();
// get all other menu category IDs so we can use it when we needs it
global $cat_link_itemids;
$cat_link_itemids = JDHelper::getAllJDCategoryMenuIDs();
// "Home" menu link itemid
global $root_itemid;
$root_itemid = $menuItemids['root'];
global $date_format;
$date_format = JDHelper::getDateFormat();
//Globals definition
$GLOBALS['jDFPOnlineLayout'] = '';
$GLOBALS['params'] = ComponentHelper::getParams('com_jdownloads');
$GLOBALS['jDownloadsMessage'] = 0;
$GLOBALS['jDownloadsTested'] = 0;
$GLOBALS['jDFPsfolders'] = jd_SymbolFolders();
$GLOBALS['jDFPrank'] = 1;
$GLOBALS['jDFPison'] = 1;
$GLOBALS['jDFPcatids'] = '';
$GLOBALS['jDFPloaded'] = 0;
$GLOBALS['jDLayoutTitleExists'] = false;
}
class PlgContentJDownloads extends CMSPlugin
{
function __construct(&$subject, $article_params)
{
parent::__construct($subject, $article_params);
}
function onContentPrepare($context, &$article, &$article_params)
{
global $app, $jDFPplugin_live_site, $jDFPloaded, $params;
if ($app->isClient('site')){
// Simple performance check to determine whether bot should process further
if (isset($article->text)){
if (strpos($article->text, '{jd_file') === false) {
return;
}
} else {
return;
}
// Load language
$lang = Factory::getApplication()->getLanguage();
$lang->load('com_jdownloads', JPATH_SITE);
// Live site
$GLOBALS['jDFPlive_site'] = Uri::base();
// Live site of plugin
$GLOBALS['jDFPplugin_live_site'] = $GLOBALS['jDFPlive_site'].'plugins/';
// Absolute path
$GLOBALS['jDFPabsolute_path'] = JPATH_SITE.'/';
$ipad_user = false;
// check whether we have an ipad/iphone user for flowplayer aso...
if ((bool) strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') || (bool) strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') || (bool) strpos($_SERVER['HTTP_USER_AGENT'], 'Android')){
$ipad_user = true;
}
$document = Factory::getApplication()->getDocument();
if ($jDFPloaded == 0){
// Load all required assets files.
// In special cases, the files might have already been loaded. This is the case if another download was embedded within a download via jDownloads content plugin.
// @TODO: This should be replaced by the use of the webAssetManager in a later version.
if ($params->get('load_frontend_css')){
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/css/jdownloads_fe.css', 'css', $document);
if (!$already_loaded){
$document->addStyleSheet( Uri::base().'components/com_jdownloads/assets/css/jdownloads_fe.css', 'text/css', null, array() );
}
} else {
// Handling with optionally own css file
if ($params->get('own_css_file')){
$own_css_path = JPATH_ROOT.'/components/com_jdownloads/assets/css/'.$params->get('own_css_file');
if (File::exists($own_css_path)){
$already_loaded = checkAssetAlreadyLoaded($params->get('own_css_file'), 'css', $document);
if (!$already_loaded){
$document->addStyleSheet( Uri::base().'components/com_jdownloads/assets/css/'.$params->get('own_css_file'), "text/css", null, array() );
}
}
}
}
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/css/jdownloads_buttons.css', 'css', $document);
if (!$already_loaded){
$document->addStyleSheet( Uri::base().'components/com_jdownloads/assets/css/jdownloads_buttons.css', 'text/css', null, array() );
}
if ($params->get('view_ratings')){
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/rating/css/ajaxvote.css', 'css', $document);
if (!$already_loaded){
$document->addStyleSheet( Uri::base().'components/com_jdownloads/assets/rating/css/ajaxvote.css', "text/css", null, array() );
}
}
if ($params->get('use_lightbox_function')){
// Only when lightbox is activated in jD
HTMLHelper::_('jquery.framework');
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/lightbox/src/js/lightbox.js', 'js', $document);
if (!$already_loaded){
$document->addScript(Uri::base().'/components/com_jdownloads/assets/lightbox/src/js/lightbox.js');
$document->addStyleSheet(Uri::base().'components/com_jdownloads/assets/lightbox/src/css/lightbox.css', 'text/css', null, array() );
}
}
$custom_css_path = JPATH_ROOT.'/components/com_jdownloads/assets/css/jdownloads_custom.css';
if (File::exists($custom_css_path)){
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/css/jdownloads_custom.css', 'css', $document);
if (!$already_loaded){
$document->addStyleSheet( Uri::base().'components/com_jdownloads/assets/css/jdownloads_custom.css', 'text/css', null, array() );
}
}
// Loadscript for flowplayer
if ($params->get('flowplayer_use')){
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/flowplayer/flowplayer-3.2.12.min.js', 'js', $document);
if (!$already_loaded){
$document->addScript(Uri::base().'components/com_jdownloads/assets/flowplayer/flowplayer-3.2.12.min.js');
}
}
// Add rating script
if ($params->get('view_ratings')){
// Check if asset file has already been loaded
$already_loaded = checkAssetAlreadyLoaded('components/com_jdownloads/assets/rating/js/ajaxvote.js', 'js', $document);
if (!$already_loaded){
$document->addScript(Uri::base().'components/com_jdownloads/assets/rating/js/ajaxvote.js');
}
}
}
$jDFPloaded = 1;
$regex = "#{jd_file (.*?)==(.*?)}#s";
$article->text = preg_replace_callback($regex, 'jd_file_callback', $article->text);
return true;
}
}
}
// Calculate Symbolfolders depending on jDownloads
function jd_SymbolFolders(){
global $params;
// Get the path to the activated mime type image folder (for file symbols)
switch ($params->get('selected_file_type_icon_set'))
{
case 2:
$file_pic_folder = 'images/jdownloads/fileimages/flat_1/';
break;
case 3:
$file_pic_folder = 'images/jdownloads/fileimages/flat_2/';
break;
default:
$file_pic_folder = 'images/jdownloads/fileimages/';
break;
}
$jd_l_folders = array();
$jd_l_folders['thumb'] = 'images/jdownloads/screenshots/thumbnails/';
$jd_l_folders['screenshot'] = 'images/jdownloads/screenshots/';
$jd_l_folders['symbolfolder'] = 'images/jdownloads/';
$jd_l_folders['cat'] = 'images/jdownloads/catimages/';
$jd_l_folders['file'] = $file_pic_folder;
$jd_l_folders['mini'] = 'images/jdownloads/miniimages/';
$jd_l_folders['featured'] = 'images/jdownloads/featuredimages/';
return $jd_l_folders;
}
function jd_file_callback($matches){
global $jDownloadsTested, $jDownloadsMessage, $params, $jDFPOnlineLayout, $jDFPrank, $jDFPison, $jdContentType;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$jdf_whatcontent = $matches[1];
$jdContentType='';
if ($jdf_whatcontent == 'plugin'){
switch ($matches[2]){
case 'on':
$jDFPison = 1;
break;
case 'off':
$jDFPison = 0;
break;
case 'silent':
$jDFPison = 2;
break;
}
return '';
}
if ($jDFPison == 0){
return $matches[0];
}
if ($jDFPison == 2){
return '';
}
// Load layout
if ($jDFPOnlineLayout == '') {
$jDFPOnlineLayout = $params->get('fileplugin_defaultlayout');
}
switch ($jdf_whatcontent) {
case 'file':
$jDFPrank = '';
$jdContentType='';
$id_result = jd_file_createdownload($matches);
break;
case 'durl':
$jDFPrank = '';
$id_result = jd_file_createdownload($matches);
break;
case 'onlinelayout':
jd_set_newlayout($matches);
$id_result = '';
break;
case 'latest':
$jdContentType='jd_content_latest';
$id_result =jd_file_latest_hottest($matches);
break;
case 'hottest':
$jdContentType='jd_content_hottest';
$id_result = jd_file_latest_hottest($matches);
break;
case 'updated':
$jdContentType='jd_content_updated';
$id_result = jd_file_latest_updated($matches);
break;
case 'category':
$jdContentType='jd_content_category';
$id_result = jd_file_createcategory($matches, '');
break;
case 'cat_hottest':
$jdContentType='jd_content_category_hottest';
$id_result = jd_file_createcategory($matches, 'hottest');
break;
case 'cat_latest':
$id_result = jd_file_createcategory($matches, 'latest');
$jdContentType='jd_content_category_latest';
break;
}
return $id_result;
}
function jd_set_newlayout($matches){
global $jDFPOnlineLayout;
$jDFPOnlineLayout = strip_tags($matches[2]);
return '';
}
// Create a list with all valid category IDs which has the correct access settings
function getCategoryIDs($p_subcat){
global $jDFPcatids;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$user = Factory::getApplication()->getIdentity();
$query = $db->getQuery(true);
$groups = implode(',', $user->getAuthorisedViewLevels());
$db->setQuery("SELECT id FROM #__jdownloads_categories WHERE published = 1 AND access IN ($groups) ORDER BY ordering");
$rows = $db->loadObjectList('id');
if ($rows){
foreach ($rows as $row){
$jDFPcatids .= $row->id.',';
}
$jDFPcatids = substr($jDFPcatids, 0, -1);
}
}
// Create the output list for the last updated Downloads
function jd_file_latest_updated($matches){
global $jDFPrank, $jDFPcatids, $params;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$user = Factory::getApplication()->getIdentity();
$query = $db->getQuery(true);
$groups = implode(',', $user->getAuthorisedViewLevels());
$jDFPcatids = '';
$bidon = getCategoryIDs(0);
$days = $params->get('days_is_file_updated');
if (!$days) $days = 15;
$until_day = mktime(0,0,0,date("m"), date("d")-$days, date("Y"));
$until = date('Y-m-d H:m:s', $until_day);
$filesql ="SELECT id FROM #__jdownloads_files WHERE catid IN (".$jDFPcatids.") AND (update_active = 1) AND (modified >= '.$until.') AND access IN ($groups) AND published = 1 ORDER BY {dado} DESC LIMIT ".$db->escape($matches[2]).";";
if ($matches[1] == 'updated'){
$filesql = str_replace("{dado}",'modified',$filesql);
} else {
$filesql = str_replace("{dado}",'downloads',$filesql);
}
$db->setQuery($filesql);
$files = $db->loadObjectList();
$filetable = '';
$jDFPrank = 1;
if ($files){
foreach ($files as $thefile){
$sim_matches = array("", "file", $thefile->id);
$filetable .= jd_file_createdownload($sim_matches);
$jDFPrank++;
}
}
return $filetable;
}
// Create the output list for the hottest or latest Downloads
function jd_file_latest_hottest($matches){
global $jDFPrank, $jDFPcatids;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$user = Factory::getApplication()->getIdentity();
$query = $db->getQuery(true);
$groups = implode(',', $user->getAuthorisedViewLevels());
$jDFPcatids = '';
$bidon = getCategoryIDs(0);
$filesql = "SELECT id FROM #__jdownloads_files WHERE catid IN (".$jDFPcatids.") AND access IN ($groups) AND published = 1 ORDER BY {dado} DESC LIMIT ".$db->escape($matches[2]).";";
if ($matches[1] == 'latest'){
$filesql = str_replace("{dado}",'created',$filesql);
} else {
$filesql = str_replace("{dado}",'downloads',$filesql);
}
$db->setQuery($filesql);
$files = $db->loadObjectList();
$filetable = '';
$jDFPrank = 1;
if ($files){
foreach ($files as $file){
$sim_matches = array("", "file", $file->id);
// create the output
$filetable .= jd_file_createdownload($sim_matches);
$jDFPrank++;
}
}
return $filetable;
}
// Build the data output for a Download placeholder
function jd_file_createdownload($matches){
global $params, $jDFPOnlineLayout, $jDFPsfolders, $jdContentType;
$app = Factory::getApplication();
$db = Factory::getContainer()->get(DatabaseInterface::class);
$user = Factory::getApplication()->getIdentity();
// Import jDownloads site model
BaseDatabaseModel::addIncludePath(JPATH_SITE . '/components/com_jdownloads/src/Model');
$model_download = BaseDatabaseModel::getInstance('Download', 'jdownloads');
// Get the data from the model
$fileid = (int) $matches[2];
$item = $model_download->getItem($fileid, true); // we use the second param as switch for plugin == true
if (!$item) {
// we will give not any informations in the frontend
return '';
/*
// Not possible to get this download
$jd_filepic = Uri::base().'/plugins/content/jdownloads/jdownloads/images/offline.gif';
$jd_filetitle = str_replace("{fileid}",$matches[2],Text::_('COM_JDOWNLOADS_FRONTEND_SETTINGS_FILEPLUGIN_FILEUNKNOWN'));
$jd_template = jd_file_fill_nodownload($jd_template, $jd_filetitle, '', $jd_filepic);
if ($params->get('fileplugin_enable_plugin') == 0) {
if ($params->get('fileplugin_show_jdfiledisabled') == 0){
$jd_template = '';
}
}
return $jd_template;
*/
}
if (!isset($item->params)){
// something went wrong as we need the params
return '';
}
// Check the 'view access' rights
$access = $item->params->get('access-view');
if (!$access){
return '';
}
// Check the 'download' permissions
$download = $item->params->get('access-download');
if (!$download){
// Not allowed
$download_allowed = 0;
} else {
// Allowed
$download_allowed = 1;
}
// Check the 'edit' permissions
$edit = $item->params->get('access-edit');
if (!$edit){
// Not allowed
$edit_allowed = 0;
} else {
// Allowed
$edit_allowed = 1;
}
// Get tags
$item->tags = new TagsHelper;
$item->tags->getItemTags('com_jdownloads.download', $item->id);
// Get the layout for the 'Downloads' view which is currently selected in the plugin settings.
// This is the default layout for all file placeholders. It can be overwritten by using the 'onlinelayout' placeholder as described in the usage instructions.
$jdLayout = $jDFPOnlineLayout;
$query = "SELECT * FROM #__jdownloads_templates WHERE (template_name = ".$db->quote($db->escape($jdLayout)).") AND (template_typ = 2)";
$db->setQuery($query);
$layout = $db->loadObject();
// It was not possible to load the layout - abort
if (!$layout) {
$ReturnValue = str_replace("{thelayout}", $jdLayout, Text::_('COM_JDOWNLOADS_FRONTEND_SETTINGS_FILEPLUGIN_LAYOUTUNKNOWN')).'<br />';
return $ReturnValue;
}
$jd_template_before = $layout->template_before_text;
$jd_template = $layout->template_text;
$jd_template_after = $layout->template_after_text;
$jd_template_header = $layout->template_header_text;
$jd_template_subheader = $layout->template_subheader_text;
$jd_template_footer = $layout->template_footer_text;
$jd_template_symbol_off = $layout->symbol_off;
// Remove possible placeholders from the before and after layout parts / since v4.1
$jd_template_before = str_replace('{sort_order}', '', $jd_template_before);
$jd_template_before = str_replace('{page_navigation_results_counter}', '', $jd_template_before);
$jd_template_before = str_replace('{page_navigation}', '', $jd_template_before);
$jd_template = $jd_template_before.$jd_template.$jd_template_after;
// required for other content plugins
$item->text = '';
// Process the content plugins - and get the Joomla Fields when in use
PluginHelper::importPlugin('content');
$app->triggerEvent('onContentPrepare', ['com_jdownloads.download', &$item, &$params, 0]);
$item->event = new \stdClass;
$results = $app->triggerEvent('onContentAfterTitle', array('com_jdownloads.download', &$item, &$params, 0));
$item->event->afterDisplayTitle = trim(implode("\n", $results));
$results = $app->triggerEvent('onContentBeforeDisplay', array('com_jdownloads.download', &$item, &$params, 0));
$item->event->beforeDisplayContent = trim(implode("\n", $results));
$results = $app->triggerEvent('onContentAfterDisplay', array('com_jdownloads.download', &$item, &$params, 0));
$item->event->afterDisplayContent = trim(implode("\n", $results));
// Plugin enabled or disabled
if ($params->get('fileplugin_enable_plugin') == 0){
if ($params->get('fileplugin_show_jdfiledisabled') == 0){
$jd_template = '';
} else {
$jd_filetitle = JDHelper::getOnlyLanguageSubstring($params->get('fileplugin_offline_title'));
$jd_filepic = 'plugins/content/jdownloads/jdownloads/images/offline.gif';
$jd_filedescription = JDHelper::getOnlyLanguageSubstring($params->get('fileplugin_offline_descr'));
if ($params->get('fileplugin_show_downloadtitle') == 1){
$jd_filetitle = $item->title;
$jd_filepic = $jDFPsfolders['file'].$item->file_pic;
$jd_filedescription = $params->get('fileplugin_offline_title').' '.$params->get('fileplugin_offline_descr');
}
$jd_template = jd_file_fill_nodownload($jd_template,$jd_filetitle,$jd_filedescription,$jd_filepic);
}
return $jd_template;
}
$jd_template = jd_file_fill_downloadok($jd_template, $item, $jd_template_symbol_off, $matches[1], $download_allowed, $edit_allowed);
return '<div class="jd_content jd_content_plugin '.$jdContentType.'">'.$jd_template.'</div>';
}
function jd_file_fill_nodownload($p_Template, $p_Title, $p_Description, $p_Filepic){
global $params, $jDFPplugin_live_site, $jDFPlive_site;
$l_Template = str_replace("{{{","[[[",$p_Template);
$jd_file_pic = '<img src="'.$jDFPlive_site.$p_Filepic.'" align="absmiddle" border="0" height="'.$params->get('file_pic_size').'" width="'.$params->get('file_pic_size').'" alt="'.substr(strrchr($p_Filepic,"/"),1,-4).'"/>';
$l_Template = str_replace("{file_pic}",$jd_file_pic,$l_Template);
$jd_file_pic = '<img src="'.$jDFPplugin_live_site.'content/jdownloads/jdownloads/images/nodownload.gif">';
$l_Template = str_replace("{checkbox_list}",$jd_file_pic,$l_Template);
$l_Template = str_replace("{file_title}",$p_Title,$l_Template);
$l_Template = str_replace("{file_title_only}",$p_Title,$l_Template);
$l_Template = str_replace("{description}",$p_Description,$l_Template);
$l_Template = str_replace("{release}",'',$l_Template);
$l_Template = str_replace("{release_title}",'',$l_Template);
$l_Template = str_replace("{size}",'',$l_Template);
$l_Template = str_replace("{downloads}",'',$l_Template);
$l_Template = str_replace("{pic_is_new}",'',$l_Template);
$l_Template = str_replace("{pic_is_hot}",'',$l_Template);
$l_Template = str_replace("{license}",'',$l_Template);
$l_Template = str_replace("{date_added}",'',$l_Template);
$l_Template = str_replace("{language}",'',$l_Template);
$l_Template = str_replace("{system}",'',$l_Template);
$l_Template = str_replace("{url_download}",'',$l_Template);
$l_Template = str_replace("{file_id}",'',$l_Template);
$l_Template = str_replace("{ordering}",'',$l_Template);
$l_Template = str_replace("{published}",'',$l_Template);
$l_Template = str_replace("{cat_id}",'',$l_Template);
$l_Template = str_replace("{mirror_1}",'',$l_Template);
$l_Template = str_replace("{mirror_2}",'',$l_Template);
$l_Template = str_replace("{link_to_details}",'',$l_Template);
$l_Template = str_replace("{thumbnail}",'',$l_Template);
$l_Template = str_replace("{screenshot}",'',$l_Template);
$l_Template = str_replace("{pic_is_updated}",'',$l_Template);
$l_Template = str_replace("{rank}",'',$l_Template);
$l_Template = str_replace("{show_association}",'',$l_Template);
$l_Template = str_replace('{information_header}', '', $l_Template);
$l_Template = str_replace('{access_title}', '', $l_Template);
$l_Template = str_replace('{access}', '', $l_Template);
$l_Template = str_replace("{hits_title}",'',$l_Template);
$l_Template = str_replace("{hits_value}",'',$l_Template);
$l_Template = str_replace('{category_title}', '', $l_Template);
$l_Template = str_replace('{category_name}', '', $l_Template);
// remove images placeholders
if (strpos($l_Template, "{screenshot_end}") > 0) {
$pos_end = strpos($l_Template, '{screenshot_end}');
$pos_beg = strpos($l_Template, '{screenshot_begin}');
$l_Template = substr_replace($l_Template, '', $pos_beg, ($pos_end - $pos_beg) + 16);
}
for ($i=2; $i < 20; $i++){
if (strpos($l_Template, "{screenshot_end$i}") > 0) {
$pos_end = strpos($l_Template, "{screenshot_end$i}");
$pos_beg = strpos($l_Template, "{screenshot_begin$i}");
if ($i < 10){
$l_Template = substr_replace($l_Template, '', $pos_beg, ($pos_end - $pos_beg) + 17);
} else {
$l_Template = substr_replace($l_Template, '', $pos_beg, ($pos_end - $pos_beg) + 18);
}
}
}
$l_Template = str_replace("{thumbnail_lightbox}",'',$l_Template);
$l_Template = str_replace("{thumbnail_gallery}",'',$l_Template);
$l_Template = str_replace("{created_by_title}",'',$l_Template);
$l_Template = str_replace("{created_by_value}",'',$l_Template);
$l_Template = str_replace("{created_date_title}",'',$l_Template);
$l_Template = str_replace("{created_date_value}",'',$l_Template);
$l_Template = str_replace("{modified_by_title}",'',$l_Template);
$l_Template = str_replace("{modified_by_value}",'',$l_Template);
$l_Template = str_replace("{modified_date_title}",'',$l_Template);
$l_Template = str_replace("{modified_date_value}",'',$l_Template);
$l_Template = str_replace("{price_title}",'',$l_Template);
$l_Template = str_replace("{price_value}",'',$l_Template);
$l_Template = str_replace("{system_title}",'',$l_Template);
$l_Template = str_replace("{system_text}",'',$l_Template);
$l_Template = str_replace("{license_title}",'',$l_Template);
$l_Template = str_replace("{license_text}",'',$l_Template);
$l_Template = str_replace("{language_title}",'',$l_Template);
$l_Template = str_replace("{language_text}",'',$l_Template);
$l_Template = str_replace("{filesize_title}",'',$l_Template);
$l_Template = str_replace("{filesize_value}",'',$l_Template);
$l_Template = str_replace("{author}",'',$l_Template);
$l_Template = str_replace("{url_author}",'',$l_Template);
$l_Template = str_replace("{author_title}",'',$l_Template);
$l_Template = str_replace("{author_text}",'',$l_Template);
$l_Template = str_replace("{url_home}",'',$l_Template);
$l_Template = str_replace("{author_url_title}",'',$l_Template);
$l_Template = str_replace("{author_url_text}",'',$l_Template);
$l_Template = str_replace("{files_title_begin}",'',$l_Template);
$l_Template = str_replace("{files_title_text}",'',$l_Template);
$l_Template = str_replace("{files_title_end}",'',$l_Template);
$l_Template = str_replace("{preview_player}",'',$l_Template);
$l_Template = str_replace("{mp3_player}",'',$l_Template);
$l_Template = str_replace("{mp3_id3_tag}",'',$l_Template);
$l_Template = str_replace("{google_adsense}",'',$l_Template);
$l_Template = str_replace("{google_adsense_2}",'',$l_Template);
$l_Template = str_replace("{report_link}",'',$l_Template);
$l_Template = str_replace("{sum_jcomments}",'',$l_Template);
$l_Template = str_replace("{rating}",'',$l_Template);
$l_Template = str_replace("{rating_title}",'',$l_Template);
$l_Template = str_replace("{file_date}", '', $l_Template);
$l_Template = str_replace("{file_date_title}", '', $l_Template);
$l_Template = str_replace("{tags_title}", '', $l_Template);
$l_Template = str_replace("{tags}", '', $l_Template);
$l_Template = str_replace("{featured_class}", '', $l_Template);
$l_Template = str_replace("{featured_detail_class}", '', $l_Template);
$l_Template = str_replace("{featured_pic}", '', $l_Template);
$l_Template = str_replace("{preview_player}", '', $l_Template);
// In the layout could still exist not required field placeholders
$results = JDHelper::searchFieldPlaceholder($l_Template);
if ($results){
foreach ($results as $result){
$l_Template = str_replace($result[0], '', $l_Template); // Remove label and value placeholder
}
}
// delete the tabs placeholder
$l_Template = str_replace('{tabs begin}', '', $l_Template);
$l_Template = str_replace('{tab description}', '', $l_Template);
$l_Template = str_replace('{tab description end}', '', $l_Template);
$l_Template = str_replace('{tab pics}', '', $l_Template);
$l_Template = str_replace('{tab pics end}', '', $l_Template);
$l_Template = str_replace('{tab mp3}', '', $l_Template);
$l_Template = str_replace('{tab mp3 end}', '', $l_Template);
$l_Template = str_replace('{tab data}', '', $l_Template);
$l_Template = str_replace('{tab data end}', '', $l_Template);
$l_Template = str_replace('{tab download}', '', $l_Template);
$l_Template = str_replace('{tab download end}', '', $l_Template);
$l_Template = str_replace('{tab custom1}', '', $l_Template);
$l_Template = str_replace('{tab custom1 end}', '', $l_Template);
$l_Template = str_replace('{tab custom2}', '', $l_Template);
$l_Template = str_replace('{tab custom2 end}', '', $l_Template);
$l_Template = str_replace('{tab custom3}', '', $l_Template);
$l_Template = str_replace('{tab custom3 end}', '', $l_Template);
$l_Template = str_replace('{tabs end}', '', $l_Template);
$l_Template = JDHelper::removeEmptyTags($l_Template);
return str_replace("[[[","{",$l_Template);
}
function jd_file_fill_downloadok($p_Template, $files, $p_Symbol_Off, $p_DownloadType, $download_allowed, $edit_allowed){
global $params, $jDFPsfolders, $jDFPrank, $jDFPlive_site, $jDFPplugin_live_site, $jDFPabsolute_path, $cat_link_itemidsPlg, $jDLayoutTitleExists, $root_itemid, $date_format;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$user = Factory::getApplication()->getIdentity();
$jd_user_settings = JDHelper::getUserRules();
$jdlink_author_text = '';
$createdbyname = '';
$modifiedbyname = '';
$truncated_file_desc_len = $params->get('plugin_auto_file_short_description_value');
$l_Template = str_replace("{{{","[[[", $p_Template);
$jdpic_license = '';
$jdpic_date = '';
$jdpic_author = '';
$jdpic_website = '';
$jdpic_system = '';
$jdpic_language = '';
$jdpic_download = '';
$jdpic_hits = '';
$jdpic_size = '';
$jdpic_price = '';
$cat_itemid = 0;
if ($p_Symbol_Off == 0){
$msize = $params->get('info_icons_size');
$jdpic_license = '<img src="'.Uri::base().$jDFPsfolders['mini'].'license.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_LICENCE').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_LICENCE').'" /> ';
$jdpic_date = '<img src="'.Uri::base().$jDFPsfolders['mini'].'date.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_DATE').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_DATE').'" />';
$jdpic_author = '<img src="'.Uri::base().$jDFPsfolders['mini'].'contact.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_AUTHOR').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_AUTHOR').'" />;';
$jdpic_website = '<img src="'.Uri::base().$jDFPsfolders['mini'].'weblink.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_WEBSITE').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_WEBSITE').'" />';
$jdpic_system = '<img src="'.Uri::base().$jDFPsfolders['mini'].'system.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_SYSTEM').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_SYSTEM').'" /> ';
$jdpic_language = '<img src="'.Uri::base().$jDFPsfolders['mini'].'language.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_LANGUAGE').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_LANGUAGE').'" /> ';
$jdpic_download = '<img src="'.Uri::base().$jDFPsfolders['mini'].'download.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_DOWNLOAD').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_DOWNLOAD').'" /> ';
$jdpic_hits = '<img src="'.Uri::base().$jDFPsfolders['mini'].'download.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_DOWNLOAD').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_DOWNLOAD_HITS').'" /> ';
$jdpic_size = '<img src="'.Uri::base().$jDFPsfolders['mini'].'stuff.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_FILESIZE').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_FILESIZE').'" /> ';
$jdpic_price = '<img src="'.Uri::base().$jDFPsfolders['mini'].'currency.png" style="vertical-align:middle;" width="'.$msize.'" height="'.$msize.'" border="0" alt="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_PRICE').'" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_PRICE').'" /> ';
}
// Build a little pic for extern links
$jdextern_url_pic = '<img src="'.$jDFPplugin_live_site.'content/jdownloads/jdownloads/images/link_extern.gif" style="vertical-align:middle;" alt="link_extern" title="" />';
$jd_file_pic = '<img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" style="vertical-align:middle;" border="0" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" alt="'.substr($files->file_pic,0,-4).'" title="" />';
// Alternate CSS buttons when selected in configuration
$status_color_hot = $params->get('css_button_color_hot');
$status_color_new = $params->get('css_button_color_new');
$status_color_updated = $params->get('css_button_color_updated');
$download_color = $params->get('css_button_color_download');
$download_size = $params->get('css_button_size_download');
$download_size_mirror = $params->get('css_button_size_download_mirror');
$download_color_mirror1 = $params->get('css_button_color_mirror1');
$download_color_mirror2 = $params->get('css_button_color_mirror2');
$download_size_listings = $params->get('css_button_size_download_small');
$jd_catid = $files->catid;
$jd_filename = $files->url_download;
$jd_file_language = $files->file_language;
$jd_system = $files->system;
if ($files->category_cat_dir_parent){
$category_dir = $files->category_cat_dir_parent.'/'.$files->category_cat_dir;
} else {
$category_dir = $files->category_cat_dir;
}
// Has this Download really a file?
if (!$files->url_download && !$files->other_file_id && !$files->extern_file){
// only a document without file
$no_file_info = Text::_('COM_JDOWNLOADS_FRONTEND_ONLY_DOCUMENT_USER_INFO');
$download_has_a_file = false;
} else {
$download_has_a_file = true;
$no_file_info = '';
}
// Edit link
if ($edit_allowed) {
// Changed in 3.9.0.6 - We do not display in the future an edit icon here to prevent problems. Users can always use the edit symbol in the details view.
$edit_icon = ''; // JDHelper::getEditIcon($files);
} else {
$edit_icon = '';
}
// Compute the download slugs
$files->slug = $files->alias ? ($files->id . ':' . $files->alias) : $files->id;
// create all file titles
$l_Template = JDHelper::buildFieldTitles($l_Template, $files);
// When we have a simple document, view only the info not any buttons.
if (!$download_has_a_file){
if (strpos($l_Template, '{url_download}')){
$l_Template = str_replace('{url_download}', $no_file_info, $l_Template);
} else {
$l_Template = str_replace('{checkbox_list}', $no_file_info, $l_Template);
}
// Place the images
$l_Template = JDHelper::placeThumbs($l_Template, $files->images);
// we change the old lightbox tag type to the new
$l_Template = str_replace('rel="lightbox"', 'data-lightbox="lightbox'.$files->id.'"', $l_Template);
if ($params->get('view_detailsite')){
$title_link = Route::_(RouteHelper::getDownloadRoute($files->slug, $files->catid, $files->language));
$title_link_text = '<a href="'.$title_link.'">'.$files->title.'</a>';
$detail_link_text = '<a href="'.$title_link.'">'.Text::_('COM_JDOWNLOADS_FE_DETAILS_LINK_TEXT_TO_DETAILS').'</a>';
// Build the file symbol (with link)
if ($files->file_pic != '' ) {
$filepic = '<a href="'.$title_link.'">'.'<img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" align="top" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" border="0" alt="'.substr($files->file_pic,0,-4).'" /></a>';
} else {
$filepic = '';
}
$l_Template = str_replace('{file_pic}', $filepic, $l_Template);
// link to details view at the end
$l_Template = str_replace('{link_to_details}', $detail_link_text, $l_Template);
$l_Template = str_replace('{file_title}', $title_link_text.' '.$edit_icon, $l_Template);
} else {
// no links
if ($files->file_pic != '' ) {
$filepic = '<img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" align="top" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" border="0" alt="'.substr($files->file_pic,0,-4).'" />';
} else {
$filepic = '';
}
$l_Template = str_replace('{file_pic}', $filepic, $l_Template);
// remove link to details view at the end
$l_Template = str_replace('{link_to_details}', '', $l_Template);
$l_Template = str_replace('{file_title}', $files->title.' '.$edit_icon, $l_Template);
}
$l_Template = str_replace('{checkbox_list}', '', $l_Template);
$l_Template = str_replace('{mirror_1}', '', $l_Template);
$l_Template = str_replace('{mirror_2}', '', $l_Template);
$l_Template = str_replace('{hits_value}', '', $l_Template);
$l_Template = str_replace('{filesize_value}', '', $l_Template);
}
// category title
$l_Template = str_replace('{category_title}', Text::_('COM_JDOWNLOADS_CATEGORY_LABEL'), $l_Template);
$l_Template = str_replace('{category_name}', $files->category_title, $l_Template);
// replace 'featured' placeholders
if ($files->featured){
// add the css class
if ($params->get('use_featured_classes')){
$l_Template = str_replace('{featured_class}', 'jd_featured', $l_Template);
$l_Template = str_replace('{featured_detail_class}', 'jd_featured_detail', $l_Template);
} else {
$l_Template = str_replace('{featured_class}', '', $l_Template);
$l_Template = str_replace('{featured_detail_class}', '', $l_Template);
}
// add the pic
if ($params->get('featured_pic_filename')){
$featured_pic = '<img class="jd_featured_star" src="'.Uri::base().'images/jdownloads/featuredimages/'.$params->get('featured_pic_filename').'" width="'.$params->get('featured_pic_size').'" height="'.$params->get('featured_pic_size_height').'" alt="'.substr($params->get('featured_pic_filename'),0,-4).'"/>';
$l_Template = str_replace('{featured_pic}', $featured_pic, $l_Template);
} else {
$l_Template = str_replace('{featured_pic}', '', $l_Template);
}
} else {
$l_Template = str_replace('{featured_class}', '', $l_Template);
$l_Template = str_replace('{featured_detail_class}', '', $l_Template);
$l_Template = str_replace('{featured_pic}', '', $l_Template);
}
// Build the license info data and build link
if ($files->license == '') $files->license = 0;
$lic_data = '';
if ($files->license_url != '') {
$lic_data = $jdpic_license.'<a href="'.$files->license_url.'" target="_blank" rel="nofollow" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_MINI_ICON_ALT_LICENCE').'">'.$files->license_title.'</a> '.$jdextern_url_pic;
} else {
if ($files->license_title != '') {
if ($files->license_text != '') {
$lic_data = $jdpic_license.$files->license_title;
$lic_data .= HTMLHelper::_('tooltip', $files->license_text, $files->license_title);
} else {
$lic_data = $files->license_title;
}
} else {
$lic_data = '';
}
}
$l_Template = str_replace('{license_text}', $lic_data, $l_Template);
$l_Template = str_replace('{license}', $lic_data, $l_Template); // old placeholder
// Build the 'files language' data
$file_lang_values = explode(',' , JDHelper::getOnlyLanguageSubstring($params->get('language_list')));
if ($jd_file_language == 0 ) {
$jd_showlanguage = '';
} else {
$jd_showlanguage = $jdpic_language.$file_lang_values[$jd_file_language];
}
$l_Template = str_replace("{language}",$jd_showlanguage,$l_Template); // old placeholder
$l_Template = str_replace("{language_text}",$jd_showlanguage,$l_Template);
// Build the 'System' data
$file_sys_values = explode(',' , $params->get('system_list'));
if ($jd_system == 0 ) {
$jd_showsystem = '';
} else {
$jd_showsystem = $jdpic_system.$file_sys_values[$jd_system];
}
$l_Template = str_replace("{system}",$jd_showsystem,$l_Template); // old placeholder
$l_Template = str_replace("{system_text}",$jd_showsystem,$l_Template);
// Build hits values
$numbers_downloads = JDHelper::strToNumber((int)$files->downloads);
$jd_showhits = $jdpic_hits.$numbers_downloads;
$l_Template = str_replace("{hits_value}",$jd_showhits,$l_Template);
// Build website url
if (!$files->url_home == '') {
if (strpos($files->url_home, 'http://') !== false or strpos($files->url_home, 'https://') !== false) {
$l_Template = str_replace('{url_home}',$jdpic_website.'<a href="'.$files->url_home.'" target="_blank" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'">'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'</a> '.$jdextern_url_pic, $l_Template);
$l_Template = str_replace('{author_url_text} ',$jdpic_website.'<a href="'.$files->url_home.'" target="_blank" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'">'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'</a> '.$jdextern_url_pic, $l_Template);
} else {
$l_Template = str_replace('{url_home}',$jdpic_website.'<a href="http://'.$files->url_home.'" target="_blank" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'">'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'</a> '.$jdextern_url_pic, $l_Template);
$l_Template = str_replace('{author_url_text}',$jdpic_website.'<a href="http://'.$files->url_home.'" target="_blank" title="'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'">'.Text::_('COM_JDOWNLOADS_FRONTEND_HOMEPAGE').'</a> '.$jdextern_url_pic, $l_Template);
}
} else {
$l_Template = str_replace('{url_home}', '', $l_Template);
$l_Template = str_replace('{author_url_text}', '', $l_Template);
}
// Encode is link a mail
if (strpos($files->url_author, '@') && $params->get('mail_cloaking')){
if (!$files->author) {
$mail_encode = HTMLHelper::_('email.cloak', $files->url_author);
} else {
$mail_encode = HTMLHelper::_('email.cloak', $files->url_author, true, $files->author, false);
}
} else {
$mail_encode = '';
}
// Build author link
if ($files->author <> ''){
if ($files->url_author <> '') {
if ($mail_encode) {
$link_author = $jdpic_author.$mail_encode;
} else {
if (strpos($files->url_author, 'http://') !== false or strpos($files->url_author, 'https://') !== false) {
$link_author = $jdpic_author.'<a href="'.$files->url_author.'" target="_blank">'.$files->author.'</a> '.$jdextern_url_pic;
} else {
$link_author = $jdpic_author.'<a href="http://'.$files->url_author.'" target="_blank">'.$files->author.'</a> '.$jdextern_url_pic;
}
}
$l_Template = str_replace('{author}',$link_author, $l_Template);
$l_Template = str_replace('{author_text}',$link_author, $l_Template);
$l_Template = str_replace('{url_author}', '', $l_Template);
} else {
$link_author = $jdpic_author.$files->author;
$l_Template = str_replace('{author}',$link_author, $l_Template);
$l_Template = str_replace('{author_text}',$link_author, $l_Template);
$l_Template = str_replace('{url_author}', '', $l_Template);
}
} else {
$l_Template = str_replace('{url_author}', $jdpic_author.$files->url_author, $l_Template);
$l_Template = str_replace('{author}','', $l_Template);
$l_Template = str_replace('{author_text}','', $l_Template);
}
// Place the images
$l_Template = JDHelper::placeThumbs($l_Template, $files->images, 'list');
// we change the old lightbox tag type to the new
$l_Template = str_replace('rel="lightbox"', 'data-lightbox="lightbox'.$files->id.'"', $l_Template);
// Compute for HOT symbol
if ($params->get('loads_is_file_hot') > 0 && $files->downloads >= $params->get('loads_is_file_hot') ){
$l_Template = str_replace('{pic_is_hot}', '<span class="jdbutton '.$status_color_hot.' jstatus">'.Text::_('COM_JDOWNLOADS_HOT').'</span>', $l_Template);
} else {
$l_Template = str_replace('{pic_is_hot}', '', $l_Template);
}
// Compute for NEW symbol
$days_diff = JDHelper::computeDateDifference(date('Y-m-d H:i:s'), $files->created);
if ($params->get('days_is_file_new') > 0 && $days_diff <= $params->get('days_is_file_new')){
$l_Template = str_replace('{pic_is_new}', '<span class="jdbutton '.$status_color_new.' jstatus">'.Text::_('COM_JDOWNLOADS_NEW').'</span>', $l_Template);
} else {
$l_Template = str_replace('{pic_is_new}', '', $l_Template);
}
// Compute for UPDATED symbol
// View it only when in the download is activated the 'updated' option
if ($files->update_active) {
$days_diff = JDHelper::computeDateDifference(date('Y-m-d H:i:s'), $files->modified);
if ($params->get('days_is_file_updated') > 0 && $days_diff >= 0 && $days_diff <= $params->get('days_is_file_updated')){
$l_Template = str_replace('{pic_is_updated}', '<span class="jdbutton '.$status_color_updated.' jstatus">'.Text::_('COM_JDOWNLOADS_UPDATED').'</span>', $l_Template);
} else {
$l_Template = str_replace('{pic_is_updated}', '', $l_Template);
}
} else {
$l_Template = str_replace('{pic_is_updated}', '', $l_Template);
}
// file size
if ($files->size == '' || $files->size == '0 B') {
$l_Template = str_replace('{size}', '', $l_Template);
$l_Template = str_replace('{filesize_value}', '', $l_Template);
} else {
$l_Template = str_replace('{size}', $jdpic_size.$files->size, $l_Template);
$l_Template = str_replace('{filesize_value}', $jdpic_size.$files->size, $l_Template);
}
// price
if ($files->price != '') {
$l_Template = str_replace('{price_value}', $jdpic_price.$files->price, $l_Template);
} else {
$l_Template = str_replace('{price_value}', '', $l_Template);
}
// Add access information
$l_Template = str_replace('{access_title}', Text::_('COM_JDOWNLOADS_ACCESS'), $l_Template);
$userhelper = new UserGroupsHelper();
$user_group = $userhelper->load($files->access);
if (!is_bool($user_group)){
$l_Template = str_replace('{access}', $user_group->title, $l_Template);
} else {
$l_Template = str_replace('{access}', '', $l_Template);
}
// file_date
if ($files->file_date != '0000-00-00 00:00:00' && $files->file_date != null) {
if ($files->params->get('show_date') == 0){
$filedate_data = $jdpic_date.HTMLHelper::_('date',$files->file_date, $date_format['long']);
$filedate_data_title = Text::_('COM_JDOWNLOADS_EDIT_FILE_FILE_DATE_TITLE');
} else {
$filedate_data = $jdpic_date.HTMLHelper::_('date',$files->file_date, $date_format['short']);
$filedate_data_title = '';
}
} else {
$filedate_data = '';
$filedate_data_title = '';
}
$l_Template = str_replace('{file_date}',$filedate_data, $l_Template);
// date_added
if ($files->created != '0000-00-00 00:00:00' && $files->created != null) {
if ($files->params->get('show_date') == 0){
// use 'normal' date-time format field
$date_data = $jdpic_date.HTMLHelper::_('date',$files->created, $date_format['long']);
} else {
// use 'short' date-time format field
$date_data = $jdpic_date.HTMLHelper::_('date',$files->created, $date_format['short']);
}
} else {
$date_data = '';
}
$l_Template = str_replace('{date_added}',$date_data, $l_Template);
$l_Template = str_replace('{created_date_value}',$date_data, $l_Template);
if ($files->creator){
$l_Template = str_replace('{created_by_value}', $files->creator, $l_Template);
} else {
$l_Template = str_replace('{created_by_value}', '', $l_Template);
}
if ($files->modifier){
$l_Template = str_replace('{modified_by_value}', $files->modifier, $l_Template);
} else {
$l_Template = str_replace('{modified_by_value}', '', $l_Template);
}
// modified_date
if ($files->modified != '0000-00-00 00:00:00' && $files->modified != null) {
if ($files->params->get('show_date') == 0){
$modified_data = $jdpic_date.HTMLHelper::_('date',$files->modified, $date_format['long']);
} else {
$modified_data = $jdpic_date.HTMLHelper::_('date',$files->modified, $date_format['short']);
}
} else {
$modified_data = '';
}
$l_Template = str_replace('{modified_date_value}',$modified_data, $l_Template);
if ($files->release == '') {
$l_Template = str_replace('{release}', '', $l_Template);
} else {
$l_Template = str_replace('{release}', $files->release.' ', $l_Template);
// with versions text from language file
// $l_Template = str_replace('{release}', Text::_('COM_JDOWNLOADS_FRONTEND_VERSION_TITLE').$files->release, $l_Template);
}
// Create an additional hint for the description footer when this download has a file but user has not the download permissions
if ($download_has_a_file){
if ($user->guest){
$first_reg_msg = '<div class="'.$params->get('css_button_color_download').' '.$params->get('css_button_size_download').'">'.Text::_('COM_JDOWNLOADS_FRONTEND_FILE_ACCESS_REGGED').'</div>';
} else {
$first_reg_msg = '<div class="'.$params->get('css_button_color_download').' '.$params->get('css_button_size_download').'">'.Text::_('COM_JDOWNLOADS_FRONTEND_FILE_ACCESS_REGGED2').'</div>';
}
} else {
$first_reg_msg = '';
}
// Check and build the description text
if ($truncated_file_desc_len){
if (StringHelper::strlen($files->description) > $truncated_file_desc_len){
// Cut description text
$shorted_text = HTMLHelper::_('string.truncate', $files->description, $truncated_file_desc_len, true, true); // Do not cut off words; HTML allowed;
if (!$download_allowed){
//$l_Template = str_replace('{description}', $shorted_text.$first_reg_msg, $l_Template);
$l_Template = str_replace('{description}', $shorted_text, $l_Template);
} else {
$l_Template = str_replace('{description}', $shorted_text, $l_Template);
}
} else {
if (!$download_allowed){
// $l_Template = str_replace('{description}', $files->description.$first_reg_msg, $l_Template);
$l_Template = str_replace('{description}', $files->description, $l_Template);
} else {
$l_Template = str_replace('{description}', $files->description, $l_Template);
}
}
} else {
if (!$download_allowed){
//$l_Template = str_replace("{description}",$files->description.$first_reg_msg, $l_Template);
$l_Template = str_replace('{description}', $files->description, $l_Template);
} else {
$l_Template = str_replace('{description}', $files->description, $l_Template);
}
}
// create filename
if ($files->url_download){
$l_Template = str_replace('{file_name}', JDHelper::getShorterFilename($db->escape(strip_tags($files->url_download))), $l_Template);
} elseif (isset($files->filename_from_other_download) && $files->filename_from_other_download != ''){
$l_Template = str_replace('{file_name}', JDHelper::getShorterFilename($db->escape(strip_tags($files->filename_from_other_download))), $l_Template);
} else {
$l_Template = str_replace('{file_name}', '', $l_Template);
}
$l_Template = str_replace("{show_association}", '', $l_Template);
// replace both Google adsense placeholder with script
$l_Template = JDHelper::insertGoogleAdsenseCode($l_Template);
// report download link
if ($jd_user_settings->view_report_form){
$report_link = '<a href="'.Route::_("index.php?option=com_jdownloads&view=report&id=".$files->slug."&catid=".$files->catid."&Itemid=".$root_itemid).'" rel="nofollow">'.Text::_('COM_JDOWNLOADS_FRONTEND_REPORT_FILE_LINK_TEXT').'</a>';
$l_Template = str_replace('{report_link}', $report_link, $l_Template);
} else {
$l_Template = str_replace('{report_link}', '', $l_Template);
}
// media player
if ($files->preview_filename){
// we use the preview file when exist
$is_preview = true;
$files->itemtype = JDHelper::getFileExtension($files->preview_filename);
$is_playable = JDHelper::isPlayable($files->preview_filename);
$extern_media = false;
} else {
$is_preview = false;
if ($files->extern_file){
$extern_media = true;
$files->itemtype = JDHelper::getFileExtension($files->extern_file);
$is_playable = JDHelper::isPlayable($files->extern_file);
} else {
$files->itemtype = JDHelper::getFileExtension($files->url_download);
$is_playable = JDHelper::isPlayable($files->url_download);
$extern_media = false;
}
}
if ( $is_playable ){
if ($params->get('html5player_use')){
// we will use the new HTML5 player option
if ($extern_media){
$media_path = $files->extern_file;
} else {
if ($is_preview){
// we need the relative path to the "previews" folder
$media_path = Uri::base().basename($params->get('files_uploaddir')).'/'.$params->get('preview_files_folder_name').'/'.$files->preview_filename;
} else {
// we use the normal download file for the player
$media_path = Uri::base().basename($params->get('files_uploaddir')).'/'.$category_dir.'/'.$files->url_download;
}
}
// create the HTML5 player
$player = JDHelper::getHTML5Player($files, $media_path);
// we use the player for video files only in listings, when the option allowed this
if ($params->get('html5player_view_video_only_in_details') && $files->itemtype != 'mp3' && $files->itemtype != 'wav' && $files->itemtype != 'oga'){
$l_Template = str_replace('{mp3_player}', '', $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
} else {
if ($files->itemtype == 'mp4' || $files->itemtype == 'webm' || $files->itemtype == 'ogg' || $files->itemtype == 'ogv' || $files->itemtype == 'mp3' || $files->itemtype == 'wav' || $files->itemtype == 'oga'){
// We will replace at first the old placeholder when exist
if (strpos($l_Template, '{mp3_player}')){
$l_Template = str_replace('{mp3_player}', $player, $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
} else {
$l_Template = str_replace('{preview_player}', $player, $l_Template);
}
} else {
$l_Template = str_replace('{mp3_player}', '', $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
}
}
} else {
if ( $params->get('flowplayer_use') && $is_playable ){
// we will use the new flowplayer option
if ($extern_media){
$media_path = $files->extern_file;
} else {
if ($is_preview){
// we need the relative path to the "previews" folder
$media_path = basename($params->get('files_uploaddir')).'/'.$params->get('preview_files_folder_name').'/'.$files->preview_filename;
} else {
// we use the normal download file for the player
$media_path = basename($params->get('files_uploaddir')).'/'.$category_dir.'/'.$files->url_download;
}
}
$ipadcode = '';
if ($files->itemtype == 'mp3'){
$fullscreen = 'false';
$autohide = 'false';
$playerheight = (int)$params->get('flowplayer_playerheight_audio');
// we must use also the ipad plugin identifier when required
// see http://flowplayer.blacktrash.org/test/ipad-audio.html and http://flash.flowplayer.org/plugins/javascript/ipad.html
if ((bool) strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') || (bool) strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')){
$ipadcode = '.ipad();';
}
} else {
$fullscreen = 'true';
$autohide = 'true';
$playerheight = (int)$params->get('flowplayer_playerheight');
}
$player = '<a href="'.$media_path.'" style="display:block;width:'.$params->get('flowplayer_playerwidth').'px; height:'.$playerheight.'px;" class="player" id="player'.$files->id.'"></a>';
$player .= '<script language="JavaScript">
// install flowplayer into container
flowplayer("player'.$files->id.'", "'.Uri::base().'components/com_jdownloads/assets/flowplayer/flowplayer-3.2.16.swf",
{
plugins: {
controls: {
// insert at first the config settings
// and now the basics
fullscreen: '.$fullscreen.',
height: '.(int)$params->get('flowplayer_playerheight_audio').',
autoHide: '.$autohide.',
}
},
clip: {
autoPlay: false,
// optional: when playback starts close the first audio playback
onBeforeBegin: function() {
$f("player'.$files->id.'").close();
}
}
})'.$ipadcode.'; </script>';
// the 'ipad code' above is only required for ipad/iphone users
// we use the player for video files only in listings, when the option allowed this
if ($params->get('flowplayer_view_video_only_in_details') && $files->itemtype != 'mp3'){
$l_Template = str_replace('{mp3_player}', '', $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
} else {
if ($files->itemtype == 'mp4' || $files->itemtype == 'flv' || $files->itemtype == 'mp3'){
// We will replace at first the old placeholder when exist
if (strpos($l_Template, '{mp3_player}')){
$l_Template = str_replace('{mp3_player}', $player, $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
} else {
$l_Template = str_replace('{preview_player}', $player, $l_Template);
}
} else {
$l_Template = str_replace('{mp3_player}', '', $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
}
}
}
}
}
if ($params->get('mp3_view_id3_info') && $files->itemtype == 'mp3' && !$extern_media){
// read mp3 infos
if ($is_preview){
// get the path to the preview file
$mp3_path_abs = $params->get('files_uploaddir').'/'.$params->get('preview_files_folder_name').'/'.$files->preview_filename;
} else {
// get the path to the downloads file
$mp3_path_abs = $params->get('files_uploaddir').'/'.$category_dir.'/'.$files->url_download;
}
$info = JDHelper::getID3v2Tags($mp3_path_abs);
if ($info){
// add it
$mp3_info = '<div class="jd_mp3_id3tag_wrapper" style="max-width:'.(int)$params->get('html5player_audio_width').'px; ">'.stripslashes($params->get('mp3_info_layout')).'</div>';
$mp3_info = str_replace('{name_title}', Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_TITLE'), $mp3_info);
if ($is_preview){
$mp3_info = str_replace('{name}', $files->preview_filename, $mp3_info);
} else {
$mp3_info = str_replace('{name}', $files->url_download, $mp3_info);
}
$mp3_info = str_replace('{album_title}', Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_ALBUM'), $mp3_info);
$mp3_info = str_replace('{album}', $info['TALB'], $mp3_info);
$mp3_info = str_replace('{artist_title}', Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_ARTIST'), $mp3_info);
$mp3_info = str_replace('{artist}', $info['TPE1'], $mp3_info);
$mp3_info = str_replace('{genre_title}', Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_GENRE'), $mp3_info);
$mp3_info = str_replace('{genre}', $info['TCON'], $mp3_info);
$mp3_info = str_replace('{year_title}', Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_YEAR'), $mp3_info);
$mp3_info = str_replace('{year}', $info['TYER'], $mp3_info);
$mp3_info = str_replace('{length_title}', Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_LENGTH'), $mp3_info);
$mp3_info = str_replace('{length}', $info['TLEN'].' '.Text::_('COM_JDOWNLOADS_FE_VIEW_ID3_MINS'), $mp3_info);
$l_Template = str_replace('{mp3_id3_tag}', $mp3_info, $l_Template);
}
}
// replace the {preview_url}
if ($files->preview_filename){
// we need the relative path to the "previews" folder
$media_path = basename($params->get('files_uploaddir')).'/'.$params->get('preview_files_folder_name').'/'.$files->preview_filename;
$l_Template = str_replace('{preview_url}', $media_path, $l_Template);
} else {
$l_Template = str_replace('{preview_url}', '', $l_Template);
}
// replace the placeholder {information_header}
$l_Template = str_replace('{information_header}', Text::_('COM_JDOWNLOADS_INFORMATION'), $l_Template);
// render the tags
if (!empty($files->tags->itemTags)){
$files->tagLayout = new FileLayout('joomla.content.tags');
$l_Template = str_replace('{tags}', $files->tagLayout->render($files->tags->itemTags), $l_Template);
$l_Template = str_replace('{tags_title}', Text::_('COM_JDOWNLOADS_TAGS_LABEL'), $l_Template);
} else {
$l_Template = str_replace('{tags}', '', $l_Template);
$l_Template = str_replace('{tags_title}', '', $l_Template);
}
// Insert the Joomla Fields data when used
if (isset($files->jcfields) && count((array)$files->jcfields)){
foreach ($files->jcfields as $field){
if ($params->get('remove_field_title_when_empty') && !$field->value){
$l_Template = str_replace('{jdfield_title '.$field->id.'}', '', $l_Template); // Remove label placeholder
$l_Template = str_replace('{jdfield '.$field->id.'}', '', $l_Template); // Remove value placeholder
} else {
$l_Template = str_replace('{jdfield_title '.$field->id.'}', $field->label, $l_Template); // Insert label
$l_Template = str_replace('{jdfield '.$field->id.'}', $field->value, $l_Template); // Insert value
}
}
// In the layout could still exist not required field placeholders
$results = JDHelper::searchFieldPlaceholder($l_Template);
if ($results){
foreach ($results as $result){
$l_Template = str_replace($result[0], '', $l_Template); // Remove label and value placeholder
}
}
} else {
// In the layout could still exist not required field placeholders
$results = JDHelper::searchFieldPlaceholder($l_Template);
if ($results){
foreach ($results as $result){
$l_Template = str_replace($result[0], '', $l_Template); // Remove label and value placeholder
}
}
}
$user_can_see_download_url = false;
// only view download link when user has correct access level
if ($files->params->get('access-download') == true){
$user_can_see_download_url = true;
$blank_window = '';
$blank_window1 = '';
$blank_window2 = '';
// get file extension
$view_types = array();
$view_types = explode(',', $params->get('file_types_view'));
$only_file_name = basename($files->url_download);
$filesextension = JDHelper::getFileExtension($only_file_name);
if (in_array($filesextension, $view_types)){
$blank_window = 'target="_blank"';
}
// check is set link to a new window?
if ($files->extern_file && $files->extern_site ){
$blank_window = 'target="_blank"';
}
// is 'direct download' activated?
if ($params->get('direct_download') == '0'){
// when not, we must link to the summary page
$url_task = 'summary';
$blank_window = '';
$download_link = Route::_(RouteHelper::getOtherRoute($files->slug, $files->catid, $files->language, $url_task));
} else {
if ($files->license_agree || $files->password || $jd_user_settings->view_captcha) {
// user must agree the license - fill out a password field - or fill out the captcha human check - so we must view the summary page!
$url_task = 'summary';
$download_link = Route::_(RouteHelper::getOtherRoute($files->slug, $files->catid, $files->language, $url_task));
} else {
// start the download promptly
$url_task = 'download.send';
$download_link = Route::_(RouteHelper::getOtherRoute($files->slug, $files->catid, $files->language, $url_task));
}
}
if ($url_task == 'download.send'){
$download_link_text = '<a '.$blank_window.' href="'.$download_link.'" aria-label="'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL_ARIA_DIRECT').'" alt="'.substr(Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL'),0,-4).'" class="jdbutton '.$download_color.' '.$download_size_listings.'">'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL').'</a>';
} else {
$download_link_text = '<a '.$blank_window.' href="'.$download_link.'" aria-label="'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL_ARIA_SUMMARY').'" alt="'.substr(Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL'),0,-4).'" class="jdbutton '.$download_color.' '.$download_size_listings.'">'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL').'</a>';
}
if (strpos($l_Template, '{url_download}')){
$l_Template = str_replace('{url_download}', $download_link_text, $l_Template);
} else {
$l_Template = str_replace('{checkbox_list}', $download_link_text, $l_Template);
}
// mirrors
if ($files->mirror_1) {
if ($files->extern_site_mirror_1 && $url_task == 'download.send'){
$blank_window1 = 'target="_blank"';
}
$mirror1_link_dum = Route::_(RouteHelper::getOtherRoute($files->slug, $files->catid, $files->language, 'download.send', 1));
$mirror1_link = '<a '.$blank_window1.' href="'.$mirror1_link_dum.'" alt="'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL').'" class="jdbutton '.$download_color_mirror1.' '.$download_size_mirror.'">'.Text::_('COM_JDOWNLOADS_FRONTEND_MIRROR_URL_TITLE_1').'</a>';
$l_Template = str_replace('{mirror_1}', $mirror1_link, $l_Template);
} else {
$l_Template = str_replace('{mirror_1}', '', $l_Template);
}
if ($files->mirror_2) {
if ($files->extern_site_mirror_2 && $url_task == 'download.send'){
$blank_window2 = 'target="_blank"';
}
$mirror2_link_dum = Route::_(RouteHelper::getOtherRoute($files->slug, $files->catid, $files->language, 'download.send', 2));
$mirror2_link = '<a '.$blank_window2.' href="'.$mirror2_link_dum.'" alt="'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL').'" class="jdbutton '.$download_color_mirror2.' '.$download_size_mirror.'">'.Text::_('COM_JDOWNLOADS_FRONTEND_MIRROR_URL_TITLE_2').'</a>';
$l_Template = str_replace('{mirror_2}', $mirror2_link, $l_Template);
} else {
$l_Template = str_replace('{mirror_2}', '', $l_Template);
}
} else {
// visitor has not access to download this item - so we will inform him
if (strpos($l_Template, '{url_download}')){
$l_Template = str_replace('{url_download}', $first_reg_msg, $l_Template);
} else {
$l_Template = str_replace('{checkbox_list}', $first_reg_msg, $l_Template);
}
$l_Template = str_replace('{mirror_1}', '', $l_Template);
$l_Template = str_replace('{mirror_2}', '', $l_Template);
}
if ($params->get('view_detailsite')){
$title_link = Route::_(RouteHelper::getDownloadRoute($files->slug, $files->catid, $files->language));
$title_link_text = '<a href="'.$title_link.'">'.$files->title.'</a> ';
$detail_link_text = '<a href="'.$title_link.'">'.Text::_('COM_JDOWNLOADS_FE_DETAILS_LINK_TEXT_TO_DETAILS').'</a>';
// Build the file symbol (with link)
if ($files->file_pic != '' ) {
$filepic = '<a href="'.$title_link.'">'.'<img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" align="top" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" border="0" alt="'.substr($files->file_pic,0,-4).'"/></a>';
} else {
$filepic = '';
}
$l_Template = str_replace('{file_pic}', $filepic, $l_Template);
// link to details view at the end
$l_Template = str_replace('{link_to_details}', $detail_link_text, $l_Template);
$l_Template = str_replace('{file_title}', $title_link_text.' '.$edit_icon, $l_Template);
} elseif ($params->get('use_download_title_as_download_link')){
if ($user_can_see_download_url){
// build title link as download link
if ($url_task == 'download.send'){
$download_link_text = '<a '.$blank_window.' href="'.$download_link.'" title="'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL').'" class="jd_download_url">'.$files->title.'</a> ';
} else {
$download_link_text = '<a href="'.$download_link.'" title="'.Text::_('COM_JDOWNLOADS_LINKTEXT_DOWNLOAD_URL').'">'.$files->title.'</a> ';
}
// View file icon also with link
if ($files->file_pic != '' ) {
$filepic = '<a href="'.$download_link.'"><img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" align="top" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" border="0" alt="'.substr($files->file_pic,0,-4).'"/></a>';
} else {
$filepic = '';
}
$l_Template = str_replace('{file_pic}', $filepic, $l_Template);
$l_Template = str_replace('{link_to_details}', '', $l_Template);
$l_Template = str_replace('{file_title}', $download_link_text.' '.$edit_icon, $l_Template);
} else {
// user may not use download link
$l_Template = str_replace('{file_title}', $files->title, $l_Template);
if ($files->file_pic != '' ) {
$filepic = '<img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" align="top" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" border="0" alt="'.substr($files->file_pic,0,-4).'"/>';
} else {
$filepic = '';
}
$l_Template = str_replace('{file_pic}', $filepic, $l_Template);
}
} else {
// no links
if ($files->file_pic != '' ) {
$filepic = '<img src="'.Uri::base().$jDFPsfolders['file'].$files->file_pic.'" align="top" width="'.$params->get('file_pic_size').'" height="'.$params->get('file_pic_size_height').'" border="0" alt="'.substr($files->file_pic,0,-4).'"/>';
} else {
$filepic = '';
}
$l_Template = str_replace('{file_pic}', $filepic, $l_Template);
// remove link to details view at the end
$l_Template = str_replace('{link_to_details}', '', $l_Template);
$l_Template = str_replace('{file_title}', $files->title.' ', $l_Template);
}
// insert rating system
if ($params->get('view_ratings')){
$rating_system = JDHelper::getRatings($files->id, $user_can_see_download_url, $files->rating_count, $files->rating_sum);
$l_Template = str_replace('{rating}', $rating_system, $l_Template);
$l_Template = str_replace('{rating_title}', Text::_('COM_JDOWNLOADS_RATING_LABEL'), $l_Template);
} else {
$l_Template = str_replace('{rating}', '', $l_Template);
$l_Template = str_replace('{rating_title}', '', $l_Template);
}
$l_Template = str_replace('{file_title_only}', $files->title, $l_Template);
$l_Template = str_replace('{checkbox_list}', '',$l_Template);
$l_Template = str_replace('{file_id}', $files->id,$l_Template);
$l_Template = str_replace('{ordering}', $files->ordering,$l_Template);
$l_Template = str_replace('{published}', $files->published,$l_Template);
$l_Template = str_replace('{cat_id}', $files->catid,$l_Template);
$l_Template = str_replace('{rank}',$jDFPrank, $l_Template);
$l_Template = str_replace('{mp3_player}', '', $l_Template);
$l_Template = str_replace('{mp3_id3_tag}', '', $l_Template);
$l_Template = str_replace('{preview_player}', '', $l_Template);
$l_Template = str_replace('{report_link}','', $l_Template);
$l_Template = str_replace('{sum_jcomments}','', $l_Template);
$l_Template = str_replace('{rating}','', $l_Template);
$l_Template = str_replace('{rating_title}','', $l_Template);
// insert files title area
if (!$jDLayoutTitleExists){
$l_Template = str_replace('{files_title_begin}', '', $l_Template);
$l_Template = str_replace('{files_title_end}', '', $l_Template);
$l_Template = str_replace('{files_title_text}', Text::_('COM_JDOWNLOADS_FE_FILELIST_TITLE_OVER_FILES_LIST'), $l_Template);
$jDLayoutTitleExists = true;
} else {
if (strpos($l_Template, "{files_title_end}") > 0){
$pos_end = strpos($l_Template, '{files_title_end}');
$pos_beg = strpos($l_Template, '{files_title_begin}');
$l_Template = substr_replace($l_Template, '', $pos_beg, ($pos_end - $pos_beg) + 17);
}
}
// add the content plugin event 'before display content'
if (strpos($l_Template, '{before_display_content}') > 0){
$l_Template = str_replace('{before_display_content}', $files->event->beforeDisplayContent, $l_Template);
} else {
$l_Template = $files->event->beforeDisplayContent.$l_Template;
}
// for the 'after display title' event can we only use a placeholder - a fix position is not really given
$l_Template = str_replace('{after_display_title}', $files->event->afterDisplayTitle, $l_Template);
// add the content plugin event 'after display content'
if (strpos($l_Template, '{after_display_content}') > 0){
$l_Template = str_replace('{after_display_content}', $files->event->afterDisplayContent, $l_Template);
$event = '';
} else {
$event = $files->event->afterDisplayContent;
}
// support content plugins in layout output
$l_Template = HTMLHelper::_('content.prepare', $l_Template, '', 'com_jdownloads.download');
// remove empty html tags
if ($params->get('remove_empty_tags')){
$l_Template = JDHelper::removeEmptyTags($l_Template);
}
// finaly add the 'after display content' event output when required
$l_Template .= $event;
return str_replace("[[[","{",$l_Template);
}
// Build the data output for a category placeholder
function jd_file_createcategory($matches, $type)
{
global $params;
$db = Factory::getContainer()->get(DatabaseInterface::class);
$user = Factory::getApplication()->getIdentity();
$count = '';
$cat_result = array();
$sum = strrchr($matches[2] , ' count==');
$matches[2] = str_replace($sum, '', $matches[2]);
$sum = (int)str_replace(' count==', '', $sum);
if ($sum > 0) $count = 'LIMIT '.$sum;
// Get the data from the model
// and convert to array of integer
$catid = implode(',', array_map( 'intval', array_filter( explode(',', $matches[2]), 'is_numeric' ) ));
$query = $db->getQuery(true);
$groups = implode(',', $user->getAuthorisedViewLevels());
$asset = 'com_jdownloads.category.'.$catid;
// use for sort order the config settings
switch ($params->get('files_order')){
case '0':
// files ordering field
$orderCol = 'ordering';
$listOrderNew = 'ASC';
break;
case '1':
// files created desc
$orderCol = 'created'; // desc
$listOrderNew = 'DESC';
break;
case '2':
// files created asc
$orderCol = 'created'; // asc
$listOrderNew = 'ASC';
break;
case '3':
// files title field asc
$orderCol = 'title';
$listOrderNew = 'ASC';
break;
case '4':
// files title field desc
$orderCol = 'title';
$listOrderNew = 'DESC';
break;
case '5':
// files hits/downloads field desc
$orderCol = 'downloads';
$listOrderNew = 'DESC';
break;
case '6':
// files hits/downloads field asc
$orderCol = 'downloads';
$listOrderNew = 'ASC';
break;
case '7':
// author title field asc
$orderCol = 'author';
$listOrderNew = 'ASC';
break;
case '8':
// author title field desc
$orderCol = 'author';
$listOrderNew = 'DESC';
break;
}
// Check at first whether this user may view the items from this category.
$db->setQuery("SELECT count(*) FROM #__jdownloads_categories WHERE published = 1 AND id IN ($catid) AND access IN ($groups)");
$cat = $db->loadResult();
if ($cat){
if ($type == 'hottest'){
// we will view only the most downloaded files from a single category
$db->setQuery("SELECT * FROM #__jdownloads_files WHERE published = 1 AND catid IN ($catid) AND access IN ($groups) ORDER BY downloads desc ".$count);
} elseif ($type == 'latest'){
// we will view only the newest files from a single category
$db->setQuery("SELECT * FROM #__jdownloads_files WHERE published = 1 AND catid IN ($catid) AND access IN ($groups) ORDER BY created desc ".$count);
} else {
// only category placeholder is used - so we use the configuration sort order
$db->setQuery("SELECT * FROM #__jdownloads_files WHERE published = 1 AND catid IN ($catid) AND access IN ($groups) ORDER BY $orderCol $listOrderNew ".$count);
}
$cat_result = '';
$files = $db->loadObjectList();
if ($files){
foreach ($files as $file){
$matches[1] = 'file';
$matches[2] = $file->id;
$file_result = jd_file_createdownload($matches);
$cat_result .= $file_result;
}
}
if ($cat_result) {
return $cat_result;
} else {
return NULL;
}
} else {
// seems that user have not the permissions to view items from this category/categories
// or wrong category IDs used
return '';
}
}
/**
* Check if a asset file has already been loaded.
*
* @var string $asset the searched asset file without path
* string $type type (css or js)
* array $document
*
* @return boolean true when the asset was found
*
* @since 4.0.35
*/
function checkAssetAlreadyLoaded($asset, $type, $document)
{
// Check if asset file exist always in document
if ($type == 'css'){
if (isset($document->_styleSheets)){
if (array_key_exists(Uri::base().$asset, $document->_styleSheets)){
return true;
}
}
return false;
} elseif ($type == 'js'){
if (isset($document->_scripts)){
if (array_key_exists(Uri::base().$asset, $document->_scripts)){
return true;
}
}
return false;
}
}
?>