Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
+355
@@ -0,0 +1,355 @@
|
||||
SET NAMES utf8;
|
||||
SET time_zone = '+00:00';
|
||||
SET foreign_key_checks = 0;
|
||||
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
|
||||
INSERT INTO `zt_action` (`id`, `objectType`, `objectID`, `product`, `project`, `actor`, `action`, `date`, `comment`, `extra`, `read`) VALUES
|
||||
(1, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-11 18:52:19', '', '', '0'),
|
||||
(2, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 14:43:47', '', '', '0'),
|
||||
(3, 'user', 2, ',0,', 0, 'thePO', 'login', '2017-12-12 14:43:59', '', '', '0'),
|
||||
(4, 'product', 1, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:44:57', '', '', '0'),
|
||||
(5, 'productplan', 1, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:48:38', '', '', '0'),
|
||||
(6, 'productplan', 2, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:49:38', '', '', '0'),
|
||||
(7, 'productplan', 2, ',1,', 0, 'thePO', 'edited', '2017-12-12 14:50:13', '', '', '0'),
|
||||
(8, 'productplan', 1, ',1,', 0, 'thePO', 'edited', '2017-12-12 14:51:01', '', '', '0'),
|
||||
(9, 'story', 1, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(10, 'story', 2, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(11, 'story', 3, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(12, 'story', 4, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(13, 'story', 5, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(14, 'story', 6, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(15, 'story', 7, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(16, 'story', 8, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(17, 'project', 1, ',1,', 1, 'thePO', 'opened', '2017-12-12 15:01:14', '', '', '0'),
|
||||
(18, 'story', 3, ',1,', 1, 'thePO', 'linked2project', '2017-12-12 15:02:18', '', '1', '0'),
|
||||
(19, 'story', 2, ',1,', 1, 'thePO', 'linked2project', '2017-12-12 15:02:18', '', '1', '0'),
|
||||
(20, 'story', 1, ',1,', 1, 'thePO', 'linked2project', '2017-12-12 15:02:18', '', '1', '0'),
|
||||
(21, 'user', 2, ',0,', 0, 'thePO', 'logout', '2017-12-12 15:02:58', '', '', '0'),
|
||||
(22, 'user', 3, ',0,', 0, 'pm1', 'login', '2017-12-12 15:03:09', '', '', '0'),
|
||||
(23, 'task', 1, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(24, 'task', 2, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(25, 'task', 3, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(26, 'task', 4, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(27, 'task', 1, ',1,', 1, 'pm1', 'started', '2017-12-12 15:12:17', 'Start tp design and develop', '', '0'),
|
||||
(28, 'task', 1, ',1,', 1, 'pm1', 'recordestimate', '2017-12-12 15:13:13', 'Finish UI design', '8', '0'),
|
||||
(29, 'task', 2, ',1,', 1, 'pm1', 'started', '2017-12-12 15:13:25', 'Start<br />', '', '0'),
|
||||
(30, 'task', 3, ',1,', 1, 'pm1', 'started', '2017-12-12 15:14:25', '', '', '0'),
|
||||
(31, 'task', 3, ',1,', 1, 'pm1', 'recordestimate', '2017-12-12 15:14:47', 'Finish', '60', '0'),
|
||||
(32, 'user', 3, ',0,', 0, 'pm1', 'logout', '2017-12-12 15:18:46', '', '', '0'),
|
||||
(33, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-12 15:18:58', '', '', '0'),
|
||||
(34, 'user', 10, ',0,', 0, 'admin', 'deleted', '2017-12-12 15:20:05', '', '1', '0'),
|
||||
(35, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 15:22:11', '', '', '0'),
|
||||
(36, 'user', 12, ',0,', 0, 'theQS', 'login', '2017-12-12 15:22:36', '', '', '0'),
|
||||
(37, 'user', 12, ',0,', 0, 'theQS', 'logout', '2017-12-12 15:22:48', '', '', '0'),
|
||||
(38, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-12 15:23:02', '', '', '0'),
|
||||
(39, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 15:23:27', '', '', '0'),
|
||||
(40, 'user', 11, ',0,', 0, 'qa1', 'login', '2017-12-12 15:23:34', '', '', '0'),
|
||||
(41, 'build', 1, ',1,', 1, 'qa1', 'opened', '2017-12-12 15:25:13', '', '', '0'),
|
||||
(42, 'bug', 1, ',1,', 1, 'qa1', 'opened', '2017-12-12 15:27:56', '', '', '0'),
|
||||
(43, 'bug', 2, ',1,', 1, 'qa1', 'opened', '2017-12-12 15:30:32', '', '', '0'),
|
||||
(44, 'user', 11, ',0,', 0, 'qa1', 'logout', '2017-12-12 15:32:26', '', '', '0'),
|
||||
(45, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-12 15:32:41', '', '', '0'),
|
||||
(46, 'project', 1, ',1,', 1, 'admin', 'started', '2017-12-12 15:32:54', '', '', '0'),
|
||||
(47, 'product', 2, ',2,', 0, 'admin', 'opened', '2017-12-12 23:28:29', '', '', '0'),
|
||||
(48, 'productplan', 3, ',2,', 0, 'admin', 'opened', '2017-12-12 23:31:59', '', '', '0'),
|
||||
(49, 'productplan', 4, ',2,', 0, 'admin', 'opened', '2017-12-12 23:32:30', '', '', '0'),
|
||||
(50, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 23:33:01', '', '', '0'),
|
||||
(51, 'user', 2, ',0,', 0, 'thePO', 'login', '2017-12-12 23:33:10', '', '', '0'),
|
||||
(52, 'story', 9, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(53, 'story', 10, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(54, 'story', 11, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(55, 'story', 12, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(56, 'story', 13, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(57, 'story', 14, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(58, 'story', 15, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(59, 'user', 2, ',0,', 0, 'thePO', 'logout', '2017-12-12 23:41:48', '', '', '0'),
|
||||
(60, 'user', 3, ',0,', 0, 'pm1', 'login', '2017-12-12 23:41:58', '', '', '0'),
|
||||
(61, 'project', 2, ',,', 2, 'pm1', 'opened', '2017-12-12 23:42:53', '', '', '0'),
|
||||
(62, 'story', 14, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(63, 'story', 13, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(64, 'story', 12, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(65, 'story', 11, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(66, 'story', 10, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(67, 'story', 9, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(68, 'task', 5, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(69, 'task', 6, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(70, 'task', 7, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(71, 'task', 8, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(72, 'task', 9, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(73, 'task', 10, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(74, 'task', 8, ',2,', 2, 'pm1', 'started', '2017-12-12 23:45:36', '', '', '0'),
|
||||
(75, 'task', 7, ',2,', 2, 'pm1', 'recordestimate', '2017-12-12 23:45:53', '', '8', '0'),
|
||||
(76, 'user', 3, ',0,', 0, 'pm1', 'logout', '2017-12-12 23:46:28', '', '', '0'),
|
||||
(77, 'user', 5, ',0,', 0, 'pg1', 'login', '2017-12-12 23:46:35', '', '', '0'),
|
||||
(78, 'task', 9, ',2,', 2, 'pg1', 'started', '2017-12-12 23:46:58', '', '', '0'),
|
||||
(79, 'task', 5, ',2,', 2, 'pg1', 'started', '2017-12-12 23:47:03', '', '', '0'),
|
||||
(80, 'task', 5, ',2,', 2, 'pg1', 'finished', '2017-12-12 23:47:37', 'Finished general setup at backend', '', '0'),
|
||||
(81, 'user', 5, ',0,', 0, 'pg1', 'logout', '2017-12-12 23:48:31', '', '', '0'),
|
||||
(82, 'user', 7, ',0,', 0, 'pg3', 'login', '2017-12-12 23:48:39', '', '', '0'),
|
||||
(83, 'build', 2, ',2,', 2, 'pg3', 'opened', '2017-12-12 23:49:31', '', '', '0'),
|
||||
(84, 'task', 9, ',2,', 2, 'pg3', 'recordestimate', '2017-12-12 23:51:14', 'Finished page design.', '8', '0'),
|
||||
(85, 'user', 7, ',0,', 0, 'pg3', 'logout', '2017-12-12 23:52:27', '', '', '0'),
|
||||
(86, 'user', 2, ',0,', 0, 'thePO', 'login', '2017-12-12 23:52:30', '', '', '0'),
|
||||
(87, 'story', 10, ',2,', 2, 'thePO', 'edited', '2017-12-12 23:52:40', '', '', '0'),
|
||||
(88, 'story', 11, ',2,', 2, 'thePO', 'edited', '2017-12-12 23:53:04', '', '', '0'),
|
||||
(89, 'project', 2, ',2,', 2, 'thePO', 'started', '2017-12-12 23:54:13', '', '', '0'),
|
||||
(90, 'user', 2, ',0,', 0, 'thePO', 'logout', '2017-12-12 23:55:42', '', '', '0'),
|
||||
(91, 'user', 7, ',0,', 0, 'pg3', 'login', '2017-12-12 23:55:49', '', '', '0'),
|
||||
(92, 'testtask', 1, ',2,', 2, 'pg3', 'opened', '2017-12-12 23:56:59', '', '', '0'),
|
||||
(93, 'user', 7, ',0,', 0, 'pg3', 'logout', '2017-12-12 23:57:22', '', '', '0'),
|
||||
(94, 'user', 11, ',0,', 0, 'qa1', 'login', '2017-12-12 23:57:33', '', '', '0'),
|
||||
(95, 'case', 1, ',2,', 0, 'qa1', 'opened', '2017-12-13 00:00:29', '', '', '0'),
|
||||
(96, 'case', 2, ',2,', 0, 'qa1', 'opened', '2017-12-13 00:04:09', '', '', '0'),
|
||||
(97, 'testsuite', 1, ',0,', 0, 'qa1', 'opened', '2017-12-13 00:05:13', '', '', '0'),
|
||||
(98, 'bug', 3, ',2,', 2, 'qa1', 'opened', '2017-12-13 00:09:48', '', '', '0'),
|
||||
(99, 'case', 3, ',2,', 0, 'qa1', 'opened', '2017-12-13 00:13:25', '', '', '0'),
|
||||
(100, 'case', 2, ',2,', 0, 'qa1', 'edited', '2017-12-13 00:18:17', '', '', '0'),
|
||||
(101, 'bug', 4, ',2,', 2, 'qa1', 'opened', '2017-12-13 00:30:07', '', '', '0'),
|
||||
(102, 'bug', 4, ',2,', 2, 'qa1', 'edited', '2017-12-13 00:30:41', '', '', '0'),
|
||||
(103, 'bug', 3, ',2,', 2, 'qa1', 'edited', '2017-12-13 00:31:10', '', '', '0'),
|
||||
(104, 'bug', 5, ',2,', 2, 'qa1', 'opened', '2017-12-13 00:32:08', '', '', '0'),
|
||||
(105, 'user', 11, ',0,', 0, 'qa1', 'logout', '2017-12-13 00:34:34', '', '', '0');
|
||||
|
||||
INSERT INTO `zt_bug` (`id`, `product`, `branch`, `module`, `project`, `plan`, `story`, `storyVersion`, `task`, `toTask`, `toStory`, `title`, `keywords`, `severity`, `pri`, `type`, `os`, `browser`, `hardware`, `found`, `steps`, `status`, `color`, `confirmed`, `activatedCount`, `activatedDate`, `mailto`, `openedBy`, `openedDate`, `openedBuild`, `assignedTo`, `assignedDate`, `deadline`, `resolvedBy`, `resolution`, `resolvedBuild`, `resolvedDate`, `closedBy`, `closedDate`, `duplicateBug`, `linkBug`, `case`, `caseVersion`, `result`, `testtask`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES
|
||||
(1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 'Switch desktops three time, then the order of desktops is different from that before.', '', 3, 0, 'codeerror', 'all', '', '', '', '<p>[Steps]Switch desktops three times.</p>\r\n<p>[Results]The order of desktops is different from that was before.</p>\r\n<p>[Expectations]The order of desktops is the same as that was before.</p>', 'active', '', 0, 0, '0000-00-00 00:00:00', ',pm1', 'qa1', '2017-12-12 15:27:55', '1', 'pm1', '2017-12-12 15:27:55', '2017-12-16', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '0'),
|
||||
(2, 1, 0, 2, 1, 0, 0, 1, 0, 0, 0, 'Full text retrieval in Word files. If Chinese characters exist in the file, it cannot be retrieved.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]Enter “禅道(ZenTao)” in a Word and serach “禅道”.</p>\r\n<p>[Results] “禅道” is not found.</p>\r\n<p>[Expectations] “禅道” is found.</p>', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'qa1', '2017-12-12 15:30:32', '1', 'pm1', '2017-12-12 15:30:32', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '0'),
|
||||
(3, 2, 0, 8, 2, 0, 10, 1, 0, 0, 0, '400 page is incomplete.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]</p>\r\n1. Click “400 page”<br /><p>[Results]</p>\r\n1. Not all 400 page is displayed.<br /><p>[Expectations]</p>\r\n1. List all 400 error pages.<br />', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'qa1', '2017-12-13 00:09:48', '2', '', '0000-00-00 00:00:00', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 2, 1, 1, 1, 'qa1', '2017-12-13 00:31:10', '0'),
|
||||
(4, 2, 0, 8, 2, 0, 10, 1, 0, 0, 0, 'Generate sitemap.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]</p>\r\n1. Click “Generate sitemap”.<br /><p>[Results]</p>\r\n1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>\r\n1. Generate sitemap.<br />', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'qa1', '2017-12-13 00:30:07', '2', '', '0000-00-00 00:00:00', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 2, 2, 0, 0, 'qa1', '2017-12-13 00:30:41', '0'),
|
||||
(5, 2, 0, 8, 2, 0, 10, 1, 0, 0, 0, 'Database error in adding blogroll.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]</p>\r\n1. Add ”www.zentao.pm\"<br /><p>[Results]</p>\r\n1. It cannot be added, and database error prompts.<br /><p>[Expectations]</p>1. In database form ‘friend link’, add ”www.zentao.pm\"<br />', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'qa1', '2017-12-13 00:32:08', '2', '', '0000-00-00 00:00:00', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 2, 2, 0, 0, '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
INSERT INTO `zt_build` (`id`, `product`, `branch`, `project`, `name`, `scmPath`, `filePath`, `date`, `stories`, `bugs`, `builder`, `desc`, `deleted`) VALUES
|
||||
(1, 1, 0, 1, 'win10 V1.0build1', '', '', '2017-12-12', '', '', 'qa1', '', '0'),
|
||||
(2, 2, 0, 2, 'blog v0.1', '', '', '2017-12-12', '', '', 'pg3', 'build for inner test<br />', '0');
|
||||
|
||||
INSERT INTO `zt_burn` (`project`, `date`, `estimate`, `left`, `consumed`) VALUES
|
||||
(1, '2017-12-12', 280, 184, 68);
|
||||
|
||||
INSERT INTO `zt_case` (`id`, `product`, `branch`, `lib`, `module`, `path`, `story`, `storyVersion`, `title`, `precondition`, `keywords`, `pri`, `type`, `stage`, `howRun`, `scriptedBy`, `scriptedDate`, `scriptStatus`, `scriptLocation`, `status`, `color`, `frequency`, `order`, `openedBy`, `openedDate`, `reviewedBy`, `reviewedDate`, `lastEditedBy`, `lastEditedDate`, `version`, `linkCase`, `fromBug`, `fromCaseID`, `deleted`, `lastRunner`, `lastRunDate`, `lastRunResult`) VALUES
|
||||
(1, 2, 0, 0, 8, 0, 11, 1, 'Cache setup test', '', '', 3, 'feature', ',unittest,feature', '', '', '0000-00-00', '', '', 'normal', '', '1', 0, 'qa1', '2017-12-13 00:00:29', '', '0000-00-00', '', '0000-00-00 00:00:00', 1, '', 0, 0, '0', 'qa1', '2017-12-13 00:10:24', 'pass'),
|
||||
(2, 2, 0, 0, 8, 0, 10, 1, 'SEO setup test', '', '', 2, 'feature', ',feature', '', '', '0000-00-00', '', '', 'normal', '', '1', 0, 'qa1', '2017-12-13 00:04:09', '', '0000-00-00', 'qa1', '2017-12-13 00:18:17', 2, '', 0, 0, '0', 'qa1', '2017-12-13 00:23:48', 'fail'),
|
||||
(3, 2, 0, 0, 8, 0, 0, 1, 'general setup test', '', '', 3, 'feature', '', '', '', '0000-00-00', '', '', 'normal', '', '1', 0, 'qa1', '2017-12-13 00:13:25', '', '0000-00-00', '', '0000-00-00 00:00:00', 1, '', 0, 0, '0', '', '0000-00-00 00:00:00', '');
|
||||
|
||||
INSERT INTO `zt_casestep` (`id`, `parent`, `case`, `version`, `type`, `desc`, `expect`) VALUES
|
||||
(1, 0, 1, 1, 'step', 'Switch on cache.', 'Cache is on.'),
|
||||
(2, 0, 1, 1, 'step', 'Switch off cache.', 'Cache is off.'),
|
||||
(3, 0, 2, 1, 'step', 'Click “Generate sitemap”', 'Sitemap is generated.'),
|
||||
(4, 0, 2, 1, 'step', 'Click “400 page”', 'List all 400 error pages'),
|
||||
(5, 0, 2, 1, 'step', 'Set “Individual Blog” as global keyword.', 'Set “Individual Blog” as site keyword.'),
|
||||
(6, 0, 3, 1, 'step', 'Set self introduction as “Self Intro ABC"', 'Self introduction is set as “Self Intro ABC"'),
|
||||
(7, 0, 2, 2, 'step', 'Click “Generate sitemap”', 'Sitemap is generated.'),
|
||||
(8, 0, 2, 2, 'step', 'Click “400 page”', 'List all 400 error pages'),
|
||||
(9, 0, 2, 2, 'step', 'Set “Individual Blog” as global keyword.”', 'Set “Individual Blog” as site keyword.”'),
|
||||
(10, 0, 2, 2, 'step', 'Add ”www.zentao.pm"', 'In database form ‘friend link’, add ”www.zentao.pm"');
|
||||
|
||||
INSERT INTO `zt_dept` (`id`, `name`, `parent`, `path`, `grade`, `order`, `position`, `function`, `manager`) VALUES
|
||||
(1, 'Product Dept', 0, ',1,', 1, 10, '', '', ''),
|
||||
(2, 'Dev Dept', 0, ',2,', 1, 20, '', '', ''),
|
||||
(3, 'QA Dept', 0, ',3,', 1, 30, '', '', ''),
|
||||
(4, 'Ops Dept', 0, ',4,', 1, 40, '', '', ''),
|
||||
(5, 'Dev 1', 2, ',2,5,', 2, 10, '', '', ''),
|
||||
(6, 'Dev 2', 2, ',2,6,', 2, 20, '', '', '');
|
||||
|
||||
INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `groups`, `users`, `main`, `order`, `deleted`) VALUES
|
||||
(1, 1, 0, 'Product Main Library', 'open', '', '', '1', 0, '0'),
|
||||
(2, 0, 1, 'Project Main Library', 'open', '', '', '1', 0, '0'),
|
||||
(3, 2, 0, 'Product Main Library', 'open', '', '', '1', 0, '0'),
|
||||
(4, 0, 2, 'Project Main Library', 'open', '', '', '1', 0, '0');
|
||||
|
||||
INSERT INTO `zt_history` (`id`, `action`, `field`, `old`, `new`, `diff`) VALUES
|
||||
(1, 7, 'desc', 'Finish developing system drive program.', 'Add advanced features such as remote desktop.', '001- <del>Finish developing system drive program.</del>\n001+ <ins>Add advanced features such as remote desktop.</ins>'),
|
||||
(2, 8, 'desc', 'Finish developing general features.<br />', 'Finish developing general features for users.<br />', '001- <del>Finish developing features that are often used.<br /></del>\n001+ <ins>Finish developing general features for users.<br /></ins>'),
|
||||
(3, 27, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(4, 27, 'assignedTo', 'pg2', 'pm1', ''),
|
||||
(5, 27, 'status', 'wait', 'doing', ''),
|
||||
(6, 28, 'left', '100', '64', ''),
|
||||
(7, 28, 'consumed', '0', '8', ''),
|
||||
(8, 29, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(9, 29, 'assignedTo', 'pg2', 'pm1', ''),
|
||||
(10, 29, 'status', 'wait', 'doing', ''),
|
||||
(11, 30, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(12, 30, 'assignedTo', 'pg3', 'pm1', ''),
|
||||
(13, 30, 'status', 'wait', 'doing', ''),
|
||||
(14, 31, 'left', '60', '0', ''),
|
||||
(15, 31, 'consumed', '0', '60', ''),
|
||||
(16, 31, 'status', 'doing', 'done', ''),
|
||||
(17, 46, 'status', 'wait', 'doing', ''),
|
||||
(18, 74, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(19, 74, 'status', 'wait', 'doing', ''),
|
||||
(20, 75, 'left', '30', '55', ''),
|
||||
(21, 75, 'consumed', '0', '8', ''),
|
||||
(22, 75, 'status', 'wait', 'doing', ''),
|
||||
(23, 78, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(24, 78, 'status', 'wait', 'doing', ''),
|
||||
(25, 79, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(26, 79, 'status', 'wait', 'doing', ''),
|
||||
(27, 80, 'consumed', '0', '30', ''),
|
||||
(28, 80, 'assignedTo', 'pg1', 'pm1', ''),
|
||||
(29, 80, 'finishedDate', '', '2017-12-12 23:47:37', ''),
|
||||
(30, 80, 'left', '40', '0', ''),
|
||||
(31, 80, 'status', 'doing', 'done', ''),
|
||||
(32, 80, 'finishedBy', '', 'pg1', ''),
|
||||
(33, 84, 'left', '60', '50', ''),
|
||||
(34, 84, 'consumed', '0', '8', ''),
|
||||
(35, 87, 'pri', '3', '2', ''),
|
||||
(36, 88, 'pri', '3', '1', ''),
|
||||
(37, 89, 'status', 'wait', 'doing', ''),
|
||||
(38, 100, 'version', '1', '2', ''),
|
||||
(39, 100, 'steps', 'Click “Generate sitemap” EXPECT: Sitemap is generated.\nClick “400 page” EXPECT: List all 400 error pages.\nSet “Individual Blog” as global keyword. EXPECT: Set “Individual Blog” as site keyword.\n', 'Click “Generate sitemap” EXPECT: Sitemap is generated.\nClick “400 page” EXPECT: List all 400 error pages.\nSet “Individual Blog” as global keyword. EXPECT: Set “Individual Blog” as site keyword.\nAdd ”www.zentao.pm" EXPECT:In database form ‘friend link’, add ”www.zentao.pmww.zentao.pm"\n', '004+ <ins> Add ”www.zentao.pm" EXPECT:In database form ‘friend link’, add ”www.zentao.pmww.zentao.pm"</ins>'),
|
||||
(40, 102, 'title', 'SEO setup test', 'Generate sitemap', '001- <del>SEO setup test</del>\n001+ <ins>Generate sitemap</ins>'),
|
||||
(41, 102, 'steps', '<p>[Steps]</p>\r\n1. Click “Generate sitemap”<br /><p>[Results]</p>\r\n1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>1. Generate sitemap<br />', '<p>[Steps]</p>\r\n1. Click “Generate sitemap”<br /><p>[Results]</p>\r\n1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>\r\n1. Generate sitemap<br />', '003- <del>1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>1. Generate sitemap<br /></del>\n003+ <ins>1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p></ins>\n004+ <ins>1. Generate sitemap<br /></ins>'),
|
||||
(42, 102, 'resolvedDate', '0000-00-00 00:00:00', '', ''),
|
||||
(43, 103, 'title', 'SEO setup test', '400 page is incomplete.', '001- <del>SEO setup test</del>\n001+ <ins>400 page is incomplete.</ins>'),
|
||||
(44, 103, 'steps', '<p>[Steps]</p>\r\n1. Click “400 page”<br /><p>[Results]</p>\r\n1. Not all 400 page is displayed.<br /><p>[Expectations]</p>1. List all 400 error pages.<br />', '<p>[Steps]</p>\r\n1. Click “400 page”<br /><p>[Results]</p>\r\n1. Not all 400 page is displayed.<br /><p>[Expectations]</p>\r\n1. List all 400 error pages.<br />', '003- <del>1. Not all 400 page is displayed.<br /><p>[Expectations]</p>1. List all 400 error pages.<br /></del>\n003+ <ins>1. Not all 400 page is displayed.<br /><p>[Expectations]</p></ins>\n004+ <ins>1. List all 400 error pages.<br /></ins>'),
|
||||
(45, 103, 'resolvedDate', '0000-00-00 00:00:00', '', '');
|
||||
|
||||
INSERT INTO `zt_module` (`id`, `root`, `branch`, `name`, `parent`, `path`, `grade`, `order`, `type`, `owner`, `short`, `deleted`) VALUES
|
||||
(1, 1, 0, 'Desktop', 0, ',1,', 1, 10, 'story', '', '', '0'),
|
||||
(2, 1, 0, 'My Doc', 0, ',2,', 1, 20, 'story', '', '', '0'),
|
||||
(3, 1, 0, 'Control Panel', 0, ',3,', 1, 30, 'story', '', '', '0'),
|
||||
(4, 1, 0, 'Task Manager', 0, ',4,', 1, 40, 'story', '', '', '0'),
|
||||
(5, 1, 0, 'Other', 0, ',5,', 1, 50, 'story', '', '', '0'),
|
||||
(6, 2, 0, 'Frontend', 0, ',6,', 1, 10, 'story', '', '', '0'),
|
||||
(7, 2, 0, 'Backend', 0, ',7,', 1, 20, 'story', '', '', '0'),
|
||||
(8, 2, 0, 'Global setup', 7, ',7,8,', 2, 10, 'story', '', '', '0'),
|
||||
(9, 2, 0, 'UI setup', 7, ',7,9,', 2, 20, 'story', '', '', '0'),
|
||||
(10, 2, 0, 'Manage Articles', 7, ',7,10,', 2, 30, 'story', '', '', '0');
|
||||
|
||||
INSERT INTO `zt_product` (`id`, `name`, `code`, `line`, `type`, `status`, `desc`, `PO`, `QD`, `RD`, `acl`, `whitelist`, `createdBy`, `createdDate`, `createdVersion`, `order`, `deleted`) VALUES
|
||||
(1, 'windows 10', 'win10', 0, 'normal', 'normal', '', 'thePO', 'thePM', 'pg3', 'open', '', 'thePO', '2017-12-12 14:44:55', '9.6.3', 5, '0'),
|
||||
(2, 'Blog', 'blog', 0, 'normal', 'normal', 'A blogging system<br />', 'thePO', 'theQS', 'pg3', 'open', '', 'admin', '2017-12-12 23:28:29', '9.6.3', 10, '0');
|
||||
|
||||
INSERT INTO `zt_productplan` (`id`, `product`, `branch`, `title`, `desc`, `begin`, `end`, `deleted`) VALUES
|
||||
(1, 1, 0, 'win10 v1.0', 'Finish developing general features for users.<br />', '2017-12-30', '2018-07-03', '0'),
|
||||
(2, 1, 0, 'win10 v2.0', 'Add advanced features such as remote desktop.', '2018-07-04', '2019-01-05', '0'),
|
||||
(3, 2, 0, 'blog v0.1', 'Start developing blog<br />', '2017-12-30', '2018-01-29', '0'),
|
||||
(4, 2, 0, 'blog v0.2', 'Add more setup options of the blog.<br />', '2018-01-30', '2018-04-01', '0');
|
||||
|
||||
INSERT INTO `zt_project` (`id`, `isCat`, `catID`, `type`, `parent`, `name`, `code`, `begin`, `end`, `days`, `status`, `statge`, `pri`, `desc`, `openedBy`, `openedDate`, `openedVersion`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES
|
||||
(1, '0', 0, 'sprint', 0, ' 1st sprint of win10', 'win10Sprt1', '2017-12-12', '2017-12-25', 10, 'doing', '1', '1', 'Finish developing desktop.', '', 0, '9.6.3', '', 0, '', 0, '', '', '', '', ' 1st sprint of win10', 'open', '', 5, '0'),
|
||||
(2, '0', 0, 'sprint', 0, '1st sprint of blog', 'blog v0.1', '2017-12-12', '2017-12-25', 10, 'doing', '1', '1', '', '', 0, '9.6.3', '', 0, '', 0, '', '', '', '', '1st sprint of blog', 'open', '', 10, '0');
|
||||
|
||||
INSERT INTO `zt_projectproduct` (`project`, `product`, `branch`) VALUES
|
||||
(1, 1, 0),
|
||||
(2, 2, 0);
|
||||
|
||||
INSERT INTO `zt_projectstory` (`project`, `product`, `story`, `version`, `order`) VALUES
|
||||
(1, 1, 3, 1, 1),
|
||||
(1, 1, 2, 1, 2),
|
||||
(1, 1, 1, 1, 3),
|
||||
(2, 2, 14, 1, 1),
|
||||
(2, 2, 13, 1, 2),
|
||||
(2, 2, 12, 1, 3),
|
||||
(2, 2, 11, 1, 4),
|
||||
(2, 2, 10, 1, 5),
|
||||
(2, 2, 9, 1, 6);
|
||||
|
||||
INSERT INTO `zt_story` (`id`, `product`, `branch`, `module`, `plan`, `source`, `sourceNote`, `fromBug`, `title`, `keywords`, `type`, `pri`, `estimate`, `status`, `color`, `stage`, `mailto`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `lastEditedBy`, `lastEditedDate`, `reviewedBy`, `reviewedDate`, `closedBy`, `closedDate`, `closedReason`, `toBug`, `childStories`, `linkStories`, `duplicateStory`, `version`, `deleted`) VALUES
|
||||
(1, 1, 0, 1, '1', '', '', 0, 'Offer up to 10 desktops to users', '', '', 3, 100, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(2, 1, 0, 1, '1', '', '', 0, 'Custom desktop wallpaper.', '', '', 3, 80, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(3, 1, 0, 1, '1', '', '', 0, 'Auto classify files.', '', '', 3, 60, 'active', '', 'projected', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(4, 1, 0, 2, '1', '', '', 0, 'Fast search document.', '', '', 3, 60, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(5, 1, 0, 2, '1', '', '', 0, 'Full text retrieval', '', '', 3, 50, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(6, 1, 0, 2, '1', '', '', 0, 'Add file preview.', '', '', 3, 60, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(7, 1, 0, 4, '1', '', '', 0, 'Process list', '', '', 3, 50, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(8, 1, 0, 4, '1', '', '', 0, 'Performance overview', '', '', 3, 60, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(9, 2, 0, 8, '3', '', '', 0, 'General setup', '', '', 3, 40, 'active', '', 'developed', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(10, 2, 0, 8, '3', '', '', 0, 'SEO setup', '', '', 2, 50, 'active', '', 'projected', '', 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', 'thePO', '2017-12-12 23:52:40', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(11, 2, 0, 8, '3', '', '', 0, 'cache setup', '', '', 1, 30, 'active', '', 'developing', '', 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', 'thePO', '2017-12-12 23:53:04', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(12, 2, 0, 8, '3', '', '', 0, 'security setup', '', '', 3, 30, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(13, 2, 0, 9, '3', '', '', 0, 'UI setup', '', '', 3, 60, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(14, 2, 0, 6, '3', '', '', 0, 'Page display', '', '', 3, 60, 'active', '', 'projected', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(15, 2, 0, 10, '4', '', '', 0, 'Article management', '', '', 3, 50, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0');
|
||||
|
||||
INSERT INTO `zt_storyspec` (`story`, `version`, `title`, `spec`, `verify`) VALUES
|
||||
(1, 1, 'Offer up to 10 desktops to users', 'User can do different tasks on different desktops.', ''),
|
||||
(2, 1, 'Custom desktop wallpaper', '', ''),
|
||||
(3, 1, 'Auto classify files.', '', ''),
|
||||
(4, 1, 'Fast search document.', '', ''),
|
||||
(5, 1, 'Full text retrieval', '', ''),
|
||||
(6, 1, 'Add file preview.', '', ''),
|
||||
(7, 1, 'Process list', '', ''),
|
||||
(8, 1, 'Performance overview', '', ''),
|
||||
(9, 1, 'General setup', '', ''),
|
||||
(10, 1, 'SEO setup', 'Set SEO switch and report.', ''),
|
||||
(11, 1, 'cache setup', 'Set cache switch and time.', ''),
|
||||
(12, 1, 'security setup', '', ''),
|
||||
(13, 1, 'UI setup', '', ''),
|
||||
(14, 1, 'Page display', '', ''),
|
||||
(15, 1, 'Article management', '', '');
|
||||
|
||||
INSERT INTO `zt_suitecase` (`suite`, `product`, `case`, `version`) VALUES
|
||||
(1, 0, 2, 1),
|
||||
(1, 0, 1, 1);
|
||||
|
||||
INSERT INTO `zt_task` (`id`, `parent`, `project`, `module`, `story`, `storyVersion`, `fromBug`, `name`, `type`, `pri`, `estimate`, `consumed`, `left`, `deadline`, `status`, `color`, `mailto`, `desc`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `estStarted`, `realStarted`, `finishedBy`, `finishedDate`, `canceledBy`, `canceledDate`, `closedBy`, `closedDate`, `closedReason`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES
|
||||
(1, 0, 1, 1, 1, 1, 0, 'Offer up to 10 desktops to users.', 'devel', 3, 100, 8, 64, '0000-00-00', 'doing', '', NULL, 'User can do different tasks on different desktops.', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:12:17', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:13:13', '0'),
|
||||
(2, 0, 1, 1, 2, 1, 0, 'Custom desktop wallpaper', 'devel', 3, 80, 0, 80, '0000-00-00', 'doing', '', NULL, '', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:13:25', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:13:25', '0'),
|
||||
(3, 0, 1, 1, 3, 1, 0, 'Auto classify files.', 'devel', 3, 60, 60, 0, '0000-00-00', 'done', '', NULL, '', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:14:47', '0000-00-00', '2017-12-12', 'pm1', '2017-12-12 15:14:47', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:14:47', '0'),
|
||||
(4, 0, 1, 1, 3, 1, 0, 'File type configuration', 'devel', 4, 40, 0, 40, '0000-00-00', 'wait', '', NULL, '', 'pm1', '2017-12-12 15:05:06', 'pg3', '2017-12-12 15:05:06', '0000-00-00', '0000-00-00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '0'),
|
||||
(5, 0, 2, 8, 9, 1, 0, 'General backend setup', 'devel', 3, 40, 30, 0, '0000-00-00', 'done', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:47:37', '0000-00-00', '2017-12-12', 'pg1', '2017-12-12 23:47:37', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pg1', '2017-12-12 23:47:37', '0'),
|
||||
(6, 0, 2, 8, 10, 1, 0, 'backend SEO setup', 'devel', 3, 50, 0, 50, '0000-00-00', 'wait', '', NULL, 'Set SEO switch and report.', 'pm1', '2017-12-12 23:45:14', 'pg2', '2017-12-12 23:45:14', '0000-00-00', '0000-00-00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '0'),
|
||||
(7, 0, 2, 8, 11, 1, 0, 'backend cache setup', 'devel', 3, 30, 8, 55, '0000-00-00', 'doing', '', NULL, 'Set cache switch and time.', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:53', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 23:45:53', '0'),
|
||||
(8, 0, 2, 8, 12, 1, 0, 'backend security setup', 'devel', 3, 30, 0, 30, '0000-00-00', 'doing', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:14', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 23:45:35', '0'),
|
||||
(9, 0, 2, 9, 13, 1, 0, 'backend UI setup', 'devel', 3, 60, 8, 50, '0000-00-00', 'doing', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pg1', '2017-12-12 23:45:14', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pg3', '2017-12-12 23:51:14', '0'),
|
||||
(10, 0, 2, 6, 14, 1, 0, 'Page display', 'devel', 3, 60, 0, 60, '0000-00-00', 'wait', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pg2', '2017-12-12 23:45:14', '0000-00-00', '0000-00-00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
INSERT INTO `zt_taskestimate` (`id`, `task`, `date`, `left`, `consumed`, `account`, `work`) VALUES
|
||||
(1, 1, '2017-12-12', 100, 0, 'pm1', NULL),
|
||||
(2, 1, '2017-12-12', 64, 8, 'pm1', 'Finish UI design'),
|
||||
(3, 2, '2017-12-12', 80, 0, 'pm1', NULL),
|
||||
(4, 3, '2017-12-12', 60, 0, 'pm1', NULL),
|
||||
(5, 3, '2017-12-12', 0, 60, 'pm1', 'Finish'),
|
||||
(6, 8, '2017-12-12', 30, 0, 'pm1', NULL),
|
||||
(7, 7, '2017-12-12', 55, 8, 'pm1', ''),
|
||||
(8, 9, '2017-12-12', 60, 0, 'pg1', NULL),
|
||||
(9, 5, '2017-12-12', 40, 0, 'pg1', NULL),
|
||||
(10, 5, '2017-12-12', 0, 30, 'pg1', NULL),
|
||||
(11, 9, '2017-12-13', 50, 8, 'pg3', 'Finish page design');
|
||||
|
||||
INSERT INTO `zt_team` (`project`, `task`, `account`, `role`, `limited`, `join`, `days`, `hours`, `estimate`, `consumed`, `left`, `order`) VALUES
|
||||
(1, 0, 'thePO', 'Product Owner', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(1, 0, 'pm1', 'Project Manager', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(1, 0, 'pg2', 'Developer', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(1, 0, 'pg3', 'Developer', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(1, 0, 'qa1', 'Tester', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(2, 0, 'pm1', 'Project Manager', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(2, 0, 'pg1', 'Developer', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(2, 0, 'pg2', 'Developer', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(2, 0, 'pg3', 'Developer', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0);
|
||||
|
||||
INSERT INTO `zt_testresult` (`id`, `run`, `case`, `version`, `caseResult`, `stepResults`, `lastRunner`, `date`) VALUES
|
||||
(1, 1, 2, 1, 'fail', 'a:3:{i:3;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:4;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:24:\"Not all 400 page is displayed.\";}i:5;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}}', 'qa1', '2017-12-13 00:08:52'),
|
||||
(2, 2, 1, 1, 'pass', 'a:2:{i:1;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:2;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}}', 'qa1', '2017-12-13 00:10:24'),
|
||||
(3, 0, 2, 2, 'fail', 'a:4:{i:7;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:42:\"‘Contact Us’ page is missing in sitemap.\";}i:8;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:36:\"400 page is missing.‘/notExitPage’;\";}i:9;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:10;a:2:{s:6:\"result\";s:3:\"n/a\";s:4:\"real\";s:45:\"Blogroll cannot be added, and database error prompts.\";}}', 'qa1', '2017-12-13 00:23:41'),
|
||||
(4, 0, 2, 2, 'fail', 'a:4:{i:7;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:42:\"‘Contact Us’ page is missing in sitemap.\";}i:8;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:36:\"400 page is missing.‘/notExitPage’;\";}i:9;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:10;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:45:\"Blogroll cannot be added, and database error prompts.\";}}', 'qa1', '2017-12-13 00:23:48');
|
||||
|
||||
INSERT INTO `zt_testrun` (`id`, `task`, `case`, `version`, `assignedTo`, `lastRunner`, `lastRunDate`, `lastRunResult`, `status`) VALUES
|
||||
(1, 1, 2, 2, 'theQS', 'qa1', '2017-12-13 00:08:52', 'fail', 'done'),
|
||||
(2, 1, 1, 1, 'qa1', 'qa1', '2017-12-13 00:10:24', 'pass', 'done');
|
||||
|
||||
INSERT INTO `zt_testsuite` (`id`, `product`, `name`, `desc`, `type`, `addedBy`, `addedDate`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES
|
||||
(1, 2, 'Testsuite', 'Testsuite', 'public', 'qa1', '2017-12-13 00:05:13', '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
INSERT INTO `zt_testtask` (`id`, `name`, `product`, `project`, `build`, `owner`, `pri`, `begin`, `end`, `mailto`, `desc`, `report`, `status`, `deleted`) VALUES
|
||||
(1, 'test for blog v0.1', 2, 2, '2', 'thePO', 0, '2018-01-05', '2018-01-20', '', '', '', 'wait', '0');
|
||||
|
||||
INSERT INTO `zt_user` (`dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `fails`, `locked`, `ranzhi`, `score`, `scoreLevel`, `deleted`) VALUES
|
||||
(1, 'thePO', 'e10adc3949ba59abbe56e057f20f883e', 'po', 'Richard', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '127.0.0.1', 1513093950, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(5, 'pm1', 'e10adc3949ba59abbe56e057f20f883e', 'pm', 'Daniel', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '127.0.0.1', 1513093318, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(6, 'pm2', 'e10adc3949ba59abbe56e057f20f883e', 'pm', 'Matthew', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 0, '', 0, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(5, 'pg1', 'e10adc3949ba59abbe56e057f20f883e', 'dev', 'Mark', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '127.0.0.1', 1513093595, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(5, 'pg2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', 'Andrew', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 0, '', 0, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(5, 'pg3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', 'Jean', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '127.0.0.1', 1513094149, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(3, 'thePM', 'e10adc3949ba59abbe56e057f20f883e', 'qd', 'Tracy', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 0, '', 0, 0, '0000-00-00 00:00:00', '', 0, 0, '1'),
|
||||
(3, 'qa1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', 'Robert', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', 'admin', '0000-00-00', 2, '127.0.0.1', 1513094253, 0, '0000-00-00 00:00:00', '', 0, 0, '0'),
|
||||
(3, 'theQS', 'e10adc3949ba59abbe56e057f20f883e', 'qd', 'Hannah', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '127.0.0.1', 1513063356, 0, '0000-00-00 00:00:00', '', 0, 0, '0');
|
||||
|
||||
INSERT INTO `zt_usergroup` (`account`, `group`) VALUES
|
||||
('pg1', 2),
|
||||
('pg2', 2),
|
||||
('pg3', 2),
|
||||
('pm1', 4),
|
||||
('pm2', 4),
|
||||
('qa1', 3),
|
||||
('thePM', 8),
|
||||
('thePO', 5);
|
||||
@@ -782,7 +782,7 @@ class baseDAO
|
||||
{
|
||||
$sql = $this->processSQL();
|
||||
$table = $this->table;
|
||||
$key = 'fetch-' . md5($sql);
|
||||
$key = 'fetch-' . md5($sql . $field);
|
||||
if(isset(dao::$cache[$table][$key]))
|
||||
{
|
||||
if(empty($field)) return $this->getRow(dao::$cache[$table][$key]);
|
||||
@@ -800,7 +800,7 @@ class baseDAO
|
||||
|
||||
$this->setFields($field);
|
||||
$result = $this->query()->fetch(PDO::FETCH_OBJ);
|
||||
dao::$cache[$table][$key] = $result;
|
||||
dao::$cache[$table][$key] = $this->getRow($result);
|
||||
return $result ? $result->$field : '';
|
||||
}
|
||||
|
||||
|
||||
@@ -960,7 +960,7 @@ class bug extends control
|
||||
$this->view->users = $users;
|
||||
$this->view->assignedTo = $assignedTo;
|
||||
$this->view->projects = $this->loadModel('product')->getProjectPairs($productID, $bug->branch ? "0,{$bug->branch}" : 0, $params = 'nodeleted');
|
||||
$this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, $branch = 0, 'all');
|
||||
$this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, $branch = 0, 'all', true , $bug->project);
|
||||
$this->view->actions = $this->action->getList('bug', $bugID);
|
||||
$this->display();
|
||||
}
|
||||
@@ -1018,7 +1018,7 @@ class bug extends control
|
||||
|
||||
$this->view->bug = $bug;
|
||||
$this->view->users = $this->user->getPairs('nodeleted', $bug->resolvedBy);
|
||||
$this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, $bug->branch, 'noempty');
|
||||
$this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, $bug->branch, 'noempty', true, $bug->project);
|
||||
$this->view->actions = $this->action->getList('bug', $bugID);
|
||||
|
||||
$this->display();
|
||||
|
||||
@@ -136,3 +136,27 @@ if(navigator.userAgent.indexOf("Firefox") < 0)
|
||||
this.style.height = (this.scrollHeight + 2) + "px";
|
||||
});
|
||||
}
|
||||
|
||||
$(document).keydown(function(event)
|
||||
{
|
||||
if(event.ctrlKey && event.keyCode == 38)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('up');
|
||||
}
|
||||
else if(event.ctrlKey && event.keyCode == 40)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('down');
|
||||
}
|
||||
else if(event.keyCode == 38)
|
||||
{
|
||||
inputFocusJump('up');
|
||||
}
|
||||
else if(event.keyCode == 40)
|
||||
{
|
||||
inputFocusJump('down');
|
||||
}
|
||||
});
|
||||
+11
-2
@@ -511,6 +511,7 @@ class bugModel extends model
|
||||
->setDefault('openedBuild', '')
|
||||
->setDefault('plan', 0)
|
||||
->setDefault('deadline', '0000-00-00')
|
||||
->setDefault('resolvedDate', '0000-00-00 00:00:00')
|
||||
->setIF(strpos($this->config->bug->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline)
|
||||
->add('lastEditedBy', $this->app->user->account)
|
||||
->add('lastEditedDate', $now)
|
||||
@@ -2413,10 +2414,18 @@ class bugModel extends model
|
||||
echo zget($plans, $bug->plan, '');
|
||||
break;
|
||||
case 'story':
|
||||
echo zget($stories, $bug->story, '');
|
||||
if(isset($stories[$bug->story]))
|
||||
{
|
||||
$story = $stories[$bug->story];
|
||||
echo common::hasPriv('story', 'view') ? html::a(helper::createLink('story', 'view', "storyID=$story->id", 'html', true), $story->title, '', "class='iframe'") : $story->title;
|
||||
}
|
||||
break;
|
||||
case 'task':
|
||||
echo zget($tasks, $bug->task, '');
|
||||
if(isset($tasks[$bug->task]))
|
||||
{
|
||||
$task = $tasks[$bug->task];
|
||||
echo common::hasPriv('task', 'view') ? html::a(helper::createLink('task', 'view', "taskID=$task->id", 'html', true), $task->name, '', "class='iframe'") : $task->name;
|
||||
}
|
||||
break;
|
||||
case 'type':
|
||||
echo zget($this->lang->bug->typeList, $bug->type);
|
||||
|
||||
@@ -211,7 +211,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedDate;?></th>
|
||||
<td><?php echo html::input('resolvedDate', $bug->resolvedDate, 'class=form-control');?></td>
|
||||
<td><?php echo html::input('resolvedDate', $bug->resolvedDate, "class='form-control form-datetime'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedBuild;?></th>
|
||||
@@ -236,7 +236,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->closedDate;?></th>
|
||||
<td><?php echo html::input('closedDate', $bug->closedDate, 'class=form-control');?></td>
|
||||
<td><?php echo html::input('closedDate', $bug->closedDate, "class='form-control form-datetime'");?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
+12
-6
@@ -116,25 +116,31 @@ class buildModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* Get builds of a product in pairs.
|
||||
*
|
||||
* @param mix $products int|array
|
||||
* @param string $params noempty|notrunk, can be a set of them
|
||||
* Get builds of a product in pairs.
|
||||
*
|
||||
* @param mix $products int|array
|
||||
* @param int $branch
|
||||
* @param string $params noempty|notrunk, can be a set of them
|
||||
* @param bool $replace
|
||||
* @param int $project
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
* @return array
|
||||
*/
|
||||
public function getProductBuildPairs($products, $branch = 0, $params = 'noterminate, nodone', $replace = true)
|
||||
public function getProductBuildPairs($products, $branch = 0, $params = 'noterminate, nodone', $replace = true, $project = 0)
|
||||
{
|
||||
$sysBuilds = array();
|
||||
if(strpos($params, 'noempty') === false) $sysBuilds = array('' => '');
|
||||
if(strpos($params, 'notrunk') === false) $sysBuilds = $sysBuilds + array('trunk' => $this->lang->trunk);
|
||||
|
||||
/* Add project for Bug#1344. */
|
||||
$productBuilds = $this->dao->select('t1.id, t1.name, t1.project, t2.status as projectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName')->from(TABLE_BUILD)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
|
||||
->leftJoin(TABLE_RELEASE)->alias('t3')->on('t1.id = t3.build')
|
||||
->leftJoin(TABLE_BRANCH)->alias('t4')->on('t1.branch = t4.id')
|
||||
->where('t1.product')->in($products)
|
||||
->beginIF($branch)->andWhere('t1.branch')->in("0,$branch")->fi()
|
||||
->beginIF($project)->andWhere('t1.project')->eq($project)->fi()
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->orderBy('t1.date desc, t1.id desc')->fetchAll('id');
|
||||
|
||||
|
||||
@@ -217,7 +217,6 @@ tfoot tr td .table-actions .btn{display:none;}
|
||||
<th class='w-date {sorter:false}'> <?php common::printOrderLink('openedDate', $orderBy, $vars, $lang->bug->openedDateAB);?></th>
|
||||
<th class='w-user {sorter:false}'> <?php common::printOrderLink('resolvedBy', $orderBy, $vars, $lang->bug->resolvedByAB);?></th>
|
||||
<th class='w-100px {sorter:false}'> <?php common::printOrderLink('resolvedDate', $orderBy, $vars, $lang->bug->resolvedDateAB);?></th>
|
||||
<th class='w-50px {sorter:false}'> <?php echo $lang->actions?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($generatedBugs as $bug):?>
|
||||
|
||||
@@ -458,7 +458,7 @@ $lang->pager->noRecord = "No History";
|
||||
$lang->pager->digest = " <strong>%s</strong> in total. %s <strong>%s/%s</strong> ";
|
||||
$lang->pager->recPerPage = " <strong>%s</strong> per page";
|
||||
$lang->pager->first = "<i class='icon-step-backward' title='Home'></i>";
|
||||
$lang->pager->pre = "<i class='icon-play icon-rotate-180' title='Previous Page'></i>";
|
||||
$lang->pager->pre = "<i class='icon-play icon-flip-horizontal' title='Previous Page'></i>";
|
||||
$lang->pager->next = "<i class='icon-play' title='Next Page'></i>";
|
||||
$lang->pager->last = "<i class='icon-step-forward' title='Last Page'></i>";
|
||||
$lang->pager->locate = "Go!";
|
||||
|
||||
@@ -458,7 +458,7 @@ $lang->pager->noRecord = "暂时没有记录";
|
||||
$lang->pager->digest = "共 <strong>%s</strong> 条记录,%s <strong>%s/%s</strong> ";
|
||||
$lang->pager->recPerPage = "每页 <strong>%s</strong> 条";
|
||||
$lang->pager->first = "<i class='icon-step-backward' title='首页'></i>";
|
||||
$lang->pager->pre = "<i class='icon-play icon-rotate-180' title='上一页'></i>";
|
||||
$lang->pager->pre = "<i class='icon-play icon-flip-horizontal' title='上一页'></i>";
|
||||
$lang->pager->next = "<i class='icon-play' title='下一页'></i>";
|
||||
$lang->pager->last = "<i class='icon-step-forward' title='末页'></i>";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
@@ -458,7 +458,7 @@ $lang->pager->noRecord = "暫時沒有記錄";
|
||||
$lang->pager->digest = "共 <strong>%s</strong> 條記錄,%s <strong>%s/%s</strong> ";
|
||||
$lang->pager->recPerPage = "每頁 <strong>%s</strong> 條";
|
||||
$lang->pager->first = "<i class='icon-step-backward' title='首頁'></i>";
|
||||
$lang->pager->pre = "<i class='icon-play icon-rotate-180' title='上一頁'></i>";
|
||||
$lang->pager->pre = "<i class='icon-play icon-flip-horizontal' title='上一頁'></i>";
|
||||
$lang->pager->next = "<i class='icon-play' title='下一頁'></i>";
|
||||
$lang->pager->last = "<i class='icon-step-forward' title='末頁'></i>";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
@@ -126,7 +126,7 @@ $(function()
|
||||
var $col = $cols.filter('[data-key=' + col.id + ']');
|
||||
$col.toggleClass('disabled', !col.show);
|
||||
$col.attr('data-order', col.order);
|
||||
if(col.width) $col.find('input').val(col.width.replace('px', ''));
|
||||
if(col.width) $col.find('input#width').val(col.width.replace('px', ''));
|
||||
}
|
||||
|
||||
$('.cols-list').on('click', '.col:not(.require) .show-hide, .col:not(.require) .title', function()
|
||||
@@ -149,14 +149,14 @@ $(function()
|
||||
|
||||
$list.sortable({trigger: '.title', selector: '.col'});
|
||||
}
|
||||
}).on('keyup change', 'input', function()
|
||||
}).on('keyup change', 'input#width', function()
|
||||
{
|
||||
renderColWidth($(this).closest('.col'));
|
||||
});
|
||||
|
||||
function renderColWidth($col)
|
||||
{
|
||||
var width = $col.find('input').val();
|
||||
var width = $col.find('input#width').val();
|
||||
if(width == 'auto')
|
||||
{
|
||||
width = '500';
|
||||
|
||||
@@ -90,6 +90,9 @@ $lang->dev->tableList['doccontent'] = 'Doc Content';
|
||||
$lang->dev->tableList['storystage'] = 'Story Stage';
|
||||
$lang->dev->tableList['tutorial'] = 'Tutorial';
|
||||
$lang->dev->tableList['suitecase'] = 'Suite Case';
|
||||
$lang->dev->tableList['score'] = 'Score';
|
||||
$lang->dev->tableList['entry'] = 'Entry';
|
||||
$lang->dev->tableList['webhook'] = 'WebHook';
|
||||
|
||||
$lang->dev->groupList['my'] = 'Dashboard';
|
||||
$lang->dev->groupList['product'] = $lang->productCommon;
|
||||
|
||||
@@ -90,6 +90,9 @@ $lang->dev->tableList['doccontent'] = '文档内容';
|
||||
$lang->dev->tableList['storystage'] = '需求阶段';
|
||||
$lang->dev->tableList['tutorial'] = '新手教程';
|
||||
$lang->dev->tableList['suitecase'] = '套件用例';
|
||||
$lang->dev->tableList['score'] = '积分';
|
||||
$lang->dev->tableList['entry'] = '应用';
|
||||
$lang->dev->tableList['webhook'] = 'WebHook';
|
||||
|
||||
$lang->dev->groupList['my'] = '我的地盘';
|
||||
$lang->dev->groupList['product'] = $lang->productCommon;
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->group->id;?></th>
|
||||
<th class='w-100px'><?php echo $lang->group->name;?></th>
|
||||
<th><?php echo $lang->group->desc;?></th>
|
||||
<th class='w-p60'><?php echo $lang->group->users;?></th>
|
||||
<th class='w-250px'><?php echo $lang->group->desc;?></th>
|
||||
<th><?php echo $lang->group->users;?></th>
|
||||
<th class='w-150px {sorter:false}'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -38,7 +38,7 @@
|
||||
<tr class='text-center'>
|
||||
<td class='strong'><?php echo $group->id;?></td>
|
||||
<td class='text-left'><?php echo $group->name;?></td>
|
||||
<td class='text-left'><?php echo $group->desc;?></td>
|
||||
<td class='text-left' title='<?php echo $group->desc?>'><?php echo $group->desc;?></td>
|
||||
<td class='text-left' title='<?php echo $users;?>'><?php echo $users;?></td>
|
||||
<td class='text-center'>
|
||||
<?php $lang->group->managepriv = $lang->group->managePrivByGroup;?>
|
||||
|
||||
@@ -497,7 +497,8 @@ class installModel extends model
|
||||
*/
|
||||
public function importDemoData()
|
||||
{
|
||||
$demoDataFile = $this->app->getAppRoot() . 'db' . DS . 'demo.sql';
|
||||
$demoDataFile = $this->app->clientLang == 'en' ? 'endemo.sql' : 'demo.sql';
|
||||
$demoDataFile = $this->app->getAppRoot() . 'db' . DS . $demoDataFile;
|
||||
$insertTables = explode(";\n", file_get_contents($demoDataFile));
|
||||
foreach($insertTables as $table)
|
||||
{
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
<tr class='text-center'>
|
||||
<td><?php echo $build->id;?></td>
|
||||
<td class='text-left'><?php echo html::a($this->createLink('build', 'view', "build=$build->id"), $build->name);?></td>
|
||||
<td class='text-left' title="<?php echo $build->scmPath?>"><?php strpos($build->scmPath, 'http') === 0 ? printf(html::a($build->scmPath)) : printf($build->scmPath);?></td>
|
||||
<td class='text-left' title="<?php echo $build->filePath?>"><?php strpos($build->filePath, 'http') === 0 ? printf(html::a($build->filePath)) : printf($build->filePath);?></td>
|
||||
<td class='text-left' title="<?php echo $build->scmPath?>"><?php echo strpos($build->scmPath, 'http') === true ? html::a($build->scmPath) : $build->scmPath;?></td>
|
||||
<td class='text-left' title="<?php echo $build->filePath?>"><?php echo strpos($build->filePath, 'http') === true ? html::a($build->filePath) : $build->filePath;?></td>
|
||||
<td><?php echo $build->date?></td>
|
||||
<td><?php echo $users[$build->builder]?></td>
|
||||
<td class='text-right'>
|
||||
|
||||
@@ -290,6 +290,14 @@ class project extends control
|
||||
{
|
||||
$groupTasks[$task->$groupBy][] = $task;
|
||||
}
|
||||
if(isset($task->children))
|
||||
{
|
||||
foreach($task->children as $child)
|
||||
{
|
||||
$groupTasks[$child->assignedToRealName][] = $child;
|
||||
}
|
||||
$task->children = true;
|
||||
}
|
||||
}
|
||||
/* Process closed data when group by assignedTo. */
|
||||
if($groupBy == 'assignedTo' and isset($groupTasks['Closed']))
|
||||
|
||||
@@ -21,6 +21,7 @@ $(function()
|
||||
|
||||
$('#module' + moduleID).addClass('active');
|
||||
$('#product' + productID).addClass('active');
|
||||
$('#branch' + branchID).addClass('active');
|
||||
$(document).on('click', "#storyList tbody tr", function(){showCheckedSummary();});
|
||||
$(document).on('change', "#storyList :checkbox", function(){showCheckedSummary();});
|
||||
});
|
||||
|
||||
@@ -564,7 +564,7 @@ class projectModel extends model
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function close($projectID)
|
||||
{
|
||||
@@ -789,6 +789,7 @@ class projectModel extends model
|
||||
$tasks = $this->dao->select('id, project, estimate, consumed, `left`, status, closedReason')
|
||||
->from(TABLE_TASK)
|
||||
->where('project')->in($projectKeys)
|
||||
->andWhere('parent')->eq(0)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchGroup('project', 'id');
|
||||
|
||||
@@ -1681,7 +1682,7 @@ class projectModel extends model
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function getBurnDataFlot($projectID = 0)
|
||||
{
|
||||
@@ -1835,7 +1836,7 @@ class projectModel extends model
|
||||
*/
|
||||
public function summary($tasks)
|
||||
{
|
||||
$taskSum = $statusWait = $statusDone = $statusDoing = $statusClosed = $statusCancel = $statusPause = 0;
|
||||
$taskSum = $statusWait = $statusDone = $statusDoing = $statusClosed = $statusCancel = $statusPause = 0;
|
||||
$totalEstimate = $totalConsumed = $totalLeft = 0.0;
|
||||
|
||||
foreach($tasks as $task)
|
||||
@@ -1845,7 +1846,13 @@ class projectModel extends model
|
||||
$totalLeft += (($task->status == 'cancel' or $task->closedReason == 'cancel') ? 0 : $task->left);
|
||||
$statusVar = 'status' . ucfirst($task->status);
|
||||
$$statusVar ++;
|
||||
if(!empty($task->children)) $taskSum += count($task->children);
|
||||
if(!empty($task->children)){
|
||||
$taskSum += count($task->children);
|
||||
foreach($task->children as $child)
|
||||
{
|
||||
if($child->status == 'wait') $statusWait ++;
|
||||
}
|
||||
}
|
||||
$taskSum ++;
|
||||
}
|
||||
|
||||
@@ -1921,6 +1928,7 @@ class projectModel extends model
|
||||
* @param string $end
|
||||
* @param string $type
|
||||
* @param string|int $interval
|
||||
* @param string $format
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if($groupBy == 'assignedTo' and $groupName == '') $groupName = $this->lang->task->noAssigned;
|
||||
?>
|
||||
<?php
|
||||
$rowspan = 0;
|
||||
$groupSum = 0;
|
||||
foreach($groupTasks as $taskKey => $task)
|
||||
{
|
||||
if(isset($currentFilter) and $currentFilter != 'all')
|
||||
@@ -87,8 +87,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($task->children)) $rowspan += count($task->children);
|
||||
|
||||
$groupEstimate += $task->estimate;
|
||||
$groupConsumed += $task->consumed;
|
||||
$groupLeft += ($task->status == 'cancel' ? 0 : $task->left);
|
||||
@@ -99,7 +97,6 @@
|
||||
if($task->status == 'closed') $groupClosed++;
|
||||
}
|
||||
$groupSum = count($groupTasks);
|
||||
$rowspan += $groupSum;
|
||||
?>
|
||||
<?php $i = 0;?>
|
||||
<?php foreach($groupTasks as $task):?>
|
||||
@@ -107,7 +104,7 @@
|
||||
<?php $taskLink = $this->createLink('task','view',"taskID=$task->id"); ?>
|
||||
<tr class='text-center' data-id='<?php echo $groupIndex?>'>
|
||||
<?php if($i == 0):?>
|
||||
<td rowspan='<?php echo $rowspan?>' class='groupby text-left'>
|
||||
<td rowspan='<?php echo $groupSum?>' class='groupby text-left'>
|
||||
<?php echo html::a('###', "<i class='icon-caret-down'></i> " . $groupName, '', "class='expandGroup' data-action='expand' title='$groupName'");?>
|
||||
<div class='groupSummary text' style='white-space:normal'>
|
||||
<?php if($groupBy == 'assignedTo' and isset($members[$task->assignedTo])) printf($lang->project->memberHours, $users[$task->assignedTo], $members[$task->assignedTo]->totalHours);?>
|
||||
@@ -116,8 +113,15 @@
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<td><?php echo $task->id;?></td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->task->priList, $task->pri, $task->pri)?>'><?php echo zget($lang->task->priList, $task->pri, $task->pri);?></span></td>
|
||||
<td class='text-left'><?php if(!empty($task->team)) echo '<span class="label">'.$lang->task->multipleAB.'</span> ';if(!common::printLink('task', 'view', "task=$task->id", $task->name)) echo $task->name;?></td>
|
||||
<td><span class='<?php echo 'pri' . zget(array_keys($lang->task->priList), $task->pri, $task->pri)?>'><?php echo zget(array_keys($lang->task->priList), $task->pri, $task->pri);?></span></td>
|
||||
<td class='text-left'>
|
||||
<?php
|
||||
if(!empty($task->team)) echo '<span class="label">' . $lang->task->multipleAB . '</span> ';
|
||||
if(!empty($task->parent)) echo '<span class="label">' . $lang->task->childrenAB . '</span> ';
|
||||
if(isset($task->children) && $task->children == true) echo '<span class="label">' . $lang->task->parentAB . '</span> ';
|
||||
if(!common::printLink('task', 'view', "task=$task->id", $task->name)) echo $task->name;
|
||||
?>
|
||||
</td>
|
||||
<td class='task-<?php echo $task->status;?>'><?php echo $lang->task->statusList[$task->status];?></td>
|
||||
<td class='<?php if(isset($task->delay)) echo 'delayed';?>'><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<td <?php echo $assignedToClass;?>><?php echo $task->assignedToRealName;?></td>
|
||||
@@ -132,33 +136,6 @@
|
||||
<?php common::printIcon('task', 'delete', "projectID=$task->project&taskid=$task->id", '', 'list', '', 'hiddenwin');?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if(!empty($task->children)):?>
|
||||
<?php foreach($task->children as $key => $child):?>
|
||||
<?php $class = $key == 0 ? 'table-child-top' : '';?>
|
||||
<?php $class .= ($key + 1 == count($task->children)) ? ' table-child-bottom' : '';?>
|
||||
<tr class='text-center table-children <?php echo $class;?>' data-id='<?php echo $groupIndex;?>'>
|
||||
<td><?php echo $child->id;?></td>
|
||||
<td>
|
||||
<span class='<?php echo 'pri' . zget($lang->task->priList, $child->pri, $task->pri)?>'><?php echo zget($lang->task->priList, $child->pri, $child->pri);?></span>
|
||||
</td>
|
||||
<td class='text-left'><span class="label"><?php echo $lang->task->childrenAB;?></span> <?php if(!common::printLink('task', 'view', "task=$child->id", $child->name)) echo $child->name;?></td>
|
||||
<td class='task-<?php echo $child->status;?>'><?php echo $lang->task->statusList[$child->status];?></td>
|
||||
<td class='<?php if(isset($child->delay)) echo 'delayed';?>'><?php if(substr($child->deadline, 0, 4) > 0) echo $child->deadline;?></td>
|
||||
<td <?php echo $assignedToClass;?>><?php echo $child->assignedToRealName;?></td>
|
||||
<td><?php echo $users[$child->finishedBy];?></td>
|
||||
<td><?php echo $child->estimate;?></td>
|
||||
<td><?php echo $child->consumed;?></td>
|
||||
<td><?php echo $child->left;?></td>
|
||||
<td class='text-left'><?php echo $child->progress . '%';?></td>
|
||||
<td><?php echo $lang->task->typeList[$child->type];?></td>
|
||||
<td>
|
||||
<?php common::printIcon('task', 'edit', "taskid=$child->id", '', 'list');?>
|
||||
<?php common::printIcon('task', 'delete', "projectID=$child->project&taskid=$child->id", '', 'list', '', 'hiddenwin');?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php if($i != 0):?>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<?php include '../../common/view/sortable.html.php';?>
|
||||
<?php js::set('moduleID', ($type == 'byModule' ? $param : 0));?>
|
||||
<?php js::set('productID', ($type == 'byProduct' ? $param : 0));?>
|
||||
<?php js::set('branchID', ($type == 'byBranch' ? (int)$param : ''));?>
|
||||
<?php js::set('confirmUnlinkStory', $lang->project->confirmUnlinkStory)?>
|
||||
<div id='featurebar'>
|
||||
<ul class='nav'>
|
||||
|
||||
@@ -83,7 +83,7 @@ js::set('browseType', $browseType);
|
||||
<?php foreach($task->children as $key => $child):?>
|
||||
<?php $class = $key == 0 ? ' table-child-top' : '';?>
|
||||
<?php $class .= ($key + 1 == count($task->children)) ? ' table-child-bottom' : '';?>
|
||||
<tr class='text-center table-children<?php echo $class;?> parent-<?php echo $task->id;?>' data-id='<?php echo $child->id?>' data-status='<?php echo $task->status?>' data-estimate='<?php echo $task->estimate?>' data-consumed='<?php echo $task->consumed?>' data-left='<?php echo $task->left?>'>
|
||||
<tr class='text-center table-children<?php echo $class;?> parent-<?php echo $task->id;?>' data-id='<?php echo $child->id?>' data-status='<?php echo $child->status?>' data-estimate='<?php echo $child->estimate?>' data-consumed='<?php echo $child->consumed?>' data-left='<?php echo $child->left?>'>
|
||||
<?php foreach($customFields as $field) $this->task->printCell($field, $child, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', true);?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -33,7 +33,31 @@ $(document).on('mousedown', 'select', function()
|
||||
}
|
||||
$(this).val(value);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
$(document).keydown(function(event)
|
||||
{
|
||||
if(event.ctrlKey && event.keyCode == 38)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('up');
|
||||
}
|
||||
else if(event.ctrlKey && event.keyCode == 40)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('down');
|
||||
}
|
||||
else if(event.keyCode == 38)
|
||||
{
|
||||
inputFocusJump('up');
|
||||
}
|
||||
else if(event.keyCode == 40)
|
||||
{
|
||||
inputFocusJump('down');
|
||||
}
|
||||
});
|
||||
|
||||
if(navigator.userAgent.indexOf("Firefox") < 0)
|
||||
{
|
||||
|
||||
@@ -90,4 +90,4 @@ $(document).on('change', 'select', function()
|
||||
$(this).trigger("chosen:updated");
|
||||
$(this).trigger("change");
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
@@ -481,6 +481,7 @@ class storyModel extends model
|
||||
->get();
|
||||
if(isset($story->plan) and is_array($story->plan)) $story->plan = trim(join(',', $story->plan), ',');
|
||||
if(empty($_POST['product'])) $story->branch = $oldStory->branch;
|
||||
if(empty($_POST['branch'])) $story->branch = 0;
|
||||
|
||||
$this->dao->update(TABLE_STORY)
|
||||
->data($story)
|
||||
@@ -1672,7 +1673,7 @@ class storyModel extends model
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t4')->on('t2.product = t4.id')
|
||||
->where('t1.project')->eq((int)$projectID)
|
||||
->beginIF($type == 'byProduct')->andWhere('t1.product')->eq($param)->fi()
|
||||
->beginIF($type == 'byBrach')->andWhere('t2.branch')->eq($param)->fi()
|
||||
->beginIF($type == 'byBranch')->andWhere('t2.branch')->eq($param)->fi()
|
||||
->beginIF($type == 'byModule' and $param)->andWhere('t2.module')->in($modules)->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->orderBy($orderBy)
|
||||
@@ -2512,13 +2513,13 @@ class storyModel extends model
|
||||
$history = $this->action->getHistory($actionID);
|
||||
$action->history = isset($history[$actionID]) ? $history[$actionID] : array();
|
||||
$action->appendLink = '';
|
||||
if(strpos($action->extra, ':')!== false)
|
||||
if(strpos($action->extra, ':') !== false)
|
||||
{
|
||||
list($extra, $id) = explode(':', $action->extra);
|
||||
$action->extra = $extra;
|
||||
if($id)
|
||||
{
|
||||
$name = $this->dao->select('title')->from(TABLE_STORY)->where('id')->eq($id)->fetch('title');
|
||||
$name = $this->dao->select('title')->from(TABLE_STORY)->where('id')->eq($id)->fetch('title');
|
||||
if($name) $action->appendLink = html::a(zget($this->config->mail, 'domain', common::getSysURL()) . helper::createLink($action->objectType, 'view', "id=$id"), "#$id " . $name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,10 +173,12 @@ $config->task->datatable->fieldList['closedReason']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['closedReason']['width'] = '80';
|
||||
$config->task->datatable->fieldList['closedReason']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['story']['title'] = 'story';
|
||||
global $lang;
|
||||
$config->task->datatable->fieldList['story']['title'] = "storyAB";
|
||||
$config->task->datatable->fieldList['story']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['story']['width'] = '80';
|
||||
$config->task->datatable->fieldList['story']['width'] = '40';
|
||||
$config->task->datatable->fieldList['story']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['story']['name'] = $lang->task->story;
|
||||
|
||||
$config->task->datatable->fieldList['mailto']['title'] = 'mailto';
|
||||
$config->task->datatable->fieldList['mailto']['fixed'] = 'no';
|
||||
|
||||
+35
-5
@@ -786,11 +786,18 @@ class task extends control
|
||||
{
|
||||
$teams = array_keys($task->team);
|
||||
|
||||
$task->openedBy = $this->task->getNextUser($teams, $task->assignedTo);
|
||||
$task->nextBy = $this->task->getNextUser($teams, $task->assignedTo);
|
||||
$task->myConsumed = $this->dao->select('consumed')->from(TABLE_TEAM)->where('task')->eq($taskID)->andWhere('account')->eq($task->assignedTo)->fetch('consumed');
|
||||
|
||||
$lastAccount = end($teams);
|
||||
if($lastAccount != $task->assignedTo) $members = $this->task->getMemberPairs($task);
|
||||
if($lastAccount != $task->assignedTo)
|
||||
{
|
||||
$members = $this->task->getMemberPairs($task);
|
||||
}
|
||||
else
|
||||
{
|
||||
$task->nextBy = $task->openedBy;
|
||||
}
|
||||
}
|
||||
|
||||
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->finish;
|
||||
@@ -1217,8 +1224,6 @@ class task extends control
|
||||
}
|
||||
|
||||
$task->progress .= '%';
|
||||
|
||||
if($task->parent) $task->name = '[' . $taskLang->childrenAB . '] ' . $task->name;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1235,11 +1240,33 @@ class task extends control
|
||||
$relatedStoryIdList = array();
|
||||
foreach($tasks as $task) $relatedStoryIdList[$task->story] = $task->story;
|
||||
|
||||
/* Get team for multiple task. */
|
||||
$taskTeam = $this->dao->select('*')->from(TABLE_TEAM)->where('task')->in(array_keys($tasks))->fetchGroup('task');
|
||||
if(!empty($taskTeam))
|
||||
{
|
||||
foreach($taskTeam as $taskID => $team) $tasks[$taskID]->team = $team;
|
||||
}
|
||||
|
||||
/* Get related objects title or names. */
|
||||
$relatedStories = $this->dao->select('id,title')->from(TABLE_STORY) ->where('id')->in($relatedStoryIdList)->fetchPairs();
|
||||
$relatedStories = $this->dao->select('id,title')->from(TABLE_STORY)->where('id')->in($relatedStoryIdList)->fetchPairs();
|
||||
$relatedFiles = $this->dao->select('id, objectID, pathname, title')->from(TABLE_FILE)->where('objectType')->eq('task')->andWhere('objectID')->in(@array_keys($tasks))->andWhere('extra')->ne('editor')->fetchGroup('objectID');
|
||||
$relatedModules = $this->loadModel('tree')->getTaskOptionMenu($projectID);
|
||||
|
||||
$children = $this->dao->select('*')->from(TABLE_TASK)->where('deleted')->eq(0)->andWhere('parent')->in(array_keys($tasks))->fetchGroup('parent', 'id');
|
||||
if(!empty($children))
|
||||
{
|
||||
$position = 0;
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
$position ++;
|
||||
if(isset($children[$task->id]))
|
||||
{
|
||||
array_splice($tasks, $position, 0, $children[$task->id]);
|
||||
$position += count($children[$task->id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
if($this->post->fileType == 'csv')
|
||||
@@ -1266,6 +1293,9 @@ class task extends control
|
||||
if(isset($users[$task->closedBy])) $task->closedBy = $users[$task->closedBy];
|
||||
if(isset($users[$task->lastEditedBy])) $task->lastEditedBy = $users[$task->lastEditedBy];
|
||||
|
||||
if(!empty($task->parent)) $task->name = '[' . $taskLang->childrenAB . '] ' . $task->name;
|
||||
if(!empty($task->team)) $task->name = '[' . $taskLang->multipleAB . '] ' . $task->name;
|
||||
|
||||
$task->openedDate = substr($task->openedDate, 0, 10);
|
||||
$task->assignedDate = substr($task->assignedDate, 0, 10);
|
||||
$task->finishedDate = substr($task->finishedDate, 0, 10);
|
||||
|
||||
@@ -153,5 +153,28 @@ $(function()
|
||||
if($.cookie('zeroTask') == 'true') toggleZeroTaskStory();
|
||||
|
||||
if(storyID != 0) setStoryRelated(0);
|
||||
})
|
||||
|
||||
$(document).keydown(function(event)
|
||||
{
|
||||
if(event.ctrlKey && event.keyCode == 38)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('up');
|
||||
}
|
||||
else if(event.ctrlKey && event.keyCode == 40)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('down');
|
||||
}
|
||||
else if(event.keyCode == 38)
|
||||
{
|
||||
inputFocusJump('up');
|
||||
}
|
||||
else if(event.keyCode == 40)
|
||||
{
|
||||
inputFocusJump('down');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -44,4 +44,5 @@ $(document).on('change', 'select', function()
|
||||
$(this).trigger("chosen:updated");
|
||||
$(this).trigger("change");
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
@@ -24,6 +24,11 @@ function loadAll(projectID)
|
||||
loadProjectStories(projectID);
|
||||
loadProjectMembers(projectID);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#project').val(oldProjectID);
|
||||
$("#project").trigger("chosen:updated");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -45,6 +45,7 @@ $lang->task->project = $lang->projectCommon;
|
||||
$lang->task->module = 'Module';
|
||||
$lang->task->moduleAB = 'Module';
|
||||
$lang->task->story = 'Story';
|
||||
$lang->task->storyAB = 'Story';
|
||||
$lang->task->storySpec = 'Story Description';
|
||||
$lang->task->storyVerify = 'Acceptance';
|
||||
$lang->task->name = 'Name';
|
||||
@@ -103,6 +104,7 @@ $lang->task->transferTo = 'Transfer To';
|
||||
$lang->task->children = 'Child';
|
||||
$lang->task->childrenAB = 'Child';
|
||||
$lang->task->parent = 'Parent Task';
|
||||
$lang->task->parentAB = 'Parent Task';
|
||||
$lang->task->lblPri = 'P';
|
||||
$lang->task->lblHour = '(h)';
|
||||
$lang->task->deniedNotice = 'This task can only be started by the first user in the team.';
|
||||
|
||||
@@ -45,6 +45,7 @@ $lang->task->project = '所属' . $lang->projectCommon;
|
||||
$lang->task->module = '所属模块';
|
||||
$lang->task->moduleAB = '模块';
|
||||
$lang->task->story = '相关需求';
|
||||
$lang->task->storyAB = '需求';
|
||||
$lang->task->storySpec = '需求描述';
|
||||
$lang->task->storyVerify = '验收标准';
|
||||
$lang->task->name = '任务名称';
|
||||
@@ -103,6 +104,7 @@ $lang->task->transferTo = '转交给';
|
||||
$lang->task->children = '子任务';
|
||||
$lang->task->childrenAB = '子';
|
||||
$lang->task->parent = '父任务';
|
||||
$lang->task->parentAB = '父';
|
||||
$lang->task->lblPri = 'P';
|
||||
$lang->task->lblHour = '(h)';
|
||||
$lang->task->deniedNotice = '此任务只允许由团队第一人开始。';
|
||||
|
||||
+41
-22
@@ -259,7 +259,7 @@ class taskModel extends model
|
||||
{
|
||||
if(!$taskID) return true;
|
||||
|
||||
$tasks = $this->dao->select('`id`,`estimate`,`consumed`,`left`')->from(TABLE_TASK)->where('parent')->eq($taskID)->fetchAll('id');
|
||||
$tasks = $this->dao->select('`id`,`estimate`,`consumed`,`left`')->from(TABLE_TASK)->where('parent')->eq($taskID)->andWhere('status')->ne('cancel')->fetchAll('id');
|
||||
if(empty($tasks)) return true;
|
||||
|
||||
$estimate = 0;
|
||||
@@ -666,7 +666,7 @@ class taskModel extends model
|
||||
if($this->post->left == 0)
|
||||
{
|
||||
$task->status = 'done';
|
||||
$task->finishedBy = $this->app->user->account;
|
||||
$task->finishedBy = $oldTask->openedBy; // Fix bug#1341
|
||||
$task->finishedDate = helper::now();
|
||||
}
|
||||
else
|
||||
@@ -850,20 +850,24 @@ class taskModel extends model
|
||||
$this->dao->update(TABLE_TASK)->data($newTask)->where('id')->eq((int)$taskID)->exec();
|
||||
|
||||
if($task->assignedTo != $teams[count($teams) - 1]) return common::createChanges($task, $newTask);
|
||||
|
||||
$data->assignedTo = $task->openedBy; // Fix bug#1345
|
||||
}
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_TASK)->data($data)->where('id')->eq($taskID)->exec();
|
||||
|
||||
$oldTask = new stdClass();
|
||||
$oldTask->consumed = $task->consumed;
|
||||
$oldTask->left = $task->left;
|
||||
$oldTask->status = $oldStatus;
|
||||
$oldTask->consumed = $task->consumed;
|
||||
$oldTask->left = $task->left;
|
||||
$oldTask->status = $oldStatus;
|
||||
$oldTask->assignedTo = $task->assignedTo;
|
||||
|
||||
$newTask = new stdClass();
|
||||
$newTask->left = $left;
|
||||
$newTask->consumed = $task->consumed + $consumed;
|
||||
$newTask->status = $task->status;
|
||||
$newTask->left = $left;
|
||||
$newTask->consumed = $task->consumed + $consumed;
|
||||
$newTask->status = $task->status;
|
||||
$newTask->assignedTo = $data->assignedTo;
|
||||
|
||||
$changes = common::createChanges($oldTask, $newTask);
|
||||
if(!empty($actionID)) $this->action->logHistory($actionID, $changes);
|
||||
@@ -932,7 +936,8 @@ class taskModel extends model
|
||||
$this->dao->update(TABLE_TASK)->data($newTask)->where('id')->eq((int)$taskID)->exec();
|
||||
|
||||
if($oldTask->assignedTo != $teams[count($teams) - 1]) return common::createChanges($oldTask, $newTask);
|
||||
$task->consumed = $myTime->consumed;
|
||||
$task->consumed = $myTime->consumed;
|
||||
$task->assignedTo = $oldTask->openedBy; // Fix bug#1345
|
||||
}
|
||||
|
||||
if($task->finishedDate == substr($now, 0, 10)) $task->finishedDate = $now;
|
||||
@@ -1030,9 +1035,10 @@ class taskModel extends model
|
||||
/**
|
||||
* Cancel a task.
|
||||
*
|
||||
* @param int $taskID
|
||||
* @param int $taskID
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function cancel($taskID)
|
||||
{
|
||||
@@ -1059,9 +1065,10 @@ class taskModel extends model
|
||||
/**
|
||||
* Activate a task.
|
||||
*
|
||||
* @param int $taskID
|
||||
* @param int $taskID
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function activate($taskID)
|
||||
{
|
||||
@@ -1100,8 +1107,9 @@ class taskModel extends model
|
||||
/**
|
||||
* Get task info by Id.
|
||||
*
|
||||
* @param int $taskID
|
||||
* @param bool $setImgSize
|
||||
* @param int $taskID
|
||||
* @param bool $setImgSize
|
||||
*
|
||||
* @access public
|
||||
* @return object|bool
|
||||
*/
|
||||
@@ -1211,8 +1219,12 @@ class taskModel extends model
|
||||
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
|
||||
->leftJoin(TABLE_TEAM)->alias('t4')->on('t1.id = t4.task')
|
||||
->where('t1.project')->eq((int)$projectID)
|
||||
->andWhere('t1.parent', $type == 'myinvolved')->eq(0)
|
||||
->beginIF($type == 'myinvolved')->orWhere('t4.account')->eq($this->app->user->account)->markRight(1)->fi()
|
||||
->beginIF(!in_array($type, array('assignedtome', 'myinvolved')))->andWhere('t1.parent')->eq(0)->fi()
|
||||
->beginIF($type == 'myinvolved')
|
||||
->andWhere('t4.account', true)->eq($this->app->user->account)
|
||||
->orWhere('t1.assignedTo')->eq($this->app->user->account)
|
||||
->orWhere('t1.finishedby')->eq($this->app->user->account)
|
||||
->markRight(1)->fi()
|
||||
->beginIF($productID)->andWhere('t2.product')->eq((int)$productID)->fi()
|
||||
->beginIF($type == 'undone')->andWhere("(t1.status = 'wait' or t1.status ='doing')")->fi()
|
||||
->beginIF($type == 'needconfirm')->andWhere('t2.version > t1.storyVersion')->andWhere("t2.status = 'active'")->fi()
|
||||
@@ -1225,7 +1237,7 @@ class taskModel extends model
|
||||
->orderBy('t1.`parent`,' . $orderBy)
|
||||
->page($pager)
|
||||
->fetchAll('id');
|
||||
|
||||
|
||||
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'task', ($productID or $type == 'needconfirm' or $type == 'myinvolved') ? false : true);
|
||||
|
||||
if(empty($tasks)) return array();
|
||||
@@ -2025,7 +2037,7 @@ class taskModel extends model
|
||||
$class = '';
|
||||
if($id == 'status') $class .= ' task-' . $task->status;
|
||||
if($id == 'id') $class .= ' cell-id';
|
||||
if($id == 'name' or $id == 'story') $class .= ' text-left';
|
||||
if($id == 'name') $class .= ' text-left';
|
||||
if($id == 'deadline' and isset($task->delay)) $class .= ' delayed';
|
||||
if($id == 'assignedTo' && $task->assignedTo == $account) $class .= ' red';
|
||||
|
||||
@@ -2041,8 +2053,8 @@ class taskModel extends model
|
||||
echo $canView ? html::a($taskLink, sprintf('%03d', $task->id)) : sprintf('%03d', $task->id);
|
||||
break;
|
||||
case 'pri':
|
||||
echo "<span class='pri" . zget($this->lang->task->priList, $task->pri, $task->pri) . "'>";
|
||||
echo $task->pri == '0' ? '' : zget($this->lang->task->priList, $task->pri, $task->pri);
|
||||
echo "<span class='pri" . zget(array_keys($this->lang->task->priList), $task->pri, $task->pri) . "'>";
|
||||
echo $task->pri == '0' ? '' : zget(array_keys($this->lang->task->priList), $task->pri, $task->pri);
|
||||
echo "</span>";
|
||||
break;
|
||||
case 'name':
|
||||
@@ -2118,7 +2130,14 @@ class taskModel extends model
|
||||
case 'story':
|
||||
if(!empty($task->storyID))
|
||||
{
|
||||
if(!common::printLink('story', 'view', "storyid=$task->storyID", $task->storyTitle)) echo $task->storyTitle;
|
||||
if(common::hasPriv('story', 'view'))
|
||||
{
|
||||
echo html::a(helper::createLink('story', 'view', "storyid=$task->storyID", 'html', true), "<i class='icon icon-{$this->lang->icons['story']}'></i>", '', "class='iframe' title='{$task->storyTitle}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $task->storyTitle;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'mailto':
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::set('oldStoryID', $task->story); ?>
|
||||
<?php js::set('oldAssignedTo', $task->assignedTo); ?>
|
||||
<?php js::set('oldProjectID', $task->project); ?>
|
||||
<?php js::set('confirmChangeProject', $lang->task->confirmChangeProject); ?>
|
||||
<?php js::set('changeProjectConfirmed', false); ?>
|
||||
<form class='form-condensed' method='post' enctype='multipart/form-data' target='hiddenwin' id='dataform'>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo empty($task->team) ? $lang->task->assign : $lang->task->transferTo;?></th>
|
||||
<td><?php echo html::select('assignedTo', $members, $task->openedBy, "class='form-control chosen'");?></td><td></td>
|
||||
<td><?php echo html::select('assignedTo', $members, $task->nextBy, "class='form-control chosen'");?></td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->task->finishedDate;?></th>
|
||||
|
||||
@@ -19,7 +19,7 @@ $config->testcase->export->listFields = array('type', 'stage', 'pri', 'status'
|
||||
|
||||
$config->testcase->exportFields = '
|
||||
id, product, branch, module, story,
|
||||
title, precondition, stepDesc, stepExpect, keywords,
|
||||
title, precondition, stepDesc, stepExpect, real, keywords,
|
||||
pri, type, stage, status, bugsAB, resultsAB, stepNumberAB, lastRunResult, openedBy, openedDate,
|
||||
lastEditedBy, lastEditedDate, version, linkCase';
|
||||
|
||||
|
||||
@@ -1106,6 +1106,17 @@ class testcase extends control
|
||||
}
|
||||
}
|
||||
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TESTRESULT)
|
||||
->where('`case`')->in(array_keys($cases))
|
||||
->beginIF($taskID)->andWhere('run')->eq($taskID)->fi()
|
||||
->orderBy('id_desc')
|
||||
->query();
|
||||
$results = array();
|
||||
while($result = $stmt->fetch())
|
||||
{
|
||||
if(!isset($results[$result->case])) $results[$result->case] = unserialize($result->stepResults);
|
||||
}
|
||||
|
||||
/* Get users, products and projects. */
|
||||
$users = $this->loadModel('user')->getPairs('noletter');
|
||||
$products = $this->loadModel('product')->getPairs('nocode');
|
||||
@@ -1134,7 +1145,7 @@ class testcase extends control
|
||||
$relatedModules = $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in($relatedModuleIdList)->fetchPairs();
|
||||
$relatedStories = $this->dao->select('id,title')->from(TABLE_STORY) ->where('id')->in($relatedStoryIdList)->fetchPairs();
|
||||
$relatedCases = $this->dao->select('id, title')->from(TABLE_CASE)->where('id')->in($relatedCaseIdList)->fetchPairs();
|
||||
$relatedSteps = $this->dao->select('parent,`case`,version,type,`desc`,expect')->from(TABLE_CASESTEP)->where('`case`')->in(@array_keys($cases))->orderBy('version desc,id')->fetchGroup('case');
|
||||
$relatedSteps = $this->dao->select('id,parent,`case`,version,type,`desc`,expect')->from(TABLE_CASESTEP)->where('`case`')->in(@array_keys($cases))->orderBy('version desc,id')->fetchGroup('case', 'id');
|
||||
$relatedModules = array('0' => '/') + $relatedModules;
|
||||
|
||||
$cases = $this->testcase->appendData($cases);
|
||||
@@ -1142,6 +1153,9 @@ class testcase extends control
|
||||
{
|
||||
$case->stepDesc = '';
|
||||
$case->stepExpect = '';
|
||||
$case->real = '';
|
||||
$result = isset($results[$case->id]) ? $results[$case->id] : array();
|
||||
if($case->lastRunResult == 'fail' and !isset($relatedSteps[$case->id]) and !empty($result)) $case->real = $result[0]['real'];
|
||||
if(isset($relatedSteps[$case->id]))
|
||||
{
|
||||
$i = $childId = 0;
|
||||
@@ -1162,6 +1176,7 @@ class testcase extends control
|
||||
$sign = (in_array($this->post->fileType, array('html', 'xml'))) ? '<br />' : "\n";
|
||||
$case->stepDesc .= $stepId . ". " . $step->desc . $sign;
|
||||
$case->stepExpect .= $stepId . ". " . $step->expect . $sign;
|
||||
if($case->lastRunResult == 'fail') $case->real .= $stepId . ". " . (isset($result[$step->id]) ? $result[$step->id]['real'] : '') . $sign;
|
||||
$childId ++;
|
||||
}
|
||||
}
|
||||
@@ -1531,7 +1546,7 @@ class testcase extends control
|
||||
$num = $out[1];
|
||||
$sign = $out[2];
|
||||
$signbit = $sign == '.' ? 1 : 3;
|
||||
$step = trim(substr($step, strlen($num) + $signbit));
|
||||
$step = trim(substr($step, strpos($step, $sign) + $signbit));
|
||||
if(!empty($step)) $caseStep[$num]['content'] = $step;
|
||||
$caseStep[$num]['type'] = 'step';
|
||||
}
|
||||
|
||||
@@ -57,6 +57,30 @@ $(document).ready(function()
|
||||
$(this).val(value);
|
||||
}
|
||||
});
|
||||
|
||||
$(document).keydown(function(event)
|
||||
{
|
||||
if(event.ctrlKey && event.keyCode == 38)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('up');
|
||||
}
|
||||
else if(event.ctrlKey && event.keyCode == 40)
|
||||
{
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
selectFocusJump('down');
|
||||
}
|
||||
else if(event.keyCode == 38)
|
||||
{
|
||||
inputFocusJump('up');
|
||||
}
|
||||
else if(event.keyCode == 40)
|
||||
{
|
||||
inputFocusJump('down');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -75,4 +75,4 @@ $(document).on('change', 'select', function()
|
||||
$(this).trigger("chosen:updated");
|
||||
$(this).trigger("change");
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
@@ -1307,7 +1307,10 @@ class testcaseModel extends model
|
||||
echo $this->lang->testcase->typeList[$case->type];
|
||||
break;
|
||||
case 'stage':
|
||||
foreach(explode(',', trim($case->stage, ',')) as $stage) echo $this->lang->testcase->stageList[$stage] . '<br />';
|
||||
$stages = '';
|
||||
foreach(explode(',', trim($case->stage, ',')) as $stage) $stages .= $this->lang->testcase->stageList[$stage] . ',';
|
||||
$stages = trim($stages, ',');
|
||||
echo "<span title='$stages'>$stages</span>";
|
||||
break;
|
||||
case 'status':
|
||||
if($case->needconfirm)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<small class='text-muted'><?php echo html::icon($lang->icons['story']) . ' ' . $story->title ?></small>
|
||||
<?php endif;?>
|
||||
<div class='actions'>
|
||||
<?php echo html::commonButton($lang->pasteText, "data-toggle='myModal' ")?>
|
||||
<?php echo html::commonButton($lang->pasteText, "data-toggle='myModal'", 'btn btn-primary')?>
|
||||
<button type="button" class="btn btn-default" data-toggle="customModal"><i class='icon icon-cog'></i></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+11
-5
@@ -574,7 +574,12 @@ class treeModel extends model
|
||||
if($startModule) $startModulePath = $startModule->path . '%';
|
||||
}
|
||||
|
||||
$projectModules = $this->getTaskTreeModules($rootID, true);
|
||||
$projectModules = $this->getTaskTreeModules($rootID, true);
|
||||
$projectBranches = $this->dao->select('DISTINCT t2.branch')->from(TABLE_PROJECTSTORY)->alias('t1')
|
||||
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
|
||||
->where('t1.project')->eq($rootID)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->fetchPairs();
|
||||
|
||||
/* Get module according to product. */
|
||||
$products = $this->loadModel('product')->getProductsByProject($rootID);
|
||||
@@ -602,12 +607,13 @@ class treeModel extends model
|
||||
while($module = $stmt->fetch())
|
||||
{
|
||||
/* if not manage, ignore unused modules. */
|
||||
if(!isset($projectModules[$module->id])) continue;
|
||||
$this->buildTree($treeMenu, $module, 'task', $userFunc, $extra);
|
||||
if(isset($projectModules[$module->id])) $this->buildTree($treeMenu, $module, 'task', $userFunc, $extra);
|
||||
}
|
||||
if(isset($treeMenu[0]) and $branch)
|
||||
if((isset($treeMenu[0]) and $branch) or isset($projectBranches[$branch]))
|
||||
{
|
||||
$treeMenu[0] = "<li>" . html::a($link, $branchName, '_self', "id='branch$branch'") . "<ul>{$treeMenu[0]}</ul></li>";
|
||||
$childMenu = isset($treeMenu[0]) ? "<ul>{$treeMenu[0]}</ul>" : '';
|
||||
$link = helper::createLink('project', 'story', "project=$rootID&ordery=&status=byBranch&praram=$branch");
|
||||
if($branchName) $treeMenu[0] = "<li>" . html::a($link, $branchName, '_self', "id='branch$branch'") . "{$childMenu}</li>";
|
||||
}
|
||||
$tree .= isset($treeMenu[0]) ? $treeMenu[0] : '';
|
||||
}
|
||||
|
||||
@@ -1938,4 +1938,25 @@ class upgradeModel extends model
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change story field width.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function changeStoryWidth()
|
||||
{
|
||||
$projectCustom = $this->dao->select('*')->from(TABLE_CONFIG)->where('section')->eq('projectTask')->andWhere('`key`')->in('cols,tablecols')->fetchAll('id');
|
||||
foreach($projectCustom as $configID => $projectTask)
|
||||
{
|
||||
$fields = json_decode($projectTask->value);
|
||||
foreach($fields as $i => $field)
|
||||
{
|
||||
if($field->id == 'story') $field->width = '40px';
|
||||
}
|
||||
$this->dao->update(TABLE_CONFIG)->set('value')->eq(json_encode($fields))->where('id')->eq($configID)->exec();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,11 +61,11 @@ if(empty($config->notMd5Pwd))js::import($jsRoot . 'md5.js');
|
||||
<span><?php echo $lang->user->loginWithDemoUser; ?></span>
|
||||
<?php
|
||||
$sign = $config->requestType == 'GET' ? '&' : '?';
|
||||
if(isset($demoUsers['productManager'])) echo html::a(inlink('login') . $sign . "account=productManager&password=123456", $demoUsers['productManager'], 'hiddenwin');
|
||||
if(isset($demoUsers['projectManager'])) echo html::a(inlink('login') . $sign . "account=projectManager&password=123456", $demoUsers['projectManager'], 'hiddenwin');
|
||||
if(isset($demoUsers['testManager'])) echo html::a(inlink('login') . $sign . "account=testManager&password=123456", $demoUsers['testManager'], 'hiddenwin');
|
||||
if(isset($demoUsers['dev1'])) echo html::a(inlink('login') . $sign . "account=dev1&password=123456", $demoUsers['dev1'], 'hiddenwin');
|
||||
if(isset($demoUsers['tester1'])) echo html::a(inlink('login') . $sign . "account=tester1&password=123456", $demoUsers['tester1'], 'hiddenwin');
|
||||
foreach($demoUsers as $demoUser => $demoRealname)
|
||||
{
|
||||
if(strpos($this->app->company->admins, ",{$demoUser},") !== false) continue;
|
||||
echo html::a(inlink('login') . $sign . "account={$demoUser}&password=" . md5(md5('123456') + $this->session->rand), $demoRealname, 'hiddenwin');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -1941,6 +1941,51 @@ function revertModuleCookie()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Focus move up or down for input.
|
||||
*
|
||||
* @param type up|down
|
||||
*/
|
||||
function inputFocusJump(type){
|
||||
var hasFocus = $('input').is(':focus');
|
||||
if(hasFocus)
|
||||
{
|
||||
var title = $("input:focus").attr('name').replace(/\[\d]/g, '');
|
||||
var $input = $(":input[name^=" + title + "]:text:not(:disabled):not([name*='%'])");
|
||||
var num = $input.length;
|
||||
var index = parseInt($("input:focus").attr('name').replace(/[^0-9]/g, ''));
|
||||
var nextIndex = type == 'down' ? index + 1 : index - 1;
|
||||
|
||||
if(nextIndex < num && nextIndex >= 0)
|
||||
{
|
||||
$input[nextIndex].focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Focus move up or down for select.
|
||||
*
|
||||
* @param type
|
||||
*/
|
||||
function selectFocusJump(type)
|
||||
{
|
||||
var hasFocus = $('select').is(':focus');
|
||||
if(hasFocus)
|
||||
{
|
||||
var title = $("select:focus").attr('name').replace(/\[\d]/g, '');
|
||||
var $select = $("select[name^=" + title + "]:not([name*='%'])");
|
||||
var num = $select.length;
|
||||
var index = parseInt($("select:focus").attr('name').replace(/[^0-9]/g, ''));
|
||||
var nextIndex = type == 'down' ? index + 1 : index - 1;
|
||||
|
||||
if(nextIndex < num && nextIndex >= 0)
|
||||
{
|
||||
$select[nextIndex].focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Ping the server every some minutes to keep the session. */
|
||||
needPing = true;
|
||||
|
||||
@@ -1997,4 +2042,17 @@ $(document).ready(function()
|
||||
initHelpLink();
|
||||
checkTutorial();
|
||||
revertModuleCookie();
|
||||
|
||||
/* Adjust for dropdown position. */
|
||||
$('li.dropdown-submenu').mouseover(function()
|
||||
{
|
||||
$('li.dropdown-submenu > .dropdown-menu').each(function()
|
||||
{
|
||||
if($(this).css('display') == 'block')
|
||||
{
|
||||
var topPosition = $(this).offset().top;
|
||||
if(topPosition < 0) $(this).css('bottom', Number($(this).css('bottom').replace('px', '')) + topPosition);
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user