diff --git a/config/filter.php b/config/filter.php index f2f17a2258..62947feb97 100644 --- a/config/filter.php +++ b/config/filter.php @@ -172,20 +172,20 @@ $filter->program->pgmbrowse->cookie['showClosed'] = 'code'; $filter->program->export->cookie['checkedItem'] = 'reg::checked'; $filter->program->ajaxgetpgmdropmenu->cookie['showClosed'] = 'code'; -$filter->project->default->cookie['lastProject'] = 'int'; -$filter->project->default->cookie['lastPRJ'] = 'int'; -$filter->project->default->cookie['projectMode'] = 'code'; -$filter->project->story->cookie['storyModuleParam'] = 'int'; -$filter->project->story->cookie['storyPreProjectID'] = 'int'; -$filter->project->story->cookie['storyProductParam'] = 'int'; -$filter->project->story->cookie['storyBranchParam'] = 'reg::checked'; -$filter->project->story->cookie['projectStoryOrder'] = 'reg::orderBy'; -$filter->project->task->cookie['moduleBrowseParam'] = 'int'; -$filter->project->task->cookie['preProjectID'] = 'int'; -$filter->project->task->cookie['productBrowseParam'] = 'int'; -$filter->project->task->cookie['projectTaskOrder'] = 'reg::orderBy'; -$filter->project->task->cookie['windowWidth'] = 'int'; -$filter->project->export->cookie['checkedItem'] = 'reg::checked'; +$filter->project->default->cookie['lastProject'] = 'int'; +$filter->project->default->cookie['lastPRJ'] = 'int'; +$filter->project->default->cookie['projectMode'] = 'code'; +$filter->project->story->cookie['storyModuleParam'] = 'int'; +$filter->project->story->cookie['storyPreProjectID'] = 'int'; +$filter->project->story->cookie['storyProductParam'] = 'int'; +$filter->project->story->cookie['storyBranchParam'] = 'reg::checked'; +$filter->project->story->cookie['projectStoryOrder'] = 'reg::orderBy'; +$filter->project->task->cookie['moduleBrowseParam'] = 'int'; +$filter->project->task->cookie['preProjectID'] = 'int'; +$filter->project->task->cookie['productBrowseParam'] = 'int'; +$filter->project->task->cookie['projectTaskOrder'] = 'reg::orderBy'; +$filter->project->task->cookie['windowWidth'] = 'int'; +$filter->project->export->cookie['checkedItem'] = 'reg::checked'; $filter->qa->default->cookie['lastProduct'] = 'int'; $filter->qa->default->cookie['preBranch'] = 'int'; diff --git a/db/update15.0.sql b/db/update15.0.sql new file mode 100644 index 0000000000..e85e88b2ba --- /dev/null +++ b/db/update15.0.sql @@ -0,0 +1,522 @@ +ALTER TABLE `zt_project` DROP `isCat`, DROP `catID`; +ALTER TABLE `zt_project` ADD `project` mediumint(8) NOT NULL DEFAULT 0 AFTER `id`; +ALTER TABLE `zt_project` ADD `model` char(30) NOT NULL AFTER `project`; +ALTER TABLE `zt_project` CHANGE `type` `type` char(30) NOT NULL DEFAULT 'sprint' AFTER `model`; +ALTER TABLE `zt_project` CHANGE `acl` `acl` char(30) NOT NULL DEFAULT 'open'; +ALTER TABLE `zt_project` ADD `product` varchar(20) NOT NULL DEFAULT 'single' AFTER `type`; +ALTER TABLE `zt_project` ADD `lifetime` char(30) NOT NULL AFTER `product`; +ALTER TABLE `zt_project` ADD `budget` varchar(30) NOT NULL DEFAULT '0' AFTER `lifetime`; +ALTER TABLE `zt_project` ADD `budgetUnit` char(30) NOT NULL DEFAULT 'CNY' AFTER `budget`; +ALTER TABLE `zt_project` ADD `percent` float unsigned NOT NULL DEFAULT '0' AFTER `budgetUnit`; +ALTER TABLE `zt_project` ADD `path` varchar(255) NOT NULL AFTER `parent`; +ALTER TABLE `zt_project` ADD `grade` tinyint unsigned NOT NULL AFTER `path`; +ALTER TABLE `zt_project` ADD `auth` char(30) NOT NULL AFTER `percent`; +ALTER TABLE `zt_project` ADD `milestone` enum('0','1') NOT NULL default '0' AFTER `percent`; +ALTER TABLE `zt_project` ADD `attribute` varchar(30) NOT NULL DEFAULT '' AFTER `budgetUnit`; +ALTER TABLE `zt_project` ADD `realBegan` date NOT NULL AFTER `end`; +ALTER TABLE `zt_project` ADD `realEnd` date NOT NULL AFTER `realBegan`; +ALTER TABLE `zt_project` ADD `version` smallint(6) NOT NULL AFTER `desc`; +ALTER TABLE `zt_project` ADD `parentVersion` smallint(6) NOT NULL AFTER `version`; +ALTER TABLE `zt_project` ADD `planDuration` int(11) NOT NULL AFTER `parentVersion`; +ALTER TABLE `zt_project` ADD `realDuration` int(11) NOT NULL AFTER `planDuration`; +ALTER TABLE `zt_project` ADD `output` text NOT NULL AFTER `milestone`; + +ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_product` ADD `bind` enum('0','1') NOT NULL DEFAULT '0' AFTER `code`; +ALTER TABLE `zt_task` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_doc` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_story` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_repo` ADD `product` varchar(255) NOT NULL AFTER `id`; +ALTER TABLE `zt_bug` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_case` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_testtask` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_testreport` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_testsuite` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_build` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_release` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; + +ALTER TABLE `zt_group` ADD `PRJ` mediumint NOT NULL AFTER `id`; +INSERT INTO `zt_group` (`name`, `role`, `desc`) VALUES ('项目管理员', 'PRJAdmin', '项目管理员可以维护项目的权限'); + +ALTER TABLE `zt_usergroup` ADD `PRJ` text NOT NULL; + +ALTER TABLE `zt_userview` ADD `programs` mediumtext NOT NULL AFTER `account`; +ALTER TABLE `zt_userview` ADD `sprints` mediumtext NOT NULL AFTER `programs`; + +ALTER TABLE `zt_user` ADD `company` mediumint unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_user` ADD `type` char(30) NOT NULL default 'inside' AFTER `account`; +ALTER TABLE `zt_user` ADD `nature` text NOT NULL AFTER `zipcode`; +ALTER TABLE `zt_user` ADD `analysis` text NOT NULL AFTER `nature`; +ALTER TABLE `zt_user` ADD `strategy` text NOT NULL AFTER `analysis`; +ALTER TABLE `zt_user` CHANGE `avatar` `avatar` text NOT NULL AFTER `commiter`; + +REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system','custom','','hourPoint','1'); +REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'URSR', '3'); +REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'program', '', 'unitList', 'CNY,USD'); +REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'program', '', 'defaultCurrency', 'CNY'); + +ALTER TABLE `zt_config` MODIFY COLUMN `value` longtext NOT NULL AFTER `key`; + +-- DROP TABLE IF EXISTS `zt_stage`; +CREATE TABLE IF NOT EXISTS `zt_stage` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `percent` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_stakeholder`; +CREATE TABLE IF NOT EXISTS `zt_stakeholder` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `objectID` mediumint(8) NOT NULL, + `objectType` char(30) NOT NULL, + `user` char(30) NOT NULL, + `type` char(30) NOT NULL, + `key` enum('0','1') NOT NULL, + `from` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_expect`; +CREATE TABLE IF NOT EXISTS `zt_expect` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `userID` mediumint(8) NOT NULL, + `PRJ` mediumint(8) NOT NULL DEFAULT 0, + `expect` text NOT NULL, + `progress` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0' +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +REPLACE INTO `zt_stage` (`name`,`percent`,`type`,`createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES +('需求','10','request','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('设计','10','design','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('开发','50','dev','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('测试','15','qa','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('发布','10','release','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('总结评审','5','review','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'); + +-- DROP TABLE IF EXISTS `zt_design`; +CREATE TABLE IF NOT EXISTS `zt_design` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `PRJ` varchar(255) NOT NULL, + `product` varchar(255) NOT NULL, + `commit` text NOT NULL, + `commitedBy` varchar(30) NOT NULL, + `project` mediumint(9) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `story` char(30) NOT NULL, + `desc` text NOT NULL, + `version` smallint(6) NOT NULL, + `type` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_designspec` ( + `design` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `files` varchar(255) NOT NULL, + UNIQUE KEY `design` (`design`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_issue`; +CREATE TABLE IF NOT EXISTS `zt_issue` ( + `id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT, + `resolvedBy` varchar(30) NOT NULL, + `PRJ` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `desc` text NOT NULL, + `pri` char(30) NOT NULL, + `severity` char(30) NOT NULL, + `type` char(30) NOT NULL, + `activity` varchar(255) NOT NULL, + `deadline` date NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionComment` text NOT NULL, + `objectID` varchar(255) NOT NULL, + `resolvedDate` date NOT NULL, + `status` varchar(30) NOT NULL, + `owner` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_risk` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `PRJ` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `category` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` char(30) NOT NULL, + `probability` char(30) NOT NULL, + `rate` char(30) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `prevention` text NOT NULL, + `remedy` text NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `resolution` text NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `cancelBy` varchar(30) NOT NULL, + `cancelDate` date NOT NULL, + `cancelReason` char(30) NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` date NOT NULL, + `hangupBy` varchar(30) NOT NULL, + `hangupDate` date NOT NULL, + `trackedBy` varchar(30) NOT NULL, + `trackedDate` date NOT NULL, + `assignedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_projectspec`; +CREATE TABLE IF NOT EXISTS `zt_projectspec` ( + `project` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + UNIQUE KEY `project` (`project`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_budget`; +CREATE TABLE IF NOT EXISTS `zt_budget` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `PRJ` mediumint(8) NOT NULL, + `stage` char(30) NOT NULL, + `subject` mediumint(8) NOT NULL, + `amount` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_durationestimation`; +CREATE TABLE IF NOT EXISTS `zt_durationestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `PRJ` mediumint(8) unsigned NOT NULL, + `stage` mediumint(9) NOT NULL, + `workload` varchar(255) NOT NULL, + `worktimeRate` varchar(255) NOT NULL, + `people` varchar(255) NOT NULL, + `startDate` date NOT NULL, + `endDate` date NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_workestimation`; +CREATE TABLE IF NOT EXISTS `zt_workestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `PRJ` mediumint(8) unsigned NOT NULL, + `scale` decimal(10, 2) unsigned NOT NULL, + `productivity` decimal(10, 2) unsigned NOT NULL, + `duration` decimal(10, 2) unsigned NOT NULL, + `unitLaborCost` decimal(10, 2) unsigned NOT NULL, + `totalLaborCost` decimal(10, 2) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `dayHour` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_holiday` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL DEFAULT '', + `type` enum('holiday', 'working') NOT NULL DEFAULT 'holiday', + `desc` text NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `name` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +ALTER TABLE `zt_task` ADD `design` mediumint(8) unsigned NOT NULL AFTER `module`; +ALTER TABLE `zt_task` ADD `version` smallint(6) NOT NULL AFTER `desc`; +ALTER TABLE `zt_task` ADD `activatedDate` date NOT NULL AFTER `lastEditedDate`; +ALTER TABLE `zt_task` ADD `planDuration` int(11) NOT NULL AFTER `closedDate`; +ALTER TABLE `zt_task` ADD `realDuration` int(11) NOT NULL AFTER `closedDate`; +ALTER TABLE `zt_task` ADD `designVersion` smallint(6) unsigned NOT NULL AFTER `storyVersion`; + +ALTER TABLE `zt_burn` ADD `storyPoint` float NOT NULL AFTER `consumed`; +ALTER TABLE `zt_burn` ADD `product` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `project`; + +-- DROP TABLE IF EXISTS `zt_taskspec`; +CREATE TABLE IF NOT EXISTS `zt_taskspec` ( + `task` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `estStarted` date NOT NULL, + `deadline` date NOT NULL, + UNIQUE KEY `task` (`task`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_weeklyreport`( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `PRJ` mediumint(8) unsigned NOT NULL, + `weekStart` date NOT NULL, + `pv` float(9,2) NOT NULL, + `ev` float(9,2) NOT NULL, + `ac` float(9,2) NOT NULL, + `sv` float(9,2) NOT NULL, + `cv` float(9,2) NOT NULL, + `staff` smallint(5) unsigned NOT NULL, + `progress` varchar(255) NOT NULL, + `workload` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `week` (`PRJ`,`weekStart`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +ALTER TABLE `zt_block` ADD `type` char(30) NOT NULL AFTER `module`; +ALTER TABLE `zt_block` ADD UNIQUE `account_module_type_order` (`account`, `module`, `type`, `order`), DROP INDEX `accountModuleOrder`; + +INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('1', '0', '*', '*', '*', 'moduleName=weekly&methodName=computeWeekly', '更新项目周报', 'system', 0, 'normal', '2020-08-27 10:07:53'); + +ALTER TABLE `zt_story` ADD `URChanged` enum('0','1') NOT NULL DEFAULT '0' AFTER `version`; + +ALTER TABLE `zt_team` MODIFY `type` enum('project','task','stage','sprint') NOT NULL DEFAULT 'project' AFTER `root`; + +CREATE TABLE IF NOT EXISTS `zt_planstory` ( + `plan` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL, + `order` mediumint(9) NOT NULL, + UNIQUE KEY `unique` (`plan`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_acl` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL DEFAULT '0', + `type` char(40) NOT NULL DEFAULT 'whitelist', + `source` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_searchindex`; +CREATE TABLE IF NOT EXISTS `zt_searchindex` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` char(20) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `title` text NOT NULL, + `content` text NOT NULL, + `addedDate` datetime NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `object` (`objectType`,`objectID`), + KEY `addedDate` (`addedDate`), + FULLTEXT KEY `content` (`content`), + FULLTEXT KEY `title` (`title`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- DROP TABLE IF EXISTS `zt_searchdict`; +CREATE TABLE IF NOT EXISTS `zt_searchdict` ( + `key` smallint(5) unsigned NOT NULL, + `value` char(3) NOT NULL, + PRIMARY KEY (`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES +(1, 'product', 'dashboard'), +(1, 'projectstory', 'story'), +(1, 'projectstory', 'track'), +(1, 'projectstory', 'view'), +(1, 'projectstory', 'linkStory'), +(1, 'projectstory', 'unLinkStory'), +(1, 'my', 'preference'), +(1, 'my', 'uploadAvatar'), +(1, 'user', 'execution'), +(1, 'user', 'issue'), +(1, 'user', 'risk'), +(1, 'user', 'cropAvatar'), +(1, 'program', 'PRJView'), +(1, 'search', 'index'), +(1, 'search', 'buildIndex'), +(2, 'product', 'dashboard'), +(2, 'projectstory', 'story'), +(2, 'projectstory', 'track'), +(2, 'projectstory', 'view'), +(2, 'my', 'preference'), +(2, 'my', 'uploadAvatar'), +(2, 'user', 'execution'), +(2, 'user', 'issue'), +(2, 'user', 'risk'), +(2, 'user', 'cropAvatar'), +(2, 'search', 'index'), +(3, 'product', 'dashboard'), +(3, 'projectstory', 'story'), +(3, 'projectstory', 'track'), +(3, 'projectstory', 'view'), +(3, 'my', 'preference'), +(3, 'my', 'uploadAvatar'), +(3, 'user', 'execution'), +(3, 'user', 'issue'), +(3, 'user', 'risk'), +(3, 'user', 'cropAvatar'), +(3, 'search', 'index'), +(4, 'product', 'dashboard'), +(4, 'projectstory', 'story'), +(4, 'projectstory', 'track'), +(4, 'projectstory', 'view'), +(4, 'my', 'preference'), +(4, 'my', 'uploadAvatar'), +(4, 'user', 'execution'), +(4, 'user', 'issue'), +(4, 'user', 'risk'), +(4, 'user', 'cropAvatar'), +(4, 'program', 'PRJView'), +(4, 'search', 'index'), +(5, 'product', 'dashboard'), +(5, 'projectstory', 'story'), +(5, 'projectstory', 'track'), +(5, 'projectstory', 'view'), +(5, 'projectstory', 'linkStory'), +(5, 'projectstory', 'unLinkStory'), +(5, 'my', 'preference'), +(5, 'my', 'uploadAvatar'), +(5, 'user', 'execution'), +(5, 'user', 'issue'), +(5, 'user', 'risk'), +(5, 'user', 'cropAvatar'), +(5, 'program', 'PRJView'), +(5, 'search', 'index'), +(6, 'product', 'dashboard'), +(6, 'projectstory', 'story'), +(6, 'projectstory', 'track'), +(6, 'projectstory', 'view'), +(6, 'my', 'preference'), +(6, 'my', 'uploadAvatar'), +(6, 'user', 'execution'), +(6, 'user', 'issue'), +(6, 'user', 'risk'), +(6, 'user', 'cropAvatar'), +(6, 'program', 'PRJView'), +(6, 'search', 'index'), +(7, 'product', 'dashboard'), +(7, 'projectstory', 'story'), +(7, 'projectstory', 'track'), +(7, 'projectstory', 'view'), +(7, 'projectstory', 'linkStory'), +(7, 'projectstory', 'unLinkStory'), +(7, 'my', 'preference'), +(7, 'my', 'uploadAvatar'), +(7, 'user', 'execution'), +(7, 'user', 'issue'), +(7, 'user', 'risk'), +(7, 'user', 'cropAvatar'), +(7, 'program', 'PRJView'), +(7, 'search', 'index'), +(8, 'product', 'dashboard'), +(8, 'projectstory', 'story'), +(8, 'projectstory', 'track'), +(8, 'projectstory', 'view'), +(8, 'my', 'preference'), +(8, 'my', 'uploadAvatar'), +(8, 'user', 'execution'), +(8, 'user', 'issue'), +(8, 'user', 'risk'), +(8, 'user', 'cropAvatar'), +(8, 'program', 'PRJView'), +(8, 'search', 'index'), +(9, 'product', 'dashboard'), +(9, 'projectstory', 'story'), +(9, 'projectstory', 'track'), +(9, 'projectstory', 'view'), +(9, 'projectstory', 'linkStory'), +(9, 'projectstory', 'unLinkStory'), +(9, 'my', 'preference'), +(9, 'my', 'uploadAvatar'), +(9, 'user', 'execution'), +(9, 'user', 'issue'), +(9, 'user', 'risk'), +(9, 'user', 'cropAvatar'), +(9, 'program', 'PRJView'), +(9, 'search', 'index'), +(10, 'product', 'dashboard'), +(10, 'projectstory', 'story'), +(10, 'projectstory', 'track'), +(10, 'projectstory', 'view'), +(10, 'my', 'preference'), +(10, 'my', 'uploadAvatar'), +(10, 'user', 'execution'), +(10, 'user', 'issue'), +(10, 'user', 'risk'), +(10, 'user', 'cropAvatar'), +(10, 'search', 'index'), +(11, 'product', 'dashboard'), +(11, 'projectstory', 'story'), +(11, 'projectstory', 'track'), +(11, 'projectstory', 'view'), +(11, 'my', 'preference'), +(11, 'my', 'uploadAvatar'), +(11, 'user', 'execution'), +(11, 'user', 'issue'), +(11, 'user', 'risk'), +(11, 'user', 'cropAvatar'); + +INSERT INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) VALUES +('zh-cn', 'custom', 'URSRList', '1', '{\"SRName\":\"\\u7814\\u53d1\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'),('zh-cn', 'custom', 'URSRList', '2', '{\"SRName\":\"\\u8f6f\\u9700\",\"URName\":\"\\u7528\\u9700\"}', '1'), +('zh-cn', 'custom', 'URSRList', '3', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u9700\\u6c42\"}', '1'), +('zh-cn', 'custom', 'URSRList', '4', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u53f2\\u8bd7\"}', '1'); diff --git a/db/zentao.sql b/db/zentao.sql index c18fcfaa03..386d90271f 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1733,6 +1733,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1,'program','PRJStart'), (1,'program','PRJSuspend'), (1,'program','PRJView'), +(1,'program','PRJUpdateOrder'), (1,'program','PRJWhitelist'), (1,'program','unbindWhielist'), (1,'program','unlinkStakeholder'), @@ -2539,6 +2540,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (4,'program','PRJProgramTitle'), (4,'program','PRJStart'), (4,'program','PRJSuspend'), +(4,'program','PRJUpdateOrder'), (4,'program','PRJView'), (4,'program','PRJWhitelist'), (4,'program','unbindWhielist'), @@ -2845,6 +2847,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (5,'program','PRJStart'), (5,'program','PRJSuspend'), (5,'program','PRJView'), +(5,'program','PRJUpdateOrder'), (5,'program','PRJWhitelist'), (5,'program','unbindWhielist'), (5,'program','unlinkStakeholder'), @@ -3138,6 +3141,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (6,'program','PRJStart'), (6,'program','PRJSuspend'), (6,'program','PRJView'), +(6,'program','PRJUpdateOrder'), (6,'program','PRJWhitelist'), (6,'program','unbindWhielist'), (6,'program','unlinkStakeholder'), @@ -3424,6 +3428,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7,'program','PRJStart'), (7,'program','PRJSuspend'), (7,'program','PRJView'), +(7,'program','PRJUpdateOrder'), (7,'program','PRJWhitelist'), (7,'program','unbindWhielist'), (7,'program','unlinkStakeholder'), @@ -3692,6 +3697,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8,'program','PRJStart'), (8,'program','PRJSuspend'), (8,'program','PRJView'), +(8,'program','PRJUpdateOrder'), (8,'program','PRJWhitelist'), (8,'program','unbindWhielist'), (8,'program','unlinkStakeholder'), @@ -3970,6 +3976,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (9,'program','PRJStart'), (9,'program','PRJSuspend'), (9,'program','PRJView'), +(9,'program','PRJUpdateOrder'), (9,'program','PRJWhitelist'), (9,'program','unbindWhielist'), (9,'program','unlinkStakeholder'), @@ -4323,7 +4330,7 @@ INSERT INTO `zt_stage` (`name`,`percent`,`type`,`createdBy`,`createdDate`,`edite ('总结评审','5','review','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'); INSERT INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) VALUES -('zh-cn', 'custom', 'URSRList', '1', '{\"SRName\":\"\\u8f6f\\u4ef6\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'), +('zh-cn', 'custom', 'URSRList', '1', '{\"SRName\":\"\\u7814\\u53d1\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'), ('zh-cn', 'custom', 'URSRList', '2', '{\"SRName\":\"\\u8f6f\\u9700\",\"URName\":\"\\u7528\\u9700\"}', '1'), ('zh-cn', 'custom', 'URSRList', '3', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u9700\\u6c42\"}', '1'), ('zh-cn', 'custom', 'URSRList', '4', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u53f2\\u8bd7\"}', '1'); diff --git a/module/action/model.php b/module/action/model.php index 9f8b0779bb..8062c46551 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -662,6 +662,19 @@ class actionModel extends model if($this->app->user->admin) $condition = 1; } + /* If is project, select its related. */ + $executions = array(); + $products = array(); + if(is_numeric($projectID)) + { + $project = $this->loadModel('program')->getPRJByID($projectID); + if($project->type == 'project') + { + $executions = $this->loadModel('project')->getExecutionPairs($projectID); + $products = $this->loadModel('product')->getProductPairsByProject($projectID); + } + } + $this->loadModel('doc'); $libs = $this->doc->getLibs('all'); $docs = $this->doc->getPrivDocs(array_keys($libs), 0, 'all'); @@ -677,6 +690,8 @@ class actionModel extends model ->beginIF($account != 'all')->andWhere('actor')->eq($account)->fi() ->beginIF(is_numeric($productID))->andWhere('product')->like("%,$productID,%")->fi() ->beginIF(is_numeric($projectID))->andWhere('project')->eq($projectID)->fi() + ->beginIF(!empty($executions))->markLeft()->orWhere('project')->in(array_keys($executions))->fi()->markRight() + ->beginIF(!empty($products))->markLeft()->orWhere('product')->in(array_keys($products))->fi()->markRight() ->beginIF($productID == 'notzero')->andWhere('product')->gt(0)->andWhere('product')->notlike('%,0,%')->fi() ->beginIF($projectID == 'notzero')->andWhere('project')->gt(0)->fi() ->beginIF($projectID == 'all' or $productID == 'all')->andWhere("IF((objectType!= 'doc' && objectType!= 'doclib'), ($condition), '1=1')")->fi() diff --git a/module/block/control.php b/module/block/control.php index 073c6f835b..7522f3e703 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -1315,7 +1315,7 @@ class block extends control $count = isset($this->params->count) ? (int)$this->params->count : 15; $type = isset($this->params->type) ? $this->params->type : 'all'; $pager = pager::init(0, $count, 1); - $this->view->executionStats = $this->loadModel('project')->getExecutionStats($this->session->PRJ, $type, 0, 0, 30, 'id_asc', $pager); + $this->view->executionStats = $this->loadModel('project')->getExecutionStats($this->session->PRJ, $type, 0, 0, 30, 'id_desc', $pager); } /** diff --git a/module/bug/css/edit.css b/module/bug/css/edit.css index 581c88c64e..fe1b116189 100644 --- a/module/bug/css/edit.css +++ b/module/bug/css/edit.css @@ -4,3 +4,4 @@ .col-side .chosen-container[id^="resolvedBuild"] {width: 172px!important} .chosen-choices li.search-choice{word-break: break-all;} #linkBugBox > li {margin-left:-56px} +#branch{width: 95px;} diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php index 4015f40ad6..6ca237a0d3 100644 --- a/module/bug/view/edit.html.php +++ b/module/bug/view/edit.html.php @@ -90,7 +90,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
- session->currentProductType != 'normal') echo html::select('branch', $branches, $bug->branch, "onchange='loadBranch();' class='form-control' style='width:65px'");?> + session->currentProductType != 'normal') echo html::select('branch', $branches, $bug->branch, "onchange='loadBranch();' class='form-control'");?>
diff --git a/module/common/lang/de.php b/module/common/lang/de.php index aa018429a3..e2630d2fb2 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -183,14 +183,14 @@ $lang->product->menu->list = array('link' => $lang->productCommon . '|product|al $lang->product->viewMenu = new stdclass(); $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; +$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit'); $lang->product->setMenu = new stdclass(); @@ -342,7 +342,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Übersicht|product|view|p $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',plan,project,'; +$lang->product->dividerMenu = ',plan,project,dashboard,'; $lang->story = new stdclass(); diff --git a/module/common/lang/en.php b/module/common/lang/en.php index a712f2b8a3..6d13a2e0df 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -183,14 +183,14 @@ $lang->product->menu->list = array('link' => $lang->productCommon . '|product|al $lang->product->viewMenu = new stdclass(); $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; +$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit'); $lang->product->setMenu = new stdclass(); @@ -342,7 +342,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|pro $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',plan,project,'; +$lang->product->dividerMenu = ',plan,project,dashboard,'; $lang->story = new stdclass(); diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 4056c3feb5..66b4482308 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -183,14 +183,14 @@ $lang->product->menu->list = array('link' => $lang->productCommon . '|product|al $lang->product->viewMenu = new stdclass(); $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; +$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit'); $lang->product->setMenu = new stdclass(); @@ -342,7 +342,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|pro $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',plan,project,'; +$lang->product->dividerMenu = ',plan,project,dashboard,'; $lang->story = new stdclass(); diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index e9cd26b6f2..077e65b72b 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -56,14 +56,14 @@ $lang->todo->menuOrder = $lang->my->menuOrder; /* product menu order. */ $lang->product->menuOrder[5] = 'requirement'; $lang->product->menuOrder[10] = 'story'; -$lang->product->menuOrder[15] = 'track'; -$lang->product->menuOrder[20] = 'plan'; -$lang->product->menuOrder[25] = 'release'; -$lang->product->menuOrder[30] = 'roadmap'; -$lang->product->menuOrder[35] = 'project'; +$lang->product->menuOrder[15] = 'plan'; +$lang->product->menuOrder[20] = 'release'; +$lang->product->menuOrder[25] = 'roadmap'; +$lang->product->menuOrder[30] = 'project'; +$lang->product->menuOrder[35] = 'track'; $lang->product->menuOrder[40] = 'doc'; -$lang->product->menuOrder[45] = 'dynamic'; -$lang->product->menuOrder[50] = 'dashboard'; +$lang->product->menuOrder[45] = 'dashboard'; +$lang->product->menuOrder[50] = 'dynamic'; $lang->product->menuOrder[55] = 'setting'; $lang->product->menuOrder[60] = 'create'; $lang->product->menuOrder[65] = 'all'; diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php index 3c951da3ab..28a7fdebab 100644 --- a/module/common/lang/vi.php +++ b/module/common/lang/vi.php @@ -183,14 +183,14 @@ $lang->product->menu->list = array('link' => $lang->productCommon . '|product|al $lang->product->viewMenu = new stdclass(); $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; +$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit'); $lang->product->setMenu = new stdclass(); @@ -342,7 +342,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|pro $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',plan,project,'; +$lang->product->dividerMenu = ',plan,project,dashboard,'; $lang->story = new stdclass(); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a29e9c3d4c..fd28e82e0b 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -183,14 +183,14 @@ $lang->product->menu->list = array('link' => $lang->productCommon . '|product|al $lang->product->viewMenu = new stdclass(); $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->viewMenu->track = array('link' => "矩阵|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "计划|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release'); $lang->product->viewMenu->roadmap = '路线图|product|roadmap|productID=%s'; $lang->product->viewMenu->project = "项目|product|project|status=all&productID=%s"; +$lang->product->viewMenu->track = array('link' => "矩阵|story|track|productID=%s"); $lang->product->viewMenu->doc = array('link' => '文档|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->dynamic = '动态|product|dynamic|productID=%s'; $lang->product->viewMenu->dashboard = array('link' => '仪表盘|product|dashboard|productID=%s'); +$lang->product->viewMenu->dynamic = '动态|product|dynamic|productID=%s'; $lang->product->viewMenu->set = array('link' => '设置|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit'); $lang->product->setMenu = new stdclass(); @@ -342,7 +342,7 @@ $lang->scrumproduct->menu->view = array('link' => '概况|product|view|produc $lang->scrumproduct->menu->requirement = array('link' => "{$lang->URCommon}|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "{$lang->SRCommon}|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',plan,project,'; +$lang->product->dividerMenu = ',plan,project,dashboard,'; $lang->story = new stdclass(); diff --git a/module/common/view/datatable.html.php b/module/common/view/datatable.html.php index 65b513da25..9de1d6f468 100644 --- a/module/common/view/datatable.html.php +++ b/module/common/view/datatable.html.php @@ -22,7 +22,7 @@ .datatable .flexarea tbody>tr.checked>td:first-child:before, .datatable .fixed-right tbody>tr.checked>td:first-child:before {display: none} .datatable>.scroll-wrapper {z-index: 10;} -.has-fixed-footer .scroll-wrapper {bottom: 89px; position: fixed;} +.has-fixed-footer .scroll-wrapper {bottom: 49px; position: fixed;} .has-fixed-footer .scroll-wrapper .scroll-slide.scroll-pos-out{height:8px;bottom: -8px;} .has-fixed-footer .scroll-wrapper .scroll-slide.scroll-pos-out .bar{height:8px;} .datatable .flexarea thead>tr>th:first-child, diff --git a/module/company/control.php b/module/company/control.php index bdad408e0a..949d37cc4b 100644 --- a/module/company/control.php +++ b/module/company/control.php @@ -89,6 +89,22 @@ class company extends control $this->view->param = $param; $this->view->type = $type; $this->view->browseType = $browseType; + $this->view->companies = $this->company->getOutsideCompanies(); + + $this->display(); + } + + public function create() + { + if(!empty($_POST)) + { + $this->company->create(); + if(dao::isError()) die(js::error(dao::getError())); + die(js::reload('parent.parent')); + } + + $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->company->create; + $this->view->position = $this->lang->company->create; $this->display(); } @@ -259,4 +275,16 @@ class company extends control $this->view->direction = $direction; $this->display(); } + + /** + * Ajax get outside company. + * + * @access public + * @return void + */ + public function ajaxGetOutsideCompany() + { + $companies = $this->company->getOutsideCompanies(); + die(html::select('company', $companies, '', "class='form-control chosen'")); + } } diff --git a/module/company/lang/de.php b/module/company/lang/de.php index 1323c82882..826c3e6908 100644 --- a/module/company/lang/de.php +++ b/module/company/lang/de.php @@ -11,6 +11,7 @@ */ $lang->company->common = 'Unternehmen'; $lang->company->index = "Start"; +$lang->company->create = "Add Company"; $lang->company->edit = "Bearbeiten"; $lang->company->view = "Unternehmensinfo"; $lang->company->browse = "Benutzerliste"; diff --git a/module/company/lang/en.php b/module/company/lang/en.php index 2d63e793bf..616de0bb1e 100644 --- a/module/company/lang/en.php +++ b/module/company/lang/en.php @@ -11,6 +11,7 @@ */ $lang->company->common = 'Company'; $lang->company->index = "Company Home"; +$lang->company->create = "Add Company"; $lang->company->edit = "Edit Company"; $lang->company->view = "Company Information"; $lang->company->browse = "User List"; diff --git a/module/company/lang/fr.php b/module/company/lang/fr.php index d5a78211f1..7a9441fc3e 100644 --- a/module/company/lang/fr.php +++ b/module/company/lang/fr.php @@ -11,6 +11,7 @@ */ $lang->company->common = 'Entreprise'; $lang->company->index = "Accueil Entreprise"; +$lang->company->create = "Add Company"; $lang->company->edit = "Edit Entreprise"; $lang->company->view = "Informations Entreprise"; $lang->company->browse = "Liste Utilisateurs"; diff --git a/module/company/lang/vi.php b/module/company/lang/vi.php index b13554d51a..db6f502da6 100644 --- a/module/company/lang/vi.php +++ b/module/company/lang/vi.php @@ -11,6 +11,7 @@ */ $lang->company->common = 'Doanh nghiệp'; $lang->company->index = "Trang doanh nghiệp"; +$lang->company->create = "Add Company"; $lang->company->edit = "Sửa doanh nghiệp"; $lang->company->view = "Thông tin doanh nghiệp"; $lang->company->browse = "Danh sách người dùng"; diff --git a/module/company/lang/zh-cn.php b/module/company/lang/zh-cn.php index 1719897844..c7071e5bff 100644 --- a/module/company/lang/zh-cn.php +++ b/module/company/lang/zh-cn.php @@ -11,6 +11,7 @@ */ $lang->company->common = '组织视图'; $lang->company->index = "组织视图首页"; +$lang->company->create = "添加公司"; $lang->company->edit = "编辑公司"; $lang->company->view = "公司信息"; $lang->company->browse = "用户列表"; diff --git a/module/company/lang/zh-tw.php b/module/company/lang/zh-tw.php index 0086ab0d10..bc8bc62ecb 100644 --- a/module/company/lang/zh-tw.php +++ b/module/company/lang/zh-tw.php @@ -11,6 +11,7 @@ */ $lang->company->common = '組織視圖'; $lang->company->index = "組織視圖首頁"; +$lang->company->create = "添加公司"; $lang->company->edit = "編輯公司"; $lang->company->view = "公司信息"; $lang->company->browse = "用戶列表"; diff --git a/module/company/view/browse.html.php b/module/company/view/browse.html.php index 95e4f1e7e2..68d7de4ca1 100644 --- a/module/company/view/browse.html.php +++ b/module/company/view/browse.html.php @@ -72,7 +72,11 @@ js::set('confirmDelete', $lang->user->confirmDelete); user->realname);?> user->account);?> + user->role);?> + + user->company);?> + user->email);?> user->gender);?> user->phone);?> @@ -94,7 +98,11 @@ js::set('confirmDelete', $lang->user->confirmDelete); realname;?> account;?> + '>user->roleList, $user->role, '');?> + + '>company, '');?> + email);?> user->genderList, $user->gender, $user->gender);?> phone;?> diff --git a/module/custom/control.php b/module/custom/control.php index d29fdfb878..414aecfdfd 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -505,17 +505,9 @@ class custom extends control else { $lang = $this->app->getClientLang(); - $this->dao->delete()->from(TABLE_LANG) - ->where('lang')->eq($lang) - ->andWhere('section')->eq('URSRList') - ->andWhere('`key`')->eq($key) - ->exec(); - - $defaultConcept = $this->dao->select('`value`')->from(TABLE_CONFIG) - ->where('module')->eq('custom') - ->andWhere('`key`')->eq('URSR') - ->fetch('value'); + $this->custom->deleteItems("lang=$lang§ion=URSRList&key=$key"); + $defaultConcept = $this->loadModel('setting')->getItem('owner=system&module=custom&key=URSR'); $this->dao->update(TABLE_CONFIG) ->set('`value`')->eq($defaultConcept) ->where('module')->eq('common') @@ -523,16 +515,6 @@ class custom extends control ->andWhere('`value`')->eq($key) ->exec(); - /* Stay default concept. */ - if($defaultConcept == $key) - { - $this->dao->update(TABLE_CONFIG) - ->set('`value`')->eq(1) - ->where('module')->eq('custom') - ->andWhere('`key`')->eq('URSR') - ->exec(); - } - die(js::locate(inlink('browseStoryConcept'), 'parent')); } } diff --git a/module/dept/model.php b/module/dept/model.php index c9abd3057b..7d5af90737 100644 --- a/module/dept/model.php +++ b/module/dept/model.php @@ -384,7 +384,7 @@ class deptModel extends model * Get user pairs of a department. * * @param int $deptID - * @param string $params + * @param string $params userid|outside|all * @access public * @return array */ @@ -392,9 +392,11 @@ class deptModel extends model { $childDepts = $this->getAllChildID($deptID); $keyField = strpos($params, 'useid') !== false ? 'id' : 'account'; + $type = (strpos($params, 'outside') !== false) ? 'outside' : 'inside'; return $this->dao->select("$keyField, realname")->from(TABLE_USER) ->where('deleted')->eq(0) + ->beginIF(strpos($params, 'all') === false)->andWhere('type')->eq($type)->fi() ->beginIF($deptID)->andWhere('dept')->in($childDepts)->fi() ->orderBy('account') ->fetchPairs(); diff --git a/module/index/css/index.css b/module/index/css/index.css index a2e7e20609..359a4665a0 100644 --- a/module/index/css/index.css +++ b/module/index/css/index.css @@ -24,11 +24,11 @@ body.menu-hide {padding-left: 0;} .menu-hide #menu .nav > li > a > .text {display: none} .menu-hide #menu .nav > li.has-avatar > a {padding: 2px 0;} -#moreExecution {display:none; max-height: 520px; min-height: 520px; max-width:260px; min-width: 150px; position: fixed; bottom: 40px; z-index: 999; background: white; padding: 20px 10px; border: 1px solid #efefef} +#moreExecution {display:none; max-height: 520px; min-height: 520px; max-width:360px; min-width: 150px; position: fixed; bottom: 40px; z-index: 999; background: white; padding: 20px 10px; border: 1px solid #efefef} .more-execution-show {left: 96px;} .more-execution-hide {left: 40px;} #moreExecution .icon-search {opacity: 0.5;} -#executionList {max-height: 450px; min-height: 450px; max-width:260px; min-width: 150px; margin-top: 5px;} +#executionList {max-height: 450px; min-height: 450px; max-width:360px; min-width: 150px; margin-top: 5px;} @media screen and (max-height: 768px) { diff --git a/module/misc/control.php b/module/misc/control.php index 93cab219cf..49734fcea7 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -227,6 +227,9 @@ class misc extends control */ public function captcha($sessionVar = 'captcha', $uuid = '') { + $obLevel = ob_get_level(); + for($i = 0; $i < $obLevel; $i++) ob_end_clean(); + header('Content-Type: image/jpeg'); $captcha = $this->app->loadClass('captcha'); $this->session->set($sessionVar, $captcha->getPhrase()); diff --git a/module/my/view/project.html.php b/module/my/view/project.html.php index fb0881cab1..5298fb3f86 100644 --- a/module/my/view/project.html.php +++ b/module/my/view/project.html.php @@ -43,7 +43,7 @@ program->begin;?> program->end;?> - program->PRJBudget;?> + program->PRJBudget;?> program->PRJPM;?> actions;?> @@ -60,7 +60,8 @@ begin;?> end == '0000-00-00' ? '' : $project->end;?> - budget != 0 ? zget($lang->program->currencySymbol, $project->budgetUnit) . number_format($project->budget, 2) : $lang->program->future;?> + app->getClientLang(), ['zh-cn','zh-tw']) && $project->budget >= 10000 ? number_format($project->budget / 10000, 1) . $this->lang->program->tenThousand : number_format($project->budget, 1);?> + budget != 0 ? zget($lang->program->currencySymbol, $project->budgetUnit) . ' ' . $programBudget : $lang->program->future;?> PM]) ? $PMList[$project->PM]->id : ''?> PM)) echo html::a($this->createLink('user', 'profile', "userID=$userID", '', true), zget($users, $project->PM), '', "data-toggle='modal' data-type='iframe' data-width='600'");?> diff --git a/module/personnel/lang/de.php b/module/personnel/lang/de.php index 37e5aa2514..ab1aa7622b 100644 --- a/module/personnel/lang/de.php +++ b/module/personnel/lang/de.php @@ -27,8 +27,8 @@ $lang->personnel->created = 'Created'; $lang->personnel->finished = 'Finished'; $lang->personnel->wait = 'Pending'; $lang->personnel->resolved = 'Resolved'; -$lang->personnel->UR = 'UR'; -$lang->personnel->SR = 'SR'; +$lang->personnel->UR = $lang->URCommon; +$lang->personnel->SR = $lang->SRCommon; $lang->personnel->whitelist = 'Whitelist'; $lang->personnel->addWhitelist = 'Add Whitelist'; diff --git a/module/personnel/lang/en.php b/module/personnel/lang/en.php index 37e5aa2514..ab1aa7622b 100644 --- a/module/personnel/lang/en.php +++ b/module/personnel/lang/en.php @@ -27,8 +27,8 @@ $lang->personnel->created = 'Created'; $lang->personnel->finished = 'Finished'; $lang->personnel->wait = 'Pending'; $lang->personnel->resolved = 'Resolved'; -$lang->personnel->UR = 'UR'; -$lang->personnel->SR = 'SR'; +$lang->personnel->UR = $lang->URCommon; +$lang->personnel->SR = $lang->SRCommon; $lang->personnel->whitelist = 'Whitelist'; $lang->personnel->addWhitelist = 'Add Whitelist'; diff --git a/module/personnel/lang/fr.php b/module/personnel/lang/fr.php index 37e5aa2514..ab1aa7622b 100644 --- a/module/personnel/lang/fr.php +++ b/module/personnel/lang/fr.php @@ -27,8 +27,8 @@ $lang->personnel->created = 'Created'; $lang->personnel->finished = 'Finished'; $lang->personnel->wait = 'Pending'; $lang->personnel->resolved = 'Resolved'; -$lang->personnel->UR = 'UR'; -$lang->personnel->SR = 'SR'; +$lang->personnel->UR = $lang->URCommon; +$lang->personnel->SR = $lang->SRCommon; $lang->personnel->whitelist = 'Whitelist'; $lang->personnel->addWhitelist = 'Add Whitelist'; diff --git a/module/personnel/lang/vi.php b/module/personnel/lang/vi.php index 37e5aa2514..ab1aa7622b 100644 --- a/module/personnel/lang/vi.php +++ b/module/personnel/lang/vi.php @@ -27,8 +27,8 @@ $lang->personnel->created = 'Created'; $lang->personnel->finished = 'Finished'; $lang->personnel->wait = 'Pending'; $lang->personnel->resolved = 'Resolved'; -$lang->personnel->UR = 'UR'; -$lang->personnel->SR = 'SR'; +$lang->personnel->UR = $lang->URCommon; +$lang->personnel->SR = $lang->SRCommon; $lang->personnel->whitelist = 'Whitelist'; $lang->personnel->addWhitelist = 'Add Whitelist'; diff --git a/module/personnel/lang/zh-cn.php b/module/personnel/lang/zh-cn.php index 48ebe0644c..f02ff646d5 100644 --- a/module/personnel/lang/zh-cn.php +++ b/module/personnel/lang/zh-cn.php @@ -27,8 +27,8 @@ $lang->personnel->created = '创建'; $lang->personnel->finished = '完成'; $lang->personnel->wait = '待处理'; $lang->personnel->resolved = '解决'; -$lang->personnel->UR = '用需'; -$lang->personnel->SR = '软需'; +$lang->personnel->UR = $lang->URCommon; +$lang->personnel->SR = $lang->SRCommon; $lang->personnel->whitelist = '白名单列表'; $lang->personnel->addWhitelist = '添加白名单'; diff --git a/module/personnel/lang/zh-tw.php b/module/personnel/lang/zh-tw.php index 878229faa4..3c39ea8872 100644 --- a/module/personnel/lang/zh-tw.php +++ b/module/personnel/lang/zh-tw.php @@ -27,8 +27,8 @@ $lang->personnel->created = '創建'; $lang->personnel->finished = '完成'; $lang->personnel->wait = '待處理'; $lang->personnel->resolved = '解決'; -$lang->personnel->UR = '用需'; -$lang->personnel->SR = '軟需'; +$lang->personnel->UR = $lang->URCommon; +$lang->personnel->SR = $lang->SRCommon; $lang->personnel->whitelist = '白名單列表'; $lang->personnel->addWhitelist = '添加白名單'; diff --git a/module/product/control.php b/module/product/control.php index c1ffb3d55d..514ab2d502 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -79,7 +79,7 @@ class product extends control public function project($status = 'all', $productID = 0, $branch = 0, $PRJMine = 0) { $this->product->setMenu($this->products, $productID, $branch); - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $this->app->loadLang('my'); @@ -117,10 +117,11 @@ class product extends control * @param int $recTotal * @param int $recPerPage * @param int $pageID + * @param string $from product|project * @access public * @return void */ - public function browse($productID = 0, $branch = 0, $browseType = '', $param = 0, $storyType = 'story', $orderBy = '', $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function browse($productID = 0, $branch = 0, $browseType = '', $param = 0, $storyType = 'story', $orderBy = '', $recTotal = 0, $recPerPage = 20, $pageID = 1, $from = 'product') { /* Lower browse type. */ $browseType = strtolower($browseType); @@ -273,6 +274,7 @@ class product extends control $this->view->products = $this->products; $this->view->projectProducts = isset($projectProducts) ? $projectProducts : array(); $this->view->storyType = $storyType; + $this->view->from = $from; $this->display(); } @@ -353,7 +355,7 @@ class product extends control /* Set menu. */ $this->app->loadLang('custom'); $this->lang->product->menu = $this->lang->product->viewMenu; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); @@ -618,7 +620,7 @@ class product extends control $moduleIndex = array_search('product', $this->lang->noMenuModule); if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); $this->lang->product->menu = $this->lang->product->viewMenu; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $product->desc = $this->loadModel('file')->setImgSize($product->desc); @@ -677,7 +679,7 @@ class product extends control public function roadmap($productID, $branch = 0) { $this->lang->product->menu = $this->lang->product->viewMenu; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', $branch); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $this->product->setMenu($this->products, $productID, $branch); @@ -750,7 +752,7 @@ class product extends control $this->view->position[] = html::a($this->createLink($this->moduleName, 'browse'), $this->products[$productID]); $this->view->position[] = $this->lang->product->dynamic; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, $type); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID, $type); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $this->view->userIdPairs = $this->loadModel('user')->getPairs('noletter|nodeleted|noclosed|useid'); @@ -783,7 +785,7 @@ class product extends control if(!$product) die(js::locate('product', 'all')); $this->lang->product->menu = $this->lang->product->viewMenu; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $product->desc = $this->loadModel('file')->setImgSize($product->desc); @@ -885,14 +887,15 @@ class product extends control $inProduct = zget($this->lang->navGroup, $module) == 'product'; $products = $inProduct ? $this->product->getList() : $this->product->getProductsByProject($this->session->PRJ); - $this->view->link = $this->product->getProductLink($module, $method, $extra); - $this->view->productID = $productID; - $this->view->module = $module; - $this->view->method = $method; - $this->view->extra = $extra; - $this->view->products = $products; - $this->view->projectID = $this->session->PRJ; - $this->view->programs = $this->loadModel('program')->getPGMOption(); + $this->view->link = $this->product->getProductLink($module, $method, $extra); + $this->view->productID = $productID; + $this->view->module = $module; + $this->view->method = $method; + $this->view->extra = $extra; + $this->view->products = $products; + $this->view->projectID = $this->session->PRJ; + $this->view->programs = $this->loadModel('program')->getPGMOption(); + $this->view->openModule = $inProduct ? 'product' : 'project'; $this->display(); } @@ -963,7 +966,7 @@ class product extends control */ public function all($browseType = 'noclosed', $orderBy = 'order_asc') { - $this->lang->product->mainMenuAction = html::a('javascript:history.go(-1);', ' ' . $this->lang->goback, '', "class='btn btn-link'"); + if($this->session->moreProductLink) $this->lang->product->mainMenuAction = html::a($this->session->moreProductLink, ' ' . $this->lang->goback, '', "class='btn btn-link'"); /* Load module and set session. */ $this->loadModel('program'); @@ -1007,7 +1010,7 @@ class product extends control public function whitelist($productID = 0, $module = 'product', $objectType = 'product', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { $this->lang->product->menu = $this->lang->product->viewMenu; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', 0); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', 0); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $this->product->setMenu($this->products, $productID, 0); $this->lang->modulePageNav = ''; @@ -1026,8 +1029,8 @@ class product extends control */ public function addWhitelist($productID = 0, $deptID = 0, $branch = '') { - $this->lang->product->menu = $this->lang->product->viewMenu; - $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', $branch); + $this->lang->product->menu = $this->lang->product->viewMenu; + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); $this->product->setMenu($this->products, $productID, $branch); $moduleIndex = array_search('product', $this->lang->noMenuModule); diff --git a/module/product/model.php b/module/product/model.php index 63b4988cf9..1544094cb4 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -440,6 +440,7 @@ class productModel extends model { $currentModule = $this->app->moduleName; $currentMethod = $this->app->methodName; + $this->session->set('moreProductLink', $this->app->getURI(true)); $this->loadModel('project'); $currentProductName = $this->lang->product->common; diff --git a/module/product/view/ajaxgetdropmenu.html.php b/module/product/view/ajaxgetdropmenu.html.php index 984bd1f8db..b5fa80fce9 100644 --- a/module/product/view/ajaxgetdropmenu.html.php +++ b/module/product/view/ajaxgetdropmenu.html.php @@ -7,6 +7,7 @@ $iCharges = 0; $others = 0; $closeds = 0; $productNames = array(); + foreach($products as $product) { if($product->status == 'normal' and $product->PO == $this->app->user->account) $iCharges++; @@ -26,19 +27,19 @@ foreach($products as $product) { $objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id; $linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $product->id); - $myProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "class='text-important' title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='product'"); + $myProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "class='text-important' title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openModule'"); } else if($product->status == 'normal' and !($product->PO == $this->app->user->account)) { $objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id; $linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $product->id); - $normalProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='product'"); + $normalProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openModule'"); } else if($product->status == 'closed') { $objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id; $linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $objectID); - $closedProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' class='closed' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='product'"); + $closedProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' class='closed' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openModule'"); } } ?> diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index b22687ffe2..e5ffdbb7c4 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -23,10 +23,15 @@ $unfoldStories = zget($unfoldStories, $productID, array()); js::set('unfoldStories', $unfoldStories); js::set('unfoldAll', $lang->project->treeLevel['all']); js::set('foldAll', $lang->project->treeLevel['root']); -js::set('storyType', $storyType); +js::set('storyType', $storyType); $lang->story->createCommon = $storyType == 'story' ? $lang->story->createStory : $lang->story->createRequirement; +$isProjectStroy = $this->app->rawModule == 'projectstory'; ?> +