* Optimize block default height and width.

This commit is contained in:
wangyuting
2023-08-17 15:16:27 +08:00
parent 05c685bcbe
commit f15db09cb8
16 changed files with 193 additions and 215 deletions
+5
View File
@@ -10,6 +10,7 @@ ALTER TABLE `zt_block` MODIFY `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER
UPDATE `zt_block` SET `dashboard` = CONCAT(`module`, `type`);
UPDATE `zt_block` SET `module` = IF(`source` != '', `source`, `code`);
UPDATE `zt_block` SET `width` = IF(`grid` > 4, '2', '1');
DROP INDEX account_vision_module_type_order ON `zt_block`;
ALTER TABLE `zt_block` DROP COLUMN `source`;
@@ -17,6 +18,10 @@ ALTER TABLE `zt_block` DROP COLUMN `type`;
ALTER TABLE `zt_block` DROP COLUMN `grid`;
ALTER TABLE `zt_block` DROP COLUMN `order`;
DELETE FROM `zt_block` where `module` = 'todo' and `code` = 'list';
DELETE FROM `zt_block` where `module` = 'contribute' and `code` = 'contribute';
DELETE FROM `zt_block` where `module` = 'project' and `code` = 'projectteam';
ALTER TABLE `zt_todo` CHANGE `idvalue` `objectID` mediumint(8) unsigned default '0' NOT NULL AFTER `type`;
ALTER TABLE `zt_todo` CHANGE `config` `config` VARCHAR(1000) NOT NULL DEFAULT '';
+52 -61
View File
@@ -106,15 +106,6 @@ $config->block->params['project']->orderBy['options'] = $lang->block->orderByLis
$config->block->params['project']->orderBy['control'] = 'picker';
$config->block->params['project']->count = $config->block->params['default']->count;
$config->block->params['projectteam'] = new stdclass();
$config->block->params['projectteam']->type['name'] = $lang->block->type;
$config->block->params['projectteam']->type['options'] = $lang->block->typeList->projectAll;
$config->block->params['projectteam']->type['control'] = 'picker';
$config->block->params['projectteam']->orderBy['name'] = $lang->block->orderBy;
$config->block->params['projectteam']->orderBy['options'] = $lang->block->orderByList->project;
$config->block->params['projectteam']->orderBy['control'] = 'picker';
$config->block->params['projectteam']->count = $config->block->params['default']->count;
$config->block->params['build'] = $config->block->params['default'];
$config->block->params['product'] = new stdclass();
@@ -323,64 +314,64 @@ $config->block->modules['doc']->moreLinkList->docmycollection = 'doc|myspace|typ
$config->block->modules['doc']->moreLinkList->productdoc = 'doc|productspace|';
$config->block->modules['doc']->moreLinkList->projectdoc = 'doc|projectspace|';
$config->block->defaultSize = array('1' => '3');
$config->block->defaultSize = array(1 => 3);
$config->block->size = array();
$config->block->size['product']['list'] = array('2' => '6', '1' => '6');
$config->block->size['product']['story'] = array('2' => '6', '1' => '6');
$config->block->size['product']['plan'] = array('2' => '6', '1' => '6');
$config->block->size['product']['bug'] = array('2' => '6', '1' => '6');
$config->block->size['product']['release'] = array('2' => '6', '1' => '6');
$config->block->size['product']['statistic'] = array('2' => '5', '1' => '11');
$config->block->size['product']['bugstatistic'] = array('2' => '5', '1' => '8');
$config->block->size['product']['monthlyprogress'] = array('2' => '5', '1' => '13');
$config->block->size['product']['annualworkload'] = array('2' => '6', '1' => '13');
$config->block->size['product']['overview'] = array('1' => '3', '3' => '3');
$config->block->size['product']['releasestatistic'] = array('1' => '8', '2' => '5');
$config->block->size['product']['list'] = array(2 => 6, 1 => 6);
$config->block->size['product']['story'] = array(2 => 6, 1 => 6);
$config->block->size['product']['plan'] = array(2 => 6, 1 => 6);
$config->block->size['product']['bug'] = array(2 => 6, 1 => 6);
$config->block->size['product']['release'] = array(2 => 6, 1 => 6);
$config->block->size['product']['statistic'] = array(2 => 5, 1 => 11);
$config->block->size['product']['bugstatistic'] = array(2 => 5, 1 => 8);
$config->block->size['product']['monthlyprogress'] = array(2 => 5, 1 => 13);
$config->block->size['product']['annualworkload'] = array(2 => 6, 1 => 13);
$config->block->size['product']['overview'] = array(1 => 3, 3 => 3);
$config->block->size['product']['releasestatistic'] = array(1 => 8, 2 => 5);
$config->block->size['project']['overview'] = array('1' => '3');
$config->block->size['project']['statistic'] = array('2' => '5', '1' => '8');
$config->block->size['project']['recentproject'] = array('2' => '4', '1' => '4');
$config->block->size['project']['project'] = array('2' => '6', '1' => '6');
$config->block->size['project']['overview'] = array(1 => 3);
$config->block->size['project']['statistic'] = array(2 => 5, 1 => 8);
$config->block->size['project']['recentproject'] = array(2 => 4, 1 => 4);
$config->block->size['project']['project'] = array(2 => 6, 1 => 6);
$config->block->size['scrumproject']['scrumoverview'] = array('2' => '5', '1' => '8');
$config->block->size['scrumproject']['scrumlist'] = array('2' => '6', '1' => '6');
$config->block->size['scrumproject']['scrumtest'] = array('2' => '6', '1' => '6');
$config->block->size['scrumproject']['sprint'] = array('1' => '3');
$config->block->size['scrumproject']['projectdynamic'] = array('1' => '8', '2' => '8');
$config->block->size['scrumproject']['scrumoverview'] = array(2 => 5, 1 => 8);
$config->block->size['scrumproject']['scrumlist'] = array(2 => 6, 1 => 6);
$config->block->size['scrumproject']['scrumtest'] = array(2 => 6, 1 => 6);
$config->block->size['scrumproject']['sprint'] = array(1 => 3);
$config->block->size['scrumproject']['projectdynamic'] = array(1 => 8, 2 => 8);
$config->block->size['execution']['overview'] = array('1' => '3');
$config->block->size['execution']['statistic'] = array('2' => '5', '1' => '8');
$config->block->size['execution']['list'] = array('2' => '6', '1' => '6');
$config->block->size['execution']['task'] = array('2' => '6', '1' => '6');
$config->block->size['execution']['build'] = array('2' => '6', '1' => '6');
$config->block->size['execution']['overview'] = array(1 => 3);
$config->block->size['execution']['statistic'] = array(2 => 5, 1 => 8);
$config->block->size['execution']['list'] = array(2 => 6, 1 => 6);
$config->block->size['execution']['task'] = array(2 => 6, 1 => 6);
$config->block->size['execution']['build'] = array(2 => 6, 1 => 6);
$config->block->size['qa']['statistic'] = array('2' => '5', '1' => '8');
$config->block->size['qa']['testtask'] = array('2' => '6', '1' => '6');
$config->block->size['qa']['bug'] = array('2' => '6', '1' => '6');
$config->block->size['qa']['case'] = array('2' => '6', '1' => '6');
$config->block->size['qa']['statistic'] = array(2 => 5, 1 => 8);
$config->block->size['qa']['testtask'] = array(2 => 6, 1 => 6);
$config->block->size['qa']['bug'] = array(2 => 6, 1 => 6);
$config->block->size['qa']['case'] = array(2 => 6, 1 => 6);
$config->block->size['doc']['docstatistic'] = array('2' => '3', '1' => '3');
$config->block->size['doc']['docmycollection'] = array('2' => '4', '1' => '4');
$config->block->size['doc']['docrecentupdate'] = array('2' => '4', '1' => '4');
$config->block->size['doc']['productdoc'] = array('2' => '6', '1' => '6');
$config->block->size['doc']['projectdoc'] = array('2' => '6', '1' => '6');
$config->block->size['doc']['docdynamic'] = array('1' => '8');
$config->block->size['doc']['docviewlist'] = array('1' => '4');
$config->block->size['doc']['doccollectlist'] = array('1' => '4');
$config->block->size['doc']['docstatistic'] = array(2 => 3, 1 => 3);
$config->block->size['doc']['docmycollection'] = array(2 => 4, 1 => 4);
$config->block->size['doc']['docrecentupdate'] = array(2 => 4, 1 => 4);
$config->block->size['doc']['productdoc'] = array(2 => 6, 1 => 6);
$config->block->size['doc']['projectdoc'] = array(2 => 6, 1 => 6);
$config->block->size['doc']['docdynamic'] = array(1 => 8);
$config->block->size['doc']['docviewlist'] = array(1 => 4);
$config->block->size['doc']['doccollectlist'] = array(1 => 4);
$config->block->size['welcome']['welcome'] = array('2' => '3');
$config->block->size['guide']['guide'] = array('2' => '6');
$config->block->size['assigntome']['assigntome'] = array('2' => '6', '1' => '6');
$config->block->size['dynamic']['dynamic'] = array('1' => '8');
$config->block->size['zentaodynamic']['zentaodynamic'] = array('1' => '4');
$config->block->size['teamachievement']['teamachievement'] = array('1' => '6');
$config->block->size['welcome']['welcome'] = array(2 => 3);
$config->block->size['guide']['guide'] = array(2 => 6);
$config->block->size['assigntome']['assigntome'] = array(2 => 6, 1 => 6);
$config->block->size['dynamic']['dynamic'] = array(1 => 8);
$config->block->size['zentaodynamic']['zentaodynamic'] = array(1 => 4);
$config->block->size['teamachievement']['teamachievement'] = array(1 => 6);
$config->block->size['singleproduct']['singlestatistic'] = array('2' => '5', '1' => '11');
$config->block->size['singleproduct']['singlebugstatistic'] = array('2' => '5', '1' => '8');
$config->block->size['singleproduct']['roadmap'] = array('2' => '6', '1' => '6');
$config->block->size['singleproduct']['singlestory'] = array('2' => '6', '1' => '6');
$config->block->size['singleproduct']['singleplan'] = array('2' => '6', '1' => '6');
$config->block->size['singleproduct']['singlerelease'] = array('2' => '6', '1' => '6');
$config->block->size['singleproduct']['singledynamic'] = array('1' => '8');
$config->block->size['singleproduct']['singlemonthlyprogress'] = array('3' => '5', '1' => '15');
$config->block->size['singleproduct']['singlestatistic'] = array(2 => 5, 1 => 11);
$config->block->size['singleproduct']['singlebugstatistic'] = array(2 => 5, 1 => 8);
$config->block->size['singleproduct']['roadmap'] = array(2 => 6, 1 => 6);
$config->block->size['singleproduct']['singlestory'] = array(2 => 6, 1 => 6);
$config->block->size['singleproduct']['singleplan'] = array(2 => 6, 1 => 6);
$config->block->size['singleproduct']['singlerelease'] = array(2 => 6, 1 => 6);
$config->block->size['singleproduct']['singledynamic'] = array(1 => 8);
$config->block->size['singleproduct']['singlemonthlyprogress'] = array(3 => 5, 1 => 15);
+24 -27
View File
@@ -42,7 +42,7 @@ class block extends control
/* 判断用户是否为首次登录 ,判断条件 当前用户没有该 app 下的区块数据 且 没有设置过该 app 下的区块启用状态 且不是演示模式。 */
if(empty($blocks) && !$isInitiated && !commonModel::isTutorialMode())
{
$this->block->initBlock($dashboard); // 初始化该 app 下区块数据。
$this->blockZen->initBlock($dashboard); // 初始化该 app 下区块数据。
$blocks = $this->block->getMyDashboard($dashboard); // 获取初始化后的区块列表。
}
@@ -148,7 +148,7 @@ class block extends control
$formData->params = json_encode($formData->params);
unset($formData->html);
/* 如果区块没有尺寸的配置项,则使用统一的默认尺寸。 */
/* 根据module和code生成区块的宽度和高度。 */
$defaultSize = $this->config->block->defaultSize; // 默认为区块的统一默认尺寸。
if(!empty($this->config->block->size[$formData->module][$formData->code])) $defaultSize = $this->config->block->size[$formData->module][$formData->code];
if(!empty($this->config->block->size[$formData->module][$formData->code][$formData->width])) $formData->height = $this->config->block->size[$formData->module][$formData->code][$formData->width];
@@ -156,12 +156,14 @@ class block extends control
if(empty($formData->height)) $formData->height = reset($defaultSize);
/* 设置区块距离左侧的宽度和距离顶部的高度。 */
$formData->left = $formData->width == 1 ? '2' : '0';
$formData->left = $formData->width == 1 ? 2 : 0;
$formData->top = $this->block->computeBlockTop($formData);
/* 执行区块的数据插入并且返回数据给view层。 */
$blockID = $this->block->create($formData);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('score')->create('block', 'set');
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'callback' => "loadComponent('#dashboard'); setTimeout(() => $('#dashboard .dashboard-block[data-id=\"$blockID\"]').scrollIntoView({behavior: 'smooth'}), 500);", 'closeModal' => true));
}
@@ -174,14 +176,14 @@ class block extends control
$codes = $this->blockZen->getAvailableCodes($module); // 根据仪表盘和模块获取可用的区块列表。
$params = $this->blockZen->getAvailableParams($module, $code); // 根据所属模块和区块code获取参数配置项列表。
$this->view->title = $this->lang->block->createBlock;
$this->view->dashboard = $dashboard;
$this->view->module = $module;
$this->view->code = $code;
$this->view->modules = $modules;
$this->view->codes = $codes;
$this->view->params = $params;
$this->view->blockTitle = $this->blockZen->getBlockTitle($modules, $module, $codes, $code, $params);
$this->view->title = $this->lang->block->createBlock;
$this->view->dashboard = $dashboard;
$this->view->module = $module;
$this->view->code = $code;
$this->view->modules = $modules;
$this->view->codes = $codes;
$this->view->params = $params;
$this->view->blockTitle = $this->blockZen->getBlockTitle($modules, $module, $codes, $code, $params);
$this->display();
}
@@ -221,6 +223,8 @@ class block extends control
/* 执行区块的数据变更并且返回数据给view层。 */
$this->block->update($formData);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('score')->create('block', 'set');
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'callback' => "$('#dashboard').dashboard('load', '$blockID')", 'closeModal' => true));
}
@@ -232,22 +236,15 @@ class block extends control
$codes = $this->blockZen->getAvailableCodes($module); // 根据所属仪表盘和选中模块获取可选择的区块列表。
$params = $this->blockZen->getAvailableParams($module, $code); // 根据当前选中模块和选中区块code获取参数配置项列表。
$blockSize = !empty($this->config->block->size[$module][$code]) ? $this->config->block->size[$module][$code] : $this->config->block->defaultSize; // 获取当前区块的可选尺寸。
/* 根据区块的可选尺寸生成区块的可选宽度列表。 */
$widthOptions = array();
foreach(array_keys($blockSize) as $width) $widthOptions[$width] = zget($this->lang->block->widthOptions, $width);
$this->view->title = $this->lang->block->editBlock;
$this->view->block = $block;
$this->view->dashboard = $block->dashboard;
$this->view->module = $module;
$this->view->modules = $this->blockZen->getAvailableModules($block->dashboard);
$this->view->codes = $codes;
$this->view->code = in_array($code, array_keys($codes)) ? $code : ''; // 当变更了所属模块(module)后, 判断当前code在是否还包含在codes中,没有的话置空code。
$this->view->params = $params;
$this->view->widthOptions = $widthOptions;
$this->view->blockTitle = $this->blockZen->getBlockTitle($modules, $module, $codes, $code, $params);
$this->view->title = $this->lang->block->editBlock;
$this->view->block = $block;
$this->view->dashboard = $block->dashboard;
$this->view->module = $module;
$this->view->modules = $this->blockZen->getAvailableModules($block->dashboard);
$this->view->codes = $codes;
$this->view->code = in_array($code, array_keys($codes)) ? $code : ''; // 当变更了所属模块(module)后, 判断当前code在是否还包含在codes中,没有的话置空code。
$this->view->params = $params;
$this->view->blockTitle = $this->blockZen->getBlockTitle($modules, $module, $codes, $code, $params);
$this->display();
}
-1
View File
@@ -129,7 +129,6 @@ $lang->block->titleList['assigntome'] = 'Assign to me';
$lang->block->titleList['project'] = "{$lang->projectCommon} List";
$lang->block->titleList['dynamic'] = 'Dynamic';
$lang->block->titleList['list'] = 'Todo List';
$lang->block->titleList['contribute'] = 'Contribute';
$lang->block->titleList['scrumoverview'] = "{$lang->projectCommon} Overview";
$lang->block->titleList['scrumtest'] = 'Scrum Test Request';
$lang->block->titleList['scrumlist'] = 'Scrum List';
-1
View File
@@ -130,7 +130,6 @@ $lang->block->titleList['assigntome'] = 'Assign to me';
$lang->block->titleList['project'] = "{$lang->projectCommon} List";
$lang->block->titleList['dynamic'] = 'Dynamic';
$lang->block->titleList['list'] = 'Todo List';
$lang->block->titleList['contribute'] = 'Contribute';
$lang->block->titleList['scrumoverview'] = "{$lang->projectCommon} Overview";
$lang->block->titleList['scrumtest'] = 'Scrum Test';
$lang->block->titleList['scrumlist'] = 'Scrum List';
-1
View File
@@ -129,7 +129,6 @@ $lang->block->titleList['assigntome'] = 'Assign to me';
$lang->block->titleList['project'] = "{$lang->projectCommon} List";
$lang->block->titleList['dynamic'] = 'Dynamic';
$lang->block->titleList['list'] = 'Todo List';
$lang->block->titleList['contribute'] = 'Contribute';
$lang->block->titleList['scrumoverview'] = "{$lang->projectCommon} Overview";
$lang->block->titleList['scrumtest'] = 'Scrum Test Request';
$lang->block->titleList['scrumlist'] = 'Scrum List';
-1
View File
@@ -130,7 +130,6 @@ $lang->block->titleList['assigntome'] = '待处理';
$lang->block->titleList['project'] = "{$lang->projectCommon}列表";
$lang->block->titleList['dynamic'] = '最新动态';
$lang->block->titleList['list'] = '我的待办';
$lang->block->titleList['contribute'] = '我的贡献';
$lang->block->titleList['scrumoverview'] = "{$lang->projectCommon}总览";
$lang->block->titleList['scrumtest'] = '测试单列表';
$lang->block->titleList['scrumlist'] = '迭代列表';
+15 -68
View File
@@ -43,6 +43,8 @@ class blockModel extends model
*/
public function getByID(int $blockID): object|false
{
if(!$blockID) return false;
$block = $this->dao->select('*')->from(TABLE_BLOCK)->where('id')->eq($blockID)->fetch();
if(empty($block)) return false;
@@ -214,6 +216,8 @@ class blockModel extends model
*/
public function getSpecifiedBlockID(string $dashboard, string $module, string $code): int|false
{
if(!$dashboard || !$module || !$code) return false;
$blockID = $this->dao->select('id')->from(TABLE_BLOCK)
->where('account')->eq($this->app->user->account)
->andWhere('dashboard')->eq($dashboard)
@@ -236,6 +240,8 @@ class blockModel extends model
*/
public function getBlockInitStatus(string $dashboard): bool
{
if(!$dashboard) return false;
$result = $this->dao->select('value')->from(TABLE_CONFIG)
->where('module')->eq($dashboard)
->andWhere('owner')->eq($this->app->user->account)
@@ -247,51 +253,6 @@ class blockModel extends model
return !empty($result);
}
/**
* 初始化用户某个仪表盘下的区块数据。
* Init block when account use first.
*
* @param string $dashboard
* @access public
* @return bool
*/
public function initBlock(string $dashboard): bool
{
if(!$dashboard) return false;
$flow = isset($this->config->global->flow) ? $this->config->global->flow : 'full';
$account = $this->app->user->account;
$vision = $this->config->vision;
$blocks = $dashboard == 'my' ? $this->lang->block->default[$flow][$dashboard] : $this->lang->block->default[$dashboard];
foreach($blocks as $block)
{
$defaultSize = array('1' => '3');
if(!empty($this->config->block->size[$block['module']][$block['code']])) $defaultSize = $this->config->block->size[$block['module']][$block['code']];
if(!empty($this->config->block->size[$block['module']][$block['code']][$block['width']])) $block['height'] = $this->config->block->size[$block['module']][$block['code']][$block['width']];
if(empty($block['width'])) $block['width'] = reset(array_keys($defaultSize));
if(empty($block['height'])) $block['height'] = reset($defaultSize);
$block['account'] = $account;
$block['dashboard'] = $dashboard;
$block['params'] = isset($block['params']) ? helper::jsonEncode($block['params']) : '';
$block['vision'] = $this->config->vision;
$block['left'] = $block['width'] == 1 ? 2 : 0;
$block['top'] = $this->computeBlockTop((object)$block);
$this->blockTao->insert((object)$block);
}
if(dao::isError()) return false;
/* Mark this app has init. */
$this->loadModel('setting')->setItem("$account.$dashboard.common.blockInited@$vision", '1');
$this->loadModel('setting')->setItem("$account.$dashboard.block.initVersion", (string)$this->config->block->version);
return true;
}
/**
* 新增一个区块。
* Create a block.
@@ -302,13 +263,14 @@ class blockModel extends model
*/
public function create(object $formData): int|false
{
$this->blockTao->insert($formData);
$this->dao->insert(TABLE_BLOCK)->data($formData)
->autoCheck()
->batchCheck($this->config->block->create->requiredFields, 'notempty')
->exec();
if(dao::isError()) return false;
$blockID = $this->dao->lastInsertID();
$this->loadModel('score')->create('block', 'set');
return (int)$blockID;
return (int)$this->dao->lastInsertID();
}
/**
@@ -329,8 +291,6 @@ class blockModel extends model
if(dao::isError()) return false;
$this->loadModel('score')->create('block', 'set');
return (int)$formData->id;
}
@@ -344,12 +304,14 @@ class blockModel extends model
*/
public function reset(string $dashboard): bool
{
/* 删除当前仪表盘下该用户的所有区块。 */
$this->dao->delete()->from(TABLE_BLOCK)
->where('dashboard')->eq($dashboard)
->andWhere('vision')->eq($this->config->vision)
->andWhere('account')->eq($this->app->user->account)
->exec();
/* 重置初始化状态为未初始化。 */
$this->dao->delete()->from(TABLE_CONFIG)
->where('module')->eq($dashboard)
->andWhere('vision')->eq($this->config->vision)
@@ -370,6 +332,7 @@ class blockModel extends model
*/
public function deleteBlock(int $blockID = 0, string $module = '', string $code = ''): bool
{
/* 指定BlockID时删除该区块,指定module和code时候会删除所有人的区块。 */
$this->dao->delete()->from(TABLE_BLOCK)
->where('1=1')
->beginIF($blockID)
@@ -386,22 +349,6 @@ class blockModel extends model
return !dao::isError();
}
/**
* 更新区块的排序号。
* Set block order.
*
* @param int $blockID
* @param int $order
* @access public
* @return bool
*/
public function setOrder(int $blockID, int $order): bool
{
$this->dao->update(TABLE_BLOCK)->set('order')->eq($order)->where('id')->eq($blockID)->exec();
return !dao::isError();
}
/**
* 计算区块距离顶部的高度。
* compute block top height.
+1 -19
View File
@@ -18,25 +18,7 @@ class blockTao extends blockModel
->andWhere('dashboard')->eq($dashboard)
->andWhere('hidden')->eq($hidden)
->andWhere('vision')->eq($this->config->vision)
->orderBy('width_desc,top_asc')
->orderBy('width_desc,top_asc,id_asc')
->fetchAll();
}
/**
* 新增一个区块。
* Insert a block data.
*
* @param object $formData
* @access protected
* @return bool
*/
protected function insert(object $formData): bool
{
$this->dao->insert(TABLE_BLOCK)->data($formData)
->autoCheck()
->batchCheck($this->config->block->create->requiredFields, 'notempty')
->exec();
return !dao::isError();
}
}
+2 -2
View File
@@ -34,6 +34,6 @@ initData();
$block = new blockTest();
r($block->checkAPITest('')) && p('') && e('0'); // 测试空哈希值
r($block->checkAPITest('')) && p('') && e('0'); // 测试空哈希值
r($block->checkAPITest('858640a724c2c981983935eb2bbc4ad8')) && p('') && e('1'); // 测试正确的哈希值
r($block->checkAPITest('858640a724c2c98198')) && p('') && e('0'); // 测试错误的哈希值
r($block->checkAPITest('858640a724c2c98198')) && p('') && e('0'); // 测试错误的哈希值
+22 -18
View File
@@ -8,12 +8,11 @@ function initData()
$block = zdTable('block');
$block->id->range('2-5');
$block->account->range('admin');
$block->vision->range('rnd,lite');
$block->dashboard->range('my');
$block->module->range('project');
$block->code->range('list,statistic');
$block->title->prefix('区块名称')->range('2-5');
$block->order->range('1-4');
$block->module->range('welcome,guide,project,project');
$block->code->range('welcome,guide,list,statistic');
$block->title->prefix('区块名称')->range('1-4');
$block->width->range('2,2,1,1');
$block->gen(4);
}
@@ -24,18 +23,23 @@ title=测试 blockModel->getByID();
timeout=0
cid=1
- 测试获取正常的block的内容
- 属性account @admin
- 属性vision @rnd
- 属性dashboard @my
- 属性module @project
- 属性code @list
- 属性title @区块名称2
- 属性order @1
- 测试获取ID为2的block的内容
- 属性account @admin
- 属性dashboard @my
- 属性module @welcome
- 属性code @welcome
- 属性title @区块名称1
- 属性width @2
- 测试获取正常的block的内容属性order @3
- 测试获取ID为3的block的内容
- 属性account @admin
- 属性dashboard @my
- 属性module @guide
- 属性code @guide
- 属性title @区块名称2
- 属性width @2
- 测试获取不存在的block的内容 @0
- 测试获取ID不存在的block的内容 @0
*/
@@ -44,6 +48,6 @@ $tester->loadModel('block');
initData();
r($tester->block->getByID(2)) && p('account,vision,dashboard,module,code,title,order') && e('admin,rnd,my,project,list,区块名称2,1'); // 测试获取正常的block的内容
r($tester->block->getByID(4)) && p('order') && e('3'); // 测试获取正常的block的内容
r($tester->block->getByID(6)) && p('') && e('0'); // 测试获取不存在的block的内容
r($tester->block->getByID(2)) && p('account,dashboard,module,code,title,width') && e('admin,my,welcome,welcome,区块名称1,2'); // 测试获取ID为2的block的内容
r($tester->block->getByID(3)) && p('account,dashboard,module,code,title,width') && e('admin,my,guide,guide,区块名称2,2'); // 测试获取ID为3的block的内容
r($tester->block->getByID(6)) && p('') && e('0'); // 测试获取ID不存在的block的内容
@@ -20,4 +20,4 @@ global $tester;
$tester->loadModel('block');
$data = $tester->block->getClosedBlockPairs('product|list,assigntome|assigntome');
r($data) && p('product|list') && e('产品|产品列表'); //测试获取关闭的区块键值对
r($data) && p('assigntome|assigntome') && e('待处理'); //测试获取关闭的区块键值对
r($data) && p('assigntome|assigntome') && e('待处理'); //测试获取关闭的区块键值对
+8 -8
View File
@@ -17,15 +17,15 @@ set::title($title);
jsVar('dashboard', $dashboard);
jsVar('blockTitle', $lang->block->blockTitle);
$showModules = ($dashboard == 'my' && $modules);
$showCodes = (($showModules && $module && $codes) || $dashboard != 'my');
$code = $showCodes ? $code : $module;
$widths = !empty($config->block->size[$module][$code]) ? array_keys($config->block->size[$module][$code]) : array('1', '2');
$showModules = ($dashboard == 'my' && $modules);
$showCodes = (($showModules && $module && $codes) || $dashboard != 'my');
$code = $showCodes ? $code : $module;
$blockSize = !empty($config->block->size[$module][$code]) ? $config->block->size[$module][$code] : $config->block->defaultSize; // 获取当前区块的可选尺寸。
/* 根据区块的可选尺寸生成区块的可选宽度列表。 */
$widthOptions = array();
foreach($widths as $width) $widthOptions[$width] = zget($lang->block->widthOptions, $width);
$defaultWidth = !empty($config->block->size[$module][$code]) ? reset(array_keys($config->block->size[$module][$code])) : 1;
foreach(array_keys($blockSize) as $width) $widthOptions[$width] = zget($this->lang->block->widthOptions, $width);
$defaultWidth = reset(array_keys($blockSize));
row
(
set::id('blockCreateForm'),
+7 -6
View File
@@ -17,13 +17,14 @@ set::title($title);
jsVar('blockID', $block->id);
jsVar('blockTitle', $lang->block->blockTitle);
$showModules = ($dashboard == 'my' && $modules);
$showCodes = (($showModules && $module && $codes) || $dashboard != 'my');
$code = $showCodes ? $code : $module;
$widths = !empty($config->block->size[$module][$code]) ? array_keys($config->block->size[$module][$code]) : array('1', '2');
$widthOptions = array();
foreach($widths as $width) $widthOptions[$width] = zget($lang->block->widthOptions, $width);
$showModules = ($dashboard == 'my' && $modules);
$showCodes = (($showModules && $module && $codes) || $dashboard != 'my');
$code = $showCodes ? $code : $module;
$blockSize = !empty($config->block->size[$module][$code]) ? $config->block->size[$module][$code] : $config->block->defaultSize; // 获取当前区块的可选尺寸。
/* 根据区块的可选尺寸生成区块的可选宽度列表。 */
$widthOptions = array();
foreach(array_keys($blockSize) as $width) $widthOptions[$width] = zget($this->lang->block->widthOptions, $width);
row
(
setID('blockEditForm'),
@@ -16,7 +16,7 @@ $releaseProgressData = array();
$i = 1;
foreach($releases as $productName => $releaseCount)
{
$progress = $releaseCount / $annualMaxReleases * 100 . '%';
$progress = ($annualMaxReleases ? ($releaseCount / $annualMaxReleases * 100) : 0) . '%';
$nameClass = '';
$labelClass = 'primary';
+55
View File
@@ -1,6 +1,52 @@
<?php
class blockZen extends block
{
/**
* 初始化用户某个仪表盘下的区块数据。
* Init block when account use first.
*
* @param string $dashboard
* @access public
* @return bool
*/
public function initBlock(string $dashboard): bool
{
if(!$dashboard) return false;
$flow = isset($this->config->global->flow) ? $this->config->global->flow : 'full';
$account = $this->app->user->account;
$vision = $this->config->vision;
/* 获取该仪表盘下的初始化默认布局。 */
$blocks = $dashboard == 'my' ? $this->lang->block->default[$flow][$dashboard] : $this->lang->block->default[$dashboard];
foreach($blocks as $block)
{
/* 根据module和code生成区块的宽度和高度。 */
$defaultSize = $this->config->block->defaultSize; // 默认为区块的统一默认尺寸。
if(!empty($this->config->block->size[$block['module']][$block['code']])) $defaultSize = $this->config->block->size[$block['module']][$block['code']];
if(!empty($this->config->block->size[$block['module']][$block['code']][$block['width']])) $block['height'] = $this->config->block->size[$block['module']][$block['code']][$block['width']];
if(empty($block['width'])) $block['width'] = reset(array_keys($defaultSize));
if(empty($block['height'])) $block['height'] = reset($defaultSize);
$block['account'] = $account; // 所属用户。
$block['dashboard'] = $dashboard; // 所属仪表盘。
$block['params'] = isset($block['params']) ? helper::jsonEncode($block['params']) : ''; // 配置项信息。
$block['vision'] = $this->config->vision; // 所属用户界面。
$block['left'] = $block['width'] == 1 ? 2 : 0; // 距左侧宽度。
$block['top'] = $this->block->computeBlockTop((object)$block); // 距顶部高度。
$this->block->create((object)$block);
}
if(dao::isError()) return false;
/* 保存当前区块已经被初始化过的记录。 */
$this->loadModel('setting')->setItem("$account.$dashboard.common.blockInited@$vision", '1');
$this->loadModel('setting')->setItem("$account.$dashboard.block.initVersion", (string)$this->config->block->version);
return true;
}
/**
* 根据仪表盘获取可使用的模块列表。
* Get module options when adding or editing blocks.
@@ -174,6 +220,15 @@ class blockZen extends block
/* 生成更多链接。 */
$this->createMoreLink($block, $projectID);
$defaultSize = $this->config->block->defaultSize; // 默认为区块的统一默认尺寸。
if(!empty($this->config->block->size[$block->module][$block->code])) $defaultSize = $this->config->block->size[$block->module][$block->code];
if(empty($block->width)) $block->width = reset(array_keys($defaultSize));
if(empty($block->height)) $block->height = !empty($this->config->block->size[$block->module][$block->code][$block->width]) ? $this->config->block->size[$block->module][$block->code][$block->width] : reset($defaultSize);
/* 设置区块距离左侧的宽度和距离顶部的高度。 */
$block->left = $block->width == 1 ? 2 : 0;
}
/* 根据每个区块的高度和宽度重新生成各个区块的left和top属性。 */