* Refactor extension getexpiringplugins function and finish unit test script.
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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); // 按照分组获取已到期的插件列表。
|
||||
@@ -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: ""
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user