Как создать новый лицензионный ключ для одного или нескольких проектов. Пример кода для разработчиков для использования в своих программных решениях.
Чаще всего лицензионные ключи предоставляются пользователям на платной основе. Компонент SW JProjects на данный момент не предоставляет функционал приёма платежей и генерации ключей после успешной оплаты. Однако, вы можете легко автоматизировать этот процесс, организовав приём платежей с помощью любого другого компонента электронной коммерции.
Как правило во всех таких компонентах после события оплаты происходит вызов события для системы плагинов Joomla (паттерн Event Dispathcing). При вызове события срабатывают все плагины группы system
и плагины конкретной группы, подписанные на это событие. Таким образом вам достаточно написать плагин для своего компонента, который в нужный момент и при соответствии нужным условиям автоматически создаст лицензионный ключ.
Пример кода для создания лицензионного ключа
Предполагается, что данный код находится в плагине. Однако, его можно использовать и в других местах Joomla с небольшими доработками.
<?php
use Joomla\CMS\Router\Route;
use Joomla\Component\SWJProjects\Site\Helper\RouteHelper;
/**
* Generate download key for SW JProejects project
*
* @param int $order_number Order number
* @param int $project_id Project id. Or it can be an array of projects ids
* @param string $email Customer email
* @param string $note Your admin note for this key
* @param string $domain WWW-domain for key if you need
* @param string $date_start Key expiration date start
* @param string $date_end Key expiration date end
* @param int $user_id Joomla user id
*
*/
$modelProject = $this->getApplication()
->bootComponent('com_swjprojects')
->getMVCFactory()
->createModel('Project', 'Site', ['ignore_request' => false]);
/** @var array $keyData Data we will return for customer after successful payment */
$keyData = [];
if (!$project = $modelProject->getItem($project_id)) {
// We have tried to create a key for non-existent project
return;
}
/** @var \Joomla\Component\SWJProjects\Administrator\Model\KeyModel $modelKey */
$modelKey = $this->getApplication()
->bootComponent('com_swjprojects')
->getMVCFactory()
->createModel('Key', 'Administrator', ['ignore_request' => true]);
$data = [
// string empty for new key
'key' => '',
// int 0 for new key
'id' => 0,
// array Array of project ids
'projects' => [$project_id],
'order' => $order_number,
'email' => $email,
'date_start' => $date_start,
'date_end' => $date_end,
// int Published or not.
// If not, you will receive an error
// when you try to download a file using this key.
'state' => 1,
// Your admin note for this key
'note' => $note,
// WWW-domain for key if you need
'domain' => $domain,
];
// Bind the Joomla user id
if ($user_id > 0) {
$data['user'] = $user_id;
}
// Save data
if ($modelKey->save($data)) {
$key = $modelKey->getItem();
// Get the download link with download key for this project.
// If you generate a key for multiple projects -
// create a download link for each project in a loop
$downloadLink = Route::_(
RouteHelper::getDownloadRoute(
null,
$project_id,
$project->element,
$key->key
)
);
$keyData['key'] = $key;
$keyData['download_link'] = $downloadLink;
}