diff --git a/module/automation/lang/de.php b/module/automation/lang/de.php deleted file mode 100644 index e954094be1..0000000000 --- a/module/automation/lang/de.php +++ /dev/null @@ -1,87 +0,0 @@ - - * @package admin - * @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $ - * @link http://www.zentao.net - */ -$lang->admin->common = 'Admin'; -$lang->admin->index = 'Admin Home'; -$lang->admin->checkDB = 'Datenbank prüfen'; -$lang->admin->sso = 'SSO'; -$lang->admin->ssoAction = 'Link Zdoo'; -$lang->admin->safeIndex = 'Sicherheit'; -$lang->admin->checkWeak = 'Schwache Passwörter prüfen'; -$lang->admin->certifyMobile = 'Prüfen Sie die Mobilnummer'; -$lang->admin->certifyEmail = 'Prüfen Sie die Emailadresse'; -$lang->admin->ztCompany = 'Prüfen Sie das Unternehmen'; -$lang->admin->captcha = 'Bestätigungscode'; -$lang->admin->getCaptcha = 'Bestätigungscode anfordern'; -$lang->admin->register = 'Register'; - -$lang->admin->api = 'API'; -$lang->admin->log = 'Log'; -$lang->admin->setting = 'Einstellungen'; -$lang->admin->days = 'Gültige Tage'; - -$lang->admin->info = new stdclass(); -$lang->admin->info->version = 'Aktuelle Version ist %s. '; -$lang->admin->info->links = 'You can visit links below'; -$lang->admin->info->account = 'Ihr ZenTao Konto ist %s.'; -$lang->admin->info->log = 'Logs die über die Gültigen Tage hinausgehen werden gelöscht. Aufgabenplanung muss laufen (cron).'; - -$lang->admin->notice = new stdclass(); -$lang->admin->notice->register = "Hinweiß: Sie haben sich nicht bei ZenTao (www.zentao.pm) registriert. %s um die aktuellen Updates und News zu erhalten."; -$lang->admin->notice->ignore = "Ignorieren"; -$lang->admin->notice->int = "『%s』sollte eine positive Zahl sein."; - -$lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Verbinde neues Konto'; -$lang->admin->registerNotice->caption = 'In der Zentao Community registieren'; -$lang->admin->registerNotice->click = 'Bitte registieren Sie sich hier'; -$lang->admin->registerNotice->lblAccount = 'mindestens 3 Zeichen bitte; mit Buchsten und Ziffern.'; -$lang->admin->registerNotice->lblPasswd = 'mindestens 6 Zeichen bitte; mit Buchsten und Ziffern.'; -$lang->admin->registerNotice->submit = 'Registieren'; -$lang->admin->registerNotice->bind = "Verbinde bestehendes Konto"; -$lang->admin->registerNotice->success = "Sie haben sich erfolgreich registriert!"; - -$lang->admin->bind = new stdclass(); -$lang->admin->bind->caption = 'Konto verknüpfen'; -$lang->admin->bind->success = "Konto wurde verknüpft!"; - -$lang->admin->safe = new stdclass(); -$lang->admin->safe->common = 'Sicherheits-Regeln'; -$lang->admin->safe->set = 'PasswortStärke'; -$lang->admin->safe->password = 'Passwort Stärke'; -$lang->admin->safe->weak = 'Schwache Passwörter'; -$lang->admin->safe->reason = 'Typ'; -$lang->admin->safe->checkWeak = 'Schwache Passwörter prüfen'; -$lang->admin->safe->changeWeak = 'Ihr Passwort ist schwach. Bitte ändern.'; -$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA'; -$lang->admin->safe->modifyPasswordFirstLogin = 'Passwort nach der ersten Anmeldung ändern'; - -$lang->admin->safe->modeList[0] = 'N/A'; -$lang->admin->safe->modeList[1] = 'Medium'; -$lang->admin->safe->modeList[2] = 'Stark'; - -$lang->admin->safe->modeRuleList[1] = 'Beinhaltet Groß und Kleinbuchstaben sowie Ziffern. Länge >= 6'; -$lang->admin->safe->modeRuleList[2] = 'Beinhaltet Groß und Kleinbuchstaben, Ziffern sowie Sonderzeichen. Länge >= 10.'; - -$lang->admin->safe->reasonList['weak'] = 'Bekannte Schwache Passwörter'; -$lang->admin->safe->reasonList['account'] = 'Entspricht ihrem Konto'; -$lang->admin->safe->reasonList['mobile'] = 'Entspricht Ihrer Mobilnummer'; -$lang->admin->safe->reasonList['phone'] = 'Entspricht Ihrer Telefonnummer'; -$lang->admin->safe->reasonList['birthday'] = 'Entspricht Ihrem Geburtstag'; - -$lang->admin->safe->modifyPasswordList[1] = 'Ja'; -$lang->admin->safe->modifyPasswordList[0] = 'Nein'; - -$lang->admin->safe->loginCaptchaList[1] = 'Ja'; -$lang->admin->safe->loginCaptchaList[0] = 'Nein'; - -$lang->admin->safe->noticeMode = 'Password will be checked when a user logs in, or a user is added or edited.'; -$lang->admin->safe->noticeStrong = ''; diff --git a/module/automation/lang/en.php b/module/automation/lang/en.php deleted file mode 100644 index 0d73574ab9..0000000000 --- a/module/automation/lang/en.php +++ /dev/null @@ -1,87 +0,0 @@ - - * @package admin - * @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $ - * @link http://www.zentao.net - */ -$lang->admin->common = 'Admin'; -$lang->admin->index = 'Admin Home'; -$lang->admin->checkDB = 'Check Database'; -$lang->admin->sso = 'Zdoo'; -$lang->admin->ssoAction = 'Link Zdoo'; -$lang->admin->safeIndex = 'Security'; -$lang->admin->checkWeak = 'Check Weak Password'; -$lang->admin->certifyMobile = 'Verify your cellphone'; -$lang->admin->certifyEmail = 'Verify your Email'; -$lang->admin->ztCompany = 'Verify your company'; -$lang->admin->captcha = 'Verification Code'; -$lang->admin->getCaptcha = 'Send Verification Code'; -$lang->admin->register = 'Register'; - -$lang->admin->api = 'API'; -$lang->admin->log = 'Log'; -$lang->admin->setting = 'Setting'; -$lang->admin->days = 'Valid Day'; - -$lang->admin->info = new stdclass(); -$lang->admin->info->version = 'Current Version is %s. '; -$lang->admin->info->links = 'You can visit links below'; -$lang->admin->info->account = 'Your ZenTao account is %s.'; -$lang->admin->info->log = 'Log that exceeds valid days will be deleted and you have to run cron.'; - -$lang->admin->notice = new stdclass(); -$lang->admin->notice->register = "Note: You haven't registered in ZenTao official website(www.zentao.pm). %s then get the Latest ZenTao Upgrades and News."; -$lang->admin->notice->ignore = "Ignore"; -$lang->admin->notice->int = "『%s』should be a positive integer."; - -$lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Bind Account'; -$lang->admin->registerNotice->caption = 'ZenTao Community Signup'; -$lang->admin->registerNotice->click = 'Sign Up'; -$lang->admin->registerNotice->lblAccount = '>= 3 letters and numbers'; -$lang->admin->registerNotice->lblPasswd = '>= 6 letters and numbers'; -$lang->admin->registerNotice->submit = 'Submit'; -$lang->admin->registerNotice->bind = "Bind Exsiting Account"; -$lang->admin->registerNotice->success = "You have signed up!"; - -$lang->admin->bind = new stdclass(); -$lang->admin->bind->caption = 'Link Account'; -$lang->admin->bind->success = "Account is linked!"; - -$lang->admin->safe = new stdclass(); -$lang->admin->safe->common = 'Security Policy'; -$lang->admin->safe->set = 'Password Settings'; -$lang->admin->safe->password = 'Password Strength'; -$lang->admin->safe->weak = 'Common Weak Passwords'; -$lang->admin->safe->reason = 'Type'; -$lang->admin->safe->checkWeak = 'Weak Password Scan'; -$lang->admin->safe->changeWeak = 'Force to change weak password'; -$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA'; -$lang->admin->safe->modifyPasswordFirstLogin = 'Force to change password after first login'; - -$lang->admin->safe->modeList[0] = 'I don\'t care.'; -$lang->admin->safe->modeList[1] = 'Medium'; -$lang->admin->safe->modeList[2] = 'Strong'; - -$lang->admin->safe->modeRuleList[1] = ' >= 6 upper and lower case, and numbers'; -$lang->admin->safe->modeRuleList[2] = ' >= 10 upper and lower case, numbers and special characters.'; - -$lang->admin->safe->reasonList['weak'] = 'Common Weak Password'; -$lang->admin->safe->reasonList['account'] = 'Same as account'; -$lang->admin->safe->reasonList['mobile'] = 'Same as mobilephone number'; -$lang->admin->safe->reasonList['phone'] = 'Same as phone number'; -$lang->admin->safe->reasonList['birthday'] = 'Same as DOB'; - -$lang->admin->safe->modifyPasswordList[1] = 'Yes'; -$lang->admin->safe->modifyPasswordList[0] = 'No'; - -$lang->admin->safe->loginCaptchaList[1] = 'Yes' -$lang->admin->safe->loginCaptchaList[0] = 'No'; - -$lang->admin->safe->noticeMode = 'Password will be checked when a user logs in, or a user is added or edited.'; -$lang->admin->safe->noticeStrong = ''; diff --git a/module/automation/lang/fr.php b/module/automation/lang/fr.php deleted file mode 100644 index f4068396aa..0000000000 --- a/module/automation/lang/fr.php +++ /dev/null @@ -1,87 +0,0 @@ - - * @package admin - * @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $ - * @link https://www.zentao.pm - */ -$lang->admin->common = 'Admin'; -$lang->admin->index = 'Admin Home'; -$lang->admin->checkDB = 'Check Database'; -$lang->admin->sso = 'Zdoo'; -$lang->admin->ssoAction = 'Link Zdoo'; -$lang->admin->safeIndex = 'Sécurité'; -$lang->admin->checkWeak = 'Contrôle niveau de sécurité des mots de passe'; -$lang->admin->certifyMobile = 'Vérifier votre smartphone'; -$lang->admin->certifyEmail = 'Vérifier votre Email'; -$lang->admin->ztCompany = 'Vérifier votre entreprise'; -$lang->admin->captcha = 'Code de vérification'; -$lang->admin->getCaptcha = 'Obtenir le Code de vérification'; -$lang->admin->register = 'Register'; - -$lang->admin->api = 'API'; -$lang->admin->log = 'Log'; -$lang->admin->setting = 'Paramétrage'; -$lang->admin->days = 'Durée de conservation'; - -$lang->admin->info = new stdclass(); -$lang->admin->info->version = 'La version actuelle est %s customisée. '; -$lang->admin->info->links = 'Vous pouvez visiter les liens ci-dessous'; -$lang->admin->info->account = 'Votre identifiant client ZenTao est %s.'; -$lang->admin->info->log = 'Les logs qui dépassent la durée de conservation seront supprimés et vous devrez exécuter un cron.'; - -$lang->admin->notice = new stdclass(); -$lang->admin->notice->register = "Note: Vous n'êtes pas enregistré sur le site officiel de ZenTao (www.zentao.pm). %s vous pourrez ensuite obtenir les dernières Mises à Jour de ZenTao et des informations."; -$lang->admin->notice->ignore = "Ignorer"; -$lang->admin->notice->int = "『 %s 』 devrait être un entier positif."; - -$lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Connectez-vous avec votre nouveau compte'; -$lang->admin->registerNotice->caption = "S'enregistrer sur la communauté Zentao"; -$lang->admin->registerNotice->click = "S'enregistrer ici"; -$lang->admin->registerNotice->lblAccount = '>= 3 lettres et chiffres'; -$lang->admin->registerNotice->lblPasswd = '>= 6 lettres et chiffres'; -$lang->admin->registerNotice->submit = "S'enregistrer"; -$lang->admin->registerNotice->bind = "S'associer à un compte existant"; -$lang->admin->registerNotice->success = "Vous êtes enregistré !"; - -$lang->admin->bind = new stdclass(); -$lang->admin->bind->caption = 'Lier au compte'; -$lang->admin->bind->success = "Le compte est associé !"; - -$lang->admin->safe = new stdclass(); -$lang->admin->safe->common = 'Politique de sécurité'; -$lang->admin->safe->set = 'Paramétrages du Mot de passe'; -$lang->admin->safe->password = 'Force du Mot de passe'; -$lang->admin->safe->weak = 'Mots de passes non sécurisés courrants'; -$lang->admin->safe->reason = 'Type'; -$lang->admin->safe->checkWeak = 'Balayage des mots de passe faibles'; -$lang->admin->safe->changeWeak = 'Forcer le changement des mots de passe faibles'; -$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA'; -$lang->admin->safe->modifyPasswordFirstLogin = 'Forcer le changement du mot de passe après la première connexion'; - -$lang->admin->safe->modeList[0] = "Contrôle Modéré"; -$lang->admin->safe->modeList[1] = 'Contrôle Moyen'; -$lang->admin->safe->modeList[2] = 'Contrôle Fort'; - -$lang->admin->safe->modeRuleList[1] = ' >= 6 Majuscules, minuscules et chiffres'; -$lang->admin->safe->modeRuleList[2] = ' >= 10 Majuscules, minuscules, chiffres et caractères spéciaux'; - -$lang->admin->safe->reasonList['weak'] = 'Mots de passe faibles courants'; -$lang->admin->safe->reasonList['account'] = 'Identique au compte'; -$lang->admin->safe->reasonList['mobile'] = 'Identique au numéro de mobile'; -$lang->admin->safe->reasonList['phone'] = 'Identique au téléphone fixe'; -$lang->admin->safe->reasonList['birthday'] = 'Identique à la date de naissance'; - -$lang->admin->safe->modifyPasswordList[1] = 'Oui'; -$lang->admin->safe->modifyPasswordList[0] = 'Non'; - -$lang->admin->safe->loginCaptchaList[1] = 'Oui' -$lang->admin->safe->loginCaptchaList[0] = 'Non'; - -$lang->admin->safe->noticeMode = "Le mot de passe sera vérifié quand un utilisateur se connectera ou qu'un utilisateur sera créé ou modifier."; -$lang->admin->safe->noticeStrong = ''; diff --git a/module/automation/lang/vi.php b/module/automation/lang/vi.php deleted file mode 100644 index ba969114ba..0000000000 --- a/module/automation/lang/vi.php +++ /dev/null @@ -1,87 +0,0 @@ - - * @package admin - * @version $Id: vi.php 4460 2013-02-26 02:28:02Z quocnho@gmail.com $ - * @link http://www.zentao.net - */ -$lang->admin->common = 'Quản trị'; -$lang->admin->index = 'Trang quản trị'; -$lang->admin->checkDB = 'Kiểm tra CSDL'; -$lang->admin->sso = 'Zdoo'; -$lang->admin->ssoAction = 'Liên kết Zdoo'; -$lang->admin->safeIndex = 'Bảo mật'; -$lang->admin->checkWeak = 'Kiểm tra độ yếu mật khẩu'; -$lang->admin->certifyMobile = 'Xác thực di động của bạn'; -$lang->admin->certifyEmail = 'Xác thực email của bạn'; -$lang->admin->ztCompany = 'Xác thực doanh nghiệp của bạn'; -$lang->admin->captcha = 'Mã xác thực'; -$lang->admin->getCaptcha = 'Gửi Mã xác thực'; -$lang->admin->register = 'Register'; - -$lang->admin->api = 'API'; -$lang->admin->log = 'Nhật ký'; -$lang->admin->setting = 'Thiết lập'; -$lang->admin->days = 'Ngày hợp lệ'; - -$lang->admin->info = new stdclass(); -$lang->admin->info->version = 'Phiên bản hiện tại là %s. '; -$lang->admin->info->links = ' Bạn có thể ghé thăm liên kết sau'; -$lang->admin->info->account = 'Tài khoản ZenTao của bạn là %s.'; -$lang->admin->info->log = 'Nhật ký vượt quá ngày hợp lệ sẽ bị xóa và bạn phải chay Cron.'; - -$lang->admin->notice = new stdclass(); -$lang->admin->notice->register = "Chú ý: Bạn chưa đăng ký trên trang web chính thức của ZenTao (www.zentao.pm). %s sau đó nhận Bản tin và nâng cấp mới nhất của ZenTao."; -$lang->admin->notice->ignore = "Bỏ qua"; -$lang->admin->notice->int = "『%s』 nên là số nguyên dương."; - -$lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Kết nối tài khoản'; -$lang->admin->registerNotice->caption = 'Đăng ký cộng đồng ZenTao'; -$lang->admin->registerNotice->click = 'Đăng ký'; -$lang->admin->registerNotice->lblAccount = '>= 3 chữ và số'; -$lang->admin->registerNotice->lblPasswd = '>= 6 chữ và số'; -$lang->admin->registerNotice->submit = 'Gửi'; -$lang->admin->registerNotice->bind = "Kết nối với tài khoản đang tồn tại"; -$lang->admin->registerNotice->success = "Bạn đã đăng ký!"; - -$lang->admin->bind = new stdclass(); -$lang->admin->bind->caption = 'Liên kết tài khoản'; -$lang->admin->bind->success = "Tài khoản đã được kết nối!"; - -$lang->admin->safe = new stdclass(); -$lang->admin->safe->common = 'Chính sách bảo mật'; -$lang->admin->safe->set = 'Thiết lập mật khẩu'; -$lang->admin->safe->password = 'Độ mạnh mật khẩu'; -$lang->admin->safe->weak = 'Mật khẩu yếu thường dùng'; -$lang->admin->safe->reason = 'Loại'; -$lang->admin->safe->checkWeak = 'Quét mật khẩu yếu'; -$lang->admin->safe->changeWeak = 'Chủ động thay đổi mật khẩu yếu'; -$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA'; -$lang->admin->safe->modifyPasswordFirstLogin = 'Chủ động thay đổi mật khẩu sau lần đăng nhập đầu tiên'; - -$lang->admin->safe->modeList[0] = 'Yếu'; -$lang->admin->safe->modeList[1] = 'Trung bình'; -$lang->admin->safe->modeList[2] = 'Mạnh'; - -$lang->admin->safe->modeRuleList[1] = ' >= 6 chữ hoa, chữ thường và số'; -$lang->admin->safe->modeRuleList[2] = ' >= 10 chữ hoa, chữ thường, số và ký tự đặc biệt.'; - -$lang->admin->safe->reasonList['weak'] = 'Mật khẩu yếu thường dùng'; -$lang->admin->safe->reasonList['account'] = 'Giống tài khoản'; -$lang->admin->safe->reasonList['mobile'] = 'Giống số di động'; -$lang->admin->safe->reasonList['phone'] = 'Giống số điện thoại'; -$lang->admin->safe->reasonList['birthday'] = 'Giống ngày sinh'; - -$lang->admin->safe->modifyPasswordList[1] = 'Có'; -$lang->admin->safe->modifyPasswordList[0] = 'Không'; - -$lang->admin->safe->loginCaptchaList[1] = 'Yes' -$lang->admin->safe->loginCaptchaList[0] = 'No'; - -$lang->admin->safe->noticeMode = 'Mật khẩu sẽ được kiểm tra khi người dùng đăng nhập hoặc người dùng thêm hoặc sửa.'; -$lang->admin->safe->noticeStrong = ''; diff --git a/module/automation/lang/zh-cn.php b/module/automation/lang/zh-cn.php index 6bac68ee6e..6ce6d1c432 100644 --- a/module/automation/lang/zh-cn.php +++ b/module/automation/lang/zh-cn.php @@ -16,6 +16,196 @@ $lang->automation->description = '自动化测试解决方案'; $lang->automation->ztf = 'ZTF自动化测试管理框架'; $lang->automation->zendata = 'ZenData数据生成工具'; -$lang->automation->details = ''; -$lang->automation->ztfDetails = ''; -$lang->automation->zendataDetails = ''; +$lang->automation->details = << +
+

