* Optimize block default height and width.
This commit is contained in:
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'); // 测试错误的哈希值
|
||||
|
||||
@@ -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('待处理'); //测试获取关闭的区块键值对
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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属性。 */
|
||||
|
||||
Reference in New Issue
Block a user