public static function getDownloadFiles($userId, $tokenDownload = '', $tokenOrder = '')
{
$db = Factory::getDBO();
$wheres = array();
if ((int) $userId < 1 && $tokenDownload != '' && $tokenOrder != '') {
$wheres[] = ' d.download_token = ' . $db->quote($tokenDownload);
$wheres[] = ' o.order_token = ' . $db->quote($tokenOrder);
$leftJoin = '';
} else {
$wheres[] = ' u.id = ' . (int) $userId;
$leftJoin = ' LEFT JOIN #__users AS u ON u.id = o.user_id';
}
$wheres[] = ' d.published = 1';
// In case of full group there can be problem with filtering additional files
// so the loading can be divided into download files, additional download files and attributed download files
$columns = 'd.id, d.order_id, d.product_id, d.attribute_id, d.option_id, d.order_product_id, d.order_attribute_id, d.order_option_id, d.title, d.alias, d.download_token, d.download_folder, d.download_file, d.download_hits, d.download_days, d.ordering, d.date, d.published, d.type, o.date AS order_date, o.order_number AS order_number';
$groupsFull = 'd.id, d.order_id, d.product_id, d.attribute_id, d.option_id, d.order_product_id, d.order_attribute_id, d.order_option_id, d.title, d.alias, d.download_token, d.download_folder, d.download_file, d.download_hits, d.download_days, d.ordering, d.date, d.published, d.type, o.date, o.order_number';
$groupsFast = 'd.order_id, d.download_file';
$groups = PhocacartUtilsSettings::isFullGroupBy() ? $groupsFull : $groupsFast;
$query = ' SELECT ' . $columns . ' FROM #__phocacart_order_downloads AS d' . ' LEFT JOIN #__phocacart_orders AS o ON o.id = d.order_id' . $leftJoin . ' WHERE ' . implode(' AND ', $wheres) . ' GROUP BY ' . $groups . ' ORDER BY d.date';
$db->setQuery($query);
$files = $db->loadObjectList();
return $files;
}