自动化测试解决方案

+
+

+ 摘要:欢迎使用禅道提供的自动化解决方案,本次为大家带来了两款工具。Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。 + ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。 +

+
+
+ +
+

ZTF自动化测试管理框架

+

+ Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。 + 和市面上已有的自动化测试框架相比,ZTF更聚焦于自动化测试的管理功能。 + ZTF提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug的创建以及和其他自动化测框架的集成。 + ZTF使用go语言开发,可以支持各种平台。ZTF支持常见的编程语言,您可以选择您喜欢用的语言来开发自动化测试脚本。 +

+
+
+

+ 禅道ZTF官网     + ZTF框架下载     + ZTF框架手册 +

+
+

+ 我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息) +

+

+ 软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群) +

+
+
+
+

ZenData数据生成工具

+

+ ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。 + 同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。 + ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。还可以一键生成海量数据用于性能和压力测试。 +

+
+
+

+ ZenData官网     + ZenData下载     + ZenData手册 +

+
+

+ 我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息) +

+

+ 软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群) +

+
+
+
+
+ +EOF; +$lang->automation->ztfDetails = << +
+

ZTF自动化测试管理框架

+
+

+ 摘要:Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。 +

+
+
+ +
+

一、ZTF是什么

+

+ Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。 + 和市面上已有的自动化测试框架相比,ZTF更聚焦于自动化测试的管理功能。 + ZTF提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug的创建以及和其他自动化测框架的集成。 + ZTF使用go语言开发,可以支持各种平台。ZTF支持常见的编程语言,您可以选择您喜欢用的语言来开发自动化测试脚本。 +

+

二、为什么来做ZTF

+

+ 市面上已经有很多自动化测试框架,我们为什么还要来做ZTF呢?ZTF主要是解决测试管理的问题。 + 目前市面上的自动化测试框架主要分为两大类,一类是单元测试框架,一类是某种领域的自动化测试框架。 + 单元测试框架是跟各个语言绑定的,比如cppunit, phpunit等。第二类框架以selenium为代表,可以用来做web的自动化测试。 + 也还有做GUI或者手机应用乃至游戏等场景的自动化测试的框架。 +

+

+ 这就产生了一个问题,我们需要将这些自动化测试框架的测试脚本统一管理起来。 + 每一个脚本都可以和测试管理系统里面的一个用例进行关联,脚本里面的步骤信息和管理系统里面的用例信息可以互相同步。 + 测试执行的结果可以反映到测试管理系统中,失败的测试脚本可以创建bug。 + 为此我们开发了ZTF测试管理框架。 +

+

三、ZTF和其他自动化测试框架的关系

+

+ ZTF和其他的自动化测试框架是互相合作的关系。 + 您可以继续使用之前的自动化测试框架来进行脚本的开发,只需要通过注释的方式加入几个标签就可以转换成ztf的自动化测试脚本。 +

+

四、ZTF自动化测试框架的特点

+
    +
  1. 简单:ZTF的语法标签和规则都很简单,一看就会,很容易上手。
  2. +
  3. 跨平台:ZTF使用GO语言开发,跨平台,只有一个可执行文件,就可以运行。
  4. +
  5. 跨语言:ZTF支持常见的编程语言,你喜欢用什么就用什么。
  6. +
  7. 跨框架:ZTF可以和市面上常见的单元测试框架、常见的自动化测试框架都可以很好的集成。
  8. +
  9. 工程化:使用ZTF可以真正达到工程化的自动化测试,可以大批量大规模的进行自动化测试的管理和执行。
  10. +
  11. 跨场景:借助于其他框架,ZTF可以用来做单元测试、接口测试、web界面测试、GUI界面测试、APP测试等多种场景。
  12. +
+
+
+

+ 禅道ZTF官网     + ZTF框架下载     + ZTF框架手册 +

+
+

+ 我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息) +

+

+ 软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群) +

+
+
+
+
+ +EOF; + +$lang->automation->zendataDetails = << +
+

ZenData数据生成工具

+
+

+ 摘要:ZenData使用YAML来作为数据类型配置文件实现了数据的生成和解析。 + ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。 + 还可以一键生成海量数据用于性能和压力测试。 +

+
+
+ +
+

一、ZenData的实现原理

+

+ ZenData使用YAML来作为数据类型配置文件。对于每一种类型的数据来讲,我们都可以将其拆分成若干的字段。 + 比如我们要测试一个用户的订单表,会有订单的id,用户id或者账户名,订单的名称,订单的金额,订单的时间,订单状态等等字段。 + 我们可以针对每一个字段配置其取值的范围。比如订单id,我可以定义为从1到10000,用户id可以是1-100。 + 这样每一个字段都有了一个取值范围列表。当ZenData来生成数据的时候,从每一个字段里面依次取一个值,将其拼接在一起,就形成了一条记录。 + 大家可以想象成每个字段都是一个转盘,按照自己的频率进行旋转,每一次旋转都从中取出一个值,和其他的字段进行组合。 +

+

上面说的是最基本的的工作原理,ZenData还提供了步长、随机、循环、引用等多种定义方式,我们会在接下来的手册里面展开讲。

+

二、ZenData的用途

+

+ ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。 + 同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。 + ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。还可以一键生成海量数据用于性能和压力测试。 +

+

三、ZenData主要的特点

+
    +
  1. 简单无依赖,只有一个可执行文件,即可满足命令行生成和HTTP接口两种数据生成服务。
  2. +
  3. 使用配置文件来生成数据,使用人员不需要有开发知识,即可上手应用。
  4. +
  5. 提供了功能强大的语法,分组、区间、步长、循环、随机、格式化和前后缀等,配置灵活性极强。
  6. +
  7. 支持从文本文件中读取数据,方便用户对字段取值进行精确控制。
  8. +
  9. 提供了Excel表格数据的标准SQL查询接口,使用更加灵活。
  10. +
  11. 使用预制的序列(ranges)、实例(instances)、配置(config)对定义进行复用,以解决复杂数据格式的定义。
  12. +
  13. 语法支持继承和扩展,为定义文件间的复用提供方便。
  14. +
  15. 可以反向解析数据,可以对程序的输出进行解析,方便自动化测试脚本进行比对。
  16. +
  17. 发行包內置了基础业务数据的定义文件(不断完善中)。
  18. +
  19. 提供了HTTP接口数据生成服务,各种语言都可以方便调用。
  20. +
+
+
+

+ ZenData官网     + ZenData下载     + ZenData手册 +

+
+

+ 我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息) +

+

+ 软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群) +

+
+
+
+
+ + +EOF; diff --git a/module/automation/lang/zh-tw.php b/module/automation/lang/zh-tw.php deleted file mode 100644 index b95dc6a627..0000000000 --- a/module/automation/lang/zh-tw.php +++ /dev/null @@ -1,83 +0,0 @@ - - * @package admin - * @version $Id: zh-tw.php 4767 2013-05-05 06:10:13Z wwccss $ - * @link http://www.zentao.net - */ -$lang->admin->common = '後台管理'; -$lang->admin->index = '後台管理首頁'; -$lang->admin->checkDB = '檢查資料庫'; -$lang->admin->sso = 'ZDOO整合'; -$lang->admin->ssoAction = 'ZDOO整合'; -$lang->admin->safeIndex = '安全'; -$lang->admin->checkWeak = '弱口令檢查'; -$lang->admin->certifyMobile = '認證手機'; -$lang->admin->certifyEmail = '認證郵箱'; -$lang->admin->ztCompany = '認證公司'; -$lang->admin->captcha = '驗證碼'; -$lang->admin->getCaptcha = '獲取驗證碼'; -$lang->admin->register = '登記'; - -$lang->admin->api = '介面'; -$lang->admin->log = '日誌'; -$lang->admin->setting = '設置'; -$lang->admin->days = '日誌保存天數'; - -$lang->admin->info = new stdclass(); -$lang->admin->info->version = '當前系統的版本是%s,'; -$lang->admin->info->links = '您可以訪問以下連結:'; -$lang->admin->info->account = "您的禪道社區賬戶為%s。"; -$lang->admin->info->log = '超出存天數的日誌會被刪除,需要開啟計劃任務。'; - -$lang->admin->notice = new stdclass(); -$lang->admin->notice->register = "友情提示:您還未在禪道社區(www.zentao.net)登記,%s進行登記,以及時獲得禪道最新信息。"; -$lang->admin->notice->ignore = "不再提示"; -$lang->admin->notice->int = "『%s』應當是正整數。"; - -$lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = '註冊新帳號綁定'; -$lang->admin->registerNotice->caption = '禪道社區登記'; -$lang->admin->registerNotice->click = '點擊此處'; -$lang->admin->registerNotice->lblAccount = '請設置您的用戶名,英文字母和數字的組合,三位以上。'; -$lang->admin->registerNotice->lblPasswd = '請設置您的密碼。數字和字母的組合,六位以上。'; -$lang->admin->registerNotice->submit = '登記'; -$lang->admin->registerNotice->bind = "綁定已有帳號"; -$lang->admin->registerNotice->success = "登記賬戶成功"; - -$lang->admin->bind = new stdclass(); -$lang->admin->bind->caption = '關聯社區帳號'; -$lang->admin->bind->success = "關聯賬戶成功"; - -$lang->admin->safe = new stdclass(); -$lang->admin->safe->common = '安全策略'; -$lang->admin->safe->set = '密碼安全設置'; -$lang->admin->safe->password = '密碼安全'; -$lang->admin->safe->weak = '常用弱口令'; -$lang->admin->safe->reason = '類型'; -$lang->admin->safe->checkWeak = '弱口令掃瞄'; -$lang->admin->safe->changeWeak = '修改弱口令密碼'; -$lang->admin->safe->modifyPasswordFirstLogin = '首次登錄修改密碼'; - -$lang->admin->safe->modeList[0] = '不檢查'; -$lang->admin->safe->modeList[1] = '中'; -$lang->admin->safe->modeList[2] = '強'; - -$lang->admin->safe->modeRuleList[1] = '6位以上,包含大小寫字母,數字。'; -$lang->admin->safe->modeRuleList[2] = '10位以上,包含字母,數字,特殊字元。'; - -$lang->admin->safe->reasonList['weak'] = '常用弱口令'; -$lang->admin->safe->reasonList['account'] = '與帳號相同'; -$lang->admin->safe->reasonList['mobile'] = '與手機相同'; -$lang->admin->safe->reasonList['phone'] = '與電話相同'; -$lang->admin->safe->reasonList['birthday'] = '與生日相同'; - -$lang->admin->safe->modifyPasswordList[1] = '必須修改'; -$lang->admin->safe->modifyPasswordList[0] = '不強制'; - -$lang->admin->safe->noticeMode = '系統會在登錄、創建和修改用戶、修改密碼的時候檢查用戶口令。'; -$lang->admin->safe->noticeStrong = '密碼長度越長,含有大寫字母或數字或特殊符號越多,密碼字母越不重複,安全度越強!'; diff --git a/module/automation/view/browse.html.php b/module/automation/view/browse.html.php index 7d76dcb414..18e71b1472 100644 --- a/module/automation/view/browse.html.php +++ b/module/automation/view/browse.html.php @@ -13,23 +13,23 @@
-
+ -
-
+
+
-

我是标签1。

+ automation->details;?>
-

标签2的内容。

+ automation->ztfDetails;?>
-

这是标签3的内容。

