You've already forked wc-licensed-product
Dashboard widget improvements and download counter feature (v0.3.7)
- Fixed: Dashboard widget "View All Licenses" link used wrong page slug - Fixed: Download links in customer account resulted in 404 errors - Removed: Redundant "Status Breakdown" section from dashboard widget - Changed: License Types section now uses card style layout - Added: Download counter for licensed product versions - Added: Download Statistics admin dashboard widget - Updated translations (356 strings) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -276,4 +276,98 @@ class VersionManager
|
||||
|
||||
return (int) $count > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment download count for a version
|
||||
*/
|
||||
public function incrementDownloadCount(int $versionId): bool
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$tableName = Installer::getVersionsTable();
|
||||
$result = $wpdb->query(
|
||||
$wpdb->prepare(
|
||||
"UPDATE {$tableName} SET download_count = download_count + 1 WHERE id = %d",
|
||||
$versionId
|
||||
)
|
||||
);
|
||||
|
||||
return $result !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get total download count across all versions
|
||||
*/
|
||||
public function getTotalDownloadCount(): int
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$tableName = Installer::getVersionsTable();
|
||||
$count = $wpdb->get_var("SELECT COALESCE(SUM(download_count), 0) FROM {$tableName}");
|
||||
|
||||
return (int) $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get download statistics per product
|
||||
*/
|
||||
public function getDownloadStatistics(): array
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$tableName = Installer::getVersionsTable();
|
||||
|
||||
// Get total downloads
|
||||
$totalDownloads = $this->getTotalDownloadCount();
|
||||
|
||||
// Get downloads per product (top 10)
|
||||
$byProduct = $wpdb->get_results(
|
||||
"SELECT product_id, SUM(download_count) as downloads
|
||||
FROM {$tableName}
|
||||
GROUP BY product_id
|
||||
ORDER BY downloads DESC
|
||||
LIMIT 10",
|
||||
ARRAY_A
|
||||
);
|
||||
|
||||
// Get downloads per version (top 10)
|
||||
$byVersion = $wpdb->get_results(
|
||||
"SELECT id, product_id, version, download_count
|
||||
FROM {$tableName}
|
||||
WHERE download_count > 0
|
||||
ORDER BY download_count DESC
|
||||
LIMIT 10",
|
||||
ARRAY_A
|
||||
);
|
||||
|
||||
// Enrich product data with names
|
||||
$productsWithNames = [];
|
||||
foreach ($byProduct ?: [] as $row) {
|
||||
$product = wc_get_product((int) $row['product_id']);
|
||||
$productsWithNames[] = [
|
||||
'product_id' => (int) $row['product_id'],
|
||||
'product_name' => $product ? $product->get_name() : __('Unknown Product', 'wc-licensed-product'),
|
||||
'downloads' => (int) $row['downloads'],
|
||||
];
|
||||
}
|
||||
|
||||
// Enrich version data with product names
|
||||
$versionsWithNames = [];
|
||||
foreach ($byVersion ?: [] as $row) {
|
||||
$product = wc_get_product((int) $row['product_id']);
|
||||
$versionsWithNames[] = [
|
||||
'version_id' => (int) $row['id'],
|
||||
'product_id' => (int) $row['product_id'],
|
||||
'product_name' => $product ? $product->get_name() : __('Unknown Product', 'wc-licensed-product'),
|
||||
'version' => $row['version'],
|
||||
'downloads' => (int) $row['download_count'],
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'total' => $totalDownloads,
|
||||
'by_product' => $productsWithNames,
|
||||
'by_version' => $versionsWithNames,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user