Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3

This commit is contained in:
wangyidong
2021-06-03 09:47:34 +08:00
49 changed files with 827 additions and 344 deletions
+1 -1
View File
@@ -25,4 +25,4 @@ ALTER TABLE `zt_testtask` ADD `type` varchar(255) NOT NULL DEFAULT '' AFTER `bui
ALTER TABLE `zt_testtask` ADD `testreport` mediumint(8) unsigned NOT NULL AFTER `status`;
ALTER TABLE `zt_story` MODIFY COLUMN `reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00';
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'story', '', 'reivewRules', 'allpass');
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'story', '', 'reviewRules', 'allpass');
+1 -1
View File
@@ -4208,4 +4208,4 @@ INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', 'global', 'mode', 'new');
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'unitList', 'CNY,USD');
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'defaultCurrency', 'CNY');
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'story', '', 'reivewRules', 'allpass');
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'story', '', 'reviewRules', 'allpass');
+47 -45
View File
@@ -105,51 +105,53 @@ $lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> als <strong>$extra</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, hinzugefügt durch <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> zugewisen an <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, geschlossen von <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> löschte <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> bearbeitete <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, wiederhergestellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, versteckt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, hinzugefügt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, aktiviert von <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, geblockt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, verschoben von <strong>$actor</strong> , ursprünglich "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> hat die Anpassung der Story bestätigt. Das letzte Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> hat die Anpassung des Falls bestätigt. Das letzte Build ist <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> hat den Bug bestätigt.' . "\n";
$lang->action->desc->frombug = '$date, konvertiert von <strong>$actor</strong>. Die ID war <strong>$extra</strong>.';
$lang->action->desc->started = '$date, gestartet von <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, zurückgestellt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, ausgesetzt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, aufgenommen von <strong>$actor</strong> und hat <strong>$extra</strong> Stunden aufgebraucht.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> Stunden angepaast.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> Stunden gelöscht.';
$lang->action->desc->canceled = '$date, abgebrochen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, abgeschlossen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, pausiert von <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, überprüft von <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> wurde geändert. Es war "%s" und ist jetzt "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> wurde geändert. Die Differenz ist ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n";
$lang->action->desc->linked2bug = '$date Verknüpft mit <strong>$extra</strong> von <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> als <strong>$extra</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, hinzugefügt durch <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> zugewisen an <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, geschlossen von <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> löschte <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> bearbeitete <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, wiederhergestellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, versteckt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, hinzugefügt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, aktiviert von <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, geblockt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, verschoben von <strong>$actor</strong> , ursprünglich "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> hat die Anpassung der Story bestätigt. Das letzte Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> hat die Anpassung des Falls bestätigt. Das letzte Build ist <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> hat den Bug bestätigt.' . "\n";
$lang->action->desc->frombug = '$date, konvertiert von <strong>$actor</strong>. Die ID war <strong>$extra</strong>.';
$lang->action->desc->started = '$date, gestartet von <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, zurückgestellt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, ausgesetzt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, aufgenommen von <strong>$actor</strong> und hat <strong>$extra</strong> Stunden aufgebraucht.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> Stunden angepaast.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> Stunden gelöscht.';
$lang->action->desc->canceled = '$date, abgebrochen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, abgeschlossen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, pausiert von <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, überprüft von <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> wurde geändert. Es war "%s" und ist jetzt "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> wurde geändert. Die Differenz ist ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n";
$lang->action->desc->linked2bug = '$date Verknüpft mit <strong>$extra</strong> von <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* 子任务修改父任务的历史操作记录 */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
+47 -45
View File
@@ -109,51 +109,53 @@ $lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, added by <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> deleted <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> edited <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restored by <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, hidden by <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, added by <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it cost <strong>$extra</strong> hours.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, added by <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> deleted <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> edited <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restored by <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, hidden by <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, added by <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it cost <strong>$extra</strong> hours.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* Used to describe the history of operations related to parent-child tasks. */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
+47 -45
View File
@@ -105,51 +105,53 @@ $lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> en tant que <strong>$extra</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, initié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, créé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, ajouter par <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, modifié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, édité par <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> affecté à <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, fermé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> a supprimé <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> a édité <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restauré par <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, masqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, ajouté par <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, bloqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, déplacé par <strong>$actor</strong> , qui était "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> a confirmé la modification de la story. Le dernier build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> a confirmé la modification du CasTest. Le dernier build est <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> a confirmé le Bug.' . "\n";
$lang->action->desc->frombug = '$date, converti par <strong>$actor</strong>. Son ID était <strong>$extra</strong>.';
$lang->action->desc->started = '$date, commencé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, reprise par <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, ajourné par <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspendu par <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, enregistré par <strong>$actor</strong> et son coût est de <strong>$extra</strong> heures.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> a édité son temps estimé.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> a supprimé son estimation de temps.';
$lang->action->desc->canceled = '$date, annulé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, terminé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, mis en pause par <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verifié par <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> a changé. Il est passé de "%s" à "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> a changé. La différence est ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n";
$lang->action->desc->linked2bug = '$date, affecté à <strong>$extra</strong> par <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> en tant que <strong>$extra</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, initié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, créé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, ajouter par <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, modifié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, édité par <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> affecté à <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, fermé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> a supprimé <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> a édité <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restauré par <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, masqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, ajouté par <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, bloqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, déplacé par <strong>$actor</strong> , qui était "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> a confirmé la modification de la story. Le dernier build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> a confirmé la modification du CasTest. Le dernier build est <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> a confirmé le Bug.' . "\n";
$lang->action->desc->frombug = '$date, converti par <strong>$actor</strong>. Son ID était <strong>$extra</strong>.';
$lang->action->desc->started = '$date, commencé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, reprise par <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, ajourné par <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspendu par <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, enregistré par <strong>$actor</strong> et son coût est de <strong>$extra</strong> heures.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> a édité son temps estimé.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> a supprimé son estimation de temps.';
$lang->action->desc->canceled = '$date, annulé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, terminé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, mis en pause par <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verifié par <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> a changé. Il est passé de "%s" à "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> a changé. La différence est ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n";
$lang->action->desc->linked2bug = '$date, affecté à <strong>$extra</strong> par <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* 子任务修改父任务的历史操作记录 */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> a créé un sous-tâche <strong>$extra</strong>。' . "\n";
+47 -45
View File
@@ -105,51 +105,53 @@ $lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> như <strong>$extra</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, thêm bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, được đóng bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> đã xóa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> đã sửa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, khôi phục bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, ẩn bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, được thêm bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, kích hoạt bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, chuyển bởi <strong>$actor</strong> , cái là "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, ghi nhận bởi <strong>$actor</strong> and it cost <strong>$extra</strong> giờ.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, liên kết tới <strong>$extra</strong> bởi <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> như <strong>$extra</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, thêm bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, được đóng bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> đã xóa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> đã sửa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, khôi phục bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, ẩn bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, được thêm bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, kích hoạt bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, chuyển bởi <strong>$actor</strong> , cái là "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, ghi nhận bởi <strong>$actor</strong> and it cost <strong>$extra</strong> giờ.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, liên kết tới <strong>$extra</strong> bởi <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* Used to describe the history of operations related to parent-child tasks. */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
+47 -45
View File
@@ -109,51 +109,53 @@ $lang->action->objectTypes['gapanalysis'] = '能力差距分析';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 变更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 编辑。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派给 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 关闭。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 删除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 编辑了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 还原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隐藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加备注。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移动,之前为 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 确认' . $lang->SRCommon . '变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 确认用例变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 确认Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug转化而来,Bug编号为 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 启动。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 继续。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 挂起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 记录工时,消耗 <strong>$extra</strong> 小时。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 编辑工时。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 删除工时。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解决。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 维护。' . "\n";
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 变更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 编辑。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派给 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 关闭。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 删除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 编辑了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 还原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隐藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加备注。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移动,之前为 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 确认' . $lang->SRCommon . '变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 确认用例变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 确认Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug转化而来,Bug编号为 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 启动。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 继续。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 挂起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 记录工时,消耗 <strong>$extra</strong> 小时。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 编辑工时。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 删除工时。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
$lang->action->desc->linked2testtask = '$date 由 <strong>$actor</strong> 关联到测试单 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解决。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 维护。' . "\n";
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
$lang->action->desc->run = '$date, 由 <strong>$actor</strong> 执行。' . "\n";
/* 用来描述和父子任务相关的操作历史记录。*/
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
+47 -45
View File
@@ -106,51 +106,53 @@ $lang->action->objectTypes['whitelist'] = '白名單';
/* 用來描述操作歷史記錄。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 變更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 編輯。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派給 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 關閉。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 刪除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 編輯了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 還原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隱藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加備註。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移動,之前為 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 確認' . $lang->SRCommon . '變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 確認用例變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 確認Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug轉化而來,Bug編號為 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 啟動。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 繼續。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 掛起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 記錄工時,消耗 <strong>$extra</strong> 小時。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 編輯工時。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 刪除工時。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解決。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 維護。' . "\n";
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 變更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 編輯。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派給 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 關閉。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 刪除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 編輯了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 還原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隱藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加備註。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移動,之前為 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 確認' . $lang->SRCommon . '變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 確認用例變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 確認Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug轉化而來,Bug編號為 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 啟動。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 繼續。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 掛起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 記錄工時,消耗 <strong>$extra</strong> 小時。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 編輯工時。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 刪除工時。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
$lang->action->desc->linked2testtask = '$date 由 <strong>$actor</strong> 關聯到測試單 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解決。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 維護。' . "\n";
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
$lang->action->desc->run = '$date, 由 <strong>$actor</strong> 執行。' . "\n";
/* 用來描述和父子任務相關的操作歷史記錄。*/
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 創建子任務 <strong>$extra</strong>。' . "\n";
+2 -2
View File
@@ -80,7 +80,7 @@ class actionModel extends model
if($objectType == 'story' and $actionType !== 'reviewed' and strpos('reviewclosed,passreviewed,clarifyreviewed', $actionType) !== false) $action->actor = 'System';
if($objectType == 'case' and (strpos(',linked2testtask,unlinkedfromtesttask,assigned,run,', ',' . $actionType . ',') !== false))
if($objectType == 'case' and (strpos(',linked2testtask,unlinkedfromtesttask,assigned,run,', ',' . $actionType . ',') !== false) and (int)$extra)
{
$testtask = $this->dao->select('project,execution')->from(TABLE_TESTTASK)->where('id')->eq((int)$extra)->fetch();
$action->project = $testtask->project;
@@ -631,7 +631,7 @@ class actionModel extends model
*/
if(empty($desc))
{
if($action->objectType == 'story' and $action->action = 'reviewed' and strpos($action->extra, ',') !== false)
if($action->objectType == 'story' and $action->action == 'reviewed' and strpos($action->extra, ',') !== false)
{
$desc = $this->lang->$objectType->action->rejectreviewed;
}
+2 -2
View File
@@ -182,10 +182,10 @@ $lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new'
/* Scrum menu. */
$lang->scrum->menu = new stdclass();
$lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s");
$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s");
$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport');
$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track');
$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|objectLibs|type=project&objectID=%s", 'subModule' => 'doc');
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport');
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit');
$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo');
$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s");
$lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease');
+8 -5
View File
@@ -1399,16 +1399,19 @@ EOD;
if(strtolower($key) == 'editedby') continue;
if(strtolower($key) == 'editeddate') continue;
if(strtolower($key) == 'uid') continue;
if(strtolower($key) == 'finisheddate' && $value == '') continue;
if(strtolower($key) == 'canceleddate' && $value == '') continue;
if(strtolower($key) == 'closeddate' && $value == '') continue;
if(strtolower($key) == 'finisheddate' && $value == '') continue;
if(strtolower($key) == 'canceleddate' && $value == '') continue;
if(strtolower($key) == 'hangupeddate' && $value == '') continue;
if(strtolower($key) == 'lastcheckeddate' && $value == '') continue;
if(strtolower($key) == 'activateddate' && $value == '') continue;
if(strtolower($key) == 'closeddate' && $value == '') continue;
if(isset($old->$key) and $value != stripslashes($old->$key))
{
$diff = '';
if(substr_count($value, "\n") > 1 or
substr_count($old->$key, "\n") > 1 or
strpos('name,title,desc,spec,steps,content,digest,verify,report,analysis,prevention,resolution', strtolower($key)) !== false)
strpos('name,title,desc,spec,steps,content,digest,verify,report,analysis,summary,prevention,resolution', strtolower($key)) !== false)
{
$diff = commonModel::diff($old->$key, $value);
}
@@ -1720,7 +1723,7 @@ EOD;
$method = $this->app->rawMethod;
}
if(!empty($this->app->user->modifyPassword) and (($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword', '', '', true)));
if(!empty($this->app->user->modifyPassword) and (($module != 'user' or $method != 'deny') and ($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword', '', '', true)));
if($this->isOpenMethod($module, $method)) return true;
if(!$this->loadModel('user')->isLogon() and $this->server->php_auth_user) $this->user->identifyByPhpAuth();
if(!$this->loadModel('user')->isLogon() and $this->cookie->za) $this->user->identifyByCookie();
+1
View File
@@ -966,6 +966,7 @@ class execution extends control
*/
public function testreport($executionID = 0, $objectType = 'execution', $extra = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
if($this->app->openApp == 'project') $this->loadModel('project')->setMenu($this->session->project);
echo $this->fetch('testreport', 'browse', "objectID=$executionID&objectType=$objectType&extra=$extra&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
+2
View File
@@ -312,6 +312,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
$lang->execution->tips = 'Hinweis';
$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie ";
+2
View File
@@ -312,6 +312,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
+2
View File
@@ -312,6 +312,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un.";
$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez ";
+2
View File
@@ -312,6 +312,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Không có {$lang->productCommon} liên kết tới {$lang->executionCommon}. Bạn sẽ được chuyển tới trang {$lang->productCommon} để liên kết.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} không thể liên kết tới {$lang->productCommon} giống nhau 2 lần.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Truy cập của bạn tới {$lang->executionCommon} bị từ chối!";
$lang->execution->tips = 'Ghi chú';
$lang->execution->afterInfo = "{$lang->executionCommon} được tạo. Tiếp theo bạn có thể ";
+2
View File
@@ -312,6 +312,8 @@ $lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项
$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。";
$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的结束时间不能大于所属项目的结束时间%s。";
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
+66 -1
View File
@@ -295,6 +295,17 @@ class executionModel extends model
/* Determine whether to add a sprint or a stage according to the model of the execution. */
$project = $this->loadModel('project')->getByID($_POST['project']);
if($_POST['begin'] < $project->begin and $this->config->systemMode == 'new')
{
dao::$errors['begin'] = sprintf($this->lang->execution->errorBegin, $project->begin);
return false;
}
if($_POST['end'] > $project->end and $this->config->systemMode == 'new')
{
dao::$errors['end'] = sprintf($this->lang->execution->errorEnd, $project->end);
return false;
}
$type = zget($this->config->execution->modelList, $project->model, 'sprint');
$this->config->execution->create->requiredFields .= ',project';
@@ -335,6 +346,14 @@ class executionModel extends model
}
$sprint = $this->loadModel('file')->processImgURL($sprint, $this->config->execution->editor->create['id'], $this->post->uid);
/* Replace required language. */
if($this->app->openApp == 'project')
{
$this->lang->project->name = $this->lang->execution->name;
$this->lang->project->code = $this->lang->execution->code;
}
$this->dao->insert(TABLE_EXECUTION)->data($sprint)
->autoCheck($skipFields = 'begin,end')
->batchcheck($this->config->execution->create->requiredFields, 'notempty')
@@ -453,6 +472,18 @@ class executionModel extends model
->remove('products, branch, uid, plans')
->get();
$project = $this->dao->select('begin, end')->from(TABLE_PROJECT)->where('id')->eq($oldExecution->project)->fetch();
if($execution->begin < $project->begin and $this->config->systemMode == 'new')
{
dao::$errors['begin'] = sprintf($this->lang->execution->errorBegin, $project->begin);
return false;
}
if($execution->end > $project->end and $this->config->systemMode == 'new')
{
dao::$errors['end'] = sprintf($this->lang->execution->errorEnd, $project->end);
return false;
}
/* Child stage inherits parent stage permissions. */
if(!isset($execution->acl)) $execution->acl = $oldExecution->acl;
if($execution->acl == 'open') $execution->whitelist = '';
@@ -469,6 +500,10 @@ class executionModel extends model
if(!empty($execution->realBegan) and !empty($execution->realEnd)) $execution->realDuration = $this->loadModel('programplan')->getDuration($execution->realBegan, $execution->realEnd);
}
/* Replace required language. */
$this->lang->project->name = $this->lang->execution->name;
$this->lang->project->code = $this->lang->execution->code;
/* Update data. */
$this->dao->update(TABLE_EXECUTION)->data($execution)
->autoCheck($skipFields = 'begin,end')
@@ -532,6 +567,23 @@ class executionModel extends model
$oldExecutions = $this->getByIdList($this->post->executionIDList);
$nameList = array();
$codeList = array();
/* Replace required language. */
if($this->app->openApp == 'project')
{
$projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($this->session->project)->fetch('model');
if($projectModel == 'scrum')
{
$this->lang->project->name = $this->lang->execution->name;
$this->lang->project->code = $this->lang->execution->code;
}
else
{
$this->lang->project->name = str_replace($this->lang->project->common, $this->lang->project->stage, $this->lang->project->name);
$this->lang->project->code = str_replace($this->lang->project->common, $this->lang->project->stage, $this->lang->project->code);
}
}
foreach($data->executionIDList as $executionID)
{
$executionName = $data->names[$executionID];
@@ -578,7 +630,7 @@ class executionModel extends model
->checkIF($execution->begin != '', 'begin', 'date')
->checkIF($execution->end != '', 'end', 'date')
->checkIF($execution->end != '', 'end', 'gt', $execution->begin)
->check('code', 'unique', "id NOT " . helper::dbIN($data->executionIDList) . " and deleted='0'")
->checkIF($execution->code != '', 'code', 'unique', "id NOT " . helper::dbIN($data->executionIDList) . " and deleted='0'")
->where('id')->eq($executionID)
->limit(1)
->exec();
@@ -654,6 +706,19 @@ class executionModel extends model
->remove('comment')
->get();
$project = $this->dao->select('begin, end')->from(TABLE_PROJECT)->where('id')->eq($oldExecution->project)->fetch();
if($execution->begin < $project->begin and $this->config->systemMode == 'new')
{
dao::$errors['begin'] = sprintf($this->lang->execution->errorBegin, $project->begin);
return false;
}
if($execution->end > $project->end and $this->config->systemMode == 'new')
{
dao::$errors['end'] = sprintf($this->lang->execution->errorEnd, $project->end);
return false;
}
$this->dao->update(TABLE_EXECUTION)->data($execution)
->autoCheck()
->where('id')->eq((int)$executionID)
+1 -1
View File
@@ -103,7 +103,7 @@
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
if(common::hasPriv('execution', 'testreport'))
{
echo html::a($this->createLink('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="qa"');
echo html::a($this->createLink('execution', 'testreport', "executionID=$executionID&objctType=execution&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="execution"');
}
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
common::printIcon('testtask', 'delete', "taskID=$task->id", $task, 'list', 'trash', 'hiddenwin');
@@ -15,6 +15,8 @@ function addItem(obj)
function deleteItem(obj)
{
if($("table tr").size() < 3) return false;
var $currentLine= $(obj).closest('tr');
$currentLine.remove();
}
+2 -2
View File
@@ -337,7 +337,7 @@ class groupModel extends model
}
/**
* Update view priv
* Update view priv.
*
* @param int $groupID
* @access public
@@ -355,7 +355,7 @@ class groupModel extends model
$dynamic = array();
foreach($actions['actions'] as $moduleName => $moduleActions)
{
if($moduleName != 'my' and !isset($actions['views'][$moduleName])) continue;
if($moduleName != 'todo' and isset($actions['views']) and !in_array($this->lang->navGroup->$moduleName, $actions['views'])) continue;
$dynamic[$moduleName] = $moduleActions;
}
@@ -71,8 +71,8 @@
<tr>
<td class='text-center form-actions' colspan='5'>
<?php
echo html::submitButton('', '', "btn btn-primary");
echo html::linkButton($lang->goback, $this->createLink('group', 'browse'));
echo html::submitButton();
echo html::linkButton($lang->goback, $this->createLink('group', 'browse'), 'self', '', 'btn btn-wide');
echo html::hidden('foo'); // Just a var, to make sure $_POST is not empty.
?>
</td>
+1
View File
@@ -742,6 +742,7 @@ class my extends control
if(!empty($_POST))
{
$_POST['account'] = $this->app->user->account;
$_POST['groups'] = $this->dao->select('`group`')->from(TABLE_USERGROUP)->where('account')->eq($this->post->account)->fetchPairs('group', 'group');
$this->user->update($this->app->user->id);
if(dao::isError()) die(js::error(dao::getError()));
die(js::locate($this->createLink('my', 'profile'), 'parent'));
+28
View File
@@ -37,3 +37,31 @@ $('#program').change(function()
$('#line').chosen();
})
})
/**
* Toggle line.
*
* @param object $obj
* @access public
* @return void
*/
function toggleLine(obj)
{
var $obj = $(obj);
if($obj.length == 0) return false;
var $line = $obj.closest('table').find('#line');
if($obj.prop('checked'))
{
$('form .line-no-exist').removeClass('hidden');
$('form .line-exist').addClass('hidden');
$line.attr('disabled', 'disabled');
}
else
{
$('form .line-exist').removeClass('hidden');
$('form .line-no-exist').addClass('hidden');
$line.removeAttr('disabled');
}
}
+1
View File
@@ -28,6 +28,7 @@ $lang->product->updateOrder = 'Ranking';
$lang->product->orderAction = "Rank {$lang->productCommon}";
$lang->product->all = "Alle {$lang->productCommon}";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Exportiere Daten';
$lang->product->exportAction = "Export {$lang->productCommon}";
$lang->product->dashboard = 'Dashboard';
+1
View File
@@ -26,6 +26,7 @@ $lang->product->closed = 'Closed';
$lang->product->updateOrder = 'Order';
$lang->product->all = "All {$lang->productCommon}s";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Export';
$lang->product->dashboard = "Dashboard";
$lang->product->changeProgram = "{$lang->productCommon} confirmation of the scope of influence of adjustment of the program set";
+1
View File
@@ -28,6 +28,7 @@ $lang->product->updateOrder = 'Ordre';
$lang->product->orderAction = "Rang {$lang->productCommon}";
$lang->product->all = "Tous les {$lang->productCommon}s";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Export';
$lang->product->exportAction = "Export {$lang->productCommon}";
$lang->product->dashboard = "Dashboard";
+1
View File
@@ -28,6 +28,7 @@ $lang->product->updateOrder = 'Sắp xếp';
$lang->product->orderAction = "Đánh giá {$lang->productCommon}";
$lang->product->all = "Tất cả {$lang->productCommon}";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Xuất';
$lang->product->exportAction = "Xuất {$lang->productCommon}";
$lang->product->dashboard = "Dashboard";
+1
View File
@@ -26,6 +26,7 @@ $lang->product->closed = '已关闭';
$lang->product->updateOrder = '排序';
$lang->product->all = "所有{$lang->productCommon}";
$lang->product->manageLine = "维护{$lang->productCommon}线";
$lang->product->newLine = "新建{$lang->productCommon}线";
$lang->product->export = '导出数据';
$lang->product->dashboard = "{$lang->productCommon}仪表盘";
$lang->product->changeProgram = "{$lang->productCommon}调整所属项目集影响范围确认";
+23 -1
View File
@@ -504,9 +504,31 @@ class productModel extends model
->setIF($this->post->acl == 'open', 'whitelist', '')
->stripTags($this->config->product->editor->create['id'], $this->config->allowedTags)
->join('whitelist', ',')
->remove('uid')
->remove('uid,newLine,lineName')
->get();
if(!empty($_POST['lineName']))
{
/* Insert product line. */
$maxOrder = $this->dao->select("max(`order`) as maxOrder")->from(TABLE_MODULE)->where('type')->eq('line')->fetch('maxOrder');
$maxOrder = $maxOrder ? $maxOrder + 10 : 0;
$line = new stdClass();
$line->type = 'line';
$line->parent = 0;
$line->grade = 1;
$line->name = $this->post->lineName;
$line->root = $product->program;
$line->order = $maxOrder;
$this->dao->insert(TABLE_MODULE)->data($line)->exec();
$lineID = $this->dao->lastInsertID();
$path = ",$lineID,";
$this->dao->update(TABLE_MODULE)->set('path')->eq($path)->where('id')->eq($lineID)->exec();
if(dao::isError()) return false;
$product->line = $lineID;
}
$product = $this->loadModel('file')->processImgURL($product, $this->config->product->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_PRODUCT)->data($product)->autoCheck()
->batchCheck($this->config->product->create->requiredFields, 'notempty')
+17
View File
@@ -29,7 +29,24 @@
<?php endif;?>
<tr>
<th class='w-140px'><?php echo $lang->product->line;?></th>
<?php if($programID):?>
<td>
<div class='input-group'>
<?php echo html::select("line", $lines, '', "class='form-control hidden line-exist'");?>
<?php echo html::input("lineName", '', "class='form-control line-no-exist'");?>
<?php if(count($lines)):?>
<span class='input-group-addon'>
<div class="checkbox-primary">
<input type="checkbox" name="newLine" value="0" checked onchange="toggleLine(this)" id="newLine0" />
<label for="newLine0"><?php echo $lang->product->newLine;?></label>
</div>
</span>
<?php endif;?>
</div>
</td>
<?php else:?>
<td><?php echo html::select('line', $lines, '', "class='form-control chosen'");?></td><td></td>
<?php endif;?>
</tr>
<tr>
<th><?php echo $lang->product->name;?></th>
+6
View File
@@ -1141,6 +1141,12 @@ class project extends control
$allUsers = $this->loadModel('dept')->getDeptUserPairs($deptID);
$otherUsers = array_diff_assoc($allUsers, $groupUsers);
if($this->config->systemMode == 'new')
{
$outsideUsers = $this->loadModel('user')->getPairs('outside|noclosed|noletter|noempty');
$this->view->outsideUsers = array_diff_assoc($outsideUsers, $groupUsers);
}
$title = $group->name . $this->lang->colon . $this->lang->group->manageMember;
$position[] = $group->name;
$position[] = $this->lang->group->manageMember;
+3 -3
View File
@@ -60,7 +60,7 @@
<th class='w-100px'><?php common::printOrderLink('begin', $orderBy, $vars, $lang->testtask->begin);?></th>
<th class='w-100px'><?php common::printOrderLink('end', $orderBy, $vars, $lang->testtask->end);?></th>
<th class='w-80px'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-actions-5 text-center'><?php echo $lang->actions;?></th>
<th class='<?php echo $project->model == 'scrum' ? 'c-actions-5' : 'c-actions-4';?> text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -92,9 +92,9 @@
{
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap');
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
if(common::hasPriv('execution', 'testreport'))
if(common::hasPriv('execution', 'testreport') and $project->model == 'scrum')
{
echo html::a($this->createLink('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="qa"');
echo html::a($this->createLink('execution', 'testreport', "executionID=$task->execution&objectType=execution&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="project"');
}
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
common::printIcon('testtask', 'delete', "taskID=$task->id", $task, 'list', 'trash', 'hiddenwin');
+1 -1
View File
@@ -149,7 +149,7 @@ class repoModel extends model
if(isset($productIdList[$productID])) $hasPriv = true;
}
if(!$haspriv) unset($repos[$i]);
if(!$hasPriv) unset($repos[$i]);
}
}
}
+2 -2
View File
@@ -434,7 +434,6 @@ class story extends control
$products = $this->product->getPairs();
$moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'story', 0, $branch);
/* Init vars. */
$planID = $plan;
$pri = 0;
@@ -494,6 +493,7 @@ class story extends control
$this->view->moduleID = $moduleID;
$this->view->moduleOptionMenu = $moduleOptionMenu;
$this->view->plans = $plans;
$this->view->users = $this->user->getPairs('pdfirst|noclosed|nodeleted');
$this->view->priList = $priList;
$this->view->sourceList = $sourceList;
$this->view->planID = $planID;
@@ -1097,7 +1097,7 @@ class story extends control
if(dao::isError()) die(js::error(dao::getError()));
if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchOther');
die(js::locate($this->session->storyList, 'parent'));
die(js::reload('parent'));
}
/**
+32 -7
View File
@@ -353,6 +353,16 @@ class storyModel extends model
*/
public function batchCreate($productID = 0, $branch = 0, $type = 'story')
{
foreach($_POST['needReview'] as $index => $value)
{
if($_POST['title'][$index] and isset($_POST['reviewer'][$index])) $_POST['reviewer'][$index] = array_filter($_POST['reviewer'][$index]);
if($_POST['title'][$index] and $value and !isset($_POST['reviewer'][$index]))
{
dao::$errors[] = $this->lang->story->errorEmptyReviewedBy;
return false;
}
}
$this->loadModel('action');
$branch = (int)$branch;
$productID = (int)$productID;
@@ -399,7 +409,8 @@ class storyModel extends model
$story->category = $stories->category[$i];
$story->pri = $stories->pri[$i];
$story->estimate = $stories->estimate[$i];
$story->status = ($stories->needReview[$i] == 0 and !$forceReview) ? 'active' : 'draft';
$story->status = ($this->app->openApp == project || $this->app->openApp == execution ||($stories->needReview[$i] == 0 and !$forceReview)) ? 'active' : 'draft';
$story->stage = ($this->app->openApp == project || $this->app->openApp == execution) ? 'projected' : 'wait';
$story->keywords = $stories->keywords[$i];
$story->sourceNote = $stories->sourceNote[$i];
$story->product = $productID;
@@ -489,6 +500,19 @@ class storyModel extends model
$this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec();
/* Save the story reviewer to storyreview table. */
if(isset($_POST['reviewer'][$i]))
{
foreach($_POST['reviewer'][$i] as $reviewer)
{
$reviewData = new stdclass();
$reviewData->story = $storyID;
$reviewData->version = 1;
$reviewData->reviewer = $reviewer;
$this->dao->insert(TABLE_STORYREVIEW)->data($reviewData)->exec();
}
}
$this->executeHooks($storyID);
$actionID = $this->action->create('story', $storyID, 'Opened', '');
@@ -498,7 +522,6 @@ class storyModel extends model
$mails[$i]->actionID = $actionID;
}
/* Remove upload image file and session. */
if(!empty($stories->uploadImage) and $this->session->storyImagesFile)
{
@@ -1192,10 +1215,11 @@ class storyModel extends model
$story->status = $this->setStatusByReviewRules($reviewerList);
if($story->status == 'closed')
{
$story->closedBy = $this->app->user->account;
$story->closedDate = $now;
$story->assignedTo = 'closed';
$story->stage = 'closed';
$story->closedBy = $this->app->user->account;
$story->closedDate = $now;
$story->assignedTo = 'closed';
$story->assignedDate = $now;
$story->stage = 'closed';
if($this->post->closedReason == 'done') $story->stage = 'released';
}
}
@@ -2470,8 +2494,9 @@ class storyModel extends model
->fi()
->beginIF($execution->type != 'project')
->beginIF(!empty($productParam))->andWhere('t1.product')->eq($productParam)->fi()
->beginIF($this->session->executionStoryBrowseType == 'unclosed')->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->beginIF(strpos('changed|closed', $this->session->executionStoryBrowseType) !== false)->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->fi()
->beginIF(strpos('changed|closed', $this->session->storyBrowseType) !== false)->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->beginIF(!empty($branchParam))->andWhere('t2.branch')->eq($branchParam)->fi()
->beginIF($modules)->andWhere('t2.module')->in($modules)->fi()
->andWhere('t2.deleted')->eq(0)
+11
View File
@@ -57,6 +57,7 @@
<th class='col-pri<?php echo zget($visibleFields, 'pri', ' hidden') . zget($requiredFields, 'pri', '', ' required');?>'><?php echo $lang->story->pri;?></th>
<th class='col-estimate<?php echo zget($visibleFields, 'estimate', ' hidden') . zget($requiredFields, 'estimate', '', ' required');?>'><?php echo $lang->story->estimate;?></th>
<th class='col-review<?php echo zget($visibleFields, 'review', ' hidden') . zget($requiredFields, 'review', '', ' required');?>'><?php echo $lang->story->needReview;?></th>
<th class='<?php echo zget($visibleFields, 'review', ' hidden');?>' style="width: 200px !important"><?php echo $lang->story->reviewedBy;?></th>
<th class='w-100px<?php echo zget($visibleFields, 'keywords', ' hidden') . zget($requiredFields, 'keywords', '', ' required');?>'><?php echo $lang->story->keywords;?></th>
<?php
$extendFields = $this->story->getFlowExtendFields();
@@ -95,6 +96,8 @@
<td class='text-left<?php echo zget($visibleFields, 'pri', ' hidden')?>' style='overflow:visible'><?php echo html::select('pri[$id]', $priList, $pri, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'estimate', 'hidden')?>'><?php echo html::input('estimate[$id]', $estimate, "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'review', 'hidden')?>'><?php echo html::select('needReview[$id]', $lang->story->reviewList, $needReview, "class='form-control'");?></td>
<?php $isDisabled = $needReview ? '' : 'disabled';?>
<td class='<?php echo zget($visibleFields, 'review', 'hidden')?>'><?php echo html::select('reviewer[$id][]', $users, '', "class='form-control chosen' multiple $isDisabled");?></td>
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input('keywords[$id]', '', "class='form-control'");?></td>
<?php foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . '[$id]') . "</td>";?>
</tr>
@@ -142,6 +145,14 @@ $(function()
}
}
});
$(document).on('change', "#mainContent select[name^=needReview]", function()
{
select = $(this).parent('td').next('td').children("select[name^=reviewer]");
$(select).removeAttr('disabled');
if($(this).val() == 0) $(select).attr('disabled', 'disabled');
$(select).trigger("chosen:updated");
})
});
</script>
<?php if(isset($execution)) js::set('execution', $execution);?>
+1 -1
View File
@@ -109,7 +109,7 @@ foreach(explode(',', $showFields) as $field)
<td title='<?php echo $story->title?>'>
<div class="input-group">
<div class="input-control has-icon-right">
<?php echo html::input("titles[$storyID]", $story->title, "class='form-control input-story-title'"); ?>
<?php echo html::input("titles[$storyID]", $story->title, "class='form-control input-story-title' disabled"); ?>
<div class="colorpicker">
<button type="button" class="btn btn-link dropdown-toggle" data-toggle="dropdown"><span class="cp-title"></span><span class="color-bar"></span><i class="ic"></i></button>
+8 -5
View File
@@ -97,9 +97,9 @@ class testreport extends control
$reports = $this->testreport->getList($objectID, $objectType, $extra, $orderBy, $pager);
if(strpos('project|execution', $objectType) !== false and isset($_POST['taskIdList']))
if(strpos('project|execution', $objectType) !== false and ($extra or isset($_POST['taskIdList'])))
{
$taskIdList = $_POST['taskIdList'];
$taskIdList = isset($_POST['taskIdList']) ? $_POST['taskIdList'] : array($extra);
foreach($reports as $reportID => $report)
{
$tasks = explode(',', $report->tasks);
@@ -114,8 +114,8 @@ class testreport extends control
if($objectType == 'product' and $extra) $param = "objectID=$extra&objectType=testtask";
if(($objectType == 'project' or $objectType == 'execution') and ($extra or !empty($_POST['taskIdList'])))
{
$param = "objectID=$objectID&objectType=$objectType";
if(isset($_POST['taskIdList'])) $param .= '&extra=' . join(',', $_POST['taskIdList']);
$param = "objectID=$objectID&objectType=$objectType";
$param .= isset($_POST['taskIdList']) ? '&extra=' . join(',', $_POST['taskIdList']) : '&extra=' . $extra;
}
if($param) $this->locate($this->createLink('testreport', 'create', $param));
}
@@ -196,6 +196,9 @@ class testreport extends control
$productID = $this->commonAction($task->product, 'product');
}
$this->view->taskPairs = $taskPairs;
if($this->app->openApp == 'execution') $this->execution->setMenu($task->execution);
if($this->app->openApp == 'project') $this->project->setMenu($task->project);
}
if(empty($objectID)) die(js::alert($this->lang->testreport->noObjectID) . js::locate('back'));
@@ -539,7 +542,7 @@ class testreport extends control
$this->view->actions = $this->loadModel('action')->getList('testreport', $reportID);
$this->view->storySummary = $this->product->summary($stories);
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $caseIdList, $report->begin, $report->end);
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases, $report->begin, $report->end);
$perCaseResult = $this->testreport->getPerCaseResult4Report($tasks, $caseIdList, $report->begin, $report->end);
$perCaseRunner = $this->testreport->getPerCaseRunner4Report($tasks, $caseIdList, $report->begin, $report->end);
+43 -31
View File
@@ -115,8 +115,8 @@ class testreportModel extends model
$objectID = (int)$objectID;
return $this->dao->select('*')->from(TABLE_TESTREPORT)
->where('deleted')->eq(0)
->beginIF($objectType == 'execution')->andWhere('objectID')->eq($objectID)->andWhere('objectType')->eq('execution')->fi()
->beginIF($objectType == 'project')->andWhere('project')->eq($objectID)->andWhere('objectType')->eq('execution')->fi()
->beginIF($objectType == 'execution')->andWhere('execution')->eq($objectID)->fi()
->beginIF($objectType == 'project')->andWhere('project')->eq($objectID)->fi()
->beginIF($objectType == 'product' and $extra)->andWhere('objectID')->eq((int)$extra)->andWhere('objectType')->eq('testtask')->fi()
->beginIF($objectType == 'product' and empty($extra))->andWhere('product')->eq($objectID)->fi()
->orderBy($orderBy)
@@ -328,30 +328,33 @@ class testreportModel extends model
->beginIF($idList)->andWhere('t2.id')->in($idList)->fi()
->andWhere('t2.deleted')->eq(0)
->page($pager)
->fetchAll('id');
->fetchGroup('task','id');
$results = $this->dao->select('t1.*')->from(TABLE_TESTRESULT)->alias('t1')
->leftJoin(TABLE_TESTRUN)->alias('t2')->on('t1.run=t2.id')
->where('t2.task')->in(array_keys($tasks))
->andWhere('t1.`case`')->in(array_keys($cases))
->andWhere('t1.date')->ge($begin)
->andWhere('t1.date')->le($end . " 23:59:59")
->orderBy('date')
->fetchAll('case');
foreach($cases as $caseID => $case)
foreach($cases as $taskID => $caseList)
{
$case->lastRunner = '';
$case->lastRunDate = '';
$case->lastRunResult = '';
$case->status = 'normal';
if(isset($results[$caseID]))
$results = $this->dao->select('t1.*')->from(TABLE_TESTRESULT)->alias('t1')
->leftJoin(TABLE_TESTRUN)->alias('t2')->on('t1.run=t2.id')
->where('t2.task')->eq($taskID)
->andWhere('t1.`case`')->in(array_keys($caseList))
->andWhere('t1.date')->ge($begin)
->andWhere('t1.date')->le($end . " 23:59:59")
->orderBy('date')
->fetchAll('case');
foreach($caseList as $caseID => $case)
{
$result = $results[$caseID];
$case->lastRunner = $result->lastRunner;
$case->lastRunDate = $result->date;
$case->lastRunResult = $result->caseResult;
$case->status = $result->caseResult == 'blocked' ? 'blocked' : 'normal';
$case->lastRunner = '';
$case->lastRunDate = '';
$case->lastRunResult = '';
$case->status = 'normal';
if(isset($results[$caseID]))
{
$result = $results[$caseID];
$case->lastRunner = $result->lastRunner;
$case->lastRunDate = $result->date;
$case->lastRunResult = $result->caseResult;
$case->status = $result->caseResult == 'blocked' ? 'blocked' : 'normal';
}
}
}
@@ -390,23 +393,32 @@ class testreportModel extends model
*/
public function getResultSummary($tasks, $cases, $begin, $end)
{
$caseCount = 0;
$casesList = array();
foreach($cases as $taskID => $caseList)
{
foreach($caseList as $caseID => $case)
{
$casesList[$caseID] = $case;
$caseCount++;
}
}
$results = $this->dao->select('t1.*')->from(TABLE_TESTRESULT)->alias('t1')
->leftJoin(TABLE_TESTRUN)->alias('t2')->on('t1.run=t2.id')
->where('t2.task')->in(array_keys($tasks))
->andWhere('t1.`case`')->in(array_keys($cases))
->andWhere('t1.`case`')->in(array_keys($casesList))
->andWhere('t1.date')->ge($begin)
->andWhere('t1.date')->le($end . " 23:59:59")
->orderBy('date')
->fetchAll('id');
$failResults = array();
$failResults = 0;
$runCasesNum = array();
foreach($results as $result)
{
$runCasesNum[$result->case] = $result->case;
if($result->caseResult == 'fail') $failResults[$result->case] = $result->case;
}
return sprintf($this->lang->testreport->caseSummary, count($cases), count($runCasesNum), count($results), count($failResults));
foreach($results as $result) $runCasesNum[$result->run] = $result->caseResult;
foreach($runCasesNum as $lastResult) if($lastResult == 'fail') $failResults++;
return sprintf($this->lang->testreport->caseSummary, $caseCount, count($runCasesNum), count($results), $failResults);
}
/**
+4 -2
View File
@@ -16,7 +16,8 @@
<?php if($cases):?>
<tbody>
<?php $i = 0;?>
<?php foreach($cases as $case):?>
<?php foreach($cases as $taskID => $caseList):?>
<?php foreach($caseList as $case):?>
<?php if(!isset($pager) and $i > 50):?>
<?php echo html::hidden('cases[]', $case->id);?>
<?php else:?>
@@ -37,9 +38,10 @@
<?php endif;?>
<?php $i++;?>
<?php endforeach;?>
<?php endforeach;?>
<?php if(!isset($pager) and $i > 50):?>
<tr>
<td colspan='9'><?php echo sprintf($lang->testreport->hiddenCase, count($cases) - 50);?></td>
<td colspan='9'><?php echo sprintf($lang->testreport->hiddenCase, $i - 50);?></td>
</tr>
<?php endif;?>
</tbody>
+1 -1
View File
@@ -1437,7 +1437,7 @@ class testtaskModel extends model
case 'status':
if($caseChanged)
{
echo "<span class='warning'>{$this->lang->testcase->changed}</span>";
echo "<span title='{$this->lang->testcase->changed}' class='warning'>{$this->lang->testcase->changed}</span>";
}
else
{
+4 -2
View File
@@ -282,11 +282,12 @@ class todo extends control
{
$confirmNote = 'confirm' . ucfirst($todo->type);
$confirmURL = $this->createLink($todo->type, 'view', "id=$todo->idvalue");
$okTarget = isonlybody() ? 'parent' : 'window.parent.$.apps.open';
if($todo->type == 'bug') $app = 'qa';
if($todo->type == 'task') $app = 'execution';
if($todo->type == 'story') $app = 'product';
$cancelURL = $this->server->HTTP_REFERER;
die(js::confirm(sprintf($this->lang->todo->$confirmNote, $todo->idvalue), $confirmURL, $cancelURL, 'window.parent.$.apps.open', 'parent', $app));
die(js::confirm(sprintf($this->lang->todo->$confirmNote, $todo->idvalue), $confirmURL, $cancelURL, $okTarget, 'parent', $app));
}
if(isonlybody())die(js::reload('parent.parent'));
die(js::reload('parent'));
@@ -452,12 +453,13 @@ class todo extends control
if(in_array($todo->type, array('bug', 'task', 'story')))
{
$confirmNote = 'confirm' . ucfirst($todo->type);
$okTarget = isonlybody() ? 'parent' : 'window.parent.$.apps.open';
$confirmURL = $this->createLink($todo->type, 'view', "id=$todo->idvalue");
if($todo->type == 'bug') $app = 'qa';
if($todo->type == 'task') $app = 'execution';
if($todo->type == 'story') $app = 'product';
$cancelURL = $this->server->HTTP_REFERER;
die(js::confirm(sprintf($this->lang->todo->$confirmNote, $todo->idvalue), $confirmURL, $cancelURL, 'window.parent.$.apps.open', 'parent', $app));
die(js::confirm(sprintf($this->lang->todo->$confirmNote, $todo->idvalue), $confirmURL, $cancelURL, $okTarget, 'parent', $app));
}
if(isonlybody())die(js::reload('parent.parent'));
die(js::reload('parent'));
-1
View File
@@ -4488,7 +4488,6 @@ class upgradeModel extends model
$data->path = ",{$projectID},{$sprint->id},";
$data->type = 'sprint';
$data->acl = $sprint->acl == 'custom' ? 'private' : $sprint->acl;
$data->lifetime = empty($sprint->lifetime) ? $sprint->type : $sprint->lifetime;
$this->dao->update(TABLE_PROJECT)->data($data)->where('id')->eq($sprint->id)->exec();
+30
View File
@@ -0,0 +1,30 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/init.php';
/**
[case]
title=测试 branchModel::getById();
cid=1
pid=1
[group]
1. 使用branchID获取一个存在的分支 >> `A`
2. 使用branchID和productID获取一个存在的分支 >> `B`
3. 使用account获取一个存在的用户 >> ``
[esac]
*/
$branch = $tester->loadModel('branch');
$app->dbh->query("truncate zt_product");
zdImport(TABLE_PRODUCT, "zendata/product.yaml", 10);
$app->dbh->query("truncate zt_branch");
zdImport(TABLE_BRANCH, "zendata/branch.yaml", 10);
/* Step 1.*/
run($branch->getByID(1)) and expect('name');
/* Step 2.*/
run($branch->getByID(2, 2)) and expect('name');
/* Step 3.*/
run($branch->getByID(null)) and expect('name');
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/init.php';
/**
[case]
title=测试 gapanalysisModel::getById();
cid=1
pid=1
[group]
1. 使用ID获取一个存在的能力差距分析 >> `\d,\d+,\w+\d`
2. 使用ID获取一个不存在的能力差距分析 >> ``
[esac]
*/
$gapanalysis = $tester->loadModel('gapanalysis');
$app->dbh->query("truncate zt_gapanalysis");
$id = rand(1,5);
zdImport(TABLE_GAPANALYSIS, "zendata/gapanalysis.yaml", 5);
$randGapAnalysis = $tester->dao->select('*,rand() as rand')->from(TABLE_GAPANALYSIS)->where('id')->eq($id)->orderBy('rand')->fetch();
if(!$randGapAnalysis) exit("Prepair data error.");
unset($randGapAnalysis->rand);
/* Step 1.*/
run($gapanalysis->getByID($randGapAnalysis->id, 'id')) and expect('id,project,account');
/* Step 2.*/
run($gapanalysis->getByID(null, 'id')) and expect('id');
+37
View File
@@ -0,0 +1,37 @@
title: table zt_branch
desc: "分支信息"
author: liyuchun
version: "1.0"
fields:
- field: id
note: "ID"
range: 1-10
prefix: ""
postfix: "\t"
loop: 0
format: ""
- field: product
note: "所属产品"
range: 1-2{5}
prefix: ""
postfix: "\t"
format: ""
- field: name
note: "分支名称"
range: A-Z
prefix: ""
postfix: "\t"
loop: 0
format: ""
- field: order
note: "排序"
range: 1-10
prefix: ""
postfix: "\t"
format: ""
- field: deleted
note: "是否删除"
range: 0
prefix: ""
postfix: "\t"
format: ""
+32
View File
@@ -0,0 +1,32 @@
title: 'table zt_gapanalysis'
desc: ""
author: automated export
version: "1.0"
fields:
- field: id
range: 1-6
- field: project
range: 13
- field: account
range: [admin,dev1,dev2,qa1,qa2]
- field: role
range: []{1},[研发]{2},[测试]{2}
- field: definition
range: a-z:R
- field: analysis
range: A-Z:R
- field: isTrain
range: 0-2:R
- field: createdBy
range: admin
- field: createdDate
range: "(-1M)-(+1w):60"
prefix: DateTime
type: timestamp
format: "YY/MM/DD hh:mm:ss"
- field: editedBy
range: ' '
- field: editedDate
range: [0000-00-00 00:00:00]
- field: deleted
range: 0
+130
View File
@@ -0,0 +1,130 @@
title: table zt_product
desc: "产品信息"
author: liyuchun
version: "1.0"
fields:
- field: id
note: "ID"
range: 1-11
prefix: ""
postfix: "\t"
loop: 0
format: ""
- field: program
note: "所属项目集"
range: 0
prefix: ""
postfix: "\t"
format: ""
- field: name
note: "产品名称"
range: A-Z
prefix: ""
postfix: "\t"
loop: 0
format: ""
- field: code
note: "代号"
range: A-Z
prefix: ""
postfix: "\t"
format: ""
- field: bind
note: "是否绑定"
range: 0
prefix: ""
postfix: "\t"
format: ""
- field: line
note: "产品线"
range: 0
prefix: ""
postfix: "\t"
format: ""
- field: type
note: "类型"
range: [branch,normal]{5}
prefix: ""
postfix: "\t"
format: ""
- field: status
note: "状态"
range: "normal"
prefix: ""
postfix: "\t"
format: ""
- field: desc
note: "描述"
range: "批量创建产品"
prefix: ""
postfix: "\t"
format: ""
- field: PO
note: "产品负责人"
range: "admin"
prefix: ""
postfix: "\t"
format: ""
- field: QD
note: "测试负责人"
range: "admin"
prefix: ""
postfix: "\t"
format: ""
- field: RD
note: "发布负责人"
range: "admin"
prefix: ""
postfix: "\t"
format: ""
- field: feedback
range: ""
prefix: ""
postfix: "\t"
format: ""
- field: storyConcept
range: 0
prefix: ""
postfix: "\t"
format: ""
- field: acl
note: "权限"
range: [open,private]{5}
prefix: ""
postfix: "\t"
format: ""
- field: storyConcept
range: 0
prefix: ""
postfix: "\t"
format: ""
- field: whitelist
range: ""
prefix: ","
postfix: "\t"
format: ""
- field: createdBy
range: "admin"
prefix: ""
postfix: "\t"
format: ""
- field: createdDate
range: "(-1M)-(+1w):60"
prefix: DateTime
type: timestamp
format: "YY/MM/DD hh:mm:ss"
- field: createdVersion
range: "max2.0"
prefix: ""
postfix: "\t"
format: ""
- field: order
range: 1-10
prefix: ""
postfix: "\t"
format: ""
- field: deleted
range: 0
prefix: ""
postfix: "\t"
format: ""