+ automation->zendataDetails;?>
diff --git a/module/bug/control.php b/module/bug/control.php index 3a72d35e93..c38d2c8be3 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -157,7 +157,7 @@ class bug extends control $productIDList = $productID ? $productID : array_keys($this->products); /* Get bugs. */ - $bugs = $this->bug->getBugs($productIDList, $executions, $branch, $browseType, $moduleID, $queryID, $sort, $pager); + $bugs = $this->bug->getBugs($productIDList, $executions, $branch, $browseType, $moduleID, $queryID, $sort, $pager, $this->session->PRJ); /* Process the sql, get the conditon partion, save it to session. */ $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'bug', $browseType == 'needconfirm' ? false : true); diff --git a/module/bug/model.php b/module/bug/model.php index 1acf0b46c7..6ae5cae8d1 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -286,10 +286,11 @@ class bugModel extends model * @param int $queryID * @param string $sort * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getBugs($productIDList, $executions, $branch, $browseType, $moduleID, $queryID, $sort, $pager) + public function getBugs($productIDList, $executions, $branch, $browseType, $moduleID, $queryID, $sort, $pager, $projectID) { /* Set modules and browse type. */ $modules = $moduleID ? $this->loadModel('tree')->getAllChildId($moduleID) : '0'; @@ -298,21 +299,21 @@ class bugModel extends model /* Get bugs by browse type. */ $bugs = array(); - if($browseType == 'all') $bugs = $this->getAllBugs($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'bymodule') $bugs = $this->getModuleBugs($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'assigntome') $bugs = $this->getByAssigntome($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'openedbyme') $bugs = $this->getByOpenedbyme($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'resolvedbyme') $bugs = $this->getByResolvedbyme($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'assigntonull') $bugs = $this->getByAssigntonull($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'unconfirmed') $bugs = $this->getUnconfirmed($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'unresolved') $bugs = $this->getByStatus($productIDList, $branch, $modules, $executions, 'unresolved', $sort, $pager); - elseif($browseType == 'unclosed') $bugs = $this->getByStatus($productIDList, $branch, $modules, $executions, 'unclosed', $sort, $pager); - elseif($browseType == 'toclosed') $bugs = $this->getByStatus($productIDList, $branch, $modules, $executions, 'toclosed', $sort, $pager); - elseif($browseType == 'longlifebugs') $bugs = $this->getByLonglifebugs($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'postponedbugs') $bugs = $this->getByPostponedbugs($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'needconfirm') $bugs = $this->getByNeedconfirm($productIDList, $branch, $modules, $executions, $sort, $pager); - elseif($browseType == 'bysearch') $bugs = $this->getBySearch($productIDList, $branch, $queryID, $sort, '', $pager); - elseif($browseType == 'overduebugs') $bugs = $this->getOverdueBugs($productIDList, $branch, $modules, $executions, $sort, $pager); + if($browseType == 'all') $bugs = $this->getAllBugs($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'bymodule') $bugs = $this->getModuleBugs($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'assigntome') $bugs = $this->getByAssigntome($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'openedbyme') $bugs = $this->getByOpenedbyme($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'resolvedbyme') $bugs = $this->getByResolvedbyme($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'assigntonull') $bugs = $this->getByAssigntonull($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'unconfirmed') $bugs = $this->getUnconfirmed($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'unresolved') $bugs = $this->getByStatus($productIDList, $branch, $modules, $executions, 'unresolved', $sort, $pager, $projectID); + elseif($browseType == 'unclosed') $bugs = $this->getByStatus($productIDList, $branch, $modules, $executions, 'unclosed', $sort, $pager, $projectID); + elseif($browseType == 'toclosed') $bugs = $this->getByStatus($productIDList, $branch, $modules, $executions, 'toclosed', $sort, $pager, $projectID); + elseif($browseType == 'longlifebugs') $bugs = $this->getByLonglifebugs($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'postponedbugs') $bugs = $this->getByPostponedbugs($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'needconfirm') $bugs = $this->getByNeedconfirm($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); + elseif($browseType == 'bysearch') $bugs = $this->getBySearch($productIDList, $branch, $queryID, $sort, '', $pager, $projectID); + elseif($browseType == 'overduebugs') $bugs = $this->getOverdueBugs($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID); return $this->checkDelayBugs($bugs); } @@ -380,18 +381,22 @@ class bugModel extends model * Get bugs of a module. * * @param int|array $productIDList + * @param int $branch * @param string|array $moduleIdList + * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getModuleBugs($productIDList, $branch = 0, $moduleIdList = 0, $executions, $orderBy = 'id_desc', $pager = null) + public function getModuleBugs($productIDList, $branch = 0, $moduleIdList = 0, $executions, $orderBy = 'id_desc', $pager = null, $projectID) { return $this->dao->select('*')->from(TABLE_BUG) ->where('product')->in($productIDList) ->beginIF(!empty($branch))->andWhere('branch')->eq($branch)->fi() ->beginIF(!empty($moduleIdList))->andWhere('module')->in($moduleIdList)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2007,10 +2012,11 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getAllBugs($productIDList, $branch, $modules, $executions, $orderBy, $pager = null) + public function getAllBugs($productIDList, $branch, $modules, $executions, $orderBy, $pager = null, $projectID) { $bugs = $this->dao->select('t1.*, t2.title as planTitle')->from(TABLE_BUG)->alias('t1') ->leftJoin(TABLE_PRODUCTPLAN)->alias('t2')->on('t1.plan = t2.id') @@ -2018,6 +2024,7 @@ class bugModel extends model ->andWhere('t1.execution')->in(array_keys($executions)) ->beginIF($branch)->andWhere('t1.branch')->eq($branch)->fi() ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi() ->andWhere('t1.deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2035,14 +2042,16 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByAssigntome($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByAssigntome($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->findByAssignedTo($this->app->user->account)->from(TABLE_BUG)->andWhere('product')->in($productIDList) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2057,14 +2066,16 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByOpenedbyme($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByOpenedbyme($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->findByOpenedBy($this->app->user->account)->from(TABLE_BUG)->andWhere('product')->in($productIDList) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2079,14 +2090,16 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByResolvedbyme($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByResolvedbyme($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->findByResolvedBy($this->app->user->account)->from(TABLE_BUG)->andWhere('product')->in($productIDList) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2101,15 +2114,17 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByAssigntonull($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByAssigntonull($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->findByAssignedTo('')->from(TABLE_BUG)->andWhere('product')->in($productIDList) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2121,18 +2136,20 @@ class bugModel extends model * @param array $productIDList * @param int $branch * @param array $modules - * @param int $executions - * @param int $orderBy - * @param int $pager + * @param array $executions + * @param string $orderBy + * @param object $pager + * @param int $projectID * @access public * @return void */ - public function getUnconfirmed($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getUnconfirmed($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->select('*')->from(TABLE_BUG) ->where('confirmed')->eq(0) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('product')->in($productIDList) ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) @@ -2149,16 +2166,18 @@ class bugModel extends model * @param string $status * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getOverdueBugs($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getOverdueBugs($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->select('*')->from(TABLE_BUG) ->where('execution')->in(array_keys($executions)) ->andWhere('product')->in($productIDList) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('status')->eq('active') ->andWhere('deleted')->eq(0) ->andWhere('deadline')->ne('0000-00-00') @@ -2176,10 +2195,11 @@ class bugModel extends model * @param string $status * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByStatus($productIDList, $branch, $modules, $executions, $status, $orderBy, $pager) + public function getByStatus($productIDList, $branch, $modules, $executions, $status, $orderBy, $pager, $projectID) { return $this->dao->select('*')->from(TABLE_BUG) ->where('execution')->in(array_keys($executions)) @@ -2189,8 +2209,10 @@ class bugModel extends model ->beginIF($status == 'unclosed')->andWhere('status')->ne('closed')->fi() ->beginIF($status == 'unresolved')->andWhere('status')->eq('active')->fi() ->beginIF($status == 'toclosed')->andWhere('status')->eq('resolved')->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('deleted')->eq(0) - ->orderBy($orderBy)->page($pager)->fetchAll(); + ->orderBy($orderBy)->page($pager) + ->fetchAll(); } /** @@ -2202,16 +2224,18 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByLonglifebugs($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByLonglifebugs($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { $lastEditedDate = date(DT_DATE1, time() - $this->config->bug->longlife * 24 * 3600); return $this->dao->findByLastEditedDate("<", $lastEditedDate)->from(TABLE_BUG)->andWhere('product')->in($productIDList) ->andWhere('execution')->in(array_keys($executions)) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('openedDate')->lt($lastEditedDate) ->andWhere('deleted')->eq(0) ->andWhere('status')->ne('closed')->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2226,14 +2250,16 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByPostponedbugs($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByPostponedbugs($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { return $this->dao->findByResolution('postponed')->from(TABLE_BUG)->andWhere('product')->in($productIDList) ->beginIF($branch)->andWhere('branch')->in($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('execution')->in(array_keys($executions)) ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); @@ -2248,16 +2274,19 @@ class bugModel extends model * @param array $executions * @param string $orderBy * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getByNeedconfirm($productIDList, $branch, $modules, $executions, $orderBy, $pager) + public function getByNeedconfirm($productIDList, $branch, $modules, $executions, $orderBy, $pager, $projectID) { - return $this->dao->select('t1.*, t2.title AS storyTitle')->from(TABLE_BUG)->alias('t1')->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id') + return $this->dao->select('t1.*, t2.title AS storyTitle')->from(TABLE_BUG)->alias('t1') + ->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id') ->where("t2.status = 'active'") ->andWhere('t1.product')->in($productIDList) ->beginIF($branch)->andWhere('t1.branch')->in($branch)->fi() ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() + ->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi() ->andWhere('t2.version > t1.storyVersion') ->andWhere('t1.execution')->in(array_keys($executions)) ->andWhere('t1.deleted')->eq(0) @@ -2275,10 +2304,11 @@ class bugModel extends model * @param string $orderBy * @param string $excludeBugs * @param object $pager + * @param int $projectID * @access public * @return array */ - public function getBySearch($productIDList, $branch = 0, $queryID, $orderBy, $excludeBugs = '', $pager = null) + public function getBySearch($productIDList, $branch = 0, $queryID, $orderBy, $excludeBugs = '', $pager = null, $projectID) { if($queryID) { @@ -2320,6 +2350,7 @@ class bugModel extends model $bugs = $this->dao->select('*')->from(TABLE_BUG)->where($bugQuery) ->beginIF(!$this->app->user->admin)->andWhere('execution')->in('0,' . $this->app->user->view->sprints)->fi() ->beginIF($excludeBugs)->andWhere('id')->notIN($excludeBugs)->fi() + ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('deleted')->eq(0) ->orderBy($orderBy)->page($pager)->fetchAll(); return $bugs; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 00843bd7f5..9649086a87 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -346,23 +346,21 @@ $lang->execution->viewMenu->burn = array('link' => '燃尽图|execution|burn $lang->execution->viewMenu->view = array('link' => '视图|execution|grouptask|executionID=%s', 'alias' => 'grouptask,tree', 'class' => 'dropdown dropdown-hover'); $lang->execution->viewMenu->story = array('link' => "{$lang->SRCommon}|execution|story|executionID=%s", 'subModule' => 'story', 'alias' => 'linkstory,storykanban'); $lang->execution->viewMenu->qa = array('link' => '测试|qa|index|'); -$lang->execution->viewMenu->ci = array('link' => '代码|repo|browse|'); $lang->execution->viewMenu->doc = array('link' => '文档|doc|objectLibs|type=execution&objectID=%s&from=execution', 'subModule' => 'doc'); $lang->execution->viewMenu->build = array('link' => '版本|execution|build|executionID=%s', 'subModule' => 'build'); -$lang->execution->viewMenu->release = array('link' => '发布|projectrelease|browse|project=%s'); $lang->execution->viewMenu->action = array('link' => '动态|execution|dynamic|executionID=%s'); $lang->execution->viewMenu->setting = array('link' => '设置|execution|view|executionID=%s', 'subModule' => 'personnel', 'alias' => 'edit', 'class' => 'dropdown dropdown-hover'); -$lang->execution->subMenu = new stdclass(); -$lang->execution->subMenu->view = new stdclass(); -$lang->execution->subMenu->view->groupTask = '分组视图|execution|grouptask|executionID=%s'; -$lang->execution->subMenu->view->tree = '树状图|execution|tree|executionID=%s'; +$lang->execution->groupMenu = new stdclass(); +$lang->execution->groupMenu->groupTask = '分组视图|execution|grouptask|executionID={EXECUTION}'; +$lang->execution->groupMenu->tree = '树状图|execution|tree|executionID={EXECUTION}'; -$lang->execution->subMenu->setting = new stdclass(); -$lang->execution->subMenu->setting->vie = array('link' => '概况|execution|view|executionID=%s', 'subModule' => 'view', 'alias' => 'edit,start,suspend,putoff,close'); -$lang->execution->subMenu->setting->product = $lang->productCommon . '|execution|manageproducts|executionID=%s'; -$lang->execution->subMenu->setting->team = array('link' => '团队|execution|team|executionID=%s', 'alias' => 'managemembers'); -$lang->execution->subMenu->setting->whitelist = array('link' => '白名单|execution|whitelist|executionID=%s', 'subModule' => 'personnel', 'alias' => 'addwhitelist'); +$lang->execution->settingMenu = new stdclass(); +$lang->execution->settingMenu = new stdclass(); +$lang->execution->settingMenu->view = array('link' => '概况|execution|view|executionID={EXECUTION}', 'subModule' => 'view', 'alias' => 'edit,start,suspend,putoff,close'); +$lang->execution->settingMenu->products = $lang->productCommon . '|execution|manageproducts|executionID={EXECUTION}'; +$lang->execution->settingMenu->team = array('link' => '团队|execution|team|executionID={EXECUTION}', 'alias' => 'managemembers'); +$lang->execution->settingMenu->whitelist = array('link' => '白名单|execution|whitelist|executionID={EXECUTION}', 'subModule' => 'personnel', 'alias' => 'addwhitelist'); $lang->execution->dividerMenu = ',story,build,setting,'; @@ -664,6 +662,7 @@ $lang->navGroup->execution = 'execution'; $lang->navGroup->task = 'execution'; $lang->navGroup->build = 'execution'; +$lang->navGroup->company = 'system'; $lang->navGroup->sqlbuilder = 'system'; $lang->navGroup->auditcl = 'system'; $lang->navGroup->cmcl = 'system'; @@ -685,7 +684,6 @@ $lang->navGroup->overtime = 'attend'; $lang->navGroup->lieu = 'attend'; $lang->navGroup->admin = 'admin'; -$lang->navGroup->company = 'admin'; $lang->navGroup->dept = 'admin'; $lang->navGroup->user = 'admin'; $lang->navGroup->group = 'admin'; diff --git a/module/common/model.php b/module/common/model.php index 42300c2f69..c596284c5e 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -774,12 +774,17 @@ class commonModel extends model if($moduleName == 'admin') return; if($group == 'repo' || $group == 'ops' || $group == 'feedback') return; if($group == 'my') self::getMyModuleMenu($moduleName, $methodName); - if($group == 'project') self::getProgramModuleMenu($moduleName, $methodName); + if($group == 'project') self::getProjectModuleMenu($moduleName, $methodName); if($group == 'product') { $lang->product->menu = $lang->product->setMenu; self::processMenuVars($lang->product->menu); } + if($group == 'execution') + { + if(in_array($methodName, array('grouptask', 'tree'))) $lang->execution->menu = self::processMenuVars($lang->execution->groupMenu); + if(in_array($methodName, array('view', 'manageproducts', 'team', 'whitelist'))) $lang->execution->menu = self::processMenuVars($lang->execution->settingMenu); + } if(strpos('qa|bug|testcase|testreport|testtask', $moduleName) !== false and $group == 'project') { unset($lang->$moduleName->menu->testsuite); @@ -2450,7 +2455,7 @@ EOD; } /** - * Get program module menu by model. + * Get project module menu by model. * * @param varchar $moduleName * @param varchar $methodName @@ -2458,7 +2463,7 @@ EOD; * @access public * @return string */ - public static function getProgramModuleMenu($moduleName, $methodName) + public static function getProjectModuleMenu($moduleName, $methodName) { global $app, $lang, $dbh; $program = $dbh->query("SELECT * FROM " . TABLE_PROJECT . " WHERE `id` = '{$app->session->PRJ}'")->fetch(); diff --git a/module/common/view/header.html.php b/module/common/view/header.html.php index f63940aeeb..8d950a20ff 100755 --- a/module/common/view/header.html.php +++ b/module/common/view/header.html.php @@ -25,7 +25,7 @@ $isQa = $rawModule == 'qa'; config->systemMode == 'new'):?> program->switcherMenu) ? $lang->program->switcherMenu : '';?> loadModel('project')->getSwitcher($this->session->PRJ, $app->rawModule, $app->rawMethod);?> - execution->getSwitcher($this->session->execution, $app->rawModule, $app->rawMethod);?> + loadModel('execution')->getSwitcher($this->session->execution, $app->rawModule, $app->rawMethod);?> config->systemMode == 'classic'):?> project->switcherMenu) ? $lang->project->switcherMenu : '';;?> diff --git a/module/company/control.php b/module/company/control.php index 28b9e5eead..3abae4659c 100644 --- a/module/company/control.php +++ b/module/company/control.php @@ -48,6 +48,8 @@ class company extends control */ public function browse($browseType = 'inside', $param = 0, $type = 'bydept', $orderBy = 'id', $recTotal = 0, $recPerPage = 20, $pageID = 1) { + $this->lang->navGroup->company = 'admin'; + $this->loadModel('search'); $this->lang->set('menugroup.company', 'company'); @@ -147,8 +149,7 @@ class company extends control */ public function view() { - $this->lang->navGroup->company = 'system'; - $this->lang->noMenuModule[] = 'company'; + $this->lang->noMenuModule[] = 'company'; $this->company->setMenu(); $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->company->view; @@ -170,8 +171,7 @@ class company extends control */ public function dynamic($browseType = 'today', $param = '', $recTotal = 0, $date = '', $direction = 'next') { - $this->lang->navGroup->company = 'system'; - $this->lang->noMenuModule[] = 'company'; + $this->lang->noMenuModule[] = 'company'; $this->company->setMenu(); $this->app->loadLang('user'); diff --git a/module/custom/css/common.css b/module/custom/css/common.css index 7c70d37c02..3c3233d59e 100644 --- a/module/custom/css/common.css +++ b/module/custom/css/common.css @@ -1 +1,2 @@ .alert-block {border-top: 1px solid #ddd;} +.btn-toolbar.pull-left .divider {margin-left: 0px; border-color: rgba(0,0,0,.2);} diff --git a/module/custom/js/common.js b/module/custom/js/common.js new file mode 100644 index 0000000000..8ffc22d8bc --- /dev/null +++ b/module/custom/js/common.js @@ -0,0 +1,19 @@ +$(function() +{ + $object = $('.btn-toolbar.pull-left'); + while(true) + { + if($object.children(':first-child').hasClass('divider')) + { + $object.children(':first-child').remove(); + continue; + } + if($object.children(':last-child').hasClass('divider')) + { + $object.children(':last-child').remove(); + continue; + } + + break; + } +}) diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 2e62fd08e0..cb2bfc9838 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -19,7 +19,7 @@ $lang->custom->score = 'Score'; $lang->custom->timezone = 'Timezone'; $lang->custom->scoreReset = 'Reset Score'; $lang->custom->scoreTitle = 'Point Feature'; -$lang->custom->execution = $lang->sprintCommon; +$lang->custom->execution = 'Execution'; $lang->custom->product = $lang->productCommon; $lang->custom->convertFactor = 'Convert factor'; $lang->custom->region = 'Interval'; @@ -71,12 +71,12 @@ $lang->custom->saveTips = 'After clicking save, the current %s will b $lang->custom->numberError = 'The interval must be greater than zero!'; -$lang->custom->closedExecution = 'Closed ' . $lang->sprintCommon; +$lang->custom->closedExecution = 'Closed Executions'; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; -$lang->custom->object['execution'] = $lang->sprintCommon; +$lang->custom->object['execution'] = 'Execution'; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Task'; $lang->custom->object['bug'] = 'Bug'; @@ -164,7 +164,7 @@ $lang->custom->notice->required = 'The selected field is required.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Use %s + %s。'; $lang->custom->notice->conceptPath = 'Go to Admin -> Custom -> Concept to set it.'; $lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; -$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->sprintCommon} is also forbidden."; +$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed execution is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it?'; @@ -221,7 +221,7 @@ $lang->custom->CRExecution[0] = 'Change Forbidden'; $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Plan'; -$lang->custom->moduleName['execution'] = $lang->sprintCommon; +$lang->custom->moduleName['execution'] = 'Execution'; $lang->custom->conceptQuestions['overview'] = "1. Which combination of management fits your company?"; $lang->custom->conceptQuestions['URAndSR'] = "2. Do you want to use the concept of {$lang->URCommon} and {$lang->SRCommon} in ZenTao?"; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 344b0293e2..60bdd11682 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -19,7 +19,7 @@ $lang->custom->score = 'Point'; $lang->custom->timezone = 'Timezone'; $lang->custom->scoreReset = 'Reset Points'; $lang->custom->scoreTitle = 'Point Feature'; -$lang->custom->execution = $lang->sprintCommon; +$lang->custom->execution = 'Execution'; $lang->custom->product = $lang->productCommon; $lang->custom->convertFactor = 'Convert factor'; $lang->custom->region = 'Interval'; @@ -71,12 +71,12 @@ $lang->custom->saveTips = 'After clicking save, the current %s will b $lang->custom->numberError = 'The interval must be greater than zero!'; -$lang->custom->closedExecution = 'Closed ' . $lang->sprintCommon; +$lang->custom->closedExecution = 'Closed Executions'; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; -$lang->custom->object['execution'] = $lang->sprintCommon; +$lang->custom->object['execution'] = 'Execution'; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Task'; $lang->custom->object['bug'] = 'Bug'; @@ -164,7 +164,7 @@ $lang->custom->notice->required = 'The selected field is required.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Use %s + %s.'; $lang->custom->notice->conceptPath = 'Go to Admin -> Custom -> Concept to set it.'; $lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; -$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->sprintCommon} is also forbidden."; +$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed execution is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it?'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index 3e66501f48..8f403c1fb6 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -19,7 +19,7 @@ $lang->custom->score = 'Point'; $lang->custom->timezone = 'Timezone'; $lang->custom->scoreReset = 'Réinit Points'; $lang->custom->scoreTitle = 'Fonctionnalité des Points'; -$lang->custom->execution = $lang->sprintCommon; +$lang->custom->execution = 'Execution'; $lang->custom->product = $lang->productCommon; $lang->custom->convertFactor = 'Convert factor'; $lang->custom->region = 'Interval'; @@ -71,12 +71,12 @@ $lang->custom->saveTips = 'After clicking save, the current %s will b $lang->custom->numberError = 'The interval must be greater than zero!'; -$lang->custom->closedExecution = 'Closed ' . $lang->sprintCommon; +$lang->custom->closedExecution = 'Closed Executions'; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; -$lang->custom->object['execution'] = $lang->sprintCommon; +$lang->custom->object['execution'] = 'Execution'; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Tâche'; $lang->custom->object['bug'] = 'Bug'; @@ -164,7 +164,7 @@ $lang->custom->notice->required = 'Le champ sélectionné est obligat $lang->custom->notice->conceptResult = 'Selon votre préférence, %s-%s peut être fixé pour vous. Utilisez %s + %s。'; $lang->custom->notice->conceptPath = 'Allez à Admin -> Custom -> Concept pour le paramétrer.'; $lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; -$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->sprintCommon} is also forbidden."; +$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed execution is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it?'; @@ -221,7 +221,7 @@ $lang->custom->CRExecution[0] = 'Change Forbidden'; $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Plan'; -$lang->custom->moduleName['execution'] = $lang->sprintCommon; +$lang->custom->moduleName['execution'] = 'Execution'; $lang->custom->conceptQuestions['overview'] = "1. Quelle combinaison de gestion convient le mieux à votre entreprise ?"; $lang->custom->conceptQuestions['URAndSR'] = "2. Do you want to use the concept of {$lang->URCommon} and {$lang->SRCommon} in ZenTao?"; diff --git a/module/custom/lang/vi.php b/module/custom/lang/vi.php index ffb97771bb..01f807d6a5 100644 --- a/module/custom/lang/vi.php +++ b/module/custom/lang/vi.php @@ -19,7 +19,7 @@ $lang->custom->score = 'Điểm'; $lang->custom->timezone = 'Timezone'; $lang->custom->scoreReset = 'Thiết lập lại điểm'; $lang->custom->scoreTitle = 'Tính năng điểm'; -$lang->custom->execution = $lang->sprintCommon; +$lang->custom->execution = 'Execution'; $lang->custom->product = $lang->productCommon; $lang->custom->convertFactor = 'Convert factor'; $lang->custom->region = 'Interval'; @@ -71,12 +71,12 @@ $lang->custom->saveTips = 'After clicking save, the current %s will b $lang->custom->numberError = 'The interval must be greater than zero!'; -$lang->custom->closedExecution = 'Closed ' . $lang->sprintCommon; +$lang->custom->closedExecution = 'Closed Executions'; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; -$lang->custom->object['execution'] = $lang->sprintCommon; +$lang->custom->object['execution'] = 'Execution'; $lang->custom->object['story'] = 'Câu chuyện'; $lang->custom->object['task'] = 'Nhiệm vụ'; $lang->custom->object['bug'] = 'Bug'; @@ -164,7 +164,7 @@ $lang->custom->notice->required = 'Trường được chọn là bắ $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Sử dụng %s + %s.'; $lang->custom->notice->conceptPath = 'Vào Quản trị -> Tùy biến -> Mô hình để thiết lập nó.'; $lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; -$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->sprintCommon} is also forbidden."; +$lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed execution is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it?'; @@ -221,7 +221,7 @@ $lang->custom->CRExecution[0] = 'Change Forbidden'; $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Kế hoạch'; -$lang->custom->moduleName['execution'] = $lang->sprintCommon; +$lang->custom->moduleName['execution'] = 'Execution'; $lang->custom->conceptQuestions['overview'] = "1. Sự kết hợp quản lý nào phù hợp với công ty của bạn?"; $lang->custom->conceptQuestions['URAndSR'] = "2. Do you want to use the concept of {$lang->URCommon} and {$lang->SRCommon} in ZenTao?"; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index fcd04a8937..d02db166d0 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -19,7 +19,7 @@ $lang->custom->score = '积分'; $lang->custom->timezone = '时区'; $lang->custom->scoreReset = '重置积分'; $lang->custom->scoreTitle = '积分功能'; -$lang->custom->execution = $lang->sprintCommon; +$lang->custom->execution = '执行'; $lang->custom->product = $lang->productCommon; $lang->custom->convertFactor = '换算系数'; $lang->custom->region = '区间'; @@ -71,12 +71,12 @@ $lang->custom->saveTips = '点击保存后,则以当前%s为默认 $lang->custom->numberError = '区间必须大于零'; -$lang->custom->closedExecution = '已关闭' . $lang->sprintCommon; +$lang->custom->closedExecution = '已关闭执行'; $lang->custom->closedProduct = '已关闭' . $lang->productCommon; $lang->custom->object['project'] = '项目'; $lang->custom->object['product'] = $lang->productCommon; -$lang->custom->object['execution'] = $lang->sprintCommon; +$lang->custom->object['execution'] = '执行'; $lang->custom->object['story'] = $lang->SRCommon; $lang->custom->object['task'] = '任务'; $lang->custom->object['bug'] = 'Bug'; @@ -164,7 +164,7 @@ $lang->custom->notice->required = '页面提交时,选中 $lang->custom->notice->conceptResult = '我们已经根据您的选择为您设置了 %s-%s 模式,使用%s + %s。'; $lang->custom->notice->conceptPath = '您可以在:后台 -> 自定义 -> 流程页面修改。'; $lang->custom->notice->readOnlyOfProduct = '禁止修改后,已关闭' . $lang->productCommon . '下的' . $lang->SRCommon . '、Bug、用例、日志、发布、计划都禁止修改。'; -$lang->custom->notice->readOnlyOfExecution = '禁止修改后,已关闭' . $lang->sprintCommon . '下的任务、版本、日志以及关联需求都禁止修改。'; +$lang->custom->notice->readOnlyOfExecution = '禁止修改后,已关闭执行下的任务、版本、日志以及关联需求都禁止修改。'; $lang->custom->notice->URSREmpty = '自定义需求名称不能为空!'; $lang->custom->notice->confirmDelete = '您确定要删除吗?'; @@ -221,7 +221,7 @@ $lang->custom->CRExecution[0] = '禁止修改'; $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = '计划'; -$lang->custom->moduleName['execution'] = $lang->sprintCommon; +$lang->custom->moduleName['execution'] = '执行'; $lang->custom->conceptQuestions['overview'] = "1. 下述哪种组合方式更适合您公司的管理现状?"; $lang->custom->conceptQuestions['URAndSR'] = "2. 是否启用{$lang->URCommon}和{$lang->SRCommon}概念?"; diff --git a/module/custom/view/header.html.php b/module/custom/view/header.html.php index 6d42524884..3b19374421 100644 --- a/module/custom/view/header.html.php +++ b/module/custom/view/header.html.php @@ -7,10 +7,12 @@ if(strpos('story|todo|block', $object) !== false) echo ""; if(strpos('execution|product', $object) !== false) common::printLink('custom', $object, "", "{$lang->custom->$object}", '', "class='btn btn-link' id='{$object}Tab'"); if(strpos('execution|product', $object) === false) common::printLink('custom', 'set', "module=$object&field=" . key($lang->custom->{$object}->fields), "{$name}", '', "class='btn btn-link' id='{$object}Tab'"); + if($object == 'user') common::printLink('custom', 'required', "", "{$lang->custom->required}", '', "class='btn btn-link' id='requiredTab'"); } foreach($lang->custom->system as $sysObject) { + if($sysObject == 'required') continue; common::printLink('custom', $sysObject, "", "{$lang->custom->$sysObject}", '', "class='btn btn-link' id='{$sysObject}Tab'"); } if((isset($config->systemMode) and $config->systemMode == 'classic') || (isset($config->global->upgradeStep) and $config->global->upgradeStep == 'mergeProgram')) diff --git a/module/execution/control.php b/module/execution/control.php index b9f9df6838..0fc4ed0ff9 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -265,6 +265,9 @@ class execution extends control */ public function grouptask($executionID = 0, $groupBy = 'story', $filter = '') { + $moduleIndex = array_search('execution', $this->lang->noMenuModule); + if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); + $execution = $this->commonAction($executionID); $executionID = $execution->id; @@ -1086,6 +1089,9 @@ class execution extends control */ public function team($executionID = 0) { + $moduleIndex = array_search('execution', $this->lang->noMenuModule); + if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); + $execution = $this->commonAction($executionID); $executionID = $execution->id; @@ -1645,6 +1651,9 @@ class execution extends control */ public function view($executionID) { + $moduleIndex = array_search('execution', $this->lang->noMenuModule); + if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); + $execution = $this->execution->getById($executionID, true); if(empty($execution) || strpos('stage,sprint', $execution->type) === false) die(js::error($this->lang->notFound) . js::locate('back')); @@ -1758,6 +1767,9 @@ class execution extends control */ public function tree($executionID, $type = 'task') { + $moduleIndex = array_search('execution', $this->lang->noMenuModule); + if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); + $this->execution->setMenu($this->executions, $executionID); $execution = $this->loadModel('execution')->getById($executionID); $tree = $this->execution->getTree($executionID); @@ -1987,6 +1999,9 @@ class execution extends control */ public function manageProducts($executionID, $from = '') { + $moduleIndex = array_search('execution', $this->lang->noMenuModule); + if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); + /* use first execution if executionID does not exist. */ if(!isset($this->executions[$executionID])) $executionID = key($this->executions); @@ -2485,7 +2500,8 @@ class execution extends control $this->view->module = $module; $this->view->method = $method; $this->view->extra = $extra; - $this->view->executions = $this->execution->getByProject($execution->project); + $this->view->projects = $this->project->getPairsByModel(); + $this->view->executions = $this->execution->getList(); $this->display(); } @@ -2623,6 +2639,9 @@ class execution extends control */ public function whitelist($executionID = 0, $module='execution', $objectType = 'sprint', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { + $moduleIndex = array_search('execution', $this->lang->noMenuModule); + if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]); + /* use first execution if executionID does not exist. */ if(!isset($this->executions[$executionID])) $executionID = key($this->executions); diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index aa7ffdbcce..90ace49426 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -17,6 +17,8 @@ $lang->execution->id = $lang->executionCommon . '编号'; $lang->execution->type = $lang->executionCommon . '类型'; $lang->execution->name = $lang->executionCommon . '名称'; $lang->execution->code = $lang->executionCommon . '代号'; +$lang->execution->execName = '执行名称'; +$lang->execution->execCode = '执行代号'; $lang->execution->statge = '阶段'; $lang->execution->pri = '优先级'; $lang->execution->openedBy = '由谁创建'; @@ -36,6 +38,7 @@ $lang->execution->workHourUnit = 'H'; $lang->execution->totalHours = '可用工时'; $lang->execution->totalDays = '可用工日'; $lang->execution->status = $lang->executionCommon . '状态'; +$lang->execution->execStatus = '执行状态'; $lang->execution->subStatus = '子状态'; $lang->execution->desc = $lang->executionCommon . '描述'; $lang->execution->owner = '负责人'; diff --git a/module/execution/model.php b/module/execution/model.php index 3f1b45ad2d..73826c8092 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -115,8 +115,8 @@ class executionModel extends model if($methodName == 'all') $label = $this->lang->execution->allExecutions; if($methodName == 'create' and $moduleName == 'execution') $label = $this->lang->execution->create; - $executionIndex = $this->select($executions, $executionID, null, $moduleName, $methodName, $extra); - if($this->config->systemMode == 'new') $this->lang->modulePageNav = $executionIndex; + //$executionIndex = $this->select($executions, $executionID, null, $moduleName, $methodName, $extra); + //if($this->config->systemMode == 'new') $this->lang->modulePageNav = $executionIndex; foreach($this->lang->execution->menu as $key => $menu) { diff --git a/module/execution/view/ajaxgetdropmenu.html.php b/module/execution/view/ajaxgetdropmenu.html.php index fe4e0a05fe..2debb51b63 100644 --- a/module/execution/view/ajaxgetdropmenu.html.php +++ b/module/execution/view/ajaxgetdropmenu.html.php @@ -21,15 +21,16 @@ $executionsPinYin = common::convert2Pinyin($executionNames); foreach($executions as $execution) { + $executionName = zget($projects, $execution->project) . '/' . $execution->name; if($execution->status != 'done' and $execution->status != 'closed' and $execution->PM == $this->app->user->account) { - $myProjectsHtml .= html::a(sprintf($link, $execution->id), " " . $execution->name, '', "class='text-important' title='{$execution->name}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'"); + $myProjectsHtml .= html::a(sprintf($link, $execution->id), " " . $executionName, '', "class='text-important' title='{$executionName}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'"); } else if($execution->status != 'done' and $execution->status != 'closed' and !($execution->PM == $this->app->user->account)) { - $normalProjectsHtml .= html::a(sprintf($link, $execution->id), " " . $execution->name, '', "title='{$execution->name}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'"); + $normalProjectsHtml .= html::a(sprintf($link, $execution->id), " " . $executionName, '', "title='{$executionName}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'"); } - else if($execution->status == 'done' or $execution->status == 'closed') $closedProjectsHtml .= html::a(sprintf($link, $execution->id), " " . $execution->name, '', "title='{$execution->name}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'"); + else if($execution->status == 'done' or $execution->status == 'closed') $closedProjectsHtml .= html::a(sprintf($link, $execution->id), " " . $executionName, '', "title='{$executionName}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'"); } ?>
diff --git a/module/execution/view/all.html.php b/module/execution/view/all.html.php index 4f42de0e5d..375a4801b2 100644 --- a/module/execution/view/all.html.php +++ b/module/execution/view/all.html.php @@ -71,11 +71,11 @@ idAB);?> - execution->name);?> - execution->code);?> - execution->PM);?> + execution->execName : $lang->execution->name);?> + execution->execCode : $lang->execution->code);?> + execution->owner);?> execution->end);?> - execution->status);?> + execution->execStatus : $lang->execution->status);?> execution->totalEstimate;?> execution->totalConsumed;?> execution->totalLeft;?> diff --git a/module/execution/view/view.html.php b/module/execution/view/view.html.php index c024d33a56..fb16256c3a 100644 --- a/module/execution/view/view.html.php +++ b/module/execution/view/view.html.php @@ -202,7 +202,7 @@ $product):?> branch]) ? '/' . $branchGroups[$productID][$product->branch] : '';?>
- createLink('product', 'browse', "productID=$productID&branch=$product->branch"), " " . $product->name . $branchName);?> + createLink('product', 'browse', "productID=$productID&branch=$product->branch"), " " . $product->name . $branchName);?>
diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 26fab016e3..dff69058d3 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -1063,6 +1063,7 @@ $lang->resource->custom = new stdclass(); $lang->resource->custom->index = 'index'; $lang->resource->custom->set = 'set'; $lang->resource->custom->product = 'product'; +$lang->resource->custom->execution = 'execution'; $lang->resource->custom->restore = 'restore'; $lang->resource->custom->flow = 'flow'; $lang->resource->custom->working = 'working'; @@ -1076,15 +1077,16 @@ $lang->resource->custom->deleteStoryConcept = 'deleteStoryConcept'; $lang->custom->methodOrder[5] = 'index'; $lang->custom->methodOrder[10] = 'set'; $lang->custom->methodOrder[15] = 'product'; -$lang->custom->methodOrder[20] = 'restore'; -$lang->custom->methodOrder[25] = 'flow'; -$lang->custom->methodOrder[30] = 'working'; -$lang->custom->methodOrder[35] = 'setPublic'; -$lang->custom->methodOrder[40] = 'timezone'; -$lang->custom->methodOrder[45] = 'setStoryContcept'; -$lang->custom->methodOrder[50] = 'editStoryContcept'; -$lang->custom->methodOrder[55] = 'browseStoryContcept'; -$lang->custom->methodOrder[60] = 'deleteStoryContcept'; +$lang->custom->methodOrder[20] = 'execution'; +$lang->custom->methodOrder[25] = 'restore'; +$lang->custom->methodOrder[30] = 'flow'; +$lang->custom->methodOrder[35] = 'working'; +$lang->custom->methodOrder[40] = 'setPublic'; +$lang->custom->methodOrder[45] = 'timezone'; +$lang->custom->methodOrder[50] = 'setStoryContcept'; +$lang->custom->methodOrder[55] = 'editStoryContcept'; +$lang->custom->methodOrder[60] = 'browseStoryContcept'; +$lang->custom->methodOrder[65] = 'deleteStoryContcept'; $lang->resource->datatable = new stdclass(); $lang->resource->datatable->setGlobal = 'setGlobal'; diff --git a/module/index/js/index.js b/module/index/js/index.js index 3b19206365..26aa5a2f33 100644 --- a/module/index/js/index.js +++ b/module/index/js/index.js @@ -122,7 +122,7 @@ { if(['todo', 'team', 'calendar'].includes(methodLowerCase)) return 'system'; } - if(moduleName === 'company') if(methodLowerCase === 'dynamic' || methodLowerCase == 'view') return 'system'; + if(moduleName === 'company') if(methodLowerCase == 'browse') return 'admin'; if(moduleName === 'tree') { if(methodLowerCase === 'browse') diff --git a/module/program/css/product.css b/module/program/css/product.css index 34e5493a41..51bf30c93a 100644 --- a/module/program/css/product.css +++ b/module/program/css/product.css @@ -1,3 +1,4 @@ .main-table thead>tr:first-of-type>th {border-left: 1px solid #ddd;} .main-table thead>tr>th {padding: 0px 8px; line-height: 24px;} tbody.sortable > tr > td > span.sort-handler {color: #999;} +.icon-move {color: #16a8f8;} diff --git a/module/program/lang/de.php b/module/program/lang/de.php index 665717c63b..ae61763e88 100644 --- a/module/program/lang/de.php +++ b/module/program/lang/de.php @@ -1,178 +1,63 @@ program->createGuide = 'Select Template'; -$lang->program->PRJIndex = 'Dashboard'; -$lang->program->PRJHome = 'Home'; -$lang->program->PRJCreate = 'Create Project'; -$lang->program->PRJEdit = 'Edit'; -$lang->program->PRJBatchEdit = 'Batch Edit Projects'; -$lang->program->PRJView = 'Project View'; -$lang->program->batchEdit = 'Batch Edit'; -$lang->program->PRJBrowse = 'Projects'; -$lang->program->PRJAll = 'All'; -$lang->program->PRJStart = 'Start'; -$lang->program->PRJFinish = 'Finish'; -$lang->program->PRJSuspend = 'Suspend'; -$lang->program->PRJDelete = 'Delete'; -$lang->program->PRJClose = 'Close'; -$lang->program->PRJActivate = 'Activate'; -$lang->program->PRJGroup = 'Privilege Group'; -$lang->program->PRJCreateGroup = 'Create Group'; -$lang->program->PRJEditGroup = 'Edit Group'; -$lang->program->PRJCopyGroup = 'Copy Group'; -$lang->program->PRJManageView = 'Manage View'; -$lang->program->PRJManagePriv = 'Manage Privilege'; -$lang->program->PRJManageMembers = 'Manage Team'; -$lang->program->export = 'Export'; -$lang->program->addProduct = 'Add product'; -$lang->program->PRJManageGroupMember = 'Manage Group'; -$lang->program->PRJModuleSetting = 'List Settings'; -$lang->program->PRJModuleOpen = 'Program Name'; -$lang->program->PRJUpdateOrder = 'Order'; -$lang->program->PRJSort = 'Order'; -$lang->program->PRJWhitelist = 'Project Whitelist'; -$lang->program->PRJAddWhitelist = 'Project Add Whitelist'; -$lang->program->unbindWhielist = 'Project Remove Whitelist'; -$lang->program->PRJManageProducts = 'Manage Products'; -$lang->program->view = 'Program Detail'; -$lang->program->copyTitle = 'Please select an project to copy'; -$lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; -$lang->program->errorNoProducts = 'At least one product is associated'; -$lang->program->copyNoProject = 'There are no items available to copy.'; -$lang->project->searchByName = 'Enter the project name to retrieve'; - /* Fields. */ -$lang->program->common = 'Program'; -$lang->program->project = 'Project'; -$lang->program->stage = 'Stage'; -$lang->program->PM = 'Manager'; -$lang->program->PRJName = 'Name'; -$lang->program->PRJCategory = 'Category'; -$lang->program->PRJDesc = 'Description'; -$lang->program->PRJCode = 'Code'; -$lang->program->PRJCopy = 'Copy'; -$lang->program->begin = 'Begin'; -$lang->program->end = 'End'; -$lang->program->PRJStatus = 'Status'; -$lang->program->PRJPM = 'Manager'; -$lang->program->PRJBudget = 'Budget'; -$lang->program->PRJTemplate = 'Template'; -$lang->program->PRJEstimate = 'Estimates'; -$lang->program->PRJConsume = 'Cost'; -$lang->program->PRJSurplus = 'Left'; -$lang->program->PRJProgress = 'Progress'; -$lang->program->dateRange = 'Duration'; -$lang->program->to = ' to '; -$lang->program->realEnd = 'Actual End'; -$lang->program->realBegan = 'Actual Began'; -$lang->program->bygrid = 'Kanban'; -$lang->program->bylist = 'List'; -$lang->program->mine = 'My'; -$lang->program->setPlanduration = 'Set Duration'; -$lang->program->auth = 'Access Control'; -$lang->program->durationEstimation = 'Estimated Workload'; -$lang->program->teamCount = 'Man'; -$lang->program->leftStories = 'Left Stories'; -$lang->program->leftTasks = 'Left Tasks'; -$lang->program->leftBugs = 'Left Bugs'; -$lang->program->PRJChildren = 'Child Project'; -$lang->program->PRJParent = 'Parent Project'; -$lang->program->allStories = 'All Stories'; -$lang->program->doneStories = 'Finished Stories'; -$lang->program->allInput = 'Total Input'; -$lang->program->weekly = 'Program Weekly'; -$lang->program->pv = 'PV'; -$lang->program->ev = 'EV'; -$lang->program->sv = 'SV%'; -$lang->program->ac = 'AC'; -$lang->program->cv = 'CV%'; -$lang->program->PRJTeamCount = 'Team'; -$lang->program->PRJLongTime = 'Long-Term Project'; -$lang->program->future = 'TBD'; -$lang->program->morePRJ = 'More Project'; +$lang->program->name = 'Name'; +$lang->program->template = 'Template'; +$lang->program->category = 'Type'; +$lang->program->desc = 'Description'; +$lang->program->copy = 'Copy Program'; +$lang->program->status = 'Status'; +$lang->program->PM = 'Manager'; +$lang->program->budget = 'Budget'; +$lang->program->progress = 'Progress'; +$lang->program->children = 'Child'; +$lang->program->parent = 'Parent'; +$lang->program->allInput = 'Input'; +$lang->program->teamCount = 'Team'; +$lang->program->longTime = 'Long-Term'; +$lang->program->view = 'Program Detail'; -$lang->program->productNotEmpty = 'Please link products or create products.'; -$lang->program->existProductName = 'Product name already exists.'; -$lang->program->changeProgram = '%s > Change program'; -$lang->program->changeProgramTip = 'After modifying the program set, the products linked with the project will also modify the program set to which it belongs. Please confirm whether to modify it.'; -$lang->program->linkedProjectsTip = 'Linked projects are as follows'; -$lang->program->multiLinkedProductsTip = 'The following products linked to this project are also linked to other projects, please unlink before proceeding.'; +/* Actions. */ +$lang->program->common = 'Program'; +$lang->program->index = 'Home'; +$lang->program->create = 'Create Program'; +$lang->program->createGuide = 'Select Template'; +$lang->program->edit = 'Edit Program'; +$lang->program->browse = 'Programs'; +$lang->program->product = 'Products'; +$lang->program->project = 'Program Project List'; +$lang->program->all = 'All Programs'; +$lang->program->start = 'Start'; +$lang->program->finish = 'Finish'; +$lang->program->suspend = 'Suspend'; +$lang->program->delete = 'Delete'; +$lang->program->close = 'Close'; +$lang->program->activate = 'Activate'; +$lang->program->export = 'Export'; +$lang->program->stakeholder = 'Stakeholder'; +$lang->program->createStakeholder = 'Create Stakeholder'; +$lang->program->unlinkStakeholder = 'Unlink Stakeholder'; +$lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; +$lang->program->unlink = 'Unlink'; +$lang->program->moreProgram = 'More Programs'; +$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?"; +$lang->program->stakeholderType = 'Stakeholder type'; +$lang->program->isStakeholderKey = 'Key stakeholder'; +$lang->program->importStakeholder = 'Import program'; +$lang->program->manageMembers = 'Program Team'; +$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.'; +$lang->program->parentBudget = 'Parent program surplus budget:'; +$lang->program->beginLetterParent = "Parent begin date: %s, begin date should be > = parent begin date."; +$lang->program->endGreaterParent = "Parent end date: %s, end date should be < = parent end date."; +$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date."; +$lang->program->endLetterChild = "Child latest end: %s, parent end date > = child latest end date."; +$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed'; -$lang->program->tenThousand = ''; +$lang->program->stakeholderTypeList['inside'] = 'Inside'; +$lang->program->stakeholderTypeList['outside'] = 'Outside'; -$lang->program->unitList['CNY'] = 'RMB'; -$lang->program->unitList['USD'] = 'USD'; -$lang->program->unitList['HKD'] = 'HKD'; -$lang->program->unitList['NTD'] = 'New Taiwan'; -$lang->program->unitList['EUR'] = 'Euro'; -$lang->program->unitList['DEM'] = 'Deutsche Mark'; -$lang->program->unitList['CHF'] = 'Swiss Franc'; -$lang->program->unitList['FRF'] = 'French Franc'; -$lang->program->unitList['GBP'] = 'Pound'; -$lang->program->unitList['NLG'] = 'Florin'; -$lang->program->unitList['CAD'] = 'Canadian'; -$lang->program->unitList['RUR'] = 'Russian Ruble'; -$lang->program->unitList['INR'] = 'Indian'; -$lang->program->unitList['AUD'] = 'Australian'; -$lang->program->unitList['NZD'] = 'New Zealand'; -$lang->program->unitList['THB'] = 'Thai Baht'; -$lang->program->unitList['SGD'] = 'Singapore'; - -$lang->program->currencySymbol['CNY'] = '¥'; -$lang->program->currencySymbol['USD'] = '$'; -$lang->program->currencySymbol['HKD'] = 'HK$'; -$lang->program->currencySymbol['NTD'] = 'NT$'; -$lang->program->currencySymbol['EUR'] = '€'; -$lang->program->currencySymbol['DEM'] = 'DEM'; -$lang->program->currencySymbol['CHF'] = '₣'; -$lang->program->currencySymbol['FRF'] = '₣'; -$lang->program->currencySymbol['GBP'] = '£'; -$lang->program->currencySymbol['NLG'] = 'ƒ'; -$lang->program->currencySymbol['CAD'] = '$'; -$lang->program->currencySymbol['RUR'] = '₽'; -$lang->program->currencySymbol['INR'] = '₹'; -$lang->program->currencySymbol['AUD'] = 'A$'; -$lang->program->currencySymbol['NZD'] = 'NZ$'; -$lang->program->currencySymbol['THB'] = '฿'; -$lang->program->currencySymbol['SGD'] = 'S$'; - -$lang->program->modelList['scrum'] = "Scrum"; -$lang->program->modelList['waterfall'] = "CMMI"; - -$lang->program->PRJCategoryList['single'] = "Single product"; -$lang->program->PRJCategoryList['multiple'] = "Multiple products"; - -$lang->program->PRJLifeTimeList['short'] = "Short-Term"; -$lang->program->PRJLifeTimeList['long'] = "Long-Term"; -$lang->program->PRJLifeTimeList['ops'] = "DevOps"; - -$lang->program->featureBar['all'] = 'All'; -$lang->program->featureBar['doing'] = 'Going'; -$lang->program->featureBar['wait'] = 'Waiting'; -$lang->program->featureBar['suspended'] = 'Suspended'; -$lang->program->featureBar['closed'] = 'Closed'; - -$lang->program->PRJAclList['private'] = 'Private (For team members and stakeholders only)'; -$lang->program->PRJAclList['open'] = "Open (accessible with project view permissions)"; - -$lang->program->PRJAcls['private'] = 'Private'; -$lang->program->PRJAcls['open'] = "Open"; - -$lang->program->PGMPRJAclList['private'] = "Private (For team members and stakeholders only)"; -$lang->program->PGMPRJAclList['program'] = "Public within the project set (accessible to all higher-level project set leaders and stakeholders, members of this project team and stakeholders)"; -$lang->program->PGMPRJAclList['open'] = "Full disclosure (accessible with project view permissions)"; - -$lang->program->PGMPRJAcls['private'] = "Private"; -$lang->program->PGMPRJAcls['program'] = "Public within the project set"; -$lang->program->PGMPRJAcls['open'] = "Full disclosure"; - -$lang->program->PRJAuthList['extend'] = 'Inherit (system privilege and project privilege)'; -$lang->program->PRJAuthList['reset'] = 'Reset (project privilege only)'; - -$lang->program->statusList['wait'] = 'Waiting'; -$lang->program->statusList['doing'] = 'Doing'; -$lang->program->statusList['suspended'] = 'Suspended'; -$lang->program->statusList['closed'] = 'Closed'; +$lang->program->noProgram = 'No program.'; +$lang->program->showClosed = 'Closed programs.'; +$lang->program->tips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.'; $lang->program->endList[31] = 'One month'; $lang->program->endList[93] = 'Trimester'; @@ -180,115 +65,23 @@ $lang->program->endList[186] = 'Half yearly'; $lang->program->endList[365] = 'One year'; $lang->program->endList[999] = 'Longtime'; -$lang->program->noPRJ = 'No project.'; -$lang->program->accessDenied = 'Access denied!'; -$lang->program->chooseProgramType = 'Select the project management model'; -$lang->program->nextStep = 'Next step'; -$lang->program->hoursUnit = '%s hours'; -$lang->program->membersUnit = '%s men'; -$lang->program->lastIteration = 'Recent iterations'; -$lang->program->ongoingStage = 'Ongoing stage'; -$lang->program->scrum = 'Scrum'; -$lang->program->waterfall = 'CMMI'; -$lang->program->waterfallTitle = 'CMMI'; -$lang->program->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; -$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.'; -$lang->program->confirmDelete = "Do you want to delete [%s]?"; -$lang->program->emptyPM = 'No manager'; -$lang->program->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; -$lang->program->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; -$lang->program->parentBeginEnd = "Parent begin&end date: %s ~ %s"; -$lang->program->childLongTime = "If a child as long-term projects, the parent should be long-term too."; -$lang->program->readjustTime = 'Change the project begin&end date.'; -$lang->program->notAllowRemoveProducts = 'The story of this product is linked with the project. Unlink it before doing any action.'; +$lang->program->aclList['private'] = "Private (accessible to project portfolio holders and stakeholders, stakeholders can follow up maintenance)"; +$lang->program->aclList['open'] = "Default(user who can visit the program can access it)"; -$lang->program->PRJProgramTitle['0'] = 'Hide'; -$lang->program->PRJProgramTitle['base'] = 'Base-level program only'; -$lang->program->PRJProgramTitle['end'] = 'End-level program only'; +$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)"; +$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)"; +$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; -$lang->program->PRJAccessDenied = 'Access denied to this program'; -$lang->program->PRJChooseProgramType = 'Select management type'; -$lang->program->scrumTitle = 'Agile Development Management'; -$lang->program->PRJCannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.'; -$lang->program->PRJHasChildren = 'This project has a child project, so it cannot be deleted.'; -$lang->program->PRJConfirmDelete = 'Do you want to delete this project?'; -$lang->program->PRJCannotChangeToCat = "The project has contents, so you cannot it to a parent project."; -$lang->program->PRJCannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark."; -$lang->program->PRJParentBeginEnd = "The begin and end date of the parent project: %s ~ %s"; -$lang->program->PRJParentBudget = "The budget of the parent project: %s"; -$lang->program->PRJBeginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project."; -$lang->program->PRJEndGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project."; -$lang->program->PRJBeginGreateChild = "The minimum start date of the project set: %s. The start date of the project cannot be less than the minimum start date of the program set."; -$lang->program->PRJEndLetterChild = "The maximum finish date for the project set: %s. The completion date of a project cannot be greater than the maximum completion date of the program set."; -$lang->program->PRJChildLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; +$lang->program->subAcls['private'] = 'Private'; +$lang->program->subAcls['open'] = 'Default'; +$lang->program->subAcls['program'] = 'Open within the program'; -/* Actions. */ -$lang->program->PGMCommon = 'Program'; -$lang->program->PGMIndex = 'Home'; -$lang->program->PGMCreate = 'Create Program'; -$lang->program->PGMCreateGuide = 'Select Template'; -$lang->program->PGMEdit = 'Edit Program'; -$lang->program->PGMBrowse = 'Programs'; -$lang->program->PGMProduct = 'Products'; -$lang->program->PGMProject = 'Program Project List'; -$lang->program->PGMAll = 'All Programs'; -$lang->program->PGMStart = 'Start'; -$lang->program->PGMFinish = 'Finish'; -$lang->program->PGMSuspend = 'Suspend'; -$lang->program->PGMDelete = 'Delete'; -$lang->program->PGMClose = 'Close'; -$lang->program->PGMActivate = 'Activate'; -$lang->program->PGMExport = 'Export'; -$lang->program->PGMStakeholder = 'Stakeholder'; -$lang->program->createStakeholder = 'Create Stakeholder'; -$lang->program->unlinkStakeholder = 'Unlink Stakeholder'; -$lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; -$lang->program->unlink = 'Unlink'; -$lang->program->morePGM = 'More Programs'; -$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?"; -$lang->program->stakeholderType = 'Stakeholder type'; -$lang->program->isStakeholderKey = 'Key stakeholder'; -$lang->program->importStakeholder = 'Import program'; -$lang->program->PGMManageMembers = 'Program Team'; -$lang->program->PGMParentBudget = 'Parent program surplus budget:'; -$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.'; -$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be > = parent begin date."; -$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be < = parent end date."; -$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date."; -$lang->program->PGMEndLetterChild = "Child latest end: %s, parent end date > = child latest end date."; -$lang->program->PGMCloseErrorMessage = 'There are subprograms or projects that are not closed'; +$lang->program->authList['extend'] = 'Inherit(program privileges and company privileges)'; +$lang->program->authList['reset'] = 'Reset(program privileges only)'; -$lang->program->stakeholderTypeList['inside'] = 'Inside'; -$lang->program->stakeholderTypeList['outside'] = 'Outside'; +$lang->program->statusList['wait'] = 'Waiting'; +$lang->program->statusList['doing'] = 'Doing'; +$lang->program->statusList['suspended'] = 'Suspended'; +$lang->program->statusList['closed'] = 'Closed'; -/* Fields. */ -$lang->program->PGMName = 'Name'; -$lang->program->PGMTemplate = 'Template'; -$lang->program->PGMCategory = 'Type'; -$lang->program->PGMDesc = 'Description'; -$lang->program->PGMCopy = 'Copy Program'; -$lang->program->PGMStatus = 'Status'; -$lang->program->PGMPM = 'Manager'; -$lang->program->PGMBudget = 'Budget'; -$lang->program->PGMProgress = 'Progress'; -$lang->program->PGMChildren = 'Child'; -$lang->program->PGMParent = 'Parent'; -$lang->program->PGMAllInput = 'Input'; -$lang->program->PGMTeamCount = 'Team'; -$lang->program->PGMLongTime = 'Long-Term'; - -$lang->program->noPGM = 'No program.'; -$lang->program->PGMShowClosed = 'Closed programs.'; -$lang->program->PGMTips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.'; - -$lang->program->PGMAclList['private'] = "Private (accessible to project portfolio holders and stakeholders, stakeholders can follow up maintenance)"; -$lang->program->PGMAclList['open'] = "Default(user who can visit the program can access it)"; - -$lang->program->subPGMAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)"; -$lang->program->subPGMAclList['open'] = "Default(user who can visit the program can access it)"; -$lang->program->subPGMAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; - -$lang->program->PGMAuthList['extend'] = 'Inherit(program privileges and company privileges)'; -$lang->program->PGMAuthList['reset'] = 'Reset(program privileges only)'; - -$lang->program->PGMFeatureBar['all'] = 'All'; +$lang->program->featureBar['all'] = 'All'; diff --git a/module/program/lang/en.php b/module/program/lang/en.php index 02a8393e66..ddc3574630 100644 --- a/module/program/lang/en.php +++ b/module/program/lang/en.php @@ -17,23 +17,23 @@ $lang->program->longTime = 'Long-Term'; $lang->program->view = 'Program Detail'; /* Actions. */ -$lang->program->common = 'Program'; -$lang->program->index = 'Home'; -$lang->program->create = 'Create Program'; -$lang->program->createGuide = 'Select Template'; -$lang->program->edit = 'Edit Program'; -$lang->program->browse = 'Programs'; -$lang->program->product = 'Products'; -$lang->program->project = 'Program Project List'; -$lang->program->all = 'All Programs'; -$lang->program->start = 'Start'; -$lang->program->finish = 'Finish'; -$lang->program->suspend = 'Suspend'; -$lang->program->delete = 'Delete'; -$lang->program->close = 'Close'; -$lang->program->activate = 'Activate'; -$lang->program->export = 'Export'; -$lang->program->stakeholder = 'Stakeholder'; +$lang->program->common = 'Program'; +$lang->program->index = 'Home'; +$lang->program->create = 'Create Program'; +$lang->program->createGuide = 'Select Template'; +$lang->program->edit = 'Edit Program'; +$lang->program->browse = 'Programs'; +$lang->program->product = 'Products'; +$lang->program->project = 'Program Project List'; +$lang->program->all = 'All Programs'; +$lang->program->start = 'Start'; +$lang->program->finish = 'Finish'; +$lang->program->suspend = 'Suspend'; +$lang->program->delete = 'Delete'; +$lang->program->close = 'Close'; +$lang->program->activate = 'Activate'; +$lang->program->export = 'Export'; +$lang->program->stakeholder = 'Stakeholder'; $lang->program->createStakeholder = 'Create Stakeholder'; $lang->program->unlinkStakeholder = 'Unlink Stakeholder'; $lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; @@ -72,6 +72,10 @@ $lang->program->subAclList['private'] = "Private (accessible to this program set $lang->program->subAclList['open'] = "Default(user who can visit the program can access it)"; $lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; +$lang->program->subAcls['private'] = 'Private'; +$lang->program->subAcls['open'] = 'Default'; +$lang->program->subAcls['program'] = 'Open within the program'; + $lang->program->authList['extend'] = 'Inherit(program privileges and company privileges)'; $lang->program->authList['reset'] = 'Reset(program privileges only)'; diff --git a/module/program/lang/fr.php b/module/program/lang/fr.php index 7435d5896a..ae61763e88 100644 --- a/module/program/lang/fr.php +++ b/module/program/lang/fr.php @@ -1,178 +1,63 @@ program->createGuide = 'Select Template'; -$lang->program->PRJIndex = 'Dashboard'; -$lang->program->PRJHome = 'Home'; -$lang->program->PRJCreate = 'Create Project'; -$lang->program->PRJEdit = 'Edit'; -$lang->program->PRJBatchEdit = 'Batch Edit Projects'; -$lang->program->PRJView = 'Project View'; -$lang->program->batchEdit = 'Batch Edit'; -$lang->program->PRJBrowse = 'Projects'; -$lang->program->PRJAll = 'All'; -$lang->program->PRJStart = 'Start'; -$lang->program->PRJFinish = 'Finish'; -$lang->program->PRJSuspend = 'Suspend'; -$lang->program->PRJDelete = 'Delete'; -$lang->program->PRJClose = 'Close'; -$lang->program->PRJActivate = 'Activate'; -$lang->program->PRJGroup = 'Privilege Group'; -$lang->program->PRJCreateGroup = 'Create Group'; -$lang->program->PRJEditGroup = 'Edit Group'; -$lang->program->PRJCopyGroup = 'Copy Group'; -$lang->program->PRJManageView = 'Manage View'; -$lang->program->PRJManagePriv = 'Manage Privilege'; -$lang->program->PRJManageMembers = 'Manage Team'; -$lang->program->export = 'Export'; -$lang->program->addProduct = 'Add product'; -$lang->program->PRJManageGroupMember = 'Manage Group'; -$lang->program->PRJModuleSetting = 'List Settings'; -$lang->program->PRJModuleOpen = 'Program Name'; -$lang->program->PRJUpdateOrder = 'Order'; -$lang->program->PRJSort = 'Order'; -$lang->program->PRJWhitelist = 'Project Whitelist'; -$lang->program->PRJAddWhitelist = 'Project Add Whitelist'; -$lang->program->unbindWhielist = 'Project Remove Whitelist'; -$lang->program->PRJManageProducts = 'Manage Products'; -$lang->program->view = 'Program Detail'; -$lang->program->copyTitle = 'Please select an project to copy'; -$lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; -$lang->program->errorNoProducts = 'At least one product is associated'; -$lang->program->copyNoProject = 'There are no items available to copy.'; -$lang->project->searchByName = 'Enter the project name to retrieve'; - /* Fields. */ -$lang->program->common = 'Program'; -$lang->program->project = 'Project'; -$lang->program->stage = 'Stage'; -$lang->program->PM = 'Manager'; -$lang->program->PRJName = 'Name'; -$lang->program->PRJCategory = 'Category'; -$lang->program->PRJDesc = 'Description'; -$lang->program->PRJCode = 'Code'; -$lang->program->PRJCopy = 'Copy'; -$lang->program->begin = 'Begin'; -$lang->program->end = 'End'; -$lang->program->PRJStatus = 'Status'; -$lang->program->PRJPM = 'Manager'; -$lang->program->PRJBudget = 'Budget'; -$lang->program->PRJTemplate = 'Template'; -$lang->program->PRJEstimate = 'Estimates'; -$lang->program->PRJConsume = 'Cost'; -$lang->program->PRJSurplus = 'Left'; -$lang->program->PRJProgress = 'Progress'; -$lang->program->dateRange = 'Duration'; -$lang->program->to = ' to '; -$lang->program->realEnd = 'Actual End'; -$lang->program->realBegan = 'Actual Began'; -$lang->program->bygrid = 'Kanban'; -$lang->program->bylist = 'List'; -$lang->program->mine = 'My'; -$lang->program->setPlanduration = 'Set Duration'; -$lang->program->auth = 'Access Control'; -$lang->program->durationEstimation = 'Estimated Workload'; -$lang->program->teamCount = 'Man'; -$lang->program->leftStories = 'Left Stories'; -$lang->program->leftTasks = 'Left Tasks'; -$lang->program->leftBugs = 'Left Bugs'; -$lang->program->PRJChildren = 'Child Project'; -$lang->program->PRJParent = 'Parent Project'; -$lang->program->allStories = 'All Stories'; -$lang->program->doneStories = 'Finished Stories'; -$lang->program->allInput = 'Total Input'; -$lang->program->weekly = 'Program Weekly'; -$lang->program->pv = 'PV'; -$lang->program->ev = 'EV'; -$lang->program->sv = 'SV%'; -$lang->program->ac = 'AC'; -$lang->program->cv = 'CV%'; -$lang->program->PRJTeamCount = 'Team'; -$lang->program->PRJLongTime = 'Long-Term Project'; -$lang->program->future = 'TBD'; -$lang->program->morePRJ = 'More Projects'; +$lang->program->name = 'Name'; +$lang->program->template = 'Template'; +$lang->program->category = 'Type'; +$lang->program->desc = 'Description'; +$lang->program->copy = 'Copy Program'; +$lang->program->status = 'Status'; +$lang->program->PM = 'Manager'; +$lang->program->budget = 'Budget'; +$lang->program->progress = 'Progress'; +$lang->program->children = 'Child'; +$lang->program->parent = 'Parent'; +$lang->program->allInput = 'Input'; +$lang->program->teamCount = 'Team'; +$lang->program->longTime = 'Long-Term'; +$lang->program->view = 'Program Detail'; -$lang->program->productNotEmpty = 'Please link products or create products.'; -$lang->program->existProductName = 'Product name already exists.'; -$lang->program->changeProgram = '%s > Change program'; -$lang->program->changeProgramTip = 'After modifying the program set, the products linked with the project will also modify the program set to which it belongs. Please confirm whether to modify it.'; -$lang->program->linkedProjectsTip = 'Linked projects are as follows'; -$lang->program->multiLinkedProductsTip = 'The following products linked to this project are also linked to other projects, please unlink before proceeding.'; +/* Actions. */ +$lang->program->common = 'Program'; +$lang->program->index = 'Home'; +$lang->program->create = 'Create Program'; +$lang->program->createGuide = 'Select Template'; +$lang->program->edit = 'Edit Program'; +$lang->program->browse = 'Programs'; +$lang->program->product = 'Products'; +$lang->program->project = 'Program Project List'; +$lang->program->all = 'All Programs'; +$lang->program->start = 'Start'; +$lang->program->finish = 'Finish'; +$lang->program->suspend = 'Suspend'; +$lang->program->delete = 'Delete'; +$lang->program->close = 'Close'; +$lang->program->activate = 'Activate'; +$lang->program->export = 'Export'; +$lang->program->stakeholder = 'Stakeholder'; +$lang->program->createStakeholder = 'Create Stakeholder'; +$lang->program->unlinkStakeholder = 'Unlink Stakeholder'; +$lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; +$lang->program->unlink = 'Unlink'; +$lang->program->moreProgram = 'More Programs'; +$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?"; +$lang->program->stakeholderType = 'Stakeholder type'; +$lang->program->isStakeholderKey = 'Key stakeholder'; +$lang->program->importStakeholder = 'Import program'; +$lang->program->manageMembers = 'Program Team'; +$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.'; +$lang->program->parentBudget = 'Parent program surplus budget:'; +$lang->program->beginLetterParent = "Parent begin date: %s, begin date should be > = parent begin date."; +$lang->program->endGreaterParent = "Parent end date: %s, end date should be < = parent end date."; +$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date."; +$lang->program->endLetterChild = "Child latest end: %s, parent end date > = child latest end date."; +$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed'; -$lang->program->tenThousand = ''; +$lang->program->stakeholderTypeList['inside'] = 'Inside'; +$lang->program->stakeholderTypeList['outside'] = 'Outside'; -$lang->program->unitList['CNY'] = 'RMB'; -$lang->program->unitList['USD'] = 'USD'; -$lang->program->unitList['HKD'] = 'HKD'; -$lang->program->unitList['NTD'] = 'New Taiwan'; -$lang->program->unitList['EUR'] = 'Euro'; -$lang->program->unitList['DEM'] = 'Deutsche Mark'; -$lang->program->unitList['CHF'] = 'Swiss Franc'; -$lang->program->unitList['FRF'] = 'French Franc'; -$lang->program->unitList['GBP'] = 'Pound'; -$lang->program->unitList['NLG'] = 'Florin'; -$lang->program->unitList['CAD'] = 'Canadian'; -$lang->program->unitList['RUR'] = 'Russian Ruble'; -$lang->program->unitList['INR'] = 'Indian'; -$lang->program->unitList['AUD'] = 'Australian'; -$lang->program->unitList['NZD'] = 'New Zealand'; -$lang->program->unitList['THB'] = 'Thai Baht'; -$lang->program->unitList['SGD'] = 'Singapore'; - -$lang->program->currencySymbol['CNY'] = '¥'; -$lang->program->currencySymbol['USD'] = '$'; -$lang->program->currencySymbol['HKD'] = 'HK$'; -$lang->program->currencySymbol['NTD'] = 'NT$'; -$lang->program->currencySymbol['EUR'] = '€'; -$lang->program->currencySymbol['DEM'] = 'DEM'; -$lang->program->currencySymbol['CHF'] = '₣'; -$lang->program->currencySymbol['FRF'] = '₣'; -$lang->program->currencySymbol['GBP'] = '£'; -$lang->program->currencySymbol['NLG'] = 'ƒ'; -$lang->program->currencySymbol['CAD'] = '$'; -$lang->program->currencySymbol['RUR'] = '₽'; -$lang->program->currencySymbol['INR'] = '₹'; -$lang->program->currencySymbol['AUD'] = 'A$'; -$lang->program->currencySymbol['NZD'] = 'NZ$'; -$lang->program->currencySymbol['THB'] = '฿'; -$lang->program->currencySymbol['SGD'] = 'S$'; - -$lang->program->modelList['scrum'] = "Scrum"; -$lang->program->modelList['waterfall'] = "CMMI"; - -$lang->program->PRJCategoryList['single'] = "Single product"; -$lang->program->PRJCategoryList['multiple'] = "Multiple products"; - -$lang->program->PRJLifeTimeList['short'] = "Short-Term"; -$lang->program->PRJLifeTimeList['long'] = "Long-Term"; -$lang->program->PRJLifeTimeList['ops'] = "DevOps"; - -$lang->program->featureBar['all'] = 'All'; -$lang->program->featureBar['doing'] = 'Going'; -$lang->program->featureBar['wait'] = 'Waiting'; -$lang->program->featureBar['suspended'] = 'Suspended'; -$lang->program->featureBar['closed'] = 'Closed'; - -$lang->program->PRJAclList['private'] = 'Private (For team members and stakeholders only)'; -$lang->program->PRJAclList['open'] = "Open (accessible with project view permissions)"; - -$lang->program->PRJAcls['private'] = 'Private'; -$lang->program->PRJAcls['open'] = "Open"; - -$lang->program->PGMPRJAclList['private'] = "Private (For team members and stakeholders only)"; -$lang->program->PGMPRJAclList['program'] = "Public within the project set (accessible to all higher-level project set leaders and stakeholders, members of this project team and stakeholders)"; -$lang->program->PGMPRJAclList['open'] = "Full disclosure (accessible with project view permissions)"; - -$lang->program->PGMPRJAcls['private'] = "Private"; -$lang->program->PGMPRJAcls['program'] = "Public within the project set"; -$lang->program->PGMPRJAcls['open'] = "Full disclosure"; - -$lang->program->PRJAuthList['extend'] = 'Inherit (system privilege and project privilege)'; -$lang->program->PRJAuthList['reset'] = 'Reset (project privilege only)'; - -$lang->program->statusList['wait'] = 'Waiting'; -$lang->program->statusList['doing'] = 'Doing'; -$lang->program->statusList['suspended'] = 'Suspended'; -$lang->program->statusList['closed'] = 'Closed'; +$lang->program->noProgram = 'No program.'; +$lang->program->showClosed = 'Closed programs.'; +$lang->program->tips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.'; $lang->program->endList[31] = 'One month'; $lang->program->endList[93] = 'Trimester'; @@ -180,115 +65,23 @@ $lang->program->endList[186] = 'Half yearly'; $lang->program->endList[365] = 'One year'; $lang->program->endList[999] = 'Longtime'; -$lang->program->noPRJ = 'No project.'; -$lang->program->accessDenied = 'Access denied!'; -$lang->program->chooseProgramType = 'Select the project management model'; -$lang->program->nextStep = 'Next step'; -$lang->program->hoursUnit = '%s hours'; -$lang->program->membersUnit = '%s men'; -$lang->program->lastIteration = 'Recent iterations'; -$lang->program->ongoingStage = 'Ongoing stage'; -$lang->program->scrum = 'Scrum'; -$lang->program->waterfall = 'CMMI'; -$lang->program->waterfallTitle = 'CMMI'; -$lang->program->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; -$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.'; -$lang->program->confirmDelete = "Do you want to delete [%s]?"; -$lang->program->emptyPM = 'No manager'; -$lang->program->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; -$lang->program->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; -$lang->program->parentBeginEnd = "Parent begin&end date: %s ~ %s"; -$lang->program->childLongTime = "If a child as long-term projects, the parent should be long-term too."; -$lang->program->readjustTime = 'Change the project begin&end date.'; -$lang->program->notAllowRemoveProducts = 'The story of this product is linked with the project. Unlink it before doing any action.'; +$lang->program->aclList['private'] = "Private (accessible to project portfolio holders and stakeholders, stakeholders can follow up maintenance)"; +$lang->program->aclList['open'] = "Default(user who can visit the program can access it)"; -$lang->program->PRJProgramTitle['0'] = 'Hide'; -$lang->program->PRJProgramTitle['base'] = 'Base-level program only'; -$lang->program->PRJProgramTitle['end'] = 'End-level program only'; +$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)"; +$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)"; +$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; -$lang->program->PRJAccessDenied = 'Access denied to this program'; -$lang->program->PRJChooseProgramType = 'Select management type'; -$lang->program->scrumTitle = 'Agile Development Management'; -$lang->program->PRJCannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.'; -$lang->program->PRJHasChildren = 'This project has a child project, so it cannot be deleted.'; -$lang->program->PRJConfirmDelete = 'Do you want to delete this project?'; -$lang->program->PRJCannotChangeToCat = "The project has contents, so you cannot it to a parent project."; -$lang->program->PRJCannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark."; -$lang->program->PRJParentBeginEnd = "The begin and end date of the parent project: %s ~ %s"; -$lang->program->PRJParentBudget = "The budget of the parent project: %s"; -$lang->program->PRJBeginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project."; -$lang->program->PRJEndGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project."; -$lang->program->PRJBeginGreateChild = "The minimum start date of the project set: %s. The start date of the project cannot be less than the minimum start date of the program set."; -$lang->program->PRJEndLetterChild = "The maximum finish date for the project set: %s. The completion date of a project cannot be greater than the maximum completion date of the program set."; -$lang->program->PRJChildLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; +$lang->program->subAcls['private'] = 'Private'; +$lang->program->subAcls['open'] = 'Default'; +$lang->program->subAcls['program'] = 'Open within the program'; -/* Actions. */ -$lang->program->PGMCommon = 'Program'; -$lang->program->PGMIndex = 'Home'; -$lang->program->PGMCreate = 'Create Program'; -$lang->program->PGMCreateGuide = 'Select Template'; -$lang->program->PGMEdit = 'Edit Program'; -$lang->program->PGMBrowse = 'Programs'; -$lang->program->PGMProduct = 'Products'; -$lang->program->PGMProject = 'Program Project List'; -$lang->program->PGMAll = 'All Programs'; -$lang->program->PGMStart = 'Start'; -$lang->program->PGMFinish = 'Finish'; -$lang->program->PGMSuspend = 'Suspend'; -$lang->program->PGMDelete = 'Delete'; -$lang->program->PGMClose = 'Close'; -$lang->program->PGMActivate = 'Activate'; -$lang->program->PGMExport = 'Export'; -$lang->program->PGMStakeholder = 'Stakeholder'; -$lang->program->createStakeholder = 'Create Stakeholder'; -$lang->program->unlinkStakeholder = 'Unlink Stakeholder'; -$lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; -$lang->program->unlink = 'Unlink'; -$lang->program->morePGM = 'More Programs'; -$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?"; -$lang->program->stakeholderType = 'Stakeholder type'; -$lang->program->isStakeholderKey = 'Key stakeholder'; -$lang->program->importStakeholder = 'Import program'; -$lang->program->PGMManageMembers = 'Program Team'; -$lang->program->PGMParentBudget = 'Parent program surplus budget:'; -$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.'; -$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be > = parent begin date."; -$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be < = parent end date."; -$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date."; -$lang->program->PGMEndLetterChild = "Child latest end: %s, parent end date > = child latest end date."; -$lang->program->PGMCloseErrorMessage = 'There are subprograms or projects that are not closed'; +$lang->program->authList['extend'] = 'Inherit(program privileges and company privileges)'; +$lang->program->authList['reset'] = 'Reset(program privileges only)'; -$lang->program->stakeholderTypeList['inside'] = 'Inside'; -$lang->program->stakeholderTypeList['outside'] = 'Outside'; +$lang->program->statusList['wait'] = 'Waiting'; +$lang->program->statusList['doing'] = 'Doing'; +$lang->program->statusList['suspended'] = 'Suspended'; +$lang->program->statusList['closed'] = 'Closed'; -/* Fields. */ -$lang->program->PGMName = 'Name'; -$lang->program->PGMTemplate = 'Template'; -$lang->program->PGMCategory = 'Type'; -$lang->program->PGMDesc = 'Description'; -$lang->program->PGMCopy = 'Copy Program'; -$lang->program->PGMStatus = 'Status'; -$lang->program->PGMPM = 'Manager'; -$lang->program->PGMBudget = 'Budget'; -$lang->program->PGMProgress = 'Progress'; -$lang->program->PGMChildren = 'Child'; -$lang->program->PGMParent = 'Parent'; -$lang->program->PGMAllInput = 'Input'; -$lang->program->PGMTeamCount = 'Team'; -$lang->program->PGMLongTime = 'Long-Term'; - -$lang->program->noPGM = 'No program.'; -$lang->program->PGMShowClosed = 'Closed programs.'; -$lang->program->PGMTips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.'; - -$lang->program->PGMAclList['private'] = "Private (accessible to project portfolio holders and stakeholders, stakeholders can follow up maintenance)"; -$lang->program->PGMAclList['open'] = "Default(user who can visit the program can access it)"; - -$lang->program->subPGMAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)"; -$lang->program->subPGMAclList['open'] = "Default(user who can visit the program can access it)"; -$lang->program->subPGMAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; - -$lang->program->PGMAuthList['extend'] = 'Inherit(program privileges and company privileges)'; -$lang->program->PGMAuthList['reset'] = 'Reset(program privileges only)'; - -$lang->program->PGMFeatureBar['all'] = 'All'; +$lang->program->featureBar['all'] = 'All'; diff --git a/module/program/lang/vi.php b/module/program/lang/vi.php index 7435d5896a..ddc3574630 100644 --- a/module/program/lang/vi.php +++ b/module/program/lang/vi.php @@ -1,178 +1,63 @@ program->createGuide = 'Select Template'; -$lang->program->PRJIndex = 'Dashboard'; -$lang->program->PRJHome = 'Home'; -$lang->program->PRJCreate = 'Create Project'; -$lang->program->PRJEdit = 'Edit'; -$lang->program->PRJBatchEdit = 'Batch Edit Projects'; -$lang->program->PRJView = 'Project View'; -$lang->program->batchEdit = 'Batch Edit'; -$lang->program->PRJBrowse = 'Projects'; -$lang->program->PRJAll = 'All'; -$lang->program->PRJStart = 'Start'; -$lang->program->PRJFinish = 'Finish'; -$lang->program->PRJSuspend = 'Suspend'; -$lang->program->PRJDelete = 'Delete'; -$lang->program->PRJClose = 'Close'; -$lang->program->PRJActivate = 'Activate'; -$lang->program->PRJGroup = 'Privilege Group'; -$lang->program->PRJCreateGroup = 'Create Group'; -$lang->program->PRJEditGroup = 'Edit Group'; -$lang->program->PRJCopyGroup = 'Copy Group'; -$lang->program->PRJManageView = 'Manage View'; -$lang->program->PRJManagePriv = 'Manage Privilege'; -$lang->program->PRJManageMembers = 'Manage Team'; -$lang->program->export = 'Export'; -$lang->program->addProduct = 'Add product'; -$lang->program->PRJManageGroupMember = 'Manage Group'; -$lang->program->PRJModuleSetting = 'List Settings'; -$lang->program->PRJModuleOpen = 'Program Name'; -$lang->program->PRJUpdateOrder = 'Order'; -$lang->program->PRJSort = 'Order'; -$lang->program->PRJWhitelist = 'Project Whitelist'; -$lang->program->PRJAddWhitelist = 'Project Add Whitelist'; -$lang->program->unbindWhielist = 'Project Remove Whitelist'; -$lang->program->PRJManageProducts = 'Manage Products'; -$lang->program->view = 'Program Detail'; -$lang->program->copyTitle = 'Please select an project to copy'; -$lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; -$lang->program->errorNoProducts = 'At least one product is associated'; -$lang->program->copyNoProject = 'There are no items available to copy.'; -$lang->project->searchByName = 'Enter the project name to retrieve'; - /* Fields. */ -$lang->program->common = 'Program'; -$lang->program->project = 'Project'; -$lang->program->stage = 'Stage'; -$lang->program->PM = 'Manager'; -$lang->program->PRJName = 'Name'; -$lang->program->PRJCategory = 'Category'; -$lang->program->PRJDesc = 'Description'; -$lang->program->PRJCode = 'Code'; -$lang->program->PRJCopy = 'Copy'; -$lang->program->begin = 'Begin'; -$lang->program->end = 'End'; -$lang->program->PRJStatus = 'Status'; -$lang->program->PRJPM = 'Manager'; -$lang->program->PRJBudget = 'Budget'; -$lang->program->PRJTemplate = 'Template'; -$lang->program->PRJEstimate = 'Estimates'; -$lang->program->PRJConsume = 'Cost'; -$lang->program->PRJSurplus = 'Left'; -$lang->program->PRJProgress = 'Progress'; -$lang->program->dateRange = 'Duration'; -$lang->program->to = ' to '; -$lang->program->realEnd = 'Actual End'; -$lang->program->realBegan = 'Actual Began'; -$lang->program->bygrid = 'Kanban'; -$lang->program->bylist = 'List'; -$lang->program->mine = 'My'; -$lang->program->setPlanduration = 'Set Duration'; -$lang->program->auth = 'Access Control'; -$lang->program->durationEstimation = 'Estimated Workload'; -$lang->program->teamCount = 'Man'; -$lang->program->leftStories = 'Left Stories'; -$lang->program->leftTasks = 'Left Tasks'; -$lang->program->leftBugs = 'Left Bugs'; -$lang->program->PRJChildren = 'Child Project'; -$lang->program->PRJParent = 'Parent Project'; -$lang->program->allStories = 'All Stories'; -$lang->program->doneStories = 'Finished Stories'; -$lang->program->allInput = 'Total Input'; -$lang->program->weekly = 'Program Weekly'; -$lang->program->pv = 'PV'; -$lang->program->ev = 'EV'; -$lang->program->sv = 'SV%'; -$lang->program->ac = 'AC'; -$lang->program->cv = 'CV%'; -$lang->program->PRJTeamCount = 'Team'; -$lang->program->PRJLongTime = 'Long-Term Project'; -$lang->program->future = 'TBD'; -$lang->program->morePRJ = 'More Projects'; +$lang->program->name = 'Name'; +$lang->program->template = 'Template'; +$lang->program->category = 'Type'; +$lang->program->desc = 'Description'; +$lang->program->copy = 'Copy Program'; +$lang->program->status = 'Status'; +$lang->program->PM = 'Manager'; +$lang->program->budget = 'Budget'; +$lang->program->progress = 'Progress'; +$lang->program->children = 'Child'; +$lang->program->parent = 'Parent'; +$lang->program->allInput = 'Input'; +$lang->program->teamCount = 'Team'; +$lang->program->longTime = 'Long-Term'; +$lang->program->view = 'Program Detail'; -$lang->program->productNotEmpty = 'Please link products or create products.'; -$lang->program->existProductName = 'Product name already exists.'; -$lang->program->changeProgram = '%s > Change program'; -$lang->program->changeProgramTip = 'After modifying the program set, the products linked with the project will also modify the program set to which it belongs. Please confirm whether to modify it.'; -$lang->program->linkedProjectsTip = 'Linked projects are as follows'; -$lang->program->multiLinkedProductsTip = 'The following products linked to this project are also linked to other projects, please unlink before proceeding.'; +/* Actions. */ +$lang->program->common = 'Program'; +$lang->program->index = 'Home'; +$lang->program->create = 'Create Program'; +$lang->program->createGuide = 'Select Template'; +$lang->program->edit = 'Edit Program'; +$lang->program->browse = 'Programs'; +$lang->program->product = 'Products'; +$lang->program->project = 'Program Project List'; +$lang->program->all = 'All Programs'; +$lang->program->start = 'Start'; +$lang->program->finish = 'Finish'; +$lang->program->suspend = 'Suspend'; +$lang->program->delete = 'Delete'; +$lang->program->close = 'Close'; +$lang->program->activate = 'Activate'; +$lang->program->export = 'Export'; +$lang->program->stakeholder = 'Stakeholder'; +$lang->program->createStakeholder = 'Create Stakeholder'; +$lang->program->unlinkStakeholder = 'Unlink Stakeholder'; +$lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; +$lang->program->unlink = 'Unlink'; +$lang->program->moreProgram = 'More program'; +$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?"; +$lang->program->stakeholderType = 'Stakeholder type'; +$lang->program->isStakeholderKey = 'Key stakeholder'; +$lang->program->importStakeholder = 'Import program'; +$lang->program->manageMembers = 'Program Team'; +$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.'; +$lang->program->parentBudget = 'Parent program surplus budget:'; +$lang->program->beginLetterParent = "Parent begin date: %s, begin date should be > = parent begin date."; +$lang->program->endGreaterParent = "Parent end date: %s, end date should be < = parent end date."; +$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date."; +$lang->program->endLetterChild = "Child latest end: %s, parent end date > = child latest end date."; +$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed'; -$lang->program->tenThousand = ''; +$lang->program->stakeholderTypeList['inside'] = 'Inside'; +$lang->program->stakeholderTypeList['outside'] = 'Outside'; -$lang->program->unitList['CNY'] = 'RMB'; -$lang->program->unitList['USD'] = 'USD'; -$lang->program->unitList['HKD'] = 'HKD'; -$lang->program->unitList['NTD'] = 'New Taiwan'; -$lang->program->unitList['EUR'] = 'Euro'; -$lang->program->unitList['DEM'] = 'Deutsche Mark'; -$lang->program->unitList['CHF'] = 'Swiss Franc'; -$lang->program->unitList['FRF'] = 'French Franc'; -$lang->program->unitList['GBP'] = 'Pound'; -$lang->program->unitList['NLG'] = 'Florin'; -$lang->program->unitList['CAD'] = 'Canadian'; -$lang->program->unitList['RUR'] = 'Russian Ruble'; -$lang->program->unitList['INR'] = 'Indian'; -$lang->program->unitList['AUD'] = 'Australian'; -$lang->program->unitList['NZD'] = 'New Zealand'; -$lang->program->unitList['THB'] = 'Thai Baht'; -$lang->program->unitList['SGD'] = 'Singapore'; - -$lang->program->currencySymbol['CNY'] = '¥'; -$lang->program->currencySymbol['USD'] = '$'; -$lang->program->currencySymbol['HKD'] = 'HK$'; -$lang->program->currencySymbol['NTD'] = 'NT$'; -$lang->program->currencySymbol['EUR'] = '€'; -$lang->program->currencySymbol['DEM'] = 'DEM'; -$lang->program->currencySymbol['CHF'] = '₣'; -$lang->program->currencySymbol['FRF'] = '₣'; -$lang->program->currencySymbol['GBP'] = '£'; -$lang->program->currencySymbol['NLG'] = 'ƒ'; -$lang->program->currencySymbol['CAD'] = '$'; -$lang->program->currencySymbol['RUR'] = '₽'; -$lang->program->currencySymbol['INR'] = '₹'; -$lang->program->currencySymbol['AUD'] = 'A$'; -$lang->program->currencySymbol['NZD'] = 'NZ$'; -$lang->program->currencySymbol['THB'] = '฿'; -$lang->program->currencySymbol['SGD'] = 'S$'; - -$lang->program->modelList['scrum'] = "Scrum"; -$lang->program->modelList['waterfall'] = "CMMI"; - -$lang->program->PRJCategoryList['single'] = "Single product"; -$lang->program->PRJCategoryList['multiple'] = "Multiple products"; - -$lang->program->PRJLifeTimeList['short'] = "Short-Term"; -$lang->program->PRJLifeTimeList['long'] = "Long-Term"; -$lang->program->PRJLifeTimeList['ops'] = "DevOps"; - -$lang->program->featureBar['all'] = 'All'; -$lang->program->featureBar['doing'] = 'Going'; -$lang->program->featureBar['wait'] = 'Waiting'; -$lang->program->featureBar['suspended'] = 'Suspended'; -$lang->program->featureBar['closed'] = 'Closed'; - -$lang->program->PRJAclList['private'] = 'Private (For team members and stakeholders only)'; -$lang->program->PRJAclList['open'] = "Open (accessible with project view permissions)"; - -$lang->program->PRJAcls['private'] = 'Private'; -$lang->program->PRJAcls['open'] = "Open"; - -$lang->program->PGMPRJAclList['private'] = "Private (For team members and stakeholders only)"; -$lang->program->PGMPRJAclList['program'] = "Public within the project set (accessible to all higher-level project set leaders and stakeholders, members of this project team and stakeholders)"; -$lang->program->PGMPRJAclList['open'] = "Full disclosure (accessible with project view permissions)"; - -$lang->program->PGMPRJAcls['private'] = "Private"; -$lang->program->PGMPRJAcls['program'] = "Public within the project set"; -$lang->program->PGMPRJAcls['open'] = "Full disclosure"; - -$lang->program->PRJAuthList['extend'] = 'Inherit (system privilege and project privilege)'; -$lang->program->PRJAuthList['reset'] = 'Reset (project privilege only)'; - -$lang->program->statusList['wait'] = 'Waiting'; -$lang->program->statusList['doing'] = 'Doing'; -$lang->program->statusList['suspended'] = 'Suspended'; -$lang->program->statusList['closed'] = 'Closed'; +$lang->program->noProgram = 'No program.'; +$lang->program->showClosed = 'Closed programs.'; +$lang->program->tips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.'; $lang->program->endList[31] = 'One month'; $lang->program->endList[93] = 'Trimester'; @@ -180,115 +65,23 @@ $lang->program->endList[186] = 'Half yearly'; $lang->program->endList[365] = 'One year'; $lang->program->endList[999] = 'Longtime'; -$lang->program->noPRJ = 'No project.'; -$lang->program->accessDenied = 'Access denied!'; -$lang->program->chooseProgramType = 'Select the project management model'; -$lang->program->nextStep = 'Next step'; -$lang->program->hoursUnit = '%s hours'; -$lang->program->membersUnit = '%s men'; -$lang->program->lastIteration = 'Recent iterations'; -$lang->program->ongoingStage = 'Ongoing stage'; -$lang->program->scrum = 'Scrum'; -$lang->program->waterfall = 'CMMI'; -$lang->program->waterfallTitle = 'CMMI'; -$lang->program->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; -$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.'; -$lang->program->confirmDelete = "Do you want to delete [%s]?"; -$lang->program->emptyPM = 'No manager'; -$lang->program->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; -$lang->program->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; -$lang->program->parentBeginEnd = "Parent begin&end date: %s ~ %s"; -$lang->program->childLongTime = "If a child as long-term projects, the parent should be long-term too."; -$lang->program->readjustTime = 'Change the project begin&end date.'; -$lang->program->notAllowRemoveProducts = 'The story of this product is linked with the project. Unlink it before doing any action.'; +$lang->program->aclList['private'] = "Private (accessible to project portfolio holders and stakeholders, stakeholders can follow up maintenance)"; +$lang->program->aclList['open'] = "Default(user who can visit the program can access it)"; -$lang->program->PRJProgramTitle['0'] = 'Hide'; -$lang->program->PRJProgramTitle['base'] = 'Base-level program only'; -$lang->program->PRJProgramTitle['end'] = 'End-level program only'; +$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)"; +$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)"; +$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; -$lang->program->PRJAccessDenied = 'Access denied to this program'; -$lang->program->PRJChooseProgramType = 'Select management type'; -$lang->program->scrumTitle = 'Agile Development Management'; -$lang->program->PRJCannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.'; -$lang->program->PRJHasChildren = 'This project has a child project, so it cannot be deleted.'; -$lang->program->PRJConfirmDelete = 'Do you want to delete this project?'; -$lang->program->PRJCannotChangeToCat = "The project has contents, so you cannot it to a parent project."; -$lang->program->PRJCannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark."; -$lang->program->PRJParentBeginEnd = "The begin and end date of the parent project: %s ~ %s"; -$lang->program->PRJParentBudget = "The budget of the parent project: %s"; -$lang->program->PRJBeginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project."; -$lang->program->PRJEndGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project."; -$lang->program->PRJBeginGreateChild = "The minimum start date of the project set: %s. The start date of the project cannot be less than the minimum start date of the program set."; -$lang->program->PRJEndLetterChild = "The maximum finish date for the project set: %s. The completion date of a project cannot be greater than the maximum completion date of the program set."; -$lang->program->PRJChildLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; +$lang->program->subAcls['private'] = 'Private'; +$lang->program->subAcls['open'] = 'Default'; +$lang->program->subAcls['program'] = 'Open within the program'; -/* Actions. */ -$lang->program->PGMCommon = 'Program'; -$lang->program->PGMIndex = 'Home'; -$lang->program->PGMCreate = 'Create Program'; -$lang->program->PGMCreateGuide = 'Select Template'; -$lang->program->PGMEdit = 'Edit Program'; -$lang->program->PGMBrowse = 'Programs'; -$lang->program->PGMProduct = 'Products'; -$lang->program->PGMProject = 'Program Project List'; -$lang->program->PGMAll = 'All Programs'; -$lang->program->PGMStart = 'Start'; -$lang->program->PGMFinish = 'Finish'; -$lang->program->PGMSuspend = 'Suspend'; -$lang->program->PGMDelete = 'Delete'; -$lang->program->PGMClose = 'Close'; -$lang->program->PGMActivate = 'Activate'; -$lang->program->PGMExport = 'Export'; -$lang->program->PGMStakeholder = 'Stakeholder'; -$lang->program->createStakeholder = 'Create Stakeholder'; -$lang->program->unlinkStakeholder = 'Unlink Stakeholder'; -$lang->program->batchUnlinkStakeholders = 'Batch Remove Stakeholder'; -$lang->program->unlink = 'Unlink'; -$lang->program->morePGM = 'More Programs'; -$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?"; -$lang->program->stakeholderType = 'Stakeholder type'; -$lang->program->isStakeholderKey = 'Key stakeholder'; -$lang->program->importStakeholder = 'Import program'; -$lang->program->PGMManageMembers = 'Program Team'; -$lang->program->PGMParentBudget = 'Parent program surplus budget:'; -$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.'; -$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be > = parent begin date."; -$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be < = parent end date."; -$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date."; -$lang->program->PGMEndLetterChild = "Child latest end: %s, parent end date > = child latest end date."; -$lang->program->PGMCloseErrorMessage = 'There are subprograms or projects that are not closed'; +$lang->program->authList['extend'] = 'Inherit(program privileges and company privileges)'; +$lang->program->authList['reset'] = 'Reset(program privileges only)'; -$lang->program->stakeholderTypeList['inside'] = 'Inside'; -$lang->program->stakeholderTypeList['outside'] = 'Outside'; +$lang->program->statusList['wait'] = 'Waiting'; +$lang->program->statusList['doing'] = 'Doing'; +$lang->program->statusList['suspended'] = 'Suspended'; +$lang->program->statusList['closed'] = 'Closed'; -/* Fields. */ -$lang->program->PGMName = 'Name'; -$lang->program->PGMTemplate = 'Template'; -$lang->program->PGMCategory = 'Type'; -$lang->program->PGMDesc = 'Description'; -$lang->program->PGMCopy = 'Copy Program'; -$lang->program->PGMStatus = 'Status'; -$lang->program->PGMPM = 'Manager'; -$lang->program->PGMBudget = 'Budget'; -$lang->program->PGMProgress = 'Progress'; -$lang->program->PGMChildren = 'Child'; -$lang->program->PGMParent = 'Parent'; -$lang->program->PGMAllInput = 'Input'; -$lang->program->PGMTeamCount = 'Team'; -$lang->program->PGMLongTime = 'Long-Term'; - -$lang->program->noPGM = 'No program.'; -$lang->program->PGMShowClosed = 'Closed programs.'; -$lang->program->PGMTips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.'; - -$lang->program->PGMAclList['private'] = "Private (accessible to project portfolio holders and stakeholders, stakeholders can follow up maintenance)"; -$lang->program->PGMAclList['open'] = "Default(user who can visit the program can access it)"; - -$lang->program->subPGMAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)"; -$lang->program->subPGMAclList['open'] = "Default(user who can visit the program can access it)"; -$lang->program->subPGMAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)"; - -$lang->program->PGMAuthList['extend'] = 'Inherit(program privileges and company privileges)'; -$lang->program->PGMAuthList['reset'] = 'Reset(program privileges only)'; - -$lang->program->PGMFeatureBar['all'] = 'All'; +$lang->program->featureBar['all'] = 'All'; diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index 63a657a903..b43f11ae82 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -72,6 +72,10 @@ $lang->program->subAclList['private'] = "私有(本项目集负责人和干系 $lang->program->subAclList['open'] = "全部公开(有项目集视图权限,即可访问)"; $lang->program->subAclList['program'] = "项目集内公开 (所有上级项目集负责人和干系人、本项目集负责人和干系人可访问)"; +$lang->program->subAcls['private'] = '私有'; +$lang->program->subAcls['open'] = '全部公开'; +$lang->program->subAcls['program'] = '项目集内公开'; + $lang->program->authList['extend'] = '继承(取项目权限与组织权限的并集)'; $lang->program->authList['reset'] = '重新定义(只取项目权限)'; diff --git a/module/project/control.php b/module/project/control.php index 19fd20738c..7b464d8acf 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -468,10 +468,10 @@ class project extends control $this->action->logHistory($actionID, $changes); } } - die(js::locate($this->session->PRJList, 'parent')); + die(js::locate($this->session->projectList, 'parent')); } - $projectIdList = $this->post->projectIdList ? $this->post->projectIdList : die(js::locate($this->session->PRJList, 'parent')); + $projectIdList = $this->post->projectIdList ? $this->post->projectIdList : die(js::locate($this->session->projectList, 'parent')); $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($projectIdList)->fetchAll('id'); foreach($projects as $project) $appendPMUsers[$project->PM] = $project->PM; @@ -480,7 +480,7 @@ class project extends control $this->view->position[] = $this->lang->project->batchEdit; $this->view->projects = $projects; - $this->view->projectList = $this->project->getParentPairs(); + $this->view->programList = $this->program->getParentPairs(); $this->view->PMUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst', $appendPMUsers); $this->display(); diff --git a/module/project/model.php b/module/project/model.php index 7616256143..8d262a8be8 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -948,9 +948,9 @@ class projectModel extends model foreach($data->projectIdList as $projectID) { - $projectName = $data->names[$projectID]; + $projectID = (int)$projectID; + $projectName = $data->names[$projectID]; - $projectID = (int)$projectID; $projects[$projectID] = new stdClass(); $projects[$projectID]->name = $projectName; $projects[$projectID]->parent = $data->parents[$projectID]; diff --git a/module/project/view/batchedit.html.php b/module/project/view/batchedit.html.php index c15a6aa94b..a358b795a7 100644 --- a/module/project/view/batchedit.html.php +++ b/module/project/view/batchedit.html.php @@ -11,7 +11,7 @@ */ ?> -project->weekend);?> +execution->weekend);?> project->linkedProjectsTip);?> project->changeProgram);?> project->edit->requiredFields;?> @@ -29,15 +29,15 @@ project->PM;?> project->begin;?> project->end;?> - project->acl;?> + project->acl;?> $project):?> - parent ? $lang->program->aclList : $lang->project->aclList;?> + parent ? $lang->program->subAcls : $lang->project->acls;?> - parent, "class='form-control chosen' data-id='$projectID' data-name='{$project->name}' data-parent='{$project->parent}'");?> + parent, "class='form-control chosen' data-id='$projectID' data-name='{$project->name}' data-parent='{$project->parent}'");?> name, "class='form-control'");?> PM, "class='form-control chosen'");?> diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index 14b80d3dcf..3c73615844 100644 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -22,7 +22,7 @@ project->notAllowRemoveProducts);?> project->linkedProjectsTip);?> -parent ? $lang->program->aclList : $lang->project->aclList;?> +parent ? $lang->program->subAclList : $lang->project->aclList;?> project->edit->requiredFields;?>
diff --git a/module/project/view/view.html.php b/module/project/view/view.html.php index 2b339855c3..1f2475e520 100644 --- a/module/project/view/view.html.php +++ b/module/project/view/view.html.php @@ -141,7 +141,7 @@ $product):?> branch]) ? '/' . $branchGroups[$productID][$product->branch] : '';?>
- createLink('product', 'browse', "productID=$productID&branch=$product->branch"), " " . $product->name . $branchName);?> + createLink('product', 'browse', "productID=$productID&branch=$product->branch"), " " . $product->name . $branchName);?>
diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 0d5a17f99b..a2c5f10be9 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -636,6 +636,10 @@ class upgradeModel extends model $this->saveLogs('Execute 15_0'); $this->execSQL($this->getUpgradeFile('15.0')); $this->appendExec('15_0'); + case '15_0_beta1': + $this->saveLogs('Execute 15_0_beta1'); + $this->adjustBugOfProject(); + $this->appendExec('15_0_beta1'); } $this->deletePatch(); @@ -4579,4 +4583,26 @@ class upgradeModel extends model return true; } + + /** + * Adjust the project field of the zt_bug table. + * + * @access public + * @return bool + */ + public function adjustBugOfProject() + { + $bugs = $this->dao->select('id,execution')->from(TABLE_BUG)->fetchAll('id'); + $executions = $this->dao->select('id,project')->from(TABLE_EXECUTION)->fetchAll('id'); + + foreach($bugs as $id => $bug) + { + if($bug->execution == 0) continue; + $data = array(); + $data['project'] = $executions[$bug->execution]->project; + if($data) $this->dao->update(TABLE_BUG)->data($data)->where('id')->eq($id)->exec(); + } + + return true; + } } diff --git a/module/user/view/featurebar.html.php b/module/user/view/featurebar.html.php index 069a8338cc..96011fa96a 100755 --- a/module/user/view/featurebar.html.php +++ b/module/user/view/featurebar.html.php @@ -16,9 +16,12 @@ $active = $methodName == 'task' ? ' btn-active-text' : ''; common::printLink('user', 'task', "userID={$user->id}", $label, '', "class='btn btn-link $active'"); - $label = "{$lang->URCommon}"; - $active = ($methodName == 'story' and $storyType == 'requirement') ? ' btn-active-text' : ''; - common::printLink('user', 'story', "userID={$user->id}&storyType=requirement", $label, '', "class='btn btn-link $active'"); + if($config->URAndSR) + { + $label = "{$lang->URCommon}"; + $active = ($methodName == 'story' and $storyType == 'requirement') ? ' btn-active-text' : ''; + common::printLink('user', 'story', "userID={$user->id}&storyType=requirement", $label, '', "class='btn btn-link $active'"); + } $label = "{$lang->SRCommon}"; $active = ($methodName == 'story' and $storyType == 'story') ? ' btn-active-text' : '';