* Refactor extension getexpiringplugins function and finish unit test script.

This commit is contained in:
wangyuting
2023-12-11 11:12:26 +08:00
parent b8234f8ed3
commit 8fe9b3eb66
7 changed files with 156 additions and 43 deletions
+3 -3
View File
@@ -200,7 +200,7 @@ class extension extends control
$this->extension->executeDB($extension, 'uninstall');
$this->extension->updateExtension(array('code' => $extension, 'status' => 'available'));
$this->extension->togglePackageDisable($extension, 'disabled');
$this->extensionZen->togglePackageDisable($extension, 'disabled');
$this->view->title = $this->lang->extension->uninstallFinished;
$this->view->removeCommands = $this->extension->removePackage($extension);
@@ -235,7 +235,7 @@ class extension extends control
}
}
$this->extension->togglePackageDisable($extension, 'active');
$this->extensionZen->togglePackageDisable($extension, 'active');
$this->extensionZen->copyPackageFiles($extension);
$this->extension->updateExtension(array('code' => $extension, 'status' => 'installed'));
@@ -256,7 +256,7 @@ class extension extends control
$this->extensionZen->checkSafe();
$this->extension->updateExtension(array('code' => $extension, 'status' => 'deactivated'));
$this->extension->togglePackageDisable($extension, 'disabled');
$this->extensionZen->togglePackageDisable($extension, 'disabled');
$this->view->title = $this->lang->extension->deactivateFinished;
$this->view->removeCommands = $this->extension->removePackage($extension);
+29 -40
View File
@@ -559,7 +559,7 @@ class extensionModel extends model
/* Remove the extracted files. */
$extractedDir = $this->pkgRoot . $extension;
if($extractedDir and $extractedDir != '/' and !$this->classFile->removeDir($extractedDir))
if($extractedDir && $extractedDir != '/' && !$this->classFile->removeDir($extractedDir))
{
$removeCommands[] = PHP_OS == 'Linux' ? "rm -fr $extractedDir" : "rmdir $extractedDir /s";
}
@@ -646,6 +646,7 @@ class extensionModel extends model
{
if(empty($extension['code'])) return false;
/* 安装插件时新增的文件夹目录。 */
$appRoot = $this->app->getAppRoot();
if(isset($extension['dirs']))
{
@@ -656,6 +657,7 @@ class extensionModel extends model
$extension['dirs'] = json_encode($extension['dirs']);
}
/* 安装插件时复制的文件目录。 */
if(isset($extension['files']))
{
foreach($extension['files'] as $fullFilePath => $md5)
@@ -672,13 +674,14 @@ class extensionModel extends model
}
/**
* 获取插件到期时间。
* Get extension expire date.
*
* @param int $extension
* @param object $extension
* @access public
* @return string
*/
public function getExpireDate($extension)
public function getExpireDate(object $extension): string
{
$licencePath = $this->app->getConfigRoot() . 'license/';
$today = date('Y-m-d');
@@ -687,75 +690,61 @@ class extensionModel extends model
$licenceOrderFiles = glob($licencePath . 'order*.txt');
foreach($licenceOrderFiles as $licenceOrderFile)
{
/* 找到和当前插件代号匹配的授权文件。 */
if(stripos($licenceOrderFile, "{$extension->code}{$extension->version}.txt") === false) continue;
$order = file_get_contents($licenceOrderFile);
$order = unserialize($order);
if($order->type != 'life')
{
$days = isset($order->days) ? $order->days : 0;
if($order->type == 'demo') $days = 31;
if($order->type == 'year') $days = 365;
$startDate = !helper::isZeroDate($order->paidDate) ? $order->paidDate : $order->createdDate;
if($days) $expiredDate = date('Y-m-d', strtotime($startDate) + $days * 24 * 3600);
}
else
{
$expiredDate = $order->type;
}
/* 如果是终生版授权,直接返回life。 */
if($order->type == 'life') return 'life';
/* 获取授权总时长。 */
$days = 0;
if($order->type == 'demo') $days = 31; // 试用授权时长31天。
if($order->type == 'year') $days = 365; // 一年版授权时长365天。
if(!$days && isset($order->days)) $days = $order->days; // 自定义授权时长根据days字段设置。
/* 根据授权时长和购买插件时间获取到期时间。 */
$startDate = !helper::isZeroDate($order->paidDate) ? $order->paidDate : $order->createdDate;
if($days) $expiredDate = date('Y-m-d', strtotime($startDate) + $days * 24 * 3600); // 如果授权时长是0则代表是不限时长的授权。
}
return $expiredDate;
}
/**
* 获取即将到期的插件列表。
* Get plugins that are about to expire or have expired.
*
* @param bool $category
* @param bool $isGroup 是否分组
* @access public
* @return array
*/
public function getExpiringPlugins($category = false)
public function getExpiringPlugins(bool $isGroup = false): array
{
$extensions = $this->getLocalExtensions('installed');
$plugins = $category ? array('expiring' => array(), 'expired' => array()) : array();
$plugins = $isGroup ? array('expiring' => array(), 'expired' => array()) : array();
$today = helper::today();
foreach($extensions as $extension)
{
$expiredDate = $this->getExpireDate($extension);
if(!empty($expiredDate) and $expiredDate != 'life')
if(!empty($expiredDate) && $expiredDate != 'life')
{
$dateDiff = helper::diffDate($expiredDate, $today);
if($category)
if($isGroup)
{
if($dateDiff == 30 or $dateDiff == 14 or ($dateDiff <= 7 and $dateDiff >= 0)) $plugins['expiring'][] = $extension->name;
if($dateDiff == 30 || $dateDiff == 14 || ($dateDiff <= 7 && $dateDiff >= 0)) $plugins['expiring'][] = $extension->name;
if($dateDiff <= -1) $plugins['expired'][] = $extension->name;
}
else
{
if($dateDiff == 30 or $dateDiff == 14 or $dateDiff <= 7) $plugins[] = $extension->name;
if($dateDiff == 30 || $dateDiff == 14 || $dateDiff <= 7) $plugins[] = $extension->name;
}
}
}
return $plugins;
}
/**
* Mark package active or disabled
*
* @param string $extension
* @param string $action disabled|active
* @access public
* @return bool
*/
public function togglePackageDisable($extension, $action = 'disabled')
{
if(!is_dir($this->pkgRoot . $extension)) return true;
$disabledFile = $this->pkgRoot . $extension . DS . 'disabled';
if($action == 'disabled') touch($disabledFile);
if($action == 'active' && file_exists($disabledFile)) unlink($disabledFile);
return true;
}
}
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
su('admin');
zdTable('extension')->config('extension')->gen(20);
/**
title=测试 extensionModel->getDependsExtension();
timeout=0
cid=1
- 获取依赖code1插件的插件列表。
- 第0条的name属性 @这是插件名称6
- 第0条的code属性 @code6
- 第0条的type属性 @extension
- 第1条的name属性 @这是插件名称12
- 第1条的code属性 @code12
- 第1条的type属性 @extension
- 获取依赖code2插件的插件列表。
- 第0条的name属性 @这是插件名称6
- 第0条的code属性 @code6
- 第0条的type属性 @extension
- 第1条的name属性 @这是插件名称12
- 第1条的code属性 @code12
- 第1条的type属性 @extension
- 获取依赖code4插件的插件列表。 @0
*/
global $tester;
$tester->loadModel('extension');
r($tester->extension->getDependsExtension('code1')) && p('0:name,code,type;1:name,code,type') && e('这是插件名称6,code6,extension,这是插件名称12,code12,extension'); // 获取依赖code1插件的插件列表。
r($tester->extension->getDependsExtension('code3')) && p('0:name,code,type;1:name,code,type') && e('这是插件名称6,code6,extension,这是插件名称12,code12,extension'); // 获取依赖code2插件的插件列表。
r($tester->extension->getDependsExtension('code4')) && p() && e('0'); // 获取依赖code4插件的插件列表。
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env php
<?php
/**
title=测试 extensionModel->getExpireDate();
timeout=0
cid=1
- 获取代号为code1的插件包安装SQL文件。 @0
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
su('admin');
global $tester;
$tester->loadModel('extension');
$extension = new stdclass();
$extension->code = 'code1';
$extension->version = 'version1';
r($tester->extension->getExpireDate($extension)) && p() && e(0); // 获取代号为code1的插件包的过期时间。
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env php
<?php
/**
title=测试 extensionModel->getExpiringPlugins();
timeout=0
cid=1
- 获取即将到期的插件列表。 @0
- 按照分组获取即将到期的插件列表。 @0
- 按照分组获取已到期的插件列表。 @0
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
su('admin');
global $tester;
$tester->loadModel('extension');
r($tester->extension->getExpiringPlugins()) && p() && e(0); // 获取即将到期的插件列表。
$result = $tester->extension->getExpiringPlugins(true);
r($result['expiring']) && p() && e(0); // 按照分组获取即将到期的插件列表。
r($result['expired']) && p() && e(0); // 按照分组获取已到期的插件列表。
+20
View File
@@ -0,0 +1,20 @@
title: table zt_extension
desc: "插件"
author: automated export
version: "1.0"
fields:
- field: version
fields:
- field: version1
range: 1{10},2{10},3{10},4{10},5{10},6{10}
- field: version2
range: .
- field: version3
range: 0-9
- field: depends
note: "依赖插件"
range: 0{5},`{'code1':'all','code2':{'min':'1.0',max':'2.0'},'code3':{'min':'1.0','max':'1.0'}}`
postfix: ""
loop: 0
format: ""
+20
View File
@@ -554,6 +554,7 @@ class extensionZen extends extension
}
/**
* 检查当前版本是否包含在指定版本内。
* Compare for limit data.
*
* @param string $version
@@ -577,4 +578,23 @@ class extensionZen extends extension
return $result;
}
/**
* 标记此插件是否被禁用。
* Mark package active or disabled
*
* @param string $extension
* @param string $action disabled|active
* @access public
* @return bool
*/
public function togglePackageDisable(string $extension, string $action = 'disabled'): bool
{
if(!is_dir($this->pkgRoot . $extension)) return true;
$disabledFile = $this->pkgRoot . $extension . DS . 'disabled';
if($action == 'disabled') touch($disabledFile);
if($action == 'active' && file_exists($disabledFile)) unlink($disabledFile);
return true;
}
}