diff --git a/.gitignore b/.gitignore index 7c3c515c1a..ead231ade8 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ CodeSniffer.conf test/runtime/* test/www !/**/.gitkeep +build/*.gz diff --git a/Jenkinsfile b/Jenkinsfile index a60cb6b5ad..1bff20960a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,6 +2,7 @@ pipeline { agent { kubernetes { inheritFrom "xuanim" + yamlFile 'misc/ci/normal.yaml' } } @@ -10,21 +11,35 @@ pipeline { } environment { - ZENTAO_RELEASE_PATH = "${WORKSPACE}/release" + TZ="Asia/Shanghai" + ZENTAO_RELEASE_PATH = "${WORKSPACE}/release" XUANXUAN_SRC_PATH = "${WORKSPACE}/xuansrc" - SRC_ZDOO_PATH = "${WORKSPACE}/zdoo" SRC_ZDOOEXT_PATH = "${WORKSPACE}/zdooext" - SRC_ZENTAOEXT_PATH = "${WORKSPACE}/zentaoext" + MIDDLE_IMAGE_REPO = "hub.qc.oop.cc/zentao-package-ext" + MIDDLE_IMAGE_TAG = """${sh( + returnStdout: true, + script: 'date +%Y%m%d%H%M-${BUILD_ID}' + ).trim()}""" + MIRROR = "true" + + BUILD_BASIC = "true" + PUBLISH_ZIP = "true" + PUBLISH_IMAGE = "true" + PUBLISH_ZBOX = "true" + + // set to blank for auto-detect from ci.json + DOWNGRADE_ENABLED = "" + DOWNGRADE_VERSIONS = "" } stages { - stage("Package") { + stage("Basic Build") { when { allOf { buildingTag() @@ -35,46 +50,23 @@ pipeline { agent { kubernetes { inheritFrom "zentao-package build-docker xuanim" + yamlFile 'misc/ci/basic-build.yaml' } } - environment { - MIDDLE_IMAGE_REPO = "hub.qc.oop.cc/zentao-package-ext" - MIDDLE_IMAGE_TAG = """${sh( - returnStdout: true, - script: 'date +%y%m%d%H%M-${BUILD_ID}' - ).trim()}""" - } - stages { stage("Pull") { steps { checkout scm - sh 'env' - } - } + script { + env.XUANVERSION = sh(returnStdout: true,script: 'jq -r .pkg.xuanxuan.gitVersion < ci.json').trim() + env.ZENTAOEXT_VERSION = sh(returnStdout: true,script: 'jq -r .pkg.zentaoext.gitVersion < ci.json').trim() + env.ZENTAOEXT_GIT_REPO = sh(returnStdout: true,script: 'jq -r .pkg.zentaoext.gitRepo < ci.json').trim() + env.ZDOO_VERSION = sh(returnStdout: true,script: 'jq -r .pkg.zdoo.gitVersion < ci.json').trim() + env.ZDOOEXT_VERSION = sh(returnStdout: true,script: 'jq -r .pkg.zdooext.gitVersion < ci.json').trim() + + } - stage("PullExt") { - environment { - XUANVERSION = """${sh( - returnStdout: true, - script: 'jq -r .pkg.xuanxuan.gitVersion < dependency.json' - ).trim()}""" - ZENTAOEXT_VERSION = """${sh( - returnStdout: true, - script: 'jq -r .pkg.zentaoext.gitVersion < dependency.json' - ).trim()}""" - ZDOO_VERSION = """${sh( - returnStdout: true, - script: 'jq -r .pkg.zdoo.gitVersion < dependency.json' - ).trim()}""" - ZDOOEXT_VERSION = """${sh( - returnStdout: true, - script: 'jq -r .pkg.zdooext.gitVersion < dependency.json' - ).trim()}""" - } - - steps { dir('xuansrc') { checkout scmGit(branches: [[name: "${env.XUANVERSION}"]], userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/easycorp/xuanxuan.git']] @@ -98,19 +90,51 @@ pipeline { dir('zentaoext') { checkout scmGit(branches: [[name: "${env.ZENTAOEXT_VERSION}"]], extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], - userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/easycorp/zentaoext.git']] + userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: "${env.ZENTAOEXT_GIT_REPO}"]] ) } + + } + } + + stage("Setup Global Env") { + steps { + script { + env.GIT_URL = sh(returnStdout: true, script: 'git config --get remote.origin.url').trim() + env.GIT_COMMIT = sh(returnStdout: true, script: 'git rev-parse HEAD').trim() + env.GIT_TAG_BUILD_TYPE = sh(returnStdout: true, script: 'misc/parse_tag.sh $TAG_NAME type').trim() + env.GIT_TAG_BUILD_GROUP = sh(returnStdout: true, script: 'misc/parse_tag.sh $TAG_NAME group').trim() + env.GIT_TAGGER_NAME = sh(returnStdout: true, script: 'git for-each-ref --format="%(taggername)" refs/tags/$(git tag --points-at HEAD)').trim() + + def ximUsers = sh(returnStdout: true,script: 'jq -r .notice.users < ci.json').trim() + env.XIM_USERS = ximUsers + ',' + env.GIT_TAGGER_NAME + env.XIM_GROUPS = sh(returnStdout: true,script: 'jq -r .notice.groups < ci.json').trim() + + env.PMS_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/VERSION').trim() + env.BIZ_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/BIZVERSION').trim() + env.MAX_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/MAXVERSION').trim() + env.IPD_VERSION = sh(returnStdout: true, script: 'cat ${SRC_ZENTAOEXT_PATH}/IPDVERSION').trim() + + env.DOWNGRADE_ENABLED = sh(returnStdout: true, script: 'test -n "${DOWNGRADE_ENABLED}" && echo ${DOWNGRADE_ENABLED} || (jq -r .downgrade.enabled < ci.json)').trim() + env.QINIU_BUCKET = sh(returnStdout: true, script: 'jq -r .upload.bucket < ci.json').trim() + env.ARTIFACT_REPOSITORY = sh(returnStdout: true, script: 'misc/parse_tag.sh $TAG_NAME type | grep release >/dev/null && echo easycorp || echo easycorp-snapshot').trim() + env.ARTIFACT_HOST = "nexus.qc.oop.cc" + env.ARTIFACT_PROTOCOL = "https" + env.ARTIFACT_CRED_ID = "nexus-jenkins" + } } } stage("Build") { + when { + environment name:'BUILD_BASIC', value:'true' + } stages { stage("make ciCommon") { steps { container('xuanimbot') { sh 'git config --global --add safe.directory $(pwd)' - sh '/usr/local/bin/xuanimbot --groups 84be4c6e-02e3-4fdc-b081-318c0c1eca02 --groups 31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4 --title "Start build zentaopms" --url "${BUILD_URL}" --content "Build by Tag ${TAG_NAME}" --debug --custom' + sh '/usr/local/bin/xuanimbot --title "`echo -n 5byA5aeL5p6E5bu656aF6YGT | base64 --decode`" --url "${BUILD_URL}" --content "Build by Tag ${TAG_NAME}" --debug --custom' } withCredentials([gitUsernamePassword(credentialsId: 'git-zcorp-cc-jenkins-bot-http',gitToolName: 'git-tool')]) { container('package') { @@ -123,136 +147,162 @@ pipeline { } } - stage("encrypt ext code") { + stage("zentaoext") { steps { container('package') { sh 'cd $SRC_ZENTAOEXT_PATH && make' + sh 'cp ${ZENTAO_BUILD_PATH}/zentao*.zip ./' sh 'cp ${ZENTAO_BUILD_PATH}/docker/Dockerfile.release.ext ./Dockerfile.release.ext' } container('docker') { sh 'docker build --pull -t ${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG} -f Dockerfile.release.ext ${ZENTAO_RELEASE_PATH}' sh 'docker push ${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG}' } + script { + def pkgVersionMap = [ + "pms": ["pmsPack", env.PMS_VERSION, "zentaopms" + env.PMS_VERSION + ".zip"], + "biz": ["bizPack", env.BIZ_VERSION, "zentaobiz.zip"], + "max": ["maxPack", env.MAX_VERSION, "zentaomax.zip"], + "ipd": ["ipdPack", env.IPD_VERSION, "zentaoipd.zip"] + ] + + for (entry in pkgVersionMap.entrySet()) { + def SubGroup = entry.value[0] + def Zversion = entry.value[1] + def FileName = entry.value[2] + + nexusArtifactUploader( + nexusVersion: 'nexus3', + protocol: env.ARTIFACT_PROTOCOL, + nexusUrl: env.ARTIFACT_HOST, + groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP + '.source', + version: Zversion, + repository: env.ARTIFACT_REPOSITORY, + credentialsId: env.ARTIFACT_CRED_ID, + artifacts: [ + [artifactId: "zentao", + classifier: "source", + file: FileName, + type: 'zip'] + ] + ) + } + } + } } } + } // End Build + } + } + + stage("Publish") { + when { + allOf { + buildingTag() } + beforeAgent true + } - stage("Publish") { - environment { - PMS_VERSION = """${sh( - returnStdout: true, - script: 'cat ${SRC_ZENTAOEXT_PATH}/VERSION' - ).trim()}""" - BIZ_VERSION = """${sh( - returnStdout: true, - script: 'cat ${SRC_ZENTAOEXT_PATH}/BIZVERSION' - ).trim()}""" - MAX_VERSION = """${sh( - returnStdout: true, - script: 'cat ${SRC_ZENTAOEXT_PATH}/MAXVERSION' - ).trim()}""" + environment { + OUTPUT_PKG_PATH = "${ZENTAO_RELEASE_PATH}/output" + } - GIT_COMMIT = """${sh( - returnStdout: true, - script: 'git rev-parse HEAD' - ).trim()}""" - - GIT_TAG_BUILD_TYPE = """${sh( - returnStdout: true, - script: 'misc/parse_tag.sh $TAG_NAME type' - ).trim()}""" - - GIT_TAG_BUILD_GROUP = """${sh( - returnStdout: true, - script: 'misc/parse_tag.sh $TAG_NAME group' - ).trim()}""" - - GIT_TAGGER_NAME = """${sh( - returnStdout: true, - script: 'git for-each-ref --format="%(taggername)" refs/tags/$(git tag --points-at HEAD)' - ).trim()}""" - - OUTPUT_PKG_PATH = "${ZENTAO_RELEASE_PATH}/output" - - ARTIFACT_REPOSITORY = """${sh( - returnStdout: true, - script: 'misc/parse_tag.sh $TAG_NAME type | grep release >/dev/null && echo easycorp || echo easycorp-snapshot' - ).trim()}""" - ARTIFACT_HOST = "nexus.qc.oop.cc" - ARTIFACT_PROTOCOL = "https" - ARTIFACT_CRED_ID = "nexus-jenkins" + stages { + stage("Merge and Upload") { + when { + environment name:'PUBLISH_ZIP', value:'true' } - - stages { - stage("Merge and Upload") { - - matrix { - agent { - kubernetes { - containerTemplate { - name "package" - image "${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG}" - command "sleep" - args "99d" - } - } + matrix { + agent { + kubernetes { + containerTemplate { + name "package" + image "${MIDDLE_IMAGE_REPO}:${MIDDLE_IMAGE_TAG}" + command "sleep" + args "99d" } - options { - skipDefaultCheckout() + } + } + options { + skipDefaultCheckout() + } + + axes { + axis { + name "ZLANG" + values "cn", "en" + } + axis { + name "PHPVERSION" + values "php5.4_5.6", "php7.0", "php7.1", "php7.2_7.4", "k8s.php7.2_7.4", "php8.1", "k8s.php8.1" + } + } + excludes { + exclude { + axis { + name 'ZLANG' + values 'en' + } + axis { + name "PHPVERSION" + values "k8s.php7.2_7.4", "k8s.php8.1" + } + } + } + + stages { + + stage("ZIP") { + environment { + ARTIFACT_NAME = """${sh( + returnStdout: true, + script: 'test ${ZLANG} = cn && echo -n ZenTaoPMS || echo -n ZenTaoALM' + ).trim()}""" + INT_FLAG = """${sh( + returnStdout: true, + script: 'test ${ZLANG} = cn && echo -n "int." || echo -n ""' + ).trim()}""" } - axes { - axis { - name "ZLANG" - values "cn", "en" - } - axis { - name "PHPVERSION" - values "php5.4_5.6", "php7.0", "php7.1", "php7.2_7.4", "php8.1", "k8s.php7.2_7.4", "k8s.php8.1" - } - } - excludes { - exclude { - axis { - name 'ZLANG' - values 'en' - } - axis { - name "PHPVERSION" - values "k8s.php7.2_7.4", "k8s.php8.1" - } - } - } stages { - - stage("ZIP") { - environment { - ARTIFACT_NAME = """${sh( - returnStdout: true, - script: 'test ${ZLANG} = cn && echo -n ZenTaoPMS || echo -n ZenTaoALM' - ).trim()}""" - INT_FLAG = """${sh( - returnStdout: true, - script: 'test ${ZLANG} = cn && echo -n "int." || echo -n ""' - ).trim()}""" - } - - stages { - stage("package zip") { - steps{ - echo "${env.ZLANG} <=> ${env.PHPVERSION}" - container('package') { - sh 'mkdir $ZENTAO_RELEASE_PATH' - sh '${ZENTAO_BUILD_PATH}/package.sh zip' - sh 'mkdir $OUTPUT_PKG_PATH' - } + stage("package zip") { + steps{ + echo "${env.ZLANG} <=> ${env.PHPVERSION}" + container('package') { + sh 'mkdir $ZENTAO_RELEASE_PATH' + sh '${ZENTAO_BUILD_PATH}/package.sh zip' + sh 'mkdir $OUTPUT_PKG_PATH' } - } + } + } - stage("upload zip") { - steps { + stage("upload zip") { + steps { + nexusArtifactUploader( + nexusVersion: 'nexus3', + protocol: env.ARTIFACT_PROTOCOL, + nexusUrl: env.ARTIFACT_HOST, + groupId: 'zentao.pmsPack' + '.' + env.GIT_TAG_BUILD_GROUP, + version: env.PMS_VERSION, + repository: env.ARTIFACT_REPOSITORY, + credentialsId: env.ARTIFACT_CRED_ID, + artifacts: [ + [artifactId: env.ARTIFACT_NAME, + classifier: env.PHPVERSION, + file: env.ZENTAO_RELEASE_PATH + '/base.zip', + type: 'zip'] + ] + ) + + sh 'mkdir ${OUTPUT_PKG_PATH}/${PMS_VERSION}' + sh 'cp ${ZENTAO_RELEASE_PATH}/base.zip ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}-${PMS_VERSION}-${PHPVERSION}.zip' + + script { + // copy php7.2 as php8.0 + if (env.PHPVERSION=="php7.2_7.4") { + sh 'cp ${ZENTAO_RELEASE_PATH}/base.zip ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}-${PMS_VERSION}-php8.0.zip' nexusArtifactUploader( nexusVersion: 'nexus3', protocol: env.ARTIFACT_PROTOCOL, @@ -263,357 +313,525 @@ pipeline { credentialsId: env.ARTIFACT_CRED_ID, artifacts: [ [artifactId: env.ARTIFACT_NAME, - classifier: env.PHPVERSION, - file: env.ZENTAO_RELEASE_PATH + '/base.zip', - type: 'zip'] + classifier: 'php8.0', + file: env.ZENTAO_RELEASE_PATH + '/base.zip', + type: 'zip'] ] ) + } + + def pkgVersionMap = [ + "biz": ["bizPack", env.BIZ_VERSION], + "max": ["maxPack", env.MAX_VERSION], + "ipd": ["ipdPack", env.IPD_VERSION] + ] + + for (entry in pkgVersionMap.entrySet()) { + echo "set ExtName to ${entry.key}" + def ExtName = entry.key + echo "set SubGroup to ${entry.value[0]}" + def SubGroup = entry.value[0] + echo "set Zversion to ${entry.value[1]}" + def Zversion = entry.value[1] + nexusArtifactUploader( nexusVersion: 'nexus3', protocol: env.ARTIFACT_PROTOCOL, nexusUrl: env.ARTIFACT_HOST, - groupId: 'zentao.bizPack' + '.' + env.GIT_TAG_BUILD_GROUP, - version: env.BIZ_VERSION, + groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP, + version: Zversion, repository: env.ARTIFACT_REPOSITORY, credentialsId: env.ARTIFACT_CRED_ID, artifacts: [ [artifactId: env.ARTIFACT_NAME, - classifier: env.PHPVERSION, - file: env.ZENTAO_RELEASE_PATH + '/biz.zip', - type: 'zip'], - [artifactId: env.ARTIFACT_NAME + '.update', - classifier: env.PHPVERSION, - file: env.ZENTAO_RELEASE_PATH + '/biz.update.zip', - type: 'zip'] - ] - ) - nexusArtifactUploader( - nexusVersion: 'nexus3', - protocol: env.ARTIFACT_PROTOCOL, - nexusUrl: env.ARTIFACT_HOST, - groupId: 'zentao.maxPack' + '.' + env.GIT_TAG_BUILD_GROUP, - version: env.MAX_VERSION, - repository: env.ARTIFACT_REPOSITORY, - credentialsId: env.ARTIFACT_CRED_ID, - artifacts: [ + classifier: env.PHPVERSION, + file: env.ZENTAO_RELEASE_PATH + '/' + ExtName + '.zip', + type: 'zip'], [artifactId: env.ARTIFACT_NAME, - classifier: env.PHPVERSION, - file: env.ZENTAO_RELEASE_PATH + '/max.zip', - type: 'zip'], - [artifactId: env.ARTIFACT_NAME + '.update', - classifier: env.PHPVERSION, - file: env.ZENTAO_RELEASE_PATH + '/max.update.zip', - type: 'zip'] + classifier: 'update.' + env.PHPVERSION, + file: env.ZENTAO_RELEASE_PATH + '/' + ExtName + '.update.zip', + type: 'zip'] ] ) + sh 'mkdir ${OUTPUT_PKG_PATH}/' + Zversion + def moveCmd1 = String.format('mv ${ZENTAO_RELEASE_PATH}/%s.zip ${OUTPUT_PKG_PATH}/%s/${ARTIFACT_NAME}-%s-${PHPVERSION}.zip', ExtName, Zversion, Zversion) + sh moveCmd1 - sh 'mkdir ${OUTPUT_PKG_PATH}/${PMS_VERSION} ${OUTPUT_PKG_PATH}/${BIZ_VERSION} ${OUTPUT_PKG_PATH}/${MAX_VERSION}' - sh 'cp ${ZENTAO_RELEASE_PATH}/base.zip ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}.${PMS_VERSION}.${INT_FLAG}${PHPVERSION}.zip' - sh 'mv ${ZENTAO_RELEASE_PATH}/biz.zip ${OUTPUT_PKG_PATH}/${BIZ_VERSION}/${ARTIFACT_NAME}.${BIZ_VERSION}.${INT_FLAG}${PHPVERSION}.zip' - sh 'mv ${ZENTAO_RELEASE_PATH}/biz.update.zip ${OUTPUT_PKG_PATH}/${BIZ_VERSION}/${ARTIFACT_NAME}.${BIZ_VERSION}.${INT_FLAG}update.${PHPVERSION}.zip' - sh 'mv ${ZENTAO_RELEASE_PATH}/max.zip ${OUTPUT_PKG_PATH}/${MAX_VERSION}/${ARTIFACT_NAME}.${MAX_VERSION}.${INT_FLAG}${PHPVERSION}.zip' - sh 'mv ${ZENTAO_RELEASE_PATH}/max.update.zip ${OUTPUT_PKG_PATH}/${MAX_VERSION}/${ARTIFACT_NAME}.${MAX_VERSION}.${INT_FLAG}update.${PHPVERSION}.zip' - } - } // End upload zip + def moveCmd2 = String.format('mv ${ZENTAO_RELEASE_PATH}/%s.update.zip ${OUTPUT_PKG_PATH}/%s/${ARTIFACT_NAME}-%s-update.${PHPVERSION}.zip', ExtName, Zversion, Zversion) + sh moveCmd2 - stage("syspack") { - when { - // buildingTag() - environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' - } - steps{ - sh 'env | grep GIT_TAG' - container('package') { - sh '${ZENTAO_BUILD_PATH}/package.sh deb' - sh '${ZENTAO_BUILD_PATH}/package.sh rpm' - } - } + } // End for loop } - stage("upload syspack") { - when { - environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' - } + + } + } // End upload zip - steps { - sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.rpm ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}.${PMS_VERSION}.${PHPVERSION}.1.noarch.rpm' - sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.deb ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}.${PMS_VERSION}.${PHPVERSION}.1.all.deb' + stage("syspack") { + when { + // buildingTag() + environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' + } + steps{ + sh 'env | grep GIT_TAG' + container('package') { + sh '${ZENTAO_BUILD_PATH}/package.sh deb' + sh '${ZENTAO_BUILD_PATH}/package.sh rpm' } - } // End upload syspack cn + } + } - stage("Upload Qiniu") { - when { - environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' - } + stage("upload syspack") { + when { + environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' + } - environment { - QINIU_BUCKET = "download" - OBJECT_KEY_PREFIX = "zentao/" - QINIU_ACCESS_KEY = credentials('qiniu-upload-ak') - QINIU_SECRET_KEY = credentials('qiniu-upload-sk') - } + steps { + sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.rpm ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}-${PMS_VERSION}-${PHPVERSION}-1.noarch.rpm' + sh 'mv ${ZENTAO_RELEASE_PATH}/zentao.deb ${OUTPUT_PKG_PATH}/${PMS_VERSION}/${ARTIFACT_NAME}_${PMS_VERSION}-${PHPVERSION}-1_all.deb' + } + } // End upload syspack cn - steps { - sh 'ls -l ${OUTPUT_PKG_PATH}' - container('jnlp') { - sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader' - sh 'qshell qupload2 --bucket $QINIU_BUCKET --overwrite --src-dir $OUTPUT_PKG_PATH --key-prefix $OBJECT_KEY_PREFIX' - } + stage("Upload Qiniu") { + when { + environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' + } + + environment { + OBJECT_KEY_PREFIX = "zentao/" + QINIU_ACCESS_KEY = credentials('qiniu-upload-ak') + QINIU_SECRET_KEY = credentials('qiniu-upload-sk') + } + + steps { + sh 'ls -l ${OUTPUT_PKG_PATH}' + container('jnlp') { + sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader' + sh 'qshell qupload2 --bucket $QINIU_BUCKET --overwrite --src-dir $OUTPUT_PKG_PATH --key-prefix $OBJECT_KEY_PREFIX' + } + } + } + + } // end stages + } // end stage frame + + } // End matrix stages + } // End matrix + + } // End Merge and Upload Max + + stage("Notice ZIP") { + when { + environment name:'PUBLISH_ZIP', value:'true' + } + steps { + checkout scmGit(branches: [[name: "master"]], + extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], + userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/devops/zentao-package.git']] + ) + container('xuanimbot') { + sh 'env | grep GIT' + sh 'git config --global --add safe.directory $(pwd)' + sh './gen_build_report.sh > success.md' + sh '/usr/local/bin/xuanimbot --title "`echo -n 56aF6YGT5rqQ56CB5YyF5p6E5bu65oiQ5Yqf | base64 --decode`" --url "${RUN_DISPLAY_URL}" --content-file success.md --debug --custom' + } + } + } + + stage("Zbox") { + when { + environment name:'PUBLISH_ZBOX', value:'true' + } + + environment { + // printf "$PKG_URL_FORMATTER" pmsPack ZenTaoPMS 18.5 ZenTaoPMS-18.5-php8.1.zip + PKG_URL_FORMATTER = """${sh( + returnStdout: true, + script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/%s/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/%s/%s/%s" + ).trim()}""" + } + + stages { + stage("Package") { + parallel { + stage("Zbox win") { + agent { + kubernetes { + yamlFile 'misc/ci/publish-zbox.yaml' + } + } + + stages() { + stage("Prepare") { + steps { + checkout scmGit(branches: [[name: "main"]], + extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], + userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/devops/zbox-builder.git']] + ) + container('docker') { + sh "sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories" + sh "apk --no-cache add make bash jq git curl wget libarchive-tools p7zip mariadb-client tzdata" + sh "docker run --privileged --rm tonistiigi/binfmt --install all" + sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" + sh "docker buildx use mybuilder" + sh 'curl https://pkg.qucheng.com/files/stacksmith/render-template-1.0.1-10-debian-11-amd64.tar.gz | tar zxf - -C /' } } + } - } // end stages - } // end stage frame + stage("Build") { + steps { + container('docker') { + sh 'bash build-zbox.sh en win $PMS_VERSION $BIZ_VERSION $MAX_VERSION' + sh 'bash build-zbox.sh en win $BIZ_VERSION $MAX_VERSION' + sh 'bash build-zbox.sh en win $MAX_VERSION' + sh 'bash build-zbox.sh en win $IPD_VERSION' + sh 'bash build-zbox.sh zh-cn win $PMS_VERSION $BIZ_VERSION $MAX_VERSION' + sh 'bash build-zbox.sh zh-cn win $BIZ_VERSION $MAX_VERSION' + sh 'bash build-zbox.sh zh-cn win $MAX_VERSION' + sh 'bash build-zbox.sh zh-cn win $IPD_VERSION' + sh 'find release/ -name "*.exe" | xargs chmod +r' + } - } // End matrix stages - } // End matrix + script { + def pkgVersionMap = [ + "pms": ["pmsPack", "${env.PMS_VERSION}"], + "biz": ["bizPack", "${env.BIZ_VERSION}"], + "max": ["maxPack", "${env.MAX_VERSION}"], + "ipd": ["ipdPack", "${env.IPD_VERSION}"] + ] - } // End Merge and Upload Max + for (entry in pkgVersionMap.entrySet()) { + echo "key is ${entry.key}" + def ExtName = entry.key + def SubGroup = entry.value[0] + def Zversion = entry.value[1] + + nexusArtifactUploader( + nexusVersion: 'nexus3', + protocol: env.ARTIFACT_PROTOCOL, + nexusUrl: env.ARTIFACT_HOST, + groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP, + version: Zversion, + repository: env.ARTIFACT_REPOSITORY, + credentialsId: env.ARTIFACT_CRED_ID, + artifacts: [ + [artifactId: 'ZenTaoPMS', + classifier: 'zbox.win64', + file: './release/zh-cn/' + Zversion + '/ZenTaoPMS-' + Zversion + '-zbox.win64.exe', + type: 'exe'], + [artifactId: 'ZenTaoALM', + classifier: 'zbox.win64', + file: './release/en/' + Zversion + '/ZenTaoALM-' + Zversion + '-zbox.win64.exe', + type: 'exe'] + ] + ) + } // End for loop + } - stage("Notice ZIP") { + } + } + + stage("Upload Qiniu") { + when { + environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' + } + + environment { + OBJECT_KEY_PREFIX = "zentao/" + QINIU_ACCESS_KEY = credentials('qiniu-upload-ak') + QINIU_SECRET_KEY = credentials('qiniu-upload-sk') + } + + steps { + container('docker') { + sh 'mkdir -pv ./release/upload && cd ./release/upload && mkdir $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION' + sh "mv `find release/zh-cn/$PMS_VERSION release/en/$PMS_VERSION -type f -name 'ZenTao*.exe'` release/upload/$PMS_VERSION" + sh "mv `find release/zh-cn/$BIZ_VERSION release/en/$BIZ_VERSION -type f -name 'ZenTao*.exe'` release/upload/$BIZ_VERSION" + sh "mv `find release/zh-cn/$MAX_VERSION release/en/$MAX_VERSION -type f -name 'ZenTao*.exe'` release/upload/$MAX_VERSION" + sh "mv `find release/zh-cn/$IPD_VERSION release/en/$IPD_VERSION -type f -name 'ZenTao*.exe'` release/upload/$IPD_VERSION" + } + container('jnlp') { + sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader' + sh 'qshell qupload2 --bucket $QINIU_BUCKET --overwrite --src-dir ./release/upload --key-prefix $OBJECT_KEY_PREFIX' + } + } + } // End Upload Qiniu + } + } // End Zbox win + + stage("Zbox linux") { + agent { + kubernetes { + yamlFile 'misc/ci/publish-zbox.yaml' + } + } + + stages() { + stage("Prepare") { + steps { + checkout scmGit(branches: [[name: "main"]], + extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], + userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/devops/zbox-builder.git']] + ) + container('docker') { + sh "sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories" + sh "apk --no-cache add make bash jq git curl wget libarchive-tools p7zip mariadb-client tzdata" + sh "docker run --privileged --rm tonistiigi/binfmt --install all" + sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" + sh "docker buildx use mybuilder" + sh 'curl https://pkg.qucheng.com/files/stacksmith/render-template-1.0.1-10-debian-11-amd64.tar.gz | tar zxf - -C /' + } + } + } + + stage("Build") { + steps { + container('docker') { + sh 'bash build-zbox.sh zh-cn linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION' + sh 'bash build-zbox.sh en linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION' + } + + script { + def pkgVersionMap = [ + "pms": ["pmsPack", "${env.PMS_VERSION}"], + "biz": ["bizPack", "${env.BIZ_VERSION}"], + "max": ["maxPack", "${env.MAX_VERSION}"], + "ipd": ["ipdPack", "${env.IPD_VERSION}"] + ] + + for (entry in pkgVersionMap.entrySet()) { + echo "key is ${entry.key}" + def ExtName = entry.key + def SubGroup = entry.value[0] + def Zversion = entry.value[1] + + nexusArtifactUploader( + nexusVersion: 'nexus3', + protocol: env.ARTIFACT_PROTOCOL, + nexusUrl: env.ARTIFACT_HOST, + groupId: 'zentao.' + SubGroup + '.' + env.GIT_TAG_BUILD_GROUP, + version: Zversion, + repository: env.ARTIFACT_REPOSITORY, + credentialsId: env.ARTIFACT_CRED_ID, + artifacts: [ + [artifactId: 'ZenTaoPMS', + classifier: 'zbox_amd64', + file: './release/zh-cn/' + Zversion + '/amd64/ZenTaoPMS-' + Zversion + '-zbox_amd64.tar.gz', + type: 'tar.gz'], + [artifactId: 'ZenTaoPMS', + classifier: 'zbox_arm64', + file: './release/zh-cn/' + Zversion + '/arm64/ZenTaoPMS-' + Zversion + '-zbox_arm64.tar.gz', + type: 'tar.gz'], + [artifactId: 'ZenTaoALM', + classifier: 'zbox_amd64', + file: './release/en/' + Zversion + '/amd64/ZenTaoALM-' + Zversion + '-zbox_amd64.tar.gz', + type: 'tar.gz'], + [artifactId: 'ZenTaoALM', + classifier: 'zbox_arm64', + file: './release/en/' + Zversion + '/arm64/ZenTaoALM-' + Zversion + '-zbox_arm64.tar.gz', + type: 'tar.gz'] + ] + ) + } // End for loop + } + } + } + + stage("Upload Qiniu") { + when { + environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' + } + + environment { + OBJECT_KEY_PREFIX = "zentao/" + QINIU_ACCESS_KEY = credentials('qiniu-upload-ak') + QINIU_SECRET_KEY = credentials('qiniu-upload-sk') + } + + steps { + container('docker') { + sh 'mkdir -pv ./release/upload && cd ./release/upload && mkdir $PMS_VERSION $BIZ_VERSION $MAX_VERSION $IPD_VERSION' + sh "mv `find release/zh-cn/$PMS_VERSION release/en/$PMS_VERSION -type f -name 'ZenTao*'` release/upload/$PMS_VERSION" + sh "mv `find release/zh-cn/$BIZ_VERSION release/en/$BIZ_VERSION -type f -name 'ZenTao*'` release/upload/$BIZ_VERSION" + sh "mv `find release/zh-cn/$MAX_VERSION release/en/$MAX_VERSION -type f -name 'ZenTao*'` release/upload/$MAX_VERSION" + sh "mv `find release/zh-cn/$IPD_VERSION release/en/$IPD_VERSION -type f -name 'ZenTao*'` release/upload/$IPD_VERSION" + } + container('jnlp') { + sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader' + sh 'qshell qupload2 --bucket $QINIU_BUCKET --overwrite --src-dir ./release/upload --key-prefix $OBJECT_KEY_PREFIX' + } + } + } // End Upload Qiniu + } + } // End Zbox linux + + } // End parallel + } + + stage("Notice zbox") { steps { + checkout scmGit(branches: [[name: "main"]], + extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], + userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/devops/zbox-builder.git']] + ) + sh 'script/lib/gen_report.sh > zbox-success.md' container('xuanimbot') { - sh 'env | grep GIT' sh 'git config --global --add safe.directory $(pwd)' - sh './misc/gen_build_report.sh > /tmp/success.md' - sh '/usr/local/bin/xuanimbot --groups 84be4c6e-02e3-4fdc-b081-318c0c1eca02 --groups 31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4 --title "zentaopms package success" --url "${RUN_DISPLAY_URL}" --content-file /tmp/success.md --debug --custom' + sh '/usr/local/bin/xuanimbot --title "`echo -n 56aF6YGT5LiA6ZSu5a6J6KOF5YyF5p6E5bu65oiQ5Yqf | base64 --decode`" --url "${RUN_DISPLAY_URL}" --content-file zbox-success.md --debug --custom' + } + } + } + } + + } // End Zbox + + stage("Docker Image") { + when { + environment name:'PUBLISH_IMAGE', value:'true' + } + + agent { + kubernetes { + inheritFrom "dind xuanim" + yamlFile 'misc/ci/publish-image.yaml' + } + } + + environment { + REGISTRY_HOST="hub.zentao.net" + CI_BUILD_PUBLIC_IMAGE="""${sh( + returnStdout: true, + script: 'test "$GIT_TAG_BUILD_TYPE" = release && echo true || echo false' + ).trim()}""" + CI_PUBLIC_IMAGE_NAMESPACE="""${sh( + returnStdout: true, + script: "echo $GIT_URL | grep demo/zentao >/dev/null && echo test || echo app" + ).trim()}""" + CI_INTERNAL_IMAGE_NAMESPACE="""${sh( + returnStdout: true, + script: "echo $GIT_URL | grep demo/zentao >/dev/null && echo test || echo app" + ).trim()}""" + } + + stages() { + stage("prepare") { + steps { + sh 'env' + checkout scmGit(branches: [[name: "master"]], + extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], + userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/app/zentao.git']] + ) + container('docker') { + sh "sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories" + sh "apk --no-cache add make bash jq git tzdata" + sh "make markdown-init" + } + } + } + stage("docker pms") { + environment { + ZENTAO_URL = """${sh( + returnStdout: true, + script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/pmsPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" + ).trim()}""" + } + steps { + sh 'echo ${ZENTAO_URL}' + container('docker') { + withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) { + sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" + sh "docker buildx use mybuilder" + sh 'make build' + } } } } - stage("Docker Image") { - agent { - kubernetes { - inheritFrom "dind xuanim" - } + stage("docker biz") { + environment { + ZENTAO_URL = """${sh( + returnStdout: true, + script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/bizPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" + ).trim()}""" } - stages() { - stage("prepare") { - steps { - checkout scmGit(branches: [[name: "master"]], - extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], - userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/app/zentao.git']] - ) - container('docker') { - sh "sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories" - sh "apk --no-cache add make bash jq git" - sh "docker run --privileged --rm tonistiigi/binfmt --install all" - sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" - sh "docker buildx use mybuilder" - sh "make markdown-init" - } + steps { + container('docker') { + withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) { + sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" + sh "docker buildx use mybuilder" + sh 'make build-biz' + sh 'make build-biz-k8s' } } - stage("docker pms") { - environment { - ZENTAO_URL = """${sh( - returnStdout: true, - script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/pmsPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" - ).trim()}""" - } - steps { - container('docker') { - sh 'env | grep ZENTAO' - sh 'make build' - } - } - } - - stage("docker biz") { - environment { - ZENTAO_URL = """${sh( - returnStdout: true, - script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/bizPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" - ).trim()}""" - } - steps { - container('docker') { - sh 'make build-biz' - sh 'make build-biz-k8s' - } - } - } - - stage("docker max") { - environment { - ZENTAO_URL = """${sh( - returnStdout: true, - script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/maxPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" - ).trim()}""" - } - steps { - container('docker') { - sh 'make build-max' - sh 'make build-max-k8s' - } - } - } - - stage("Image Notice") { - steps { - container('docker') { - sh 'make markdown-render > ./report.md' - } - container('xuanimbot') { - sh 'git config --global --add safe.directory $(pwd)' - sh '/usr/local/bin/xuanimbot --groups 84be4c6e-02e3-4fdc-b081-318c0c1eca02 --groups 31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4 --title "zentaopms build image success" --url "${RUN_DISPLAY_URL}" --content-file ./report.md --debug --custom' - } - } - } - - } - } // End Docker Image - - stage("Zbox") { - agent { - kubernetes { - containerTemplate { - name "docker" - image "docker:23.0.6-dind-alpine3.17" - command "sleep" - args "99d" - } - inheritFrom "dind xuanim" - } - } - - stages() { - stage("Prepare") { - steps { - checkout scmGit(branches: [[name: "main"]], - extensions: [cloneOption(depth: 2, noTags: false, reference: '', shallow: true)], - userRemoteConfigs: [[credentialsId: 'git-zcorp-cc-jenkins-bot-http', url: 'https://git.zcorp.cc/devops/zbox-builder.git']] - ) - container('docker') { - sh "sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories" - sh "apk --no-cache add make bash jq git curl wget libarchive-tools p7zip mariadb-client" - sh "docker run --privileged --rm tonistiigi/binfmt --install all" - sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" - sh "docker buildx use mybuilder" - sh 'curl https://pkg.qucheng.com/files/stacksmith/render-template-1.0.1-10-debian-11-amd64.tar.gz | tar zxf - -C /' - } - } - } - - stage("Build Zbox") { - environment { - // printf "$PKG_URL_FORMATTER" pmsPack ZenTaoPMS 18.5 ZenTaoPMS-18.5-php8.1.zip - PKG_URL_FORMATTER = """${sh( - returnStdout: true, - script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/%s/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/%s/%s/%s" - ).trim()}""" - } - steps { - container('docker') { - sh 'bash build-zbox.sh zh-cn linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION ipd1.0' - sh 'bash build-zbox.sh en linux $PMS_VERSION $BIZ_VERSION $MAX_VERSION ipd1.0' - sh 'ls -l release' - } - - nexusArtifactUploader( - nexusVersion: 'nexus3', - protocol: env.ARTIFACT_PROTOCOL, - nexusUrl: env.ARTIFACT_HOST, - groupId: 'zentao.pmsPack' + '.' + env.GIT_TAG_BUILD_GROUP, - version: env.PMS_VERSION, - repository: env.ARTIFACT_REPOSITORY, - credentialsId: env.ARTIFACT_CRED_ID, - artifacts: [ - [artifactId: 'ZenTaoPMS', - classifier: 'zbox_64', - file: './release/zh-cn/' + PMS_VERSION + '/ZenTaoPMS.' + PMS_VERSION + '.zbox_64.tar.gz', - type: 'tar.gz'], - [artifactId: 'ZenTaoALM', - classifier: 'zbox_64', - file: './release/en/' + PMS_VERSION + '/ZenTaoALM.' + PMS_VERSION + '.int.zbox_64.tar.gz', - type: 'tar.gz'] - ] - ) - - nexusArtifactUploader( - nexusVersion: 'nexus3', - protocol: env.ARTIFACT_PROTOCOL, - nexusUrl: env.ARTIFACT_HOST, - groupId: 'zentao.bizPack' + '.' + env.GIT_TAG_BUILD_GROUP, - version: env.BIZ_VERSION, - repository: env.ARTIFACT_REPOSITORY, - credentialsId: env.ARTIFACT_CRED_ID, - artifacts: [ - [artifactId: 'ZenTaoPMS', - classifier: 'zbox_64', - file: './release/zh-cn/' + BIZ_VERSION + '/ZenTaoPMS.' + BIZ_VERSION + '.zbox_64.tar.gz', - type: 'tar.gz'], - [artifactId: 'ZenTaoALM', - classifier: 'zbox_64', - file: './release/en/' + BIZ_VERSION + '/ZenTaoALM.' + BIZ_VERSION + '.int.zbox_64.tar.gz', - type: 'tar.gz'] - ] - ) - - nexusArtifactUploader( - nexusVersion: 'nexus3', - protocol: env.ARTIFACT_PROTOCOL, - nexusUrl: env.ARTIFACT_HOST, - groupId: 'zentao.maxPack' + '.' + env.GIT_TAG_BUILD_GROUP, - version: env.MAX_VERSION, - repository: env.ARTIFACT_REPOSITORY, - credentialsId: env.ARTIFACT_CRED_ID, - artifacts: [ - [artifactId: 'ZenTaoPMS', - classifier: 'zbox_64', - file: './release/zh-cn/' + MAX_VERSION + '/ZenTaoPMS.' + MAX_VERSION + '.zbox_64.tar.gz', - type: 'tar.gz'], - [artifactId: 'ZenTaoALM', - classifier: 'zbox_64', - file: './release/en/' + MAX_VERSION + '/ZenTaoALM.' + MAX_VERSION + '.int.zbox_64.tar.gz', - type: 'tar.gz'] - ] - ) - - sh 'script/lib/gen_report.sh > zbox-success.md' - container('xuanimbot') { - sh 'git config --global --add safe.directory $(pwd)' - sh '/usr/local/bin/xuanimbot --groups 84be4c6e-02e3-4fdc-b081-318c0c1eca02 --groups 31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4 --title "zentaopms build zbox success" --url "${RUN_DISPLAY_URL}" --content-file zbox-success.md --debug --custom' - } - } - } - - stage("Upload Zbox to Qiniu") { - when { - environment name: 'GIT_TAG_BUILD_TYPE', value: 'release' - } - - environment { - QINIU_BUCKET = "download" - OBJECT_KEY_PREFIX = "zentao/" - QINIU_ACCESS_KEY = credentials('qiniu-upload-ak') - QINIU_SECRET_KEY = credentials('qiniu-upload-sk') - } - - steps { - container('jnlp') { - sh 'qshell account $QINIU_ACCESS_KEY $QINIU_SECRET_KEY uploader' - sh 'qshell qupload2 --bucket $QINIU_BUCKET --overwrite --src-dir ./release/zh-cn --key-prefix $OBJECT_KEY_PREFIX' - sh 'qshell qupload2 --bucket $QINIU_BUCKET --overwrite --src-dir ./release/en --key-prefix $OBJECT_KEY_PREFIX' - } - } - } // End Upload Zbox to Qiniu - } - } // End Zbox - - } - - post { - failure { - container('xuanimbot') { - sh 'git config --global --add safe.directory $(pwd)' - sh '/usr/local/bin/xuanimbot --users "${GIT_TAGGER_NAME}" --groups 31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4 --title "zentaopms build failed" --url "${BUILD_URL}" --content "" --debug --custom' + } } + + stage("docker max") { + environment { + ZENTAO_URL = """${sh( + returnStdout: true, + script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/maxPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" + ).trim()}""" + } + steps { + container('docker') { + withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) { + sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" + sh "docker buildx use mybuilder" + sh 'make build-max' + sh 'make build-max-k8s' + } + } + } + } + + stage("docker ipd") { + environment { + ZENTAO_URL = """${sh( + returnStdout: true, + script: "echo ${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/repository/${ARTIFACT_REPOSITORY}/zentao/ipdPack/`echo ${GIT_TAG_BUILD_GROUP} | tr . /`/ZenTaoPMS" + ).trim()}""" + } + steps { + container('docker') { + withDockerRegistry(credentialsId: 'hub-qucheng-push', url: 'https://' + env.REGISTRY_HOST) { + sh "docker buildx create --name mybuilder --driver docker-container --bootstrap" + sh "docker buildx use mybuilder" + sh 'make build-ipd' + sh 'make build-ipd-k8s' + } + } + } + } + + stage("Notice Image") { + steps { + container('docker') { + sh 'make markdown-render > ./report.md' + } + container('xuanimbot') { + sh 'git config --global --add safe.directory $(pwd)' + sh '/usr/local/bin/xuanimbot --title "`echo -n 56aF6YGT6ZWc5YOP5p6E5bu65oiQ5Yqf | base64 --decode`" --url "${RUN_DISPLAY_URL}" --content-file ./report.md --debug --custom' + } + } + } + } - } // end publish + } // End Docker Image + } - } // end package + + post { + failure { + container('xuanimbot') { + sh 'git config --global --add safe.directory $(pwd)' + sh '/usr/local/bin/xuanimbot --title "zentaopms build failed" --url "${BUILD_URL}" --content "" --debug --custom' + } + } + } + } // end publish } diff --git a/Makefile b/Makefile index 5fc90c1a21..1f35f89647 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = $(shell head -n 1 VERSION) -XUANVERSION = $(shell jq -r .pkg.xuanxuan.gitVersion < dependency.json) -XVERSION = $(shell jq -r .pkg.xuanxuan.ersion < dependency.json) +XUANVERSION = $(shell jq -r .pkg.xuanxuan.gitVersion < ci.json) +XVERSION = $(shell jq -r .pkg.xuanxuan.version < ci.json) XHPROF_VERSION = 2.3.9 XUANPATH := $(XUANXUAN_SRC_PATH) @@ -8,6 +8,9 @@ BUILD_PATH := $(if $(ZENTAO_BUILD_PATH),$(ZENTAO_BUILD_PATH),$(shell pwd)) RELEASE_PATH := $(if $(ZENTAO_RELEASE_PATH),$(ZENTAO_RELEASE_PATH),$(shell pwd)) XUAN_WEB_PATH := $(ZENTAO_BUILD_PATH)/web +DOWNGRADE_ENABLED := $(or $(DOWNGRADE_ENABLED),$(shell jq -r .downgrade.enabled < ci.json)) +DOWNGRADE_VERSIONS := $(or $(DOWNGRADE_VERSIONS),$(shell jq -r .downgrade.versions < ci.json)) + all: make clean make ci @@ -272,12 +275,17 @@ ciCommon: make cleanAssets zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms # en - cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g'; - cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g'; - cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php - mv zentaopms zentaoalm - zip -r -9 ZenTaoALM.$(VERSION).int.zip zentaoalm - rm -fr zentaoalm + cp -a zentaopms zentaoalm + cd zentaoalm/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g'; + cd zentaoalm/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g'; + cd zentaoalm/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php + zip -rq -9 ZenTaoALM.$(VERSION).int.zip zentaoalm + + # downgrade + @test "$(DOWNGRADE_ENABLED)" != "true" && echo "skip downgrade" || ./misc/downgrade.sh -p "$(DOWNGRADE_VERSIONS)" -i -r zentaopms -o "$(RELEASE_PATH)" framework/ lib/ module/* + + rm -fr zentaopms zentaoalm + # move pms zip to build and release path. rm -f $(BUILD_PATH)/ZenTao*.zip $(RELEASE_PATH)/ZenTaoPMS.$(VERSION).zip $(RELEASE_PATH)/ZenTaoALM.$(VERSION).int.zip cp ZenTaoPMS.$(VERSION).zip $(BUILD_PATH) diff --git a/VERSION b/VERSION index 43b986ea3b..d86a139e61 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -18.5 \ No newline at end of file +18.6 \ No newline at end of file diff --git a/api/v1/entries/tickets.php b/api/v1/entries/tickets.php index 8e64e857ca..ad35d01f07 100644 --- a/api/v1/entries/tickets.php +++ b/api/v1/entries/tickets.php @@ -54,7 +54,7 @@ class ticketsEntry extends entry */ public function post() { - $fields = 'module,product,type,openedBuild,assignedTo,deadline,title,desc,status,notify,uid'; + $fields = 'module,product,type,openedBuild,assignedTo,deadline,title,desc,status,notify,uid,pri'; $this->batchSetPost($fields); $control = $this->loadController('ticket', 'create'); diff --git a/ci.json b/ci.json new file mode 100644 index 0000000000..c8bcf11f10 --- /dev/null +++ b/ci.json @@ -0,0 +1,29 @@ +{ + "pkg": { + "xuanxuan": { + "gitVersion": "e08cd0387cbfcf4cbc28b3b3e829683066ee3bc7", + "version": "7.2.1" + }, + "zentaoext": { + "gitVersion": "18.x", + "gitRepo": "https://git.zcorp.cc/easycorp/zentaoext.git" + }, + "zdoo": { + "gitVersion": "master" + }, + "zdooext": { + "gitVersion": "master" + } + }, + "downgrade": { + "enabled": true, + "versions": "7.2,7.1,7.0,5.4" + }, + "upload": { + "bucket": "download" + }, + "notice": { + "users": "qishiyao,hufangzhou", + "groups": "84be4c6e-02e3-4fdc-b081-318c0c1eca02,31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4" + } +} diff --git a/config/config.php b/config/config.php index dbe82a58ae..8d10905d51 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '18.6'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '18.7'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->liteVersion = '1.2'; // 迅捷版版本。 The version of Lite. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. @@ -161,6 +161,7 @@ $config->wideSize = 1400; $config->timeout = 30000; $config->duplicateTime = 30; $config->maxCount = 500; +$config->batchMaxCount = 20; $config->moreLinks = array(); /* 渠成平台设置。CNE Api settings. */ diff --git a/config/zentaopms.php b/config/zentaopms.php index bc1ad0b101..24a9ecb7e3 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -244,6 +244,7 @@ $config->openMethods[] = 'search.buildzinform'; $config->openMethods[] = 'search.buildzinquery'; $config->openMethods[] = 'search.savezinquery'; $config->openMethods[] = 'space.createapplication'; +$config->openMethods[] = 'ai.adminindex'; $config->openModules = array(); $config->openModules[] = 'install'; @@ -320,6 +321,7 @@ define('TABLE_API_LIB_RELEASE', '`' . $config->db->prefix . 'api_lib_release`'); define('TABLE_MODULE', '`' . $config->db->prefix . 'module`'); define('TABLE_ACTION', '`' . $config->db->prefix . 'action`'); +define('TABLE_ACTIONRECENT', '`' . $config->db->prefix . 'actionrecent`'); define('TABLE_FILE', '`' . $config->db->prefix . 'file`'); define('TABLE_HOLIDAY', '`' . $config->db->prefix . 'holiday`'); define('TABLE_HISTORY', '`' . $config->db->prefix . 'history`'); @@ -376,9 +378,6 @@ define('TABLE_DATASET', '`' . $config->db->prefix . 'dataset`'); define('TABLE_DATAVIEW', '`' . $config->db->prefix . 'dataview`'); define('TABLE_DIMENSION', '`' . $config->db->prefix . 'dimension`'); define('TABLE_SCENE', '`' . $config->db->prefix . 'scene`'); -define('VIEW_SCENECASE', '`ztv_scenecase`'); - -define('CHANGEVALUE', 100000000); define('TABLE_PRIV', '`' . $config->db->prefix . 'priv`'); define('TABLE_PRIVLANG', '`' . $config->db->prefix . 'privlang`'); @@ -389,6 +388,8 @@ define('TABLE_SPACE', '`' . $config->db->prefix . 'space`'); define('TABLE_INSTANCE', '`' . $config->db->prefix . 'instance`'); define('TABLE_SOLUTION', '`' . $config->db->prefix . 'solution`'); define('TABLE_ARTIFACTREPO', '`' . $config->db->prefix . 'artifactrepo`'); +define('TABLE_PROMPT', '`' . $config->db->prefix . 'prompt`'); +define('TABLE_PROMPTROLE', '`' . $config->db->prefix . 'promptrole`'); $config->objectTables['product'] = TABLE_PRODUCT; $config->objectTables['productplan'] = TABLE_PRODUCTPLAN; @@ -455,8 +456,9 @@ $config->objectTables['instance'] = TABLE_INSTANCE; $config->objectTables['space'] = TABLE_SPACE; $config->objectTables['solution'] = TABLE_SOLUTION; $config->objectTables['artifactrepo'] = TABLE_ARTIFACTREPO; +$config->objectTables['prompt'] = TABLE_PROMPT; -$config->newFeatures = array('introduction', 'tutorial', 'youngBlueTheme', 'visions'); +$config->newFeatures = array('aiPrompts', 'promptDesign', 'promptExec'); $config->disabledFeatures = ''; $config->closedFeatures = ''; diff --git a/db/standard/zentao18.6.sql b/db/standard/zentao18.6.sql new file mode 100644 index 0000000000..cfacd7e80c --- /dev/null +++ b/db/standard/zentao18.6.sql @@ -0,0 +1,3804 @@ +CREATE TABLE `zt_account` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `provider` varchar(255) NOT NULL, + `adminURI` varchar(255) NOT NULL, + `account` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `mobile` varchar(255) NOT NULL, + `extra` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `status` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `name` (`name`), + KEY `provider` (`provider`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_acl` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL DEFAULT '0', + `type` char(40) NOT NULL DEFAULT 'whitelist', + `source` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_action` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` text NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `actor` varchar(100) NOT NULL DEFAULT '', + `action` varchar(80) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text, + `read` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `efforted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `action` (`action`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8; +CREATE TABLE IF NOT EXISTS `zt_actionrecent` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` text NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `actor` varchar(100) NOT NULL DEFAULT '', + `action` varchar(80) NOT NULL DEFAULT '', + `date` datetime NULL, + `comment` text NULL, + `extra` text NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `efforted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_activity` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `process` mediumint(9) NOT NULL, + `name` varchar(255) NOT NULL, + `optional` varchar(255) NOT NULL, + `tailorNorm` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `order` mediumint(8) DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_api` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `product` varchar(255) NOT NULL DEFAULT '', + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `module` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(100) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `protocol` varchar(10) NOT NULL DEFAULT '', + `method` varchar(10) NOT NULL DEFAULT '', + `requestType` varchar(100) NOT NULL DEFAULT '', + `responseType` varchar(100) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `owner` varchar(30) NOT NULL DEFAULT '0', + `desc` mediumtext, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `params` text, + `paramsExample` text, + `responseExample` text, + `response` text, + `commonParams` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '0', + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_api_lib_release` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `desc` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', + `snap` mediumtext NOT NULL, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apispec` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `doc` int(10) unsigned NOT NULL DEFAULT '0', + `module` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(100) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `protocol` varchar(10) NOT NULL DEFAULT '', + `method` varchar(10) NOT NULL DEFAULT '', + `requestType` varchar(100) NOT NULL DEFAULT '', + `responseType` varchar(100) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `owner` varchar(255) NOT NULL DEFAULT '0', + `desc` mediumtext, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `params` text, + `paramsExample` text, + `responseExample` text, + `response` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=176 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apistruct` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(30) NOT NULL DEFAULT '', + `type` varchar(50) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `attribute` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '0', + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apistruct_spec` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `type` varchar(50) NOT NULL DEFAULT '', + `desc` varchar(255) NOT NULL DEFAULT '', + `attribute` text, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approval` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `flow` mediumint(8) NOT NULL, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `nodes` mediumtext NOT NULL, + `version` mediumint(9) NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'doing', + `result` varchar(20) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflow` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `code` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `version` mediumint(8) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `type` varchar(30) NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflowobject` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `root` int(8) NOT NULL, + `flow` int(8) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `extra` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflowspec` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `flow` mediumint(8) NOT NULL, + `version` mediumint(8) NOT NULL, + `nodes` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalnode` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `approval` mediumint(8) NOT NULL, + `type` enum('review','cc') NOT NULL, + `title` varchar(255) NOT NULL, + `account` char(30) NOT NULL, + `node` varchar(100) NOT NULL, + `reviewType` varchar(100) NOT NULL DEFAULT 'manual', + `multipleType` enum('and','or') NOT NULL DEFAULT 'and', + `prev` mediumtext NOT NULL, + `next` mediumtext NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'wait', + `result` varchar(10) NOT NULL, + `date` date NOT NULL, + `opinion` mediumtext NOT NULL, + `extra` mediumtext NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_reviewed_date` (`reviewedDate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalobject` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `approval` int(8) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(8) NOT NULL, + `extra` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalrole` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `code` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `users` longtext NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_assetlib` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_attend` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `signIn` time NOT NULL, + `signOut` time NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `ip` varchar(15) NOT NULL, + `device` varchar(30) NOT NULL, + `client` varchar(20) NOT NULL, + `manualIn` time NOT NULL, + `manualOut` time NOT NULL, + `reason` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `reviewStatus` varchar(30) NOT NULL DEFAULT '', + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `attend` (`date`,`account`), + KEY `account` (`account`), + KEY `date` (`date`), + KEY `status` (`status`), + KEY `reason` (`reason`), + KEY `reviewStatus` (`reviewStatus`), + KEY `reviewedBy` (`reviewedBy`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_attendstat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `month` char(10) NOT NULL DEFAULT '', + `normal` decimal(12,2) NOT NULL DEFAULT '0.00', + `late` decimal(12,2) NOT NULL DEFAULT '0.00', + `early` decimal(12,2) NOT NULL DEFAULT '0.00', + `absent` decimal(12,2) NOT NULL DEFAULT '0.00', + `trip` decimal(12,2) NOT NULL DEFAULT '0.00', + `egress` decimal(12,2) NOT NULL DEFAULT '0.00', + `lieu` decimal(12,2) NOT NULL DEFAULT '0.00', + `paidLeave` decimal(12,2) NOT NULL DEFAULT '0.00', + `unpaidLeave` decimal(12,2) NOT NULL DEFAULT '0.00', + `timeOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `restOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `holidayOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `deserve` decimal(12,2) NOT NULL DEFAULT '0.00', + `actual` decimal(12,2) NOT NULL DEFAULT '0.00', + `status` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `attend` (`month`,`account`), + KEY `account` (`account`), + KEY `month` (`month`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL DEFAULT 'waterfall', + `practiceArea` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(255) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` int(10) DEFAULT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dateType` char(30) DEFAULT NULL, + `config` text, + `objectID` mediumint(9) NOT NULL, + `objectType` char(30) NOT NULL, + `process` mediumint(9) NOT NULL, + `processType` char(30) NOT NULL, + `checkDate` date NOT NULL, + `checkedBy` varchar(30) NOT NULL, + `realCheckDate` date NOT NULL, + `result` char(30) NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `checkBy` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `auditplan` mediumint(8) NOT NULL, + `listID` mediumint(8) NOT NULL, + `result` char(30) NOT NULL, + `checkedBy` varchar(30) NOT NULL, + `checkedDate` date NOT NULL, + `comment` text NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_automation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `node` int(11) unsigned NOT NULL DEFAULT '0', + `product` int(11) unsigned NOT NULL DEFAULT '0', + `scriptPath` varchar(255) NOT NULL DEFAULT '', + `shell` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_basicmeas` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `purpose` varchar(50) NOT NULL, + `scope` char(30) NOT NULL, + `object` char(30) NOT NULL, + `name` varchar(90) NOT NULL, + `code` char(30) NOT NULL, + `unit` varchar(10) NOT NULL, + `configure` text, + `params` text, + `definition` text, + `source` varchar(255) DEFAULT NULL, + `collectType` varchar(30) NOT NULL, + `collectConf` text NOT NULL, + `execTime` varchar(30) NOT NULL, + `collectedBy` varchar(10) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `order` mediumint(8) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `module` varchar(20) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(30) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account_vision_module_type_order` (`account`,`vision`,`module`,`type`,`order`), + KEY `account` (`account`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `default` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `desc` varchar(255) NOT NULL, + `createdDate` date NOT NULL, + `closedDate` date NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_budget` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `stage` char(30) NOT NULL, + `subject` mediumint(8) NOT NULL, + `amount` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `injection` mediumint(8) unsigned NOT NULL, + `identify` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(255) NOT NULL DEFAULT '', + `browser` varchar(255) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` mediumtext NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `feedbackBy` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0', + `result` mediumint(8) unsigned NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `mr` mediumint(8) unsigned NOT NULL, + `entry` text NOT NULL, + `lines` varchar(10) NOT NULL, + `v1` varchar(40) NOT NULL, + `v2` varchar(40) NOT NULL, + `repoType` varchar(30) NOT NULL DEFAULT '', + `issueKey` varchar(50) NOT NULL DEFAULT '', + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `toStory` (`toStory`), + KEY `result` (`result`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` varchar(255) NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `builds` varchar(255) NOT NULL, + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `execution` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + `storyPoint` float NOT NULL, + PRIMARY KEY (`execution`,`date`,`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `auto` varchar(10) NOT NULL DEFAULT 'no', + `frame` varchar(10) NOT NULL, + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `script` longtext NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `scene` int(11) DEFAULT '0', + `sort` int(11) DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `fromBug` (`fromBug`), + KEY `module` (`module`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cfd` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `execution` int(8) NOT NULL, + `type` char(30) NOT NULL, + `name` char(30) NOT NULL, + `count` smallint(6) NOT NULL, + `date` date NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `execution_type_name_date` (`execution`,`type`,`name`,`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_chart` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `dimension` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` varchar(30) NOT NULL, + `group` varchar(255) NOT NULL, + `dataset` varchar(30) NOT NULL, + `desc` text NOT NULL, + `settings` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `step` tinyint(1) unsigned NOT NULL DEFAULT '0', + `fields` mediumtext, + `langs` text, + `sql` mediumtext, + `stage` enum('draft','published') NOT NULL DEFAULT 'draft', + `builtin` tinyint(1) unsigned NOT NULL, + `objects` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cmcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `projectType` varchar(255) NOT NULL DEFAULT '', + `title` int(11) NOT NULL, + `contents` text NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `order` int(11) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_compile` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `job` mediumint(8) unsigned NOT NULL, + `queue` mediumint(8) NOT NULL, + `status` varchar(255) NOT NULL, + `logs` text, + `atTime` varchar(10) NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `tag` varchar(255) NOT NULL, + `times` tinyint(3) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `updateDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` longtext NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`vision`,`owner`,`module`,`section`,`key`) +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dashboard` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `dimension` int(8) NOT NULL DEFAULT '0', + `module` mediumint(9) NOT NULL, + `desc` mediumtext NOT NULL, + `layout` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dataset` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(155) NOT NULL, + `sql` text NOT NULL, + `fields` mediumtext NOT NULL, + `objects` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dataview` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `group` mediumint(8) unsigned NOT NULL, + `name` varchar(155) NOT NULL, + `code` varchar(50) NOT NULL, + `view` varchar(57) NOT NULL, + `sql` text NOT NULL, + `fields` mediumtext NOT NULL, + `langs` text, + `objects` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deploy` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `notify` text NOT NULL, + `cases` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `result` varchar(20) NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deployproduct` ( + `deploy` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `release` mediumint(8) unsigned NOT NULL, + `package` varchar(255) NOT NULL, + UNIQUE KEY `deploy_product_release` (`deploy`,`product`,`release`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deployscope` ( + `deploy` mediumint(8) unsigned NOT NULL, + `service` mediumint(8) unsigned NOT NULL, + `hosts` text NOT NULL, + `remove` text NOT NULL, + `add` text NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deploystep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `deploy` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `stage` varchar(30) NOT NULL, + `content` text NOT NULL, + `status` varchar(30) NOT NULL, + `assignedTo` char(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `finishedBy` char(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(4) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_design` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `product` varchar(255) NOT NULL, + `commit` text NOT NULL, + `commitedBy` varchar(30) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `story` char(30) NOT NULL, + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `type` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_designspec` ( + `design` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `files` varchar(255) NOT NULL, + UNIQUE KEY `design` (`design`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dimension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `code` (`code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `template` varchar(30) NOT NULL, + `templateType` varchar(30) NOT NULL, + `chapterType` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `parent` smallint(5) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `views` smallint(5) unsigned NOT NULL, + `assetLib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `assetLibType` varchar(30) NOT NULL DEFAULT '', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromVersion` smallint(6) NOT NULL DEFAULT '1', + `draft` longtext NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `editedList` text NULL, + `mailto` text, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`), + KEY `lib` (`lib`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` longtext NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `baseUrl` varchar(255) NOT NULL DEFAULT '', + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `desc` mediumtext NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_domain` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `domain` varchar(255) NOT NULL, + `adminURI` varchar(255) NOT NULL, + `resolverURI` varchar(255) NOT NULL, + `register` varchar(255) NOT NULL, + `expiredDate` datetime NOT NULL, + `renew` varchar(255) NOT NULL, + `account` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `domain` (`domain`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_durationestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `stage` mediumint(9) NOT NULL, + `workload` varchar(255) NOT NULL, + `worktimeRate` varchar(255) NOT NULL, + `people` varchar(255) NOT NULL, + `startDate` date NOT NULL, + `endDate` date NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `product` text NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `work` text, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `date` date NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `extra` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `execution` (`execution`), + KEY `objectID` (`objectID`), + KEY `date` (`date`), + KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `freePasswd` enum('0','1') NOT NULL DEFAULT '0', + `ip` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `calledTime` int(10) unsigned NOT NULL DEFAULT '0', + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_expect` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `userID` mediumint(8) NOT NULL, + `project` mediumint(8) NOT NULL DEFAULT '0', + `expect` text NOT NULL, + `progress` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_faq` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `module` mediumint(9) NOT NULL, + `product` mediumint(9) NOT NULL, + `question` varchar(255) NOT NULL, + `answer` text NOT NULL, + `addedtime` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_feedback` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `solution` char(30) NOT NULL, + `desc` text NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '2', + `status` varchar(30) NOT NULL, + `subStatus` varchar(30) NOT NULL DEFAULT '', + `public` enum('0','1') NOT NULL DEFAULT '0', + `notify` enum('0','1') NOT NULL DEFAULT '0', + `notifyEmail` varchar(100) NOT NULL, + `source` varchar(255) NOT NULL, + `likes` text NOT NULL, + `result` mediumint(8) unsigned NOT NULL, + `faq` mediumint(8) unsigned NOT NULL, + `openedBy` char(30) NOT NULL, + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` datetime NOT NULL, + `processedBy` char(30) NOT NULL, + `processedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `feedbackBy` varchar(100) NOT NULL, + `repeatFeedback` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_feedbackview` ( + `account` char(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + UNIQUE KEY `account_product` (`account`,`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` varchar(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_gapanalysis` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `role` varchar(20) NOT NULL, + `analysis` mediumtext NOT NULL, + `needTrain` enum('no','yes') NOT NULL DEFAULT 'no', + `createdBy` char(30) DEFAULT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `project_account` (`project`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + `developer` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_holiday` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL DEFAULT '', + `type` enum('holiday','working') NOT NULL DEFAULT 'holiday', + `desc` mediumtext NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_host` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `type` varchar(30) NOT NULL DEFAULT 'normal', + `hostType` varchar(30) NOT NULL DEFAULT '', + `mac` varchar(128) NOT NULL, + `memory` varchar(30) NOT NULL, + `diskSize` varchar(30) NOT NULL, + `status` varchar(50) NOT NULL, + `secret` varchar(50) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `tokenSN` varchar(50) NOT NULL DEFAULT '', + `tokenTime` datetime NOT NULL, + `oldTokenSN` varchar(50) NOT NULL DEFAULT '', + `vsoft` varchar(30) NOT NULL DEFAULT '', + `heartbeat` datetime NOT NULL, + `zap` varchar(10) NOT NULL, + `provider` varchar(255) NOT NULL DEFAULT '', + `vnc` int(11) NOT NULL, + `ztf` int(11) NOT NULL, + `zd` int(11) NOT NULL, + `ssh` int(11) NOT NULL, + `parent` int(11) unsigned NOT NULL DEFAULT '0', + `image` int(11) unsigned NOT NULL DEFAULT '0', + `admin` smallint(5) unsigned NOT NULL DEFAULT '0', + `serverRoom` mediumint(8) unsigned NOT NULL, + `serverModel` varchar(256) NOT NULL, + `hardwareType` varchar(64) NOT NULL, + `cpuBrand` varchar(128) NOT NULL, + `cpuModel` varchar(128) NOT NULL, + `cpuNumber` varchar(16) NOT NULL, + `cpuCores` varchar(30) NOT NULL, + `intranet` varchar(128) NOT NULL, + `extranet` varchar(128) NOT NULL, + `osName` varchar(64) NOT NULL, + `osVersion` varchar(64) NOT NULL, + `group` varchar(128) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ownedBy` varchar(30) NOT NULL DEFAULT '', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `mergedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastMessage` int(11) unsigned NOT NULL DEFAULT '0', + `lastMessageIndex` int(11) unsigned NOT NULL DEFAULT '0', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `pinnedMessages` text NOT NULL, + `mergedChats` text NOT NULL, + `adminInvite` enum('0','1') NOT NULL DEFAULT '0', + `avatar` text NOT NULL, + `archiveDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat_message_index` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL, + `tableName` char(64) NOT NULL, + `start` int(11) unsigned NOT NULL, + `end` int(11) unsigned NOT NULL, + `startIndex` int(11) unsigned NOT NULL, + `endIndex` int(11) unsigned NOT NULL, + `startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `count` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `chattable` (`gid`,`tableName`), + KEY `start` (`start`), + KEY `end` (`end`), + KEY `startDate` (`startDate`), + KEY `endDate` (`endDate`), + KEY `chatstartindex` (`gid`,`startIndex`), + KEY `chatendindex` (`gid`,`endIndex`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `freeze` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + `lastReadMessage` int(11) unsigned NOT NULL DEFAULT '0', + `lastReadMessageIndex` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_client` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `version` char(30) NOT NULL DEFAULT '', + `desc` varchar(100) NOT NULL DEFAULT '', + `changeLog` text NOT NULL, + `strategy` varchar(10) NOT NULL DEFAULT '', + `downloads` text NOT NULL, + `createdDate` datetime NOT NULL, + `createdBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '', + `status` enum('released','wait') NOT NULL DEFAULT 'wait', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conference` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `rid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `status` enum('closed','open','notStarted') NOT NULL DEFAULT 'closed', + `participants` text, + `subscribers` text NOT NULL, + `invitee` text, + `openedBy` mediumint(8) NOT NULL DEFAULT '0', + `openedDate` datetime DEFAULT NULL, + `topic` text NOT NULL, + `startTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `password` char(20) NOT NULL DEFAULT '', + `type` enum('default','periodic','scheduled') NOT NULL DEFAULT 'default', + `number` char(20) NOT NULL DEFAULT '', + `note` text NOT NULL, + `sentNotify` tinyint(1) NOT NULL DEFAULT '0', + `reminderTime` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conferenceaction` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `rid` char(40) NOT NULL DEFAULT '', + `type` enum('create','invite','join','leave','close','publish') NOT NULL DEFAULT 'create', + `data` text NOT NULL, + `user` mediumint(8) NOT NULL DEFAULT '0', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `device` char(40) NOT NULL DEFAULT 'default', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conferenceuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `conference` mediumint(8) NOT NULL DEFAULT '0', + `user` mediumint(8) NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `index` int(11) unsigned NOT NULL DEFAULT '0', + `type` enum('normal','broadcast','notify','bulletin','botcommand') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message_backup` ( + `id` int(11) unsigned NOT NULL, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `index` int(11) unsigned NOT NULL DEFAULT '0', + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message_index` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `tableName` char(64) NOT NULL, + `start` int(11) unsigned NOT NULL, + `end` int(11) unsigned NOT NULL, + `startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `chats` text NOT NULL, + PRIMARY KEY (`id`), + KEY `tableName` (`tableName`), + KEY `start` (`start`), + KEY `end` (`end`), + KEY `startDate` (`startDate`), + KEY `endDate` (`endDate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `message` int(11) unsigned NOT NULL, + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`message`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_queue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `content` text NOT NULL, + `addDate` datetime NOT NULL, + `processDate` datetime NOT NULL, + `result` text NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_userdevice` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` mediumint(8) NOT NULL DEFAULT '0', + `device` char(40) NOT NULL DEFAULT 'default', + `deviceID` char(40) NOT NULL DEFAULT '', + `token` char(64) NOT NULL DEFAULT '', + `validUntil` datetime DEFAULT NULL, + `lastLogin` datetime DEFAULT NULL, + `lastLogout` datetime DEFAULT NULL, + `online` tinyint(1) NOT NULL DEFAULT '0', + `version` char(10) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_image` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `host` int(11) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) NOT NULL DEFAULT '', + `localName` varchar(64) NOT NULL, + `address` varchar(64) NOT NULL DEFAULT '', + `path` varchar(64) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `osName` varchar(32) NOT NULL DEFAULT '', + `from` varchar(10) NOT NULL DEFAULT 'zentao', + `memory` float unsigned NOT NULL, + `disk` float unsigned NOT NULL, + `fileSize` float unsigned NOT NULL, + `md5` varchar(64) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `restoreDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_intervention` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `activity` mediumint(8) NOT NULL, + `status` char(30) NOT NULL, + `partake` text NOT NULL, + `begin` date NOT NULL, + `realBegin` date NOT NULL, + `situation` varchar(255) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `project` (`project`,`activity`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_issue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `resolvedBy` varchar(30) NOT NULL, + `project` varchar(255) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `pri` char(30) NOT NULL, + `severity` char(30) NOT NULL, + `type` char(30) NOT NULL, + `activity` varchar(255) NOT NULL, + `deadline` date NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionComment` text NOT NULL, + `objectID` varchar(255) NOT NULL, + `resolvedDate` date NOT NULL, + `status` varchar(30) NOT NULL, + `owner` varchar(255) NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_job` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `frame` varchar(20) NOT NULL, + `engine` varchar(20) NOT NULL, + `server` mediumint(8) unsigned NOT NULL, + `pipeline` varchar(500) NOT NULL, + `triggerType` varchar(255) NOT NULL, + `sonarqubeServer` mediumint(8) unsigned NOT NULL, + `projectKey` varchar(255) NOT NULL, + `svnDir` varchar(255) NOT NULL, + `atDay` varchar(255) DEFAULT NULL, + `atTime` varchar(10) DEFAULT NULL, + `customParam` text NOT NULL, + `comment` varchar(255) DEFAULT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `lastExec` datetime DEFAULT NULL, + `lastStatus` varchar(255) DEFAULT NULL, + `lastTag` varchar(255) DEFAULT NULL, + `lastSyncDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanban` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `space` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `owner` varchar(30) NOT NULL, + `team` text NOT NULL, + `desc` mediumtext NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `archived` enum('0','1') NOT NULL DEFAULT '1', + `performable` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', + `displayCards` smallint(6) NOT NULL DEFAULT '0', + `showWIP` enum('0','1') NOT NULL DEFAULT '1', + `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '200', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', + `object` varchar(255) NOT NULL, + `alignment` varchar(10) NOT NULL DEFAULT 'center', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `activatedBy` char(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancard` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) unsigned NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) unsigned NOT NULL, + `fromID` mediumint(8) unsigned NOT NULL, + `fromType` varchar(30) NOT NULL, + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'doing', + `pri` mediumint(8) unsigned NOT NULL, + `assignedTo` text NOT NULL, + `desc` mediumtext NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `estimate` float unsigned NOT NULL, + `progress` float unsigned NOT NULL DEFAULT '0', + `color` char(7) NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `archived` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `archivedBy` char(30) NOT NULL, + `archivedDate` datetime NOT NULL, + `assignedBy` char(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancell` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) NOT NULL, + `lane` mediumint(8) NOT NULL, + `column` mediumint(8) NOT NULL, + `type` char(30) NOT NULL, + `cards` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `card_group` (`kanban`,`type`,`lane`,`column`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancolumn` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `color` char(30) NOT NULL, + `limit` smallint(6) NOT NULL DEFAULT '-1', + `order` mediumint(8) NOT NULL DEFAULT '0', + `archived` enum('0','1') NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbangroup` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) unsigned NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanlane` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `execution` mediumint(8) NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) unsigned NOT NULL, + `groupby` char(30) NOT NULL, + `extra` char(30) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `color` char(30) NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', + `lastEditedTime` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanregion` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `space` mediumint(8) unsigned NOT NULL, + `kanban` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanspace` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(50) NOT NULL, + `owner` varchar(30) NOT NULL, + `team` text NOT NULL, + `desc` mediumtext NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `activatedBy` char(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(50) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`,`vision`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_leave` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `backDate` datetime NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + `backReviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `type` (`type`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lieu` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `overtime` char(255) NOT NULL, + `trip` char(255) NOT NULL, + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_measqueue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `mid` mediumint(8) unsigned NOT NULL, + `status` varchar(255) NOT NULL, + `logs` text, + `execTime` varchar(10) NOT NULL, + `params` text, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `updateDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_measrecords` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `mid` mediumint(8) NOT NULL, + `measCode` char(50) NOT NULL DEFAULT '', + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `params` text NOT NULL, + `year` char(4) NOT NULL, + `month` char(6) NOT NULL, + `week` char(8) NOT NULL, + `day` char(8) NOT NULL, + `value` varchar(255) NOT NULL, + `date` date NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `time` (`year`,`month`,`day`,`week`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meastemplate` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meeting` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL, + `execution` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `begin` time NOT NULL, + `end` time NOT NULL, + `dept` mediumint(8) NOT NULL, + `mode` varchar(255) NOT NULL, + `host` varchar(30) NOT NULL, + `participant` text NOT NULL, + `date` date NOT NULL, + `room` int(11) NOT NULL, + `minutes` text NOT NULL, + `minutedBy` varchar(30) NOT NULL, + `minutedDate` datetime NOT NULL, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meetingroom` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `position` varchar(30) NOT NULL, + `seats` int(11) NOT NULL, + `equipment` varchar(255) NOT NULL, + `openTime` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_mr` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `hostID` mediumint(8) unsigned NOT NULL, + `sourceProject` varchar(50) NOT NULL, + `sourceBranch` varchar(100) NOT NULL, + `targetProject` varchar(50) NOT NULL, + `targetBranch` varchar(100) NOT NULL, + `mriid` int(10) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `description` text NOT NULL, + `assignee` varchar(255) NOT NULL, + `reviewer` varchar(255) NOT NULL, + `approver` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `status` char(30) NOT NULL, + `mergeStatus` char(30) NOT NULL, + `approvalStatus` char(30) NOT NULL, + `needApproved` enum('0','1') NOT NULL DEFAULT '0', + `needCI` enum('0','1') NOT NULL DEFAULT '0', + `repoID` mediumint(8) unsigned NOT NULL, + `jobID` mediumint(8) unsigned NOT NULL, + `compileID` mediumint(8) unsigned NOT NULL, + `compileStatus` char(30) NOT NULL, + `removeSourceBranch` enum('0','1') NOT NULL DEFAULT '0', + `synced` enum('0','1') NOT NULL DEFAULT '1', + `syncError` varchar(255) NOT NULL, + `hasNoConflict` enum('0','1') NOT NULL DEFAULT '0', + `diffs` longtext, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_mrapproval` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `mrID` mediumint(8) unsigned NOT NULL, + `account` varchar(255) NOT NULL, + `date` datetime NOT NULL, + `action` char(30) NOT NULL, + `comment` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_nc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `auditplan` mediumint(8) NOT NULL, + `listID` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `type` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `severity` char(30) NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolution` char(30) NOT NULL, + `resolvedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `parent` mediumint(8) unsigned NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` date NOT NULL, + `activateDate` date NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` text NOT NULL, + `ccList` text NOT NULL, + `subject` text NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType`(`objectType` ASC), + KEY `status`(`status` ASC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_oauth` ( + `account` varchar(30) NOT NULL, + `openID` varchar(255) NOT NULL, + `providerType` varchar(30) NOT NULL, + `providerID` mediumint(8) unsigned NOT NULL, + KEY `account` (`account`), + KEY `providerType` (`providerType`), + KEY `providerID` (`providerID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_object` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) NOT NULL, + `from` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `category` char(30) NOT NULL, + `version` varchar(255) NOT NULL, + `type` enum('reviewed','taged') NOT NULL, + `range` text NOT NULL, + `data` text NOT NULL, + `storyEst` char(30) NOT NULL, + `taskEst` char(30) NOT NULL, + `requestEst` char(30) NOT NULL, + `testEst` char(30) NOT NULL, + `devEst` char(30) NOT NULL, + `designEst` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_opportunity` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `type` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` mediumint(8) NOT NULL, + `chance` mediumint(8) NOT NULL, + `ratio` mediumint(8) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` date NOT NULL, + `approvedDate` date NOT NULL, + `prevention` mediumtext NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `cancelReason` char(30) NOT NULL, + `hangupedBy` varchar(30) NOT NULL, + `hangupedDate` datetime NOT NULL, + `resolution` mediumtext NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `lastCheckedBy` varchar(30) NOT NULL, + `lastCheckedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_overtime` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `leave` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `rejectReason` varchar(100) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `type` (`type`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_pipeline` ( + `id` smallint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `name` varchar(50) NOT NULL, + `url` varchar(255) DEFAULT NULL, + `account` varchar(30) DEFAULT NULL, + `password` varchar(255) NOT NULL, + `token` varchar(255) DEFAULT NULL, + `private` char(32) DEFAULT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_pivot` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dimension` mediumint(8) unsigned NOT NULL DEFAULT '0', + `group` varchar(255) NOT NULL, + `name` text NOT NULL, + `desc` text NOT NULL, + `sql` mediumtext NOT NULL, + `fields` mediumtext, + `langs` mediumtext, + `vars` mediumtext NOT NULL, + `objects` mediumtext, + `settings` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `step` tinyint(1) unsigned NOT NULL DEFAULT '0', + `stage` enum('draft','published') NOT NULL DEFAULT 'draft', + `builtin` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `dimension` (`dimension`), + KEY `group` (`group`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_planstory` ( + `plan` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL, + `order` mediumint(9) NOT NULL, + UNIQUE KEY `plan_story` (`plan`,`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_priv` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL, + `edition` varchar(30) NOT NULL DEFAULT ',open,biz,max,', + `vision` varchar(30) NOT NULL DEFAULT ',rnd,', + `system` enum('0','1') NOT NULL DEFAULT '0', + `order` mediumint(8) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `priv` (`module`,`method`) +) ENGINE=InnoDB AUTO_INCREMENT=2110 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_privlang` ( + `objectID` mediumint(8) unsigned NOT NULL, + `objectType` enum('priv','manager') NOT NULL DEFAULT 'priv', + `lang` varchar(30) NOT NULL, + `key` varchar(100) NOT NULL, + `value` varchar(255) NOT NULL, + `desc` text NOT NULL, + UNIQUE KEY `objectlang` (`objectID`,`objectType`,`lang`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_privmanager` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL, + `code` varchar(100) NOT NULL, + `type` enum('view','module','package') NOT NULL DEFAULT 'package', + `edition` varchar(30) NOT NULL DEFAULT ',open,biz,max,', + `vision` varchar(30) NOT NULL DEFAULT ',rnd,', + `order` mediumint(8) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=651 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_privrelation` ( + `priv` varchar(100) NOT NULL, + `type` varchar(30) NOT NULL, + `relationPriv` varchar(100) NOT NULL, + UNIQUE KEY `privrelation` (`priv`,`type`,`relationPriv`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_process` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL DEFAULT 'waterfall', + `name` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `abbr` char(30) NOT NULL, + `desc` mediumtext NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `order` mediumint(9) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `program` mediumint(8) unsigned NOT NULL, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `shadow` tinyint(1) unsigned NOT NULL, + `bind` enum('0','1') NOT NULL DEFAULT '0', + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `feedback` varchar(30) NOT NULL, + `ticket` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `reviewer` text NOT NULL, + `draftStories` mediumint(8) NOT NULL DEFAULT '0', + `activeStories` mediumint(8) NOT NULL DEFAULT '0', + `changingStories` mediumint(8) NOT NULL DEFAULT '0', + `reviewingStories` mediumint(8) NOT NULL DEFAULT '0', + `closedStories` mediumint(8) NOT NULL DEFAULT '0', + `totalStories` mediumint(8) NOT NULL DEFAULT '0', + `unresolvedBugs` mediumint(8) NOT NULL DEFAULT '0', + `closedBugs` mediumint(8) NOT NULL DEFAULT '0', + `fixedBugs` mediumint(8) NOT NULL DEFAULT '0', + `totalBugs` mediumint(8) NOT NULL DEFAULT '0', + `plans` mediumint(8) NOT NULL DEFAULT '0', + `releases` mediumint(8) NOT NULL DEFAULT '0', + `finishedStories` mediumint(9) NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `acl` (`acl`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL DEFAULT '0', + `parent` mediumint(9) NOT NULL DEFAULT '0', + `title` varchar(90) NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `desc` mediumtext NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `closedReason` varchar(20) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programactivity` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `activity` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `content` text NOT NULL, + `reason` varchar(255) NOT NULL, + `result` char(30) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programoutput` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `activity` mediumint(8) NOT NULL, + `output` mediumint(8) NOT NULL, + `content` text NOT NULL, + `name` varchar(255) NOT NULL, + `reason` varchar(255) NOT NULL, + `result` char(30) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programprocess` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `abbr` char(30) NOT NULL, + `desc` text NOT NULL, + `reason` varchar(255) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programreport` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `template` mediumint(8) NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `params` text NOT NULL, + `content` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL DEFAULT '0', + `model` char(30) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'sprint', + `lifetime` char(30) NOT NULL DEFAULT '', + `budget` varchar(30) NOT NULL DEFAULT '0', + `budgetUnit` char(30) NOT NULL DEFAULT 'CNY', + `attribute` varchar(30) NOT NULL DEFAULT '', + `percent` float unsigned NOT NULL DEFAULT '0', + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `output` text NOT NULL, + `auth` char(30) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` varchar(255) NOT NULL, + `grade` tinyint(3) unsigned NOT NULL, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT '1', + `begin` date NOT NULL, + `end` date NOT NULL, + `realBegan` date NOT NULL, + `realEnd` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `subStatus` varchar(30) NOT NULL DEFAULT '', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `parentVersion` smallint(6) NOT NULL, + `planDuration` int(11) NOT NULL, + `realDuration` int(11) NOT NULL, + `progress` decimal(5,2) NOT NULL DEFAULT '0.00', + `estimate` float NOT NULL DEFAULT '0', + `left` float NOT NULL DEFAULT '0', + `consumed` float NOT NULL DEFAULT '0', + `teamCount` int(11) NOT NULL DEFAULT '0', + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `suspendedDate` date NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `division` enum('0','1') NOT NULL DEFAULT '1', + `displayCards` smallint(6) NOT NULL DEFAULT '0', + `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `multiple` enum('0','1') NOT NULL DEFAULT '1', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '200', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `acl` (`acl`), + KEY `order` (`order`), + KEY `project` (`project`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectadmin` ( + `group` smallint(6) NOT NULL, + `account` char(30) NOT NULL, + `programs` text NOT NULL, + `projects` text NOT NULL, + `products` text NOT NULL, + `executions` text NOT NULL, + UNIQUE KEY `group_account` (`group`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectcase` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `count` mediumint(8) unsigned NOT NULL DEFAULT '1', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`case`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` varchar(255) NOT NULL, + PRIMARY KEY (`project`,`product`,`branch`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectspec` ( + `project` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + UNIQUE KEY `project` (`project`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`), + KEY `story` (`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_relation` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL, + `product` mediumint(8) NOT NULL, + `execution` mediumint(8) NOT NULL, + `AType` char(30) NOT NULL, + `AID` mediumint(8) NOT NULL, + `AVersion` char(30) NOT NULL, + `relation` char(30) NOT NULL, + `BType` char(30) NOT NULL, + `BID` mediumint(8) NOT NULL, + `BVersion` char(30) NOT NULL, + `extra` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `relation` (`product`,`relation`,`AType`,`BType`,`AID`,`BID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_relationoftasks` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `execution` mediumint(8) unsigned NOT NULL, + `pretask` mediumint(8) unsigned NOT NULL, + `condition` enum('begin','end') NOT NULL, + `task` mediumint(8) unsigned NOT NULL, + `action` enum('begin','end') NOT NULL, + PRIMARY KEY (`id`), + KEY `relationoftasks` (`execution`,`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` varchar(255) NOT NULL, + `shadow` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` mediumtext NOT NULL, + `mailto` text, + `notify` varchar(255) DEFAULT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repo` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `product` varchar(255) NOT NULL, + `projects` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL, + `path` varchar(255) NOT NULL, + `prefix` varchar(100) NOT NULL, + `encoding` varchar(20) NOT NULL, + `SCM` varchar(10) NOT NULL, + `client` varchar(100) NOT NULL, + `serviceHost` varchar(50) NOT NULL, + `serviceProject` varchar(100) NOT NULL, + `commits` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `password` varchar(30) NOT NULL, + `encrypt` varchar(30) NOT NULL DEFAULT 'plain', + `acl` text NOT NULL, + `synced` tinyint(1) NOT NULL DEFAULT '0', + `lastSync` datetime NOT NULL, + `desc` text NOT NULL, + `extra` char(30) NOT NULL, + `preMerge` enum('0','1') NOT NULL DEFAULT '0', + `job` mediumint(8) unsigned NOT NULL, + `fileServerUrl` text, + `fileServerAccount` varchar(40) NOT NULL DEFAULT '', + `fileServerPassword` varchar(100) NOT NULL DEFAULT '', + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repobranch` ( + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL, + UNIQUE KEY `repo_revision_branch` (`repo`,`revision`,`branch`), + KEY `branch` (`branch`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repofiles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `path` varchar(255) NOT NULL, + `oldPath` varchar(255) DEFAULT '', + `parent` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `action` char(1) NOT NULL, + PRIMARY KEY (`id`), + KEY `path` (`path`), + KEY `parent` (`parent`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repohistory` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `repo` mediumint(9) NOT NULL, + `revision` varchar(40) NOT NULL, + `commit` mediumint(8) unsigned NOT NULL, + `comment` text NOT NULL, + `committer` varchar(100) NOT NULL, + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_report` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `code` varchar(100) NOT NULL, + `name` text NOT NULL, + `dimension` int(8) NOT NULL DEFAULT '0', + `module` varchar(100) NOT NULL, + `sql` text NOT NULL, + `vars` text NOT NULL, + `langs` text NOT NULL, + `params` text NOT NULL, + `step` tinyint(1) NOT NULL DEFAULT '2', + `desc` text NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_researchplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `customer` varchar(255) NOT NULL, + `stakeholder` varchar(255) NOT NULL, + `objective` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `location` varchar(255) NOT NULL, + `team` varchar(255) NOT NULL, + `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL, + `outline` mediumtext NOT NULL, + `schedule` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_researchreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `relatedPlan` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `author` varchar(30) NOT NULL, + `content` mediumtext NOT NULL, + `customer` varchar(255) NOT NULL, + `researchObjects` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `location` varchar(255) NOT NULL, + `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_review` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `object` mediumint(8) NOT NULL, + `template` mediumint(8) NOT NULL, + `doc` mediumint(8) DEFAULT NULL, + `docVersion` smallint(6) NOT NULL, + `status` char(30) NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `auditedBy` varchar(255) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deadline` date NOT NULL, + `lastReviewedBy` varchar(255) DEFAULT NULL, + `lastReviewedDate` date NOT NULL, + `lastAuditedBy` varchar(255) NOT NULL, + `lastAuditedDate` date NOT NULL, + `lastEditedBy` varchar(255) NOT NULL, + `lastEditedDate` date NOT NULL, + `result` char(30) NOT NULL, + `auditResult` char(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `object` char(30) NOT NULL, + `category` char(30) NOT NULL, + `type` varchar(255) NOT NULL DEFAULT '', + `assignedTo` varchar(30) NOT NULL, + `order` mediumint(8) DEFAULT '0', + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewissue` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `review` mediumint(8) NOT NULL, + `approval` mediumint(8) NOT NULL, + `injection` mediumint(8) NOT NULL, + `identify` mediumint(8) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'review', + `listID` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `opinion` varchar(255) NOT NULL, + `opinionDate` date NOT NULL, + `status` char(30) NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionBy` char(30) NOT NULL, + `resolutionDate` date NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewlist` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `object` char(30) NOT NULL, + `category` char(30) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewresult` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `review` mediumint(8) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'review', + `result` char(30) NOT NULL, + `opinion` text NOT NULL, + `reviewer` char(30) NOT NULL, + `remainIssue` char(30) NOT NULL, + `createdDate` date NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `reviewer` (`review`,`reviewer`,`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_risk` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `category` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` char(30) NOT NULL, + `probability` char(30) NOT NULL, + `rate` char(30) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `prevention` mediumtext NOT NULL, + `remedy` mediumtext NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `resolution` mediumtext NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `cancelBy` varchar(30) NOT NULL, + `cancelDate` date NOT NULL, + `cancelReason` char(30) NOT NULL, + `hangupBy` varchar(30) NOT NULL, + `hangupDate` date NOT NULL, + `trackedBy` varchar(30) NOT NULL, + `trackedDate` date NOT NULL, + `assignedDate` date NOT NULL, + `approvedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_riskissue` ( + `risk` mediumint(8) unsigned NOT NULL, + `issue` mediumint(8) unsigned NOT NULL, + UNIQUE KEY `risk_issue` (`risk`,`issue`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_scene` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `sort` int(11) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime DEFAULT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `parent` int(11) DEFAULT NULL, + `grade` tinyint(3) DEFAULT NULL, + `path` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_screen` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dimension` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `cover` mediumtext NOT NULL, + `scheme` mediumtext NOT NULL, + `status` enum('draft','published') NOT NULL DEFAULT 'draft', + `builtin` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` datetime DEFAULT NULL, + `editedBy` char(30) NOT NULL DEFAULT '', + `editedDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_searchdict` ( + `key` smallint(5) unsigned NOT NULL, + `value` char(3) NOT NULL, + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_searchindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `objectType` char(20) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `title` text NOT NULL, + `content` text NOT NULL, + `addedDate` datetime NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `object` (`objectType`,`objectID`), + KEY `addedDate` (`addedDate`), + FULLTEXT KEY `content` (`content`), + FULLTEXT KEY `title` (`title`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_serverroom` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) NOT NULL, + `city` varchar(128) NOT NULL, + `line` varchar(20) NOT NULL, + `bandwidth` varchar(128) NOT NULL, + `provider` varchar(128) NOT NULL, + `owner` varchar(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_service` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `external` enum('0','1') NOT NULL DEFAULT '0', + `port` smallint(5) unsigned NOT NULL, + `entry` varchar(255) NOT NULL, + `deploy` varchar(255) NOT NULL, + `version` varchar(64) NOT NULL, + `color` char(7) NOT NULL, + `desc` mediumtext, + `dept` varchar(128) NOT NULL, + `devel` varchar(30) NOT NULL, + `qa` varchar(30) NOT NULL, + `ops` varchar(30) NOT NULL, + `hosts` text, + `softName` varchar(128) NOT NULL, + `softVersion` varchar(128) NOT NULL, + `type` varchar(20) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_solutions` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `contents` text NOT NULL COMMENT '问题描述', + `support` text NOT NULL COMMENT '是否需要高层支持', + `measures` text NOT NULL COMMENT '解决建议', + `type` char(30) NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` date NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_sqlview` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `sql` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_stage` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `percent` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `projectType` varchar(255) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_stakeholder` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `objectID` mediumint(8) NOT NULL, + `objectType` char(30) NOT NULL, + `user` char(30) NOT NULL, + `type` char(30) NOT NULL, + `key` enum('0','1') NOT NULL, + `from` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `parent` mediumint(9) NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'story', + `category` varchar(30) NOT NULL DEFAULT 'feature', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changing','active','draft','closed','reviewing') NOT NULL DEFAULT '', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `stagedBy` char(30) NOT NULL, + `mailto` text, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromStory` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromVersion` smallint(6) NOT NULL DEFAULT '1', + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `changedBy` varchar(30) NOT NULL, + `changedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `toBug` mediumint(8) unsigned NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `linkRequirements` varchar(255) NOT NULL, + `twins` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `storyChanged` enum('0','1') NOT NULL DEFAULT '0', + `feedbackBy` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `URChanged` enum('0','1') NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyestimate` ( + `story` mediumint(9) NOT NULL, + `round` smallint(6) NOT NULL, + `estimate` text NOT NULL, + `average` float NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + UNIQUE KEY `story` (`story`,`round`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyreview` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `reviewer` varchar(30) NOT NULL, + `result` varchar(30) NOT NULL, + `reviewDate` datetime NOT NULL, + UNIQUE KEY `story` (`story`,`version`,`reviewer`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` mediumtext NOT NULL, + `verify` mediumtext NOT NULL, + `files` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + `stagedBy` char(30) NOT NULL, + UNIQUE KEY `story_branch` (`story`,`branch`), + KEY `story` (`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `design` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `designVersion` smallint(6) unsigned NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromIssue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `feedback` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `mode` varchar(10) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `mailto` text, + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `planDuration` int(11) NOT NULL, + `realDuration` int(11) NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `activatedDate` datetime NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `repo` mediumint(8) unsigned NOT NULL, + `mr` mediumint(8) unsigned NOT NULL, + `entry` varchar(255) NOT NULL, + `lines` varchar(10) NOT NULL, + `v1` varchar(40) NOT NULL, + `v2` varchar(40) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + KEY `execution` (`execution`), + KEY `story` (`story`), + KEY `parent` (`parent`), + KEY `assignedTo` (`assignedTo`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskspec` ( + `task` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `estStarted` date NOT NULL, + `deadline` date NOT NULL, + UNIQUE KEY `task` (`task`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskteam` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL, + `account` char(30) NOT NULL, + `estimate` decimal(12,2) NOT NULL, + `consumed` decimal(12,2) NOT NULL, + `left` decimal(12,2) NOT NULL, + `transfer` char(30) NOT NULL, + `status` enum('wait','doing','done') NOT NULL DEFAULT 'wait', + `order` tinyint(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task','execution') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `position` varchar(30) NOT NULL, + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(3,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `job` mediumint(8) unsigned NOT NULL, + `compile` mediumint(8) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `ZTFResult` text NOT NULL, + `node` int(8) unsigned NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + `duration` float NOT NULL, + `xml` text NOT NULL, + `deploy` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `type` varchar(20) NOT NULL, + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `name` char(90) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `type` varchar(255) NOT NULL DEFAULT '', + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `realFinishedDate` datetime NOT NULL, + `mailto` text, + `desc` mediumtext NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `testreport` mediumint(8) unsigned NOT NULL, + `auto` varchar(10) NOT NULL DEFAULT 'no', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticket` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `desc` text NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `feedback` mediumint(8) NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `realStarted` datetime NOT NULL, + `startedBy` varchar(255) NOT NULL, + `startedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `status` varchar(30) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `activatedCount` int(10) NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `resolution` text NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `keywords` varchar(255) NOT NULL, + `repeatTicket` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticketrelation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `objectId` mediumint(9) NOT NULL, + `objectType` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticketsource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `customer` varchar(100) NOT NULL, + `contact` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `feedback` mediumint(8) unsigned NOT NULL, + `type` char(15) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` mediumtext NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincategory` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) NOT NULL, + `order` mediumint(8) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincontents` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `code` varchar(50) NOT NULL, + `course` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `order` mediumint(8) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincourse` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `code` varchar(255) NOT NULL DEFAULT '', + `category` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `status` varchar(10) NOT NULL, + `teacher` varchar(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `importedStatus` enum('','wait','doing','done') NOT NULL DEFAULT '', + `lastUpdatedTime` int(10) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(255) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` varchar(255) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trainplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `place` varchar(255) NOT NULL, + `trainee` text NOT NULL, + `lecturer` varchar(20) NOT NULL, + `type` enum('inside','outside') NOT NULL DEFAULT 'inside', + `status` varchar(20) NOT NULL, + `summary` mediumtext NOT NULL, + `createdBy` char(30) DEFAULT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trainrecords` ( + `user` char(30) NOT NULL, + `objectId` mediumint(8) unsigned NOT NULL, + `objectType` varchar(10) NOT NULL, + `status` varchar(10) NOT NULL, + PRIMARY KEY (`user`,`objectId`,`objectType`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trip` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('trip','egress') NOT NULL DEFAULT 'trip', + `customers` varchar(20) NOT NULL, + `name` char(30) NOT NULL, + `desc` text NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `from` char(50) NOT NULL, + `to` char(50) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `company` mediumint(8) unsigned NOT NULL, + `type` char(30) NOT NULL DEFAULT 'inside', + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `pinyin` varchar(255) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` text NOT NULL, + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `nature` text NOT NULL, + `analysis` text NOT NULL, + `strategy` text NOT NULL, + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `visions` varchar(20) NOT NULL DEFAULT 'rnd,lite', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `feedback` enum('0','1') NOT NULL DEFAULT '0', + `ranzhi` char(30) NOT NULL DEFAULT '', + `ldap` char(30) NOT NULL, + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `resetToken` varchar(50) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline','meeting') NOT NULL DEFAULT 'offline', + `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`), + KEY `deleted` (`deleted`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` text NOT NULL, + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + `common` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `programs` mediumtext NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + `sprints` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(15) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `secret` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `executions` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_weeklyreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `weekStart` date NOT NULL, + `pv` float(9,2) NOT NULL, + `ev` float(9,2) NOT NULL, + `ac` float(9,2) NOT NULL, + `sv` float(9,2) NOT NULL, + `cv` float(9,2) NOT NULL, + `staff` smallint(5) unsigned NOT NULL, + `progress` varchar(255) NOT NULL, + `workload` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `week` (`project`,`weekStart`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `scale` decimal(10,2) unsigned NOT NULL, + `productivity` decimal(10,2) unsigned NOT NULL, + `duration` decimal(10,2) unsigned NOT NULL, + `unitLaborCost` decimal(10,2) unsigned NOT NULL, + `totalLaborCost` decimal(10,2) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `dayHour` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflow` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` varchar(30) NOT NULL, + `child` varchar(30) NOT NULL, + `type` varchar(10) NOT NULL DEFAULT 'flow', + `navigator` varchar(10) NOT NULL, + `app` varchar(20) NOT NULL, + `position` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `table` varchar(50) NOT NULL, + `name` varchar(30) NOT NULL, + `titleField` varchar(30) NOT NULL, + `contentField` text NOT NULL, + `flowchart` text NOT NULL, + `js` text NOT NULL, + `css` text NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `administrator` text NOT NULL, + `desc` text NOT NULL, + `version` varchar(10) NOT NULL DEFAULT '1.0', + `status` varchar(10) NOT NULL DEFAULT 'wait', + `approval` enum('enabled','disabled') NOT NULL DEFAULT 'disabled', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`app`,`module`,`vision`), + KEY `type` (`type`), + KEY `app` (`app`), + KEY `module` (`module`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowaction` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `method` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, + `type` enum('single','batch') NOT NULL DEFAULT 'single', + `batchMode` enum('same','different') NOT NULL DEFAULT 'different', + `extensionType` varchar(10) NOT NULL DEFAULT 'override' COMMENT 'none | extend | override', + `open` varchar(20) NOT NULL, + `position` enum('menu','browseandview','browse','view') NOT NULL DEFAULT 'browseandview', + `layout` char(20) NOT NULL, + `show` enum('dropdownlist','direct') NOT NULL DEFAULT 'dropdownlist', + `order` smallint(5) unsigned NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `virtual` tinyint(1) unsigned NOT NULL, + `conditions` text NOT NULL, + `verifications` text NOT NULL, + `hooks` text NOT NULL, + `linkages` text NOT NULL, + `js` text NOT NULL, + `css` text NOT NULL, + `toList` char(255) NOT NULL, + `blocks` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'enable', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`action`,`vision`), + KEY `module` (`module`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=190 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowdatasource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('system','sql','func','option','lang','category') NOT NULL DEFAULT 'option', + `name` varchar(30) NOT NULL, + `code` varchar(30) NOT NULL, + `datasource` text NOT NULL, + `view` varchar(20) NOT NULL, + `keyField` varchar(50) NOT NULL, + `valueField` varchar(50) NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `type` (`type`) +) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowfield` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'varchar', + `length` varchar(10) NOT NULL, + `name` varchar(50) NOT NULL, + `control` varchar(20) NOT NULL, + `expression` text NOT NULL, + `options` text NOT NULL, + `default` varchar(100) NOT NULL, + `rules` varchar(255) NOT NULL, + `placeholder` varchar(100) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `searchOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `exportOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `canExport` enum('0','1') NOT NULL DEFAULT '0', + `canSearch` enum('0','1') NOT NULL DEFAULT '0', + `isValue` enum('0','1') NOT NULL DEFAULT '0', + `readonly` enum('0','1') NOT NULL DEFAULT '0', + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`field`), + KEY `module` (`module`), + KEY `field` (`field`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=360 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlabel` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(30) NOT NULL DEFAULT 'browse', + `code` varchar(30) NOT NULL, + `label` varchar(255) NOT NULL, + `params` text NOT NULL, + `orderBy` text NOT NULL, + `order` tinyint(3) NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `module` (`module`) +) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlayout` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `field` varchar(50) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `width` smallint(5) NOT NULL, + `position` text NOT NULL, + `readonly` enum('0','1') NOT NULL DEFAULT '0', + `mobileShow` enum('0','1') NOT NULL DEFAULT '1', + `summary` varchar(20) NOT NULL, + `defaultValue` text NOT NULL, + `layoutRules` varchar(255) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`action`,`field`,`vision`), + KEY `module` (`module`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlinkdata` ( + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `linkedType` varchar(30) NOT NULL, + `linkedID` mediumint(8) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + UNIQUE KEY `unique` (`objectType`,`objectID`,`linkedType`,`linkedID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrelation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `prev` varchar(30) NOT NULL, + `next` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `actions` varchar(20) NOT NULL, + `actionCodes` text NOT NULL, + `buildin` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrelationlayout` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `prev` varchar(30) NOT NULL, + `next` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `field` varchar(50) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`prev`,`next`,`action`,`field`), + KEY `prev` (`prev`), + KEY `next` (`next`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL COMMENT 'module name', + `name` varchar(100) NOT NULL COMMENT 'report name', + `type` enum('pie','line','bar') NOT NULL DEFAULT 'pie' COMMENT 'report type', + `countType` enum('sum','count') NOT NULL DEFAULT 'sum' COMMENT 'report count method', + `displayType` enum('value','percent') NOT NULL DEFAULT 'value' COMMENT 'report display method', + `dimension` varchar(130) NOT NULL COMMENT 'dimension field code of zt_workflowfield', + `fields` text NOT NULL COMMENT 'count fileds code of zt_workflowfield,use comma split', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrule` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('system','regex','func') NOT NULL DEFAULT 'regex', + `name` varchar(30) NOT NULL, + `rule` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `type` (`type`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowsql` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `action` varchar(50) NOT NULL, + `sql` text NOT NULL, + `vars` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `module` (`module`), + KEY `field` (`field`), + KEY `action` (`action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowversion` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `version` varchar(10) NOT NULL, + `fields` text NOT NULL, + `actions` text NOT NULL, + `layouts` text NOT NULL, + `sqls` text NOT NULL, + `labels` text NOT NULL, + `table` text NOT NULL, + `datas` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `moduleversion` (`module`,`version`), + KEY `module` (`module`), + KEY `version` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_zoutput` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `activity` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `optional` char(20) NOT NULL, + `tailorNorm` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `order` mediumint(8) DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8; diff --git a/db/update18.5.sql b/db/update18.5.sql index 4ea8c8e48c..46cc7d6775 100644 --- a/db/update18.5.sql +++ b/db/update18.5.sql @@ -1,2 +1,99 @@ UPDATE `zt_chart` SET `sql` = 'SELECT IF(t3.id IS NOT NULL, t3.`name`, \"空\") AS deptName,count(1) as count, \r\nIF(t3.id IS NOT NULL, t3.`order`, 9999) AS deptOrder \r\nFROM zt_user AS t1 \r\nLEFT JOIN zt_dept AS t2 ON t1.dept = t2.id\r\nLEFT JOIN zt_dept AS t3 ON FIND_IN_SET(TRIM(\',\' FROM t3.path), TRIM(\',\' FROM t2.path)) AND t3.grade = \'1\'\r\nWHERE t1.deleted = \'0\'\r\nGROUP BY deptName, deptOrder \r\nORDER BY deptOrder ASC' WHERE `id` = 1049; +UPDATE `zt_chart` SET `sql` = 'SELECT\n account,\nCASE\n ROLE \n WHEN \'dev\' THEN\n \"研发\" \n WHEN \'qa\' THEN\r\n \"测试\"\r\n WHEN \'pm\' THEN\r\n \"项目经理\"\r\n WHEN \'others\' THEN\r\n \"其他\"\r\n WHEN \'td\' THEN\r\n \"研发主管\"\r\n WHEN \'pd\' THEN\r\n \"产品主管\"\r\n WHEN \'po\' THEN\r\n \"产品经理\"\r\n WHEN \'qd\' THEN\r\n \"测试主管\"\r\n WHEN \'top\' THEN\r\n \"高层管理\"\r\n ELSE\r\n \"未知\"\r\n END\r\n role\n FROM\n zt_user \n WHERE\n deleted = \'0\' ' +WHERE `id` = 1050; +UPDATE `zt_chart` SET `sql` = 'SELECT count(1) as count, \"0-1年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 1 YEAR)\r\nunion\r\nSELECT count(1) as count, \"1-3年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 3 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 1 YEAR)\r\nunion\r\nSELECT count(1) as count, \"3-5年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 5 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 3 YEAR)\r\nunion\r\nSELECT count(1) as count, \"5-10年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 10 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 5 YEAR)\r\nunion\r\nSELECT count(1) as count, \"10年以上\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` < DATE_SUB(NOW(), INTERVAL 10 YEAR) AND LEFT(`join`, 4) != \'0000\'\r\nunion \r\nSELECT count(1) as count, \"未知\" as joinDate FROM zt_user WHERE deleted = \'0\' AND LEFT(`join`, 4) = \'0000\'' +WHERE `id` = 1051; + +ALTER TABLE `zt_privrelation` MODIFY `priv` VARCHAR(100) NOT NULL; +ALTER TABLE `zt_privrelation` MODIFY `relationPriv` VARCHAR(100) NOT NULL; +DELETE FROM `zt_privrelation`; +REPLACE INTO `zt_privrelation` (`priv`, `type`, `relationPriv`) VALUES ('account-browse','depend','ops-index'),('account-browse','recommend','account-create'),('account-browse','recommend','account-edit'),('account-browse','recommend','account-view'),('account-create','depend','account-browse'),('account-create','depend','ops-index'),('account-create','recommend','account-edit'),('account-delete','depend','account-browse'),('account-delete','depend','ops-index'),('account-delete','recommend','account-create'),('account-delete','recommend','account-edit'),('account-edit','depend','account-browse'),('account-edit','depend','ops-index'),('account-edit','recommend','account-create'),('account-view','depend','account-browse'),('account-view','depend','ops-index'),('account-view','recommend','account-create'),('account-view','recommend','account-edit'),('action-editComment','depend','action-comment'),('action-hideAll','depend','action-trash'),('action-hideAll','recommend','action-hideOne'),('action-hideOne','depend','action-trash'),('action-hideOne','recommend','action-hideAll'),('action-undelete','depend','action-trash'),('activity-assignTo','depend','activity-browse'),('activity-assignTo','recommend','activity-create'),('activity-assignTo','recommend','activity-edit'),('activity-batchCreate','depend','activity-browse'),('activity-batchCreate','recommend','activity-create'),('activity-create','depend','activity-browse'),('activity-create','recommend','activity-assignTo'),('activity-create','recommend','activity-batchCreate'),('activity-create','recommend','activity-delete'),('activity-create','recommend','activity-edit'),('activity-create','recommend','activity-outputList'),('activity-create','recommend','activity-updateOrder'),('activity-create','recommend','activity-view'),('activity-delete','depend','activity-browse'),('activity-delete','recommend','activity-create'),('activity-edit','depend','activity-browse'),('activity-edit','recommend','activity-assignTo'),('activity-edit','recommend','activity-batchCreate'),('activity-edit','recommend','activity-create'),('activity-edit','recommend','activity-delete'),('activity-edit','recommend','activity-outputList'),('activity-edit','recommend','activity-updateOrder'),('activity-edit','recommend','activity-view'),('activity-outputList','depend','activity-browse'),('activity-outputList','recommend','activity-create'),('activity-outputList','recommend','activity-edit'),('activity-outputList','recommend','activity-view'),('activity-updateOrder','depend','activity-browse'),('activity-updateOrder','recommend','activity-create'),('activity-updateOrder','recommend','activity-edit'),('activity-view','depend','activity-browse'),('activity-view','recommend','activity-outputList'),('admin-checkWeak','depend','admin-index'),('admin-resetPWDSetting','depend','admin-index'),('admin-safe','depend','admin-index'),('admin-sso','depend','admin-index'),('admin-sso','depend','admin-register'),('admin-tableEngine','depend','admin-index'),('api-addCatalog','depend','api-index'),('api-addCatalog','recommend','api-editCatalog'),('api-create','depend','api-index'),('api-create','recommend','api-createRelease'),('api-create','recommend','api-edit'),('api-create','recommend','api-releases'),('api-createLib','depend','api-index'),('api-createLib','recommend','api-editLib'),('api-createRelease','depend','api-index'),('api-createRelease','recommend','api-create'),('api-createRelease','recommend','api-edit'),('api-createRelease','recommend','api-releases'),('api-createStruct','depend','api-index'),('api-createStruct','recommend','api-editStruct'),('api-createStruct','recommend','api-struct'),('api-delete','depend','api-index'),('api-deleteCatalog','depend','api-index'),('api-deleteLib','depend','api-index'),('api-deleteRelease','depend','api-index'),('api-deleteStruct','depend','api-index'),('api-edit','depend','api-index'),('api-edit','recommend','api-create'),('api-edit','recommend','api-createRelease'),('api-edit','recommend','api-releases'),('api-editCatalog','depend','api-index'),('api-editCatalog','recommend','api-addCatalog'),('api-editLib','depend','api-index'),('api-editLib','recommend','api-createLib'),('api-editStruct','depend','api-index'),('api-editStruct','recommend','api-createStruct'),('api-editStruct','recommend','api-struct'),('api-export','depend','api-index'),('api-releases','depend','api-index'),('api-releases','recommend','api-create'),('api-releases','recommend','api-createRelease'),('api-releases','recommend','api-edit'),('api-sortCatalog','depend','api-index'),('api-struct','depend','api-index'),('api-struct','recommend','api-createStruct'),('api-struct','recommend','api-editStruct'),('approvalflow-create','depend','approvalflow-browse'),('approvalflow-create','recommend','approvalflow-delete'),('approvalflow-create','recommend','approvalflow-design'),('approvalflow-create','recommend','approvalflow-edit'),('approvalflow-create','recommend','approvalflow-view'),('approvalflow-createRole','depend','approvalflow-role'),('approvalflow-createRole','recommend','approvalflow-deleteRole'),('approvalflow-createRole','recommend','approvalflow-editRole'),('approvalflow-delete','depend','approvalflow-browse'),('approvalflow-delete','recommend','approvalflow-create'),('approvalflow-delete','recommend','approvalflow-design'),('approvalflow-delete','recommend','approvalflow-edit'),('approvalflow-delete','recommend','approvalflow-view'),('approvalflow-deleteRole','depend','approvalflow-role'),('approvalflow-deleteRole','recommend','approvalflow-createRole'),('approvalflow-deleteRole','recommend','approvalflow-editRole'),('approvalflow-design','depend','approvalflow-browse'),('approvalflow-design','recommend','approvalflow-create'),('approvalflow-design','recommend','approvalflow-delete'),('approvalflow-design','recommend','approvalflow-edit'),('approvalflow-design','recommend','approvalflow-view'),('approvalflow-edit','depend','approvalflow-browse'),('approvalflow-edit','recommend','approvalflow-create'),('approvalflow-edit','recommend','approvalflow-delete'),('approvalflow-edit','recommend','approvalflow-design'),('approvalflow-edit','recommend','approvalflow-view'),('approvalflow-editRole','depend','approvalflow-role'),('approvalflow-editRole','recommend','approvalflow-createRole'),('approvalflow-editRole','recommend','approvalflow-deleteRole'),('approvalflow-view','depend','approvalflow-browse'),('assetlib-approveComponent','depend','assetlib-component'),('assetlib-approveComponent','depend','assetlib-componentlib'),('assetlib-approveComponent','recommend','assetlib-batchApproveComponent'),('assetlib-approveIssue','depend','assetlib-issue'),('assetlib-approveIssue','depend','assetlib-issuelib'),('assetlib-approveIssue','recommend','assetlib-batchApproveIssue'),('assetlib-approveOpportunity','depend','assetlib-opportunity'),('assetlib-approveOpportunity','depend','assetlib-opportunitylib'),('assetlib-approveOpportunity','recommend','assetlib-batchApproveOpportunity'),('assetlib-approvePractice','depend','assetlib-practice'),('assetlib-approvePractice','depend','assetlib-practicelib'),('assetlib-approvePractice','recommend','assetlib-batchApprovePractice'),('assetlib-approveRisk','depend','assetlib-risk'),('assetlib-approveRisk','depend','assetlib-risklib'),('assetlib-approveRisk','recommend','assetlib-batchApproveRisk'),('assetlib-approveStory','depend','assetlib-story'),('assetlib-approveStory','depend','assetlib-storylib'),('assetlib-approveStory','recommend','assetlib-batchApproveStory'),('assetlib-assignToComponent','depend','assetlib-component'),('assetlib-assignToComponent','depend','assetlib-componentlib'),('assetlib-assignToComponent','recommend','assetlib-batchAssignToComponent'),('assetlib-assignToComponent','recommend','assetlib-editComponent'),('assetlib-assignToComponent','recommend','assetlib-importComponent'),('assetlib-assignToComponent','recommend','assetlib-removeComponent'),('assetlib-assignToIssue','depend','assetlib-issue'),('assetlib-assignToIssue','depend','assetlib-issuelib'),('assetlib-assignToIssue','recommend','assetlib-batchAssignToIssue'),('assetlib-assignToIssue','recommend','assetlib-editIssue'),('assetlib-assignToIssue','recommend','assetlib-importIssue'),('assetlib-assignToIssue','recommend','assetlib-removeIssue'),('assetlib-assignToOpportunity','depend','assetlib-opportunity'),('assetlib-assignToOpportunity','depend','assetlib-opportunitylib'),('assetlib-assignToOpportunity','recommend','assetlib-batchAssignToOpportunity'),('assetlib-assignToOpportunity','recommend','assetlib-editOpportunity'),('assetlib-assignToOpportunity','recommend','assetlib-importOpportunity'),('assetlib-assignToOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-assignToPractice','depend','assetlib-practice'),('assetlib-assignToPractice','depend','assetlib-practicelib'),('assetlib-assignToPractice','recommend','assetlib-batchAssignToPractice'),('assetlib-assignToPractice','recommend','assetlib-editPractice'),('assetlib-assignToPractice','recommend','assetlib-importPractice'),('assetlib-assignToPractice','recommend','assetlib-removePractice'),('assetlib-assignToRisk','depend','assetlib-risk'),('assetlib-assignToRisk','depend','assetlib-risklib'),('assetlib-assignToRisk','recommend','assetlib-batchAssignToRisk'),('assetlib-assignToRisk','recommend','assetlib-editRisk'),('assetlib-assignToRisk','recommend','assetlib-importRisk'),('assetlib-assignToRisk','recommend','assetlib-removeRisk'),('assetlib-assignToStory','depend','assetlib-story'),('assetlib-assignToStory','depend','assetlib-storylib'),('assetlib-assignToStory','recommend','assetlib-batchAssignToStory'),('assetlib-assignToStory','recommend','assetlib-editStory'),('assetlib-assignToStory','recommend','assetlib-importStory'),('assetlib-assignToStory','recommend','assetlib-removeStory'),('assetlib-batchApproveComponent','depend','assetlib-component'),('assetlib-batchApproveComponent','depend','assetlib-componentlib'),('assetlib-batchApproveComponent','recommend','assetlib-approveComponent'),('assetlib-batchApproveIssue','depend','assetlib-issue'),('assetlib-batchApproveIssue','depend','assetlib-issuelib'),('assetlib-batchApproveIssue','recommend','assetlib-approveIssue'),('assetlib-batchApproveOpportunity','depend','assetlib-opportunity'),('assetlib-batchApproveOpportunity','depend','assetlib-opportunitylib'),('assetlib-batchApproveOpportunity','recommend','assetlib-approveOpportunity'),('assetlib-batchApprovePractice','depend','assetlib-practice'),('assetlib-batchApprovePractice','depend','assetlib-practicelib'),('assetlib-batchApprovePractice','recommend','assetlib-approvePractice'),('assetlib-batchApproveRisk','depend','assetlib-risk'),('assetlib-batchApproveRisk','depend','assetlib-risklib'),('assetlib-batchApproveRisk','recommend','assetlib-approveRisk'),('assetlib-batchApproveStory','depend','assetlib-story'),('assetlib-batchApproveStory','depend','assetlib-storylib'),('assetlib-batchApproveStory','recommend','assetlib-approveStory'),('assetlib-batchAssignToComponent','depend','assetlib-component'),('assetlib-batchAssignToComponent','depend','assetlib-componentlib'),('assetlib-batchAssignToComponent','recommend','assetlib-assignToComponent'),('assetlib-batchAssignToIssue','depend','assetlib-issue'),('assetlib-batchAssignToIssue','depend','assetlib-issuelib'),('assetlib-batchAssignToIssue','recommend','assetlib-assignToIssue'),('assetlib-batchAssignToOpportunity','depend','assetlib-opportunity'),('assetlib-batchAssignToOpportunity','depend','assetlib-opportunitylib'),('assetlib-batchAssignToOpportunity','recommend','assetlib-assignToOpportunity'),('assetlib-batchAssignToPractice','depend','assetlib-practice'),('assetlib-batchAssignToPractice','depend','assetlib-practicelib'),('assetlib-batchAssignToPractice','recommend','assetlib-assignToPractice'),('assetlib-batchAssignToRisk','depend','assetlib-risk'),('assetlib-batchAssignToRisk','depend','assetlib-risklib'),('assetlib-batchAssignToRisk','recommend','assetlib-assignToRisk'),('assetlib-batchAssignToStory','depend','assetlib-story'),('assetlib-batchAssignToStory','depend','assetlib-storylib'),('assetlib-batchAssignToStory','recommend','assetlib-assignToStory'),('assetlib-batchRemoveComponent','depend','assetlib-component'),('assetlib-batchRemoveComponent','depend','assetlib-componentlib'),('assetlib-batchRemoveComponent','recommend','assetlib-removeComponent'),('assetlib-batchRemoveIssue','depend','assetlib-issue'),('assetlib-batchRemoveIssue','depend','assetlib-issuelib'),('assetlib-batchRemoveIssue','recommend','assetlib-removeIssue'),('assetlib-batchRemoveOpportunity','depend','assetlib-opportunity'),('assetlib-batchRemoveOpportunity','depend','assetlib-opportunitylib'),('assetlib-batchRemoveOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-batchRemovePractice','depend','assetlib-practice'),('assetlib-batchRemovePractice','depend','assetlib-practicelib'),('assetlib-batchRemovePractice','recommend','assetlib-removePractice'),('assetlib-batchRemoveRisk','depend','assetlib-risk'),('assetlib-batchRemoveRisk','depend','assetlib-risklib'),('assetlib-batchRemoveRisk','recommend','assetlib-removeRisk'),('assetlib-batchRemoveStory','depend','assetlib-story'),('assetlib-batchRemoveStory','depend','assetlib-storylib'),('assetlib-batchRemoveStory','recommend','assetlib-removeStory'),('assetlib-caselib','recommend','assetlib-caselibSort'),('assetlib-caselib','recommend','caselib-browse'),('assetlib-caselib','recommend','caselib-view'),('assetlib-caselibSort','depend','assetlib-caselib'),('assetlib-caselibSort','recommend','caselib-create'),('assetlib-caselibSort','recommend','caselib-edit'),('assetlib-component','depend','assetlib-componentlib'),('assetlib-component','recommend','assetlib-assignToComponent'),('assetlib-component','recommend','assetlib-editComponent'),('assetlib-component','recommend','assetlib-importComponent'),('assetlib-component','recommend','assetlib-removeComponent'),('assetlib-componentlib','recommend','assetlib-componentlibSort'),('assetlib-componentlib','recommend','assetlib-createComponentlib'),('assetlib-componentlib','recommend','assetlib-editComponentlib'),('assetlib-componentlibSort','depend','assetlib-componentlib'),('assetlib-componentlibSort','recommend','assetlib-createComponentlib'),('assetlib-componentlibSort','recommend','assetlib-editComponentlib'),('assetlib-componentLibView','depend','assetlib-componentlib'),('assetlib-componentLibView','recommend','assetlib-createComponentlib'),('assetlib-componentLibView','recommend','assetlib-editComponentlib'),('assetlib-componentView','depend','assetlib-component'),('assetlib-componentView','depend','assetlib-componentlib'),('assetlib-componentView','recommend','assetlib-editComponent'),('assetlib-createComponentlib','depend','assetlib-componentlib'),('assetlib-createComponentlib','recommend','assetlib-componentlibSort'),('assetlib-createComponentlib','recommend','assetlib-editComponentlib'),('assetlib-createIssuelib','depend','assetlib-issuelib'),('assetlib-createIssuelib','recommend','assetlib-editIssuelib'),('assetlib-createIssuelib','recommend','assetlib-issuelibSort'),('assetlib-createOpportunitylib','depend','assetlib-opportunitylib'),('assetlib-createOpportunitylib','recommend','assetlib-editOpportunitylib'),('assetlib-createOpportunitylib','recommend','assetlib-opportunitylibSort'),('assetlib-createPracticelib','depend','assetlib-practicelib'),('assetlib-createPracticelib','recommend','assetlib-editPracticelib'),('assetlib-createPracticelib','recommend','assetlib-practicelibSort'),('assetlib-createRisklib','depend','assetlib-risklib'),('assetlib-createRisklib','recommend','assetlib-editRisklib'),('assetlib-createRisklib','recommend','assetlib-risklibSort'),('assetlib-createStorylib','depend','assetlib-storylib'),('assetlib-createStorylib','recommend','assetlib-editStorylib'),('assetlib-createStorylib','recommend','assetlib-storylibSort'),('assetlib-deleteComponentlib','depend','assetlib-componentlib'),('assetlib-deleteComponentlib','recommend','assetlib-createComponentlib'),('assetlib-deleteComponentlib','recommend','assetlib-editComponentlib'),('assetlib-deleteIssuelib','depend','assetlib-issuelib'),('assetlib-deleteIssuelib','recommend','assetlib-createIssuelib'),('assetlib-deleteIssuelib','recommend','assetlib-editIssuelib'),('assetlib-deleteOpportunitylib','depend','assetlib-opportunitylib'),('assetlib-deleteOpportunitylib','recommend','assetlib-editOpportunity'),('assetlib-deleteOpportunitylib','recommend','assetlib-importOpportunity'),('assetlib-deletePracticelib','depend','assetlib-practicelib'),('assetlib-deletePracticelib','recommend','assetlib-createPracticelib'),('assetlib-deletePracticelib','recommend','assetlib-editPracticelib'),('assetlib-deleteRisklib','depend','assetlib-risklib'),('assetlib-deleteRisklib','recommend','assetlib-createRisklib'),('assetlib-deleteRisklib','recommend','assetlib-editRisklib'),('assetlib-deleteStorylib','depend','assetlib-storylib'),('assetlib-deleteStorylib','recommend','assetlib-createStorylib'),('assetlib-deleteStorylib','recommend','assetlib-editStorylib'),('assetlib-editComponent','depend','assetlib-component'),('assetlib-editComponent','depend','assetlib-componentlib'),('assetlib-editComponent','recommend','assetlib-assignToComponent'),('assetlib-editComponent','recommend','assetlib-importComponent'),('assetlib-editComponent','recommend','assetlib-removeComponent'),('assetlib-editComponentlib','depend','assetlib-componentlib'),('assetlib-editComponentlib','recommend','assetlib-componentlibSort'),('assetlib-editComponentlib','recommend','assetlib-createComponentlib'),('assetlib-editIssue','depend','assetlib-issue'),('assetlib-editIssue','depend','assetlib-issuelib'),('assetlib-editIssue','recommend','assetlib-assignToIssue'),('assetlib-editIssue','recommend','assetlib-importIssue'),('assetlib-editIssue','recommend','assetlib-removeIssue'),('assetlib-editIssuelib','depend','assetlib-issuelib'),('assetlib-editIssuelib','recommend','assetlib-createIssuelib'),('assetlib-editIssuelib','recommend','assetlib-issuelibSort'),('assetlib-editOpportunity','depend','assetlib-opportunity'),('assetlib-editOpportunity','depend','assetlib-opportunitylib'),('assetlib-editOpportunity','recommend','assetlib-assignToOpportunity'),('assetlib-editOpportunity','recommend','assetlib-importOpportunity'),('assetlib-editOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-editOpportunitylib','depend','assetlib-opportunitylib'),('assetlib-editOpportunitylib','recommend','assetlib-createOpportunitylib'),('assetlib-editOpportunitylib','recommend','assetlib-opportunitylibSort'),('assetlib-editPractice','depend','assetlib-practice'),('assetlib-editPractice','depend','assetlib-practicelib'),('assetlib-editPractice','recommend','assetlib-assignToPractice'),('assetlib-editPractice','recommend','assetlib-importPractice'),('assetlib-editPractice','recommend','assetlib-removePractice'),('assetlib-editPracticelib','depend','assetlib-practicelib'),('assetlib-editPracticelib','recommend','assetlib-createPracticelib'),('assetlib-editPracticelib','recommend','assetlib-practicelibSort'),('assetlib-editRisk','depend','assetlib-risk'),('assetlib-editRisk','depend','assetlib-risklib'),('assetlib-editRisk','recommend','assetlib-assignToRisk'),('assetlib-editRisk','recommend','assetlib-importRisk'),('assetlib-editRisk','recommend','assetlib-removeRisk'),('assetlib-editRisklib','depend','assetlib-risklib'),('assetlib-editRisklib','recommend','assetlib-createRisklib'),('assetlib-editRisklib','recommend','assetlib-risklibSort'),('assetlib-editStory','depend','assetlib-story'),('assetlib-editStory','depend','assetlib-storylib'),('assetlib-editStory','recommend','assetlib-assignToStory'),('assetlib-editStory','recommend','assetlib-importStory'),('assetlib-editStory','recommend','assetlib-removeStory'),('assetlib-editStorylib','depend','assetlib-storylib'),('assetlib-editStorylib','recommend','assetlib-createStorylib'),('assetlib-editStorylib','recommend','assetlib-storylibSort'),('assetlib-importComponent','depend','assetlib-component'),('assetlib-importComponent','depend','assetlib-componentlib'),('assetlib-importComponent','recommend','assetlib-assignToComponent'),('assetlib-importComponent','recommend','assetlib-editComponent'),('assetlib-importComponent','recommend','assetlib-removeComponent'),('assetlib-importIssue','depend','assetlib-issue'),('assetlib-importIssue','depend','assetlib-issuelib'),('assetlib-importIssue','recommend','assetlib-assignToIssue'),('assetlib-importIssue','recommend','assetlib-editIssue'),('assetlib-importIssue','recommend','assetlib-removeIssue'),('assetlib-importOpportunity','depend','assetlib-opportunity'),('assetlib-importOpportunity','depend','assetlib-opportunitylib'),('assetlib-importOpportunity','recommend','assetlib-assignToOpportunity'),('assetlib-importOpportunity','recommend','assetlib-editOpportunity'),('assetlib-importOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-importPractice','depend','assetlib-practice'),('assetlib-importPractice','depend','assetlib-practicelib'),('assetlib-importPractice','recommend','assetlib-assignToPractice'),('assetlib-importPractice','recommend','assetlib-editPractice'),('assetlib-importPractice','recommend','assetlib-removePractice'),('assetlib-importRisk','depend','assetlib-risk'),('assetlib-importRisk','depend','assetlib-risklib'),('assetlib-importRisk','recommend','assetlib-assignToRisk'),('assetlib-importRisk','recommend','assetlib-editRisk'),('assetlib-importRisk','recommend','assetlib-removeRisk'),('assetlib-importStory','depend','assetlib-story'),('assetlib-importStory','depend','assetlib-storylib'),('assetlib-importStory','recommend','assetlib-assignToStory'),('assetlib-importStory','recommend','assetlib-editStory'),('assetlib-importStory','recommend','assetlib-removeStory'),('assetlib-issue','depend','assetlib-issuelib'),('assetlib-issue','recommend','assetlib-editIssue'),('assetlib-issue','recommend','assetlib-importIssue'),('assetlib-issue','recommend','assetlib-issueView'),('assetlib-issue','recommend','assetlib-removeIssue'),('assetlib-issuelib','recommend','assetlib-createIssuelib'),('assetlib-issuelib','recommend','assetlib-editIssuelib'),('assetlib-issuelib','recommend','assetlib-issue'),('assetlib-issuelib','recommend','assetlib-issuelibSort'),('assetlib-issuelib','recommend','assetlib-issueLibView'),('assetlib-issuelibSort','depend','assetlib-issuelib'),('assetlib-issuelibSort','recommend','assetlib-createIssuelib'),('assetlib-issuelibSort','recommend','assetlib-editIssuelib'),('assetlib-issueLibView','depend','assetlib-issue'),('assetlib-issueLibView','depend','assetlib-issuelib'),('assetlib-issueLibView','recommend','assetlib-editIssuelib'),('assetlib-issueView','depend','assetlib-issue'),('assetlib-issueView','depend','assetlib-issuelib'),('assetlib-issueView','recommend','assetlib-editIssue'),('assetlib-issueView','recommend','assetlib-removeIssue'),('assetlib-opportunity','depend','assetlib-opportunitylib'),('assetlib-opportunity','recommend','assetlib-assignToOpportunity'),('assetlib-opportunity','recommend','assetlib-editOpportunity'),('assetlib-opportunity','recommend','assetlib-importOpportunity'),('assetlib-opportunity','recommend','assetlib-removeOpportunity'),('assetlib-opportunitylib','recommend','assetlib-createOpportunitylib'),('assetlib-opportunitylib','recommend','assetlib-editOpportunitylib'),('assetlib-opportunitylib','recommend','assetlib-opportunitylibSort'),('assetlib-opportunitylibSort','depend','assetlib-opportunitylib'),('assetlib-opportunitylibSort','recommend','assetlib-createOpportunitylib'),('assetlib-opportunitylibSort','recommend','assetlib-editOpportunitylib'),('assetlib-opportunityLibView','depend','assetlib-opportunitylib'),('assetlib-opportunityLibView','recommend','assetlib-editOpportunitylib'),('assetlib-opportunityView','depend','assetlib-opportunity'),('assetlib-opportunityView','depend','assetlib-opportunitylib'),('assetlib-opportunityView','recommend','assetlib-assignToOpportunity'),('assetlib-opportunityView','recommend','assetlib-editOpportunity'),('assetlib-practice','depend','assetlib-practicelib'),('assetlib-practice','recommend','assetlib-assignToPractice'),('assetlib-practice','recommend','assetlib-editPractice'),('assetlib-practice','recommend','assetlib-importPractice'),('assetlib-practice','recommend','assetlib-removePractice'),('assetlib-practicelib','recommend','assetlib-createPracticelib'),('assetlib-practicelib','recommend','assetlib-editPracticelib'),('assetlib-practicelib','recommend','assetlib-practicelibSort'),('assetlib-practicelibSort','depend','assetlib-practicelib'),('assetlib-practicelibSort','recommend','assetlib-createPracticelib'),('assetlib-practicelibSort','recommend','assetlib-editPracticelib'),('assetlib-practiceLibView','depend','assetlib-practicelib'),('assetlib-practiceLibView','recommend','assetlib-editPracticelib'),('assetlib-practiceView','depend','assetlib-practice'),('assetlib-practiceView','depend','assetlib-practicelib'),('assetlib-practiceView','recommend','assetlib-editPractice'),('assetlib-practiceView','recommend','assetlib-removePractice'),('assetlib-removeComponent','depend','assetlib-component'),('assetlib-removeComponent','depend','assetlib-componentlib'),('assetlib-removeComponent','recommend','assetlib-batchRemoveComponent'),('assetlib-removeComponent','recommend','assetlib-editComponent'),('assetlib-removeComponent','recommend','assetlib-importComponent'),('assetlib-removeIssue','depend','assetlib-issue'),('assetlib-removeIssue','depend','assetlib-issuelib'),('assetlib-removeIssue','recommend','assetlib-batchRemoveIssue'),('assetlib-removeIssue','recommend','assetlib-editIssue'),('assetlib-removeIssue','recommend','assetlib-importIssue'),('assetlib-removeOpportunity','depend','assetlib-opportunity'),('assetlib-removeOpportunity','depend','assetlib-opportunitylib'),('assetlib-removeOpportunity','recommend','assetlib-batchRemoveOpportunity'),('assetlib-removeOpportunity','recommend','assetlib-editOpportunity'),('assetlib-removeOpportunity','recommend','assetlib-importOpportunity'),('assetlib-removePractice','depend','assetlib-practice'),('assetlib-removePractice','depend','assetlib-practicelib'),('assetlib-removePractice','recommend','assetlib-batchRemovePractice'),('assetlib-removePractice','recommend','assetlib-editPractice'),('assetlib-removePractice','recommend','assetlib-importPractice'),('assetlib-removeRisk','depend','assetlib-risk'),('assetlib-removeRisk','depend','assetlib-risklib'),('assetlib-removeRisk','recommend','assetlib-batchRemoveRisk'),('assetlib-removeRisk','recommend','assetlib-editRisk'),('assetlib-removeRisk','recommend','assetlib-importRisk'),('assetlib-removeStory','depend','assetlib-story'),('assetlib-removeStory','depend','assetlib-storylib'),('assetlib-removeStory','recommend','assetlib-batchRemoveStory'),('assetlib-removeStory','recommend','assetlib-editStory'),('assetlib-removeStory','recommend','assetlib-importStory'),('assetlib-risk','depend','assetlib-risklib'),('assetlib-risk','recommend','assetlib-assignToRisk'),('assetlib-risk','recommend','assetlib-editRisk'),('assetlib-risk','recommend','assetlib-importRisk'),('assetlib-risk','recommend','assetlib-removeRisk'),('assetlib-risk','recommend','assetlib-riskView'),('assetlib-risklib','recommend','assetlib-createRisklib'),('assetlib-risklib','recommend','assetlib-editRisklib'),('assetlib-risklib','recommend','assetlib-risk'),('assetlib-risklib','recommend','assetlib-risklibSort'),('assetlib-risklib','recommend','assetlib-riskLibView'),('assetlib-risklibSort','depend','assetlib-risklib'),('assetlib-risklibSort','recommend','assetlib-createRisklib'),('assetlib-risklibSort','recommend','assetlib-editRisklib'),('assetlib-riskLibView','depend','assetlib-risklib'),('assetlib-riskLibView','recommend','assetlib-editRisk'),('assetlib-riskView','depend','assetlib-risk'),('assetlib-riskView','depend','assetlib-risklib'),('assetlib-riskView','recommend','assetlib-assignToRisk'),('assetlib-riskView','recommend','assetlib-editRisk'),('assetlib-story','depend','assetlib-storylib'),('assetlib-story','recommend','assetlib-assignToStory'),('assetlib-story','recommend','assetlib-editStory'),('assetlib-story','recommend','assetlib-importStory'),('assetlib-story','recommend','assetlib-removeStory'),('assetlib-story','recommend','assetlib-storyView'),('assetlib-storylib','recommend','assetlib-createStorylib'),('assetlib-storylib','recommend','assetlib-editStorylib'),('assetlib-storylib','recommend','assetlib-story'),('assetlib-storylib','recommend','assetlib-storylibSort'),('assetlib-storylib','recommend','assetlib-storyLibView'),('assetlib-storylibSort','depend','assetlib-storylib'),('assetlib-storylibSort','recommend','assetlib-createStorylib'),('assetlib-storylibSort','recommend','assetlib-editStorylib'),('assetlib-storyLibView','depend','assetlib-story'),('assetlib-storyLibView','depend','assetlib-storylib'),('assetlib-storyLibView','recommend','assetlib-editStorylib'),('assetlib-storyView','depend','assetlib-story'),('assetlib-storyView','depend','assetlib-storylib'),('assetlib-storyView','recommend','assetlib-assignToStory'),('assetlib-storyView','recommend','assetlib-editStory'),('assetlib-storyView','recommend','assetlib-importStory'),('assetlib-storyView','recommend','assetlib-removeStory'),('attend-browseReview','depend','attend-personal'),('attend-company','depend','attend-personal'),('attend-department','depend','attend-personal'),('attend-detail','depend','attend-personal'),('attend-edit','depend','attend-personal'),('attend-edit','recommend','attend-browseReview'),('attend-export','depend','attend-department'),('attend-export','depend','attend-personal'),('attend-exportDetail','depend','attend-detail'),('attend-exportDetail','depend','attend-personal'),('attend-exportStat','depend','attend-personal'),('attend-exportStat','depend','attend-stat'),('attend-personal','recommend','attend-edit'),('attend-personalSettings','depend','attend-personal'),('attend-review','depend','attend-browseReview'),('attend-review','depend','attend-personal'),('attend-saveStat','depend','attend-personal'),('attend-saveStat','depend','attend-stat'),('attend-setManager','depend','attend-personal'),('attend-settings','depend','attend-personal'),('attend-stat','depend','attend-personal'),('auditcl-batchCreate','recommend','auditcl-batchEdit'),('auditcl-batchCreate','recommend','auditcl-delete'),('auditcl-batchCreate','recommend','auditcl-edit'),('auditcl-batchEdit','recommend','auditcl-batchCreate'),('auditcl-batchEdit','recommend','auditcl-delete'),('auditcl-batchEdit','recommend','auditcl-edit'),('auditcl-delete','recommend','auditcl-batchCreate'),('auditcl-delete','recommend','auditcl-batchEdit'),('auditcl-delete','recommend','auditcl-edit'),('auditcl-edit','recommend','auditcl-batchCreate'),('auditcl-edit','recommend','auditcl-batchEdit'),('auditcl-edit','recommend','auditcl-delete'),('auditplan-assignTo','depend','auditplan-browse'),('auditplan-assignTo','recommend','auditplan-check'),('auditplan-assignTo','recommend','auditplan-create'),('auditplan-assignTo','recommend','auditplan-edit'),('auditplan-assignTo','recommend','auditplan-nc'),('auditplan-assignTo','recommend','auditplan-result'),('auditplan-batchCheck','depend','auditplan-browse'),('auditplan-batchCheck','recommend','auditplan-check'),('auditplan-batchCreate','depend','auditplan-browse'),('auditplan-batchCreate','recommend','auditplan-create'),('auditplan-batchEdit','depend','auditplan-browse'),('auditplan-batchEdit','recommend','auditplan-edit'),('auditplan-check','depend','auditplan-browse'),('auditplan-check','recommend','auditplan-assignTo'),('auditplan-check','recommend','auditplan-batchCheck'),('auditplan-check','recommend','auditplan-create'),('auditplan-check','recommend','auditplan-edit'),('auditplan-check','recommend','auditplan-nc'),('auditplan-check','recommend','auditplan-result'),('auditplan-create','depend','auditplan-browse'),('auditplan-create','recommend','auditplan-assignTo'),('auditplan-create','recommend','auditplan-batchCreate'),('auditplan-create','recommend','auditplan-check'),('auditplan-create','recommend','auditplan-delete'),('auditplan-create','recommend','auditplan-edit'),('auditplan-create','recommend','auditplan-nc'),('auditplan-create','recommend','auditplan-result'),('auditplan-delete','depend','auditplan-browse'),('auditplan-delete','recommend','auditplan-create'),('auditplan-delete','recommend','auditplan-edit'),('auditplan-edit','depend','auditplan-browse'),('auditplan-edit','recommend','auditplan-assignTo'),('auditplan-edit','recommend','auditplan-batchEdit'),('auditplan-edit','recommend','auditplan-check'),('auditplan-edit','recommend','auditplan-create'),('auditplan-edit','recommend','auditplan-delete'),('auditplan-edit','recommend','auditplan-nc'),('auditplan-edit','recommend','auditplan-result'),('auditplan-nc','depend','auditplan-browse'),('auditplan-nc','recommend','auditplan-assignTo'),('auditplan-nc','recommend','auditplan-check'),('auditplan-nc','recommend','auditplan-create'),('auditplan-nc','recommend','auditplan-edit'),('auditplan-nc','recommend','auditplan-result'),('auditplan-result','depend','auditplan-browse'),('auditplan-result','recommend','auditplan-assignTo'),('auditplan-result','recommend','auditplan-check'),('auditplan-result','recommend','auditplan-create'),('auditplan-result','recommend','auditplan-edit'),('auditplan-result','recommend','auditplan-nc'),('backup-backup','depend','backup-index'),('backup-change','depend','backup-setting'),('backup-delete','depend','backup-index'),('backup-restore','depend','backup-index'),('backup-rmPHPHeader','depend','backup-index'),('backup-setting','depend','backup-index'),('backup-setting','recommend','backup-change'),('baseline-createTemplate','depend','baseline-template'),('baseline-createTemplate','recommend','baseline-delete'),('baseline-createTemplate','recommend','baseline-editBook'),('baseline-createTemplate','recommend','baseline-editTemplate'),('baseline-createTemplate','recommend','baseline-manageBook'),('baseline-delete','depend','baseline-template'),('baseline-delete','recommend','baseline-createTemplate'),('baseline-editBook','depend','baseline-template'),('baseline-editBook','recommend','baseline-createTemplate'),('baseline-editBook','recommend','baseline-delete'),('baseline-editBook','recommend','baseline-editTemplate'),('baseline-editBook','recommend','baseline-manageBook'),('baseline-editTemplate','depend','baseline-template'),('baseline-editTemplate','recommend','baseline-createTemplate'),('baseline-editTemplate','recommend','baseline-delete'),('baseline-editTemplate','recommend','baseline-editBook'),('baseline-editTemplate','recommend','baseline-manageBook'),('baseline-manageBook','depend','baseline-template'),('baseline-manageBook','recommend','baseline-createTemplate'),('baseline-manageBook','recommend','baseline-delete'),('baseline-manageBook','recommend','baseline-editBook'),('baseline-manageBook','recommend','baseline-editTemplate'),('baseline-view','depend','baseline-template'),('branch-activate','depend','branch-close'),('branch-activate','depend','branch-manage'),('branch-activate','recommend','branch-create'),('branch-activate','recommend','branch-edit'),('branch-activate','recommend','branch-mergeBranch'),('branch-activate','recommend','branch-sort'),('branch-batchEdit','depend','product-all'),('branch-batchEdit','recommend','product-edit'),('branch-close','depend','branch-manage'),('branch-close','recommend','branch-activate'),('branch-close','recommend','branch-batchEdit'),('branch-close','recommend','branch-create'),('branch-close','recommend','branch-edit'),('branch-close','recommend','branch-mergeBranch'),('branch-close','recommend','branch-sort'),('branch-create','depend','branch-manage'),('branch-create','recommend','branch-activate'),('branch-create','recommend','branch-batchEdit'),('branch-create','recommend','branch-close'),('branch-create','recommend','branch-edit'),('branch-create','recommend','branch-mergeBranch'),('branch-create','recommend','branch-sort'),('branch-edit','depend','branch-manage'),('branch-edit','recommend','branch-activate'),('branch-edit','recommend','branch-batchEdit'),('branch-edit','recommend','branch-close'),('branch-edit','recommend','branch-create'),('branch-edit','recommend','branch-mergeBranch'),('branch-edit','recommend','branch-sort'),('branch-manage','depend','product-create'),('branch-manage','depend','product-edit'),('branch-manage','depend','product-view'),('branch-manage','recommend','branch-activate'),('branch-manage','recommend','branch-close'),('branch-manage','recommend','branch-create'),('branch-manage','recommend','branch-edit'),('branch-manage','recommend','branch-mergeBranch'),('branch-manage','recommend','branch-sort'),('branch-mergeBranch','depend','branch-manage'),('branch-mergeBranch','recommend','branch-activate'),('branch-mergeBranch','recommend','branch-batchEdit'),('branch-mergeBranch','recommend','branch-close'),('branch-mergeBranch','recommend','branch-create'),('branch-mergeBranch','recommend','branch-edit'),('branch-mergeBranch','recommend','branch-sort'),('branch-sort','depend','branch-manage'),('branch-sort','recommend','branch-create'),('branch-sort','recommend','branch-edit'),('budget-batchCreate','depend','workestimation-index'),('budget-batchCreate','recommend','budget-create'),('budget-browse','depend','project-index'),('budget-browse','depend','workestimation-index'),('budget-browse','recommend','budget-summary'),('budget-create','depend','workestimation-index'),('budget-create','recommend','budget-batchCreate'),('budget-delete','depend','budget-browse'),('budget-delete','depend','workestimation-index'),('budget-delete','recommend','budget-create'),('budget-delete','recommend','budget-edit'),('budget-edit','depend','budget-browse'),('budget-edit','depend','workestimation-index'),('budget-edit','recommend','budget-view'),('budget-summary','depend','workestimation-index'),('budget-summary','recommend','budget-browse'),('budget-view','depend','budget-browse'),('budget-view','depend','workestimation-index'),('budget-view','recommend','budget-edit'),('bug-activate','depend','bug-view'),('bug-activate','recommend','bug-assignTo'),('bug-activate','recommend','bug-batchActivate'),('bug-activate','recommend','bug-close'),('bug-activate','recommend','bug-confirmBug'),('bug-activate','recommend','bug-confirmStoryChange'),('bug-activate','recommend','bug-create'),('bug-activate','recommend','bug-edit'),('bug-activate','recommend','bug-linkBugs'),('bug-activate','recommend','bug-resolve'),('bug-assignTo','depend','bug-view'),('bug-assignTo','recommend','bug-activate'),('bug-assignTo','recommend','bug-batchAssignTo'),('bug-assignTo','recommend','bug-close'),('bug-assignTo','recommend','bug-confirmBug'),('bug-assignTo','recommend','bug-confirmStoryChange'),('bug-assignTo','recommend','bug-create'),('bug-assignTo','recommend','bug-edit'),('bug-assignTo','recommend','bug-linkBugs'),('bug-assignTo','recommend','bug-resolve'),('bug-batchActivate','recommend','bug-activate'),('bug-batchAssignTo','recommend','bug-assignTo'),('bug-batchChangeBranch','recommend','bug-edit'),('bug-batchChangeModule','recommend','bug-edit'),('bug-batchChangePlan','recommend','bug-edit'),('bug-batchClose','recommend','bug-close'),('bug-batchConfirm','recommend','bug-confirmBug'),('bug-batchCreate','recommend','bug-create'),('bug-batchEdit','recommend','bug-edit'),('bug-batchResolve','recommend','bug-resolve'),('bug-browse','depend','qa-index'),('bug-browse','recommend','bug-report'),('bug-browse','recommend','bug-view'),('bug-close','depend','bug-view'),('bug-close','recommend','bug-activate'),('bug-close','recommend','bug-assignTo'),('bug-close','recommend','bug-batchClose'),('bug-close','recommend','bug-confirmBug'),('bug-close','recommend','bug-confirmStoryChange'),('bug-close','recommend','bug-create'),('bug-close','recommend','bug-edit'),('bug-close','recommend','bug-linkBugs'),('bug-close','recommend','bug-resolve'),('bug-confirmBug','depend','bug-view'),('bug-confirmBug','recommend','bug-activate'),('bug-confirmBug','recommend','bug-assignTo'),('bug-confirmBug','recommend','bug-batchConfirm'),('bug-confirmBug','recommend','bug-close'),('bug-confirmBug','recommend','bug-confirmStoryChange'),('bug-confirmBug','recommend','bug-create'),('bug-confirmBug','recommend','bug-edit'),('bug-confirmBug','recommend','bug-linkBugs'),('bug-confirmBug','recommend','bug-resolve'),('bug-confirmStoryChange','depend','bug-view'),('bug-confirmStoryChange','recommend','bug-activate'),('bug-confirmStoryChange','recommend','bug-assignTo'),('bug-confirmStoryChange','recommend','bug-close'),('bug-confirmStoryChange','recommend','bug-confirmBug'),('bug-confirmStoryChange','recommend','bug-create'),('bug-confirmStoryChange','recommend','bug-edit'),('bug-confirmStoryChange','recommend','bug-linkBugs'),('bug-confirmStoryChange','recommend','bug-resolve'),('bug-create','depend','bug-view'),('bug-create','recommend','bug-activate'),('bug-create','recommend','bug-assignTo'),('bug-create','recommend','bug-batchCreate'),('bug-create','recommend','bug-close'),('bug-create','recommend','bug-confirmBug'),('bug-create','recommend','bug-confirmStoryChange'),('bug-create','recommend','bug-edit'),('bug-create','recommend','bug-linkBugs'),('bug-create','recommend','bug-resolve'),('bug-delete','depend','bug-view'),('bug-edit','depend','bug-view'),('bug-edit','recommend','bug-activate'),('bug-edit','recommend','bug-assignTo'),('bug-edit','recommend','bug-batchEdit'),('bug-edit','recommend','bug-close'),('bug-edit','recommend','bug-confirmBug'),('bug-edit','recommend','bug-confirmStoryChange'),('bug-edit','recommend','bug-create'),('bug-edit','recommend','bug-linkBugs'),('bug-edit','recommend','bug-resolve'),('bug-exportTemplate','depend','bug-import'),('bug-import','depend','bug-exportTemplate'),('bug-linkBugs','depend','bug-edit'),('bug-resolve','depend','bug-view'),('bug-resolve','recommend','bug-activate'),('bug-resolve','recommend','bug-assignTo'),('bug-resolve','recommend','bug-batchResolve'),('bug-resolve','recommend','bug-close'),('bug-resolve','recommend','bug-confirmBug'),('bug-resolve','recommend','bug-confirmStoryChange'),('bug-resolve','recommend','bug-create'),('bug-resolve','recommend','bug-edit'),('bug-resolve','recommend','bug-linkBugs'),('build-batchUnlinkBug','depend','execution-build'),('build-batchUnlinkBug','recommend','build-unlinkBug'),('build-batchUnlinkStory','depend','execution-build'),('build-batchUnlinkStory','recommend','build-unlinkStory'),('build-create','depend','execution-build'),('build-create','recommend','build-edit'),('build-create','recommend','build-linkBug'),('build-create','recommend','build-linkStory'),('build-create','recommend','build-unlinkBug'),('build-create','recommend','build-unlinkStory'),('build-delete','depend','execution-build'),('build-delete','recommend','build-create'),('build-delete','recommend','build-edit'),('build-edit','depend','execution-build'),('build-edit','recommend','build-create'),('build-edit','recommend','build-linkBug'),('build-edit','recommend','build-linkStory'),('build-edit','recommend','build-unlinkBug'),('build-edit','recommend','build-unlinkStory'),('build-linkBug','depend','execution-build'),('build-linkBug','recommend','build-create'),('build-linkBug','recommend','build-edit'),('build-linkBug','recommend','build-linkStory'),('build-linkBug','recommend','build-unlinkBug'),('build-linkBug','recommend','build-unlinkStory'),('build-linkStory','depend','execution-build'),('build-linkStory','recommend','build-create'),('build-linkStory','recommend','build-edit'),('build-linkStory','recommend','build-linkBug'),('build-linkStory','recommend','build-unlinkBug'),('build-linkStory','recommend','build-unlinkStory'),('build-unlinkBug','depend','execution-build'),('build-unlinkBug','recommend','build-batchUnlinkBug'),('build-unlinkBug','recommend','build-create'),('build-unlinkBug','recommend','build-edit'),('build-unlinkBug','recommend','build-linkBug'),('build-unlinkBug','recommend','build-linkStory'),('build-unlinkBug','recommend','build-unlinkStory'),('build-unlinkStory','depend','execution-build'),('build-unlinkStory','recommend','build-batchUnlinkStory'),('build-unlinkStory','recommend','build-create'),('build-unlinkStory','recommend','build-edit'),('build-unlinkStory','recommend','build-linkBug'),('build-unlinkStory','recommend','build-linkStory'),('build-unlinkStory','recommend','build-unlinkBug'),('build-view','depend','execution-build'),('build-view','recommend','build-create'),('build-view','recommend','build-edit'),('build-view','recommend','build-linkBug'),('build-view','recommend','build-linkStory'),('build-view','recommend','build-unlinkBug'),('build-view','recommend','build-unlinkStory'),('caselib-batchCreateCase','depend','caselib-browse'),('caselib-batchCreateCase','recommend','caselib-createCase'),('caselib-browse','recommend','assetlib-caselib'),('caselib-browse','recommend','caselib-create'),('caselib-browse','recommend','caselib-createCase'),('caselib-browse','recommend','caselib-edit'),('caselib-browse','recommend','caselib-import'),('caselib-browse','recommend','caselib-view'),('caselib-create','depend','caselib-browse'),('caselib-create','recommend','assetlib-caselibSort'),('caselib-create','recommend','caselib-createCase'),('caselib-create','recommend','caselib-edit'),('caselib-create','recommend','caselib-import'),('caselib-createCase','depend','caselib-browse'),('caselib-createCase','recommend','caselib-batchCreateCase'),('caselib-createCase','recommend','caselib-create'),('caselib-createCase','recommend','caselib-import'),('caselib-delete','depend','caselib-view'),('caselib-delete','recommend','caselib-create'),('caselib-delete','recommend','caselib-edit'),('caselib-edit','depend','caselib-view'),('caselib-edit','recommend','assetlib-caselibSort'),('caselib-edit','recommend','caselib-create'),('caselib-exportTemplate','depend','caselib-browse'),('caselib-exportTemplate','depend','caselib-import'),('caselib-import','depend','caselib-browse'),('caselib-import','depend','caselib-exportTemplate'),('caselib-import','depend','caselib-showImport'),('caselib-showImport','depend','caselib-import'),('caselib-view','depend','caselib-browse'),('caselib-view','recommend','assetlib-caselib'),('caselib-view','recommend','caselib-edit'),('chart-browse','depend','chart-preview'),('chart-create','depend','chart-browse'),('chart-create','recommend','chart-delete'),('chart-create','recommend','chart-design'),('chart-create','recommend','chart-edit'),('chart-delete','depend','chart-browse'),('chart-delete','recommend','chart-create'),('chart-delete','recommend','chart-design'),('chart-delete','recommend','chart-edit'),('chart-design','depend','chart-browse'),('chart-design','recommend','chart-create'),('chart-design','recommend','chart-delete'),('chart-design','recommend','chart-edit'),('chart-edit','depend','chart-browse'),('chart-edit','recommend','chart-create'),('chart-edit','recommend','chart-delete'),('chart-edit','recommend','chart-design'),('chart-export','depend','chart-preview'),('charter-activate','depend','charter-browse'),('charter-activate','depend','charter-view'),('charter-activate','recommend','charter-close'),('charter-activate','recommend','charter-create'),('charter-activate','recommend','charter-edit'),('charter-close','depend','charter-browse'),('charter-close','depend','charter-view'),('charter-close','recommend','charter-activate'),('charter-close','recommend','charter-create'),('charter-close','recommend','charter-edit'),('charter-create','depend','charter-browse'),('charter-create','recommend','charter-delete'),('charter-create','recommend','charter-edit'),('charter-delete','depend','charter-browse'),('charter-delete','depend','charter-view'),('charter-edit','depend','charter-browse'),('charter-edit','depend','charter-loadRoadmapStories'),('charter-edit','depend','charter-view'),('charter-edit','recommend','charter-create'),('charter-edit','recommend','charter-delete'),('charter-loadRoadmapStories','depend','charter-browse'),('charter-loadRoadmapStories','depend','charter-view'),('charter-review','depend','charter-browse'),('charter-review','depend','charter-loadRoadmapStories'),('charter-review','depend','charter-view'),('charter-view','depend','charter-browse'),('ci-checkCompileStatus','recommend','ci-commitResult'),('ci-commitResult','recommend','ci-checkCompileStatus'),('cm-browse','depend','project-index'),('cm-browse','recommend','cm-view'),('cm-create','depend','cm-browse'),('cm-create','depend','cm-view'),('cm-create','recommend','cm-delete'),('cm-create','recommend','cm-edit'),('cm-create','recommend','review-browse'),('cm-delete','depend','cm-browse'),('cm-delete','depend','cm-view'),('cm-delete','recommend','cm-create'),('cm-delete','recommend','cm-edit'),('cm-edit','depend','cm-browse'),('cm-edit','depend','cm-view'),('cm-edit','recommend','cm-create'),('cm-edit','recommend','cm-delete'),('cm-report','depend','cm-browse'),('cm-view','depend','cm-browse'),('cmcl-batchCreate','recommend','cmcl-delete'),('cmcl-batchCreate','recommend','cmcl-edit'),('cmcl-delete','recommend','cmcl-batchCreate'),('cmcl-delete','recommend','cmcl-edit'),('cmcl-edit','recommend','cmcl-batchCreate'),('cmcl-edit','recommend','cmcl-delete'),('company-alleffort','depend','my-team'),('company-alleffort','depend','user-todo'),('company-alleffort','recommend','company-allTodo'),('company-allTodo','depend','my-team'),('company-allTodo','depend','user-todo'),('company-allTodo','recommend','company-alleffort'),('company-browse','depend','admin-index'),('company-browse','depend','admin-register'),('company-browse','recommend','user-view'),('company-calendar','depend','company-effort'),('company-calendar','depend','my-team'),('company-dynamic','depend','my-team'),('company-edit','depend','company-view'),('company-edit','depend','my-team'),('company-effort','depend','my-team'),('company-effort','recommend','company-calendar'),('company-todo','depend','my-team'),('company-view','depend','my-team'),('company-view','recommend','company-edit'),('compile-browse','depend','job-browse'),('compile-browse','recommend','compile-logs'),('compile-browse','recommend','job-exec'),('compile-browse','recommend','job-view'),('compile-logs','depend','job-browse'),('compile-logs','recommend','compile-browse'),('compile-logs','recommend','job-exec'),('compile-logs','recommend','job-view'),('compile-syncCompile','depend','job-browse'),('cron-create','depend','cron-index'),('cron-create','recommend','cron-delete'),('cron-create','recommend','cron-edit'),('cron-create','recommend','cron-toggle'),('cron-delete','depend','cron-index'),('cron-delete','recommend','cron-create'),('cron-delete','recommend','cron-edit'),('cron-delete','recommend','cron-toggle'),('cron-edit','depend','cron-index'),('cron-edit','recommend','cron-create'),('cron-edit','recommend','cron-delete'),('cron-edit','recommend','cron-toggle'),('cron-openProcess','depend','cron-index'),('cron-toggle','depend','cron-index'),('cron-toggle','recommend','cron-create'),('cron-toggle','recommend','cron-delete'),('cron-toggle','recommend','cron-edit'),('cron-turnon','depend','cron-index'),('custom-browseStoryConcept','depend','admin-index'),('custom-browseStoryConcept','depend','admin-register'),('custom-code','depend','admin-index'),('custom-code','depend','admin-register'),('custom-deleteStoryConcept','depend','admin-index'),('custom-deleteStoryConcept','depend','admin-register'),('custom-deleteStoryConcept','depend','custom-browseStoryConcept'),('custom-editStoryConcept','depend','admin-index'),('custom-editStoryConcept','depend','admin-register'),('custom-editStoryConcept','depend','custom-browseStoryConcept'),('custom-execution','depend','admin-index'),('custom-execution','depend','admin-register'),('custom-flow','depend','admin-index'),('custom-flow','depend','admin-register'),('custom-hours','depend','admin-index'),('custom-hours','depend','admin-register'),('custom-kanban','depend','admin-index'),('custom-kanban','depend','admin-register'),('custom-limitTaskDate','depend','admin-index'),('custom-limitTaskDate','depend','admin-register'),('custom-limitTaskDate','depend','custom-execution'),('custom-percent','depend','admin-index'),('custom-percent','depend','admin-register'),('custom-product','depend','admin-index'),('custom-product','depend','admin-register'),('custom-required','depend','admin-index'),('custom-required','depend','admin-register'),('custom-restore','depend','admin-index'),('custom-restore','depend','admin-register'),('custom-set','depend','admin-index'),('custom-set','depend','admin-register'),('custom-setDefaultConcept','depend','admin-index'),('custom-setDefaultConcept','depend','admin-register'),('custom-setDefaultConcept','depend','custom-browseStoryConcept'),('custom-setStoryConcept','depend','admin-index'),('custom-setStoryConcept','depend','admin-register'),('custom-setStoryConcept','depend','custom-browseStoryConcept'),('custom-timezone','depend','admin-index'),('dataview-create','depend','dataview-browse'),('dataview-create','recommend','dataview-edit'),('dataview-create','recommend','dataview-query'),('dataview-delete','depend','dataview-browse'),('dataview-edit','depend','dataview-browse'),('dataview-edit','recommend','dataview-create'),('dataview-edit','recommend','dataview-query'),('dataview-export','depend','dataview-browse'),('dataview-export','depend','dataview-query'),('dataview-query','depend','dataview-browse'),('dataview-query','recommend','dataview-create'),('dataview-query','recommend','dataview-edit'),('demand-activate','depend','demand-browse'),('demand-activate','depend','demand-view'),('demand-activate','recommend','demand-assignTo'),('demand-activate','recommend','demand-batchCreate'),('demand-activate','recommend','demand-close'),('demand-activate','recommend','demand-create'),('demand-activate','recommend','demand-edit'),('demand-assignTo','depend','demand-browse'),('demand-assignTo','recommend','demand-activate'),('demand-assignTo','recommend','demand-close'),('demand-assignTo','recommend','demand-create'),('demand-assignTo','recommend','demand-edit'),('demand-batchCreate','depend','demand-browse'),('demand-batchCreate','depend','demand-view'),('demand-batchCreate','recommend','demand-create'),('demand-browse','recommend','demand-view'),('demand-change','depend','demand-browse'),('demand-change','depend','demand-view'),('demand-change','recommend','demand-activate'),('demand-change','recommend','demand-assignTo'),('demand-change','recommend','demand-batchCreate'),('demand-change','recommend','demand-close'),('demand-change','recommend','demand-create'),('demand-change','recommend','demand-edit'),('demand-close','depend','demand-browse'),('demand-close','depend','demand-view'),('demand-close','recommend','demand-activate'),('demand-close','recommend','demand-assignTo'),('demand-close','recommend','demand-batchCreate'),('demand-close','recommend','demand-create'),('demand-close','recommend','demand-edit'),('demand-create','depend','demand-browse'),('demand-create','depend','demand-view'),('demand-create','recommend','demand-assignTo'),('demand-create','recommend','demand-batchCreate'),('demand-create','recommend','demand-change'),('demand-create','recommend','demand-edit'),('demand-create','recommend','demand-recall'),('demand-create','recommend','demand-submitReview'),('demand-delete','depend','demand-browse'),('demand-delete','depend','demand-view'),('demand-distribute','depend','demand-browse'),('demand-distribute','depend','demand-view'),('demand-distribute','recommend','demand-assignTo'),('demand-distribute','recommend','demand-batchCreate'),('demand-distribute','recommend','demand-create'),('demand-distribute','recommend','demand-edit'),('demand-edit','depend','demand-browse'),('demand-edit','recommend','demand-assignTo'),('demand-edit','recommend','demand-batchCreate'),('demand-export','depend','demand-browse'),('demand-export','recommend','demand-exportTemplate'),('demand-export','recommend','demand-import'),('demand-exportTemplate','depend','demand-browse'),('demand-exportTemplate','recommend','demand-export'),('demand-import','depend','demand-browse'),('demand-import','depend','demand-exportTemplate'),('demand-import','recommend','demand-batchCreate'),('demand-import','recommend','demand-create'),('demand-import','recommend','demand-export'),('demand-manageTree','depend','demand-browse'),('demand-recall','depend','demand-browse'),('demand-recall','depend','demand-view'),('demand-recall','recommend','demand-activate'),('demand-recall','recommend','demand-assignTo'),('demand-recall','recommend','demand-batchCreate'),('demand-recall','recommend','demand-change'),('demand-recall','recommend','demand-close'),('demand-recall','recommend','demand-create'),('demand-recall','recommend','demand-edit'),('demand-review','depend','demand-browse'),('demand-review','depend','demand-view'),('demand-review','recommend','demand-activate'),('demand-review','recommend','demand-assignTo'),('demand-review','recommend','demand-batchCreate'),('demand-review','recommend','demand-change'),('demand-review','recommend','demand-close'),('demand-review','recommend','demand-create'),('demand-review','recommend','demand-edit'),('demand-submitReview','depend','demand-browse'),('demand-submitReview','depend','demand-view'),('demand-submitReview','recommend','demand-activate'),('demand-submitReview','recommend','demand-assignTo'),('demand-submitReview','recommend','demand-batchCreate'),('demand-submitReview','recommend','demand-change'),('demand-submitReview','recommend','demand-close'),('demand-submitReview','recommend','demand-create'),('demand-submitReview','recommend','demand-edit'),('demand-track','recommend','demand-browse'),('demand-track','recommend','demand-view'),('demand-view','depend','demand-browse'),('demand-view','recommend','demand-assignTo'),('demand-view','recommend','demand-change'),('demand-view','recommend','demand-create'),('demand-view','recommend','demand-edit'),('demand-view','recommend','demand-recall'),('demand-view','recommend','demand-review'),('demand-view','recommend','demand-submitReview'),('demandpool-activate','depend','demandpool-browse'),('demandpool-activate','depend','demandpool-view'),('demandpool-activate','recommend','demandpool-close'),('demandpool-activate','recommend','demandpool-create'),('demandpool-activate','recommend','demandpool-edit'),('demandpool-browse','recommend','demandpool-edit'),('demandpool-browse','recommend','demandpool-view'),('demandpool-close','depend','demandpool-browse'),('demandpool-close','depend','demandpool-view'),('demandpool-close','recommend','demandpool-activate'),('demandpool-close','recommend','demandpool-create'),('demandpool-close','recommend','demandpool-edit'),('demandpool-create','depend','demandpool-browse'),('demandpool-create','recommend','demandpool-close'),('demandpool-create','recommend','demandpool-edit'),('demandpool-create','recommend','demandpool-view'),('demandpool-delete','depend','demandpool-browse'),('demandpool-delete','depend','demandpool-view'),('demandpool-delete','recommend','demandpool-create'),('demandpool-delete','recommend','demandpool-edit'),('demandpool-edit','depend','demandpool-browse'),('demandpool-edit','depend','demandpool-view'),('demandpool-edit','recommend','demandpool-close'),('demandpool-edit','recommend','demandpool-create'),('demandpool-view','depend','demandpool-browse'),('demandpool-view','recommend','demandpool-activate'),('demandpool-view','recommend','demandpool-close'),('demandpool-view','recommend','demandpool-delete'),('demandpool-view','recommend','demandpool-edit'),('deploy-activate','depend','deploy-browse'),('deploy-activate','depend','ops-index'),('deploy-activate','recommend','deploy-create'),('deploy-activate','recommend','deploy-edit'),('deploy-activate','recommend','deploy-finish'),('deploy-assignTo','depend','deploy-browse'),('deploy-assignTo','depend','deploy-steps'),('deploy-assignTo','depend','ops-index'),('deploy-assignTo','recommend','deploy-editStep'),('deploy-assignTo','recommend','deploy-finishStep'),('deploy-assignTo','recommend','deploy-manageStep'),('deploy-assignTo','recommend','testtask-deployCaseResults'),('deploy-assignTo','recommend','testtask-runDeployCase'),('deploy-batchUnlinkCases','depend','deploy-browse'),('deploy-batchUnlinkCases','depend','deploy-cases'),('deploy-batchUnlinkCases','depend','ops-index'),('deploy-batchUnlinkCases','recommend','deploy-unlinkCase'),('deploy-browse','depend','ops-index'),('deploy-browse','recommend','deploy-activate'),('deploy-browse','recommend','deploy-create'),('deploy-browse','recommend','deploy-edit'),('deploy-browse','recommend','deploy-finish'),('deploy-browse','recommend','deploy-view'),('deploy-cases','depend','deploy-browse'),('deploy-cases','depend','ops-index'),('deploy-cases','recommend','deploy-linkCases'),('deploy-cases','recommend','deploy-unlinkCase'),('deploy-create','depend','deploy-browse'),('deploy-create','depend','ops-index'),('deploy-create','recommend','deploy-activate'),('deploy-create','recommend','deploy-edit'),('deploy-create','recommend','deploy-finish'),('deploy-delete','depend','deploy-browse'),('deploy-delete','depend','ops-index'),('deploy-delete','recommend','deploy-create'),('deploy-delete','recommend','deploy-edit'),('deploy-deleteStep','depend','deploy-browse'),('deploy-deleteStep','depend','deploy-steps'),('deploy-deleteStep','depend','ops-index'),('deploy-deleteStep','recommend','deploy-assignTo'),('deploy-deleteStep','recommend','deploy-editStep'),('deploy-deleteStep','recommend','deploy-finishStep'),('deploy-deleteStep','recommend','deploy-manageStep'),('deploy-deleteStep','recommend','testtask-deployCaseResults'),('deploy-deleteStep','recommend','testtask-runDeployCase'),('deploy-edit','depend','deploy-browse'),('deploy-edit','depend','ops-index'),('deploy-edit','recommend','deploy-activate'),('deploy-edit','recommend','deploy-create'),('deploy-edit','recommend','deploy-finish'),('deploy-editStep','depend','deploy-browse'),('deploy-editStep','depend','deploy-steps'),('deploy-editStep','depend','ops-index'),('deploy-editStep','recommend','deploy-assignTo'),('deploy-editStep','recommend','deploy-finishStep'),('deploy-editStep','recommend','deploy-manageStep'),('deploy-editStep','recommend','testtask-deployCaseResults'),('deploy-editStep','recommend','testtask-runDeployCase'),('deploy-finish','depend','deploy-browse'),('deploy-finish','depend','ops-index'),('deploy-finish','recommend','deploy-activate'),('deploy-finish','recommend','deploy-create'),('deploy-finish','recommend','deploy-edit'),('deploy-finishStep','depend','deploy-browse'),('deploy-finishStep','depend','deploy-steps'),('deploy-finishStep','depend','ops-index'),('deploy-finishStep','recommend','deploy-assignTo'),('deploy-finishStep','recommend','deploy-editStep'),('deploy-finishStep','recommend','deploy-manageStep'),('deploy-finishStep','recommend','testtask-deployCaseResults'),('deploy-finishStep','recommend','testtask-runDeployCase'),('deploy-linkCases','depend','deploy-browse'),('deploy-linkCases','depend','deploy-cases'),('deploy-linkCases','depend','ops-index'),('deploy-linkCases','recommend','deploy-unlinkCase'),('deploy-manageScope','depend','deploy-browse'),('deploy-manageScope','depend','deploy-scope'),('deploy-manageScope','depend','ops-index'),('deploy-manageStep','depend','deploy-browse'),('deploy-manageStep','depend','deploy-steps'),('deploy-manageStep','depend','ops-index'),('deploy-manageStep','recommend','deploy-assignTo'),('deploy-manageStep','recommend','deploy-editStep'),('deploy-manageStep','recommend','deploy-finishStep'),('deploy-manageStep','recommend','testtask-deployCaseResults'),('deploy-manageStep','recommend','testtask-runDeployCase'),('deploy-scope','depend','deploy-browse'),('deploy-scope','depend','ops-index'),('deploy-scope','recommend','deploy-manageScope'),('deploy-steps','depend','deploy-browse'),('deploy-steps','depend','ops-index'),('deploy-steps','recommend','deploy-assignTo'),('deploy-steps','recommend','deploy-editStep'),('deploy-steps','recommend','deploy-finishStep'),('deploy-steps','recommend','deploy-manageStep'),('deploy-steps','recommend','deploy-viewStep'),('deploy-steps','recommend','testtask-deployCaseResults'),('deploy-steps','recommend','testtask-runDeployCase'),('deploy-unlinkCase','depend','deploy-browse'),('deploy-unlinkCase','depend','deploy-cases'),('deploy-unlinkCase','depend','ops-index'),('deploy-unlinkCase','recommend','deploy-batchUnlinkCases'),('deploy-unlinkCase','recommend','deploy-linkCases'),('deploy-view','depend','deploy-browse'),('deploy-view','depend','ops-index'),('deploy-view','recommend','deploy-activate'),('deploy-view','recommend','deploy-create'),('deploy-view','recommend','deploy-edit'),('deploy-view','recommend','deploy-finish'),('deploy-viewStep','depend','deploy-browse'),('deploy-viewStep','depend','deploy-steps'),('deploy-viewStep','depend','ops-index'),('deploy-viewStep','recommend','deploy-assignTo'),('deploy-viewStep','recommend','deploy-editStep'),('deploy-viewStep','recommend','deploy-finishStep'),('deploy-viewStep','recommend','deploy-manageStep'),('deploy-viewStep','recommend','testtask-deployCaseResults'),('deploy-viewStep','recommend','testtask-runDeployCase'),('dept-browse','depend','admin-index'),('dept-browse','depend','admin-register'),('dept-browse','depend','dept-edit'),('dept-browse','recommend','dept-delete'),('dept-browse','recommend','dept-manageChild'),('dept-browse','recommend','dept-updateOrder'),('dept-delete','depend','admin-index'),('dept-delete','depend','admin-register'),('dept-delete','depend','dept-browse'),('dept-delete','recommend','dept-edit'),('dept-delete','recommend','dept-manageChild'),('dept-delete','recommend','tree-updateOrder'),('dept-edit','depend','admin-index'),('dept-edit','depend','admin-register'),('dept-edit','depend','dept-browse'),('dept-edit','recommend','dept-delete'),('dept-edit','recommend','dept-manageChild'),('dept-edit','recommend','tree-updateOrder'),('dept-manageChild','depend','admin-index'),('dept-manageChild','depend','admin-register'),('dept-manageChild','depend','dept-browse'),('dept-manageChild','recommend','dept-delete'),('dept-manageChild','recommend','dept-edit'),('dept-manageChild','recommend','tree-updateOrder'),('dept-updateOrder','depend','admin-index'),('dept-updateOrder','depend','admin-register'),('dept-updateOrder','depend','dept-browse'),('dept-updateOrder','recommend','dept-delete'),('dept-updateOrder','recommend','dept-edit'),('dept-updateOrder','recommend','dept-manageChild'),('dept-updateOrder','recommend','tree-updateOrder'),('design-assignTo','depend','design-browse'),('design-assignTo','recommend','design-create'),('design-assignTo','recommend','design-edit'),('design-assignTo','recommend','design-linkCommit'),('design-assignTo','recommend','design-revision'),('design-assignTo','recommend','design-submit'),('design-assignTo','recommend','design-unlinkCommit'),('design-batchCreate','depend','design-browse'),('design-batchCreate','recommend','design-create'),('design-browse','depend','project-index'),('design-browse','recommend','design-view'),('design-create','depend','design-browse'),('design-create','recommend','design-assignTo'),('design-create','recommend','design-batchCreate'),('design-create','recommend','design-edit'),('design-create','recommend','design-linkCommit'),('design-create','recommend','design-submit'),('design-create','recommend','design-unlinkCommit'),('design-delete','depend','design-browse'),('design-delete','recommend','design-assignTo'),('design-delete','recommend','design-create'),('design-delete','recommend','design-edit'),('design-delete','recommend','design-linkCommit'),('design-delete','recommend','design-submit'),('design-delete','recommend','design-unlinkCommit'),('design-edit','depend','design-browse'),('design-edit','recommend','design-assignTo'),('design-edit','recommend','design-create'),('design-edit','recommend','design-linkCommit'),('design-edit','recommend','design-revision'),('design-edit','recommend','design-submit'),('design-edit','recommend','design-unlinkCommit'),('design-linkCommit','depend','design-browse'),('design-linkCommit','recommend','design-assignTo'),('design-linkCommit','recommend','design-create'),('design-linkCommit','recommend','design-edit'),('design-linkCommit','recommend','design-revision'),('design-linkCommit','recommend','design-submit'),('design-linkCommit','recommend','design-unlinkCommit'),('design-linkCommit','recommend','design-viewCommit'),('design-revision','depend','design-viewCommit'),('design-revision','recommend','design-linkCommit'),('design-revision','recommend','design-unlinkCommit'),('design-revision','recommend','design-viewCommit'),('design-submit','depend','design-browse'),('design-unlinkCommit','depend','design-browse'),('design-unlinkCommit','recommend','design-assignTo'),('design-unlinkCommit','recommend','design-create'),('design-unlinkCommit','recommend','design-edit'),('design-unlinkCommit','recommend','design-linkCommit'),('design-unlinkCommit','recommend','design-revision'),('design-unlinkCommit','recommend','design-submit'),('design-unlinkCommit','recommend','design-viewCommit'),('design-view','depend','design-browse'),('design-viewCommit','depend','design-browse'),('design-viewCommit','recommend','design-linkCommit'),('design-viewCommit','recommend','design-revision'),('dimension-create','depend','dimension-browse'),('dimension-create','recommend','dimension-delete'),('dimension-create','recommend','dimension-edit'),('dimension-delete','depend','dimension-browse'),('dimension-delete','recommend','dimension-create'),('dimension-delete','recommend','dimension-edit'),('dimension-edit','depend','dimension-browse'),('dimension-edit','recommend','dimension-create'),('dimension-edit','recommend','dimension-delete'),('doc-addCatalog','recommend','doc-editCatalog'),('doc-addCatalog','recommend','doc-sortCatalog'),('doc-collect','recommend','doc-create'),('doc-collect','recommend','doc-edit'),('doc-create','recommend','doc-collect'),('doc-create','recommend','doc-edit'),('doc-createLib','recommend','doc-editLib'),('doc-createLib','recommend','doc-showFiles'),('doc-custom2export','depend','doc-teamSpace'),('doc-diff','depend','doc-view'),('doc-displaySetting','depend','doc-view'),('doc-edit','recommend','doc-collect'),('doc-edit','recommend','doc-create'),('doc-editCatalog','recommend','doc-addCatalog'),('doc-editCatalog','recommend','doc-sortCatalog'),('doc-editLib','recommend','doc-createLib'),('doc-editLib','recommend','doc-showFiles'),('doc-index','recommend','doc-mySpace'),('doc-index','recommend','doc-productSpace'),('doc-index','recommend','doc-projectSpace'),('doc-index','recommend','doc-teamSpace'),('doc-index','recommend','doc-view'),('doc-mine2export','depend','doc-mySpace'),('doc-myCollection','depend','doc-mySpace'),('doc-myCollection','recommend','doc-myCreation'),('doc-myCollection','recommend','doc-myEdited'),('doc-myCollection','recommend','doc-myView'),('doc-myCreation','depend','doc-mySpace'),('doc-myCreation','recommend','doc-myCollection'),('doc-myCreation','recommend','doc-myEdited'),('doc-myCreation','recommend','doc-myView'),('doc-myEdited','depend','doc-mySpace'),('doc-myEdited','recommend','doc-myCollection'),('doc-myEdited','recommend','doc-myCreation'),('doc-myEdited','recommend','doc-myView'),('doc-mySpace','recommend','doc-index'),('doc-mySpace','recommend','doc-productSpace'),('doc-mySpace','recommend','doc-projectSpace'),('doc-mySpace','recommend','doc-teamSpace'),('doc-mySpace','recommend','doc-view'),('doc-myView','depend','doc-mySpace'),('doc-myView','recommend','doc-myCollection'),('doc-myView','recommend','doc-myCreation'),('doc-myView','recommend','doc-myEdited'),('doc-product2export','depend','doc-productSpace'),('doc-productSpace','recommend','doc-index'),('doc-productSpace','recommend','doc-mySpace'),('doc-productSpace','recommend','doc-projectSpace'),('doc-productSpace','recommend','doc-teamSpace'),('doc-productSpace','recommend','doc-view'),('doc-project2export','depend','doc-projectSpace'),('doc-projectSpace','recommend','doc-index'),('doc-projectSpace','recommend','doc-mySpace'),('doc-projectSpace','recommend','doc-productSpace'),('doc-projectSpace','recommend','doc-teamSpace'),('doc-projectSpace','recommend','doc-view'),('doc-showFiles','recommend','doc-createLib'),('doc-showFiles','recommend','doc-editLib'),('doc-sortCatalog','recommend','doc-addCatalog'),('doc-sortCatalog','recommend','doc-editCatalog'),('doc-teamSpace','recommend','doc-index'),('doc-teamSpace','recommend','doc-mySpace'),('doc-teamSpace','recommend','doc-productSpace'),('doc-teamSpace','recommend','doc-projectSpace'),('doc-teamSpace','recommend','doc-view'),('doc-view','recommend','doc-diff'),('doc-view','recommend','doc-displaySetting'),('doc-view','recommend','doc-index'),('doc-view','recommend','doc-myCollection'),('doc-view','recommend','doc-myCreation'),('doc-view','recommend','doc-myEdited'),('doc-view','recommend','doc-mySpace'),('doc-view','recommend','doc-myView'),('doc-view','recommend','doc-productSpace'),('doc-view','recommend','doc-projectSpace'),('doc-view','recommend','doc-teamSpace'),('domain-browse','depend','ops-index'),('domain-browse','recommend','domain-create'),('domain-browse','recommend','domain-edit'),('domain-browse','recommend','domain-view'),('domain-create','depend','domain-browse'),('domain-create','depend','ops-index'),('domain-create','recommend','domain-edit'),('domain-delete','depend','domain-browse'),('domain-delete','depend','ops-index'),('domain-delete','recommend','domain-create'),('domain-delete','recommend','domain-edit'),('domain-edit','depend','domain-browse'),('domain-edit','depend','ops-index'),('domain-edit','recommend','domain-create'),('domain-view','depend','domain-browse'),('domain-view','depend','ops-index'),('domain-view','recommend','domain-create'),('domain-view','recommend','domain-edit'),('durationestimation-create','depend','durationestimation-index'),('durationestimation-create','depend','workestimation-index'),('durationestimation-index','depend','budget-browse'),('durationestimation-index','depend','project-index'),('durationestimation-index','depend','workestimation-index'),('durationestimation-index','recommend','budget-edit'),('durationestimation-index','recommend','durationestimation-create'),('effort-batchCreate','depend','effort-calendar'),('effort-batchCreate','recommend','effort-delete'),('effort-batchCreate','recommend','effort-edit'),('effort-batchCreate','recommend','effort-view'),('effort-batchEdit','depend','my-effort'),('effort-batchEdit','recommend','effort-edit'),('effort-createForObject','recommend','effort-delete'),('effort-createForObject','recommend','effort-edit'),('effort-delete','recommend','effort-batchCreate'),('effort-delete','recommend','effort-batchEdit'),('effort-delete','recommend','effort-createForObject'),('effort-delete','recommend','effort-edit'),('effort-delete','recommend','effort-export'),('effort-delete','recommend','effort-view'),('effort-edit','recommend','effort-batchCreate'),('effort-edit','recommend','effort-batchEdit'),('effort-edit','recommend','effort-createForObject'),('effort-edit','recommend','effort-delete'),('effort-edit','recommend','effort-export'),('effort-edit','recommend','effort-view'),('effort-export','depend','effort-calendar'),('effort-export','depend','my-effort'),('effort-export','recommend','effort-view'),('effort-view','depend','effort-calendar'),('effort-view','recommend','effort-delete'),('effort-view','recommend','effort-edit'),('effort-view','recommend','my-effort'),('execution-activate','depend','execution-all'),('execution-activate','recommend','execution-close'),('execution-activate','recommend','execution-create'),('execution-activate','recommend','execution-edit'),('execution-activate','recommend','execution-putoff'),('execution-activate','recommend','execution-start'),('execution-activate','recommend','execution-suspend'),('execution-addWhitelist','depend','execution-whitelist'),('execution-addWhitelist','recommend','execution-unbindWhitelist'),('execution-all','recommend','execution-create'),('execution-all','recommend','execution-doc'),('execution-all','recommend','execution-dynamic'),('execution-all','recommend','execution-edit'),('execution-all','recommend','execution-updateOrder'),('execution-all','recommend','execution-view'),('execution-batchchangestatus','depend','execution-all'),('execution-batchchangestatus','recommend','execution-edit'),('execution-batchedit','depend','execution-all'),('execution-batchedit','recommend','execution-edit'),('execution-batchUnlinkStory','depend','execution-story'),('execution-batchUnlinkStory','recommend','execution-unlinkStory'),('execution-bug','recommend','execution-testcase'),('execution-bug','recommend','execution-testreport'),('execution-bug','recommend','execution-testtask'),('execution-build','recommend','build-create'),('execution-build','recommend','build-edit'),('execution-build','recommend','build-linkBug'),('execution-build','recommend','build-linkStory'),('execution-build','recommend','build-unlinkBug'),('execution-build','recommend','build-unlinkStory'),('execution-build','recommend','build-view'),('execution-burn','recommend','execution-computeBurn'),('execution-burn','recommend','execution-fixFirst'),('execution-calendar','recommend','execution-gantt'),('execution-calendar','recommend','execution-grouptask'),('execution-calendar','recommend','execution-taskEffort'),('execution-calendar','recommend','execution-tree'),('execution-cfd','recommend','execution-computeCFD'),('execution-close','depend','execution-all'),('execution-close','recommend','execution-activate'),('execution-close','recommend','execution-create'),('execution-close','recommend','execution-edit'),('execution-close','recommend','execution-putoff'),('execution-close','recommend','execution-start'),('execution-close','recommend','execution-suspend'),('execution-computeBurn','depend','execution-burn'),('execution-computeBurn','recommend','execution-fixFirst'),('execution-computeCFD','depend','execution-cfd'),('execution-computeTaskEffort','depend','execution-taskEffort'),('execution-create','depend','execution-all'),('execution-create','recommend','execution-activate'),('execution-create','recommend','execution-close'),('execution-create','recommend','execution-edit'),('execution-create','recommend','execution-manageProducts'),('execution-create','recommend','execution-putoff'),('execution-create','recommend','execution-start'),('execution-create','recommend','execution-suspend'),('execution-delete','depend','execution-all'),('execution-delete','recommend','execution-create'),('execution-delete','recommend','execution-edit'),('execution-deleterelation','depend','execution-gantt'),('execution-deleterelation','depend','execution-relation'),('execution-doc','recommend','execution-all'),('execution-doc','recommend','execution-dynamic'),('execution-doc','recommend','execution-view'),('execution-dynamic','recommend','execution-all'),('execution-dynamic','recommend','execution-doc'),('execution-dynamic','recommend','execution-view'),('execution-edit','depend','execution-all'),('execution-edit','recommend','execution-activate'),('execution-edit','recommend','execution-batchedit'),('execution-edit','recommend','execution-close'),('execution-edit','recommend','execution-create'),('execution-edit','recommend','execution-manageProducts'),('execution-edit','recommend','execution-putoff'),('execution-edit','recommend','execution-start'),('execution-edit','recommend','execution-suspend'),('execution-executionkanban','recommend','execution-setKanban'),('execution-export','depend','execution-all'),('execution-fixFirst','depend','execution-burn'),('execution-fixFirst','recommend','execution-computeBurn'),('execution-gantt','recommend','execution-calendar'),('execution-gantt','recommend','execution-ganttEdit'),('execution-gantt','recommend','execution-ganttsetting'),('execution-gantt','recommend','execution-grouptask'),('execution-gantt','recommend','execution-taskEffort'),('execution-gantt','recommend','execution-tree'),('execution-ganttEdit','depend','execution-gantt'),('execution-ganttsetting','depend','execution-gantt'),('execution-grouptask','recommend','execution-calendar'),('execution-grouptask','recommend','execution-gantt'),('execution-grouptask','recommend','execution-taskEffort'),('execution-grouptask','recommend','execution-tree'),('execution-importBug','depend','execution-task'),('execution-importBug','recommend','task-create'),('execution-importBug','recommend','task-edit'),('execution-importplanstories','depend','execution-task'),('execution-importplanstories','recommend','task-create'),('execution-importplanstories','recommend','task-edit'),('execution-importtask','depend','execution-task'),('execution-importtask','recommend','task-create'),('execution-importtask','recommend','task-edit'),('execution-kanban','depend','execution-executionkanban'),('execution-kanban','recommend','execution-executionkanban'),('execution-kanban','recommend','execution-setKanban'),('execution-linkStory','depend','execution-story'),('execution-linkStory','recommend','execution-storyEstimate'),('execution-linkStory','recommend','execution-storyKanban'),('execution-linkStory','recommend','execution-storySort'),('execution-linkStory','recommend','execution-storyView'),('execution-linkStory','recommend','execution-unlinkStory'),('execution-maintainrelation','depend','execution-gantt'),('execution-maintainrelation','depend','execution-relation'),('execution-manageMembers','depend','execution-team'),('execution-manageMembers','recommend','execution-unlinkMember'),('execution-manageProducts','depend','execution-all'),('execution-manageProducts','recommend','execution-create'),('execution-manageProducts','recommend','execution-edit'),('execution-printKanban','depend','execution-executionkanban'),('execution-putoff','depend','execution-all'),('execution-putoff','recommend','execution-activate'),('execution-putoff','recommend','execution-close'),('execution-putoff','recommend','execution-create'),('execution-putoff','recommend','execution-edit'),('execution-putoff','recommend','execution-start'),('execution-putoff','recommend','execution-suspend'),('execution-relation','depend','execution-gantt'),('execution-relation','recommend','execution-deleterelation'),('execution-relation','recommend','execution-maintainrelation'),('execution-setKanban','depend','execution-executionkanban'),('execution-start','depend','execution-all'),('execution-start','recommend','execution-activate'),('execution-start','recommend','execution-close'),('execution-start','recommend','execution-create'),('execution-start','recommend','execution-edit'),('execution-start','recommend','execution-putoff'),('execution-start','recommend','execution-suspend'),('execution-story','recommend','execution-linkStory'),('execution-story','recommend','execution-storyEstimate'),('execution-story','recommend','execution-storyKanban'),('execution-story','recommend','execution-storySort'),('execution-story','recommend','execution-storyView'),('execution-story','recommend','execution-unlinkStory'),('execution-storyEstimate','depend','execution-story'),('execution-storyEstimate','recommend','execution-linkStory'),('execution-storyEstimate','recommend','execution-storyKanban'),('execution-storyEstimate','recommend','execution-storySort'),('execution-storyEstimate','recommend','execution-storyView'),('execution-storyEstimate','recommend','execution-unlinkStory'),('execution-storyKanban','depend','execution-story'),('execution-storyKanban','recommend','execution-linkStory'),('execution-storyKanban','recommend','execution-storyEstimate'),('execution-storyKanban','recommend','execution-storySort'),('execution-storyKanban','recommend','execution-storyView'),('execution-storyKanban','recommend','execution-unlinkStory'),('execution-storySort','depend','execution-story'),('execution-storySort','recommend','execution-linkStory'),('execution-storySort','recommend','execution-storyEstimate'),('execution-storySort','recommend','execution-storyKanban'),('execution-storySort','recommend','execution-storyView'),('execution-storySort','recommend','execution-unlinkStory'),('execution-storyView','depend','execution-story'),('execution-storyView','recommend','execution-linkStory'),('execution-storyView','recommend','execution-storyEstimate'),('execution-storyView','recommend','execution-storyKanban'),('execution-storyView','recommend','execution-storySort'),('execution-storyView','recommend','execution-unlinkStory'),('execution-suspend','depend','execution-all'),('execution-suspend','recommend','execution-activate'),('execution-suspend','recommend','execution-close'),('execution-suspend','recommend','execution-create'),('execution-suspend','recommend','execution-edit'),('execution-suspend','recommend','execution-putoff'),('execution-suspend','recommend','execution-start'),('execution-task','recommend','task-create'),('execution-task','recommend','task-report'),('execution-task','recommend','task-view'),('execution-taskEffort','recommend','execution-calendar'),('execution-taskEffort','recommend','execution-computeTaskEffort'),('execution-taskEffort','recommend','execution-gantt'),('execution-taskEffort','recommend','execution-grouptask'),('execution-taskEffort','recommend','execution-tree'),('execution-taskKanban','depend','execution-executionkanban'),('execution-taskKanban','recommend','execution-executionkanban'),('execution-taskKanban','recommend','execution-setKanban'),('execution-team','recommend','execution-manageMembers'),('execution-team','recommend','execution-unlinkMember'),('execution-testcase','recommend','execution-testreport'),('execution-testcase','recommend','execution-testtask'),('execution-testreport','recommend','execution-testcase'),('execution-testreport','recommend','execution-testtask'),('execution-testtask','recommend','execution-testcase'),('execution-testtask','recommend','execution-testreport'),('execution-tree','recommend','execution-calendar'),('execution-tree','recommend','execution-gantt'),('execution-tree','recommend','execution-grouptask'),('execution-tree','recommend','execution-taskEffort'),('execution-tree','recommend','execution-treeStory'),('execution-tree','recommend','execution-treeTask'),('execution-treeStory','depend','execution-tree'),('execution-treeStory','recommend','execution-treeTask'),('execution-treeTask','depend','execution-tree'),('execution-treeTask','recommend','execution-treeStory'),('execution-unbindWhitelist','depend','execution-whitelist'),('execution-unbindWhitelist','recommend','execution-addWhitelist'),('execution-unlinkMember','depend','execution-team'),('execution-unlinkMember','recommend','execution-manageMembers'),('execution-unlinkStory','depend','execution-story'),('execution-unlinkStory','recommend','execution-linkStory'),('execution-unlinkStory','recommend','execution-storyEstimate'),('execution-unlinkStory','recommend','execution-storyKanban'),('execution-unlinkStory','recommend','execution-storySort'),('execution-unlinkStory','recommend','execution-storyView'),('execution-updateOrder','depend','execution-all'),('execution-updateOrder','recommend','execution-all'),('execution-updateOrder','recommend','execution-doc'),('execution-updateOrder','recommend','execution-dynamic'),('execution-updateOrder','recommend','execution-view'),('execution-view','recommend','execution-all'),('execution-view','recommend','execution-doc'),('execution-view','recommend','execution-dynamic'),('execution-whitelist','recommend','execution-addWhitelist'),('execution-whitelist','recommend','execution-unbindWhitelist'),('extension-activate','depend','extension-browse'),('extension-activate','recommend','extension-deactivate'),('extension-activate','recommend','extension-erase'),('extension-activate','recommend','extension-install'),('extension-activate','recommend','extension-obtain'),('extension-activate','recommend','extension-structure'),('extension-activate','recommend','extension-uninstall'),('extension-activate','recommend','extension-upgrade'),('extension-activate','recommend','extension-upload'),('extension-deactivate','depend','extension-browse'),('extension-deactivate','recommend','extension-activate'),('extension-deactivate','recommend','extension-erase'),('extension-deactivate','recommend','extension-install'),('extension-deactivate','recommend','extension-obtain'),('extension-deactivate','recommend','extension-structure'),('extension-deactivate','recommend','extension-uninstall'),('extension-deactivate','recommend','extension-upgrade'),('extension-deactivate','recommend','extension-upload'),('extension-erase','depend','extension-browse'),('extension-erase','recommend','extension-activate'),('extension-erase','recommend','extension-deactivate'),('extension-erase','recommend','extension-install'),('extension-erase','recommend','extension-obtain'),('extension-erase','recommend','extension-structure'),('extension-erase','recommend','extension-uninstall'),('extension-erase','recommend','extension-upgrade'),('extension-erase','recommend','extension-upload'),('extension-install','depend','extension-browse'),('extension-install','recommend','extension-activate'),('extension-install','recommend','extension-deactivate'),('extension-install','recommend','extension-erase'),('extension-install','recommend','extension-obtain'),('extension-install','recommend','extension-structure'),('extension-install','recommend','extension-uninstall'),('extension-install','recommend','extension-upgrade'),('extension-install','recommend','extension-upload'),('extension-obtain','depend','extension-browse'),('extension-obtain','recommend','extension-activate'),('extension-obtain','recommend','extension-deactivate'),('extension-obtain','recommend','extension-erase'),('extension-obtain','recommend','extension-install'),('extension-obtain','recommend','extension-structure'),('extension-obtain','recommend','extension-uninstall'),('extension-obtain','recommend','extension-upgrade'),('extension-obtain','recommend','extension-upload'),('extension-structure','depend','extension-browse'),('extension-structure','recommend','extension-activate'),('extension-structure','recommend','extension-deactivate'),('extension-structure','recommend','extension-erase'),('extension-structure','recommend','extension-install'),('extension-structure','recommend','extension-obtain'),('extension-structure','recommend','extension-uninstall'),('extension-structure','recommend','extension-upgrade'),('extension-structure','recommend','extension-upload'),('extension-uninstall','depend','extension-browse'),('extension-uninstall','recommend','extension-activate'),('extension-uninstall','recommend','extension-deactivate'),('extension-uninstall','recommend','extension-erase'),('extension-uninstall','recommend','extension-install'),('extension-uninstall','recommend','extension-obtain'),('extension-uninstall','recommend','extension-structure'),('extension-uninstall','recommend','extension-upgrade'),('extension-uninstall','recommend','extension-upload'),('extension-upgrade','depend','extension-browse'),('extension-upgrade','recommend','extension-activate'),('extension-upgrade','recommend','extension-deactivate'),('extension-upgrade','recommend','extension-erase'),('extension-upgrade','recommend','extension-install'),('extension-upgrade','recommend','extension-obtain'),('extension-upgrade','recommend','extension-structure'),('extension-upgrade','recommend','extension-uninstall'),('extension-upgrade','recommend','extension-upload'),('extension-upload','depend','extension-browse'),('extension-upload','recommend','extension-activate'),('extension-upload','recommend','extension-deactivate'),('extension-upload','recommend','extension-erase'),('extension-upload','recommend','extension-install'),('extension-upload','recommend','extension-obtain'),('extension-upload','recommend','extension-structure'),('extension-upload','recommend','extension-uninstall'),('extension-upload','recommend','extension-upgrade'),('faq-browse','recommend','faq-create'),('faq-browse','recommend','faq-edit'),('faq-create','depend','faq-browse'),('faq-create','recommend','faq-edit'),('faq-delete','depend','faq-browse'),('faq-delete','recommend','faq-create'),('faq-delete','recommend','faq-edit'),('faq-edit','depend','faq-browse'),('faq-edit','recommend','faq-create'),('feedback-activate','depend','feedback-admin'),('feedback-activate','recommend','feedback-ask'),('feedback-activate','recommend','feedback-assignTo'),('feedback-activate','recommend','feedback-close'),('feedback-activate','recommend','feedback-comment'),('feedback-activate','recommend','feedback-create'),('feedback-activate','recommend','feedback-edit'),('feedback-admin','recommend','feedback-adminView'),('feedback-adminView','depend','feedback-admin'),('feedback-adminView','recommend','feedback-create'),('feedback-adminView','recommend','feedback-edit'),('feedback-ask','depend','feedback-admin'),('feedback-ask','recommend','feedback-activate'),('feedback-ask','recommend','feedback-assignTo'),('feedback-ask','recommend','feedback-close'),('feedback-ask','recommend','feedback-comment'),('feedback-ask','recommend','feedback-create'),('feedback-ask','recommend','feedback-edit'),('feedback-assignTo','depend','feedback-admin'),('feedback-assignTo','recommend','feedback-activate'),('feedback-assignTo','recommend','feedback-ask'),('feedback-assignTo','recommend','feedback-batchAssignTo'),('feedback-assignTo','recommend','feedback-close'),('feedback-assignTo','recommend','feedback-comment'),('feedback-assignTo','recommend','feedback-create'),('feedback-assignTo','recommend','feedback-edit'),('feedback-batchAssignTo','depend','feedback-admin'),('feedback-batchAssignTo','recommend','feedback-assignTo'),('feedback-batchClose','depend','feedback-admin'),('feedback-batchClose','recommend','feedback-close'),('feedback-batchEdit','depend','feedback-admin'),('feedback-batchEdit','recommend','feedback-edit'),('feedback-batchReview','depend','feedback-admin'),('feedback-batchReview','recommend','feedback-review'),('feedback-close','depend','feedback-admin'),('feedback-close','recommend','feedback-activate'),('feedback-close','recommend','feedback-ask'),('feedback-close','recommend','feedback-assignTo'),('feedback-close','recommend','feedback-batchClose'),('feedback-close','recommend','feedback-comment'),('feedback-close','recommend','feedback-create'),('feedback-close','recommend','feedback-edit'),('feedback-comment','depend','feedback-admin'),('feedback-comment','recommend','feedback-activate'),('feedback-comment','recommend','feedback-ask'),('feedback-comment','recommend','feedback-assignTo'),('feedback-comment','recommend','feedback-close'),('feedback-comment','recommend','feedback-create'),('feedback-comment','recommend','feedback-edit'),('feedback-create','depend','feedback-admin'),('feedback-create','recommend','feedback-activate'),('feedback-create','recommend','feedback-ask'),('feedback-create','recommend','feedback-assignTo'),('feedback-create','recommend','feedback-close'),('feedback-create','recommend','feedback-comment'),('feedback-create','recommend','feedback-edit'),('feedback-delete','depend','feedback-admin'),('feedback-delete','recommend','feedback-create'),('feedback-delete','recommend','feedback-edit'),('feedback-edit','depend','feedback-admin'),('feedback-edit','recommend','feedback-activate'),('feedback-edit','recommend','feedback-ask'),('feedback-edit','recommend','feedback-assignTo'),('feedback-edit','recommend','feedback-batchEdit'),('feedback-edit','recommend','feedback-close'),('feedback-edit','recommend','feedback-comment'),('feedback-edit','recommend','feedback-create'),('feedback-editOthers','depend','feedback-admin'),('feedback-editOthers','recommend','feedback-edit'),('feedback-export','depend','feedback-admin'),('feedback-exportTemplate','depend','feedback-admin'),('feedback-exportTemplate','depend','feedback-import'),('feedback-import','depend','feedback-admin'),('feedback-import','depend','feedback-exportTemplate'),('feedback-manageProduct','depend','feedback-products'),('feedback-manageProduct','recommend','feedback-productSetting'),('feedback-products','recommend','feedback-manageProduct'),('feedback-products','recommend','feedback-productSetting'),('feedback-productSetting','depend','feedback-products'),('feedback-productSetting','recommend','feedback-manageProduct'),('feedback-reply','depend','feedback-admin'),('feedback-reply','recommend','feedback-review'),('feedback-reply','recommend','feedback-toBug'),('feedback-reply','recommend','feedback-toStory'),('feedback-reply','recommend','feedback-toTask'),('feedback-reply','recommend','feedback-toTicket'),('feedback-reply','recommend','feedback-toTodo'),('feedback-reply','recommend','feedback-toUserStory'),('feedback-review','depend','feedback-admin'),('feedback-review','recommend','feedback-batchReview'),('feedback-review','recommend','feedback-reply'),('feedback-review','recommend','feedback-toBug'),('feedback-review','recommend','feedback-toStory'),('feedback-review','recommend','feedback-toTask'),('feedback-review','recommend','feedback-toTicket'),('feedback-review','recommend','feedback-toTodo'),('feedback-review','recommend','feedback-toUserStory'),('feedback-syncProduct','depend','feedback-admin'),('feedback-toBug','depend','feedback-admin'),('feedback-toBug','recommend','feedback-reply'),('feedback-toBug','recommend','feedback-review'),('feedback-toBug','recommend','feedback-toStory'),('feedback-toBug','recommend','feedback-toTask'),('feedback-toBug','recommend','feedback-toTicket'),('feedback-toBug','recommend','feedback-toTodo'),('feedback-toBug','recommend','feedback-toUserStory'),('feedback-toStory','depend','feedback-admin'),('feedback-toStory','recommend','feedback-reply'),('feedback-toStory','recommend','feedback-review'),('feedback-toStory','recommend','feedback-toBug'),('feedback-toStory','recommend','feedback-toTask'),('feedback-toStory','recommend','feedback-toTicket'),('feedback-toStory','recommend','feedback-toTodo'),('feedback-toStory','recommend','feedback-toUserStory'),('feedback-toTask','depend','feedback-admin'),('feedback-toTask','recommend','feedback-reply'),('feedback-toTask','recommend','feedback-review'),('feedback-toTask','recommend','feedback-toBug'),('feedback-toTask','recommend','feedback-toStory'),('feedback-toTask','recommend','feedback-toTicket'),('feedback-toTask','recommend','feedback-toTodo'),('feedback-toTask','recommend','feedback-toUserStory'),('feedback-toTicket','depend','feedback-admin'),('feedback-toTicket','recommend','feedback-reply'),('feedback-toTicket','recommend','feedback-review'),('feedback-toTicket','recommend','feedback-toBug'),('feedback-toTicket','recommend','feedback-toStory'),('feedback-toTicket','recommend','feedback-toTask'),('feedback-toTicket','recommend','feedback-toTodo'),('feedback-toTicket','recommend','feedback-toUserStory'),('feedback-toTodo','depend','feedback-admin'),('feedback-toTodo','recommend','feedback-reply'),('feedback-toTodo','recommend','feedback-review'),('feedback-toTodo','recommend','feedback-toBug'),('feedback-toTodo','recommend','feedback-toStory'),('feedback-toTodo','recommend','feedback-toTask'),('feedback-toTodo','recommend','feedback-toTicket'),('feedback-toTodo','recommend','feedback-toUserStory'),('feedback-toUserStory','depend','feedback-admin'),('feedback-toUserStory','recommend','feedback-reply'),('feedback-toUserStory','recommend','feedback-review'),('feedback-toUserStory','recommend','feedback-toBug'),('feedback-toUserStory','recommend','feedback-toStory'),('feedback-toUserStory','recommend','feedback-toTask'),('feedback-toUserStory','recommend','feedback-toTicket'),('feedback-toUserStory','recommend','feedback-toTodo'),('file-delete','recommend','file-edit'),('gapanalysis-batchCreate','depend','gapanalysis-browse'),('gapanalysis-batchCreate','recommend','gapanalysis-create'),('gapanalysis-batchEdit','depend','gapanalysis-browse'),('gapanalysis-batchEdit','recommend','gapanalysis-batchCreate'),('gapanalysis-batchEdit','recommend','gapanalysis-edit'),('gapanalysis-create','depend','gapanalysis-browse'),('gapanalysis-create','recommend','gapanalysis-batchCreate'),('gapanalysis-create','recommend','gapanalysis-delete'),('gapanalysis-create','recommend','gapanalysis-edit'),('gapanalysis-delete','depend','gapanalysis-view'),('gapanalysis-delete','recommend','gapanalysis-create'),('gapanalysis-edit','depend','gapanalysis-browse'),('gapanalysis-edit','recommend','gapanalysis-batchEdit'),('gapanalysis-edit','recommend','gapanalysis-create'),('gapanalysis-edit','recommend','gapanalysis-delete'),('gapanalysis-view','depend','gapanalysis-browse'),('git-apiSync','recommend','git-cat'),('git-apiSync','recommend','git-diff'),('git-cat','recommend','git-apiSync'),('git-cat','recommend','git-diff'),('git-diff','recommend','git-apiSync'),('git-diff','recommend','git-cat'),('gitea-bindUser','depend','gitlab-browse'),('gitea-bindUser','recommend','gitea-create'),('gitea-bindUser','recommend','gitea-edit'),('gitea-bindUser','recommend','gitea-view'),('gitea-browse','recommend','gitea-create'),('gitea-browse','recommend','gitea-edit'),('gitea-browse','recommend','gitea-view'),('gitea-create','depend','gitea-browse'),('gitea-create','recommend','gitea-edit'),('gitea-create','recommend','gitea-view'),('gitea-delete','depend','gitea-browse'),('gitea-delete','recommend','gitea-create'),('gitea-delete','recommend','gitea-edit'),('gitea-delete','recommend','gitea-view'),('gitea-edit','depend','gitea-browse'),('gitea-edit','recommend','gitea-create'),('gitea-edit','recommend','gitea-view'),('gitea-view','depend','gitea-browse'),('gitea-view','recommend','gitea-create'),('gitea-view','recommend','gitea-edit'),('gitlab-bindUser','depend','gitlab-browse'),('gitlab-bindUser','recommend','gitea-bindUser'),('gitlab-bindUser','recommend','gitlab-createWebhook'),('gitlab-bindUser','recommend','gitlab-importIssue'),('gitlab-browse','recommend','gitlab-create'),('gitlab-browse','recommend','gitlab-edit'),('gitlab-browse','recommend','gitlab-view'),('gitlab-browseBranch','depend','gitlab-browse'),('gitlab-browseBranch','recommend','gitlab-createBranch'),('gitlab-browseBranch','recommend','gitlab-manageBranchPriv'),('gitlab-browseGroup','depend','gitlab-browse'),('gitlab-browseGroup','recommend','gitlab-createGroup'),('gitlab-browseGroup','recommend','gitlab-editGroup'),('gitlab-browseGroup','recommend','gitlab-manageGroupMembers'),('gitlab-browseProject','depend','gitlab-browse'),('gitlab-browseProject','recommend','gitlab-createProject'),('gitlab-browseProject','recommend','gitlab-editProject'),('gitlab-browseTag','depend','gitlab-browse'),('gitlab-browseTag','recommend','gitlab-createTag'),('gitlab-browseTag','recommend','gitlab-manageTagPriv'),('gitlab-browseUser','depend','gitlab-browse'),('gitlab-browseUser','recommend','gitlab-createUser'),('gitlab-browseUser','recommend','gitlab-editUser'),('gitlab-create','depend','gitlab-browse'),('gitlab-create','recommend','gitlab-edit'),('gitlab-create','recommend','gitlab-view'),('gitlab-createBranch','depend','gitlab-browse'),('gitlab-createBranch','depend','gitlab-browseBranch'),('gitlab-createBranch','recommend','gitlab-browseBranch'),('gitlab-createBranch','recommend','gitlab-manageBranchPriv'),('gitlab-createGroup','depend','gitlab-browse'),('gitlab-createGroup','depend','gitlab-browseGroup'),('gitlab-createGroup','recommend','gitlab-editGroup'),('gitlab-createGroup','recommend','gitlab-manageGroupMembers'),('gitlab-createProject','depend','gitlab-browse'),('gitlab-createProject','depend','gitlab-browseProject'),('gitlab-createProject','recommend','gitlab-editProject'),('gitlab-createTag','depend','gitlab-browse'),('gitlab-createTag','depend','gitlab-browseTag'),('gitlab-createTag','recommend','gitlab-manageTagPriv'),('gitlab-createUser','depend','gitlab-browse'),('gitlab-createUser','depend','gitlab-browseUser'),('gitlab-createUser','recommend','gitlab-editUser'),('gitlab-createWebhook','depend','gitlab-browse'),('gitlab-createWebhook','recommend','gitea-bindUser'),('gitlab-createWebhook','recommend','gitlab-bindUser'),('gitlab-createWebhook','recommend','gitlab-importIssue'),('gitlab-delete','depend','gitlab-browse'),('gitlab-delete','recommend','gitlab-create'),('gitlab-delete','recommend','gitlab-edit'),('gitlab-delete','recommend','gitlab-view'),('gitlab-deleteGroup','depend','gitlab-browse'),('gitlab-deleteGroup','depend','gitlab-browseGroup'),('gitlab-deleteGroup','recommend','gitlab-createGroup'),('gitlab-deleteGroup','recommend','gitlab-editGroup'),('gitlab-deleteGroup','recommend','gitlab-manageGroupMembers'),('gitlab-deleteProject','depend','gitlab-browse'),('gitlab-deleteProject','depend','gitlab-browseProject'),('gitlab-deleteProject','recommend','gitlab-createProject'),('gitlab-deleteProject','recommend','gitlab-editProject'),('gitlab-deleteTag','depend','gitlab-browse'),('gitlab-deleteTag','depend','gitlab-browseTag'),('gitlab-deleteTag','recommend','gitlab-createTag'),('gitlab-deleteTag','recommend','gitlab-manageTagPriv'),('gitlab-deleteUser','depend','gitlab-browse'),('gitlab-deleteUser','depend','gitlab-browseUser'),('gitlab-deleteUser','recommend','gitlab-createUser'),('gitlab-deleteUser','recommend','gitlab-editUser'),('gitlab-edit','depend','gitlab-browse'),('gitlab-edit','recommend','gitlab-create'),('gitlab-edit','recommend','gitlab-view'),('gitlab-editGroup','depend','gitlab-browse'),('gitlab-editGroup','depend','gitlab-browseGroup'),('gitlab-editGroup','recommend','gitlab-createGroup'),('gitlab-editGroup','recommend','gitlab-manageGroupMembers'),('gitlab-editProject','depend','gitlab-browse'),('gitlab-editProject','depend','gitlab-browseProject'),('gitlab-editProject','recommend','gitlab-createProject'),('gitlab-editUser','depend','gitlab-browse'),('gitlab-editUser','depend','gitlab-browseUser'),('gitlab-editUser','recommend','gitlab-createUser'),('gitlab-importIssue','depend','gitlab-browse'),('gitlab-importIssue','recommend','gitea-bindUser'),('gitlab-importIssue','recommend','gitlab-bindUser'),('gitlab-importIssue','recommend','gitlab-createWebhook'),('gitlab-manageBranchPriv','depend','gitlab-browse'),('gitlab-manageBranchPriv','depend','gitlab-browseBranch'),('gitlab-manageBranchPriv','recommend','gitlab-browseBranch'),('gitlab-manageBranchPriv','recommend','gitlab-createBranch'),('gitlab-manageGroupMembers','depend','gitlab-browse'),('gitlab-manageGroupMembers','depend','gitlab-browseGroup'),('gitlab-manageGroupMembers','recommend','gitlab-createGroup'),('gitlab-manageGroupMembers','recommend','gitlab-editGroup'),('gitlab-manageProjectMembers','depend','gitlab-browse'),('gitlab-manageProjectMembers','depend','gitlab-browseProject'),('gitlab-manageProjectMembers','recommend','gitlab-createProject'),('gitlab-manageProjectMembers','recommend','gitlab-editProject'),('gitlab-manageTagPriv','depend','gitlab-browse'),('gitlab-manageTagPriv','depend','gitlab-browseTag'),('gitlab-manageTagPriv','recommend','gitlab-createTag'),('gitlab-view','depend','gitlab-browse'),('gitlab-view','recommend','gitlab-create'),('gitlab-view','recommend','gitlab-edit'),('gitlab-webhook','depend','gitlab-browse'),('gogs-bindUser','depend','gogs-browse'),('gogs-bindUser','recommend','gogs-create'),('gogs-bindUser','recommend','gogs-edit'),('gogs-bindUser','recommend','gogs-view'),('gogs-browse','recommend','gogs-bindUser'),('gogs-browse','recommend','gogs-create'),('gogs-browse','recommend','gogs-edit'),('gogs-browse','recommend','gogs-view'),('gogs-create','depend','gogs-browse'),('gogs-create','recommend','gogs-bindUser'),('gogs-create','recommend','gogs-edit'),('gogs-create','recommend','gogs-view'),('gogs-delete','depend','gogs-browse'),('gogs-delete','recommend','gogs-bindUser'),('gogs-delete','recommend','gogs-create'),('gogs-delete','recommend','gogs-edit'),('gogs-delete','recommend','gogs-view'),('gogs-edit','depend','gogs-browse'),('gogs-edit','recommend','gogs-bindUser'),('gogs-edit','recommend','gogs-create'),('gogs-edit','recommend','gogs-view'),('gogs-view','depend','gogs-browse'),('gogs-view','recommend','gogs-bindUser'),('gogs-view','recommend','gogs-create'),('gogs-view','recommend','gogs-edit'),('group-browse','depend','admin-index'),('group-browse','depend','admin-register'),('group-copy','depend','admin-index'),('group-copy','depend','admin-register'),('group-copy','depend','group-browse'),('group-copy','recommend','group-create'),('group-copy','recommend','group-delete'),('group-copy','recommend','group-edit'),('group-copy','recommend','group-manageMember'),('group-copy','recommend','group-manageProjectAdmin'),('group-copy','recommend','group-manageView'),('group-create','depend','admin-index'),('group-create','depend','admin-register'),('group-create','depend','group-browse'),('group-create','recommend','group-copy'),('group-create','recommend','group-delete'),('group-create','recommend','group-edit'),('group-create','recommend','group-manageMember'),('group-create','recommend','group-manageProjectAdmin'),('group-create','recommend','group-manageView'),('group-delete','depend','admin-index'),('group-delete','depend','admin-register'),('group-delete','depend','group-browse'),('group-delete','recommend','group-copy'),('group-delete','recommend','group-create'),('group-delete','recommend','group-edit'),('group-delete','recommend','group-manageMember'),('group-delete','recommend','group-manageProjectAdmin'),('group-delete','recommend','group-manageView'),('group-edit','depend','admin-index'),('group-edit','depend','admin-register'),('group-edit','depend','group-browse'),('group-edit','recommend','group-copy'),('group-edit','recommend','group-create'),('group-edit','recommend','group-delete'),('group-edit','recommend','group-manageMember'),('group-edit','recommend','group-manageProjectAdmin'),('group-edit','recommend','group-manageView'),('group-manageMember','depend','admin-index'),('group-manageMember','depend','admin-register'),('group-manageMember','depend','group-browse'),('group-manageMember','recommend','group-copy'),('group-manageMember','recommend','group-create'),('group-manageMember','recommend','group-delete'),('group-manageMember','recommend','group-edit'),('group-manageMember','recommend','group-manageProjectAdmin'),('group-manageMember','recommend','group-manageView'),('group-managePriv','depend','admin-index'),('group-managePriv','depend','admin-register'),('group-managePriv','depend','group-browse'),('group-manageProjectAdmin','depend','admin-index'),('group-manageProjectAdmin','depend','admin-register'),('group-manageProjectAdmin','depend','group-browse'),('group-manageProjectAdmin','recommend','group-copy'),('group-manageProjectAdmin','recommend','group-create'),('group-manageProjectAdmin','recommend','group-delete'),('group-manageProjectAdmin','recommend','group-edit'),('group-manageProjectAdmin','recommend','group-manageMember'),('group-manageProjectAdmin','recommend','group-manageView'),('group-manageView','depend','admin-index'),('group-manageView','depend','admin-register'),('group-manageView','depend','group-browse'),('group-manageView','recommend','group-copy'),('group-manageView','recommend','group-create'),('group-manageView','recommend','group-delete'),('group-manageView','recommend','group-edit'),('group-manageView','recommend','group-manageMember'),('group-manageView','recommend','group-manageProjectAdmin'),('holiday-create','depend','holiday-browse'),('holiday-create','recommend','holiday-delete'),('holiday-create','recommend','holiday-edit'),('holiday-delete','depend','holiday-browse'),('holiday-delete','recommend','holiday-create'),('holiday-delete','recommend','holiday-edit'),('holiday-edit','depend','holiday-browse'),('holiday-edit','recommend','holiday-create'),('holiday-import','depend','holiday-browse'),('holiday-import','recommend','holiday-create'),('host-browse','depend','ops-index'),('host-browse','recommend','host-create'),('host-browse','recommend','host-edit'),('host-browse','recommend','host-treemap'),('host-browse','recommend','host-view'),('host-changeStatus','depend','host-browse'),('host-changeStatus','depend','ops-index'),('host-changeStatus','recommend','host-create'),('host-changeStatus','recommend','host-edit'),('host-create','depend','host-browse'),('host-create','depend','ops-index'),('host-create','recommend','host-changeStatus'),('host-create','recommend','host-edit'),('host-delete','depend','host-browse'),('host-delete','depend','ops-index'),('host-delete','recommend','host-create'),('host-delete','recommend','host-edit'),('host-edit','depend','host-browse'),('host-edit','depend','ops-index'),('host-edit','recommend','host-changeStatus'),('host-edit','recommend','host-create'),('host-treemap','depend','host-browse'),('host-treemap','depend','ops-index'),('host-view','depend','host-browse'),('host-view','depend','ops-index'),('host-view','recommend','host-create'),('host-view','recommend','host-edit'),('issue-activate','depend','issue-browse'),('issue-activate','depend','issue-view'),('issue-activate','recommend','issue-assignTo'),('issue-activate','recommend','issue-cancel'),('issue-activate','recommend','issue-close'),('issue-activate','recommend','issue-confirm'),('issue-activate','recommend','issue-create'),('issue-activate','recommend','issue-edit'),('issue-activate','recommend','issue-resolve'),('issue-assignTo','depend','issue-browse'),('issue-assignTo','depend','issue-view'),('issue-assignTo','recommend','issue-activate'),('issue-assignTo','recommend','issue-cancel'),('issue-assignTo','recommend','issue-close'),('issue-assignTo','recommend','issue-confirm'),('issue-assignTo','recommend','issue-create'),('issue-assignTo','recommend','issue-edit'),('issue-assignTo','recommend','issue-resolve'),('issue-batchCreate','depend','issue-browse'),('issue-batchCreate','recommend','issue-create'),('issue-batchImportToLib','depend','issue-browse'),('issue-batchImportToLib','recommend','issue-importToLib'),('issue-browse','recommend','issue-view'),('issue-cancel','depend','issue-browse'),('issue-cancel','depend','issue-view'),('issue-cancel','recommend','issue-activate'),('issue-cancel','recommend','issue-assignTo'),('issue-cancel','recommend','issue-close'),('issue-cancel','recommend','issue-confirm'),('issue-cancel','recommend','issue-create'),('issue-cancel','recommend','issue-edit'),('issue-cancel','recommend','issue-resolve'),('issue-close','depend','issue-browse'),('issue-close','depend','issue-view'),('issue-close','recommend','issue-activate'),('issue-close','recommend','issue-assignTo'),('issue-close','recommend','issue-cancel'),('issue-close','recommend','issue-confirm'),('issue-close','recommend','issue-create'),('issue-close','recommend','issue-edit'),('issue-close','recommend','issue-resolve'),('issue-confirm','depend','issue-browse'),('issue-confirm','depend','issue-view'),('issue-confirm','recommend','issue-activate'),('issue-confirm','recommend','issue-assignTo'),('issue-confirm','recommend','issue-cancel'),('issue-confirm','recommend','issue-close'),('issue-confirm','recommend','issue-create'),('issue-confirm','recommend','issue-edit'),('issue-confirm','recommend','issue-resolve'),('issue-create','depend','issue-browse'),('issue-create','depend','issue-view'),('issue-create','recommend','issue-activate'),('issue-create','recommend','issue-assignTo'),('issue-create','recommend','issue-batchCreate'),('issue-create','recommend','issue-cancel'),('issue-create','recommend','issue-close'),('issue-create','recommend','issue-confirm'),('issue-create','recommend','issue-edit'),('issue-create','recommend','issue-resolve'),('issue-delete','depend','issue-browse'),('issue-edit','depend','issue-browse'),('issue-edit','depend','issue-view'),('issue-edit','recommend','issue-activate'),('issue-edit','recommend','issue-assignTo'),('issue-edit','recommend','issue-cancel'),('issue-edit','recommend','issue-close'),('issue-edit','recommend','issue-confirm'),('issue-edit','recommend','issue-create'),('issue-edit','recommend','issue-resolve'),('issue-export','depend','issue-browse'),('issue-importFromLib','depend','issue-browse'),('issue-importFromLib','recommend','assetlib-issue'),('issue-importFromLib','recommend','assetlib-issuelib'),('issue-importToLib','depend','issue-view'),('issue-importToLib','recommend','issue-batchImportToLib'),('issue-resolve','depend','issue-browse'),('issue-resolve','depend','issue-view'),('issue-resolve','recommend','issue-activate'),('issue-resolve','recommend','issue-assignTo'),('issue-resolve','recommend','issue-cancel'),('issue-resolve','recommend','issue-close'),('issue-resolve','recommend','issue-confirm'),('issue-resolve','recommend','issue-create'),('issue-resolve','recommend','issue-edit'),('issue-view','depend','issue-browse'),('jenkins-browse','recommend','jenkins-create'),('jenkins-browse','recommend','jenkins-edit'),('jenkins-create','depend','jenkins-browse'),('jenkins-create','recommend','jenkins-edit'),('jenkins-delete','depend','jenkins-browse'),('jenkins-delete','recommend','jenkins-create'),('jenkins-delete','recommend','jenkins-edit'),('jenkins-edit','depend','jenkins-browse'),('jenkins-edit','recommend','jenkins-create'),('job-browse','recommend','job-create'),('job-browse','recommend','job-edit'),('job-create','depend','job-browse'),('job-create','recommend','job-edit'),('job-delete','depend','job-browse'),('job-delete','recommend','job-create'),('job-delete','recommend','job-edit'),('job-edit','depend','job-browse'),('job-edit','recommend','job-create'),('job-exec','depend','job-browse'),('job-exec','recommend','compile-browse'),('job-exec','recommend','compile-logs'),('job-exec','recommend','job-view'),('job-view','depend','job-browse'),('job-view','recommend','compile-browse'),('job-view','recommend','compile-logs'),('job-view','recommend','job-exec'),('kanban-activate','depend','kanban-view'),('kanban-activate','recommend','kanban-close'),('kanban-activate','recommend','kanban-create'),('kanban-activate','recommend','kanban-edit'),('kanban-activate','recommend','kanban-setting'),('kanban-activateSpace','depend','kanban-space'),('kanban-activateSpace','recommend','kanban-closeSpace'),('kanban-activateSpace','recommend','kanban-createSpace'),('kanban-activateSpace','recommend','kanban-editSpace'),('kanban-archiveCard','depend','kanban-view'),('kanban-archiveCard','recommend','kanban-createCard'),('kanban-archiveCard','recommend','kanban-deleteCard'),('kanban-archiveCard','recommend','kanban-editCard'),('kanban-archiveCard','recommend','kanban-moveCard'),('kanban-archiveCard','recommend','kanban-restoreCard'),('kanban-archiveCard','recommend','kanban-setCardColor'),('kanban-archiveCard','recommend','kanban-sortCard'),('kanban-archiveCard','recommend','kanban-viewArchivedCard'),('kanban-archiveCard','recommend','kanban-viewCard'),('kanban-archiveColumn','depend','kanban-view'),('kanban-archiveColumn','recommend','kanban-createColumn'),('kanban-archiveColumn','recommend','kanban-deleteColumn'),('kanban-archiveColumn','recommend','kanban-restoreColumn'),('kanban-archiveColumn','recommend','kanban-setColumn'),('kanban-archiveColumn','recommend','kanban-setWIP'),('kanban-archiveColumn','recommend','kanban-sortColumn'),('kanban-archiveColumn','recommend','kanban-splitColumn'),('kanban-archiveColumn','recommend','kanban-viewArchivedColumn'),('kanban-assigntoCard','depend','kanban-view'),('kanban-assigntoCard','recommend','kanban-archiveCard'),('kanban-assigntoCard','recommend','kanban-createCard'),('kanban-assigntoCard','recommend','kanban-deleteCard'),('kanban-assigntoCard','recommend','kanban-editCard'),('kanban-assigntoCard','recommend','kanban-moveCard'),('kanban-assigntoCard','recommend','kanban-restoreCard'),('kanban-assigntoCard','recommend','kanban-setCardColor'),('kanban-assigntoCard','recommend','kanban-sortCard'),('kanban-assigntoCard','recommend','kanban-viewArchivedCard'),('kanban-assigntoCard','recommend','kanban-viewCard'),('kanban-batchCreateCard','depend','kanban-view'),('kanban-batchCreateCard','recommend','kanban-createCard'),('kanban-close','depend','kanban-view'),('kanban-close','recommend','kanban-activate'),('kanban-close','recommend','kanban-create'),('kanban-close','recommend','kanban-edit'),('kanban-close','recommend','kanban-setting'),('kanban-closeSpace','depend','kanban-space'),('kanban-closeSpace','recommend','kanban-activateSpace'),('kanban-closeSpace','recommend','kanban-createSpace'),('kanban-closeSpace','recommend','kanban-editSpace'),('kanban-create','depend','kanban-view'),('kanban-create','recommend','kanban-activate'),('kanban-create','recommend','kanban-close'),('kanban-create','recommend','kanban-edit'),('kanban-create','recommend','kanban-setting'),('kanban-createCard','depend','kanban-view'),('kanban-createCard','recommend','kanban-archiveCard'),('kanban-createCard','recommend','kanban-batchCreateCard'),('kanban-createCard','recommend','kanban-deleteCard'),('kanban-createCard','recommend','kanban-editCard'),('kanban-createCard','recommend','kanban-moveCard'),('kanban-createCard','recommend','kanban-restoreCard'),('kanban-createCard','recommend','kanban-setCardColor'),('kanban-createCard','recommend','kanban-sortCard'),('kanban-createCard','recommend','kanban-viewArchivedCard'),('kanban-createCard','recommend','kanban-viewCard'),('kanban-createColumn','depend','kanban-view'),('kanban-createColumn','recommend','kanban-archiveColumn'),('kanban-createColumn','recommend','kanban-deleteColumn'),('kanban-createColumn','recommend','kanban-restoreColumn'),('kanban-createColumn','recommend','kanban-setColumn'),('kanban-createColumn','recommend','kanban-setWIP'),('kanban-createColumn','recommend','kanban-sortColumn'),('kanban-createColumn','recommend','kanban-splitColumn'),('kanban-createColumn','recommend','kanban-viewArchivedColumn'),('kanban-createLane','depend','kanban-view'),('kanban-createLane','recommend','kanban-deleteLane'),('kanban-createLane','recommend','kanban-editLaneColor'),('kanban-createLane','recommend','kanban-editLaneName'),('kanban-createLane','recommend','kanban-sortGroup'),('kanban-createLane','recommend','kanban-sortLane'),('kanban-createRegion','depend','kanban-view'),('kanban-createRegion','recommend','kanban-deleteRegion'),('kanban-createRegion','recommend','kanban-editRegion'),('kanban-createRegion','recommend','kanban-sortRegion'),('kanban-createSpace','depend','kanban-space'),('kanban-createSpace','recommend','kanban-activateSpace'),('kanban-createSpace','recommend','kanban-closeSpace'),('kanban-createSpace','recommend','kanban-editSpace'),('kanban-delete','depend','kanban-view'),('kanban-delete','recommend','kanban-create'),('kanban-delete','recommend','kanban-edit'),('kanban-deleteCard','depend','kanban-view'),('kanban-deleteCard','recommend','kanban-archiveCard'),('kanban-deleteCard','recommend','kanban-createCard'),('kanban-deleteCard','recommend','kanban-editCard'),('kanban-deleteCard','recommend','kanban-moveCard'),('kanban-deleteCard','recommend','kanban-restoreCard'),('kanban-deleteCard','recommend','kanban-setCardColor'),('kanban-deleteCard','recommend','kanban-sortCard'),('kanban-deleteCard','recommend','kanban-viewArchivedCard'),('kanban-deleteCard','recommend','kanban-viewCard'),('kanban-deleteColumn','depend','kanban-view'),('kanban-deleteColumn','recommend','kanban-archiveColumn'),('kanban-deleteColumn','recommend','kanban-createColumn'),('kanban-deleteColumn','recommend','kanban-restoreColumn'),('kanban-deleteColumn','recommend','kanban-setColumn'),('kanban-deleteColumn','recommend','kanban-setWIP'),('kanban-deleteColumn','recommend','kanban-sortColumn'),('kanban-deleteColumn','recommend','kanban-splitColumn'),('kanban-deleteColumn','recommend','kanban-viewArchivedColumn'),('kanban-deleteLane','depend','kanban-view'),('kanban-deleteLane','recommend','kanban-createLane'),('kanban-deleteLane','recommend','kanban-editLaneColor'),('kanban-deleteLane','recommend','kanban-editLaneName'),('kanban-deleteLane','recommend','kanban-sortGroup'),('kanban-deleteLane','recommend','kanban-sortLane'),('kanban-deleteRegion','depend','kanban-view'),('kanban-deleteRegion','recommend','kanban-createRegion'),('kanban-deleteRegion','recommend','kanban-editRegion'),('kanban-deleteRegion','recommend','kanban-sortRegion'),('kanban-deleteSpace','depend','kanban-space'),('kanban-edit','depend','kanban-view'),('kanban-edit','recommend','kanban-activate'),('kanban-edit','recommend','kanban-close'),('kanban-edit','recommend','kanban-create'),('kanban-edit','recommend','kanban-setting'),('kanban-editCard','depend','kanban-view'),('kanban-editCard','recommend','kanban-archiveCard'),('kanban-editCard','recommend','kanban-createCard'),('kanban-editCard','recommend','kanban-deleteCard'),('kanban-editCard','recommend','kanban-moveCard'),('kanban-editCard','recommend','kanban-restoreCard'),('kanban-editCard','recommend','kanban-setCardColor'),('kanban-editCard','recommend','kanban-sortCard'),('kanban-editCard','recommend','kanban-viewArchivedCard'),('kanban-editCard','recommend','kanban-viewCard'),('kanban-editLaneColor','depend','kanban-view'),('kanban-editLaneColor','recommend','kanban-createLane'),('kanban-editLaneColor','recommend','kanban-deleteLane'),('kanban-editLaneColor','recommend','kanban-editLaneName'),('kanban-editLaneColor','recommend','kanban-sortGroup'),('kanban-editLaneColor','recommend','kanban-sortLane'),('kanban-editLaneName','depend','kanban-view'),('kanban-editLaneName','recommend','kanban-createLane'),('kanban-editLaneName','recommend','kanban-deleteLane'),('kanban-editLaneName','recommend','kanban-editLaneColor'),('kanban-editLaneName','recommend','kanban-sortGroup'),('kanban-editLaneName','recommend','kanban-sortLane'),('kanban-editRegion','depend','kanban-view'),('kanban-editRegion','recommend','kanban-createRegion'),('kanban-editRegion','recommend','kanban-deleteRegion'),('kanban-editRegion','recommend','kanban-sortRegion'),('kanban-editSpace','depend','kanban-space'),('kanban-editSpace','recommend','kanban-activateSpace'),('kanban-editSpace','recommend','kanban-closeSpace'),('kanban-editSpace','recommend','kanban-createSpace'),('kanban-moveCard','depend','kanban-view'),('kanban-moveCard','recommend','kanban-archiveCard'),('kanban-moveCard','recommend','kanban-createCard'),('kanban-moveCard','recommend','kanban-deleteCard'),('kanban-moveCard','recommend','kanban-editCard'),('kanban-moveCard','recommend','kanban-restoreCard'),('kanban-moveCard','recommend','kanban-setCardColor'),('kanban-moveCard','recommend','kanban-sortCard'),('kanban-moveCard','recommend','kanban-viewArchivedCard'),('kanban-moveCard','recommend','kanban-viewCard'),('kanban-restoreCard','depend','kanban-view'),('kanban-restoreCard','recommend','kanban-archiveCard'),('kanban-restoreCard','recommend','kanban-createCard'),('kanban-restoreCard','recommend','kanban-deleteCard'),('kanban-restoreCard','recommend','kanban-editCard'),('kanban-restoreCard','recommend','kanban-moveCard'),('kanban-restoreCard','recommend','kanban-setCardColor'),('kanban-restoreCard','recommend','kanban-sortCard'),('kanban-restoreCard','recommend','kanban-viewArchivedCard'),('kanban-restoreCard','recommend','kanban-viewCard'),('kanban-restoreColumn','depend','kanban-view'),('kanban-restoreColumn','recommend','kanban-archiveColumn'),('kanban-restoreColumn','recommend','kanban-createColumn'),('kanban-restoreColumn','recommend','kanban-deleteColumn'),('kanban-restoreColumn','recommend','kanban-setColumn'),('kanban-restoreColumn','recommend','kanban-setWIP'),('kanban-restoreColumn','recommend','kanban-sortColumn'),('kanban-restoreColumn','recommend','kanban-splitColumn'),('kanban-restoreColumn','recommend','kanban-viewArchivedColumn'),('kanban-setCardColor','depend','kanban-view'),('kanban-setCardColor','recommend','kanban-archiveCard'),('kanban-setCardColor','recommend','kanban-createCard'),('kanban-setCardColor','recommend','kanban-deleteCard'),('kanban-setCardColor','recommend','kanban-editCard'),('kanban-setCardColor','recommend','kanban-moveCard'),('kanban-setCardColor','recommend','kanban-restoreCard'),('kanban-setCardColor','recommend','kanban-sortCard'),('kanban-setCardColor','recommend','kanban-viewArchivedCard'),('kanban-setCardColor','recommend','kanban-viewCard'),('kanban-setColumn','depend','kanban-view'),('kanban-setColumn','recommend','kanban-archiveColumn'),('kanban-setColumn','recommend','kanban-createColumn'),('kanban-setColumn','recommend','kanban-deleteColumn'),('kanban-setColumn','recommend','kanban-restoreColumn'),('kanban-setColumn','recommend','kanban-setWIP'),('kanban-setColumn','recommend','kanban-sortColumn'),('kanban-setColumn','recommend','kanban-splitColumn'),('kanban-setColumn','recommend','kanban-viewArchivedColumn'),('kanban-setting','depend','kanban-view'),('kanban-setting','recommend','kanban-activate'),('kanban-setting','recommend','kanban-close'),('kanban-setting','recommend','kanban-create'),('kanban-setting','recommend','kanban-edit'),('kanban-setWIP','depend','kanban-view'),('kanban-setWIP','recommend','kanban-archiveColumn'),('kanban-setWIP','recommend','kanban-createColumn'),('kanban-setWIP','recommend','kanban-deleteColumn'),('kanban-setWIP','recommend','kanban-restoreColumn'),('kanban-setWIP','recommend','kanban-setColumn'),('kanban-setWIP','recommend','kanban-sortColumn'),('kanban-setWIP','recommend','kanban-splitColumn'),('kanban-setWIP','recommend','kanban-viewArchivedColumn'),('kanban-sortCard','depend','kanban-view'),('kanban-sortCard','recommend','kanban-archiveCard'),('kanban-sortCard','recommend','kanban-createCard'),('kanban-sortCard','recommend','kanban-deleteCard'),('kanban-sortCard','recommend','kanban-editCard'),('kanban-sortCard','recommend','kanban-moveCard'),('kanban-sortCard','recommend','kanban-restoreCard'),('kanban-sortCard','recommend','kanban-setCardColor'),('kanban-sortCard','recommend','kanban-viewArchivedCard'),('kanban-sortCard','recommend','kanban-viewCard'),('kanban-sortColumn','depend','kanban-view'),('kanban-sortColumn','recommend','kanban-archiveColumn'),('kanban-sortColumn','recommend','kanban-createColumn'),('kanban-sortColumn','recommend','kanban-deleteColumn'),('kanban-sortColumn','recommend','kanban-restoreColumn'),('kanban-sortColumn','recommend','kanban-setColumn'),('kanban-sortColumn','recommend','kanban-setWIP'),('kanban-sortColumn','recommend','kanban-splitColumn'),('kanban-sortColumn','recommend','kanban-viewArchivedColumn'),('kanban-sortGroup','depend','kanban-view'),('kanban-sortGroup','recommend','kanban-createLane'),('kanban-sortGroup','recommend','kanban-deleteLane'),('kanban-sortGroup','recommend','kanban-editLaneColor'),('kanban-sortGroup','recommend','kanban-editLaneName'),('kanban-sortGroup','recommend','kanban-sortLane'),('kanban-sortLane','depend','kanban-view'),('kanban-sortLane','recommend','kanban-createLane'),('kanban-sortLane','recommend','kanban-deleteLane'),('kanban-sortLane','recommend','kanban-editLaneColor'),('kanban-sortLane','recommend','kanban-editLaneName'),('kanban-sortLane','recommend','kanban-sortGroup'),('kanban-sortRegion','depend','kanban-view'),('kanban-sortRegion','recommend','kanban-createRegion'),('kanban-sortRegion','recommend','kanban-deleteRegion'),('kanban-sortRegion','recommend','kanban-editRegion'),('kanban-space','recommend','kanban-createSpace'),('kanban-splitColumn','depend','kanban-view'),('kanban-splitColumn','recommend','kanban-archiveColumn'),('kanban-splitColumn','recommend','kanban-createColumn'),('kanban-splitColumn','recommend','kanban-deleteColumn'),('kanban-splitColumn','recommend','kanban-restoreColumn'),('kanban-splitColumn','recommend','kanban-setColumn'),('kanban-splitColumn','recommend','kanban-setWIP'),('kanban-splitColumn','recommend','kanban-sortColumn'),('kanban-splitColumn','recommend','kanban-viewArchivedColumn'),('kanban-view','recommend','kanban-activate'),('kanban-view','recommend','kanban-close'),('kanban-view','recommend','kanban-create'),('kanban-view','recommend','kanban-edit'),('kanban-view','recommend','kanban-setting'),('kanban-viewArchivedCard','depend','kanban-view'),('kanban-viewArchivedCard','recommend','kanban-archiveCard'),('kanban-viewArchivedCard','recommend','kanban-createCard'),('kanban-viewArchivedCard','recommend','kanban-deleteCard'),('kanban-viewArchivedCard','recommend','kanban-editCard'),('kanban-viewArchivedCard','recommend','kanban-moveCard'),('kanban-viewArchivedCard','recommend','kanban-restoreCard'),('kanban-viewArchivedCard','recommend','kanban-setCardColor'),('kanban-viewArchivedCard','recommend','kanban-sortCard'),('kanban-viewArchivedCard','recommend','kanban-viewCard'),('kanban-viewArchivedColumn','depend','kanban-view'),('kanban-viewArchivedColumn','recommend','kanban-archiveColumn'),('kanban-viewArchivedColumn','recommend','kanban-createColumn'),('kanban-viewArchivedColumn','recommend','kanban-deleteColumn'),('kanban-viewArchivedColumn','recommend','kanban-restoreColumn'),('kanban-viewArchivedColumn','recommend','kanban-setColumn'),('kanban-viewArchivedColumn','recommend','kanban-setWIP'),('kanban-viewArchivedColumn','recommend','kanban-sortColumn'),('kanban-viewArchivedColumn','recommend','kanban-splitColumn'),('kanban-viewCard','depend','kanban-view'),('kanban-viewCard','recommend','kanban-archiveCard'),('kanban-viewCard','recommend','kanban-createCard'),('kanban-viewCard','recommend','kanban-deleteCard'),('kanban-viewCard','recommend','kanban-editCard'),('kanban-viewCard','recommend','kanban-moveCard'),('kanban-viewCard','recommend','kanban-restoreCard'),('kanban-viewCard','recommend','kanban-setCardColor'),('kanban-viewCard','recommend','kanban-sortCard'),('kanban-viewCard','recommend','kanban-viewArchivedCard'),('leave-back','depend','attend-personal'),('leave-back','depend','leave-personal'),('leave-browseReview','depend','attend-personal'),('leave-browseReview','depend','leave-personal'),('leave-company','depend','attend-personal'),('leave-create','depend','attend-personal'),('leave-create','depend','leave-personal'),('leave-create','recommend','leave-delete'),('leave-create','recommend','leave-edit'),('leave-create','recommend','leave-switchstatus'),('leave-create','recommend','leave-view'),('leave-delete','depend','attend-personal'),('leave-delete','depend','leave-personal'),('leave-delete','recommend','leave-create'),('leave-delete','recommend','leave-edit'),('leave-delete','recommend','leave-switchstatus'),('leave-delete','recommend','leave-view'),('leave-edit','depend','attend-personal'),('leave-edit','depend','leave-personal'),('leave-edit','recommend','leave-create'),('leave-edit','recommend','leave-delete'),('leave-edit','recommend','leave-switchstatus'),('leave-edit','recommend','leave-view'),('leave-export','depend','attend-personal'),('leave-export','depend','leave-personal'),('leave-personal','depend','attend-personal'),('leave-personal','recommend','leave-create'),('leave-personal','recommend','leave-edit'),('leave-personal','recommend','leave-view'),('leave-personalAnnual','depend','attend-personal'),('leave-personalAnnual','depend','leave-personal'),('leave-review','depend','attend-personal'),('leave-review','depend','leave-browseReview'),('leave-review','depend','leave-personal'),('leave-setReviewer','depend','attend-personal'),('leave-setReviewer','depend','leave-personal'),('leave-switchstatus','depend','attend-personal'),('leave-switchstatus','depend','leave-personal'),('leave-switchstatus','recommend','leave-create'),('leave-switchstatus','recommend','leave-delete'),('leave-switchstatus','recommend','leave-edit'),('leave-switchstatus','recommend','leave-view'),('leave-view','depend','attend-personal'),('leave-view','depend','leave-personal'),('lieu-browseReview','depend','attend-personal'),('lieu-browseReview','depend','lieu-personal'),('lieu-company','depend','attend-personal'),('lieu-create','depend','attend-personal'),('lieu-create','depend','lieu-personal'),('lieu-create','recommend','lieu-delete'),('lieu-create','recommend','lieu-edit'),('lieu-create','recommend','lieu-switchstatus'),('lieu-create','recommend','lieu-view'),('lieu-delete','depend','attend-personal'),('lieu-delete','depend','lieu-personal'),('lieu-delete','recommend','lieu-create'),('lieu-delete','recommend','lieu-edit'),('lieu-delete','recommend','lieu-switchstatus'),('lieu-delete','recommend','lieu-view'),('lieu-edit','depend','attend-personal'),('lieu-edit','depend','lieu-personal'),('lieu-edit','recommend','lieu-create'),('lieu-edit','recommend','lieu-delete'),('lieu-edit','recommend','lieu-switchstatus'),('lieu-edit','recommend','lieu-view'),('lieu-personal','depend','attend-personal'),('lieu-personal','recommend','lieu-create'),('lieu-personal','recommend','lieu-edit'),('lieu-personal','recommend','lieu-view'),('lieu-review','depend','attend-personal'),('lieu-review','depend','lieu-browseReview'),('lieu-review','depend','lieu-personal'),('lieu-setReviewer','depend','attend-personal'),('lieu-switchstatus','depend','attend-personal'),('lieu-switchstatus','depend','lieu-personal'),('lieu-switchstatus','recommend','lieu-create'),('lieu-switchstatus','recommend','lieu-delete'),('lieu-switchstatus','recommend','lieu-edit'),('lieu-switchstatus','recommend','lieu-view'),('lieu-view','depend','attend-personal'),('lieu-view','depend','lieu-personal'),('mail-batchDelete','depend','mail-browse'),('mail-batchDelete','recommend','mail-delete'),('mail-browse','depend','mail-edit'),('mail-delete','depend','mail-browse'),('mail-edit','depend','message-index'),('mail-resend','depend','mail-browse'),('mail-reset','depend','mail-edit'),('mail-reset','recommend','mail-save'),('mail-save','depend','mail-edit'),('mail-save','recommend','mail-reset'),('mail-test','depend','mail-edit'),('makeup-browseReview','depend','attend-personal'),('makeup-browseReview','depend','makeup-personal'),('makeup-company','depend','attend-personal'),('makeup-create','depend','attend-personal'),('makeup-create','depend','makeup-personal'),('makeup-create','recommend','makeup-delete'),('makeup-create','recommend','makeup-edit'),('makeup-create','recommend','makeup-switchstatus'),('makeup-create','recommend','makeup-view'),('makeup-delete','depend','attend-personal'),('makeup-delete','depend','makeup-personal'),('makeup-delete','recommend','makeup-create'),('makeup-delete','recommend','makeup-edit'),('makeup-delete','recommend','makeup-switchstatus'),('makeup-delete','recommend','makeup-view'),('makeup-edit','depend','attend-personal'),('makeup-edit','depend','makeup-personal'),('makeup-edit','recommend','makeup-create'),('makeup-edit','recommend','makeup-delete'),('makeup-edit','recommend','makeup-switchstatus'),('makeup-edit','recommend','makeup-view'),('makeup-export','depend','attend-personal'),('makeup-export','depend','makeup-personal'),('makeup-personal','depend','attend-personal'),('makeup-personal','recommend','makeup-create'),('makeup-personal','recommend','makeup-edit'),('makeup-personal','recommend','makeup-view'),('makeup-review','depend','attend-personal'),('makeup-review','depend','makeup-browseReview'),('makeup-review','depend','makeup-personal'),('makeup-setReviewer','depend','attend-personal'),('makeup-setReviewer','depend','makeup-personal'),('makeup-switchstatus','depend','attend-personal'),('makeup-switchstatus','depend','makeup-personal'),('makeup-switchstatus','recommend','makeup-create'),('makeup-switchstatus','recommend','makeup-delete'),('makeup-switchstatus','recommend','makeup-edit'),('makeup-switchstatus','recommend','makeup-view'),('makeup-view','depend','attend-personal'),('makeup-view','depend','makeup-personal'),('measrecord-browse','depend','project-index'),('measurement-batchEdit','depend','measurement-browse'),('measurement-batchEdit','recommend','measurement-editBasic'),('measurement-createBasic','depend','measurement-browse'),('measurement-createBasic','recommend','measurement-delete'),('measurement-createBasic','recommend','measurement-editBasic'),('measurement-createBasic','recommend','measurement-setSQL'),('measurement-createTemplate','depend','measurement-template'),('measurement-createTemplate','recommend','measurement-editTemplate'),('measurement-createTemplate','recommend','measurement-viewTemplate'),('measurement-delete','depend','measurement-browse'),('measurement-delete','recommend','measurement-batchEdit'),('measurement-delete','recommend','measurement-createBasic'),('measurement-delete','recommend','measurement-editBasic'),('measurement-delete','recommend','measurement-setSQL'),('measurement-editBasic','depend','measurement-browse'),('measurement-editBasic','recommend','measurement-batchEdit'),('measurement-editBasic','recommend','measurement-createBasic'),('measurement-editBasic','recommend','measurement-delete'),('measurement-editBasic','recommend','measurement-setSQL'),('measurement-editTemplate','recommend','measurement-createTemplate'),('measurement-editTemplate','recommend','measurement-viewTemplate'),('measurement-saveReport','depend','measurement-viewTemplate'),('measurement-setSQL','depend','measurement-browse'),('measurement-setSQL','recommend','measurement-createBasic'),('measurement-setSQL','recommend','measurement-delete'),('measurement-setSQL','recommend','measurement-editBasic'),('meeting-create','depend','meeting-browse'),('meeting-create','recommend','meeting-delete'),('meeting-create','recommend','meeting-edit'),('meeting-create','recommend','meeting-minutes'),('meeting-create','recommend','meeting-view'),('meeting-delete','depend','meeting-view'),('meeting-delete','recommend','meeting-create'),('meeting-edit','depend','meeting-browse'),('meeting-edit','recommend','meeting-create'),('meeting-edit','recommend','meeting-delete'),('meeting-edit','recommend','meeting-minutes'),('meeting-edit','recommend','meeting-view'),('meeting-minutes','depend','meeting-browse'),('meeting-minutes','recommend','meeting-create'),('meeting-minutes','recommend','meeting-edit'),('meeting-minutes','recommend','meeting-view'),('meeting-view','depend','meeting-browse'),('meeting-view','recommend','meeting-create'),('meeting-view','recommend','meeting-delete'),('meeting-view','recommend','meeting-edit'),('meeting-view','recommend','meeting-minutes'),('meetingroom-batchCreate','depend','meetingroom-browse'),('meetingroom-batchCreate','recommend','meetingroom-create'),('meetingroom-batchEdit','depend','meetingroom-browse'),('meetingroom-batchEdit','recommend','meetingroom-create'),('meetingroom-create','depend','meetingroom-browse'),('meetingroom-create','recommend','meetingroom-batchCreate'),('meetingroom-create','recommend','meetingroom-delete'),('meetingroom-create','recommend','meetingroom-edit'),('meetingroom-create','recommend','meetingroom-view'),('meetingroom-delete','depend','meetingroom-view'),('meetingroom-delete','recommend','meetingroom-create'),('meetingroom-delete','recommend','meetingroom-edit'),('meetingroom-edit','depend','meetingroom-browse'),('meetingroom-edit','recommend','meetingroom-batchEdit'),('meetingroom-edit','recommend','meetingroom-create'),('meetingroom-edit','recommend','meetingroom-delete'),('meetingroom-edit','recommend','meetingroom-view'),('meetingroom-view','depend','meetingroom-browse'),('meetingroom-view','recommend','meetingroom-batchCreate'),('meetingroom-view','recommend','meetingroom-batchEdit'),('meetingroom-view','recommend','meetingroom-create'),('meetingroom-view','recommend','meetingroom-delete'),('meetingroom-view','recommend','meetingroom-edit'),('milestone-index','depend','project-index'),('milestone-index','depend','weekly-index'),('milestone-index','recommend','milestone-saveOtherProblem'),('milestone-saveOtherProblem','depend','milestone-index'),('milestone-saveOtherProblem','depend','weekly-index'),('mr-accept','recommend','mr-browse'),('mr-accept','recommend','mr-create'),('mr-accept','recommend','mr-edit'),('mr-addReview','depend','mr-accept'),('mr-addReview','recommend','repo-addBug'),('mr-approval','depend','mr-accept'),('mr-approval','recommend','mr-close'),('mr-approval','recommend','mr-reopen'),('mr-browse','depend','mr-accept'),('mr-browse','recommend','mr-addReview'),('mr-browse','recommend','mr-approval'),('mr-browse','recommend','mr-close'),('mr-browse','recommend','mr-create'),('mr-browse','recommend','mr-diff'),('mr-browse','recommend','mr-edit'),('mr-browse','recommend','mr-link'),('mr-browse','recommend','mr-linkBug'),('mr-browse','recommend','mr-linkStory'),('mr-browse','recommend','mr-linkTask'),('mr-browse','recommend','mr-reopen'),('mr-browse','recommend','mr-unlink'),('mr-browse','recommend','mr-view'),('mr-close','depend','mr-accept'),('mr-close','recommend','mr-approval'),('mr-close','recommend','mr-reopen'),('mr-create','depend','mr-accept'),('mr-create','recommend','mr-edit'),('mr-delete','depend','mr-accept'),('mr-delete','recommend','mr-create'),('mr-delete','recommend','mr-edit'),('mr-diff','depend','mr-accept'),('mr-diff','recommend','mr-link'),('mr-diff','recommend','mr-view'),('mr-edit','depend','mr-accept'),('mr-edit','recommend','mr-create'),('mr-edit','recommend','mr-linkBug'),('mr-edit','recommend','mr-linkStory'),('mr-edit','recommend','mr-linkTask'),('mr-edit','recommend','mr-unlink'),('mr-link','depend','mr-accept'),('mr-link','recommend','mr-diff'),('mr-link','recommend','mr-view'),('mr-linkBug','depend','mr-accept'),('mr-linkBug','depend','mr-link'),('mr-linkBug','recommend','mr-linkStory'),('mr-linkBug','recommend','mr-linkTask'),('mr-linkBug','recommend','mr-unlink'),('mr-linkStory','depend','mr-accept'),('mr-linkStory','depend','mr-link'),('mr-linkStory','recommend','mr-approval'),('mr-linkStory','recommend','mr-close'),('mr-linkStory','recommend','mr-diff'),('mr-linkStory','recommend','mr-linkBug'),('mr-linkStory','recommend','mr-linkTask'),('mr-linkStory','recommend','mr-reopen'),('mr-linkStory','recommend','mr-unlink'),('mr-linkTask','depend','mr-accept'),('mr-linkTask','depend','mr-link'),('mr-linkTask','recommend','mr-linkBug'),('mr-linkTask','recommend','mr-linkStory'),('mr-linkTask','recommend','mr-unlink'),('mr-reopen','depend','mr-accept'),('mr-reopen','recommend','mr-approval'),('mr-reopen','recommend','mr-close'),('mr-unlink','depend','mr-accept'),('mr-unlink','recommend','mr-link'),('mr-unlink','recommend','mr-linkBug'),('mr-unlink','recommend','mr-linkStory'),('mr-unlink','recommend','mr-linkTask'),('mr-view','depend','mr-accept'),('mr-view','recommend','mr-diff'),('mr-view','recommend','mr-link'),('my-audit','depend','my-index'),('my-calendar','depend','my-index'),('my-calendar','recommend','my-todo'),('my-changePassword','depend','my-index'),('my-changePassword','depend','my-profile'),('my-contribute','depend','my-index'),('my-deleteContacts','recommend','my-manageContacts'),('my-doc','depend','my-index'),('my-dynamic','depend','my-index'),('my-editProfile','depend','my-index'),('my-editProfile','depend','my-profile'),('my-effort','depend','effort-calendar'),('my-execution','depend','my-index'),('my-index','recommend','my-todo'),('my-manageContacts','recommend','my-deleteContacts'),('my-preference','depend','my-index'),('my-profile','depend','my-index'),('my-project','depend','my-index'),('my-score','depend','my-index'),('my-team','recommend','user-bug'),('my-team','recommend','user-dynamic'),('my-team','recommend','user-effort'),('my-team','recommend','user-effortcalendar'),('my-team','recommend','user-execution'),('my-team','recommend','user-issue'),('my-team','recommend','user-profile'),('my-team','recommend','user-risk'),('my-team','recommend','user-story'),('my-team','recommend','user-task'),('my-team','recommend','user-testCase'),('my-team','recommend','user-testTask'),('my-team','recommend','user-todo'),('my-team','recommend','user-todocalendar'),('my-todo','depend','my-calendar'),('my-todo','depend','my-index'),('my-todo','recommend','todo-view'),('my-uploadAvatar','depend','my-index'),('my-uploadAvatar','depend','my-profile'),('my-work','depend','my-index'),('nc-activate','depend','nc-browse'),('nc-activate','recommend','nc-assignTo'),('nc-activate','recommend','nc-close'),('nc-activate','recommend','nc-create'),('nc-activate','recommend','nc-delete'),('nc-activate','recommend','nc-edit'),('nc-activate','recommend','nc-resolve'),('nc-assignTo','depend','nc-browse'),('nc-assignTo','recommend','nc-activate'),('nc-assignTo','recommend','nc-close'),('nc-assignTo','recommend','nc-create'),('nc-assignTo','recommend','nc-delete'),('nc-assignTo','recommend','nc-edit'),('nc-assignTo','recommend','nc-resolve'),('nc-close','depend','nc-browse'),('nc-close','recommend','nc-activate'),('nc-close','recommend','nc-assignTo'),('nc-close','recommend','nc-create'),('nc-close','recommend','nc-delete'),('nc-close','recommend','nc-edit'),('nc-close','recommend','nc-resolve'),('nc-create','depend','nc-browse'),('nc-create','recommend','nc-activate'),('nc-create','recommend','nc-assignTo'),('nc-create','recommend','nc-close'),('nc-create','recommend','nc-delete'),('nc-create','recommend','nc-edit'),('nc-create','recommend','nc-resolve'),('nc-delete','depend','nc-browse'),('nc-delete','recommend','nc-activate'),('nc-delete','recommend','nc-assignTo'),('nc-delete','recommend','nc-close'),('nc-delete','recommend','nc-create'),('nc-delete','recommend','nc-edit'),('nc-delete','recommend','nc-resolve'),('nc-edit','depend','nc-browse'),('nc-edit','recommend','nc-activate'),('nc-edit','recommend','nc-assignTo'),('nc-edit','recommend','nc-close'),('nc-edit','recommend','nc-create'),('nc-edit','recommend','nc-delete'),('nc-edit','recommend','nc-resolve'),('nc-export','depend','nc-browse'),('nc-resolve','depend','nc-browse'),('nc-resolve','recommend','nc-activate'),('nc-resolve','recommend','nc-assignTo'),('nc-resolve','recommend','nc-close'),('nc-resolve','recommend','nc-create'),('nc-resolve','recommend','nc-delete'),('nc-resolve','recommend','nc-edit'),('nc-view','depend','nc-browse'),('opportunity-activate','depend','opportunity-browse'),('opportunity-activate','depend','opportunity-view'),('opportunity-activate','recommend','opportunity-assignTo'),('opportunity-activate','recommend','opportunity-batchActivate'),('opportunity-activate','recommend','opportunity-cancel'),('opportunity-activate','recommend','opportunity-close'),('opportunity-activate','recommend','opportunity-create'),('opportunity-activate','recommend','opportunity-edit'),('opportunity-activate','recommend','opportunity-hangup'),('opportunity-activate','recommend','opportunity-track'),('opportunity-assignTo','depend','opportunity-browse'),('opportunity-assignTo','depend','opportunity-view'),('opportunity-assignTo','recommend','opportunity-activate'),('opportunity-assignTo','recommend','opportunity-batchAssignTo'),('opportunity-assignTo','recommend','opportunity-cancel'),('opportunity-assignTo','recommend','opportunity-close'),('opportunity-assignTo','recommend','opportunity-create'),('opportunity-assignTo','recommend','opportunity-edit'),('opportunity-assignTo','recommend','opportunity-hangup'),('opportunity-assignTo','recommend','opportunity-track'),('opportunity-batchActivate','depend','opportunity-browse'),('opportunity-batchActivate','recommend','opportunity-activate'),('opportunity-batchAssignTo','depend','opportunity-browse'),('opportunity-batchAssignTo','recommend','opportunity-assignTo'),('opportunity-batchCancel','depend','opportunity-browse'),('opportunity-batchCancel','recommend','opportunity-cancel'),('opportunity-batchClose','depend','opportunity-browse'),('opportunity-batchClose','recommend','opportunity-close'),('opportunity-batchCreate','depend','opportunity-browse'),('opportunity-batchCreate','recommend','opportunity-create'),('opportunity-batchEdit','depend','opportunity-browse'),('opportunity-batchEdit','recommend','opportunity-edit'),('opportunity-batchHangup','depend','opportunity-browse'),('opportunity-batchHangup','recommend','opportunity-hangup'),('opportunity-batchImportToLib','depend','opportunity-browse'),('opportunity-batchImportToLib','recommend','opportunity-importToLib'),('opportunity-browse','recommend','opportunity-view'),('opportunity-cancel','depend','opportunity-browse'),('opportunity-cancel','depend','opportunity-view'),('opportunity-cancel','recommend','opportunity-activate'),('opportunity-cancel','recommend','opportunity-assignTo'),('opportunity-cancel','recommend','opportunity-batchCancel'),('opportunity-cancel','recommend','opportunity-close'),('opportunity-cancel','recommend','opportunity-create'),('opportunity-cancel','recommend','opportunity-edit'),('opportunity-cancel','recommend','opportunity-hangup'),('opportunity-cancel','recommend','opportunity-track'),('opportunity-close','depend','opportunity-browse'),('opportunity-close','depend','opportunity-view'),('opportunity-close','recommend','opportunity-activate'),('opportunity-close','recommend','opportunity-assignTo'),('opportunity-close','recommend','opportunity-batchClose'),('opportunity-close','recommend','opportunity-cancel'),('opportunity-close','recommend','opportunity-create'),('opportunity-close','recommend','opportunity-edit'),('opportunity-close','recommend','opportunity-hangup'),('opportunity-close','recommend','opportunity-track'),('opportunity-create','depend','opportunity-browse'),('opportunity-create','depend','opportunity-view'),('opportunity-create','recommend','opportunity-activate'),('opportunity-create','recommend','opportunity-assignTo'),('opportunity-create','recommend','opportunity-batchCreate'),('opportunity-create','recommend','opportunity-cancel'),('opportunity-create','recommend','opportunity-close'),('opportunity-create','recommend','opportunity-edit'),('opportunity-create','recommend','opportunity-hangup'),('opportunity-create','recommend','opportunity-track'),('opportunity-delete','depend','opportunity-browse'),('opportunity-edit','depend','opportunity-browse'),('opportunity-edit','depend','opportunity-view'),('opportunity-edit','recommend','opportunity-activate'),('opportunity-edit','recommend','opportunity-assignTo'),('opportunity-edit','recommend','opportunity-batchEdit'),('opportunity-edit','recommend','opportunity-cancel'),('opportunity-edit','recommend','opportunity-close'),('opportunity-edit','recommend','opportunity-create'),('opportunity-edit','recommend','opportunity-hangup'),('opportunity-edit','recommend','opportunity-track'),('opportunity-export','depend','opportunity-browse'),('opportunity-hangup','depend','opportunity-browse'),('opportunity-hangup','depend','opportunity-view'),('opportunity-hangup','recommend','opportunity-activate'),('opportunity-hangup','recommend','opportunity-assignTo'),('opportunity-hangup','recommend','opportunity-batchHangup'),('opportunity-hangup','recommend','opportunity-cancel'),('opportunity-hangup','recommend','opportunity-close'),('opportunity-hangup','recommend','opportunity-create'),('opportunity-hangup','recommend','opportunity-edit'),('opportunity-hangup','recommend','opportunity-track'),('opportunity-importFromLib','depend','opportunity-browse'),('opportunity-importFromLib','recommend','assetlib-opportunity'),('opportunity-importFromLib','recommend','assetlib-opportunitylib'),('opportunity-importToLib','depend','opportunity-view'),('opportunity-importToLib','recommend','opportunity-batchImportToLib'),('opportunity-track','depend','opportunity-browse'),('opportunity-track','depend','opportunity-view'),('opportunity-track','recommend','opportunity-activate'),('opportunity-track','recommend','opportunity-assignTo'),('opportunity-track','recommend','opportunity-cancel'),('opportunity-track','recommend','opportunity-close'),('opportunity-track','recommend','opportunity-create'),('opportunity-track','recommend','opportunity-edit'),('opportunity-track','recommend','opportunity-hangup'),('ops-setting','depend','ops-index'),('overtime-browseReview','depend','attend-personal'),('overtime-browseReview','depend','overtime-personal'),('overtime-company','depend','attend-personal'),('overtime-create','depend','attend-personal'),('overtime-create','depend','overtime-personal'),('overtime-create','recommend','overtime-delete'),('overtime-create','recommend','overtime-edit'),('overtime-create','recommend','overtime-switchstatus'),('overtime-create','recommend','overtime-view'),('overtime-delete','depend','attend-personal'),('overtime-delete','depend','overtime-personal'),('overtime-delete','recommend','overtime-create'),('overtime-delete','recommend','overtime-edit'),('overtime-delete','recommend','overtime-switchstatus'),('overtime-delete','recommend','overtime-view'),('overtime-edit','depend','attend-personal'),('overtime-edit','depend','overtime-personal'),('overtime-edit','recommend','overtime-create'),('overtime-edit','recommend','overtime-delete'),('overtime-edit','recommend','overtime-switchstatus'),('overtime-edit','recommend','overtime-view'),('overtime-export','depend','attend-personal'),('overtime-personal','depend','attend-personal'),('overtime-personal','recommend','overtime-create'),('overtime-personal','recommend','overtime-edit'),('overtime-personal','recommend','overtime-view'),('overtime-review','depend','attend-personal'),('overtime-review','depend','overtime-browseReview'),('overtime-review','depend','overtime-personal'),('overtime-setReviewer','depend','attend-personal'),('overtime-setReviewer','depend','overtime-personal'),('overtime-switchstatus','depend','attend-personal'),('overtime-switchstatus','depend','overtime-personal'),('overtime-switchstatus','recommend','overtime-create'),('overtime-switchstatus','recommend','overtime-delete'),('overtime-switchstatus','recommend','overtime-edit'),('overtime-switchstatus','recommend','overtime-view'),('overtime-view','depend','attend-personal'),('overtime-view','depend','overtime-personal'),('personnel-accessible','depend','program-browse'),('personnel-addWhitelist','depend','personnel-whitelist'),('personnel-addWhitelist','depend','program-browse'),('personnel-addWhitelist','recommend','program-unbindWhitelist'),('personnel-invest','depend','program-browse'),('personnel-whitelist','depend','program-browse'),('pivot-browse','depend','pivot-preview'),('pivot-bugAssign','depend','pivot-preview'),('pivot-bugAssignSummary','depend','pivot-preview'),('pivot-bugCreate','depend','pivot-preview'),('pivot-bugSummary','depend','pivot-preview'),('pivot-build','depend','pivot-preview'),('pivot-casesrun','depend','pivot-preview'),('pivot-create','depend','pivot-browse'),('pivot-create','recommend','pivot-delete'),('pivot-create','recommend','pivot-design'),('pivot-create','recommend','pivot-edit'),('pivot-delete','depend','pivot-browse'),('pivot-delete','recommend','pivot-create'),('pivot-delete','recommend','pivot-design'),('pivot-delete','recommend','pivot-edit'),('pivot-design','depend','pivot-browse'),('pivot-design','recommend','pivot-create'),('pivot-design','recommend','pivot-delete'),('pivot-design','recommend','pivot-edit'),('pivot-edit','depend','pivot-browse'),('pivot-edit','recommend','pivot-create'),('pivot-edit','recommend','pivot-delete'),('pivot-edit','recommend','pivot-design'),('pivot-export','depend','pivot-preview'),('pivot-productInvest','depend','pivot-preview'),('pivot-productSummary','depend','pivot-preview'),('pivot-projectDeviation','depend','pivot-preview'),('pivot-roadmap','depend','pivot-preview'),('pivot-storyLinkedBug','depend','pivot-preview'),('pivot-testcase','depend','pivot-preview'),('pivot-workAssignSummary','depend','pivot-preview'),('pivot-workload','depend','pivot-preview'),('pivot-workSummary','depend','pivot-preview'),('process-activityList','recommend','process-create'),('process-activityList','recommend','process-edit'),('process-activityList','recommend','process-view'),('process-batchCreate','recommend','process-create'),('process-create','recommend','process-activityList'),('process-create','recommend','process-batchCreate'),('process-create','recommend','process-delete'),('process-create','recommend','process-edit'),('process-create','recommend','process-updateOrder'),('process-create','recommend','process-view'),('process-delete','recommend','process-create'),('process-edit','recommend','process-activityList'),('process-edit','recommend','process-create'),('process-edit','recommend','process-delete'),('process-edit','recommend','process-updateOrder'),('process-edit','recommend','process-view'),('process-updateOrder','recommend','process-create'),('process-updateOrder','recommend','process-edit'),('process-view','recommend','process-activityList'),('product-addWhitelist','depend','product-whitelist'),('product-addWhitelist','recommend','product-create'),('product-all','recommend','product-create'),('product-all','recommend','product-dashboard'),('product-all','recommend','product-dynamic'),('product-all','recommend','product-edit'),('product-all','recommend','product-index'),('product-all','recommend','product-kanban'),('product-all','recommend','product-updateOrder'),('product-all','recommend','product-view'),('product-batchEdit','depend','product-all'),('product-batchEdit','recommend','product-edit'),('product-browse','recommend','story-report'),('product-browse','recommend','story-view'),('product-close','depend','product-view'),('product-close','recommend','product-create'),('product-close','recommend','product-edit'),('product-create','depend','product-all'),('product-create','recommend','product-close'),('product-create','recommend','product-edit'),('product-create','recommend','product-updateOrder'),('product-dashboard','recommend','product-dynamic'),('product-dashboard','recommend','product-roadmap'),('product-delete','depend','product-view'),('product-delete','recommend','product-create'),('product-delete','recommend','product-edit'),('product-dynamic','depend','product-browse'),('product-dynamic','recommend','product-all'),('product-dynamic','recommend','product-kanban'),('product-dynamic','recommend','product-view'),('product-edit','depend','product-all'),('product-edit','depend','product-view'),('product-edit','recommend','product-batchEdit'),('product-edit','recommend','product-close'),('product-edit','recommend','product-create'),('product-edit','recommend','product-updateOrder'),('product-export','depend','product-all'),('product-index','recommend','product-all'),('product-index','recommend','product-dashboard'),('product-index','recommend','product-kanban'),('product-index','recommend','product-view'),('product-kanban','recommend','product-all'),('product-kanban','recommend','product-dashboard'),('product-kanban','recommend','product-dynamic'),('product-kanban','recommend','product-index'),('product-kanban','recommend','product-view'),('product-manageLine','depend','product-all'),('product-manageLine','recommend','product-create'),('product-manageLine','recommend','product-edit'),('product-manageLine','recommend','product-updateOrder'),('product-project','depend','product-browse'),('product-project','recommend','project-create'),('product-requirement','depend','product-browse'),('product-requirement','recommend','requirement-report'),('product-requirement','recommend','requirement-view'),('product-roadmap','depend','product-all'),('product-roadmap','depend','product-browse'),('product-roadmap','depend','product-dashboard'),('product-roadmap','recommend','release-view'),('product-track','depend','product-browse'),('product-track','recommend','product-browse'),('product-track','recommend','product-requirement'),('product-track','recommend','requirement-view'),('product-track','recommend','story-view'),('product-unbindWhitelist','depend','product-whitelist'),('product-unbindWhitelist','recommend','product-addWhitelist'),('product-unbindWhitelist','recommend','product-create'),('product-updateOrder','depend','product-all'),('product-updateOrder','recommend','product-create'),('product-updateOrder','recommend','product-edit'),('product-view','depend','product-all'),('product-view','depend','product-browse'),('product-view','depend','product-dashboard'),('product-view','recommend','branch-manage'),('product-view','recommend','product-all'),('product-view','recommend','product-create'),('product-view','recommend','product-dashboard'),('product-view','recommend','product-dynamic'),('product-view','recommend','product-edit'),('product-view','recommend','product-kanban'),('product-view','recommend','product-whitelist'),('product-whitelist','depend','product-browse'),('product-whitelist','recommend','product-addWhitelist'),('product-whitelist','recommend','product-unbindWhitelist'),('product-whitelist','recommend','product-view'),('productplan-activate','depend','productplan-view'),('productplan-activate','recommend','productplan-close'),('productplan-activate','recommend','productplan-create'),('productplan-activate','recommend','productplan-edit'),('productplan-activate','recommend','productplan-finish'),('productplan-activate','recommend','productplan-linkBug'),('productplan-activate','recommend','productplan-linkStory'),('productplan-activate','recommend','productplan-start'),('productplan-activate','recommend','productplan-unlinkBug'),('productplan-activate','recommend','productplan-unlinkStory'),('productplan-batchChangeStatus','depend','productplan-browse'),('productplan-batchChangeStatus','recommend','productplan-edit'),('productplan-batchEdit','depend','productplan-browse'),('productplan-batchEdit','recommend','productplan-edit'),('productplan-batchUnlinkBug','depend','productplan-view'),('productplan-batchUnlinkBug','recommend','productplan-unlinkBug'),('productplan-batchUnlinkStory','depend','productplan-browse'),('productplan-batchUnlinkStory','recommend','productplan-unlinkStory'),('productplan-browse','depend','product-browse'),('productplan-browse','recommend','productplan-create'),('productplan-browse','recommend','productplan-edit'),('productplan-browse','recommend','productplan-view'),('productplan-close','depend','productplan-view'),('productplan-close','recommend','productplan-activate'),('productplan-close','recommend','productplan-create'),('productplan-close','recommend','productplan-edit'),('productplan-close','recommend','productplan-finish'),('productplan-close','recommend','productplan-linkBug'),('productplan-close','recommend','productplan-linkStory'),('productplan-close','recommend','productplan-start'),('productplan-close','recommend','productplan-unlinkBug'),('productplan-close','recommend','productplan-unlinkStory'),('productplan-create','depend','productplan-browse'),('productplan-create','recommend','productplan-activate'),('productplan-create','recommend','productplan-close'),('productplan-create','recommend','productplan-edit'),('productplan-create','recommend','productplan-finish'),('productplan-create','recommend','productplan-linkBug'),('productplan-create','recommend','productplan-linkStory'),('productplan-create','recommend','productplan-start'),('productplan-delete','depend','productplan-view'),('productplan-delete','recommend','productplan-create'),('productplan-delete','recommend','productplan-edit'),('productplan-edit','depend','productplan-view'),('productplan-edit','recommend','productplan-activate'),('productplan-edit','recommend','productplan-batchEdit'),('productplan-edit','recommend','productplan-close'),('productplan-edit','recommend','productplan-create'),('productplan-edit','recommend','productplan-finish'),('productplan-edit','recommend','productplan-linkBug'),('productplan-edit','recommend','productplan-linkStory'),('productplan-edit','recommend','productplan-start'),('productplan-edit','recommend','productplan-unlinkBug'),('productplan-edit','recommend','productplan-unlinkStory'),('productplan-finish','depend','productplan-view'),('productplan-finish','recommend','productplan-activate'),('productplan-finish','recommend','productplan-close'),('productplan-finish','recommend','productplan-create'),('productplan-finish','recommend','productplan-edit'),('productplan-finish','recommend','productplan-linkBug'),('productplan-finish','recommend','productplan-linkStory'),('productplan-finish','recommend','productplan-start'),('productplan-finish','recommend','productplan-unlinkBug'),('productplan-finish','recommend','productplan-unlinkStory'),('productplan-linkBug','depend','productplan-view'),('productplan-linkBug','recommend','productplan-activate'),('productplan-linkBug','recommend','productplan-close'),('productplan-linkBug','recommend','productplan-create'),('productplan-linkBug','recommend','productplan-edit'),('productplan-linkBug','recommend','productplan-finish'),('productplan-linkBug','recommend','productplan-linkStory'),('productplan-linkBug','recommend','productplan-start'),('productplan-linkBug','recommend','productplan-unlinkBug'),('productplan-linkBug','recommend','productplan-unlinkStory'),('productplan-linkStory','depend','productplan-view'),('productplan-linkStory','recommend','productplan-activate'),('productplan-linkStory','recommend','productplan-close'),('productplan-linkStory','recommend','productplan-create'),('productplan-linkStory','recommend','productplan-edit'),('productplan-linkStory','recommend','productplan-finish'),('productplan-linkStory','recommend','productplan-linkBug'),('productplan-linkStory','recommend','productplan-start'),('productplan-linkStory','recommend','productplan-unlinkBug'),('productplan-linkStory','recommend','productplan-unlinkStory'),('productplan-start','depend','productplan-view'),('productplan-start','recommend','productplan-activate'),('productplan-start','recommend','productplan-close'),('productplan-start','recommend','productplan-create'),('productplan-start','recommend','productplan-edit'),('productplan-start','recommend','productplan-finish'),('productplan-start','recommend','productplan-linkBug'),('productplan-start','recommend','productplan-linkStory'),('productplan-start','recommend','productplan-unlinkBug'),('productplan-start','recommend','productplan-unlinkStory'),('productplan-unlinkBug','depend','productplan-view'),('productplan-unlinkBug','recommend','productplan-activate'),('productplan-unlinkBug','recommend','productplan-batchUnlinkBug'),('productplan-unlinkBug','recommend','productplan-close'),('productplan-unlinkBug','recommend','productplan-create'),('productplan-unlinkBug','recommend','productplan-edit'),('productplan-unlinkBug','recommend','productplan-finish'),('productplan-unlinkBug','recommend','productplan-linkBug'),('productplan-unlinkBug','recommend','productplan-linkStory'),('productplan-unlinkBug','recommend','productplan-start'),('productplan-unlinkBug','recommend','productplan-unlinkStory'),('productplan-unlinkStory','depend','productplan-view'),('productplan-unlinkStory','recommend','productplan-activate'),('productplan-unlinkStory','recommend','productplan-batchUnlinkStory'),('productplan-unlinkStory','recommend','productplan-close'),('productplan-unlinkStory','recommend','productplan-create'),('productplan-unlinkStory','recommend','productplan-edit'),('productplan-unlinkStory','recommend','productplan-finish'),('productplan-unlinkStory','recommend','productplan-linkBug'),('productplan-unlinkStory','recommend','productplan-linkStory'),('productplan-unlinkStory','recommend','productplan-start'),('productplan-unlinkStory','recommend','productplan-unlinkBug'),('productplan-view','depend','productplan-browse'),('productplan-view','recommend','productplan-create'),('productplan-view','recommend','productplan-edit'),('program-activate','depend','program-browse'),('program-activate','depend','program-view'),('program-activate','recommend','program-close'),('program-activate','recommend','program-create'),('program-activate','recommend','program-delete'),('program-activate','recommend','program-edit'),('program-activate','recommend','program-start'),('program-batchUnlinkStakeholders','depend','program-browse'),('program-batchUnlinkStakeholders','depend','program-stakeholder'),('program-batchUnlinkStakeholders','recommend','program-unlinkStakeholder'),('program-close','depend','program-browse'),('program-close','depend','program-view'),('program-close','recommend','program-activate'),('program-close','recommend','program-create'),('program-close','recommend','program-delete'),('program-close','recommend','program-edit'),('program-close','recommend','program-start'),('program-create','depend','program-browse'),('program-create','recommend','program-edit'),('program-create','recommend','program-start'),('program-create','recommend','program-updateOrder'),('program-createStakeholder','depend','program-browse'),('program-createStakeholder','depend','program-stakeholder'),('program-createStakeholder','recommend','program-unlinkStakeholder'),('program-delete','depend','program-browse'),('program-delete','recommend','program-create'),('program-edit','depend','program-browse'),('program-edit','recommend','program-activate'),('program-edit','recommend','program-close'),('program-edit','recommend','program-create'),('program-edit','recommend','program-start'),('program-edit','recommend','program-suspend'),('program-edit','recommend','program-updateOrder'),('program-stakeholder','depend','program-browse'),('program-start','depend','program-browse'),('program-start','depend','program-view'),('program-start','recommend','program-activate'),('program-start','recommend','program-close'),('program-start','recommend','program-create'),('program-start','recommend','program-delete'),('program-start','recommend','program-edit'),('program-suspend','depend','program-browse'),('program-suspend','depend','program-view'),('program-suspend','recommend','program-activate'),('program-suspend','recommend','program-close'),('program-suspend','recommend','program-create'),('program-suspend','recommend','program-delete'),('program-suspend','recommend','program-edit'),('program-suspend','recommend','program-start'),('program-unbindWhitelist','depend','personnel-whitelist'),('program-unbindWhitelist','depend','program-browse'),('program-unbindWhitelist','recommend','personnel-addWhitelist'),('program-unlinkStakeholder','depend','program-browse'),('program-unlinkStakeholder','depend','program-stakeholder'),('program-unlinkStakeholder','recommend','program-createStakeholder'),('program-updateOrder','depend','program-browse'),('program-updateOrder','recommend','program-create'),('program-updateOrder','recommend','program-edit'),('programplan-browse','depend','project-index'),('programplan-browse','recommend','programplan-ganttEdit'),('programplan-create','depend','programplan-browse'),('programplan-create','recommend','programplan-edit'),('programplan-edit','depend','programplan-browse'),('programplan-edit','recommend','programplan-create'),('programplan-ganttEdit','depend','programplan-browse'),('project-activate','depend','project-browse'),('project-activate','recommend','project-batchEdit'),('project-activate','recommend','project-close'),('project-activate','recommend','project-create'),('project-activate','recommend','project-edit'),('project-activate','recommend','project-start'),('project-activate','recommend','project-suspend'),('project-addWhitelist','depend','project-whitelist'),('project-addWhitelist','recommend','project-unbindWhitelist'),('project-batchEdit','depend','project-browse'),('project-batchEdit','recommend','project-edit'),('project-browse','depend','project-index'),('project-browse','recommend','project-create'),('project-browse','recommend','project-dynamic'),('project-browse','recommend','project-edit'),('project-browse','recommend','project-index'),('project-browse','recommend','project-kanban'),('project-browse','recommend','project-updateOrder'),('project-browse','recommend','project-view'),('project-bug','depend','project-index'),('project-bug','recommend','project-testcase'),('project-bug','recommend','project-testreport'),('project-bug','recommend','project-testtask'),('project-close','depend','project-browse'),('project-close','recommend','project-activate'),('project-close','recommend','project-batchEdit'),('project-close','recommend','project-create'),('project-close','recommend','project-edit'),('project-close','recommend','project-start'),('project-close','recommend','project-suspend'),('project-copyGroup','depend','project-group'),('project-copyGroup','recommend','project-createGroup'),('project-copyGroup','recommend','project-editGroup'),('project-copyGroup','recommend','project-manageGroupMember'),('project-copyGroup','recommend','project-managePriv'),('project-create','depend','project-browse'),('project-create','recommend','project-activate'),('project-create','recommend','project-close'),('project-create','recommend','project-edit'),('project-create','recommend','project-group'),('project-create','recommend','project-manageProducts'),('project-create','recommend','project-start'),('project-create','recommend','project-suspend'),('project-create','recommend','project-team'),('project-create','recommend','project-updateOrder'),('project-create','recommend','project-whitelist'),('project-createGroup','depend','project-group'),('project-createGroup','recommend','project-copyGroup'),('project-createGroup','recommend','project-editGroup'),('project-createGroup','recommend','project-manageGroupMember'),('project-createGroup','recommend','project-managePriv'),('project-delete','depend','project-browse'),('project-delete','recommend','project-create'),('project-delete','recommend','project-edit'),('project-dynamic','depend','project-index'),('project-dynamic','recommend','project-browse'),('project-dynamic','recommend','project-view'),('project-edit','depend','project-browse'),('project-edit','recommend','project-activate'),('project-edit','recommend','project-batchEdit'),('project-edit','recommend','project-close'),('project-edit','recommend','project-create'),('project-edit','recommend','project-manageProducts'),('project-edit','recommend','project-start'),('project-edit','recommend','project-suspend'),('project-edit','recommend','project-updateOrder'),('project-editGroup','depend','project-group'),('project-editGroup','recommend','project-copyGroup'),('project-editGroup','recommend','project-createGroup'),('project-editGroup','recommend','project-manageGroupMember'),('project-editGroup','recommend','project-managePriv'),('project-execution','depend','project-index'),('project-execution','recommend','execution-create'),('project-export','depend','project-browse'),('project-group','depend','project-index'),('project-group','recommend','project-create'),('project-group','recommend','project-createGroup'),('project-group','recommend','project-edit'),('project-index','recommend','project-browse'),('project-index','recommend','project-kanban'),('project-kanban','depend','project-index'),('project-kanban','recommend','project-browse'),('project-kanban','recommend','project-dynamic'),('project-kanban','recommend','project-view'),('project-manageGroupMember','depend','project-group'),('project-manageGroupMember','recommend','project-copyGroup'),('project-manageGroupMember','recommend','project-createGroup'),('project-manageGroupMember','recommend','project-editGroup'),('project-manageGroupMember','recommend','project-managePriv'),('project-manageMembers','depend','project-team'),('project-manageMembers','recommend','project-unlinkMember'),('project-managePriv','depend','project-group'),('project-managePriv','recommend','project-copyGroup'),('project-managePriv','recommend','project-createGroup'),('project-managePriv','recommend','project-editGroup'),('project-managePriv','recommend','project-manageGroupMember'),('project-manageProducts','depend','project-browse'),('project-manageProducts','recommend','project-create'),('project-manageProducts','recommend','project-edit'),('project-programTitle','depend','project-browse'),('project-programTitle','recommend','program-browse'),('project-start','depend','project-browse'),('project-start','recommend','project-activate'),('project-start','recommend','project-batchEdit'),('project-start','recommend','project-close'),('project-start','recommend','project-create'),('project-start','recommend','project-edit'),('project-start','recommend','project-suspend'),('project-suspend','depend','project-browse'),('project-suspend','recommend','project-activate'),('project-suspend','recommend','project-batchEdit'),('project-suspend','recommend','project-close'),('project-suspend','recommend','project-create'),('project-suspend','recommend','project-edit'),('project-suspend','recommend','project-start'),('project-team','recommend','project-manageMembers'),('project-team','recommend','project-unlinkMember'),('project-testcase','depend','project-index'),('project-testcase','recommend','project-testreport'),('project-testcase','recommend','project-testtask'),('project-testreport','depend','project-index'),('project-testreport','recommend','project-testtask'),('project-testtask','depend','project-index'),('project-testtask','recommend','project-testcase'),('project-testtask','recommend','project-testreport'),('project-unbindWhitelist','depend','project-whitelist'),('project-unbindWhitelist','recommend','project-addWhitelist'),('project-unlinkMember','depend','project-team'),('project-unlinkMember','recommend','project-manageMembers'),('project-updateOrder','depend','project-browse'),('project-updateOrder','recommend','project-create'),('project-updateOrder','recommend','project-edit'),('project-view','depend','project-index'),('project-view','recommend','project-create'),('project-view','recommend','project-edit'),('project-view','recommend','project-group'),('project-view','recommend','project-manageProducts'),('project-view','recommend','project-team'),('project-view','recommend','stakeholder-browse'),('project-whitelist','depend','project-index'),('project-whitelist','recommend','project-addWhitelist'),('project-whitelist','recommend','project-unbindWhitelist'),('project-whitelist','recommend','project-view'),('projectbuild-batchUnlinkBug','recommend','projectbuild-unlinkBug'),('projectbuild-batchUnlinkStory','recommend','projectbuild-unlinkStory'),('projectbuild-browse','depend','project-index'),('projectbuild-browse','recommend','projectbuild-view'),('projectbuild-create','recommend','projectbuild-batchUnlinkBug'),('projectbuild-create','recommend','projectbuild-batchUnlinkStory'),('projectbuild-create','recommend','projectbuild-delete'),('projectbuild-create','recommend','projectbuild-edit'),('projectbuild-create','recommend','projectbuild-linkBug'),('projectbuild-create','recommend','projectbuild-linkStory'),('projectbuild-create','recommend','projectbuild-unlinkBug'),('projectbuild-create','recommend','projectbuild-unlinkStory'),('projectbuild-delete','recommend','projectbuild-batchUnlinkBug'),('projectbuild-delete','recommend','projectbuild-batchUnlinkStory'),('projectbuild-delete','recommend','projectbuild-create'),('projectbuild-delete','recommend','projectbuild-edit'),('projectbuild-delete','recommend','projectbuild-linkBug'),('projectbuild-delete','recommend','projectbuild-linkStory'),('projectbuild-delete','recommend','projectbuild-unlinkBug'),('projectbuild-delete','recommend','projectbuild-unlinkStory'),('projectbuild-edit','recommend','projectbuild-batchUnlinkBug'),('projectbuild-edit','recommend','projectbuild-batchUnlinkStory'),('projectbuild-edit','recommend','projectbuild-create'),('projectbuild-edit','recommend','projectbuild-delete'),('projectbuild-edit','recommend','projectbuild-linkBug'),('projectbuild-edit','recommend','projectbuild-linkStory'),('projectbuild-edit','recommend','projectbuild-unlinkBug'),('projectbuild-edit','recommend','projectbuild-unlinkStory'),('projectbuild-linkBug','recommend','projectbuild-create'),('projectbuild-linkBug','recommend','projectbuild-delete'),('projectbuild-linkBug','recommend','projectbuild-edit'),('projectbuild-linkBug','recommend','projectbuild-unlinkBug'),('projectbuild-linkStory','recommend','projectbuild-create'),('projectbuild-linkStory','recommend','projectbuild-delete'),('projectbuild-linkStory','recommend','projectbuild-edit'),('projectbuild-linkStory','recommend','projectbuild-linkBug'),('projectbuild-linkStory','recommend','projectbuild-unlinkStory'),('projectbuild-unlinkBug','recommend','projectbuild-batchUnlinkStory'),('projectbuild-unlinkBug','recommend','projectbuild-create'),('projectbuild-unlinkBug','recommend','projectbuild-delete'),('projectbuild-unlinkBug','recommend','projectbuild-edit'),('projectbuild-unlinkBug','recommend','projectbuild-linkStory'),('projectbuild-unlinkStory','recommend','projectbuild-batchUnlinkStory'),('projectbuild-unlinkStory','recommend','projectbuild-create'),('projectbuild-unlinkStory','recommend','projectbuild-delete'),('projectbuild-unlinkStory','recommend','projectbuild-edit'),('projectbuild-unlinkStory','recommend','projectbuild-linkStory'),('projectbuild-view','depend','projectbuild-browse'),('projectplan-browse','depend','project-index'),('projectplan-browse','recommend','projectplan-create'),('projectplan-browse','recommend','projectplan-edit'),('projectplan-create','depend','projectplan-browse'),('projectplan-create','recommend','projectplan-edit'),('projectplan-edit','depend','projectplan-browse'),('projectplan-edit','recommend','projectplan-create'),('projectplan-view','depend','projectplan-browse'),('projectrelease-batchUnlinkBug','depend','projectrelease-browse'),('projectrelease-batchUnlinkBug','recommend','projectrelease-unlinkBug'),('projectrelease-batchUnlinkStory','depend','projectrelease-browse'),('projectrelease-batchUnlinkStory','recommend','projectrelease-unlinkStory'),('projectrelease-browse','depend','project-index'),('projectrelease-browse','recommend','projectrelease-create'),('projectrelease-browse','recommend','projectrelease-edit'),('projectrelease-browse','recommend','projectrelease-view'),('projectrelease-changeStatus','depend','projectrelease-browse'),('projectrelease-changeStatus','recommend','projectrelease-create'),('projectrelease-changeStatus','recommend','projectrelease-delete'),('projectrelease-changeStatus','recommend','projectrelease-edit'),('projectrelease-changeStatus','recommend','projectrelease-linkBug'),('projectrelease-changeStatus','recommend','projectrelease-linkStory'),('projectrelease-changeStatus','recommend','projectrelease-unlinkBug'),('projectrelease-changeStatus','recommend','projectrelease-unlinkStory'),('projectrelease-create','depend','projectrelease-browse'),('projectrelease-create','recommend','projectrelease-changeStatus'),('projectrelease-create','recommend','projectrelease-delete'),('projectrelease-create','recommend','projectrelease-edit'),('projectrelease-create','recommend','projectrelease-linkBug'),('projectrelease-create','recommend','projectrelease-linkStory'),('projectrelease-create','recommend','projectrelease-unlinkBug'),('projectrelease-create','recommend','projectrelease-unlinkStory'),('projectrelease-delete','depend','projectrelease-browse'),('projectrelease-delete','recommend','projectrelease-changeStatus'),('projectrelease-delete','recommend','projectrelease-create'),('projectrelease-delete','recommend','projectrelease-edit'),('projectrelease-delete','recommend','projectrelease-linkBug'),('projectrelease-delete','recommend','projectrelease-linkStory'),('projectrelease-delete','recommend','projectrelease-unlinkBug'),('projectrelease-delete','recommend','projectrelease-unlinkStory'),('projectrelease-edit','depend','projectrelease-browse'),('projectrelease-edit','recommend','projectrelease-changeStatus'),('projectrelease-edit','recommend','projectrelease-create'),('projectrelease-edit','recommend','projectrelease-delete'),('projectrelease-edit','recommend','projectrelease-linkBug'),('projectrelease-edit','recommend','projectrelease-linkStory'),('projectrelease-edit','recommend','projectrelease-unlinkBug'),('projectrelease-edit','recommend','projectrelease-unlinkStory'),('projectrelease-export','depend','projectrelease-browse'),('projectrelease-export','depend','projectrelease-view'),('projectrelease-linkBug','depend','projectrelease-browse'),('projectrelease-linkBug','recommend','projectrelease-changeStatus'),('projectrelease-linkBug','recommend','projectrelease-create'),('projectrelease-linkBug','recommend','projectrelease-delete'),('projectrelease-linkBug','recommend','projectrelease-edit'),('projectrelease-linkBug','recommend','projectrelease-linkStory'),('projectrelease-linkBug','recommend','projectrelease-unlinkBug'),('projectrelease-linkBug','recommend','projectrelease-unlinkStory'),('projectrelease-linkStory','depend','projectrelease-browse'),('projectrelease-linkStory','recommend','projectrelease-changeStatus'),('projectrelease-linkStory','recommend','projectrelease-create'),('projectrelease-linkStory','recommend','projectrelease-delete'),('projectrelease-linkStory','recommend','projectrelease-edit'),('projectrelease-linkStory','recommend','projectrelease-linkBug'),('projectrelease-linkStory','recommend','projectrelease-unlinkBug'),('projectrelease-linkStory','recommend','projectrelease-unlinkStory'),('projectrelease-notify','depend','projectrelease-browse'),('projectrelease-unlinkBug','depend','projectrelease-browse'),('projectrelease-unlinkBug','recommend','projectrelease-batchUnlinkBug'),('projectrelease-unlinkBug','recommend','projectrelease-changeStatus'),('projectrelease-unlinkBug','recommend','projectrelease-create'),('projectrelease-unlinkBug','recommend','projectrelease-delete'),('projectrelease-unlinkBug','recommend','projectrelease-edit'),('projectrelease-unlinkBug','recommend','projectrelease-linkBug'),('projectrelease-unlinkBug','recommend','projectrelease-linkStory'),('projectrelease-unlinkBug','recommend','projectrelease-unlinkStory'),('projectrelease-unlinkStory','depend','projectrelease-browse'),('projectrelease-unlinkStory','recommend','projectrelease-batchUnlinkStory'),('projectrelease-unlinkStory','recommend','projectrelease-changeStatus'),('projectrelease-unlinkStory','recommend','projectrelease-create'),('projectrelease-unlinkStory','recommend','projectrelease-delete'),('projectrelease-unlinkStory','recommend','projectrelease-edit'),('projectrelease-unlinkStory','recommend','projectrelease-linkBug'),('projectrelease-unlinkStory','recommend','projectrelease-linkStory'),('projectrelease-unlinkStory','recommend','projectrelease-unlinkBug'),('projectrelease-view','depend','projectrelease-browse'),('projectrelease-view','recommend','projectrelease-create'),('projectrelease-view','recommend','projectrelease-edit'),('projectstory-batchUnlinkStory','depend','projectstory-story'),('projectstory-batchUnlinkStory','recommend','projectstory-unlinkStory'),('projectstory-importFromLib','depend','projectstory-story'),('projectstory-importFromLib','recommend','assetlib-story'),('projectstory-importFromLib','recommend','assetlib-storylib'),('projectstory-importFromLib','recommend','projectstory-batchUnlinkStory'),('projectstory-importFromLib','recommend','projectstory-importplanstories'),('projectstory-importFromLib','recommend','projectstory-linkStory'),('projectstory-importFromLib','recommend','projectstory-unlinkStory'),('projectstory-importFromLib','recommend','story-batchToTask'),('projectstory-importplanstories','depend','projectstory-story'),('projectstory-importplanstories','recommend','projectstory-importFromLib'),('projectstory-importplanstories','recommend','projectstory-linkStory'),('projectstory-importplanstories','recommend','projectstory-unlinkStory'),('projectstory-importplanstories','recommend','story-batchToTask'),('projectstory-linkStory','depend','projectstory-story'),('projectstory-linkStory','recommend','projectstory-importFromLib'),('projectstory-linkStory','recommend','projectstory-importplanstories'),('projectstory-linkStory','recommend','projectstory-unlinkStory'),('projectstory-linkStory','recommend','story-batchToTask'),('projectstory-story','depend','project-index'),('projectstory-story','recommend','projectstory-view'),('projectstory-track','depend','project-index'),('projectstory-track','recommend','design-revision'),('projectstory-track','recommend','projectstory-story'),('projectstory-track','recommend','projectstory-view'),('projectstory-unlinkStory','depend','projectstory-story'),('projectstory-unlinkStory','recommend','projectstory-batchUnlinkStory'),('projectstory-unlinkStory','recommend','projectstory-importFromLib'),('projectstory-unlinkStory','recommend','projectstory-importplanstories'),('projectstory-unlinkStory','recommend','projectstory-linkStory'),('projectstory-unlinkStory','recommend','story-batchToTask'),('projectstory-view','depend','projectstory-story'),('pssp-browse','depend','project-index'),('pssp-update','depend','pssp-browse'),('release-batchUnlinkBug','depend','release-view'),('release-batchUnlinkBug','recommend','release-unlinkBug'),('release-batchUnlinkStory','depend','release-view'),('release-batchUnlinkStory','recommend','release-unlinkStory'),('release-browse','depend','product-browse'),('release-browse','recommend','release-view'),('release-changeStatus','depend','release-view'),('release-changeStatus','recommend','release-create'),('release-changeStatus','recommend','release-edit'),('release-changeStatus','recommend','release-linkBug'),('release-changeStatus','recommend','release-linkStory'),('release-changeStatus','recommend','release-notify'),('release-changeStatus','recommend','release-unlinkBug'),('release-changeStatus','recommend','release-unlinkStory'),('release-create','depend','release-browse'),('release-create','recommend','release-changeStatus'),('release-create','recommend','release-edit'),('release-create','recommend','release-linkBug'),('release-create','recommend','release-linkStory'),('release-create','recommend','release-notify'),('release-create','recommend','release-unlinkBug'),('release-create','recommend','release-unlinkStory'),('release-delete','depend','release-view'),('release-delete','recommend','release-create'),('release-delete','recommend','release-edit'),('release-edit','depend','release-view'),('release-edit','recommend','release-changeStatus'),('release-edit','recommend','release-create'),('release-edit','recommend','release-linkBug'),('release-edit','recommend','release-linkStory'),('release-edit','recommend','release-notify'),('release-edit','recommend','release-unlinkBug'),('release-edit','recommend','release-unlinkStory'),('release-export','depend','release-view'),('release-linkBug','depend','release-view'),('release-linkBug','recommend','release-changeStatus'),('release-linkBug','recommend','release-create'),('release-linkBug','recommend','release-edit'),('release-linkBug','recommend','release-linkStory'),('release-linkBug','recommend','release-notify'),('release-linkBug','recommend','release-unlinkBug'),('release-linkBug','recommend','release-unlinkStory'),('release-linkStory','depend','release-view'),('release-linkStory','recommend','release-changeStatus'),('release-linkStory','recommend','release-create'),('release-linkStory','recommend','release-edit'),('release-linkStory','recommend','release-linkBug'),('release-linkStory','recommend','release-notify'),('release-linkStory','recommend','release-unlinkBug'),('release-linkStory','recommend','release-unlinkStory'),('release-notify','depend','release-view'),('release-notify','recommend','release-create'),('release-notify','recommend','release-edit'),('release-notify','recommend','release-linkBug'),('release-notify','recommend','release-linkStory'),('release-notify','recommend','release-unlinkBug'),('release-notify','recommend','release-unlinkStory'),('release-unlinkBug','depend','release-view'),('release-unlinkBug','recommend','release-batchUnlinkBug'),('release-unlinkBug','recommend','release-changeStatus'),('release-unlinkBug','recommend','release-create'),('release-unlinkBug','recommend','release-edit'),('release-unlinkBug','recommend','release-linkBug'),('release-unlinkBug','recommend','release-linkStory'),('release-unlinkBug','recommend','release-notify'),('release-unlinkBug','recommend','release-unlinkStory'),('release-unlinkStory','depend','release-view'),('release-unlinkStory','recommend','release-batchUnlinkStory'),('release-unlinkStory','recommend','release-changeStatus'),('release-unlinkStory','recommend','release-create'),('release-unlinkStory','recommend','release-edit'),('release-unlinkStory','recommend','release-linkBug'),('release-unlinkStory','recommend','release-linkStory'),('release-unlinkStory','recommend','release-notify'),('release-unlinkStory','recommend','release-unlinkBug'),('release-view','depend','release-browse'),('release-view','recommend','product-roadmap'),('repo-addBug','depend','repo-diff'),('repo-addBug','recommend','mr-addReview'),('repo-addBug','recommend','repo-addComment'),('repo-addBug','recommend','repo-editBug'),('repo-addBug','recommend','repo-editComment'),('repo-addBug','recommend','repo-review'),('repo-addComment','depend','repo-diff'),('repo-addComment','recommend','repo-addBug'),('repo-addComment','recommend','repo-editBug'),('repo-addComment','recommend','repo-editComment'),('repo-addComment','recommend','repo-review'),('repo-apiGetRepoByUrl','depend','repo-maintain'),('repo-blame','recommend','repo-linkBug'),('repo-blame','recommend','repo-linkStory'),('repo-blame','recommend','repo-linkTask'),('repo-blame','recommend','repo-log'),('repo-blame','recommend','repo-revision'),('repo-blame','recommend','repo-showSyncCommit'),('repo-blame','recommend','repo-unlink'),('repo-blame','recommend','repo-view'),('repo-browse','depend','repo-maintain'),('repo-browse','recommend','repo-create'),('repo-browse','recommend','repo-edit'),('repo-create','depend','repo-maintain'),('repo-create','recommend','repo-edit'),('repo-create','recommend','repo-import'),('repo-delete','depend','repo-maintain'),('repo-delete','recommend','repo-create'),('repo-delete','recommend','repo-edit'),('repo-deleteBug','depend','repo-diff'),('repo-deleteBug','recommend','repo-addBug'),('repo-deleteBug','recommend','repo-addComment'),('repo-deleteBug','recommend','repo-editBug'),('repo-deleteBug','recommend','repo-editComment'),('repo-deleteBug','recommend','repo-review'),('repo-deleteComment','depend','repo-diff'),('repo-deleteComment','recommend','repo-addBug'),('repo-deleteComment','recommend','repo-addComment'),('repo-deleteComment','recommend','repo-editBug'),('repo-deleteComment','recommend','repo-editComment'),('repo-deleteComment','recommend','repo-review'),('repo-diff','recommend','repo-addBug'),('repo-diff','recommend','repo-editBug'),('repo-diff','recommend','repo-review'),('repo-download','recommend','repo-downloadCode'),('repo-downloadCode','recommend','repo-download'),('repo-edit','depend','repo-maintain'),('repo-edit','recommend','repo-create'),('repo-editBug','depend','repo-diff'),('repo-editBug','recommend','repo-addBug'),('repo-editBug','recommend','repo-addComment'),('repo-editBug','recommend','repo-editComment'),('repo-editBug','recommend','repo-review'),('repo-editComment','depend','repo-diff'),('repo-editComment','recommend','repo-addBug'),('repo-editComment','recommend','repo-addComment'),('repo-editComment','recommend','repo-editBug'),('repo-editComment','recommend','repo-review'),('repo-import','depend','repo-maintain'),('repo-import','recommend','repo-create'),('repo-linkBug','recommend','repo-blame'),('repo-linkBug','recommend','repo-linkStory'),('repo-linkBug','recommend','repo-linkTask'),('repo-linkBug','recommend','repo-log'),('repo-linkBug','recommend','repo-revision'),('repo-linkBug','recommend','repo-showSyncCommit'),('repo-linkBug','recommend','repo-unlink'),('repo-linkBug','recommend','repo-view'),('repo-linkStory','recommend','repo-blame'),('repo-linkStory','recommend','repo-linkBug'),('repo-linkStory','recommend','repo-linkTask'),('repo-linkStory','recommend','repo-log'),('repo-linkStory','recommend','repo-revision'),('repo-linkStory','recommend','repo-showSyncCommit'),('repo-linkStory','recommend','repo-unlink'),('repo-linkStory','recommend','repo-view'),('repo-linkTask','recommend','repo-blame'),('repo-linkTask','recommend','repo-linkBug'),('repo-linkTask','recommend','repo-linkStory'),('repo-linkTask','recommend','repo-log'),('repo-linkTask','recommend','repo-revision'),('repo-linkTask','recommend','repo-showSyncCommit'),('repo-linkTask','recommend','repo-unlink'),('repo-linkTask','recommend','repo-view'),('repo-log','recommend','repo-blame'),('repo-log','recommend','repo-linkBug'),('repo-log','recommend','repo-linkStory'),('repo-log','recommend','repo-linkTask'),('repo-log','recommend','repo-revision'),('repo-log','recommend','repo-showSyncCommit'),('repo-log','recommend','repo-unlink'),('repo-log','recommend','repo-view'),('repo-maintain','recommend','repo-browse'),('repo-maintain','recommend','repo-create'),('repo-maintain','recommend','repo-edit'),('repo-review','depend','repo-diff'),('repo-review','recommend','repo-addBug'),('repo-review','recommend','repo-editBug'),('repo-revision','recommend','repo-blame'),('repo-revision','recommend','repo-linkBug'),('repo-revision','recommend','repo-linkStory'),('repo-revision','recommend','repo-linkTask'),('repo-revision','recommend','repo-log'),('repo-revision','recommend','repo-showSyncCommit'),('repo-revision','recommend','repo-unlink'),('repo-revision','recommend','repo-view'),('repo-showSyncCommit','recommend','repo-blame'),('repo-showSyncCommit','recommend','repo-linkBug'),('repo-showSyncCommit','recommend','repo-linkStory'),('repo-showSyncCommit','recommend','repo-linkTask'),('repo-showSyncCommit','recommend','repo-log'),('repo-showSyncCommit','recommend','repo-revision'),('repo-showSyncCommit','recommend','repo-unlink'),('repo-showSyncCommit','recommend','repo-view'),('repo-unlink','recommend','repo-blame'),('repo-unlink','recommend','repo-linkBug'),('repo-unlink','recommend','repo-linkStory'),('repo-unlink','recommend','repo-linkTask'),('repo-unlink','recommend','repo-log'),('repo-unlink','recommend','repo-revision'),('repo-unlink','recommend','repo-showSyncCommit'),('repo-unlink','recommend','repo-view'),('repo-view','recommend','repo-blame'),('repo-view','recommend','repo-linkBug'),('repo-view','recommend','repo-linkStory'),('repo-view','recommend','repo-linkTask'),('repo-view','recommend','repo-log'),('repo-view','recommend','repo-revision'),('repo-view','recommend','repo-showSyncCommit'),('repo-view','recommend','repo-unlink'),('report-viewReport','depend','report-customeredReport'),('requirement-activate','depend','requirement-view'),('requirement-activate','recommend','requirement-assignTo'),('requirement-activate','recommend','requirement-change'),('requirement-activate','recommend','requirement-close'),('requirement-activate','recommend','requirement-create'),('requirement-activate','recommend','requirement-edit'),('requirement-activate','recommend','requirement-linkRequirements'),('requirement-activate','recommend','requirement-linkStory'),('requirement-activate','recommend','requirement-recall'),('requirement-activate','recommend','requirement-submitReview'),('requirement-assignTo','depend','requirement-view'),('requirement-assignTo','recommend','requirement-activate'),('requirement-assignTo','recommend','requirement-batchAssignTo'),('requirement-assignTo','recommend','requirement-change'),('requirement-assignTo','recommend','requirement-close'),('requirement-assignTo','recommend','requirement-create'),('requirement-assignTo','recommend','requirement-edit'),('requirement-assignTo','recommend','requirement-linkRequirements'),('requirement-assignTo','recommend','requirement-linkStory'),('requirement-assignTo','recommend','requirement-recall'),('requirement-assignTo','recommend','requirement-submitReview'),('requirement-batchAssignTo','depend','product-requirement'),('requirement-batchAssignTo','recommend','requirement-assignTo'),('requirement-batchChangeBranch','depend','product-requirement'),('requirement-batchChangeBranch','recommend','requirement-edit'),('requirement-batchChangeModule','depend','product-requirement'),('requirement-batchChangeModule','recommend','requirement-edit'),('requirement-batchChangeRoadmap','depend','product-requirement'),('requirement-batchChangeRoadmap','recommend','requirement-batchCreate'),('requirement-batchChangeRoadmap','recommend','requirement-create'),('requirement-batchChangeRoadmap','recommend','requirement-edit'),('requirement-batchClose','depend','product-requirement'),('requirement-batchClose','recommend','requirement-close'),('requirement-batchCreate','depend','product-requirement'),('requirement-batchCreate','recommend','requirement-create'),('requirement-batchEdit','depend','product-requirement'),('requirement-batchEdit','recommend','requirement-edit'),('requirement-batchReview','depend','product-requirement'),('requirement-batchReview','recommend','requirement-review'),('requirement-change','depend','requirement-view'),('requirement-change','recommend','requirement-activate'),('requirement-change','recommend','requirement-assignTo'),('requirement-change','recommend','requirement-close'),('requirement-change','recommend','requirement-create'),('requirement-change','recommend','requirement-edit'),('requirement-change','recommend','requirement-linkRequirements'),('requirement-change','recommend','requirement-linkStory'),('requirement-change','recommend','requirement-recall'),('requirement-change','recommend','requirement-submitReview'),('requirement-close','depend','requirement-view'),('requirement-close','recommend','requirement-activate'),('requirement-close','recommend','requirement-assignTo'),('requirement-close','recommend','requirement-batchClose'),('requirement-close','recommend','requirement-change'),('requirement-close','recommend','requirement-create'),('requirement-close','recommend','requirement-edit'),('requirement-close','recommend','requirement-linkRequirements'),('requirement-close','recommend','requirement-linkStory'),('requirement-close','recommend','requirement-recall'),('requirement-close','recommend','requirement-submitReview'),('requirement-create','recommend','requirement-activate'),('requirement-create','recommend','requirement-assignTo'),('requirement-create','recommend','requirement-batchCreate'),('requirement-create','recommend','requirement-change'),('requirement-create','recommend','requirement-close'),('requirement-create','recommend','requirement-edit'),('requirement-create','recommend','requirement-linkRequirements'),('requirement-create','recommend','requirement-linkStory'),('requirement-create','recommend','requirement-recall'),('requirement-create','recommend','requirement-submitReview'),('requirement-delete','depend','requirement-view'),('requirement-delete','recommend','requirement-create'),('requirement-delete','recommend','requirement-edit'),('requirement-edit','depend','requirement-view'),('requirement-edit','recommend','requirement-activate'),('requirement-edit','recommend','requirement-assignTo'),('requirement-edit','recommend','requirement-batchEdit'),('requirement-edit','recommend','requirement-change'),('requirement-edit','recommend','requirement-close'),('requirement-edit','recommend','requirement-create'),('requirement-edit','recommend','requirement-linkRequirements'),('requirement-edit','recommend','requirement-linkStory'),('requirement-edit','recommend','requirement-recall'),('requirement-edit','recommend','requirement-submitReview'),('requirement-export','depend','product-requirement'),('requirement-exportTemplate','depend','product-requirement'),('requirement-import','depend','product-requirement'),('requirement-import','depend','requirement-exportTemplate'),('requirement-linkRequirements','depend','requirement-view'),('requirement-linkRequirements','recommend','requirement-activate'),('requirement-linkRequirements','recommend','requirement-assignTo'),('requirement-linkRequirements','recommend','requirement-change'),('requirement-linkRequirements','recommend','requirement-close'),('requirement-linkRequirements','recommend','requirement-create'),('requirement-linkRequirements','recommend','requirement-edit'),('requirement-linkRequirements','recommend','requirement-linkStory'),('requirement-linkRequirements','recommend','requirement-recall'),('requirement-linkRequirements','recommend','requirement-submitReview'),('requirement-linkStory','depend','requirement-view'),('requirement-linkStory','recommend','requirement-activate'),('requirement-linkStory','recommend','requirement-assignTo'),('requirement-linkStory','recommend','requirement-batchChangeModule'),('requirement-linkStory','recommend','requirement-change'),('requirement-linkStory','recommend','requirement-close'),('requirement-linkStory','recommend','requirement-create'),('requirement-linkStory','recommend','requirement-edit'),('requirement-linkStory','recommend','requirement-linkRequirements'),('requirement-linkStory','recommend','requirement-recall'),('requirement-linkStory','recommend','requirement-submitReview'),('requirement-recall','depend','requirement-view'),('requirement-recall','recommend','requirement-activate'),('requirement-recall','recommend','requirement-assignTo'),('requirement-recall','recommend','requirement-change'),('requirement-recall','recommend','requirement-close'),('requirement-recall','recommend','requirement-create'),('requirement-recall','recommend','requirement-edit'),('requirement-recall','recommend','requirement-linkRequirements'),('requirement-recall','recommend','requirement-linkStory'),('requirement-recall','recommend','requirement-submitReview'),('requirement-report','depend','product-requirement'),('requirement-review','depend','requirement-view'),('requirement-review','recommend','requirement-batchReview'),('requirement-submitReview','depend','requirement-view'),('requirement-submitReview','recommend','requirement-activate'),('requirement-submitReview','recommend','requirement-assignTo'),('requirement-submitReview','recommend','requirement-change'),('requirement-submitReview','recommend','requirement-close'),('requirement-submitReview','recommend','requirement-create'),('requirement-submitReview','recommend','requirement-edit'),('requirement-submitReview','recommend','requirement-linkRequirements'),('requirement-submitReview','recommend','requirement-linkStory'),('requirement-submitReview','recommend','requirement-recall'),('researchplan-browse','depend','project-index'),('researchplan-browse','recommend','researchplan-create'),('researchplan-browse','recommend','researchplan-edit'),('researchplan-browse','recommend','researchplan-view'),('researchplan-create','depend','researchplan-browse'),('researchplan-create','recommend','researchplan-edit'),('researchplan-create','recommend','researchplan-view'),('researchplan-delete','depend','researchplan-browse'),('researchplan-delete','recommend','researchplan-create'),('researchplan-delete','recommend','researchplan-edit'),('researchplan-delete','recommend','researchplan-view'),('researchplan-edit','depend','researchplan-browse'),('researchplan-edit','recommend','researchplan-create'),('researchplan-edit','recommend','researchplan-view'),('researchplan-view','depend','researchplan-browse'),('researchplan-view','recommend','researchplan-create'),('researchplan-view','recommend','researchplan-edit'),('researchreport-browse','depend','project-index'),('researchreport-browse','depend','researchplan-browse'),('researchreport-browse','recommend','researchreport-create'),('researchreport-browse','recommend','researchreport-edit'),('researchreport-browse','recommend','researchreport-view'),('researchreport-create','depend','researchplan-browse'),('researchreport-create','depend','researchreport-browse'),('researchreport-create','recommend','researchreport-edit'),('researchreport-create','recommend','researchreport-view'),('researchreport-delete','depend','researchplan-browse'),('researchreport-delete','depend','researchreport-browse'),('researchreport-delete','recommend','researchreport-create'),('researchreport-delete','recommend','researchreport-edit'),('researchreport-delete','recommend','researchreport-view'),('researchreport-edit','depend','researchplan-browse'),('researchreport-edit','depend','researchreport-browse'),('researchreport-edit','recommend','researchreport-create'),('researchreport-edit','recommend','researchreport-view'),('researchreport-view','depend','researchplan-browse'),('researchreport-view','depend','researchreport-browse'),('researchreport-view','recommend','researchreport-create'),('researchreport-view','recommend','researchreport-edit'),('review-assess','depend','review-browse'),('review-assess','recommend','review-report'),('review-audit','depend','review-browse'),('review-browse','depend','project-index'),('review-browse','recommend','review-view'),('review-create','depend','review-browse'),('review-create','recommend','review-edit'),('review-create','recommend','review-recall'),('review-create','recommend','review-report'),('review-create','recommend','review-submit'),('review-create','recommend','review-toAudit'),('review-delete','depend','review-browse'),('review-delete','recommend','review-create'),('review-delete','recommend','review-edit'),('review-edit','depend','review-browse'),('review-edit','recommend','review-create'),('review-edit','recommend','review-delete'),('review-edit','recommend','review-recall'),('review-edit','recommend','review-report'),('review-edit','recommend','review-submit'),('review-edit','recommend','review-toAudit'),('review-recall','depend','review-browse'),('review-recall','recommend','review-create'),('review-recall','recommend','review-delete'),('review-recall','recommend','review-edit'),('review-recall','recommend','review-report'),('review-recall','recommend','review-submit'),('review-recall','recommend','review-toAudit'),('review-report','depend','review-browse'),('review-report','recommend','review-create'),('review-report','recommend','review-delete'),('review-report','recommend','review-edit'),('review-report','recommend','review-recall'),('review-report','recommend','review-submit'),('review-report','recommend','review-toAudit'),('review-submit','depend','review-browse'),('review-submit','recommend','review-create'),('review-submit','recommend','review-edit'),('review-submit','recommend','review-recall'),('review-submit','recommend','review-report'),('review-submit','recommend','review-toAudit'),('review-toAudit','depend','review-browse'),('review-toAudit','recommend','review-create'),('review-toAudit','recommend','review-delete'),('review-toAudit','recommend','review-edit'),('review-toAudit','recommend','review-recall'),('review-toAudit','recommend','review-report'),('review-toAudit','recommend','review-submit'),('review-view','depend','review-browse'),('reviewcl-batchCreate','recommend','reviewcl-create'),('reviewcl-create','recommend','reviewcl-batchCreate'),('reviewcl-create','recommend','reviewcl-delete'),('reviewcl-create','recommend','reviewcl-edit'),('reviewcl-create','recommend','reviewcl-view'),('reviewcl-delete','recommend','reviewcl-create'),('reviewcl-delete','recommend','reviewcl-edit'),('reviewcl-delete','recommend','reviewcl-view'),('reviewcl-edit','recommend','reviewcl-create'),('reviewcl-edit','recommend','reviewcl-delete'),('reviewcl-edit','recommend','reviewcl-view'),('reviewissue-create','depend','reviewissue-issue'),('reviewissue-create','recommend','reviewissue-delete'),('reviewissue-create','recommend','reviewissue-edit'),('reviewissue-create','recommend','reviewissue-resolved'),('reviewissue-create','recommend','reviewissue-updateStatus'),('reviewissue-delete','depend','reviewissue-issue'),('reviewissue-delete','recommend','reviewissue-create'),('reviewissue-delete','recommend','reviewissue-edit'),('reviewissue-delete','recommend','reviewissue-resolved'),('reviewissue-delete','recommend','reviewissue-updateStatus'),('reviewissue-edit','depend','reviewissue-issue'),('reviewissue-edit','recommend','reviewissue-create'),('reviewissue-edit','recommend','reviewissue-delete'),('reviewissue-edit','recommend','reviewissue-resolved'),('reviewissue-edit','recommend','reviewissue-updateStatus'),('reviewissue-issue','depend','project-index'),('reviewissue-issue','depend','review-browse'),('reviewissue-resolved','depend','reviewissue-issue'),('reviewissue-resolved','recommend','reviewissue-create'),('reviewissue-resolved','recommend','reviewissue-delete'),('reviewissue-resolved','recommend','reviewissue-edit'),('reviewissue-resolved','recommend','reviewissue-updateStatus'),('reviewissue-updateStatus','depend','reviewissue-issue'),('reviewissue-updateStatus','recommend','reviewissue-create'),('reviewissue-updateStatus','recommend','reviewissue-delete'),('reviewissue-updateStatus','recommend','reviewissue-edit'),('reviewissue-updateStatus','recommend','reviewissue-resolved'),('reviewissue-view','depend','reviewissue-issue'),('risk-activate','depend','risk-browse'),('risk-activate','depend','risk-view'),('risk-activate','recommend','risk-assignTo'),('risk-activate','recommend','risk-cancel'),('risk-activate','recommend','risk-close'),('risk-activate','recommend','risk-create'),('risk-activate','recommend','risk-edit'),('risk-activate','recommend','risk-hangup'),('risk-activate','recommend','risk-track'),('risk-assignTo','depend','risk-browse'),('risk-assignTo','depend','risk-view'),('risk-assignTo','recommend','risk-activate'),('risk-assignTo','recommend','risk-cancel'),('risk-assignTo','recommend','risk-close'),('risk-assignTo','recommend','risk-create'),('risk-assignTo','recommend','risk-edit'),('risk-assignTo','recommend','risk-hangup'),('risk-assignTo','recommend','risk-track'),('risk-batchCreate','depend','risk-browse'),('risk-batchCreate','depend','risk-view'),('risk-batchCreate','recommend','risk-create'),('risk-batchImportToLib','depend','risk-browse'),('risk-batchImportToLib','recommend','risk-importToLib'),('risk-browse','recommend','risk-view'),('risk-cancel','depend','risk-browse'),('risk-cancel','depend','risk-view'),('risk-cancel','recommend','risk-activate'),('risk-cancel','recommend','risk-assignTo'),('risk-cancel','recommend','risk-close'),('risk-cancel','recommend','risk-create'),('risk-cancel','recommend','risk-edit'),('risk-cancel','recommend','risk-hangup'),('risk-cancel','recommend','risk-track'),('risk-close','depend','risk-browse'),('risk-close','depend','risk-view'),('risk-close','recommend','risk-activate'),('risk-close','recommend','risk-assignTo'),('risk-close','recommend','risk-cancel'),('risk-close','recommend','risk-create'),('risk-close','recommend','risk-edit'),('risk-close','recommend','risk-hangup'),('risk-close','recommend','risk-track'),('risk-create','depend','risk-browse'),('risk-create','depend','risk-view'),('risk-create','recommend','risk-activate'),('risk-create','recommend','risk-assignTo'),('risk-create','recommend','risk-batchCreate'),('risk-create','recommend','risk-cancel'),('risk-create','recommend','risk-close'),('risk-create','recommend','risk-edit'),('risk-create','recommend','risk-hangup'),('risk-create','recommend','risk-track'),('risk-delete','depend','risk-browse'),('risk-edit','depend','risk-browse'),('risk-edit','depend','risk-view'),('risk-edit','recommend','risk-activate'),('risk-edit','recommend','risk-assignTo'),('risk-edit','recommend','risk-cancel'),('risk-edit','recommend','risk-close'),('risk-edit','recommend','risk-create'),('risk-edit','recommend','risk-hangup'),('risk-edit','recommend','risk-track'),('risk-export','depend','risk-browse'),('risk-hangup','depend','risk-browse'),('risk-hangup','depend','risk-view'),('risk-hangup','recommend','risk-activate'),('risk-hangup','recommend','risk-assignTo'),('risk-hangup','recommend','risk-cancel'),('risk-hangup','recommend','risk-close'),('risk-hangup','recommend','risk-create'),('risk-hangup','recommend','risk-edit'),('risk-hangup','recommend','risk-track'),('risk-importFromLib','depend','risk-browse'),('risk-importFromLib','depend','risk-view'),('risk-importFromLib','recommend','assetlib-risk'),('risk-importFromLib','recommend','assetlib-risklib'),('risk-importToLib','depend','risk-view'),('risk-importToLib','recommend','risk-batchImportToLib'),('risk-track','depend','risk-browse'),('risk-track','depend','risk-view'),('risk-track','recommend','risk-activate'),('risk-track','recommend','risk-assignTo'),('risk-track','recommend','risk-cancel'),('risk-track','recommend','risk-close'),('risk-track','recommend','risk-create'),('risk-track','recommend','risk-edit'),('risk-track','recommend','risk-hangup'),('risk-view','depend','risk-browse'),('roadmap-activate','depend','roadmap-browse'),('roadmap-activate','depend','roadmap-view'),('roadmap-activate','recommend','roadmap-close'),('roadmap-batchUnlinkUR','depend','roadmap-browse'),('roadmap-batchUnlinkUR','depend','roadmap-view'),('roadmap-batchUnlinkUR','recommend','roadmap-unlinkUR'),('roadmap-browse','recommend','roadmap-create'),('roadmap-browse','recommend','roadmap-edit'),('roadmap-browse','recommend','roadmap-view'),('roadmap-close','depend','roadmap-browse'),('roadmap-close','depend','roadmap-view'),('roadmap-close','recommend','roadmap-activate'),('roadmap-create','depend','roadmap-browse'),('roadmap-create','depend','roadmap-view'),('roadmap-create','recommend','roadmap-edit'),('roadmap-delete','depend','roadmap-browse'),('roadmap-delete','depend','roadmap-view'),('roadmap-edit','depend','roadmap-browse'),('roadmap-edit','depend','roadmap-view'),('roadmap-edit','recommend','roadmap-create'),('roadmap-linkUR','depend','roadmap-browse'),('roadmap-linkUR','depend','roadmap-view'),('roadmap-linkUR','recommend','roadmap-batchUnlinkUR'),('roadmap-linkUR','recommend','roadmap-unlinkUR'),('roadmap-unlinkUR','depend','roadmap-browse'),('roadmap-unlinkUR','depend','roadmap-view'),('roadmap-unlinkUR','recommend','roadmap-batchUnlinkUR'),('roadmap-view','depend','roadmap-browse'),('roadmap-view','recommend','roadmap-edit'),('roadmap-view','recommend','roadmap-linkUR'),('screen-allAnnualData','depend','screen-annualData'),('screen-annualData','depend','screen-browse'),('screen-create','depend','screen-browse'),('screen-create','recommend','screen-design'),('screen-create','recommend','screen-edit'),('screen-create','recommend','screen-publish'),('screen-delete','depend','screen-browse'),('screen-design','depend','screen-browse'),('screen-design','recommend','screen-create'),('screen-design','recommend','screen-edit'),('screen-design','recommend','screen-publish'),('screen-edit','depend','screen-browse'),('screen-edit','recommend','screen-create'),('screen-edit','recommend','screen-design'),('screen-edit','recommend','screen-publish'),('screen-publish','depend','screen-browse'),('screen-publish','recommend','screen-create'),('screen-publish','recommend','screen-design'),('screen-publish','recommend','screen-edit'),('search-buildIndex','depend','admin-index'),('search-buildQuery','depend','search-buildForm'),('search-deleteQuery','depend','search-buildForm'),('search-deleteQuery','recommend','search-saveQuery'),('search-saveQuery','depend','search-buildForm'),('search-saveQuery','recommend','search-deleteQuery'),('serverroom-browse','depend','ops-index'),('serverroom-browse','recommend','serverroom-create'),('serverroom-browse','recommend','serverroom-edit'),('serverroom-browse','recommend','serverroom-view'),('serverroom-create','depend','ops-index'),('serverroom-create','depend','serverroom-browse'),('serverroom-create','recommend','serverroom-edit'),('serverroom-delete','depend','ops-index'),('serverroom-delete','depend','serverroom-browse'),('serverroom-delete','recommend','serverroom-create'),('serverroom-delete','recommend','serverroom-edit'),('serverroom-edit','depend','ops-index'),('serverroom-edit','depend','serverroom-browse'),('serverroom-edit','recommend','serverroom-create'),('serverroom-view','depend','ops-index'),('serverroom-view','depend','serverroom-browse'),('serverroom-view','recommend','serverroom-create'),('serverroom-view','recommend','serverroom-edit'),('service-browse','depend','ops-index'),('service-browse','recommend','service-create'),('service-browse','recommend','service-edit'),('service-browse','recommend','service-manage'),('service-browse','recommend','service-view'),('service-create','depend','ops-index'),('service-create','depend','service-browse'),('service-create','recommend','service-edit'),('service-create','recommend','service-manage'),('service-delete','depend','ops-index'),('service-delete','depend','service-browse'),('service-delete','recommend','service-create'),('service-delete','recommend','service-edit'),('service-delete','recommend','service-manage'),('service-edit','depend','ops-index'),('service-edit','depend','service-browse'),('service-edit','recommend','service-create'),('service-edit','recommend','service-manage'),('service-manage','depend','ops-index'),('service-manage','depend','service-browse'),('service-manage','recommend','service-create'),('service-manage','recommend','service-edit'),('service-view','depend','ops-index'),('service-view','depend','service-browse'),('service-view','recommend','service-create'),('service-view','recommend','service-edit'),('service-view','recommend','service-manage'),('sms-reset','depend','sms-index'),('sms-test','depend','sms-index'),('sonarqube-browse','recommend','sonarqube-create'),('sonarqube-browse','recommend','sonarqube-edit'),('sonarqube-browseIssue','depend','sonarqube-browse'),('sonarqube-browseIssue','depend','sonarqube-browseProject'),('sonarqube-browseIssue','recommend','sonarqube-createProject'),('sonarqube-browseIssue','recommend','sonarqube-execJob'),('sonarqube-browseIssue','recommend','sonarqube-reportView'),('sonarqube-browseProject','depend','sonarqube-browse'),('sonarqube-create','depend','sonarqube-browse'),('sonarqube-create','recommend','sonarqube-edit'),('sonarqube-createProject','depend','sonarqube-browse'),('sonarqube-createProject','depend','sonarqube-browseProject'),('sonarqube-createProject','recommend','sonarqube-browseIssue'),('sonarqube-createProject','recommend','sonarqube-execJob'),('sonarqube-createProject','recommend','sonarqube-reportView'),('sonarqube-delete','depend','sonarqube-browse'),('sonarqube-delete','recommend','sonarqube-create'),('sonarqube-delete','recommend','sonarqube-edit'),('sonarqube-deleteProject','depend','sonarqube-browse'),('sonarqube-deleteProject','depend','sonarqube-browseProject'),('sonarqube-deleteProject','recommend','sonarqube-browseIssue'),('sonarqube-deleteProject','recommend','sonarqube-createProject'),('sonarqube-deleteProject','recommend','sonarqube-execJob'),('sonarqube-deleteProject','recommend','sonarqube-reportView'),('sonarqube-edit','depend','sonarqube-browse'),('sonarqube-edit','recommend','sonarqube-create'),('sonarqube-execJob','depend','sonarqube-browse'),('sonarqube-execJob','depend','sonarqube-browseProject'),('sonarqube-execJob','recommend','sonarqube-browseIssue'),('sonarqube-execJob','recommend','sonarqube-createProject'),('sonarqube-execJob','recommend','sonarqube-reportView'),('sonarqube-reportView','depend','sonarqube-browse'),('sonarqube-reportView','depend','sonarqube-browseProject'),('sonarqube-reportView','recommend','sonarqube-browseIssue'),('sonarqube-reportView','recommend','sonarqube-createProject'),('sonarqube-reportView','recommend','sonarqube-execJob'),('sqlbuilder-createSQLView','depend','sqlbuilder-browseSQLView'),('sqlbuilder-createSQLView','recommend','sqlbuilder-deleteSQLView'),('sqlbuilder-createSQLView','recommend','sqlbuilder-editSQLView'),('sqlbuilder-deleteSQLView','depend','sqlbuilder-browseSQLView'),('sqlbuilder-deleteSQLView','recommend','sqlbuilder-createSQLView'),('sqlbuilder-deleteSQLView','recommend','sqlbuilder-editSQLView'),('sqlbuilder-editSQLView','depend','sqlbuilder-browseSQLView'),('sqlbuilder-editSQLView','recommend','sqlbuilder-createSQLView'),('sqlbuilder-editSQLView','recommend','sqlbuilder-deleteSQLView'),('stage-batchCreate','recommend','stage-create'),('stage-create','recommend','stage-batchCreate'),('stage-create','recommend','stage-delete'),('stage-create','recommend','stage-edit'),('stage-delete','recommend','stage-create'),('stage-delete','recommend','stage-edit'),('stage-edit','recommend','stage-create'),('stage-edit','recommend','stage-delete'),('stakeholder-batchCreate','depend','stakeholder-browse'),('stakeholder-batchCreate','recommend','stakeholder-create'),('stakeholder-browse','depend','project-index'),('stakeholder-browse','recommend','stakeholder-view'),('stakeholder-communicate','depend','stakeholder-browse'),('stakeholder-communicate','recommend','stakeholder-batchCreate'),('stakeholder-communicate','recommend','stakeholder-create'),('stakeholder-communicate','recommend','stakeholder-delete'),('stakeholder-communicate','recommend','stakeholder-edit'),('stakeholder-communicate','recommend','stakeholder-expect'),('stakeholder-communicate','recommend','stakeholder-userIssue'),('stakeholder-create','depend','stakeholder-browse'),('stakeholder-create','recommend','stakeholder-batchCreate'),('stakeholder-create','recommend','stakeholder-communicate'),('stakeholder-create','recommend','stakeholder-delete'),('stakeholder-create','recommend','stakeholder-edit'),('stakeholder-create','recommend','stakeholder-expect'),('stakeholder-create','recommend','stakeholder-userIssue'),('stakeholder-delete','depend','stakeholder-browse'),('stakeholder-delete','recommend','stakeholder-batchCreate'),('stakeholder-delete','recommend','stakeholder-communicate'),('stakeholder-delete','recommend','stakeholder-create'),('stakeholder-delete','recommend','stakeholder-edit'),('stakeholder-delete','recommend','stakeholder-expect'),('stakeholder-delete','recommend','stakeholder-userIssue'),('stakeholder-edit','depend','stakeholder-browse'),('stakeholder-edit','recommend','stakeholder-batchCreate'),('stakeholder-edit','recommend','stakeholder-communicate'),('stakeholder-edit','recommend','stakeholder-create'),('stakeholder-edit','recommend','stakeholder-delete'),('stakeholder-edit','recommend','stakeholder-expect'),('stakeholder-edit','recommend','stakeholder-userIssue'),('stakeholder-expect','depend','stakeholder-browse'),('stakeholder-expect','recommend','stakeholder-batchCreate'),('stakeholder-expect','recommend','stakeholder-communicate'),('stakeholder-expect','recommend','stakeholder-create'),('stakeholder-expect','recommend','stakeholder-delete'),('stakeholder-expect','recommend','stakeholder-edit'),('stakeholder-expect','recommend','stakeholder-userIssue'),('stakeholder-userIssue','depend','stakeholder-browse'),('stakeholder-userIssue','recommend','stakeholder-batchCreate'),('stakeholder-userIssue','recommend','stakeholder-communicate'),('stakeholder-userIssue','recommend','stakeholder-create'),('stakeholder-userIssue','recommend','stakeholder-delete'),('stakeholder-userIssue','recommend','stakeholder-edit'),('stakeholder-userIssue','recommend','stakeholder-expect'),('stakeholder-view','depend','stakeholder-browse'),('story-activate','depend','story-view'),('story-activate','recommend','story-assignTo'),('story-activate','recommend','story-change'),('story-activate','recommend','story-close'),('story-activate','recommend','story-create'),('story-activate','recommend','story-edit'),('story-activate','recommend','story-linkStories'),('story-activate','recommend','story-linkStory'),('story-activate','recommend','story-processStoryChange'),('story-activate','recommend','story-recall'),('story-activate','recommend','story-relieved'),('story-activate','recommend','story-submitReview'),('story-assignTo','depend','product-browse'),('story-assignTo','recommend','story-activate'),('story-assignTo','recommend','story-change'),('story-assignTo','recommend','story-close'),('story-assignTo','recommend','story-create'),('story-assignTo','recommend','story-edit'),('story-assignTo','recommend','story-linkStories'),('story-assignTo','recommend','story-linkStory'),('story-assignTo','recommend','story-processStoryChange'),('story-assignTo','recommend','story-recall'),('story-assignTo','recommend','story-relieved'),('story-assignTo','recommend','story-submitReview'),('story-batchAssignTo','depend','product-browse'),('story-batchAssignTo','recommend','story-edit'),('story-batchChangeBranch','depend','product-browse'),('story-batchChangeBranch','recommend','story-edit'),('story-batchChangeModule','depend','product-browse'),('story-batchChangeModule','recommend','story-edit'),('story-batchChangePlan','depend','product-browse'),('story-batchChangePlan','recommend','story-edit'),('story-batchChangeStage','depend','product-browse'),('story-batchChangeStage','recommend','story-edit'),('story-batchClose','depend','product-browse'),('story-batchClose','recommend','story-close'),('story-batchCreate','depend','product-browse'),('story-batchCreate','recommend','story-create'),('story-batchEdit','depend','product-browse'),('story-batchEdit','recommend','story-edit'),('story-batchImportToLib','depend','product-browse'),('story-batchImportToLib','recommend','story-importToLib'),('story-batchReview','depend','product-browse'),('story-batchReview','recommend','story-review'),('story-batchToTask','depend','projectstory-story'),('story-batchToTask','recommend','execution-task'),('story-bugs','depend','product-browse'),('story-cases','depend','product-browse'),('story-change','depend','story-view'),('story-change','recommend','story-activate'),('story-change','recommend','story-assignTo'),('story-change','recommend','story-close'),('story-change','recommend','story-create'),('story-change','recommend','story-edit'),('story-change','recommend','story-linkStories'),('story-change','recommend','story-linkStory'),('story-change','recommend','story-processStoryChange'),('story-change','recommend','story-recall'),('story-change','recommend','story-relieved'),('story-change','recommend','story-submitReview'),('story-close','depend','story-view'),('story-close','recommend','story-activate'),('story-close','recommend','story-assignTo'),('story-close','recommend','story-change'),('story-close','recommend','story-create'),('story-close','recommend','story-edit'),('story-close','recommend','story-linkStories'),('story-close','recommend','story-linkStory'),('story-close','recommend','story-processStoryChange'),('story-close','recommend','story-recall'),('story-close','recommend','story-relieved'),('story-close','recommend','story-submitReview'),('story-create','recommend','story-activate'),('story-create','recommend','story-assignTo'),('story-create','recommend','story-batchCreate'),('story-create','recommend','story-change'),('story-create','recommend','story-close'),('story-create','recommend','story-edit'),('story-create','recommend','story-linkStories'),('story-create','recommend','story-linkStory'),('story-create','recommend','story-processStoryChange'),('story-create','recommend','story-recall'),('story-create','recommend','story-relation'),('story-create','recommend','story-relieved'),('story-create','recommend','story-submitReview'),('story-delete','depend','story-view'),('story-delete','recommend','story-create'),('story-delete','recommend','story-edit'),('story-edit','depend','story-view'),('story-edit','recommend','story-activate'),('story-edit','recommend','story-assignTo'),('story-edit','recommend','story-batchEdit'),('story-edit','recommend','story-change'),('story-edit','recommend','story-close'),('story-edit','recommend','story-create'),('story-edit','recommend','story-linkStories'),('story-edit','recommend','story-linkStory'),('story-edit','recommend','story-processStoryChange'),('story-edit','recommend','story-recall'),('story-edit','recommend','story-relieved'),('story-edit','recommend','story-submitReview'),('story-export','depend','product-browse'),('story-exportTemplate','depend','product-browse'),('story-import','depend','product-browse'),('story-import','depend','story-exportTemplate'),('story-importToLib','depend','story-view'),('story-importToLib','recommend','story-batchImportToLib'),('story-linkStories','depend','story-view'),('story-linkStories','recommend','story-activate'),('story-linkStories','recommend','story-assignTo'),('story-linkStories','recommend','story-change'),('story-linkStories','recommend','story-close'),('story-linkStories','recommend','story-create'),('story-linkStories','recommend','story-edit'),('story-linkStories','recommend','story-linkStory'),('story-linkStories','recommend','story-processStoryChange'),('story-linkStories','recommend','story-recall'),('story-linkStories','recommend','story-relieved'),('story-linkStories','recommend','story-submitReview'),('story-linkStory','depend','story-view'),('story-linkStory','recommend','story-activate'),('story-linkStory','recommend','story-assignTo'),('story-linkStory','recommend','story-change'),('story-linkStory','recommend','story-close'),('story-linkStory','recommend','story-create'),('story-linkStory','recommend','story-edit'),('story-linkStory','recommend','story-linkStories'),('story-linkStory','recommend','story-processStoryChange'),('story-linkStory','recommend','story-recall'),('story-linkStory','recommend','story-relieved'),('story-linkStory','recommend','story-submitReview'),('story-processStoryChange','depend','story-view'),('story-processStoryChange','recommend','story-activate'),('story-processStoryChange','recommend','story-assignTo'),('story-processStoryChange','recommend','story-change'),('story-processStoryChange','recommend','story-close'),('story-processStoryChange','recommend','story-create'),('story-processStoryChange','recommend','story-edit'),('story-processStoryChange','recommend','story-linkStories'),('story-processStoryChange','recommend','story-linkStory'),('story-processStoryChange','recommend','story-recall'),('story-processStoryChange','recommend','story-relieved'),('story-processStoryChange','recommend','story-submitReview'),('story-recall','depend','story-view'),('story-recall','recommend','story-activate'),('story-recall','recommend','story-assignTo'),('story-recall','recommend','story-change'),('story-recall','recommend','story-close'),('story-recall','recommend','story-create'),('story-recall','recommend','story-edit'),('story-recall','recommend','story-linkStories'),('story-recall','recommend','story-linkStory'),('story-recall','recommend','story-processStoryChange'),('story-recall','recommend','story-relieved'),('story-recall','recommend','story-submitReview'),('story-relation','depend','story-view'),('story-relieved','depend','story-view'),('story-relieved','recommend','story-activate'),('story-relieved','recommend','story-assignTo'),('story-relieved','recommend','story-change'),('story-relieved','recommend','story-close'),('story-relieved','recommend','story-create'),('story-relieved','recommend','story-edit'),('story-relieved','recommend','story-linkStories'),('story-relieved','recommend','story-linkStory'),('story-relieved','recommend','story-processStoryChange'),('story-relieved','recommend','story-recall'),('story-relieved','recommend','story-submitReview'),('story-report','depend','product-browse'),('story-review','depend','story-view'),('story-review','recommend','story-batchReview'),('story-submitReview','depend','story-view'),('story-submitReview','recommend','story-activate'),('story-submitReview','recommend','story-assignTo'),('story-submitReview','recommend','story-change'),('story-submitReview','recommend','story-close'),('story-submitReview','recommend','story-create'),('story-submitReview','recommend','story-edit'),('story-submitReview','recommend','story-linkStories'),('story-submitReview','recommend','story-linkStory'),('story-submitReview','recommend','story-processStoryChange'),('story-submitReview','recommend','story-recall'),('story-submitReview','recommend','story-relieved'),('story-tasks','depend','product-browse'),('svn-apiSync','depend','svn-cat'),('svn-apiSync','depend','svn-diff'),('svn-cat','depend','svn-apiSync'),('svn-cat','depend','svn-diff'),('svn-diff','depend','svn-apiSync'),('svn-diff','depend','svn-cat'),('task-activate','depend','execution-task'),('task-activate','recommend','task-assignTo'),('task-activate','recommend','task-cancel'),('task-activate','recommend','task-close'),('task-activate','recommend','task-create'),('task-activate','recommend','task-edit'),('task-activate','recommend','task-finish'),('task-activate','recommend','task-pause'),('task-activate','recommend','task-restart'),('task-activate','recommend','task-start'),('task-assignTo','depend','execution-task'),('task-assignTo','recommend','task-activate'),('task-assignTo','recommend','task-batchAssignTo'),('task-assignTo','recommend','task-cancel'),('task-assignTo','recommend','task-close'),('task-assignTo','recommend','task-create'),('task-assignTo','recommend','task-edit'),('task-assignTo','recommend','task-finish'),('task-assignTo','recommend','task-pause'),('task-assignTo','recommend','task-restart'),('task-assignTo','recommend','task-start'),('task-batchAssignTo','depend','execution-task'),('task-batchAssignTo','recommend','task-assignTo'),('task-batchCancel','depend','execution-task'),('task-batchCancel','recommend','task-cancel'),('task-batchChangeModule','depend','execution-task'),('task-batchChangeModule','recommend','task-edit'),('task-batchClose','depend','execution-task'),('task-batchClose','recommend','task-close'),('task-batchClose','recommend','task-deleteEstimate'),('task-batchClose','recommend','task-editEstimate'),('task-batchCreate','depend','execution-task'),('task-batchCreate','recommend','task-create'),('task-batchEdit','depend','execution-task'),('task-batchEdit','recommend','task-edit'),('task-cancel','depend','execution-task'),('task-cancel','recommend','task-activate'),('task-cancel','recommend','task-assignTo'),('task-cancel','recommend','task-batchCancel'),('task-cancel','recommend','task-close'),('task-cancel','recommend','task-create'),('task-cancel','recommend','task-edit'),('task-cancel','recommend','task-finish'),('task-cancel','recommend','task-pause'),('task-cancel','recommend','task-restart'),('task-cancel','recommend','task-start'),('task-close','depend','execution-task'),('task-close','recommend','task-activate'),('task-close','recommend','task-assignTo'),('task-close','recommend','task-batchClose'),('task-close','recommend','task-cancel'),('task-close','recommend','task-create'),('task-close','recommend','task-edit'),('task-close','recommend','task-finish'),('task-close','recommend','task-pause'),('task-close','recommend','task-restart'),('task-close','recommend','task-start'),('task-confirmdesignchange','depend','execution-task'),('task-confirmdesignchange','recommend','task-edit'),('task-confirmStoryChange','depend','execution-task'),('task-confirmStoryChange','recommend','task-edit'),('task-create','depend','execution-task'),('task-create','recommend','execution-importBug'),('task-create','recommend','execution-importplanstories'),('task-create','recommend','task-activate'),('task-create','recommend','task-assignTo'),('task-create','recommend','task-batchCreate'),('task-create','recommend','task-cancel'),('task-create','recommend','task-close'),('task-create','recommend','task-edit'),('task-create','recommend','task-finish'),('task-create','recommend','task-pause'),('task-create','recommend','task-restart'),('task-create','recommend','task-start'),('task-delete','depend','execution-task'),('task-delete','recommend','task-create'),('task-delete','recommend','task-edit'),('task-deleteEstimate','depend','execution-task'),('task-deleteEstimate','depend','task-recordEstimate'),('task-deleteEstimate','recommend','task-editEstimate'),('task-edit','depend','execution-task'),('task-edit','recommend','task-activate'),('task-edit','recommend','task-assignTo'),('task-edit','recommend','task-batchChangeModule'),('task-edit','recommend','task-batchEdit'),('task-edit','recommend','task-cancel'),('task-edit','recommend','task-close'),('task-edit','recommend','task-confirmdesignchange'),('task-edit','recommend','task-confirmStoryChange'),('task-edit','recommend','task-create'),('task-edit','recommend','task-finish'),('task-edit','recommend','task-pause'),('task-edit','recommend','task-restart'),('task-edit','recommend','task-start'),('task-editEstimate','depend','execution-task'),('task-editEstimate','depend','task-recordEstimate'),('task-editEstimate','recommend','task-deleteEstimate'),('task-export','depend','execution-task'),('task-exportTemplate','depend','execution-task'),('task-exportTemplate','recommend','task-import'),('task-finish','depend','execution-task'),('task-finish','recommend','task-activate'),('task-finish','recommend','task-assignTo'),('task-finish','recommend','task-cancel'),('task-finish','recommend','task-close'),('task-finish','recommend','task-create'),('task-finish','recommend','task-edit'),('task-finish','recommend','task-pause'),('task-finish','recommend','task-restart'),('task-finish','recommend','task-start'),('task-import','depend','execution-task'),('task-import','depend','task-exportTemplate'),('task-pause','depend','execution-task'),('task-pause','recommend','task-activate'),('task-pause','recommend','task-assignTo'),('task-pause','recommend','task-cancel'),('task-pause','recommend','task-close'),('task-pause','recommend','task-create'),('task-pause','recommend','task-edit'),('task-pause','recommend','task-finish'),('task-pause','recommend','task-restart'),('task-pause','recommend','task-start'),('task-recordEstimate','depend','execution-task'),('task-recordEstimate','recommend','task-deleteEstimate'),('task-recordEstimate','recommend','task-editEstimate'),('task-report','depend','execution-task'),('task-restart','depend','execution-task'),('task-restart','recommend','task-activate'),('task-restart','recommend','task-assignTo'),('task-restart','recommend','task-cancel'),('task-restart','recommend','task-close'),('task-restart','recommend','task-create'),('task-restart','recommend','task-edit'),('task-restart','recommend','task-finish'),('task-restart','recommend','task-pause'),('task-restart','recommend','task-start'),('task-start','depend','execution-task'),('task-start','recommend','task-activate'),('task-start','recommend','task-assignTo'),('task-start','recommend','task-cancel'),('task-start','recommend','task-close'),('task-start','recommend','task-create'),('task-start','recommend','task-edit'),('task-start','recommend','task-finish'),('task-start','recommend','task-pause'),('task-start','recommend','task-restart'),('task-view','depend','execution-task'),('task-view','recommend','task-activate'),('task-view','recommend','task-assignTo'),('task-view','recommend','task-cancel'),('task-view','recommend','task-close'),('task-view','recommend','task-create'),('task-view','recommend','task-edit'),('task-view','recommend','task-finish'),('task-view','recommend','task-pause'),('task-view','recommend','task-restart'),('task-view','recommend','task-start'),('testcase-automation','depend','testcase-browse'),('testcase-batchCaseTypeChange','recommend','testcase-edit'),('testcase-batchChangeBranch','recommend','testcase-edit'),('testcase-batchChangeModule','recommend','testcase-edit'),('testcase-batchChangeScene','depend','testcase-browse'),('testcase-batchChangeScene','recommend','testcase-changeScene'),('testcase-batchChangeScene','recommend','testcase-createScene'),('testcase-batchChangeScene','recommend','testcase-editScene'),('testcase-batchCreate','recommend','testcase-create'),('testcase-batchDelete','recommend','testcase-delete'),('testcase-batchReview','recommend','testcase-review'),('testcase-browse','depend','qa-index'),('testcase-browse','recommend','testcase-groupCase'),('testcase-browse','recommend','testcase-view'),('testcase-browse','recommend','testcase-zeroCase'),('testcase-changeScene','depend','testcase-browse'),('testcase-changeScene','recommend','testcase-batchChangeScene'),('testcase-changeScene','recommend','testcase-createScene'),('testcase-changeScene','recommend','testcase-editScene'),('testcase-confirmChange','depend','testcase-view'),('testcase-confirmChange','recommend','testcase-confirmLibcaseChange'),('testcase-confirmChange','recommend','testcase-confirmStoryChange'),('testcase-confirmChange','recommend','testcase-create'),('testcase-confirmChange','recommend','testcase-edit'),('testcase-confirmChange','recommend','testcase-ignoreLibcaseChange'),('testcase-confirmChange','recommend','testcase-linkBugs'),('testcase-confirmChange','recommend','testcase-linkCases'),('testcase-confirmLibcaseChange','depend','testcase-view'),('testcase-confirmLibcaseChange','recommend','testcase-confirmChange'),('testcase-confirmLibcaseChange','recommend','testcase-confirmStoryChange'),('testcase-confirmLibcaseChange','recommend','testcase-create'),('testcase-confirmLibcaseChange','recommend','testcase-edit'),('testcase-confirmLibcaseChange','recommend','testcase-ignoreLibcaseChange'),('testcase-confirmStoryChange','depend','testcase-view'),('testcase-confirmStoryChange','recommend','testcase-confirmChange'),('testcase-confirmStoryChange','recommend','testcase-confirmLibcaseChange'),('testcase-confirmStoryChange','recommend','testcase-create'),('testcase-confirmStoryChange','recommend','testcase-edit'),('testcase-confirmStoryChange','recommend','testcase-ignoreLibcaseChange'),('testcase-confirmStoryChange','recommend','testcase-linkBugs'),('testcase-confirmStoryChange','recommend','testcase-linkCases'),('testcase-create','depend','testcase-view'),('testcase-create','recommend','testcase-confirmChange'),('testcase-create','recommend','testcase-confirmLibcaseChange'),('testcase-create','recommend','testcase-confirmStoryChange'),('testcase-create','recommend','testcase-edit'),('testcase-create','recommend','testcase-ignoreLibcaseChange'),('testcase-create','recommend','testcase-linkBugs'),('testcase-create','recommend','testcase-linkCases'),('testcase-create','recommend','testcase-submit'),('testcase-createBug','depend','testcase-view'),('testcase-createBug','recommend','testcase-confirmChange'),('testcase-createBug','recommend','testcase-confirmLibcaseChange'),('testcase-createBug','recommend','testcase-confirmStoryChange'),('testcase-createBug','recommend','testcase-create'),('testcase-createBug','recommend','testcase-edit'),('testcase-createBug','recommend','testcase-ignoreLibcaseChange'),('testcase-createBug','recommend','testcase-linkBugs'),('testcase-createBug','recommend','testcase-linkCases'),('testcase-createBug','recommend','testcase-submit'),('testcase-createScene','depend','testcase-browse'),('testcase-createScene','recommend','testcase-batchChangeScene'),('testcase-createScene','recommend','testcase-changeScene'),('testcase-createScene','recommend','testcase-editScene'),('testcase-delete','depend','testcase-view'),('testcase-delete','recommend','testcase-batchDelete'),('testcase-deleteScene','depend','testcase-browse'),('testcase-edit','depend','testcase-view'),('testcase-edit','recommend','testcase-confirmChange'),('testcase-edit','recommend','testcase-confirmLibcaseChange'),('testcase-edit','recommend','testcase-confirmStoryChange'),('testcase-edit','recommend','testcase-create'),('testcase-edit','recommend','testcase-ignoreLibcaseChange'),('testcase-edit','recommend','testcase-linkBugs'),('testcase-edit','recommend','testcase-linkCases'),('testcase-edit','recommend','testcase-submit'),('testcase-editScene','depend','testcase-browse'),('testcase-editScene','recommend','testcase-batchChangeScene'),('testcase-editScene','recommend','testcase-changeScene'),('testcase-editScene','recommend','testcase-createScene'),('testcase-export','recommend','testcase-exportXmind'),('testcase-exportTemplate','depend','testcase-import'),('testcase-exportXmind','recommend','testcase-export'),('testcase-ignoreLibcaseChange','depend','testcase-view'),('testcase-ignoreLibcaseChange','recommend','testcase-confirmChange'),('testcase-ignoreLibcaseChange','recommend','testcase-confirmLibcaseChange'),('testcase-ignoreLibcaseChange','recommend','testcase-confirmStoryChange'),('testcase-ignoreLibcaseChange','recommend','testcase-create'),('testcase-ignoreLibcaseChange','recommend','testcase-edit'),('testcase-import','depend','testcase-exportTemplate'),('testcase-import','recommend','testcase-importXmind'),('testcase-importFromLib','recommend','assetlib-caselib'),('testcase-importFromLib','recommend','caselib-browse'),('testcase-importToLib','depend','testcase-view'),('testcase-importXmind','recommend','testcase-import'),('testcase-linkBugs','depend','testcase-view'),('testcase-linkBugs','recommend','testcase-create'),('testcase-linkBugs','recommend','testcase-edit'),('testcase-linkBugs','recommend','testcase-linkCases'),('testcase-linkCases','depend','testcase-view'),('testcase-linkCases','recommend','testcase-create'),('testcase-linkCases','recommend','testcase-edit'),('testcase-linkCases','recommend','testcase-linkBugs'),('testcase-review','depend','testcase-view'),('testcase-review','recommend','testcase-batchReview'),('testcase-showScript','depend','testcase-browse'),('testcase-submit','depend','testcase-view'),('testcase-submit','recommend','testcase-confirmChange'),('testcase-submit','recommend','testcase-confirmLibcaseChange'),('testcase-submit','recommend','testcase-confirmStoryChange'),('testcase-submit','recommend','testcase-create'),('testcase-submit','recommend','testcase-edit'),('testcase-submit','recommend','testcase-ignoreLibcaseChange'),('testcase-submit','recommend','testcase-linkBugs'),('testcase-submit','recommend','testcase-linkCases'),('testreport-browse','depend','qa-index'),('testreport-browse','recommend','testreport-view'),('testreport-create','depend','testreport-view'),('testreport-create','recommend','testreport-edit'),('testreport-delete','depend','testreport-view'),('testreport-edit','depend','testreport-view'),('testreport-edit','recommend','testreport-create'),('testsuite-batchUnlinkCases','depend','testsuite-view'),('testsuite-batchUnlinkCases','recommend','testsuite-unlinkCase'),('testsuite-browse','depend','qa-index'),('testsuite-create','depend','testsuite-browse'),('testsuite-create','recommend','testsuite-edit'),('testsuite-delete','depend','testsuite-browse'),('testsuite-delete','depend','testsuite-view'),('testsuite-edit','depend','testsuite-browse'),('testsuite-edit','depend','testsuite-view'),('testsuite-edit','recommend','testsuite-create'),('testsuite-linkCase','depend','testsuite-view'),('testsuite-linkCase','recommend','testsuite-batchUnlinkCases'),('testsuite-linkCase','recommend','testsuite-unlinkCase'),('testsuite-unlinkCase','depend','testsuite-view'),('testsuite-unlinkCase','recommend','testsuite-linkCase'),('testtask-activate','recommend','testtask-block'),('testtask-activate','recommend','testtask-close'),('testtask-activate','recommend','testtask-create'),('testtask-activate','recommend','testtask-edit'),('testtask-activate','recommend','testtask-start'),('testtask-batchAssign','depend','testtask-cases'),('testtask-batchRun','depend','testtask-cases'),('testtask-batchRun','recommend','testtask-runcase'),('testtask-batchUnlinkCases','depend','testtask-cases'),('testtask-batchUnlinkCases','recommend','testtask-unlinkcase'),('testtask-block','recommend','testtask-activate'),('testtask-block','recommend','testtask-close'),('testtask-block','recommend','testtask-create'),('testtask-block','recommend','testtask-edit'),('testtask-block','recommend','testtask-start'),('testtask-browse','depend','qa-index'),('testtask-cases','recommend','testtask-groupCase'),('testtask-cases','recommend','testtask-report'),('testtask-close','recommend','testtask-activate'),('testtask-close','recommend','testtask-block'),('testtask-close','recommend','testtask-create'),('testtask-close','recommend','testtask-edit'),('testtask-close','recommend','testtask-start'),('testtask-create','recommend','testtask-activate'),('testtask-create','recommend','testtask-block'),('testtask-create','recommend','testtask-close'),('testtask-create','recommend','testtask-edit'),('testtask-create','recommend','testtask-start'),('testtask-deployCaseResults','depend','deploy-browse'),('testtask-deployCaseResults','depend','deploy-steps'),('testtask-deployCaseResults','depend','ops-index'),('testtask-deployCaseResults','recommend','deploy-assignTo'),('testtask-deployCaseResults','recommend','deploy-editStep'),('testtask-deployCaseResults','recommend','deploy-finishStep'),('testtask-deployCaseResults','recommend','deploy-manageStep'),('testtask-deployCaseResults','recommend','testtask-runDeployCase'),('testtask-edit','recommend','testtask-activate'),('testtask-edit','recommend','testtask-block'),('testtask-edit','recommend','testtask-close'),('testtask-edit','recommend','testtask-create'),('testtask-edit','recommend','testtask-start'),('testtask-groupCase','depend','testtask-cases'),('testtask-importUnitResult','depend','testtask-browseUnits'),('testtask-linkcase','depend','testtask-cases'),('testtask-linkcase','recommend','testtask-unlinkcase'),('testtask-report','depend','testtask-cases'),('testtask-results','depend','testtask-cases'),('testtask-results','recommend','testtask-runcase'),('testtask-runcase','depend','testtask-cases'),('testtask-runcase','recommend','testtask-results'),('testtask-runDeployCase','depend','deploy-browse'),('testtask-runDeployCase','depend','deploy-steps'),('testtask-runDeployCase','depend','ops-index'),('testtask-runDeployCase','recommend','deploy-assignTo'),('testtask-runDeployCase','recommend','deploy-editStep'),('testtask-runDeployCase','recommend','deploy-finishStep'),('testtask-runDeployCase','recommend','deploy-manageStep'),('testtask-runDeployCase','recommend','testtask-deployCaseResults'),('testtask-start','recommend','testtask-activate'),('testtask-start','recommend','testtask-block'),('testtask-start','recommend','testtask-close'),('testtask-start','recommend','testtask-create'),('testtask-start','recommend','testtask-edit'),('testtask-unitCases','depend','testtask-browseUnits'),('testtask-unlinkcase','depend','testtask-cases'),('testtask-unlinkcase','recommend','testtask-linkcase'),('ticket-activate','depend','ticket-browse'),('ticket-activate','recommend','ticket-batchActivate'),('ticket-assignTo','depend','ticket-browse'),('ticket-assignTo','recommend','ticket-batchAssignTo'),('ticket-assignTo','recommend','ticket-create'),('ticket-assignTo','recommend','ticket-edit'),('ticket-batchActivate','depend','ticket-browse'),('ticket-batchActivate','recommend','ticket-activate'),('ticket-batchAssignTo','depend','ticket-browse'),('ticket-batchAssignTo','recommend','ticket-assignTo'),('ticket-batchClose','depend','ticket-browse'),('ticket-batchClose','recommend','ticket-close'),('ticket-batchEdit','depend','ticket-browse'),('ticket-batchEdit','recommend','ticket-edit'),('ticket-batchFinish','depend','ticket-browse'),('ticket-batchFinish','recommend','ticket-finish'),('ticket-browse','recommend','ticket-create'),('ticket-browse','recommend','ticket-edit'),('ticket-browse','recommend','ticket-view'),('ticket-close','depend','ticket-browse'),('ticket-close','recommend','ticket-batchClose'),('ticket-close','recommend','ticket-edit'),('ticket-create','depend','ticket-browse'),('ticket-create','recommend','ticket-activate'),('ticket-create','recommend','ticket-close'),('ticket-create','recommend','ticket-edit'),('ticket-createBug','depend','ticket-browse'),('ticket-createBug','recommend','ticket-createStory'),('ticket-createBug','recommend','ticket-finish'),('ticket-createBug','recommend','ticket-start'),('ticket-createStory','depend','ticket-browse'),('ticket-createStory','recommend','ticket-createBug'),('ticket-createStory','recommend','ticket-finish'),('ticket-createStory','recommend','ticket-start'),('ticket-delete','depend','ticket-browse'),('ticket-delete','recommend','ticket-create'),('ticket-delete','recommend','ticket-edit'),('ticket-edit','depend','ticket-browse'),('ticket-edit','recommend','ticket-activate'),('ticket-edit','recommend','ticket-close'),('ticket-edit','recommend','ticket-create'),('ticket-export','depend','ticket-browse'),('ticket-exportTemplate','depend','ticket-browse'),('ticket-exportTemplate','depend','ticket-import'),('ticket-finish','depend','ticket-browse'),('ticket-finish','recommend','ticket-createBug'),('ticket-finish','recommend','ticket-createStory'),('ticket-finish','recommend','ticket-start'),('ticket-import','depend','ticket-browse'),('ticket-import','depend','ticket-exportTemplate'),('ticket-start','depend','ticket-browse'),('ticket-start','recommend','ticket-activate'),('ticket-start','recommend','ticket-assignTo'),('ticket-start','recommend','ticket-close'),('ticket-start','recommend','ticket-create'),('ticket-start','recommend','ticket-createBug'),('ticket-start','recommend','ticket-createStory'),('ticket-start','recommend','ticket-edit'),('ticket-start','recommend','ticket-finish'),('ticket-syncProduct','depend','ticket-browse'),('ticket-view','depend','ticket-browse'),('ticket-view','recommend','ticket-edit'),('todo-activate','depend','my-calendar'),('todo-activate','depend','my-index'),('todo-activate','depend','todo-view'),('todo-activate','recommend','todo-close'),('todo-assignTo','depend','my-calendar'),('todo-assignTo','depend','my-index'),('todo-assignTo','depend','todo-view'),('todo-batchClose','depend','my-calendar'),('todo-batchClose','depend','my-index'),('todo-batchClose','depend','todo-view'),('todo-batchCreate','depend','my-calendar'),('todo-batchCreate','depend','my-index'),('todo-batchCreate','depend','todo-view'),('todo-batchCreate','recommend','todo-create'),('todo-batchEdit','depend','my-calendar'),('todo-batchEdit','depend','my-index'),('todo-batchEdit','depend','todo-view'),('todo-batchEdit','recommend','todo-create'),('todo-batchEdit','recommend','todo-edit'),('todo-batchFinish','depend','my-calendar'),('todo-batchFinish','depend','my-index'),('todo-batchFinish','depend','todo-view'),('todo-batchFinish','recommend','todo-finish'),('todo-close','depend','my-calendar'),('todo-close','depend','my-index'),('todo-close','depend','todo-view'),('todo-close','recommend','todo-activate'),('todo-create','depend','my-calendar'),('todo-create','depend','my-index'),('todo-create','depend','todo-view'),('todo-create','recommend','todo-batchCreate'),('todo-createcycle','depend','my-calendar'),('todo-createcycle','depend','my-index'),('todo-createcycle','depend','todo-create'),('todo-createcycle','depend','todo-view'),('todo-delete','depend','my-calendar'),('todo-delete','depend','my-index'),('todo-delete','depend','todo-view'),('todo-edit','depend','my-calendar'),('todo-edit','depend','my-index'),('todo-edit','depend','todo-view'),('todo-edit','recommend','todo-batchEdit'),('todo-export','depend','my-calendar'),('todo-export','depend','my-index'),('todo-finish','depend','my-calendar'),('todo-finish','depend','my-index'),('todo-finish','depend','todo-view'),('todo-finish','recommend','todo-activate'),('todo-finish','recommend','todo-close'),('todo-import2Today','depend','my-calendar'),('todo-import2Today','depend','my-index'),('todo-start','depend','my-calendar'),('todo-start','depend','my-index'),('todo-start','depend','todo-view'),('todo-start','recommend','todo-activate'),('todo-start','recommend','todo-close'),('todo-start','recommend','todo-finish'),('todo-view','depend','my-calendar'),('todo-view','depend','my-index'),('todo-view','recommend','my-todo'),('traincourse-changeStatus','depend','traincourse-admin'),('traincourse-changeStatus','recommend','traincourse-uploadCourse'),('traincourse-deleteCourse','depend','traincourse-admin'),('traincourse-deleteCourse','recommend','traincourse-uploadCourse'),('traincourse-uploadCourse','depend','traincourse-admin'),('traincourse-uploadCourse','recommend','traincourse-deleteCourse'),('traincourse-viewChapter','depend','traincourse-browse'),('traincourse-viewChapter','depend','traincourse-viewCourse'),('traincourse-viewCourse','depend','traincourse-browse'),('trainplan-batchCreate','depend','trainplan-browse'),('trainplan-batchCreate','recommend','trainplan-create'),('trainplan-batchEdit','depend','trainplan-browse'),('trainplan-batchEdit','recommend','trainplan-edit'),('trainplan-batchFinish','depend','trainplan-browse'),('trainplan-batchFinish','recommend','trainplan-finish'),('trainplan-create','depend','trainplan-browse'),('trainplan-create','recommend','trainplan-delete'),('trainplan-create','recommend','trainplan-edit'),('trainplan-create','recommend','trainplan-finish'),('trainplan-create','recommend','trainplan-summary'),('trainplan-delete','depend','trainplan-view'),('trainplan-delete','recommend','trainplan-create'),('trainplan-delete','recommend','trainplan-edit'),('trainplan-edit','depend','trainplan-browse'),('trainplan-edit','recommend','trainplan-batchEdit'),('trainplan-edit','recommend','trainplan-create'),('trainplan-edit','recommend','trainplan-delete'),('trainplan-edit','recommend','trainplan-finish'),('trainplan-edit','recommend','trainplan-summary'),('trainplan-finish','depend','trainplan-browse'),('trainplan-finish','recommend','trainplan-batchFinish'),('trainplan-finish','recommend','trainplan-create'),('trainplan-finish','recommend','trainplan-delete'),('trainplan-finish','recommend','trainplan-edit'),('trainplan-finish','recommend','trainplan-summary'),('trainplan-summary','depend','trainplan-browse'),('trainplan-summary','recommend','trainplan-finish'),('trainplan-view','depend','trainplan-browse'),('tree-browse','depend','tree-edit'),('tree-browse','recommend','tree-delete'),('tree-browse','recommend','tree-manageChild'),('tree-browseTask','depend','tree-edit'),('tree-browseTask','recommend','tree-delete'),('tree-browseTask','recommend','tree-manageChild'),('tree-manageChild','depend','tree-edit'),('tree-manageChild','recommend','tree-delete'),('user-batchCreate','depend','admin-index'),('user-batchCreate','depend','admin-register'),('user-batchCreate','depend','company-browse'),('user-batchCreate','recommend','user-create'),('user-batchEdit','depend','admin-index'),('user-batchEdit','depend','admin-register'),('user-batchEdit','depend','company-browse'),('user-batchEdit','depend','user-view'),('user-batchEdit','recommend','user-edit'),('user-bug','depend','my-team'),('user-bug','depend','user-todo'),('user-bug','recommend','user-dynamic'),('user-bug','recommend','user-effort'),('user-bug','recommend','user-execution'),('user-bug','recommend','user-issue'),('user-bug','recommend','user-profile'),('user-bug','recommend','user-risk'),('user-bug','recommend','user-story'),('user-bug','recommend','user-task'),('user-bug','recommend','user-testCase'),('user-bug','recommend','user-testTask'),('user-create','depend','admin-index'),('user-create','depend','admin-register'),('user-create','depend','company-browse'),('user-create','recommend','user-batchCreate'),('user-create','recommend','user-delete'),('user-create','recommend','user-edit'),('user-create','recommend','user-unlock'),('user-delete','depend','admin-index'),('user-delete','depend','admin-register'),('user-delete','depend','company-browse'),('user-delete','depend','user-view'),('user-delete','recommend','user-create'),('user-delete','recommend','user-edit'),('user-delete','recommend','user-unlock'),('user-dynamic','depend','my-team'),('user-dynamic','depend','user-todo'),('user-dynamic','recommend','user-bug'),('user-dynamic','recommend','user-effort'),('user-dynamic','recommend','user-execution'),('user-dynamic','recommend','user-issue'),('user-dynamic','recommend','user-profile'),('user-dynamic','recommend','user-risk'),('user-dynamic','recommend','user-story'),('user-dynamic','recommend','user-task'),('user-dynamic','recommend','user-testCase'),('user-dynamic','recommend','user-testTask'),('user-edit','depend','admin-index'),('user-edit','depend','admin-register'),('user-edit','depend','company-browse'),('user-edit','depend','user-view'),('user-edit','recommend','user-batchEdit'),('user-edit','recommend','user-create'),('user-edit','recommend','user-delete'),('user-edit','recommend','user-unlock'),('user-effort','depend','my-team'),('user-effort','depend','user-todo'),('user-effort','recommend','user-bug'),('user-effort','recommend','user-dynamic'),('user-effort','recommend','user-execution'),('user-effort','recommend','user-issue'),('user-effort','recommend','user-profile'),('user-effort','recommend','user-risk'),('user-effort','recommend','user-story'),('user-effort','recommend','user-task'),('user-effort','recommend','user-testCase'),('user-effort','recommend','user-testTask'),('user-effortcalendar','depend','my-team'),('user-effortcalendar','depend','user-todo'),('user-execution','depend','my-team'),('user-execution','depend','user-todo'),('user-execution','recommend','user-bug'),('user-execution','recommend','user-dynamic'),('user-execution','recommend','user-effort'),('user-execution','recommend','user-issue'),('user-execution','recommend','user-profile'),('user-execution','recommend','user-risk'),('user-execution','recommend','user-story'),('user-execution','recommend','user-task'),('user-execution','recommend','user-testCase'),('user-execution','recommend','user-testTask'),('user-export','depend','company-browse'),('user-exportTemplate','depend','company-browse'),('user-exportTemplate','depend','user-import'),('user-import','depend','company-browse'),('user-import','depend','user-exportTemplate'),('user-importldap','depend','ldap-set'),('user-issue','depend','my-team'),('user-issue','depend','user-todo'),('user-issue','recommend','user-bug'),('user-issue','recommend','user-dynamic'),('user-issue','recommend','user-effort'),('user-issue','recommend','user-execution'),('user-issue','recommend','user-profile'),('user-issue','recommend','user-risk'),('user-issue','recommend','user-story'),('user-issue','recommend','user-task'),('user-issue','recommend','user-testCase'),('user-issue','recommend','user-testTask'),('user-profile','depend','my-team'),('user-profile','depend','user-todo'),('user-profile','recommend','user-bug'),('user-profile','recommend','user-dynamic'),('user-profile','recommend','user-effort'),('user-profile','recommend','user-execution'),('user-profile','recommend','user-issue'),('user-profile','recommend','user-risk'),('user-profile','recommend','user-story'),('user-profile','recommend','user-task'),('user-profile','recommend','user-testCase'),('user-profile','recommend','user-testTask'),('user-risk','depend','my-team'),('user-risk','depend','user-todo'),('user-risk','recommend','user-bug'),('user-risk','recommend','user-dynamic'),('user-risk','recommend','user-effort'),('user-risk','recommend','user-execution'),('user-risk','recommend','user-issue'),('user-risk','recommend','user-profile'),('user-risk','recommend','user-story'),('user-risk','recommend','user-task'),('user-risk','recommend','user-testCase'),('user-risk','recommend','user-testTask'),('user-story','depend','my-team'),('user-story','depend','user-todo'),('user-story','recommend','user-bug'),('user-story','recommend','user-dynamic'),('user-story','recommend','user-effort'),('user-story','recommend','user-execution'),('user-story','recommend','user-issue'),('user-story','recommend','user-profile'),('user-story','recommend','user-risk'),('user-story','recommend','user-task'),('user-story','recommend','user-testCase'),('user-story','recommend','user-testTask'),('user-task','depend','my-team'),('user-task','depend','user-todo'),('user-task','recommend','user-bug'),('user-task','recommend','user-dynamic'),('user-task','recommend','user-effort'),('user-task','recommend','user-execution'),('user-task','recommend','user-issue'),('user-task','recommend','user-profile'),('user-task','recommend','user-risk'),('user-task','recommend','user-story'),('user-task','recommend','user-testCase'),('user-task','recommend','user-testTask'),('user-testCase','depend','my-team'),('user-testCase','depend','user-todo'),('user-testCase','recommend','user-bug'),('user-testCase','recommend','user-dynamic'),('user-testCase','recommend','user-effort'),('user-testCase','recommend','user-execution'),('user-testCase','recommend','user-issue'),('user-testCase','recommend','user-profile'),('user-testCase','recommend','user-risk'),('user-testCase','recommend','user-story'),('user-testCase','recommend','user-task'),('user-testCase','recommend','user-testTask'),('user-testTask','depend','my-team'),('user-testTask','depend','user-todo'),('user-testTask','recommend','user-bug'),('user-testTask','recommend','user-dynamic'),('user-testTask','recommend','user-effort'),('user-testTask','recommend','user-execution'),('user-testTask','recommend','user-issue'),('user-testTask','recommend','user-profile'),('user-testTask','recommend','user-risk'),('user-testTask','recommend','user-story'),('user-testTask','recommend','user-task'),('user-testTask','recommend','user-testCase'),('user-todo','depend','my-team'),('user-todo','recommend','user-bug'),('user-todo','recommend','user-dynamic'),('user-todo','recommend','user-effort'),('user-todo','recommend','user-effortcalendar'),('user-todo','recommend','user-execution'),('user-todo','recommend','user-issue'),('user-todo','recommend','user-profile'),('user-todo','recommend','user-risk'),('user-todo','recommend','user-story'),('user-todo','recommend','user-task'),('user-todo','recommend','user-testCase'),('user-todo','recommend','user-testTask'),('user-todo','recommend','user-todocalendar'),('user-todocalendar','depend','my-team'),('user-todocalendar','depend','user-todo'),('user-unbind','depend','admin-index'),('user-unbind','depend','admin-register'),('user-unlock','depend','admin-index'),('user-unlock','depend','admin-register'),('user-unlock','depend','company-browse'),('user-unlock','depend','user-view'),('user-unlock','recommend','user-create'),('user-unlock','recommend','user-delete'),('user-unlock','recommend','user-edit'),('user-view','depend','admin-index'),('user-view','depend','admin-register'),('user-view','depend','company-browse'),('webhook-bind','depend','webhook-chooseDept'),('webhook-chooseDept','depend','webhook-browse'),('webhook-chooseDept','recommend','webhook-create'),('webhook-chooseDept','recommend','webhook-delete'),('webhook-chooseDept','recommend','webhook-edit'),('webhook-create','depend','webhook-browse'),('webhook-create','recommend','webhook-bind'),('webhook-create','recommend','webhook-chooseDept'),('webhook-create','recommend','webhook-delete'),('webhook-create','recommend','webhook-edit'),('webhook-create','recommend','webhook-log'),('webhook-delete','depend','webhook-browse'),('webhook-delete','recommend','webhook-bind'),('webhook-delete','recommend','webhook-chooseDept'),('webhook-delete','recommend','webhook-create'),('webhook-delete','recommend','webhook-edit'),('webhook-delete','recommend','webhook-log'),('webhook-edit','depend','webhook-browse'),('webhook-edit','recommend','webhook-bind'),('webhook-edit','recommend','webhook-chooseDept'),('webhook-edit','recommend','webhook-create'),('webhook-edit','recommend','webhook-delete'),('webhook-edit','recommend','webhook-log'),('webhook-log','depend','webhook-browse'),('webhook-log','recommend','webhook-bind'),('webhook-log','recommend','webhook-chooseDept'),('webhook-log','recommend','webhook-create'),('webhook-log','recommend','webhook-delete'),('webhook-log','recommend','webhook-edit'),('weekly-exportweeklyreport','depend','weekly-index'),('weekly-exportweeklyreport','recommend','weekly-index'),('weekly-index','depend','project-index'),('workestimation-index','depend','project-index'),('workflow-activate','depend','workflow-browseFlow'),('workflow-backup','depend','workflow-browseFlow'),('workflow-browseDB','depend','workflow-browseFlow'),('workflow-copy','depend','workflow-browseFlow'),('workflow-create','depend','workflow-browseFlow'),('workflow-deactivate','depend','workflow-browseFlow'),('workflow-delete','depend','workflow-browseFlow'),('workflow-edit','depend','workflow-browseFlow'),('workflow-flowchart','depend','workflow-browseFlow'),('workflow-release','depend','workflow-browseFlow'),('workflow-setApproval','depend','workflow-browseFlow'),('workflow-setCSS','depend','workflow-browseFlow'),('workflow-setJS','depend','workflow-browseFlow'),('workflow-ui','depend','workflow-browseFlow'),('workflow-upgrade','depend','workflow-browseFlow'),('workflow-view','depend','workflow-browseFlow'),('workflowaction-browse','depend','workflow-browseFlow'),('workflowaction-create','depend','workflow-browseFlow'),('workflowaction-delete','depend','workflow-browseFlow'),('workflowaction-edit','depend','workflow-browseFlow'),('workflowaction-setCSS','depend','workflow-browseFlow'),('workflowaction-setJS','depend','workflow-browseFlow'),('workflowaction-setNotice','depend','workflow-browseFlow'),('workflowaction-setVerification','depend','workflow-browseFlow'),('workflowaction-sort','depend','workflow-browseFlow'),('workflowaction-view','depend','workflow-browseFlow'),('workflowcondition-browse','depend','workflow-browseFlow'),('workflowcondition-create','depend','workflow-browseFlow'),('workflowcondition-delete','depend','workflow-browseFlow'),('workflowcondition-edit','depend','workflow-browseFlow'),('workflowdatasource-browse','depend','workflow-browseFlow'),('workflowdatasource-create','depend','workflow-browseFlow'),('workflowdatasource-delete','depend','workflow-browseFlow'),('workflowdatasource-edit','depend','workflow-browseFlow'),('workflowfield-browse','depend','workflow-browseFlow'),('workflowfield-create','depend','workflow-browseFlow'),('workflowfield-delete','depend','workflow-browseFlow'),('workflowfield-edit','depend','workflow-browseFlow'),('workflowfield-exportTemplate','depend','workflow-browseFlow'),('workflowfield-import','depend','workflow-browseFlow'),('workflowfield-setExport','depend','workflow-browseFlow'),('workflowfield-setSearch','depend','workflow-browseFlow'),('workflowfield-setValue','depend','workflow-browseFlow'),('workflowfield-showImport','depend','workflow-browseFlow'),('workflowfield-sort','depend','workflow-browseFlow'),('workflowhook-browse','depend','workflow-browseFlow'),('workflowhook-create','depend','workflow-browseFlow'),('workflowhook-delete','depend','workflow-browseFlow'),('workflowhook-edit','depend','workflow-browseFlow'),('workflowlabel-browse','depend','workflow-browseFlow'),('workflowlabel-create','depend','workflow-browseFlow'),('workflowlabel-delete','depend','workflow-browseFlow'),('workflowlabel-edit','depend','workflow-browseFlow'),('workflowlabel-sort','depend','workflow-browseFlow'),('workflowlayout-admin','depend','workflow-browseFlow'),('workflowlayout-block','depend','workflow-browseFlow'),('workflowlinkage-browse','depend','workflow-browseFlow'),('workflowlinkage-create','depend','workflow-browseFlow'),('workflowlinkage-delete','depend','workflow-browseFlow'),('workflowlinkage-edit','depend','workflow-browseFlow'),('workflowrelation-admin','depend','workflow-browseFlow'),('workflowreport-browse','depend','workflow-browseFlow'),('workflowreport-create','depend','workflow-browseFlow'),('workflowreport-delete','depend','workflow-browseFlow'),('workflowreport-edit','depend','workflow-browseFlow'),('workflowreport-sort','depend','workflow-browseFlow'),('workflowrule-browse','depend','workflow-browseFlow'),('workflowrule-create','depend','workflow-browseFlow'),('workflowrule-delete','depend','workflow-browseFlow'),('workflowrule-edit','depend','workflow-browseFlow'),('workflowrule-view','depend','workflow-browseFlow'),('zahost-browse','depend','qa-index'),('zahost-browse','recommend','zahost-view'),('zahost-browseImage','depend','zahost-browse'),('zahost-cancelDownload','depend','zahost-downloadImage'),('zahost-create','depend','zahost-browse'),('zahost-create','recommend','zahost-edit'),('zahost-delete','depend','zahost-browse'),('zahost-downloadImage','depend','zahost-browseImage'),('zahost-downloadImage','depend','zahost-cancelDownload'),('zahost-edit','depend','zahost-browse'),('zahost-edit','recommend','zahost-create'),('zahost-view','depend','zahost-browse'),('zanode-browse','depend','qa-index'),('zanode-browse','recommend','zanode-view'),('zanode-browseSnapshot','depend','zanode-view'),('zanode-close','depend','zanode-browse'),('zanode-close','depend','zanode-view'),('zanode-close','recommend','zanode-create'),('zanode-close','recommend','zanode-edit'),('zanode-close','recommend','zanode-getVNC'),('zanode-close','recommend','zanode-reboot'),('zanode-close','recommend','zanode-resume'),('zanode-close','recommend','zanode-start'),('zanode-close','recommend','zanode-suspend'),('zanode-create','depend','zanode-browse'),('zanode-create','depend','zanode-view'),('zanode-create','recommend','zanode-close'),('zanode-create','recommend','zanode-edit'),('zanode-create','recommend','zanode-getVNC'),('zanode-create','recommend','zanode-reboot'),('zanode-create','recommend','zanode-resume'),('zanode-create','recommend','zanode-start'),('zanode-create','recommend','zanode-suspend'),('zanode-createImage','depend','zanode-browse'),('zanode-createSnapshot','depend','zanode-browse'),('zanode-createSnapshot','depend','zanode-view'),('zanode-createSnapshot','recommend','zanode-editSnapshot'),('zanode-deleteSnapshot','depend','zanode-browseSnapshot'),('zanode-destroy','depend','zanode-browse'),('zanode-destroy','depend','zanode-view'),('zanode-edit','depend','zanode-browse'),('zanode-edit','depend','zanode-view'),('zanode-edit','recommend','zanode-close'),('zanode-edit','recommend','zanode-create'),('zanode-edit','recommend','zanode-getVNC'),('zanode-edit','recommend','zanode-reboot'),('zanode-edit','recommend','zanode-resume'),('zanode-edit','recommend','zanode-start'),('zanode-edit','recommend','zanode-suspend'),('zanode-editSnapshot','depend','zanode-browseSnapshot'),('zanode-editSnapshot','recommend','zanode-createSnapshot'),('zanode-getVNC','depend','zanode-browse'),('zanode-getVNC','depend','zanode-view'),('zanode-getVNC','recommend','zanode-close'),('zanode-getVNC','recommend','zanode-create'),('zanode-getVNC','recommend','zanode-edit'),('zanode-getVNC','recommend','zanode-reboot'),('zanode-getVNC','recommend','zanode-resume'),('zanode-getVNC','recommend','zanode-start'),('zanode-getVNC','recommend','zanode-suspend'),('zanode-reboot','depend','zanode-browse'),('zanode-reboot','depend','zanode-view'),('zanode-reboot','recommend','zanode-close'),('zanode-reboot','recommend','zanode-create'),('zanode-reboot','recommend','zanode-edit'),('zanode-reboot','recommend','zanode-getVNC'),('zanode-reboot','recommend','zanode-resume'),('zanode-reboot','recommend','zanode-start'),('zanode-reboot','recommend','zanode-suspend'),('zanode-restoreSnapshot','depend','zanode-browseSnapshot'),('zanode-resume','depend','zanode-browse'),('zanode-resume','depend','zanode-view'),('zanode-resume','recommend','zanode-close'),('zanode-resume','recommend','zanode-create'),('zanode-resume','recommend','zanode-edit'),('zanode-resume','recommend','zanode-getVNC'),('zanode-resume','recommend','zanode-reboot'),('zanode-resume','recommend','zanode-start'),('zanode-resume','recommend','zanode-suspend'),('zanode-start','depend','zanode-browse'),('zanode-start','depend','zanode-view'),('zanode-start','recommend','zanode-close'),('zanode-start','recommend','zanode-create'),('zanode-start','recommend','zanode-edit'),('zanode-start','recommend','zanode-getVNC'),('zanode-start','recommend','zanode-reboot'),('zanode-start','recommend','zanode-resume'),('zanode-start','recommend','zanode-suspend'),('zanode-suspend','depend','zanode-browse'),('zanode-suspend','depend','zanode-view'),('zanode-suspend','recommend','zanode-close'),('zanode-suspend','recommend','zanode-create'),('zanode-suspend','recommend','zanode-edit'),('zanode-suspend','recommend','zanode-getVNC'),('zanode-suspend','recommend','zanode-reboot'),('zanode-suspend','recommend','zanode-resume'),('zanode-suspend','recommend','zanode-start'),('zanode-view','depend','zanode-browse'),('zoutput-batchCreate','depend','zoutput-browse'),('zoutput-batchCreate','recommend','zoutput-create'),('zoutput-batchEdit','depend','zoutput-browse'),('zoutput-batchEdit','recommend','zoutput-edit'),('zoutput-create','depend','zoutput-browse'),('zoutput-create','recommend','zoutput-batchCreate'),('zoutput-create','recommend','zoutput-delete'),('zoutput-create','recommend','zoutput-edit'),('zoutput-create','recommend','zoutput-updateOrder'),('zoutput-create','recommend','zoutput-view'),('zoutput-delete','depend','zoutput-browse'),('zoutput-delete','recommend','zoutput-create'),('zoutput-edit','depend','zoutput-browse'),('zoutput-edit','recommend','zoutput-batchEdit'),('zoutput-edit','recommend','zoutput-create'),('zoutput-edit','recommend','zoutput-delete'),('zoutput-edit','recommend','zoutput-updateOrder'),('zoutput-edit','recommend','zoutput-view'),('zoutput-updateOrder','depend','zoutput-browse'),('zoutput-updateOrder','recommend','zoutput-create'),('zoutput-updateOrder','recommend','zoutput-edit'),('zoutput-view','depend','zoutput-browse'); + +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2116, 'file', 'preview', '260', ',open,biz,max,ipd,', ',rnd,lite,or,', '1', '26'); +REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2116, 'priv', 'de', 'file-previewFile', '', ''); +REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2116, 'priv', 'en', 'file-previewFile', '', ''); +REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2116, 'priv', 'fr', 'file-previewFile', '', ''); +REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2116, 'priv', 'zh-cn', 'file-previewFile', '', ''); +REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2116, 'priv', 'zh-tw', 'file-previewFile', '', ''); + +REPLACE INTO `zt_grouppriv` (SELECT `group`,'file','preview' FROM zt_grouppriv WHERE module = 'file' AND method = 'download'); +DELETE FROM zt_privrelation WHERE `priv` = 'branch-manage' AND relationPriv = 'product-create'; +DELETE FROM zt_privrelation WHERE `priv` = 'branch-manage' AND relationPriv = 'product-edit'; + +UPDATE `zt_cron` SET `type` = 'zentao' WHERE `command` = 'moduleName=weekly&methodName=computeWeekly' AND `type` = 'system'; + +ALTER TABLE `zt_doc` ADD `editedList` text NULL; + +CREATE INDEX `scene` ON `zt_case`(`scene`); +UPDATE `zt_case` SET `sort` = `id` WHERE `sort` = 0; +UPDATE `zt_case` SET `scene` = `scene` - 100000000 WHERE `scene` > 100000000; +UPDATE `zt_scene` SET `sort` = `sort` - 100000000 WHERE `sort` > 100000000; +UPDATE `zt_scene` SET `parent` = `parent` - 100000000 WHERE `parent` > 100000000; +UPDATE `zt_scene` SET `path` = REPLACE(`path`, ',10000000', ','); +UPDATE `zt_scene` SET `path` = REPLACE(`path`, ',1000000', ','); +UPDATE `zt_scene` SET `path` = REPLACE(`path`, ',100000', ','); +UPDATE `zt_scene` SET `path` = REPLACE(`path`, ',10000', ','); + +DROP VIEW IF EXISTS `ztv_scenecase`; + +-- DROP TABLE IF EXISTS `zt_actionrecent`; +CREATE TABLE IF NOT EXISTS `zt_actionrecent` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` text NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `actor` varchar(100) NOT NULL DEFAULT '', + `action` varchar(80) NOT NULL DEFAULT '', + `date` datetime NULL, + `comment` text NULL, + `extra` text NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `efforted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE INDEX `date` ON `zt_actionrecent`(`date`); +CREATE INDEX `actor` ON `zt_actionrecent`(`actor`); +CREATE INDEX `project` ON `zt_actionrecent`(`project`); +CREATE INDEX `action` ON `zt_actionrecent`(`action`); +CREATE INDEX `objectID` ON `zt_actionrecent`(`objectID`); + +ALTER TABLE `zt_notify` ADD `toListCopy` text NULL; +UPDATE `zt_notify` SET `toListCopy` = `toList`; +ALTER TABLE `zt_notify` DROP `toList`; +ALTER TABLE `zt_notify` CHANGE COLUMN `toListCopy` `toList` text; + +ALTER TABLE `zt_notify` ADD `subjectCopy` text NULL; +UPDATE `zt_notify` SET `subjectCopy` = `subject`; +ALTER TABLE `zt_notify` DROP `subject`; +ALTER TABLE `zt_notify` CHANGE COLUMN `subjectCopy` `subject` text; + +DROP INDEX `objectType_toList_status` ON `zt_notify`; +CREATE INDEX `objectType` ON `zt_notify` (`objectType`); +CREATE INDEX `status` ON `zt_notify` (`status`); + +CREATE INDEX `deleted` ON `zt_bug` (`deleted`); +CREATE INDEX `product_status_deleted` ON `zt_bug` (`product`,`status`,`deleted`); + +UPDATE `zt_cron` SET `m` = '*/1' WHERE `m` = '*/5' AND `command` in ('moduleName=mail&methodName=asyncSend', 'moduleName=webhook&methodName=asyncSend') and `type` = 'zentao'; + +CREATE INDEX `type_order` ON `zt_project` (`type`,`order`); + +CREATE INDEX `vision` ON `zt_config`(`vision`); +CREATE INDEX `owner` ON `zt_config`(`owner`); +CREATE INDEX `module` ON `zt_config`(`module`); +CREATE INDEX `key` ON `zt_config`(`key`); + +UPDATE `zt_programoutput` SET `activity` = (SELECT `activity` FROM `zt_zoutput` WHERE `zt_programoutput`.`output` = `zt_zoutput`.`id`); + +ALTER TABLE `zt_reviewissue` ADD `opinionCopy` mediumtext NULL; +UPDATE `zt_reviewissue` SET `opinionCopy` = `opinion`; +ALTER TABLE `zt_reviewissue` DROP `opinion`; +ALTER TABLE `zt_reviewissue` CHANGE COLUMN `opinionCopy` `opinion` text; + +INSERT INTO `zt_actionrecent`(`objectType`,`objectID`,`product`,`project`,`execution`,`actor`,`action`,`date`,`comment`,`extra`,`read`,`vision`,`efforted`) +SELECT `objectType`,`objectID`,`product`,`project`,`execution`,`actor`,`action`,`date`,`comment`,`extra`,`read`,`vision`,`efforted` FROM `zt_action` +WHERE `date` >= DATE_SUB(NOW(), INTERVAL '1' MONTH); diff --git a/db/update18.6.sql b/db/update18.6.sql index 4484829d2a..13e1979afd 100644 --- a/db/update18.6.sql +++ b/db/update18.6.sql @@ -148,3 +148,250 @@ REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `d REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2122, 'priv', 'fr', 'ops-os', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2122, 'priv', 'zh-cn', 'ops-os', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2122, 'priv', 'zh-tw', 'ops-os', '', ''); + +CREATE TABLE IF NOT EXISTS `zt_prompt` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(20) NOT NULL, + `desc` text DEFAULT NULL, + `model` mediumint(8) unsigned DEFAULT NULL, + `module` varchar(30) DEFAULT NULL, + `source` text DEFAULT NULL, + `targetForm` varchar(30) DEFAULT NULL, + `purpose` text DEFAULT NULL, + `elaboration` text DEFAULT NULL, + `role` text DEFAULT NULL, + `characterization` text DEFAULT NULL, + `status` enum('draft','active','replaced') NOT NULL DEFAULT 'draft', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) DEFAULT NULL, + `editedDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `zt_promptrole` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + `desc` text DEFAULT NULL, + `model` mediumint(8) unsigned DEFAULT NULL, + `role` text DEFAULT NULL, + `characterization` text DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +REPLACE INTO + `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) +VALUES + (2117, 'ai', 'models', 653, ',open,biz,max,', ',rnd,', '1', 5), + (2118, 'ai', 'editModel', 653, ',open,biz,max,', ',rnd,', '1', 10), + (2119, 'ai', 'testConnection', 653, ',open,biz,max,', ',rnd,', '1', 15), + (2120, 'ai', 'createPrompt', 655, ',biz,max,', ',rnd,', '1', 20), + (2121, 'ai', 'promptEdit', 655, ',biz,max,', ',rnd,', '1', 25), + (2122, 'ai', 'promptDelete', 657, ',biz,max,', ',rnd,', '1', 30), + (2123, 'ai', 'promptAssignRole', 655, ',biz,max,', ',rnd,', '1', 35), + (2124, 'ai', 'promptSelectDataSource', 655, ',biz,max,', ',rnd,', '1', 40), + (2125, 'ai', 'promptSetPurpose', 655, ',biz,max,', ',rnd,', '1', 45), + (2126, 'ai', 'promptSetTargetForm', 655, ',biz,max,', ',rnd,', '1', 50), + (2127, 'ai', 'promptFinalize', 655, ',biz,max,', ',rnd,', '1', 55), + (2128, 'ai', 'promptAudit', 655, ',biz,max,', ',rnd,', '1', 60), + (2129, 'ai', 'promptPublish', 656, ',open,biz,max,', ',rnd,', '1', 65), + (2130, 'ai', 'promptUnpublish', 656, ',open,biz,max,', ',rnd,', '1', 70), + (2131, 'ai', 'prompts', 654, ',open,biz,max,', ',rnd,', '1', 75), + (2132, 'ai', 'promptView', 654, ',open,biz,max,', ',rnd,', '1', 80), + (2133, 'ai', 'promptExecute', 652, ',open,biz,max,', ',rnd,', '1', 85), + (2134, 'ai', 'roleTemplates', 655, ',biz,max,', ',rnd,', '1', 90), + (2135, 'ai', 'promptExecutionReset', 652, ',open,biz,max,', ',rnd,', '1', 95); + +REPLACE INTO + `zt_privmanager` (`id`, `parent`, `code`, `type`, `edition`, `vision`, `order`) +VALUES + (651, 457, 'ai', 'module', ',open,biz,max,', ',rnd,', 2020), + (652, 651, '', 'package', ',open,biz,max,', ',rnd,', 2040), + (653, 651, '', 'package', ',open,biz,max,', ',rnd,', 2060), + (654, 651, '', 'package', ',open,biz,max,', ',rnd,', 2080), + (655, 651, '', 'package', ',biz,max,', ',rnd,', 2100), + (656, 651, '', 'package', ',open,biz,max,', ',rnd,', 2120), + (657, 651, '', 'package', ',biz,max,', ',rnd,', 2140); + +REPLACE INTO + `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) +VALUES + (651, 'manager', 'zh-cn', '', 'AI', ''), + (652, 'manager', 'zh-cn', '', '执行提词', ''), + (653, 'manager', 'zh-cn', '', '语言模型管理', ''), + (654, 'manager', 'zh-cn', '', '浏览提词', ''), + (655, 'manager', 'zh-cn', '', '维护和设计提词', ''), + (656, 'manager', 'zh-cn', '', '提词上下架', ''), + (657, 'manager', 'zh-cn', '', '删除提词', ''), + (651, 'manager', 'zh-tw', '', 'AI', ''), + (652, 'manager', 'zh-tw', '', '執行提詞', ''), + (653, 'manager', 'zh-tw', '', '語言模型管理', ''), + (654, 'manager', 'zh-tw', '', '瀏覽提詞', ''), + (655, 'manager', 'zh-tw', '', '維護和設計提詞', ''), + (656, 'manager', 'zh-tw', '', '提詞上下架', ''), + (657, 'manager', 'zh-tw', '', '刪除提詞', ''), + (651, 'manager', 'en', '', 'AI', ''), + (652, 'manager', 'en', '', 'Execute Prompts', ''), + (653, 'manager', 'en', '', 'Manage Models', ''), + (654, 'manager', 'en', '', 'Browse Prompts', ''), + (655, 'manager', 'en', '', 'Manage and Design Prompts', ''), + (656, 'manager', 'en', '', 'Publish and Unpublish Prompts', ''), + (657, 'manager', 'en', '', 'Delete Prompts', ''), + (651, 'manager', 'de', '', 'AI', ''), + (652, 'manager', 'de', '', 'Execute Prompts', ''), + (653, 'manager', 'de', '', 'Manage Models', ''), + (654, 'manager', 'de', '', 'Browse Prompts', ''), + (655, 'manager', 'de', '', 'Manage and Design Prompts', ''), + (656, 'manager', 'de', '', 'Publish and Unpublish Prompts', ''), + (657, 'manager', 'de', '', 'Delete Prompts', ''), + (651, 'manager', 'fr', '', 'AI', ''), + (652, 'manager', 'fr', '', 'Execute Prompts', ''), + (653, 'manager', 'fr', '', 'Manage Models', ''), + (654, 'manager', 'fr', '', 'Browse Prompts', ''), + (655, 'manager', 'fr', '', 'Manage and Design Prompts', ''), + (656, 'manager', 'fr', '', 'Publish and Unpublish Prompts', ''), + (657, 'manager', 'fr', '', 'Delete Prompts', ''), + (2117, 'priv', 'zh-cn', 'ai-modelBrowse', '', ''), + (2118, 'priv', 'zh-cn', 'ai-modelEdit', '', ''), + (2119, 'priv', 'zh-cn', 'ai-modelTestConnection', '', ''), + (2120, 'priv', 'zh-cn', 'ai-promptCreate', '', ''), + (2121, 'priv', 'zh-cn', 'ai-promptEdit', '', ''), + (2122, 'priv', 'zh-cn', 'ai-promptDelete', '', ''), + (2123, 'priv', 'zh-cn', 'ai-promptAssignRole', '', ''), + (2124, 'priv', 'zh-cn', 'ai-promptSelectDataSource', '', ''), + (2125, 'priv', 'zh-cn', 'ai-promptSetPurpose', '', ''), + (2126, 'priv', 'zh-cn', 'ai-promptSetTargetForm', '', ''), + (2127, 'priv', 'zh-cn', 'ai-promptFinalize', '', ''), + (2128, 'priv', 'zh-cn', 'ai-promptAudit', '', ''), + (2129, 'priv', 'zh-cn', 'ai-promptPublish', '', ''), + (2130, 'priv', 'zh-cn', 'ai-promptUnpublish', '', ''), + (2131, 'priv', 'zh-cn', 'ai-promptBrowse', '', ''), + (2132, 'priv', 'zh-cn', 'ai-promptView', '', ''), + (2133, 'priv', 'zh-cn', 'ai-promptExecute', '', ''), + (2134, 'priv', 'zh-cn', 'ai-roleTemplates', '', ''), + (2135, 'priv', 'zh-cn', 'ai-promptExecutionReset', '', ''), + (2117, 'priv', 'zh-tw', 'ai-modelBrowse', '', ''), + (2118, 'priv', 'zh-tw', 'ai-modelEdit', '', ''), + (2119, 'priv', 'zh-tw', 'ai-modelTestConnection', '', ''), + (2120, 'priv', 'zh-tw', 'ai-promptCreate', '', ''), + (2121, 'priv', 'zh-tw', 'ai-promptEdit', '', ''), + (2122, 'priv', 'zh-tw', 'ai-promptDelete', '', ''), + (2123, 'priv', 'zh-tw', 'ai-promptAssignRole', '', ''), + (2124, 'priv', 'zh-tw', 'ai-promptSelectDataSource', '', ''), + (2125, 'priv', 'zh-tw', 'ai-promptSetPurpose', '', ''), + (2126, 'priv', 'zh-tw', 'ai-promptSetTargetForm', '', ''), + (2127, 'priv', 'zh-tw', 'ai-promptFinalize', '', ''), + (2128, 'priv', 'zh-tw', 'ai-promptAudit', '', ''), + (2129, 'priv', 'zh-tw', 'ai-promptPublish', '', ''), + (2130, 'priv', 'zh-tw', 'ai-promptUnpublish', '', ''), + (2131, 'priv', 'zh-tw', 'ai-promptBrowse', '', ''), + (2132, 'priv', 'zh-tw', 'ai-promptView', '', ''), + (2133, 'priv', 'zh-tw', 'ai-promptExecute', '', ''), + (2134, 'priv', 'zh-tw', 'ai-roleTemplates', '', ''), + (2135, 'priv', 'zh-tw', 'ai-promptExecutionReset', '', ''), + (2117, 'priv', 'en', 'ai-modelBrowse', '', ''), + (2118, 'priv', 'en', 'ai-modelEdit', '', ''), + (2119, 'priv', 'en', 'ai-modelTestConnection', '', ''), + (2120, 'priv', 'en', 'ai-promptCreate', '', ''), + (2121, 'priv', 'en', 'ai-promptEdit', '', ''), + (2122, 'priv', 'en', 'ai-promptDelete', '', ''), + (2123, 'priv', 'en', 'ai-promptAssignRole', '', ''), + (2124, 'priv', 'en', 'ai-promptSelectDataSource', '', ''), + (2125, 'priv', 'en', 'ai-promptSetPurpose', '', ''), + (2126, 'priv', 'en', 'ai-promptSetTargetForm', '', ''), + (2127, 'priv', 'en', 'ai-promptFinalize', '', ''), + (2128, 'priv', 'en', 'ai-promptAudit', '', ''), + (2129, 'priv', 'en', 'ai-promptPublish', '', ''), + (2130, 'priv', 'en', 'ai-promptUnpublish', '', ''), + (2131, 'priv', 'en', 'ai-promptBrowse', '', ''), + (2132, 'priv', 'en', 'ai-promptView', '', ''), + (2133, 'priv', 'en', 'ai-promptExecute', '', ''), + (2134, 'priv', 'en', 'ai-roleTemplates', '', ''), + (2135, 'priv', 'en', 'ai-promptExecutionReset', '', ''), + (2117, 'priv', 'de', 'ai-modelBrowse', '', ''), + (2118, 'priv', 'de', 'ai-modelEdit', '', ''), + (2119, 'priv', 'de', 'ai-modelTestConnection', '', ''), + (2120, 'priv', 'de', 'ai-promptCreate', '', ''), + (2121, 'priv', 'de', 'ai-promptEdit', '', ''), + (2122, 'priv', 'de', 'ai-promptDelete', '', ''), + (2123, 'priv', 'de', 'ai-promptAssignRole', '', ''), + (2124, 'priv', 'de', 'ai-promptSelectDataSource', '', ''), + (2125, 'priv', 'de', 'ai-promptSetPurpose', '', ''), + (2126, 'priv', 'de', 'ai-promptSetTargetForm', '', ''), + (2127, 'priv', 'de', 'ai-promptFinalize', '', ''), + (2128, 'priv', 'de', 'ai-promptAudit', '', ''), + (2129, 'priv', 'de', 'ai-promptPublish', '', ''), + (2130, 'priv', 'de', 'ai-promptUnpublish', '', ''), + (2131, 'priv', 'de', 'ai-promptBrowse', '', ''), + (2132, 'priv', 'de', 'ai-promptView', '', ''), + (2133, 'priv', 'de', 'ai-promptExecute', '', ''), + (2134, 'priv', 'de', 'ai-roleTemplates', '', ''), + (2135, 'priv', 'de', 'ai-promptExecutionReset', '', ''), + (2117, 'priv', 'fr', 'ai-modelBrowse', '', ''), + (2118, 'priv', 'fr', 'ai-modelEdit', '', ''), + (2119, 'priv', 'fr', 'ai-modelTestConnection', '', ''), + (2120, 'priv', 'fr', 'ai-promptCreate', '', ''), + (2121, 'priv', 'fr', 'ai-promptEdit', '', ''), + (2122, 'priv', 'fr', 'ai-promptDelete', '', ''), + (2123, 'priv', 'fr', 'ai-promptAssignRole', '', ''), + (2124, 'priv', 'fr', 'ai-promptSelectDataSource', '', ''), + (2125, 'priv', 'fr', 'ai-promptSetPurpose', '', ''), + (2126, 'priv', 'fr', 'ai-promptSetTargetForm', '', ''), + (2127, 'priv', 'fr', 'ai-promptFinalize', '', ''), + (2128, 'priv', 'fr', 'ai-promptAudit', '', ''), + (2129, 'priv', 'fr', 'ai-promptPublish', '', ''), + (2130, 'priv', 'fr', 'ai-promptUnpublish', '', ''), + (2131, 'priv', 'fr', 'ai-promptBrowse', '', ''), + (2132, 'priv', 'fr', 'ai-promptView', '', ''), + (2133, 'priv', 'fr', 'ai-promptExecute', '', ''), + (2134, 'priv', 'fr', 'ai-roleTemplates', '', ''), + (2135, 'priv', 'zh-cn', 'ai-promptExecutionReset', '', ''); + +REPLACE INTO + `zt_privrelation` (`priv`, `type`, `relationPriv`) +VALUES + ('ai-editModel', 'depend', 'ai-models'), ('ai-editModel', 'depend', 'ai-testConnection'), + ('ai-testConnection', 'depend', 'ai-models'), ('ai-testConnection', 'depend', 'ai-editModel'), + ('ai-promptView', 'depend', 'ai-prompts'), + ('ai-createPrompt', 'depend', 'ai-prompts'), ('ai-createPrompt', 'depend', 'ai-promptView'), + ('ai-promptEdit', 'depend', 'ai-prompts'), ('ai-promptEdit', 'depend', 'ai-promptView'), + ('ai-promptDelete', 'depend', 'ai-prompts'), ('ai-promptDelete', 'depend', 'ai-promptView'), + ('ai-promptAssignRole', 'depend', 'ai-prompts'), ('ai-promptAssignRole', 'depend', 'ai-promptView'), + ('ai-promptSelectDataSource', 'depend', 'ai-prompts'), ('ai-promptSelectDataSource', 'depend', 'ai-promptView'), + ('ai-promptSetPurpose', 'depend', 'ai-prompts'), ('ai-promptSetPurpose', 'depend', 'ai-promptView'), + ('ai-promptSetTargetForm', 'depend', 'ai-prompts'), ('ai-promptSetTargetForm', 'depend', 'ai-promptView'), + ('ai-promptFinalize', 'depend', 'ai-prompts'), ('ai-promptFinalize', 'depend', 'ai-promptView'), + ('ai-promptAudit', 'depend', 'ai-prompts'), ('ai-promptAudit', 'depend', 'ai-promptView'), + ('ai-promptPublish', 'depend', 'ai-prompts'), ('ai-promptPublish', 'depend', 'ai-promptView'), + ('ai-promptUnpublish', 'depend', 'ai-prompts'), ('ai-promptUnpublish', 'depend', 'ai-promptView'), + ('ai-promptEdit', 'depend', 'ai-createPrompt'), ('ai-promptAssignRole', 'depend', 'ai-createPrompt'), ('ai-promptSelectDataSource', 'depend', 'ai-createPrompt'), ('ai-promptSetPurpose', 'depend', 'ai-createPrompt'), ('ai-promptSetTargetForm', 'depend', 'ai-createPrompt'), ('ai-promptFinalize', 'depend', 'ai-createPrompt'), ('ai-promptAudit', 'depend', 'ai-createPrompt'), + ('ai-createPrompt', 'recommend', 'ai-promptEdit'), + ('ai-createPrompt', 'recommend', 'ai-promptDelete'), + ('ai-createPrompt', 'recommend', 'ai-promptAssignRole'), ('ai-createPrompt', 'recommend', 'ai-promptSelectDataSource'), ('ai-createPrompt', 'recommend', 'ai-promptSetPurpose'), ('ai-createPrompt', 'recommend', 'ai-promptSetTargetForm'), ('ai-createPrompt', 'recommend', 'ai-promptFinalize'), ('ai-createPrompt', 'recommend', 'ai-promptAudit'), + ('ai-promptAssignRole', 'depend', 'ai-promptSelectDataSource'), ('ai-promptAssignRole', 'depend', 'ai-promptSetPurpose'), ('ai-promptAssignRole', 'depend', 'ai-promptSetTargetForm'), ('ai-promptAssignRole', 'depend', 'ai-promptFinalize'), ('ai-promptAssignRole', 'depend', 'ai-promptAudit'), ('ai-promptAssignRole', 'depend', 'ai-promptExecute'), + ('ai-promptSelectDataSource', 'depend', 'ai-promptAssignRole'), ('ai-promptSelectDataSource', 'depend', 'ai-promptSetPurpose'), ('ai-promptSelectDataSource', 'depend', 'ai-promptSetTargetForm'), ('ai-promptSelectDataSource', 'depend', 'ai-promptFinalize'), ('ai-promptSelectDataSource', 'depend', 'ai-promptAudit'), ('ai-promptSelectDataSource', 'depend', 'ai-promptExecute'), + ('ai-promptSetPurpose', 'depend', 'ai-promptAssignRole'), ('ai-promptSetPurpose', 'depend', 'ai-promptSelectDataSource'), ('ai-promptSetPurpose', 'depend', 'ai-promptSetTargetForm'), ('ai-promptSetPurpose', 'depend', 'ai-promptFinalize'), ('ai-promptSetPurpose', 'depend', 'ai-promptAudit'), ('ai-promptSetPurpose', 'depend', 'ai-promptExecute'), + ('ai-promptSetTargetForm', 'depend', 'ai-promptAssignRole'), ('ai-promptSetTargetForm', 'depend', 'ai-promptSelectDataSource'), ('ai-promptSetTargetForm', 'depend', 'ai-promptSetPurpose'), ('ai-promptSetTargetForm', 'depend', 'ai-promptFinalize'), ('ai-promptSetTargetForm', 'depend', 'ai-promptAudit'), ('ai-promptSetTargetForm', 'depend', 'ai-promptExecute'), + ('ai-promptFinalize', 'depend', 'ai-promptAssignRole'), ('ai-promptFinalize', 'depend', 'ai-promptSelectDataSource'), ('ai-promptFinalize', 'depend', 'ai-promptSetPurpose'), ('ai-promptFinalize', 'depend', 'ai-promptSetTargetForm'), ('ai-promptFinalize', 'depend', 'ai-promptAudit'), ('ai-promptFinalize', 'depend', 'ai-promptExecute'), + ('ai-promptAudit', 'depend', 'ai-promptAssignRole'), ('ai-promptAudit', 'depend', 'ai-promptSelectDataSource'), ('ai-promptAudit', 'depend', 'ai-promptSetPurpose'), ('ai-promptAudit', 'depend', 'ai-promptSetTargetForm'), ('ai-promptAudit', 'depend', 'ai-promptFinalize'), ('ai-promptAudit', 'depend', 'ai-promptExecute'), + ('ai-roleTemplates', 'depend', 'ai-promptAssignRole'), ('ai-promptAssignRole', 'depend', 'ai-roleTemplates'), + ('ai-promptExecutionReset', 'depend', 'ai-promptExecute'), ('ai-promptExecute', 'depend', 'ai-promptExecutionReset'); + +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。'); +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('你是一名经验丰富的开发工程师。', '精通多种编程语言和框架、熟悉前后端技术和架构、擅长性能优化和安全防护、熟悉云计算和容器化技术、能够协调多人协作和项目管理。'); +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('作为一名资深的测试工程师。', '测试工程师应该是专业且严谨的。熟悉测试流程和方法,精通自动化测试和性能测试,能够设计和编写测试用例和测试脚本,擅长问题诊断和分析,熟悉敏捷开发和持续集成,能够协调多部门合作和项目管理。'); +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('假如你是一名资深的QA工程师。', '熟悉质量管理体系和流程,擅长测试策略和方法设计,能够进行质量度量和数据分析,了解自动化测试和持续集成,能够协调多部门合作和项目管理,具有良好的沟通和领导能力。'); +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('你是一名文章写得很好的文案编辑。', '文笔流畅、条理清晰。精通广告文案写作和编辑,擅长创意思维和品牌策略,能够进行市场调研和竞品分析,具有敏锐的审美和语言表达能力,能够协调多部门合作和项目管理,具有良好的沟通和协调能力。'); +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('请你扮演一名经验丰富的项目经理。', '具备项目计划制定、进度管理、成本控制、团队管理、沟通协调、风险管理、质量控制、敏捷开发、互联网技术和数据分析等多方面的技能和能力。'); +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES ('你是一个自回归的语言模型,已经通过instruction-tuning和RLHF进行了Fine-tuning。', '你仔细地提供准确、事实、深思熟虑、细致入微的答案,并在推理方面表现出色。如果你认为可能没有正确的答案,你会直接说出来。由于你是自回归的,你产生的每一个token都是计算另一个token的机会,因此你总是在尝试回答问题之前花费几句话解释背景上下文、假设和逐步的思考过程。您的用户是AI和伦理学的专家,所以他们已经知道您是一个语言模型以及您的能力和局限性,所以不需要再提醒他们。他们一般都熟悉伦理问题,所以您也不需要再提醒他们。在回答时不要啰嗦,但在可能有助于解释的地方提供详细信息和示例。'); + +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES ('需求润色', 0, 'story', ',story.title,story.spec,story.verify,story.product,story.module,story.pri,story.category,story.estimate,', 'story.change', '帮忙优化其中各字段的表述,使表述清晰准确。必要时可以修改需求使其更加合理。', '需求描述格式建议使用:作为一名<某种类型的用户>,我希望<达成某些目的>,这样可以<开发的价值>。验收标准建议列举多条。', '请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。', 'system', '2023-08-10 13:24:14'); +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES ('一键拆用例', 0, 'story', ',story.title,story.spec,story.verify,story.product,story.module,story.pri,story.category,story.estimate,', 'story.testcasecreate', '为这个需求生成一个或多个对应的测试用例。', '', '作为一名资深的测试工程师。', '熟悉测试流程和方法,精通自动化测试和性能测试,能够设计和编写测试用例和测试脚本,擅长问题诊断和分析,熟悉敏捷开发和持续集成,能够协调多部门合作和项目管理。开发工程师应该是专业且严谨的。', 'system', '2023-08-10 13:24:14'); +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES ('任务润色', 0, 'task', ',task.name,task.desc,task.pri,task.status,task.estimate,task.consumed,task.left,task.progress,task.estStarted,task.realStarted,', 'task.edit', '优化其中各字段的表述,使表述清晰准确,明确任务目标。', '必要时指出任务的风险点。', '你是一名经验丰富的开发工程师。', '精通多种编程语言和框架、熟悉前后端技术和架构、擅长性能优化和安全防护、熟悉云计算和容器化技术、能够协调多人协作和项目管理。', 'system', '2023-08-10 13:24:14'); +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES ('需求转任务', 0, 'story', ',story.title,story.spec,story.verify,story.product,story.module,story.pri,story.category,story.estimate,', 'story.totask', '将需求转化为对应的开发任务要求。', '', '请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。同时精通多种编程语言和框架、熟悉前后端技术。', 'system', '2023-08-10 13:24:14'); +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES ('Bug转需求', 0, 'bug', ',bug.title,bug.steps,bug.severity,bug.pri,bug.status,bug.confirmed,bug.type,', 'bug.story/create', '将bug转换为产品需求,表述清晰准确。', '需求描述格式建议使用:作为一名<某种类型的用户>,我希望<达成某些目的>,这样可以<开发的价值>。验收标准建议列举多条。', '请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。', 'system', '2023-08-10 13:24:14'); +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES ('Bug润色', 0, 'bug', ',bug.title,bug.steps,bug.severity,bug.pri,bug.status,bug.confirmed,bug.type,', 'bug.edit', '优化其中各字段的表述,使表述清晰准确。', 'Bug描述格式建议使用:[步骤]<一步一步复现Bug的步骤>[结果][期望]', '作为一名资深的测试工程师。', '熟悉测试流程和方法,精通自动化测试和性能测试,能够设计和编写测试用例和测试脚本,擅长问题诊断和分析,熟悉敏捷开发和持续集成,能够协调多部门合作和项目管理。开发工程师应该是专业且严谨的。', 'system', '2023-08-10 13:24:14'); + +ALTER TABLE `zt_ticket` ADD `subStatus` varchar(30) NOT NULL DEFAULT ''; diff --git a/db/updateipdinstall.sql b/db/updateipdinstall.sql index c9ef529c95..fb55078cfd 100644 --- a/db/updateipdinstall.sql +++ b/db/updateipdinstall.sql @@ -1,104 +1,110 @@ CREATE TABLE `zt_demandpool` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `desc` mediumtext NOT NULL, - `status` char(30) NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` date NOT NULL, - `owner` text NOT NULL, - `reviewer` text NOT NULL, - `acl` char(30) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `desc` mediumtext NULL, + `status` char(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` date NULL, + `owner` text NULL, + `reviewer` text NULL, + `acl` char(30) NULL, `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `zt_demand` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `pool` int(8) NOT NULL, - `module` int(8) NOT NULL, - `product` mediumint(8) NOT NULL, - `parent` mediumint(8) NOT NULL, - `pri` char(30) NOT NULL, - `category` char(30) NOT NULL, - `source` char(30) NOT NULL, - `sourceNote` varchar(255) NOT NULL, - `title` varchar(255) NOT NULL, - `feedbackedBy` varchar(255) NOT NULL, - `email` varchar(255) NOT NULL, - `assignedTo` char(30) NOT NULL, - `assignedDate` datetime NOT NULL, - `reviewedBy` text NOT NULL, - `reviewedDate` datetime NOT NULL, - `status` char(30) NOT NULL, - `duration` char(30) NOT NULL, - `BSA` char(30) NOT NULL, - `story` mediumint(8) NOT NULL, - `roadmap` mediumint(8) NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` datetime NOT NULL, - `mailto` text NOT NULL, - `duplicateDemand` mediumint(8) NOT NULL, - `childDemands` varchar(255) NOT NULL, - `version` varchar(255) NOT NULL, + `pool` int(8) NOT NULL DEFAULT '0', + `module` int(8) NOT NULL DEFAULT '0', + `product` mediumint(8) NOT NULL DEFAULT '0', + `parent` mediumint(8) NOT NULL DEFAULT '0', + `pri` char(30) NOT NULL DEFAULT '', + `category` char(30) NOT NULL DEFAULT '', + `source` char(30) NOT NULL DEFAULT '', + `sourceNote` varchar(255) NOT NULL DEFAULT '', + `title` varchar(255) NOT NULL DEFAULT '', + `feedbackedBy` varchar(255) NOT NULL DEFAULT '', + `email` varchar(255) NOT NULL DEFAULT '', + `assignedTo` char(30) NOT NULL DEFAULT '', + `assignedDate` datetime NULL, + `reviewedBy` text NULL, + `reviewedDate` datetime NULL, + `status` char(30) NOT NULL DEFAULT '', + `duration` char(30) NOT NULL DEFAULT '', + `BSA` char(30) NOT NULL DEFAULT '', + `story` mediumint(8) NOT NULL DEFAULT '0', + `roadmap` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` datetime NULL, + `mailto` text NULL, + `duplicateDemand` mediumint(8) NULL, + `childDemands` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', `vision` varchar(255) NOT NULL DEFAULT 'or', - `color` varchar(255) NOT NULL, - `changedBy` char(30) NOT NULL, - `changedDate` datetime NOT NULL, - `closedBy` char(30) NOT NULL, - `closedDate` datetime NOT NULL, - `closedReason` varchar(30) NOT NULL, - `submitedBy` varchar(30) NOT NULL, + `color` varchar(255) NOT NULL DEFAULT '', + `changedBy` char(30) NOT NULL DEFAULT '', + `changedDate` datetime NULL, + `closedBy` char(30) NOT NULL DEFAULT '', + `closedDate` datetime NULL, + `closedReason` varchar(30) NOT NULL DEFAULT '', + `submitedBy` varchar(30) NOT NULL DEFAULT '', `lastEditedBy` varchar(30) NOT NULL DEFAULT '', - `lastEditedDate` datetime NOT NULL, - `activatedDate` datetime NOT NULL, + `lastEditedDate` datetime NULL, + `activatedDate` datetime NULL, `distributedBy` varchar(30) NOT NULL DEFAULT '', - `distributedDate` datetime NOT NULL, + `distributedDate` datetime NULL, `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `zt_demandspec` ( - `demand` mediumint(9) NOT NULL, - `version` smallint(6) NOT NULL, - `title` varchar(255) NOT NULL, - `spec` mediumtext NOT NULL, - `verify` mediumtext NOT NULL, - `files` text NOT NULL, - UNIQUE KEY `demand` (`demand`,`version`) + `demand` mediumint(9) NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL DEFAULT '', + `spec` mediumtext NULL, + `verify` mediumtext NULL, + `files` text NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE UNIQUE INDEX `demand` ON `zt_demandspec`(`demand`,`version`); CREATE TABLE `zt_demandreview` ( - `demand` mediumint(9) NOT NULL, - `version` smallint(6) NOT NULL, - `reviewer` varchar(30) NOT NULL, - `result` varchar(30) NOT NULL, - `reviewDate` datetime NOT NULL, - UNIQUE KEY `demand` (`demand`,`version`,`reviewer`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; + `demand` mediumint(9) NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '0', + `reviewer` varchar(30) NOT NULL DEFAULT '', + `result` varchar(30) NOT NULL DEFAULT '', + `reviewDate` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE UNIQUE INDEX `demand` ON `zt_demandreview`(`demand`,`version`,`reviewer`); CREATE TABLE `zt_charter` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `level` int(8) NOT NULL, - `category` char(30) NOT NULL, - `market` varchar(30) NOT NULL, - `appliedBy` char(30) NOT NULL, - `appliedDate` datetime NOT NULL, - `budget` char(30) NOT NULL, - `budgetUnit` char(30) NOT NULL, - `product` mediumint(8) NOT NULL, - `roadmap` mediumint(8) NOT NULL, - `spec` mediumtext NOT NULL, - `status` char(30) NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` datetime NOT NULL, - `charterFiles` text NOT NULL, - `reviewedBy` char(30) NOT NULL, - `reviewedResult` char(30) NOT NULL, - `reviewedDate` datetime NOT NULL, - `meetingDate` date NOT NULL, - `meetingLocation` varchar(255) NOT NULL, - `meetingMinutes` mediumtext NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `level` int(8) NOT NULL DEFAULT '0', + `category` char(30) NOT NULL DEFAULT '', + `market` varchar(30) NOT NULL DEFAULT '', + `check` enum('0','1') NOT NULL DEFAULT '0', + `appliedBy` char(30) NOT NULL DEFAULT '', + `appliedDate` datetime NULL, + `budget` char(30) NOT NULL DEFAULT '', + `budgetUnit` char(30) NOT NULL DEFAULT '', + `product` mediumint(8) NOT NULL DEFAULT '0', + `roadmap` mediumint(8) NOT NULL DEFAULT '0', + `spec` mediumtext NULL, + `status` char(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` datetime NULL, + `charterFiles` text NULL, + `closedBy` char(30) NOT NULL DEFAULT '', + `closedDate` datetime NULL, + `closedReason` varchar(255) NOT NULL DEFAULT '', + `activatedBy` char(30) NOT NULL DEFAULT '', + `activatedDate` datetime NULL, + `reviewedBy` varchar(255) NOT NULL DEFAULT '', + `reviewedResult` char(30) NOT NULL DEFAULT '', + `reviewedDate` datetime NULL, + `meetingDate` date NULL, + `meetingLocation` varchar(255) NOT NULL DEFAULT '', + `meetingMinutes` mediumtext NULL, `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -112,38 +118,36 @@ ALTER TABLE `zt_story` ADD `demand` mediumint(8) NOT NULL AFTER `notifyEmail`; ALTER TABLE `zt_product` ADD `PMT` text COLLATE 'utf8_general_ci' NOT NULL AFTER `reviewer`; ALTER TABLE `zt_story` ADD `submitedBy` varchar(30) NOT NULL AFTER `changedDate`; ALTER TABLE `zt_story` ADD `roadmap` VARCHAR(255) NOT NULL DEFAULT '' AFTER `plan`; -ALTER TABLE `zt_charter` ADD `check` enum('0','1') NOT NULL DEFAULT '0'; -ALTER TABLE `zt_charter` modify column reviewedBy varchar(255); CREATE TABLE `zt_roadmap` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `product` mediumint(8) NOT NULL, - `branch` mediumint(8) NOT NULL, - `name` varchar(255) NOT NULL, - `status` char(30) NOT NULL, - `begin` date NOT NULL, - `end` date NOT NULL, - `desc` longtext NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` date NOT NULL, - `closedBy` char(30) NOT NULL, - `closedDate` datetime NOT NULL, + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) NOT NULL DEFAULT '0', + `branch` mediumint(8) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `status` char(30) NOT NULL DEFAULT '', + `begin` date NULL, + `end` date NULL, + `desc` longtext NULL, + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` date NULL, + `closedBy` char(30) NOT NULL DEFAULT '', + `closedDate` datetime NULL, `closedReason` enum('done','canceled') DEFAULT NULL, - `deleted` enum('0','1') NOT NULL DEFAULT '0' + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `zt_roadmapstory` ( - `roadmap` mediumint(8) unsigned NOT NULL, - `story` mediumint(8) unsigned NOT NULL, - `order` MEDIUMINT UNSIGNED NOT NULL, - UNIQUE KEY `roadmap_story` (`roadmap`,`story`) + `roadmap` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `order` MEDIUMINT UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE UNIQUE INDEX `roadmap_story` ON `zt_roadmapstory`(`roadmap`,`story`); -ALTER TABLE `zt_story` MODIFY `status` enum('','changing','active','draft','closed','reviewing','launched','developing') NOT NULL DEFAULT '' AFTER `estimate`; +ALTER TABLE `zt_story` MODIFY `status` enum('','changing','active','draft','closed','reviewing','launched','developing') NOT NULL DEFAULT ''; -ALTER TABLE `zt_project` -ADD `charter` mediumint(8) NOT NULL DEFAULT 0 AFTER `project`, -ADD `category` char(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `type`; +ALTER TABLE `zt_project` ADD `charter` mediumint(8) NOT NULL DEFAULT 0 AFTER `project`; +ALTER TABLE `zt_project` ADD `category` char(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `type`; REPLACE INTO `zt_stage` (`name`, `percent`, `type`, `projectType`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `deleted`) VALUES ('概念', '10', 'concept', 'ipd', 'admin', '2020-02-08 21:08:30', 'admin', '2020-02-12 13:50:27', '0'), @@ -159,35 +163,24 @@ ALTER TABLE `zt_review` MODIFY `docVersion` varchar(255); ALTER TABLE `zt_object` ADD `end` date NULL AFTER `designEst`; -ALTER TABLE `zt_charter` ADD `closedBy` char(30) NULL; -ALTER TABLE `zt_charter` ADD `closedDate` datetime NULL; -ALTER TABLE `zt_charter` ADD `closedReason` varchar(255) NULL; -ALTER TABLE `zt_charter` ADD `activatedBy` char(30) NULL; -ALTER TABLE `zt_charter` ADD `activatedDate` datetime NULL; - UPDATE `zt_priv` SET `vision` = ',rnd,or,' WHERE `module` = 'requirement' AND `method` = 'import'; UPDATE `zt_priv` SET `vision` = ',rnd,or,' WHERE `module` = 'requirement' AND `method` = 'exportTemplate'; -REPLACE INTO `zt_config` (`vision`, `owner`, `module`, `section`, `key`, `value`) VALUES ('', 'system', 'common', 'global', 'mode', 'PLM'); -REPLACE INTO `zt_config` (`vision`, `owner`, `module`, `section`, `key`, `value`) VALUES ('', 'system', 'custom', '', 'URAndSR', '1'); -REPLACE INTO `zt_config` (`vision`, `owner`, `module`, `section`, `key`, `value`) VALUES ('', 'system', 'common', '', 'disabledFeatures', ''); -REPLACE INTO `zt_config` (`vision`, `owner`, `module`, `section`, `key`, `value`) VALUES ('', 'system', 'common', '', 'closedFeatures', ''); - -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('demand', 'export', '643', ',ipd,', ',or,', '1', '210'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2109, 'demand', 'export', '643', ',ipd,', ',or,', '1', '210'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2109, 'priv', 'de', 'demand-export', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2109, 'priv', 'en', 'demand-export', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2109, 'priv', 'fr', 'demand-export', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2109, 'priv', 'zh-cn', 'demand-export', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2109, 'priv', 'zh-tw', 'demand-export', '', ''); -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('demand', 'exportTemplate', '643', ',ipd,', ',or,', '1', '220'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2110, 'demand', 'exportTemplate', '643', ',ipd,', ',or,', '1', '220'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2110, 'priv', 'de', 'demand-exportTemplate', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2110, 'priv', 'en', 'demand-exportTemplate', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2110, 'priv', 'fr', 'demand-exportTemplate', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2110, 'priv', 'zh-cn', 'demand-exportTemplate', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2110, 'priv', 'zh-tw', 'demand-exportTemplate', '', ''); -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('demand', 'import', '643', ',ipd,', ',or,', '1', '230'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2111, 'demand', 'import', '643', ',ipd,', ',or,', '1', '230'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2111, 'priv', 'de', 'demand-import', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2111, 'priv', 'en', 'demand-import', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2111, 'priv', 'fr', 'demand-import', '', ''); @@ -207,7 +200,7 @@ REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2111, 'recomm REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2111, 'recommend', 2076); REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2111, 'recommend', 2077); -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('requirement', 'batchChangeRoadmap', '32', ',ipd,', ',or,', '1', '125'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2112, 'requirement', 'batchChangeRoadmap', '32', ',ipd,', ',or,', '1', '125'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2112, 'priv', 'de', 'requirement-batchChangeRoadmap', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2112, 'priv', 'en', 'requirement-batchChangeRoadmap', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2112, 'priv', 'fr', 'requirement-batchChangeRoadmap', '', ''); @@ -221,14 +214,14 @@ REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2112, 'recomm UPDATE `zt_privlang` SET `value` = '创建维护立项' WHERE `objectID` = 638 and `objectType` = 'manager'; -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('charter', 'close', '638', ',ipd,', ',or,', '1', '80'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2113, 'charter', 'close', '638', ',ipd,', ',or,', '1', '80'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2113, 'priv', 'de', 'charter-close', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2113, 'priv', 'en', 'charter-close', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2113, 'priv', 'fr', 'charter-close', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2113, 'priv', 'zh-cn', 'charter-close', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2113, 'priv', 'zh-tw', 'charter-close', '', ''); -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('charter', 'activate', '638', ',ipd,', ',or,', '1', '90'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2114, 'charter', 'activate', '638', ',ipd,', ',or,', '1', '90'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2114, 'priv', 'de', 'charter-activate', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2114, 'priv', 'en', 'charter-activate', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2114, 'priv', 'fr', 'charter-activate', '', ''); @@ -247,7 +240,7 @@ REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2114, 'recomm REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2114, 'recommend', 2063); REPLACE INTO `zt_privrelation` (priv, `type`, relationPriv) VALUES(2114, 'recommend', 2113); -REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('requirement', 'relation', '32', ',max,ipd,', ',rnd,', '1', '130'); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (2115, 'requirement', 'relation', '32', ',max,ipd,', ',rnd,', '1', '130'); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2115, 'priv', 'de', 'requirement-relation', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2115, 'priv', 'en', 'requirement-relation', '', ''); REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2115, 'priv', 'fr', 'requirement-relation', '', ''); diff --git a/db/zentao.sql b/db/zentao.sql index ff133ea0c1..173fffd55f 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -37,6 +37,30 @@ CREATE INDEX `project` ON `zt_action`(`project`); CREATE INDEX `action` ON `zt_action`(`action`); CREATE INDEX `objectID` ON `zt_action`(`objectID`); +-- DROP TABLE IF EXISTS `zt_actionrecent`; +CREATE TABLE IF NOT EXISTS `zt_actionrecent` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` text NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `actor` varchar(100) NOT NULL DEFAULT '', + `action` varchar(80) NOT NULL DEFAULT '', + `date` datetime NULL, + `comment` text NULL, + `extra` text NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `efforted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE INDEX `date` ON `zt_actionrecent`(`date`); +CREATE INDEX `actor` ON `zt_actionrecent`(`actor`); +CREATE INDEX `project` ON `zt_actionrecent`(`project`); +CREATE INDEX `action` ON `zt_actionrecent`(`action`); +CREATE INDEX `objectID` ON `zt_actionrecent`(`objectID`); + -- DROP TABLE IF EXISTS `zt_api_lib_release`; CREATE TABLE IF NOT EXISTS `zt_api_lib_release` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT, @@ -48,6 +72,7 @@ CREATE TABLE IF NOT EXISTS `zt_api_lib_release` ( `addedDate` datetime NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + -- DROP TABLE IF EXISTS `zt_api`; CREATE TABLE IF NOT EXISTS `zt_api` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT, @@ -171,6 +196,7 @@ CREATE TABLE IF NOT EXISTS `zt_approvalflowobject` ( `extra` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + -- DROP TABLE IF EXISTS `zt_approvalflowspec`; CREATE TABLE IF NOT EXISTS `zt_approvalflowspec` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT, @@ -329,15 +355,18 @@ CREATE TABLE IF NOT EXISTS `zt_bug` ( `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE INDEX `product` ON `zt_bug`(`product`); -CREATE INDEX `execution` ON `zt_bug`(`execution`); -CREATE INDEX `status` ON `zt_bug`(`status`); -CREATE INDEX `plan` ON `zt_bug`(`plan`); -CREATE INDEX `story` ON `zt_bug`(`story`); -CREATE INDEX `case` ON `zt_bug`(`case`); -CREATE INDEX `toStory` ON `zt_bug`(`toStory`); -CREATE INDEX `result` ON `zt_bug`(`result`); -CREATE INDEX `assignedTo` ON `zt_bug`(`assignedTo`); +CREATE INDEX `product` ON `zt_bug`(`product`); +CREATE INDEX `execution` ON `zt_bug`(`execution`); +CREATE INDEX `status` ON `zt_bug`(`status`); +CREATE INDEX `plan` ON `zt_bug`(`plan`); +CREATE INDEX `story` ON `zt_bug`(`story`); +CREATE INDEX `case` ON `zt_bug`(`case`); +CREATE INDEX `toStory` ON `zt_bug`(`toStory`); +CREATE INDEX `result` ON `zt_bug`(`result`); +CREATE INDEX `assignedTo` ON `zt_bug`(`assignedTo`); +CREATE INDEX `deleted` ON `zt_bug`(`deleted`); +CREATE INDEX `project` ON `zt_bug`(`project`); +CREATE INDEX `product_status_deleted` ON `zt_bug` (`product`,`status`,`deleted`); -- DROP TABLE IF EXISTS `zt_build`; CREATE TABLE IF NOT EXISTS `zt_build` ( @@ -431,6 +460,7 @@ CREATE INDEX `product` ON `zt_case`(`product`); CREATE INDEX `story` ON `zt_case`(`story`); CREATE INDEX `fromBug` ON `zt_case`(`fromBug`); CREATE INDEX `module` ON `zt_case`(`module`); +CREATE INDEX `scene` ON `zt_case`(`scene`); -- DROP TABLE IF EXISTS `zt_casestep`; CREATE TABLE IF NOT EXISTS `zt_casestep` ( @@ -564,6 +594,10 @@ CREATE TABLE IF NOT EXISTS `zt_config` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE UNIQUE INDEX `unique` ON `zt_config`(`vision`,`owner`,`module`,`section`,`key`); +CREATE INDEX `vision` ON `zt_config`(`vision`); +CREATE INDEX `owner` ON `zt_config`(`owner`); +CREATE INDEX `module` ON `zt_config`(`module`); +CREATE INDEX `key` ON `zt_config`(`key`); -- DROP TABLE IF EXISTS `zt_cron`; CREATE TABLE IF NOT EXISTS `zt_cron` ( @@ -716,6 +750,7 @@ CREATE TABLE IF NOT EXISTS `zt_doc` ( `editedBy` varchar(30) NOT NULL DEFAULT '', `editedDate` datetime NULL, `editingDate` text NULL, + `editedList` text NULL, `mailto` text NULL, `acl` varchar(10) NOT NULL DEFAULT 'open', `groups` varchar(255) NOT NULL DEFAULT '', @@ -1127,7 +1162,7 @@ CREATE TABLE IF NOT EXISTS `zt_log` ( `url` varchar(255) NOT NULL DEFAULT '', `contentType` varchar(30) NOT NULL DEFAULT '', `data` text NULL, - `result` text NOT NULL, + `result` text NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE INDEX `objectType` ON `zt_log`(`objectType`); @@ -1209,9 +1244,9 @@ CREATE TABLE IF NOT EXISTS `zt_notify` ( `objectType` varchar(50) NOT NULL DEFAULT '', `objectID` mediumint unsigned NOT NULL DEFAULT '0', `action` mediumint NOT NULL DEFAULT '0', - `toList` varchar(255) NOT NULL DEFAULT '', + `toList` text NULL, `ccList` text NULL, - `subject` varchar(255) NOT NULL DEFAULT '', + `subject` text NULL, `data` text NULL, `createdBy` char(30) NOT NULL DEFAULT '', `createdDate` datetime NULL, @@ -1220,7 +1255,8 @@ CREATE TABLE IF NOT EXISTS `zt_notify` ( `failReason` text NULL, PRIMARY KEY (`id`) ) ENGINE='InnoDB' COLLATE 'utf8_general_ci'; -CREATE INDEX `objectType_toList_status` ON `zt_notify`(`objectType`,`toList`,`status`); +CREATE INDEX `objectType` ON `zt_notify`(`objectType`); +CREATE INDEX `status` ON `zt_notify`(`status`); -- DROP TABLE IF EXISTS `zt_oauth`; CREATE TABLE IF NOT EXISTS `zt_oauth` ( @@ -1298,9 +1334,9 @@ CREATE UNIQUE INDEX `objectlang` ON `zt_privlang` (`objectID`,`objectType`,`lang -- DROP TABLE IF EXISTS `zt_privrelation`; CREATE TABLE IF NOT EXISTS `zt_privrelation` ( - `priv` mediumint(8) unsigned NOT NULL DEFAULT '0', + `priv` varchar(100) NOT NULL DEFAULT '', `type` varchar(30) NOT NULL DEFAULT '', - `relationPriv` mediumint(8) unsigned NOT NULL + `relationPriv` varchar(100) NOT NULL DEFAULT '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE UNIQUE INDEX `privrelation` ON `zt_privrelation` (`priv`, `type`, `relationPriv`); @@ -1325,7 +1361,7 @@ CREATE TABLE IF NOT EXISTS `zt_product` ( `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', `whitelist` text NULL, `reviewer` text NULL, - `PMT` text COLLATE 'utf8_general_ci' NOT NULL, + `PMT` text COLLATE 'utf8_general_ci' NOT NULL DEFAULT '', `draftStories` mediumint(8) NOT NULL DEFAULT '0', `activeStories` mediumint(8) NOT NULL DEFAULT '0', `changingStories` mediumint(8) NOT NULL DEFAULT '0', @@ -1378,7 +1414,7 @@ CREATE TABLE IF NOT EXISTS `zt_project` ( `charter` mediumint(8) NOT NULL DEFAULT 0, `model` char(30) NOT NULL DEFAULT '', `type` char(30) NOT NULL DEFAULT 'sprint', - `category` char(30) COLLATE 'utf8_general_ci' NOT NULL, + `category` char(30) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '', `lifetime` char(30) NOT NULL DEFAULT '', `budget` varchar(30) NOT NULL DEFAULT '0', `budgetUnit` char(30) NOT NULL DEFAULT 'CNY', @@ -1440,13 +1476,14 @@ CREATE TABLE IF NOT EXISTS `zt_project` ( `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE INDEX `parent` ON `zt_project` (`parent`); -CREATE INDEX `begin` ON `zt_project` (`begin`); -CREATE INDEX `end` ON `zt_project` (`end`); -CREATE INDEX `status` ON `zt_project` (`status`); -CREATE INDEX `acl` ON `zt_project` (`acl`); -CREATE INDEX `order` ON `zt_project` (`order`); -CREATE INDEX `project` ON `zt_project` (`project`); +CREATE INDEX `parent` ON `zt_project` (`parent`); +CREATE INDEX `begin` ON `zt_project` (`begin`); +CREATE INDEX `end` ON `zt_project` (`end`); +CREATE INDEX `status` ON `zt_project` (`status`); +CREATE INDEX `acl` ON `zt_project` (`acl`); +CREATE INDEX `order` ON `zt_project` (`order`); +CREATE INDEX `project` ON `zt_project` (`project`); +CREATE INDEX `type_order` ON `zt_project` (`type`, `order`); -- DROP TABLE IF EXISTS `zt_projectadmin`; CREATE TABLE IF NOT EXISTS `zt_projectadmin` ( @@ -1745,10 +1782,10 @@ CREATE TABLE IF NOT EXISTS `zt_story` ( `storyChanged` enum('0','1') NOT NULL DEFAULT '0', `feedbackBy` varchar(100) NOT NULL DEFAULT '', `notifyEmail` varchar(100) NOT NULL DEFAULT '', - `BSA` char(30) NOT NULL, - `duration` char(30) NOT NULL, - `demand` mediumint(8) NOT NULL, - `submitedBy` varchar(30) NOT NULL, + `BSA` char(30) NOT NULL DEFAULT '', + `duration` char(30) NOT NULL DEFAULT '', + `demand` mediumint(8) NOT NULL DEFAULT '0', + `submitedBy` varchar(30) NOT NULL DEFAULT '', `roadmap` VARCHAR(255) NOT NULL DEFAULT '', `URChanged` enum('0','1') NOT NULL DEFAULT '0', `deleted` enum('0','1') NOT NULL DEFAULT '0', @@ -2232,8 +2269,8 @@ INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type ('*/5', '*', '*', '*', '*', 'moduleName=svn&methodName=run', '同步SVN', 'zentao', 1, 'stop'), ('*/5', '*', '*', '*', '*', 'moduleName=git&methodName=run', '同步GIT', 'zentao', 1, 'stop'), ('30', '0', '*', '*', '*', 'moduleName=backup&methodName=backup', '备份数据和附件', 'zentao', 1, 'normal'), -('*/5', '*', '*', '*', '*', 'moduleName=mail&methodName=asyncSend', '异步发信', 'zentao', 1, 'normal'), -('*/5', '*', '*', '*', '*', 'moduleName=webhook&methodName=asyncSend', '异步发送Webhook', 'zentao', 1, 'normal'), +('*/1', '*', '*', '*', '*', 'moduleName=mail&methodName=asyncSend', '异步发信', 'zentao', 1, 'normal'), +('*/1', '*', '*', '*', '*', 'moduleName=webhook&methodName=asyncSend', '异步发送Webhook', 'zentao', 1, 'normal'), ('*/5', '*', '*', '*', '*', 'moduleName=admin&methodName=deleteLog', '删除过期日志', 'zentao', 1, 'normal'), ('1', '1', '*', '*', '*', 'moduleName=todo&methodName=createCycle', '生成周期性待办', 'zentao', 1, 'normal'), ('1', '0', '*', '*', '*', 'moduleName=ci&methodName=initQueue', '创建周期性任务', 'zentao', 1, 'normal'), @@ -2298,10 +2335,10 @@ REPLACE INTO `zt_stage` (`name`,`percent`,`type`,`projectType`,`createdBy`,`crea ('发布','10','release','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), ('总结评审','5','review','waterfallplus','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'); -REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (1,'index','index',349,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(2,'my','index',18,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(3,'my','todo',4,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(4,'my','work',18,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(5,'my','contribute',18,',open,biz,max,ipd,',',rnd,lite,','1',3),(6,'my','project',18,',open,biz,max,ipd,',',rnd,lite,','1',4),(7,'my','profile',9,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(8,'my','uploadAvatar',9,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(9,'my','preference',10,',open,biz,max,ipd,',',rnd,','1',40),(10,'my','dynamic',18,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(11,'my','editProfile',9,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(12,'my','changePassword',9,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(13,'my','manageContacts',8,',open,biz,max,ipd,',',rnd,lite,or,','1',60),(14,'my','deleteContacts',8,',open,biz,max,ipd,',',rnd,lite,or,','1',65),(15,'my','score',18,',open,biz,max,ipd,',',rnd,lite,','1',70),(16,'my','team',165,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(17,'my','execution',18,',open,biz,max,ipd,',',rnd,lite,','1',5),(18,'my','doc',18,',open,biz,max,ipd,',',rnd,lite,','1',55),(19,'my','audit',18,',open,biz,max,ipd,',',rnd,or,','1',7),(20,'my','meeting',18,',max,ipd,',',rnd,','1',8),(21,'my','calendar',4,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(22,'my','effort',291,',biz,max,ipd,',',rnd,lite,','1',1),(23,'my','review',18,',biz,max,ipd,',',rnd,lite,','1',9),(24,'todo','create',5,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(25,'todo','createcycle',5,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(26,'todo','batchCreate',5,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(27,'todo','edit',5,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(28,'todo','batchEdit',5,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(29,'todo','view',4,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(30,'todo','delete',6,',open,biz,max,ipd,',',rnd,lite,or,','1',35),(31,'todo','export',7,',open,biz,max,ipd,',',rnd,lite,or,','1',40),(32,'todo','start',5,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(33,'todo','finish',5,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(34,'todo','batchFinish',5,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(35,'todo','import2Today',5,',open,biz,max,ipd,',',rnd,lite,or,','1',12),(36,'todo','assignTo',5,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(37,'todo','activate',5,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(38,'todo','close',5,',open,biz,max,ipd,',',rnd,lite,or,','1',9),(39,'todo','batchClose',5,',open,biz,max,ipd,',',rnd,lite,or,','1',11),(40,'todo','calendar',4,',biz,max,ipd,',',rnd,lite,','1',85),(41,'program','browse',11,',open,biz,max,ipd,',',rnd,','1',0),(42,'program','kanban',11,',open,biz,max,ipd,',',rnd,','1',1),(43,'program','view',11,',open,biz,max,ipd,',',rnd,','1',2),(44,'program','product',11,',open,biz,max,ipd,',',rnd,','1',3),(45,'program','create',12,',open,biz,max,ipd,',',rnd,','1',25),(46,'program','edit',12,',open,biz,max,ipd,',',rnd,','1',30),(47,'program','start',12,',open,biz,max,ipd,',',rnd,','1',35),(48,'program','suspend',12,',open,biz,max,ipd,',',rnd,','1',40),(49,'program','activate',12,',open,biz,max,ipd,',',rnd,','1',45),(50,'program','close',12,',open,biz,max,ipd,',',rnd,','1',50),(51,'program','delete',13,',open,biz,max,ipd,',',rnd,','1',55),(52,'program','project',11,',open,biz,max,ipd,',',rnd,','1',4),(53,'program','stakeholder',17,',open,biz,max,ipd,',',rnd,','1',65),(54,'program','createStakeholder',17,',open,biz,max,ipd,',',rnd,','1',70),(55,'program','unlinkStakeholder',17,',open,biz,max,ipd,',',rnd,','1',75),(56,'program','batchUnlinkStakeholders',17,',open,biz,max,ipd,',',rnd,','1',80),(57,'program','unbindWhitelist',16,',open,biz,max,ipd,',',rnd,','1',85),(58,'program','updateOrder',12,',open,biz,max,ipd,',',rnd,','1',90),(59,'personnel','accessible',15,',open,biz,max,ipd,',',rnd,lite,','1',5),(60,'personnel','invest',14,',open,biz,max,ipd,',',rnd,lite,','1',10),(61,'personnel','whitelist',16,',open,biz,max,ipd,',',rnd,lite,','1',15),(62,'personnel','addWhitelist',16,',open,biz,max,ipd,',',rnd,lite,','1',20),(63,'product','index',19,',open,biz,max,ipd,',',rnd,','1',0),(64,'product','browse',25,',open,biz,max,ipd,',',rnd,or,','1',10),(65,'product','requirement',31,',open,biz,max,ipd,',',rnd,or,','1',15),(66,'product','create',21,',open,biz,max,ipd,',',rnd,or,','1',20),(67,'product','view',19,',open,biz,max,ipd,',',rnd,or,','1',4),(68,'product','edit',21,',open,biz,max,ipd,',',rnd,or,','1',30),(69,'product','batchEdit',21,',open,biz,max,ipd,',',rnd,or,','1',35),(70,'product','delete',30,',open,biz,max,ipd,',',rnd,or,','1',40),(71,'product','roadmap',19,',open,biz,max,ipd,',',rnd,','1',5),(72,'product','track',19,',open,biz,max,ipd,',',rnd,','1',6),(73,'product','dynamic',19,',open,biz,max,ipd,',',rnd,or,','1',7),(74,'product','project',19,',open,biz,max,ipd,',',rnd,','1',8),(75,'product','dashboard',19,',open,biz,max,ipd,',',rnd,or,','1',3),(76,'product','close',21,',open,biz,max,ipd,',',rnd,or,','1',70),(77,'product','updateOrder',21,',open,biz,max,ipd,',',rnd,or,','1',75),(78,'product','all',19,',open,biz,max,ipd,',',rnd,or,','1',1),(79,'product','kanban',19,',open,biz,max,ipd,',',rnd,','1',2),(80,'product','manageLine',20,',open,biz,max,ipd,',',rnd,','1',90),(82,'product','export',22,',open,biz,max,ipd,',',rnd,or,','1',100),(83,'product','whitelist',23,',open,biz,max,ipd,',',rnd,or,','1',105),(84,'product','addWhitelist',23,',open,biz,max,ipd,',',rnd,or,','1',110),(85,'product','unbindWhitelist',23,',open,biz,max,ipd,',',rnd,or,','1',115),(86,'story','create',26,',open,biz,max,ipd,',',rnd,lite,','1',0),(87,'story','batchCreate',26,',open,biz,max,ipd,',',rnd,lite,','1',1),(88,'story','edit',26,',open,biz,max,ipd,',',rnd,lite,','1',2),(89,'story','export',27,',open,biz,max,ipd,',',rnd,lite,','1',0),(90,'story','delete',28,',open,biz,max,ipd,',',rnd,lite,','1',25),(91,'story','view',25,',open,biz,max,ipd,',',rnd,lite,','1',30),(92,'story','change',26,',open,biz,max,ipd,',',rnd,lite,','1',4),(93,'story','review',29,',open,biz,max,ipd,',',rnd,lite,','1',40),(94,'story','submitReview',26,',open,biz,max,ipd,',',rnd,lite,','1',5),(95,'story','batchReview',29,',open,biz,max,ipd,',',rnd,lite,','1',50),(96,'story','recall',26,',open,biz,max,ipd,',',rnd,lite,','1',6),(97,'story','close',26,',open,biz,max,ipd,',',rnd,lite,','1',7),(98,'story','batchClose',26,',open,biz,max,ipd,',',rnd,lite,','1',8),(99,'story','batchChangePlan',26,',open,biz,max,ipd,',',rnd,lite,','1',9),(100,'story','batchChangeStage',26,',open,biz,max,ipd,',',rnd,lite,','1',10),(101,'story','assignTo',26,',open,biz,max,ipd,',',rnd,lite,','1',11),(102,'story','batchAssignTo',26,',open,biz,max,ipd,',',rnd,lite,','1',12),(103,'story','activate',26,',open,biz,max,ipd,',',rnd,lite,','1',13),(104,'story','tasks',25,',open,biz,max,ipd,',',rnd,lite,','1',95),(105,'story','bugs',25,',open,biz,max,ipd,',',rnd,','1',100),(106,'story','cases',25,',open,biz,max,ipd,',',rnd,','1',105),(107,'story','report',25,',open,biz,max,ipd,',',rnd,lite,','1',110),(108,'story','linkStory',26,',open,biz,max,ipd,',',rnd,lite,','1',14),(109,'story','batchChangeBranch',26,',open,biz,max,ipd,',',rnd,lite,','1',15),(110,'story','batchChangeModule',26,',open,biz,max,ipd,',',rnd,lite,','1',16),(111,'story','batchToTask',45,',open,biz,max,ipd,',',rnd,lite,','1',130),(112,'story','processStoryChange',26,',open,biz,max,ipd,',',rnd,lite,','1',17),(113,'story','linkStories',26,',open,biz,max,ipd,',',rnd,','1',18),(114,'story','relieved',26,',open,biz,max,ipd,',',rnd,','1',20),(115,'story','batchEdit',26,',open,biz,max,ipd,',',rnd,lite,','1',3),(116,'story','import',27,',biz,max,ipd,',',rnd,','1',2),(117,'story','exportTemplate',27,',biz,max,ipd,',',rnd,','1',1),(118,'story','importToLib',263,',max,ipd,',',rnd,','1',165),(119,'story','batchImportToLib',263,',max,ipd,',',rnd,','1',170),(120,'story','relation',26,',max,ipd,',',rnd,','1',19),(121,'requirement','create',32,',open,biz,max,ipd,',',rnd,or,','1',5),(122,'requirement','batchCreate',32,',open,biz,max,ipd,',',rnd,or,','1',10),(123,'requirement','edit',32,',open,biz,max,ipd,',',rnd,or,','1',15),(124,'requirement','export',33,',open,biz,max,ipd,',',rnd,or,','1',20),(125,'requirement','delete',32,',open,biz,max,ipd,',',rnd,or,','1',25),(126,'requirement','view',31,',open,biz,max,ipd,',',rnd,or,','1',30),(127,'requirement','change',32,',open,biz,max,ipd,',',rnd,or,','1',35),(128,'requirement','review',35,',open,biz,max,ipd,',',rnd,or,','1',40),(129,'requirement','submitReview',32,',open,biz,max,ipd,',',rnd,or,','1',45),(130,'requirement','batchReview',35,',open,biz,max,ipd,',',rnd,or,','1',50),(131,'requirement','recall',32,',open,biz,max,ipd,',',rnd,or,','1',55),(132,'requirement','close',32,',open,biz,max,ipd,',',rnd,or,','1',60),(133,'requirement','batchClose',32,',open,biz,max,ipd,',',rnd,or,','1',65),(134,'requirement','assignTo',32,',open,biz,max,ipd,',',rnd,or,','1',70),(135,'requirement','batchAssignTo',32,',open,biz,max,ipd,',',rnd,or,','1',75),(136,'requirement','activate',32,',open,biz,max,ipd,',',rnd,or,','1',80),(137,'requirement','report',31,',open,biz,max,ipd,',',rnd,or,','1',85),(138,'requirement','linkStory',32,',open,biz,max,ipd,',',rnd,or,','1',90),(139,'requirement','batchChangeBranch',32,',open,biz,max,ipd,',',rnd,or,','1',95),(140,'requirement','batchChangeModule',32,',open,biz,max,ipd,',',rnd,or,','1',100),(141,'requirement','linkRequirements',32,',open,biz,max,ipd,',',rnd,or,','1',105),(142,'requirement','batchEdit',32,',open,biz,max,ipd,',',rnd,or,','1',110),(143,'requirement','import',33,',max,ipd,',',rnd,or,','1',115),(144,'requirement','exportTemplate',33,',max,ipd,',',rnd,or,','1',120),(145,'productplan','browse',36,',open,biz,max,ipd,',',rnd,','1',5),(146,'productplan','create',37,',open,biz,max,ipd,',',rnd,','1',10),(147,'productplan','edit',37,',open,biz,max,ipd,',',rnd,','1',15),(148,'productplan','delete',38,',open,biz,max,ipd,',',rnd,','1',20),(149,'productplan','view',36,',open,biz,max,ipd,',',rnd,','1',25),(150,'productplan','linkStory',37,',open,biz,max,ipd,',',rnd,','1',30),(151,'productplan','unlinkStory',37,',open,biz,max,ipd,',',rnd,','1',35),(152,'productplan','batchUnlinkStory',37,',open,biz,max,ipd,',',rnd,','1',40),(153,'productplan','linkBug',37,',open,biz,max,ipd,',',rnd,','1',45),(154,'productplan','unlinkBug',37,',open,biz,max,ipd,',',rnd,','1',50),(155,'productplan','batchUnlinkBug',37,',open,biz,max,ipd,',',rnd,','1',55),(156,'productplan','batchEdit',37,',open,biz,max,ipd,',',rnd,','1',60),(157,'productplan','start',37,',open,biz,max,ipd,',',rnd,','1',65),(158,'productplan','finish',37,',open,biz,max,ipd,',',rnd,','1',70),(159,'productplan','close',37,',open,biz,max,ipd,',',rnd,','1',75),(160,'productplan','activate',37,',open,biz,max,ipd,',',rnd,','1',80),(161,'productplan','batchChangeStatus',37,',open,biz,max,ipd,',',rnd,','1',85),(162,'release','browse',39,',open,biz,max,ipd,',',rnd,','1',5),(163,'release','create',40,',open,biz,max,ipd,',',rnd,','1',10),(164,'release','edit',40,',open,biz,max,ipd,',',rnd,','1',15),(165,'release','delete',42,',open,biz,max,ipd,',',rnd,','1',20),(166,'release','view',39,',open,biz,max,ipd,',',rnd,','1',25),(167,'release','export',41,',open,biz,max,ipd,',',rnd,','1',30),(168,'release','linkStory',40,',open,biz,max,ipd,',',rnd,','1',35),(169,'release','unlinkStory',40,',open,biz,max,ipd,',',rnd,','1',40),(170,'release','batchUnlinkStory',40,',open,biz,max,ipd,',',rnd,','1',45),(171,'release','linkBug',40,',open,biz,max,ipd,',',rnd,','1',50),(172,'release','unlinkBug',40,',open,biz,max,ipd,',',rnd,','1',55),(173,'release','batchUnlinkBug',40,',open,biz,max,ipd,',',rnd,','1',60),(174,'release','changeStatus',40,',open,biz,max,ipd,',',rnd,','1',65),(175,'release','notify',43,',open,biz,max,ipd,',',rnd,','1',70),(176,'project','index',46,',open,biz,max,ipd,',',rnd,lite,','1',5),(177,'project','browse',46,',open,biz,max,ipd,',',rnd,lite,','1',40),(178,'project','kanban',46,',open,biz,max,ipd,',',rnd,lite,','1',15),(179,'project','create',47,',open,biz,max,ipd,',',rnd,lite,','1',0),(180,'project','edit',47,',open,biz,max,ipd,',',rnd,lite,','1',1),(181,'project','batchEdit',47,',open,biz,max,ipd,',',rnd,lite,','1',2),(182,'project','group',50,',open,biz,max,ipd,',',rnd,lite,','1',0),(183,'project','createGroup',50,',open,biz,max,ipd,',',rnd,lite,','1',1),(184,'project','managePriv',50,',open,biz,max,ipd,',',rnd,lite,','1',3),(185,'project','manageMembers',50,',open,biz,max,ipd,',',rnd,lite,','1',6),(186,'project','manageGroupMember',50,',open,biz,max,ipd,',',rnd,lite,','1',4),(187,'project','copyGroup',50,',open,biz,max,ipd,',',rnd,lite,','1',5),(188,'project','editGroup',50,',open,biz,max,ipd,',',rnd,lite,','1',2),(189,'project','start',47,',open,biz,max,ipd,',',rnd,lite,','1',3),(190,'project','suspend',47,',open,biz,max,ipd,',',rnd,lite,','1',4),(191,'project','close',47,',open,biz,max,ipd,',',rnd,lite,','1',6),(192,'project','activate',47,',open,biz,max,ipd,',',rnd,lite,','1',5),(193,'project','updateOrder',47,',open,biz,max,ipd,',',rnd,lite,','1',7),(194,'project','delete',51,',open,biz,max,ipd,',',rnd,lite,','1',95),(195,'project','view',46,',open,biz,max,ipd,',',rnd,lite,','1',100),(196,'project','whitelist',52,',open,biz,max,ipd,',',rnd,lite,','1',105),(197,'project','addWhitelist',52,',open,biz,max,ipd,',',rnd,lite,','1',110),(198,'project','unbindWhitelist',52,',open,biz,max,ipd,',',rnd,lite,','1',115),(199,'project','manageProducts',47,',open,biz,max,ipd,',',rnd,','1',8),(200,'project','dynamic',46,',open,biz,max,ipd,',',rnd,lite,','1',125),(203,'project','bug',292,',open,biz,max,ipd,',',rnd,','1',140),(204,'project','testcase',292,',open,biz,max,ipd,',',rnd,','1',145),(205,'project','testtask',292,',open,biz,max,ipd,',',rnd,','1',150),(206,'project','testreport',292,',open,biz,max,ipd,',',rnd,','1',155),(207,'project','execution',46,',open,biz,max,ipd,',',rnd,lite,','1',160),(208,'project','export',48,',open,biz,max,ipd,',',rnd,lite,','1',165),(209,'project','team',50,',open,biz,max,ipd,',',rnd,lite,','1',7),(210,'project','unlinkMember',50,',open,biz,max,ipd,',',rnd,lite,','1',8),(212,'project','programTitle',47,',open,biz,max,ipd,',',rnd,','1',9),(213,'project','approval',302,',max,ipd,',',rnd,','1',5),(214,'projectplan','browse',44,',open,biz,max,ipd,',',rnd,','1',0),(215,'projectplan','create',44,',open,biz,max,ipd,',',rnd,','1',2),(216,'projectplan','edit',44,',open,biz,max,ipd,',',rnd,','1',3),(217,'projectplan','view',44,',open,biz,max,ipd,',',rnd,','1',1),(218,'projectstory','story',313,',open,biz,max,ipd,',',rnd,lite,','1',5),(219,'projectstory','track',293,',max,',',rnd,','1',10),(220,'projectstory','view',313,',open,biz,max,ipd,',',rnd,lite,','1',15),(221,'projectstory','linkStory',45,',open,biz,max,ipd,',',rnd,lite,','1',20),(222,'projectstory','importplanstories',45,',open,biz,max,ipd,',',rnd,','1',25),(223,'projectstory','unlinkStory',45,',open,biz,max,ipd,',',rnd,lite,','1',30),(224,'projectstory','batchUnlinkStory',45,',open,biz,max,ipd,',',rnd,lite,','1',35),(225,'projectstory','importFromLib',45,',max,ipd,',',rnd,','1',40),(226,'execution','view',53,',open,biz,max,ipd,',',rnd,lite,','1',2),(228,'execution','create',54,',open,biz,max,ipd,',',rnd,lite,','1',0),(229,'execution','edit',54,',open,biz,max,ipd,',',rnd,lite,','1',2),(230,'execution','batchedit',54,',open,biz,max,ipd,',',rnd,lite,','1',3),(231,'execution','batchchangestatus',54,',open,biz,max,ipd,',',rnd,','1',4),(232,'execution','start',54,',open,biz,max,ipd,',',rnd,lite,','1',5),(233,'execution','activate',54,',open,biz,max,ipd,',',rnd,lite,','1',6),(234,'execution','putoff',54,',open,biz,max,ipd,',',rnd,lite,','1',7),(235,'execution','suspend',54,',open,biz,max,ipd,',',rnd,lite,','1',8),(236,'execution','close',54,',open,biz,max,ipd,',',rnd,lite,','1',9),(237,'execution','delete',55,',open,biz,max,ipd,',',rnd,lite,','1',60),(238,'execution','task',60,',open,biz,max,ipd,',',rnd,lite,','1',65),(239,'execution','grouptask',66,',open,biz,max,ipd,',',rnd,lite,','1',0),(240,'execution','importtask',61,',open,biz,max,ipd,',',rnd,lite,','1',15),(241,'execution','importplanstories',61,',open,biz,max,ipd,',',rnd,','1',16),(242,'execution','importBug',61,',open,biz,max,ipd,',',rnd,','1',17),(243,'execution','story',311,',open,biz,max,ipd,',',rnd,lite,','1',0),(244,'execution','build',309,',open,biz,max,ipd,',',rnd,','1',0),(245,'execution','testcase',290,',open,biz,max,ipd,',',rnd,','1',1),(246,'execution','bug',290,',open,biz,max,ipd,',',rnd,','1',0),(247,'execution','testtask',290,',open,biz,max,ipd,',',rnd,','1',2),(248,'execution','testreport',290,',open,biz,max,ipd,',',rnd,','1',3),(249,'execution','burn',67,',open,biz,max,ipd,',',rnd,','1',120),(250,'execution','computeBurn',67,',open,biz,max,ipd,',',rnd,','1',125),(251,'execution','cfd',68,',open,biz,max,ipd,',',rnd,','1',130),(252,'execution','computeCFD',68,',open,biz,max,ipd,',',rnd,','1',135),(253,'execution','fixFirst',67,',open,biz,max,ipd,',',rnd,','1',140),(255,'execution','team',64,',open,biz,max,ipd,',',rnd,lite,','1',0),(256,'execution','dynamic',53,',open,biz,max,ipd,',',rnd,lite,','1',5),(257,'execution','manageProducts',54,',open,biz,max,ipd,',',rnd,','1',1),(258,'execution','manageMembers',64,',open,biz,max,ipd,',',rnd,lite,','1',1),(259,'execution','unlinkMember',64,',open,biz,max,ipd,',',rnd,lite,','1',2),(260,'execution','linkStory',69,',open,biz,max,ipd,',',rnd,lite,','1',3),(261,'execution','unlinkStory',69,',open,biz,max,ipd,',',rnd,lite,','1',4),(262,'execution','batchUnlinkStory',69,',open,biz,max,ipd,',',rnd,lite,','1',5),(263,'execution','updateOrder',53,',open,biz,max,ipd,',',rnd,lite,','1',1),(264,'execution','taskKanban',65,',open,biz,max,ipd,',',rnd,lite,','1',2),(265,'execution','printKanban',65,',open,biz,max,ipd,',',rnd,','1',4),(266,'execution','tree',345,',open,biz,max,ipd,',',rnd,lite,','1',1),(267,'execution','treeTask',345,',open,biz,max,ipd,',',rnd,lite,','1',2),(268,'execution','treeStory',345,',open,biz,max,ipd,',',rnd,lite,','1',3),(269,'execution','all',53,',open,biz,max,ipd,',',rnd,lite,','1',0),(270,'execution','export',56,',open,biz,max,ipd,',',rnd,lite,','1',225),(271,'execution','storyKanban',311,',open,biz,max,ipd,',',rnd,lite,','1',1),(272,'execution','storySort',69,',open,biz,max,ipd,',',rnd,lite,','1',6),(273,'execution','whitelist',57,',open,biz,max,ipd,',',rnd,lite,','1',240),(274,'execution','addWhitelist',57,',open,biz,max,ipd,',',rnd,lite,','1',245),(275,'execution','unbindWhitelist',57,',open,biz,max,ipd,',',rnd,lite,','1',250),(276,'execution','storyEstimate',69,',open,biz,max,ipd,',',rnd,','1',7),(277,'execution','executionkanban',65,',open,biz,max,ipd,',',rnd,','1',0),(278,'execution','kanban',65,',open,biz,max,ipd,',',rnd,lite,','1',1),(279,'execution','setKanban',65,',open,biz,max,ipd,',',rnd,','1',3),(280,'execution','doc',53,',open,biz,max,ipd,',',rnd,lite,','1',4),(281,'execution','storyView',311,',open,biz,max,ipd,',',rnd,','1',2),(282,'execution','calendar',347,',biz,max,ipd,',',rnd,lite,','1',6),(283,'execution','effortCalendar',53,',biz,max,ipd,',',rnd,','1',0),(284,'execution','effort',71,',biz,max,ipd,',',rnd,','1',255),(285,'execution','taskEffort',346,',biz,max,ipd,',',rnd,','1',4),(286,'execution','computeTaskEffort',346,',biz,max,ipd,',',rnd,','1',5),(287,'execution','deleterelation',308,',biz,max,ipd,',',rnd,','1',5),(288,'execution','maintainrelation',308,',biz,max,ipd,',',rnd,','1',3),(289,'execution','relation',308,',biz,max,ipd,',',rnd,','1',4),(290,'execution','gantt',58,',biz,max,ipd,',',rnd,lite,','1',0),(291,'execution','ganttsetting',58,',biz,max,ipd,',',rnd,','1',2),(292,'execution','ganttEdit',58,',biz,max,ipd,',',rnd,','1',1),(293,'kanban','space',283,',open,biz,max,ipd,',',rnd,lite,','1',0),(294,'kanban','createSpace',283,',open,biz,max,ipd,',',rnd,lite,','1',1),(295,'kanban','editSpace',283,',open,biz,max,ipd,',',rnd,lite,','1',2),(296,'kanban','closeSpace',283,',open,biz,max,ipd,',',rnd,lite,','1',4),(297,'kanban','deleteSpace',284,',open,biz,max,ipd,',',rnd,lite,','1',25),(299,'kanban','create',286,',open,biz,max,ipd,',',rnd,lite,','1',0),(300,'kanban','edit',286,',open,biz,max,ipd,',',rnd,lite,','1',1),(301,'kanban','view',285,',open,biz,max,ipd,',',rnd,lite,','1',45),(302,'kanban','close',286,',open,biz,max,ipd,',',rnd,lite,','1',3),(303,'kanban','delete',287,',open,biz,max,ipd,',',rnd,lite,','1',55),(304,'kanban','createRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',14),(305,'kanban','editRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',15),(306,'kanban','sortRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',16),(307,'kanban','sortGroup',286,',open,biz,max,ipd,',',rnd,lite,','1',22),(308,'kanban','deleteRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',17),(309,'kanban','createLane',286,',open,biz,max,ipd,',',rnd,lite,','1',18),(310,'kanban','sortLane',286,',open,biz,max,ipd,',',rnd,lite,','1',21),(311,'kanban','deleteLane',286,',open,biz,max,ipd,',',rnd,lite,','1',23),(312,'kanban','createColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',5),(313,'kanban','setColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',7),(314,'kanban','setWIP',286,',open,biz,max,ipd,',',rnd,lite,','1',19),(315,'kanban','sortColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',9),(316,'kanban','deleteColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',13),(317,'kanban','createCard',312,',open,biz,max,ipd,',',rnd,lite,','1',0),(318,'kanban','editCard',312,',open,biz,max,ipd,',',rnd,lite,','1',2),(319,'kanban','viewCard',312,',open,biz,max,ipd,',',rnd,lite,','1',5),(320,'kanban','sortCard',312,',open,biz,max,ipd,',',rnd,lite,','1',7),(321,'kanban','deleteCard',312,',open,biz,max,ipd,',',rnd,lite,','1',8),(322,'kanban','assigntoCard',312,',open,biz,max,ipd,',',rnd,lite,','1',4),(323,'kanban','moveCard',312,',open,biz,max,ipd,',',rnd,lite,','1',6),(324,'kanban','setCardColor',312,',open,biz,max,ipd,',',rnd,lite,','1',3),(326,'kanban','viewArchivedColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',11),(327,'kanban','batchCreateCard',312,',open,biz,max,ipd,',',rnd,lite,','1',1),(328,'kanban','activateSpace',283,',open,biz,max,ipd,',',rnd,','1',5),(329,'kanban','setting',286,',open,biz,max,ipd,',',rnd,','1',2),(330,'kanban','activate',286,',open,biz,max,ipd,',',rnd,','1',4),(331,'kanban','editLaneColor',286,',open,biz,max,ipd,',',rnd,lite,','1',8),(332,'kanban','editLaneName',286,',open,biz,max,ipd,',',rnd,lite,','1',20),(333,'kanban','splitColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',6),(334,'kanban','archiveColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',10),(335,'kanban','restoreColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',12),(336,'kanban','archiveCard',312,',open,biz,max,ipd,',',rnd,lite,','1',9),(337,'kanban','viewArchivedCard',312,',open,biz,max,ipd,',',rnd,lite,','1',10),(338,'kanban','restoreCard',312,',open,biz,max,ipd,',',rnd,lite,','1',11),(339,'programplan','create',171,',open,biz,max,ipd,',',rnd,','1',5),(340,'programplan','edit',171,',open,biz,max,ipd,',',rnd,','1',10),(341,'programplan','browse',307,',max,ipd,',',rnd,','1',15),(342,'programplan','ganttEdit',307,',max,ipd,',',rnd,','1',20),(343,'task','create',61,',open,biz,max,ipd,',',rnd,lite,','1',0),(344,'task','batchCreate',61,',open,biz,max,ipd,',',rnd,lite,','1',1),(345,'task','batchEdit',61,',open,biz,max,ipd,',',rnd,lite,','1',3),(346,'task','edit',61,',open,biz,max,ipd,',',rnd,lite,','1',2),(347,'task','assignTo',61,',open,biz,max,ipd,',',rnd,lite,','1',4),(348,'task','batchAssignTo',61,',open,biz,max,ipd,',',rnd,lite,','1',5),(349,'task','start',61,',open,biz,max,ipd,',',rnd,lite,','1',6),(350,'task','pause',61,',open,biz,max,ipd,',',rnd,lite,','1',7),(351,'task','restart',61,',open,biz,max,ipd,',',rnd,lite,','1',8),(352,'task','finish',61,',open,biz,max,ipd,',',rnd,lite,','1',9),(353,'task','cancel',61,',open,biz,max,ipd,',',rnd,lite,','1',10),(354,'task','close',61,',open,biz,max,ipd,',',rnd,lite,','1',12),(355,'task','batchClose',61,',open,biz,max,ipd,',',rnd,lite,','1',13),(356,'task','activate',61,',open,biz,max,ipd,',',rnd,lite,','1',14),(357,'task','delete',62,',open,biz,max,ipd,',',rnd,lite,','1',75),(358,'task','view',60,',open,biz,max,ipd,',',rnd,lite,','1',80),(359,'task','export',63,',open,biz,max,ipd,',',rnd,lite,','1',0),(360,'task','confirmStoryChange',61,',open,biz,max,ipd,',',rnd,lite,','1',18),(361,'task','recordEstimate',61,',open,biz,max,ipd,',',rnd,lite,','1',20),(362,'task','editEstimate',61,',open,biz,max,ipd,',',rnd,lite,','1',21),(363,'task','deleteEstimate',61,',open,biz,max,ipd,',',rnd,lite,','1',22),(364,'task','report',60,',open,biz,max,ipd,',',rnd,lite,','1',110),(365,'task','batchChangeModule',61,',open,biz,max,ipd,',',rnd,lite,','1',23),(366,'task','batchCancel',61,',open,biz,max,ipd,',',rnd,lite,','1',11),(367,'task','import',63,',biz,max,ipd,',',rnd,lite,','1',2),(368,'task','exportTemplate',63,',biz,max,ipd,',',rnd,lite,','1',1),(369,'task','confirmdesignchange',61,',max,ipd,',',rnd,','1',19),(370,'build','create',72,',open,biz,max,ipd,',',rnd,','1',2),(371,'build','edit',72,',open,biz,max,ipd,',',rnd,','1',3),(372,'build','delete',73,',open,biz,max,ipd,',',rnd,','1',15),(373,'build','view',309,',open,biz,max,ipd,',',rnd,','1',1),(374,'build','linkStory',72,',open,biz,max,ipd,',',rnd,','1',4),(375,'build','unlinkStory',72,',open,biz,max,ipd,',',rnd,','1',5),(376,'build','batchUnlinkStory',72,',open,biz,max,ipd,',',rnd,','1',6),(377,'build','linkBug',72,',open,biz,max,ipd,',',rnd,','1',7),(378,'build','unlinkBug',72,',open,biz,max,ipd,',',rnd,','1',8),(379,'build','batchUnlinkBug',72,',open,biz,max,ipd,',',rnd,','1',9),(380,'design','browse',175,',open,biz,max,ipd,',',rnd,','1',5),(381,'design','view',175,',open,biz,max,ipd,',',rnd,','1',10),(382,'design','create',176,',open,biz,max,ipd,',',rnd,','1',0),(383,'design','batchCreate',176,',open,biz,max,ipd,',',rnd,','1',1),(384,'design','edit',176,',open,biz,max,ipd,',',rnd,','1',3),(385,'design','assignTo',176,',open,biz,max,ipd,',',rnd,','1',2),(386,'design','delete',177,',open,biz,max,ipd,',',rnd,','1',35),(387,'design','linkCommit',176,',open,biz,max,ipd,',',rnd,','1',4),(388,'design','viewCommit',176,',open,biz,max,ipd,',',rnd,','1',6),(389,'design','unlinkCommit',176,',open,biz,max,ipd,',',rnd,','1',5),(390,'design','revision',176,',open,biz,max,ipd,',',rnd,','1',45),(391,'design','submit',176,',max,ipd,',',rnd,','1',7),(392,'design','setType',282,',max,ipd,',',rnd,','1',65),(393,'design','setPlusType',282,',max,ipd,',',rnd,','1',70),(394,'qa','index',136,',open,biz,max,ipd,',',rnd,','1',5),(395,'bug','browse',137,',open,biz,max,ipd,',',rnd,','1',5),(396,'bug','create',138,',open,biz,max,ipd,',',rnd,','1',0),(397,'bug','batchCreate',138,',open,biz,max,ipd,',',rnd,','1',1),(398,'bug','batchEdit',138,',open,biz,max,ipd,',',rnd,','1',3),(399,'bug','confirmBug',138,',open,biz,max,ipd,',',rnd,','1',4),(400,'bug','batchConfirm',138,',open,biz,max,ipd,',',rnd,','1',5),(401,'bug','view',137,',open,biz,max,ipd,',',rnd,','1',35),(402,'bug','edit',138,',open,biz,max,ipd,',',rnd,','1',2),(403,'bug','assignTo',138,',open,biz,max,ipd,',',rnd,','1',6),(404,'bug','batchAssignTo',138,',open,biz,max,ipd,',',rnd,','1',7),(405,'bug','resolve',138,',open,biz,max,ipd,',',rnd,','1',8),(406,'bug','batchResolve',138,',open,biz,max,ipd,',',rnd,','1',9),(407,'bug','batchClose',138,',open,biz,max,ipd,',',rnd,','1',11),(408,'bug','batchActivate',138,',open,biz,max,ipd,',',rnd,','1',13),(409,'bug','activate',138,',open,biz,max,ipd,',',rnd,','1',12),(410,'bug','close',138,',open,biz,max,ipd,',',rnd,','1',10),(411,'bug','report',137,',open,biz,max,ipd,',',rnd,','1',85),(412,'bug','export',140,',open,biz,max,ipd,',',rnd,','1',90),(413,'bug','confirmStoryChange',138,',open,biz,max,ipd,',',rnd,','1',14),(414,'bug','delete',139,',open,biz,max,ipd,',',rnd,','1',100),(415,'bug','linkBugs',138,',open,biz,max,ipd,',',rnd,','1',15),(416,'bug','batchChangeModule',138,',open,biz,max,ipd,',',rnd,','1',16),(417,'bug','batchChangeBranch',138,',open,biz,max,ipd,',',rnd,','1',17),(418,'bug','batchChangePlan',138,',open,biz,max,ipd,',',rnd,','1',18),(419,'bug','import',140,',biz,max,ipd,',',rnd,','1',125),(420,'bug','exportTemplate',140,',biz,max,ipd,',',rnd,','1',130),(421,'testcase','browse',141,',open,biz,max,ipd,',',rnd,','1',5),(422,'testcase','groupCase',141,',open,biz,max,ipd,',',rnd,','1',10),(423,'testcase','zeroCase',141,',open,biz,max,ipd,',',rnd,','1',15),(424,'testcase','create',142,',open,biz,max,ipd,',',rnd,','1',0),(425,'testcase','batchCreate',142,',open,biz,max,ipd,',',rnd,','1',1),(426,'testcase','createBug',142,',open,biz,max,ipd,',',rnd,','1',5),(427,'testcase','view',141,',open,biz,max,ipd,',',rnd,','1',35),(428,'testcase','edit',142,',open,biz,max,ipd,',',rnd,','1',2),(429,'testcase','delete',144,',open,biz,max,ipd,',',rnd,','1',45),(430,'testcase','export',143,',open,biz,max,ipd,',',rnd,','1',0),(431,'testcase','confirmChange',142,',open,biz,max,ipd,',',rnd,','1',6),(432,'testcase','confirmStoryChange',142,',open,biz,max,ipd,',',rnd,','1',7),(433,'testcase','batchEdit',142,',open,biz,max,ipd,',',rnd,','1',3),(434,'testcase','batchDelete',144,',open,biz,max,ipd,',',rnd,','1',70),(435,'testcase','batchChangeModule',142,',open,biz,max,ipd,',',rnd,','1',9),(436,'testcase','batchChangeBranch',142,',open,biz,max,ipd,',',rnd,','1',10),(437,'testcase','linkCases',142,',open,biz,max,ipd,',',rnd,','1',12),(438,'testcase','linkBugs',142,',open,biz,max,ipd,',',rnd,','1',13),(439,'testcase','bugs',141,',open,biz,max,ipd,',',rnd,','1',95),(440,'testcase','review',145,',open,biz,max,ipd,',',rnd,','1',100),(441,'testcase','batchReview',145,',open,biz,max,ipd,',',rnd,','1',105),(442,'testcase','batchConfirmStoryChange',142,',open,biz,max,ipd,',',rnd,','1',8),(443,'testcase','importFromLib',143,',open,biz,max,ipd,',',rnd,','1',5),(444,'testcase','batchCaseTypeChange',142,',open,biz,max,ipd,',',rnd,','1',11),(445,'testcase','confirmLibcaseChange',142,',open,biz,max,ipd,',',rnd,','1',14),(446,'testcase','ignoreLibcaseChange',142,',open,biz,max,ipd,',',rnd,','1',15),(447,'testcase','importToLib',266,',open,biz,max,ipd,',',rnd,','1',135),(448,'testcase','automation',289,',open,biz,max,ipd,',',rnd,','1',140),(449,'testcase','showScript',289,',open,biz,max,ipd,',',rnd,','1',145),(450,'testcase','exportTemplate',143,',open,biz,max,ipd,',',rnd,','1',1),(451,'testcase','import',143,',open,biz,max,ipd,',',rnd,','1',3),(453,'testcase','submit',142,',max,ipd,',',rnd,','1',4),(454,'testtask','create',147,',open,biz,max,ipd,',',rnd,','1',0),(455,'testtask','browse',146,',open,biz,max,ipd,',',rnd,','1',10),(456,'testtask','view',146,',open,biz,max,ipd,',',rnd,','1',15),(457,'testtask','cases',146,',open,biz,max,ipd,',',rnd,','1',20),(458,'testtask','groupCase',146,',open,biz,max,ipd,',',rnd,','1',25),(459,'testtask','edit',147,',open,biz,max,ipd,',',rnd,','1',1),(460,'testtask','start',147,',open,biz,max,ipd,',',rnd,','1',2),(461,'testtask','activate',147,',open,biz,max,ipd,',',rnd,','1',3),(462,'testtask','block',147,',open,biz,max,ipd,',',rnd,','1',4),(463,'testtask','close',147,',open,biz,max,ipd,',',rnd,','1',5),(464,'testtask','delete',148,',open,biz,max,ipd,',',rnd,','1',55),(465,'testtask','batchAssign',147,',open,biz,max,ipd,',',rnd,','1',12),(466,'testtask','linkcase',147,',open,biz,max,ipd,',',rnd,','1',6),(467,'testtask','unlinkcase',147,',open,biz,max,ipd,',',rnd,','1',7),(468,'testtask','runcase',147,',open,biz,max,ipd,',',rnd,','1',9),(469,'testtask','results',147,',open,biz,max,ipd,',',rnd,','1',11),(470,'testtask','batchUnlinkCases',147,',open,biz,max,ipd,',',rnd,','1',8),(471,'testtask','report',146,',open,biz,max,ipd,',',rnd,','1',90),(472,'testtask','browseUnits',149,',open,biz,max,ipd,',',rnd,','1',0),(473,'testtask','unitCases',149,',open,biz,max,ipd,',',rnd,','1',1),(474,'testtask','importUnitResult',149,',open,biz,max,ipd,',',rnd,','1',2),(475,'testtask','batchRun',147,',open,biz,max,ipd,',',rnd,','1',10),(476,'testtask','runDeployCase',134,',biz,max,ipd,',',rnd,','1',6),(477,'testtask','deployCaseResults',134,',biz,max,ipd,',',rnd,','1',7),(479,'testsuite','browse',150,',open,biz,max,ipd,',',rnd,','1',0),(480,'testsuite','create',151,',open,biz,max,ipd,',',rnd,','1',15),(481,'testsuite','view',150,',open,biz,max,ipd,',',rnd,','1',2),(482,'testsuite','edit',151,',open,biz,max,ipd,',',rnd,','1',25),(483,'testsuite','delete',152,',open,biz,max,ipd,',',rnd,','1',30),(484,'testsuite','linkCase',151,',open,biz,max,ipd,',',rnd,','1',35),(485,'testsuite','unlinkCase',151,',open,biz,max,ipd,',',rnd,','1',40),(486,'testsuite','batchUnlinkCases',151,',open,biz,max,ipd,',',rnd,','1',45),(487,'testreport','browse',153,',open,biz,max,ipd,',',rnd,','1',5),(488,'testreport','create',154,',open,biz,max,ipd,',',rnd,','1',10),(489,'testreport','view',153,',open,biz,max,ipd,',',rnd,','1',15),(490,'testreport','delete',155,',open,biz,max,ipd,',',rnd,','1',20),(491,'testreport','edit',154,',open,biz,max,ipd,',',rnd,','1',25),(492,'testreport','export',156,',biz,max,ipd,',',rnd,','1',30),(493,'milestone','index',183,',max,ipd,',',rnd,','1',5),(494,'milestone','saveOtherProblem',183,',max,ipd,',',rnd,','1',10),(496,'caselib','browse',98,',open,biz,max,ipd,',',rnd,','1',2),(497,'caselib','create',99,',open,biz,max,ipd,',',rnd,','1',0),(498,'caselib','edit',99,',open,biz,max,ipd,',',rnd,','1',1),(499,'caselib','delete',100,',open,biz,max,ipd,',',rnd,','1',25),(500,'caselib','view',98,',open,biz,max,ipd,',',rnd,','1',3),(501,'caselib','createCase',99,',open,biz,max,ipd,',',rnd,','1',3),(502,'caselib','batchCreateCase',99,',open,biz,max,ipd,',',rnd,','1',4),(503,'caselib','exportTemplate',101,',open,biz,max,ipd,',',rnd,','1',45),(504,'caselib','import',101,',open,biz,max,ipd,',',rnd,','1',50),(505,'caselib','showImport',101,',open,biz,max,ipd,',',rnd,','1',55),(506,'zahost','browse',157,',open,biz,max,ipd,',',rnd,','1',5),(507,'zahost','create',158,',open,biz,max,ipd,',',rnd,','1',10),(508,'zahost','edit',158,',open,biz,max,ipd,',',rnd,','1',15),(509,'zahost','delete',159,',open,biz,max,ipd,',',rnd,','1',20),(510,'zahost','view',157,',open,biz,max,ipd,',',rnd,','1',25),(511,'zahost','browseImage',160,',open,biz,max,ipd,',',rnd,','1',30),(512,'zahost','downloadImage',160,',open,biz,max,ipd,',',rnd,','1',35),(513,'zahost','cancelDownload',160,',open,biz,max,ipd,',',rnd,','1',40),(514,'zanode','browse',161,',open,biz,max,ipd,',',rnd,','1',5),(515,'zanode','create',162,',open,biz,max,ipd,',',rnd,','1',10),(516,'zanode','edit',162,',open,biz,max,ipd,',',rnd,','1',15),(517,'zanode','destroy',288,',open,biz,max,ipd,',',rnd,','1',20),(518,'zanode','reboot',162,',open,biz,max,ipd,',',rnd,','1',25),(519,'zanode','resume',162,',open,biz,max,ipd,',',rnd,','1',30),(520,'zanode','getVNC',162,',open,biz,max,ipd,',',rnd,','1',35),(521,'zanode','start',162,',open,biz,max,ipd,',',rnd,','1',40),(522,'zanode','close',162,',open,biz,max,ipd,',',rnd,','1',45),(523,'zanode','view',161,',open,biz,max,ipd,',',rnd,','1',50),(524,'zanode','createImage',163,',open,biz,max,ipd,',',rnd,','1',55),(525,'zanode','browseSnapshot',164,',open,biz,max,ipd,',',rnd,','1',60),(526,'zanode','createSnapshot',164,',open,biz,max,ipd,',',rnd,','1',65),(527,'zanode','editSnapshot',164,',open,biz,max,ipd,',',rnd,','1',70),(528,'zanode','restoreSnapshot',164,',open,biz,max,ipd,',',rnd,','1',75),(529,'zanode','deleteSnapshot',164,',open,biz,max,ipd,',',rnd,','1',80),(530,'zanode','suspend',162,',open,biz,max,ipd,',',rnd,','1',85),(558,'screen','browse',318,',open,biz,max,ipd,',',rnd,','1',5),(559,'screen','view',318,',open,biz,max,ipd,',',rnd,','1',10),(595,'company','browse',234,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(596,'company','edit',169,',open,biz,max,ipd,',',rnd,lite,or,','1',15),(597,'company','dynamic',168,',open,biz,max,ipd,',',rnd,lite,or,','1',20),(598,'company','view',169,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(599,'company','todo',166,',biz,max,ipd,',',rnd,lite,','1',30),(600,'company','calendar',167,',biz,max,ipd,',',rnd,lite,','1',10),(601,'company','allTodo',170,',biz,max,ipd,',',rnd,lite,','1',40),(602,'company','effort',167,',biz,max,ipd,',',rnd,lite,','1',45),(603,'company','alleffort',170,',biz,max,ipd,',',rnd,lite,','1',50),(604,'dept','browse',232,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(605,'dept','updateOrder',232,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(606,'dept','manageChild',232,',open,biz,max,ipd,',',rnd,lite,or,','1',15),(607,'dept','edit',232,',open,biz,max,ipd,',',rnd,lite,or,','1',20),(608,'dept','delete',232,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(609,'group','browse',233,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(610,'group','create',233,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(611,'group','edit',233,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(612,'group','copy',233,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(613,'group','delete',233,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(614,'group','managePriv',231,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(615,'group','manageMember',233,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(616,'group','manageProjectAdmin',233,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(618,'group','manageView',233,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(624,'user','create',234,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(625,'user','batchCreate',234,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(626,'user','view',234,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(627,'user','edit',234,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(628,'user','unlock',234,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(629,'user','delete',234,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(630,'user','todo',165,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(631,'user','task',165,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(632,'user','bug',165,',open,biz,max,ipd,',',rnd,or,','1',7),(633,'user','dynamic',165,',open,biz,max,ipd,',',rnd,lite,or,','1',13),(635,'user','profile',165,',open,biz,max,ipd,',',rnd,lite,or,','1',14),(636,'user','batchEdit',234,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(637,'user','unbind',234,',open,biz,max,ipd,',',rnd,lite,','1',8),(638,'user','setPublicTemplate',296,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(639,'user','export',234,',biz,max,ipd,',',rnd,or,','1',9),(640,'user','exportTemplate',234,',biz,max,ipd,',',rnd,or,','1',10),(641,'user','story',165,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(642,'user','testTask',165,',open,biz,max,ipd,',',rnd,or,','1',8),(643,'user','testCase',165,',open,biz,max,ipd,',',rnd,or,','1',9),(644,'user','execution',165,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(645,'user','effortcalendar',165,',biz,max,ipd,',',rnd,','1',3),(646,'user','todocalendar',165,',biz,max,ipd,',',rnd,','1',4),(647,'user','effort',165,',biz,max,ipd,',',rnd,','1',1),(648,'user','import',234,',biz,max,ipd,',',rnd,or,','1',11),(649,'user','importldap',253,',biz,max,ipd,',',rnd,or,','1',15),(650,'user','issue',165,',max,ipd,',',rnd,','1',11),(651,'user','risk',165,',max,ipd,',',rnd,','1',12),(652,'admin','index',645,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(654,'admin','checkWeak',251,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(655,'admin','sso',234,',open,biz,max,ipd,',',rnd,lite,','1',65),(656,'admin','register',645,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(657,'admin','xuanxuan',254,',open,biz,max,ipd,',',rnd,lite,','1',8),(659,'admin','resetPWDSetting',251,',open,biz,max,ipd,',',rnd,or,','1',2),(660,'admin','tableEngine',256,',open,biz,max,ipd,',',rnd,or,','1',45),(661,'admin','safe',251,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(662,'stage','browse',268,',open,biz,max,ipd,',',rnd,','1',0),(663,'stage','create',268,',open,biz,max,ipd,',',rnd,','1',2),(664,'stage','batchCreate',268,',open,biz,max,ipd,',',rnd,','1',3),(665,'stage','edit',268,',open,biz,max,ipd,',',rnd,','1',4),(666,'stage','setType',267,',open,biz,max,ipd,',',rnd,','1',25),(667,'stage','delete',268,',open,biz,max,ipd,',',rnd,','1',5),(668,'stage','plusBrowse',268,',open,biz,max,ipd,',',rnd,','1',1),(669,'extension','browse',235,',open,biz,max,ipd,',',rnd,lite,','1',0),(670,'extension','obtain',235,',open,biz,max,ipd,',',rnd,lite,','1',2),(671,'extension','structure',235,',open,biz,max,ipd,',',rnd,lite,','1',3),(672,'extension','install',235,',open,biz,max,ipd,',',rnd,lite,','1',4),(673,'extension','uninstall',235,',open,biz,max,ipd,',',rnd,lite,','1',5),(674,'extension','activate',235,',open,biz,max,ipd,',',rnd,lite,','1',6),(675,'extension','deactivate',235,',open,biz,max,ipd,',',rnd,lite,','1',7),(676,'extension','upload',235,',open,biz,max,ipd,',',rnd,lite,','1',1),(677,'extension','erase',235,',open,biz,max,ipd,',',rnd,lite,','1',8),(678,'extension','upgrade',235,',open,biz,max,ipd,',',rnd,lite,','1',9),(680,'custom','set',276,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(681,'custom','product',276,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(682,'custom','execution',276,',open,biz,max,ipd,',',rnd,lite,','1',9),(683,'custom','required',276,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(684,'custom','restore',276,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(685,'custom','flow',267,',open,biz,max,ipd,',',rnd,lite,or,','1',35),(687,'custom','timezone',256,',open,biz,max,ipd,',',rnd,lite,or,','1',45),(688,'custom','estimate',267,',max,ipd,',',rnd,','1',50),(689,'custom','editStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(690,'custom','browseStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(691,'custom','setDefaultConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(692,'custom','deleteStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(693,'custom','kanban',276,',open,biz,max,ipd,',',rnd,','1',11),(694,'custom','code',267,',open,biz,max,ipd,',',rnd,or,','1',80),(695,'custom','hours',267,',open,biz,max,ipd,',',rnd,or,','1',85),(696,'custom','percent',267,',open,biz,max,ipd,',',rnd,or,','1',90),(697,'custom','setStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(698,'custom','libreoffice',256,',biz,max,ipd,',',rnd,lite,','1',100),(699,'action','trash',250,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(700,'action','undelete',250,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(701,'action','hideOne',250,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(702,'action','hideAll',250,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(703,'action','comment',258,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(704,'action','editComment',258,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(705,'mail','index',237,',open,biz,max,ipd,',',lite,rnd,or,','1',0),(706,'mail','detect',237,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(707,'mail','edit',237,',open,biz,max,ipd,',',lite,rnd,or,','1',1),(708,'mail','save',237,',open,biz,max,ipd,',',lite,rnd,or,','1',3),(709,'mail','test',237,',open,biz,max,ipd,',',lite,rnd,or,','1',2),(710,'mail','reset',237,',open,biz,max,ipd,',',lite,rnd,or,','1',4),(711,'mail','browse',237,',open,biz,max,ipd,',',lite,rnd,or,','1',6),(712,'mail','delete',237,',open,biz,max,ipd,',',lite,rnd,or,','1',7),(713,'mail','batchDelete',237,',open,biz,max,ipd,',',lite,rnd,or,','1',8),(714,'mail','resend',237,',open,biz,max,ipd,',',lite,rnd,or,','1',9),(715,'sms','index',241,',biz,max,ipd,',',lite,rnd,or,','1',5),(716,'sms','test',241,',biz,max,ipd,',',lite,rnd,or,','1',10),(717,'sms','reset',241,',biz,max,ipd,',',lite,rnd,or,','1',15),(718,'svn','diff',300,',open,biz,max,ipd,',',rnd,','1',5),(719,'svn','cat',300,',open,biz,max,ipd,',',rnd,','1',10),(720,'svn','apiSync',300,',open,biz,max,ipd,',',rnd,','1',15),(721,'git','diff',299,',open,biz,max,ipd,',',rnd,','1',5),(722,'git','cat',299,',open,biz,max,ipd,',',rnd,','1',10),(723,'git','apiSync',299,',open,biz,max,ipd,',',rnd,','1',15),(724,'search','buildForm',257,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(725,'search','buildQuery',257,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(726,'search','saveQuery',257,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(727,'search','deleteQuery',257,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(728,'search','select',257,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(729,'search','index',257,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(730,'search','buildIndex',256,',open,biz,max,ipd,',',rnd,lite,or,','1',35),(731,'tree','browse',259,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(732,'tree','browseTask',259,',open,biz,max,ipd,',',rnd,lite,','1',1),(733,'tree','updateOrder',259,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(734,'tree','manageChild',259,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(735,'tree','edit',259,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(736,'tree','delete',259,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(737,'tree','editHost',259,',biz,max,ipd,',',rnd,lite,','1',4),(738,'tree','fix',259,',open,biz,max,ipd,',',rnd,lite,or,','1',9),(739,'tree','browsehost',259,',biz,max,ipd,',',rnd,lite,','1',3),(758,'file','download',260,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(759,'file','edit',260,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(760,'file','delete',260,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(761,'file','uploadImages',260,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(762,'file','setPublic',260,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(763,'misc','ping',301,',open,biz,max,ipd,',',rnd,lite,','1',5),(764,'backup','index',249,',open,biz,max,ipd,',',lite,rnd,or,','1',0),(765,'backup','backup',249,',open,biz,max,ipd,',',lite,rnd,or,','1',2),(766,'backup','restore',249,',open,biz,max,ipd,',',lite,rnd,or,','1',3),(767,'backup','delete',249,',open,biz,max,ipd,',',lite,rnd,or,','1',4),(768,'backup','setting',249,',open,biz,max,ipd,',',lite,rnd,or,','1',1),(769,'backup','rmPHPHeader',249,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(770,'backup','change',249,',open,biz,max,ipd,',',lite,rnd,or,','1',6),(771,'cron','index',252,',open,biz,max,ipd,',',rnd,lite,','1',0),(772,'cron','turnon',252,',open,biz,max,ipd,',',rnd,lite,','1',1),(773,'cron','create',252,',open,biz,max,ipd,',',rnd,lite,','1',3),(774,'cron','edit',252,',open,biz,max,ipd,',',rnd,lite,','1',5),(775,'cron','toggle',252,',open,biz,max,ipd,',',rnd,lite,','1',4),(776,'cron','delete',252,',open,biz,max,ipd,',',rnd,lite,','1',6),(777,'cron','openProcess',252,',open,biz,max,ipd,',',rnd,lite,','1',2),(778,'dev','api',226,',open,biz,max,ipd,',',rnd,','1',5),(779,'dev','db',226,',open,biz,max,ipd,',',rnd,','1',10),(781,'editor','index',228,',open,biz,max,ipd,',',rnd,','1',5),(782,'editor','extend',228,',open,biz,max,ipd,',',rnd,','1',10),(783,'editor','edit',228,',open,biz,max,ipd,',',rnd,','1',15),(784,'editor','newPage',228,',open,biz,max,ipd,',',rnd,','1',20),(785,'editor','save',228,',open,biz,max,ipd,',',rnd,','1',25),(786,'editor','delete',228,',open,biz,max,ipd,',',rnd,','1',30),(787,'issue','browse',189,',max,ipd,',',rnd,','1',5),(788,'issue','create',190,',max,ipd,',',rnd,','1',10),(789,'issue','batchCreate',190,',max,ipd,',',rnd,','1',15),(790,'issue','delete',192,',max,ipd,',',rnd,','1',20),(791,'issue','edit',190,',max,ipd,',',rnd,','1',25),(792,'issue','confirm',190,',max,ipd,',',rnd,','1',30),(793,'issue','assignTo',190,',max,ipd,',',rnd,','1',35),(794,'issue','close',190,',max,ipd,',',rnd,','1',40),(795,'issue','cancel',190,',max,ipd,',',rnd,','1',45),(796,'issue','activate',190,',max,ipd,',',rnd,','1',50),(797,'issue','resolve',190,',max,ipd,',',rnd,','1',55),(798,'issue','view',189,',max,ipd,',',rnd,','1',60),(799,'issue','export',191,',max,ipd,',',rnd,','1',65),(800,'issue','importToLib',193,',max,ipd,',',rnd,','1',70),(801,'issue','batchImportToLib',193,',max,ipd,',',rnd,','1',75),(802,'issue','importFromLib',191,',max,ipd,',',rnd,','1',80),(803,'risk','browse',194,',max,ipd,',',rnd,','1',5),(804,'risk','create',195,',max,ipd,',',rnd,','1',0),(805,'risk','edit',195,',max,ipd,',',rnd,','1',2),(806,'risk','delete',197,',max,ipd,',',rnd,','1',20),(807,'risk','activate',195,',max,ipd,',',rnd,','1',3),(808,'risk','close',195,',max,ipd,',',rnd,','1',8),(809,'risk','hangup',195,',max,ipd,',',rnd,','1',6),(810,'risk','batchCreate',195,',max,ipd,',',rnd,','1',1),(811,'risk','cancel',195,',max,ipd,',',rnd,','1',7),(812,'risk','track',195,',max,ipd,',',rnd,','1',5),(813,'risk','view',194,',max,ipd,',',rnd,','1',55),(814,'risk','assignTo',195,',max,ipd,',',rnd,','1',4),(815,'risk','importToLib',198,',max,ipd,',',rnd,','1',65),(816,'risk','batchImportToLib',198,',max,ipd,',',rnd,','1',70),(817,'risk','importFromLib',196,',max,ipd,',',rnd,','1',1),(818,'risk','export',196,',max,ipd,',',rnd,','1',0),(819,'mr','create',230,',open,biz,max,ipd,',',rnd,','1',2),(820,'mr','browse',230,',open,biz,max,ipd,',',rnd,','1',1),(821,'mr','edit',230,',open,biz,max,ipd,',',rnd,','1',3),(822,'mr','delete',230,',open,biz,max,ipd,',',rnd,','1',4),(823,'mr','view',230,',open,biz,max,ipd,',',rnd,','1',5),(824,'mr','accept',230,',open,biz,max,ipd,',',rnd,','1',0),(825,'mr','diff',230,',open,biz,max,ipd,',',rnd,','1',6),(826,'mr','link',230,',open,biz,max,ipd,',',rnd,','1',7),(827,'mr','linkStory',230,',open,biz,max,ipd,',',rnd,','1',8),(828,'mr','linkBug',230,',open,biz,max,ipd,',',rnd,','1',9),(829,'mr','linkTask',230,',open,biz,max,ipd,',',rnd,','1',10),(830,'mr','unlink',230,',open,biz,max,ipd,',',rnd,','1',11),(831,'mr','approval',230,',open,biz,max,ipd,',',rnd,','1',13),(832,'mr','close',230,',open,biz,max,ipd,',',rnd,','1',14),(833,'mr','reopen',230,',open,biz,max,ipd,',',rnd,','1',15),(834,'mr','addReview',230,',open,biz,max,ipd,',',rnd,','1',12),(835,'budget','browse',186,',max,ipd,',',rnd,','1',5),(836,'budget','summary',186,',max,ipd,',',rnd,','1',10),(837,'budget','create',186,',max,ipd,',',rnd,','1',15),(838,'budget','batchCreate',186,',max,ipd,',',rnd,','1',20),(839,'budget','edit',186,',max,ipd,',',rnd,','1',25),(840,'budget','view',186,',max,ipd,',',rnd,','1',30),(841,'budget','delete',186,',max,ipd,',',rnd,','1',35),(842,'workestimation','index',187,',max,ipd,',',rnd,','1',5),(843,'durationestimation','index',188,',max,ipd,',',rnd,','1',5),(844,'durationestimation','create',188,',max,ipd,',',rnd,','1',10),(845,'holiday','browse',110,',open,biz,max,ipd,',',rnd,','1',5),(846,'holiday','create',110,',open,biz,max,ipd,',',rnd,','1',10),(847,'holiday','edit',110,',open,biz,max,ipd,',',rnd,','1',15),(848,'holiday','delete',110,',open,biz,max,ipd,',',rnd,','1',20),(849,'holiday','import',110,',open,biz,max,ipd,',',rnd,','1',25),(850,'weekly','index',182,',max,ipd,',',rnd,','1',5),(851,'weekly','exportweeklyreport',182,',max,ipd,',',rnd,','1',10),(852,'opportunity','browse',199,',max,ipd,',',rnd,','1',5),(853,'opportunity','create',200,',max,ipd,',',rnd,','1',0),(854,'opportunity','edit',200,',max,ipd,',',rnd,','1',2),(855,'opportunity','delete',201,',max,ipd,',',rnd,','1',20),(856,'opportunity','activate',200,',max,ipd,',',rnd,','1',4),(857,'opportunity','close',200,',max,ipd,',',rnd,','1',10),(858,'opportunity','hangup',200,',max,ipd,',',rnd,','1',8),(859,'opportunity','cancel',200,',max,ipd,',',rnd,','1',13),(860,'opportunity','track',200,',max,ipd,',',rnd,','1',12),(861,'opportunity','view',199,',max,ipd,',',rnd,','1',50),(862,'opportunity','assignTo',200,',max,ipd,',',rnd,','1',6),(863,'opportunity','batchCreate',200,',max,ipd,',',rnd,','1',1),(864,'opportunity','batchEdit',200,',max,ipd,',',rnd,','1',3),(865,'opportunity','batchAssignTo',200,',max,ipd,',',rnd,','1',7),(866,'opportunity','batchClose',200,',max,ipd,',',rnd,','1',11),(867,'opportunity','batchCancel',200,',max,ipd,',',rnd,','1',14),(868,'opportunity','batchHangup',200,',max,ipd,',',rnd,','1',9),(869,'opportunity','batchActivate',200,',max,ipd,',',rnd,','1',5),(870,'opportunity','importToLib',202,',max,ipd,',',rnd,','1',95),(871,'opportunity','batchImportToLib',202,',max,ipd,',',rnd,','1',100),(872,'opportunity','importFromLib',203,',max,ipd,',',rnd,','1',105),(873,'opportunity','export',203,',max,ipd,',',rnd,','1',110),(874,'trainplan','browse',209,',max,ipd,',',rnd,','1',0),(875,'trainplan','create',209,',max,ipd,',',rnd,','1',2),(876,'trainplan','edit',209,',max,ipd,',',rnd,','1',4),(877,'trainplan','batchCreate',209,',max,ipd,',',rnd,','1',3),(878,'trainplan','batchEdit',209,',max,ipd,',',rnd,','1',5),(879,'trainplan','batchFinish',209,',max,ipd,',',rnd,','1',7),(880,'trainplan','delete',209,',max,ipd,',',rnd,','1',8),(881,'trainplan','finish',209,',max,ipd,',',rnd,','1',6),(882,'trainplan','summary',209,',max,ipd,',',rnd,','1',9),(883,'trainplan','view',209,',max,ipd,',',rnd,','1',1),(884,'nc','browse',207,',max,ipd,',',rnd,','1',0),(885,'nc','create',207,',max,ipd,',',rnd,','1',2),(886,'nc','edit',207,',max,ipd,',',rnd,','1',3),(887,'nc','resolve',207,',max,ipd,',',rnd,','1',4),(888,'nc','view',207,',max,ipd,',',rnd,','1',1),(889,'nc','close',207,',max,ipd,',',rnd,','1',5),(890,'nc','delete',207,',max,ipd,',',rnd,','1',6),(891,'nc','assignTo',207,',max,ipd,',',rnd,','1',7),(892,'nc','activate',207,',max,ipd,',',rnd,','1',8),(893,'nc','export',207,',max,ipd,',',rnd,','1',9),(894,'gapanalysis','browse',210,',max,ipd,',',rnd,','1',0),(895,'gapanalysis','create',210,',max,ipd,',',rnd,','1',2),(896,'gapanalysis','edit',210,',max,ipd,',',rnd,','1',4),(897,'gapanalysis','batchCreate',210,',max,ipd,',',rnd,','1',3),(898,'gapanalysis','batchEdit',210,',max,ipd,',',rnd,','1',5),(899,'gapanalysis','delete',210,',max,ipd,',',rnd,','1',6),(900,'gapanalysis','view',210,',max,ipd,',',rnd,','1',1),(901,'researchplan','browse',184,',max,ipd,',',rnd,','1',0),(902,'researchplan','create',184,',max,ipd,',',rnd,','1',2),(903,'researchplan','edit',184,',max,ipd,',',rnd,','1',3),(904,'researchplan','delete',184,',max,ipd,',',rnd,','1',4),(905,'researchplan','view',184,',max,ipd,',',rnd,','1',1),(906,'researchreport','browse',185,',max,ipd,',',rnd,','1',0),(907,'researchreport','create',185,',max,ipd,',',rnd,','1',2),(908,'researchreport','edit',185,',max,ipd,',',rnd,','1',3),(909,'researchreport','delete',185,',max,ipd,',',rnd,','1',4),(910,'researchreport','view',185,',max,ipd,',',rnd,','1',1),(911,'meeting','browse',208,',max,ipd,',',rnd,','1',0),(912,'meeting','create',208,',max,ipd,',',rnd,','1',2),(913,'meeting','edit',208,',max,ipd,',',rnd,','1',3),(914,'meeting','delete',208,',max,ipd,',',rnd,','1',4),(915,'meeting','view',208,',max,ipd,',',rnd,','1',1),(916,'meeting','minutes',208,',max,ipd,',',rnd,','1',5),(917,'meetingroom','browse',280,',max,ipd,',',rnd,','1',0),(918,'meetingroom','create',280,',max,ipd,',',rnd,','1',2),(919,'meetingroom','edit',280,',max,ipd,',',rnd,','1',4),(920,'meetingroom','delete',280,',max,ipd,',',rnd,','1',6),(921,'meetingroom','view',280,',max,ipd,',',rnd,','1',1),(922,'meetingroom','batchCreate',280,',max,ipd,',',rnd,','1',3),(923,'meetingroom','batchEdit',280,',max,ipd,',',rnd,','1',5),(924,'approval','progress',277,',max,ipd,',',rnd,','1',10),(925,'workflow','browseFlow',223,',biz,max,ipd,',',rnd,lite,','1',5),(926,'workflow','browseDB',223,',biz,max,ipd,',',rnd,lite,','1',10),(927,'workflow','create',223,',biz,max,ipd,',',rnd,lite,','1',15),(928,'workflow','copy',223,',biz,max,ipd,',',rnd,lite,','1',20),(929,'workflow','edit',223,',biz,max,ipd,',',rnd,lite,','1',25),(930,'workflow','backup',223,',biz,max,ipd,',',rnd,lite,','1',30),(931,'workflow','upgrade',223,',biz,max,ipd,',',rnd,lite,','1',35),(932,'workflow','view',223,',biz,max,ipd,',',rnd,lite,','1',40),(933,'workflow','delete',223,',biz,max,ipd,',',rnd,lite,','1',45),(934,'workflow','flowchart',223,',biz,max,ipd,',',rnd,lite,','1',50),(935,'workflow','ui',223,',biz,max,ipd,',',rnd,lite,','1',55),(936,'workflow','release',223,',biz,max,ipd,',',rnd,lite,','1',60),(937,'workflow','deactivate',223,',biz,max,ipd,',',rnd,lite,','1',65),(938,'workflow','activate',223,',biz,max,ipd,',',rnd,lite,','1',70),(939,'workflow','setApproval',223,',max,',',rnd,','1',75),(940,'workflow','setJS',223,',biz,max,ipd,',',rnd,lite,','1',80),(941,'workflow','setCSS',223,',biz,max,ipd,',',rnd,lite,','1',85),(942,'workflowfield','browse',211,',biz,max,ipd,',',rnd,lite,','1',5),(943,'workflowfield','create',211,',biz,max,ipd,',',rnd,lite,','1',10),(944,'workflowfield','edit',211,',biz,max,ipd,',',rnd,lite,','1',15),(945,'workflowfield','delete',211,',biz,max,ipd,',',rnd,lite,','1',20),(946,'workflowfield','sort',211,',biz,max,ipd,',',rnd,lite,','1',25),(947,'workflowfield','import',211,',biz,max,ipd,',',rnd,lite,','1',30),(948,'workflowfield','showImport',211,',biz,max,ipd,',',rnd,lite,','1',35),(949,'workflowfield','exportTemplate',211,',biz,max,ipd,',',rnd,lite,','1',40),(950,'workflowfield','setValue',211,',biz,max,ipd,',',rnd,lite,','1',45),(951,'workflowfield','setExport',211,',biz,max,ipd,',',rnd,lite,','1',50),(952,'workflowfield','setSearch',211,',biz,max,ipd,',',rnd,lite,','1',55),(953,'workflowaction','browse',212,',biz,max,ipd,',',rnd,lite,','1',5),(954,'workflowaction','create',212,',biz,max,ipd,',',rnd,lite,','1',10),(955,'workflowaction','edit',212,',biz,max,ipd,',',rnd,lite,','1',15),(956,'workflowaction','view',212,',biz,max,ipd,',',rnd,lite,','1',20),(957,'workflowaction','delete',212,',biz,max,ipd,',',rnd,lite,','1',25),(958,'workflowaction','sort',212,',biz,max,ipd,',',rnd,lite,','1',30),(959,'workflowaction','setVerification',212,',biz,max,ipd,',',rnd,lite,','1',35),(960,'workflowaction','setNotice',212,',biz,max,ipd,',',rnd,lite,','1',40),(961,'workflowaction','setJS',212,',biz,max,ipd,',',rnd,lite,','1',45),(962,'workflowaction','setCSS',212,',biz,max,ipd,',',rnd,lite,','1',50),(963,'workflowlayout','admin',213,',biz,max,ipd,',',rnd,lite,','1',5),(964,'workflowlayout','block',213,',biz,max,ipd,',',rnd,lite,','1',10),(965,'workflowcondition','browse',214,',biz,max,ipd,',',rnd,lite,','1',5),(966,'workflowcondition','create',214,',biz,max,ipd,',',rnd,lite,','1',10),(967,'workflowcondition','edit',214,',biz,max,ipd,',',rnd,lite,','1',15),(968,'workflowcondition','delete',214,',biz,max,ipd,',',rnd,lite,','1',20),(969,'workflowlinkage','browse',215,',biz,max,ipd,',',rnd,lite,','1',5),(970,'workflowlinkage','create',215,',biz,max,ipd,',',rnd,lite,','1',10),(971,'workflowlinkage','edit',215,',biz,max,ipd,',',rnd,lite,','1',15),(972,'workflowlinkage','delete',215,',biz,max,ipd,',',rnd,lite,','1',20),(973,'workflowhook','browse',216,',biz,max,ipd,',',rnd,lite,','1',5),(974,'workflowhook','create',216,',biz,max,ipd,',',rnd,lite,','1',10),(975,'workflowhook','edit',216,',biz,max,ipd,',',rnd,lite,','1',15),(976,'workflowhook','delete',216,',biz,max,ipd,',',rnd,lite,','1',20),(977,'workflowlabel','browse',217,',biz,max,ipd,',',rnd,lite,','1',5),(978,'workflowlabel','create',217,',biz,max,ipd,',',rnd,lite,','1',10),(979,'workflowlabel','edit',217,',biz,max,ipd,',',rnd,lite,','1',15),(980,'workflowlabel','delete',217,',biz,max,ipd,',',rnd,lite,','1',20),(981,'workflowlabel','sort',217,',biz,max,ipd,',',rnd,lite,','1',25),(982,'workflowrelation','admin',295,',biz,max,ipd,',',rnd,lite,','1',5),(983,'workflowreport','browse',220,',biz,max,ipd,',',rnd,lite,','1',5),(984,'workflowreport','create',220,',biz,max,ipd,',',rnd,lite,','1',10),(985,'workflowreport','edit',220,',biz,max,ipd,',',rnd,lite,','1',15),(986,'workflowreport','delete',220,',biz,max,ipd,',',rnd,lite,','1',20),(987,'workflowreport','sort',220,',biz,max,ipd,',',rnd,lite,','1',25),(988,'workflowdatasource','browse',221,',biz,max,ipd,',',rnd,lite,','1',5),(989,'workflowdatasource','create',221,',biz,max,ipd,',',rnd,lite,','1',10),(990,'workflowdatasource','edit',221,',biz,max,ipd,',',rnd,lite,','1',15),(991,'workflowdatasource','delete',221,',biz,max,ipd,',',rnd,lite,','1',20),(992,'workflowrule','browse',222,',biz,max,ipd,',',rnd,lite,','1',5),(993,'workflowrule','create',222,',biz,max,ipd,',',rnd,lite,','1',10),(994,'workflowrule','edit',222,',biz,max,ipd,',',rnd,lite,','1',15),(995,'workflowrule','view',222,',biz,max,ipd,',',rnd,lite,','1',20),(996,'workflowrule','delete',222,',biz,max,ipd,',',rnd,lite,','1',25),(997,'projectbuild','browse',265,',open,biz,max,ipd,',',rnd,','1',0),(998,'projectbuild','create',265,',open,biz,max,ipd,',',rnd,','1',2),(999,'projectbuild','edit',265,',open,biz,max,ipd,',',rnd,','1',3),(1000,'projectbuild','view',265,',open,biz,max,ipd,',',rnd,','1',1),(1001,'projectbuild','delete',265,',open,biz,max,ipd,',',rnd,','1',4),(1002,'projectbuild','linkStory',265,',open,biz,max,ipd,',',rnd,','1',5),(1003,'projectbuild','unlinkStory',265,',open,biz,max,ipd,',',rnd,','1',6),(1004,'projectbuild','batchUnlinkStory',265,',open,biz,max,ipd,',',rnd,','1',7),(1005,'projectbuild','linkBug',265,',open,biz,max,ipd,',',rnd,','1',8),(1006,'projectbuild','unlinkBug',265,',open,biz,max,ipd,',',rnd,','1',9),(1007,'projectbuild','batchUnlinkBug',265,',open,biz,max,ipd,',',rnd,','1',10),(1008,'projectrelease','browse',181,',open,biz,max,ipd,',',rnd,','1',0),(1009,'projectrelease','create',303,',open,biz,max,ipd,',',rnd,','1',2),(1010,'projectrelease','edit',303,',open,biz,max,ipd,',',rnd,','1',3),(1011,'projectrelease','delete',304,',open,biz,max,ipd,',',rnd,','1',4),(1012,'projectrelease','view',181,',open,biz,max,ipd,',',rnd,','1',1),(1013,'projectrelease','export',305,',open,biz,max,ipd,',',rnd,','1',12),(1014,'projectrelease','linkStory',303,',open,biz,max,ipd,',',rnd,','1',5),(1015,'projectrelease','unlinkStory',303,',open,biz,max,ipd,',',rnd,','1',6),(1016,'projectrelease','batchUnlinkStory',303,',open,biz,max,ipd,',',rnd,','1',7),(1017,'projectrelease','linkBug',303,',open,biz,max,ipd,',',rnd,','1',8),(1018,'projectrelease','unlinkBug',303,',open,biz,max,ipd,',',rnd,','1',9),(1019,'projectrelease','batchUnlinkBug',303,',open,biz,max,ipd,',',rnd,','1',10),(1020,'projectrelease','changeStatus',303,',open,biz,max,ipd,',',rnd,','1',11),(1021,'projectrelease','notify',306,',open,biz,max,ipd,',',rnd,','1',13),(1022,'stakeholder','browse',264,',open,biz,max,ipd,',',rnd,','1',0),(1023,'stakeholder','create',264,',open,biz,max,ipd,',',rnd,','1',2),(1024,'stakeholder','batchCreate',264,',open,biz,max,ipd,',',rnd,','1',3),(1025,'stakeholder','edit',264,',open,biz,max,ipd,',',rnd,','1',4),(1027,'stakeholder','delete',264,',open,biz,max,ipd,',',rnd,','1',5),(1028,'stakeholder','view',264,',open,biz,max,ipd,',',rnd,','1',1),(1031,'stakeholder','communicate',264,',open,biz,max,ipd,',',rnd,','1',6),(1032,'stakeholder','expect',264,',open,biz,max,ipd,',',rnd,','1',7),(1038,'stakeholder','userIssue',264,',open,biz,max,ipd,',',rnd,','1',8),(1039,'branch','manage',24,',open,biz,max,ipd,',',rnd,or,','1',0),(1040,'branch','create',24,',open,biz,max,ipd,',',rnd,or,','1',1),(1041,'branch','edit',24,',open,biz,max,ipd,',',rnd,or,','1',2),(1042,'branch','close',24,',open,biz,max,ipd,',',rnd,or,','1',7),(1043,'branch','activate',24,',open,biz,max,ipd,',',rnd,or,','1',4),(1044,'branch','sort',24,',open,biz,max,ipd,',',rnd,or,','1',5),(1045,'branch','batchEdit',24,',open,biz,max,ipd,',',rnd,or,','1',3),(1046,'branch','mergeBranch',24,',open,biz,max,ipd,',',rnd,or,','1',6),(1047,'repo','create',239,',open,biz,max,ipd,',',rnd,','1',2),(1048,'repo','edit',239,',open,biz,max,ipd,',',rnd,','1',4),(1049,'repo','delete',239,',open,biz,max,ipd,',',rnd,','1',5),(1050,'repo','showSyncCommit',224,',open,biz,max,ipd,',',rnd,','1',0),(1051,'repo','maintain',239,',open,biz,max,ipd,',',rnd,','1',0),(1052,'repo','browse',239,',open,biz,max,ipd,',',rnd,','1',1),(1053,'repo','view',224,',open,biz,max,ipd,',',rnd,','1',1),(1054,'repo','diff',227,',open,biz,max,ipd,',',rnd,','1',0),(1055,'repo','log',224,',open,biz,max,ipd,',',rnd,','1',3),(1056,'repo','revision',224,',open,biz,max,ipd,',',rnd,','1',4),(1057,'repo','blame',224,',open,biz,max,ipd,',',rnd,','1',2),(1058,'repo','download',225,',open,biz,max,ipd,',',rnd,','1',1),(1059,'repo','setRules',245,',open,biz,max,ipd,',',rnd,','1',5),(1060,'repo','apiGetRepoByUrl',239,',open,biz,max,ipd,',',rnd,','1',6),(1061,'repo','downloadCode',225,',open,biz,max,ipd,',',rnd,','1',0),(1062,'repo','linkStory',224,',open,biz,max,ipd,',',rnd,','1',5),(1063,'repo','linkBug',224,',open,biz,max,ipd,',',rnd,','1',6),(1064,'repo','linkTask',224,',open,biz,max,ipd,',',rnd,','1',7),(1065,'repo','unlink',224,',open,biz,max,ipd,',',rnd,','1',8),(1066,'repo','review',227,',biz,max,ipd,',',rnd,','1',1),(1067,'repo','addBug',227,',biz,max,ipd,',',rnd,','1',2),(1068,'repo','editBug',227,',biz,max,ipd,',',rnd,','1',3),(1069,'repo','deleteBug',227,',biz,max,ipd,',',rnd,','1',4),(1070,'repo','addComment',227,',biz,max,ipd,',',rnd,','1',5),(1071,'repo','editComment',227,',biz,max,ipd,',',rnd,','1',6),(1072,'repo','deleteComment',227,',biz,max,ipd,',',rnd,','1',7),(1073,'ci','commitResult',298,',open,biz,max,ipd,',',rnd,','1',5),(1074,'ci','checkCompileStatus',298,',open,biz,max,ipd,',',rnd,','1',10),(1075,'compile','browse',246,',open,biz,max,ipd,',',rnd,','1',5),(1076,'compile','logs',246,',open,biz,max,ipd,',',rnd,','1',7),(1077,'compile','syncCompile',246,',open,biz,max,ipd,',',rnd,','1',8),(1078,'jenkins','browse',255,',open,biz,max,ipd,',',rnd,','1',5),(1079,'jenkins','create',255,',open,biz,max,ipd,',',rnd,','1',10),(1080,'jenkins','edit',255,',open,biz,max,ipd,',',rnd,','1',15),(1081,'jenkins','delete',255,',open,biz,max,ipd,',',rnd,','1',20),(1082,'job','browse',246,',open,biz,max,ipd,',',rnd,','1',0),(1083,'job','create',246,',open,biz,max,ipd,',',rnd,','1',1),(1084,'job','edit',246,',open,biz,max,ipd,',',rnd,','1',2),(1085,'job','delete',246,',open,biz,max,ipd,',',rnd,','1',3),(1086,'job','exec',246,',open,biz,max,ipd,',',rnd,','1',4),(1087,'job','view',246,',open,biz,max,ipd,',',rnd,','1',6),(1088,'datatable','setGlobal',296,',open,biz,max,ipd,',',rnd,lite,','1',5),(1089,'gitlab','browse',240,',open,biz,max,ipd,',',rnd,','1',0),(1090,'gitlab','create',240,',open,biz,max,ipd,',',rnd,','1',2),(1091,'gitlab','edit',240,',open,biz,max,ipd,',',rnd,','1',3),(1092,'gitlab','view',240,',open,biz,max,ipd,',',rnd,','1',1),(1093,'gitlab','importIssue',240,',open,biz,max,ipd,',',rnd,','1',7),(1094,'gitlab','delete',240,',open,biz,max,ipd,',',rnd,','1',4),(1095,'gitlab','bindUser',240,',open,biz,max,ipd,',',rnd,','1',6),(1096,'gitlab','browseProject',240,',open,biz,max,ipd,',',rnd,','1',9),(1097,'gitlab','createProject',240,',open,biz,max,ipd,',',rnd,','1',10),(1098,'gitlab','editProject',240,',open,biz,max,ipd,',',rnd,','1',11),(1099,'gitlab','deleteProject',240,',open,biz,max,ipd,',',rnd,','1',12),(1100,'gitlab','browseGroup',240,',open,biz,max,ipd,',',rnd,','1',14),(1101,'gitlab','createGroup',240,',open,biz,max,ipd,',',rnd,','1',15),(1102,'gitlab','editGroup',240,',open,biz,max,ipd,',',rnd,','1',16),(1103,'gitlab','deleteGroup',240,',open,biz,max,ipd,',',rnd,','1',17),(1104,'gitlab','manageGroupMembers',240,',open,biz,max,ipd,',',rnd,','1',18),(1105,'gitlab','browseUser',240,',open,biz,max,ipd,',',rnd,','1',19),(1106,'gitlab','createUser',240,',open,biz,max,ipd,',',rnd,','1',20),(1107,'gitlab','editUser',240,',open,biz,max,ipd,',',rnd,','1',21),(1108,'gitlab','deleteUser',240,',open,biz,max,ipd,',',rnd,','1',22),(1109,'gitlab','createBranch',240,',open,biz,max,ipd,',',rnd,','1',28),(1110,'gitlab','browseBranch',240,',open,biz,max,ipd,',',rnd,','1',27),(1111,'gitlab','webhook',240,',open,biz,max,ipd,',',rnd,','1',30),(1112,'gitlab','createWebhook',240,',open,biz,max,ipd,',',rnd,','1',8),(1113,'gitlab','manageProjectMembers',240,',open,biz,max,ipd,',',rnd,','1',13),(1114,'gitlab','manageBranchPriv',240,',open,biz,max,ipd,',',rnd,','1',29),(1115,'gitlab','manageTagPriv',240,',open,biz,max,ipd,',',rnd,','1',26),(1116,'gitlab','browseTag',240,',open,biz,max,ipd,',',rnd,','1',23),(1117,'gitlab','createTag',240,',open,biz,max,ipd,',',rnd,','1',24),(1118,'gitlab','deleteTag',240,',open,biz,max,ipd,',',rnd,','1',25),(1120,'gogs','browse',242,',open,biz,max,ipd,',',rnd,','1',0),(1121,'gogs','create',242,',open,biz,max,ipd,',',rnd,','1',2),(1122,'gogs','edit',242,',open,biz,max,ipd,',',rnd,','1',3),(1123,'gogs','view',242,',open,biz,max,ipd,',',rnd,','1',1),(1124,'gogs','delete',242,',open,biz,max,ipd,',',rnd,','1',4),(1125,'gogs','bindUser',242,',open,biz,max,ipd,',',rnd,','1',5),(1126,'gitea','browse',243,',open,biz,max,ipd,',',rnd,','1',0),(1127,'gitea','create',243,',open,biz,max,ipd,',',rnd,','1',2),(1128,'gitea','edit',243,',open,biz,max,ipd,',',rnd,','1',3),(1129,'gitea','view',243,',open,biz,max,ipd,',',rnd,','1',1),(1130,'gitea','delete',243,',open,biz,max,ipd,',',rnd,','1',4),(1131,'gitea','bindUser',243,',open,biz,max,ipd,',',rnd,','1',5),(1132,'sonarqube','browse',244,',open,biz,max,ipd,',',rnd,','1',0),(1133,'sonarqube','create',244,',open,biz,max,ipd,',',rnd,','1',1),(1134,'sonarqube','edit',244,',open,biz,max,ipd,',',rnd,','1',2),(1135,'sonarqube','delete',244,',open,biz,max,ipd,',',rnd,','1',3),(1136,'sonarqube','browseProject',244,',open,biz,max,ipd,',',rnd,','1',4),(1137,'sonarqube','createProject',244,',open,biz,max,ipd,',',rnd,','1',5),(1138,'sonarqube','deleteProject',244,',open,biz,max,ipd,',',rnd,','1',6),(1139,'sonarqube','execJob',244,',open,biz,max,ipd,',',rnd,','1',7),(1140,'sonarqube','reportView',244,',open,biz,max,ipd,',',rnd,','1',8),(1141,'sonarqube','browseIssue',244,',open,biz,max,ipd,',',rnd,','1',9),(1142,'app','serverlink',229,',open,biz,max,ipd,',',rnd,','1',5),(1143,'webhook','browse',238,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(1144,'webhook','create',238,',open,biz,max,ipd,',',lite,rnd,or,','1',10),(1145,'webhook','edit',238,',open,biz,max,ipd,',',lite,rnd,or,','1',15),(1146,'webhook','delete',238,',open,biz,max,ipd,',',lite,rnd,or,','1',20),(1147,'webhook','log',238,',open,biz,max,ipd,',',lite,rnd,or,','1',25),(1148,'webhook','bind',238,',open,biz,max,ipd,',',lite,rnd,or,','1',30),(1149,'webhook','chooseDept',238,',open,biz,max,ipd,',',lite,rnd,or,','1',35),(1150,'message','index',236,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(1151,'message','browser',236,',open,biz,max,ipd,',',lite,rnd,or,','1',10),(1152,'message','setting',236,',open,biz,max,ipd,',',lite,rnd,or,','1',15),(1153,'effort','calendar',291,',biz,max,ipd,',',rnd,lite,or,','1',0),(1154,'effort','batchCreate',291,',biz,max,ipd,',',rnd,lite,or,','1',3),(1155,'effort','createForObject',261,',biz,max,ipd,',',rnd,lite,or,','1',3),(1156,'effort','edit',291,',biz,max,ipd,',',rnd,lite,or,','1',4),(1157,'effort','batchEdit',291,',biz,max,ipd,',',rnd,lite,or,','1',5),(1158,'effort','view',291,',biz,max,ipd,',',rnd,lite,or,','1',2),(1159,'effort','delete',291,',biz,max,ipd,',',rnd,lite,or,','1',6),(1160,'effort','export',291,',biz,max,ipd,',',rnd,lite,or,','1',7),(1162,'ldap','set',253,',biz,max,ipd,',',rnd,','1',10),(1163,'sqlbuilder','browseSQLView',281,',max,ipd,',',rnd,','1',5),(1164,'sqlbuilder','createSQLView',281,',max,ipd,',',rnd,','1',10),(1165,'sqlbuilder','editSQLView',281,',max,ipd,',',rnd,','1',15),(1166,'sqlbuilder','deleteSQLView',281,',max,ipd,',',rnd,','1',20),(1168,'feedback','create',113,',biz,max,ipd,',',rnd,lite,','1',0),(1169,'feedback','edit',113,',biz,max,ipd,',',rnd,lite,','1',1),(1170,'feedback','editOthers',115,',biz,max,ipd,',',rnd,','1',10),(1171,'feedback','adminView',112,',biz,max,ipd,',',rnd,','1',25),(1172,'feedback','admin',112,',biz,max,ipd,',',rnd,','1',30),(1173,'feedback','assignTo',113,',biz,max,ipd,',',rnd,lite,','1',4),(1174,'feedback','toTask',115,',biz,max,ipd,',',rnd,','1',5),(1175,'feedback','toTodo',115,',biz,max,ipd,',',rnd,','1',7),(1176,'feedback','toBug',115,',biz,max,ipd,',',rnd,','1',6),(1177,'feedback','toStory',115,',biz,max,ipd,',',rnd,','1',3),(1178,'feedback','toTicket',115,',biz,max,ipd,',',rnd,','1',8),(1179,'feedback','toUserStory',115,',biz,max,ipd,',',rnd,','1',4),(1180,'feedback','review',115,',biz,max,ipd,',',rnd,','1',0),(1181,'feedback','comment',113,',biz,max,ipd,',',rnd,lite,','1',5),(1182,'feedback','reply',115,',biz,max,ipd,',',rnd,','1',2),(1183,'feedback','ask',113,',biz,max,ipd,',',rnd,','1',6),(1184,'feedback','close',113,',biz,max,ipd,',',rnd,lite,','1',8),(1185,'feedback','delete',121,',biz,max,ipd,',',rnd,lite,','1',95),(1186,'feedback','activate',113,',biz,max,ipd,',',rnd,','1',3),(1187,'feedback','export',114,',biz,max,ipd,',',rnd,lite,','1',0),(1188,'feedback','batchEdit',113,',biz,max,ipd,',',rnd,','1',2),(1189,'feedback','batchClose',113,',biz,max,ipd,',',rnd,','1',9),(1190,'feedback','batchReview',115,',biz,max,ipd,',',rnd,','1',1),(1191,'feedback','batchAssignTo',113,',biz,max,ipd,',',rnd,','1',7),(1193,'feedback','products',123,',biz,max,ipd,',',rnd,','1',135),(1194,'feedback','manageProduct',123,',biz,max,ipd,',',rnd,','1',140),(1195,'feedback','import',114,',biz,max,ipd,',',rnd,','1',2),(1196,'feedback','exportTemplate',114,',biz,max,ipd,',',rnd,','1',1),(1197,'feedback','syncProduct',115,',biz,max,ipd,',',rnd,','1',9),(1198,'feedback','productSetting',123,',biz,max,ipd,',',rnd,','1',160),(1199,'faq','browse',116,',biz,max,ipd,',',rnd,lite,','1',5),(1200,'faq','create',116,',biz,max,ipd,',',rnd,','1',10),(1201,'faq','edit',116,',biz,max,ipd,',',rnd,','1',15),(1202,'faq','delete',116,',biz,max,ipd,',',rnd,','1',20),(1204,'ticket','create',118,',biz,max,ipd,',',rnd,lite,','1',0),(1205,'ticket','edit',118,',biz,max,ipd,',',rnd,lite,','1',1),(1206,'ticket','view',117,',biz,max,ipd,',',rnd,lite,','1',20),(1207,'ticket','browse',117,',biz,max,ipd,',',rnd,lite,','1',25),(1208,'ticket','assignTo',118,',biz,max,ipd,',',rnd,lite,','1',3),(1209,'ticket','createBug',118,',biz,max,ipd,',',rnd,','1',5),(1210,'ticket','createStory',118,',biz,max,ipd,',',rnd,','1',6),(1211,'ticket','start',118,',biz,max,ipd,',',rnd,','1',7),(1212,'ticket','finish',118,',biz,max,ipd,',',rnd,','1',8),(1213,'ticket','close',118,',biz,max,ipd,',',rnd,lite,','1',10),(1214,'ticket','activate',118,',biz,max,ipd,',',rnd,lite,','1',12),(1215,'ticket','delete',122,',biz,max,ipd,',',rnd,lite,','1',65),(1216,'ticket','exportTemplate',119,',biz,max,ipd,',',rnd,lite,','1',1),(1217,'ticket','import',119,',biz,max,ipd,',',rnd,lite,','1',2),(1218,'ticket','export',119,',biz,max,ipd,',',rnd,lite,','1',0),(1219,'ticket','batchEdit',118,',biz,max,ipd,',',rnd,','1',2),(1220,'ticket','batchClose',118,',biz,max,ipd,',',rnd,','1',11),(1221,'ticket','batchActivate',118,',biz,max,ipd,',',rnd,','1',13),(1222,'ticket','batchFinish',118,',biz,max,ipd,',',rnd,','1',9),(1223,'ticket','batchAssignTo',118,',biz,max,ipd,',',rnd,','1',4),(1224,'ticket','syncProduct',118,',biz,max,ipd,',',rnd,','1',14),(1225,'attend','department',105,',biz,max,ipd,',',rnd,lite,','1',25),(1226,'attend','company',105,',biz,max,ipd,',',rnd,lite,','1',30),(1227,'attend','browseReview',103,',biz,max,ipd,',',rnd,lite,','1',5),(1228,'attend','review',102,',biz,max,ipd,',',rnd,lite,','1',3),(1229,'attend','export',111,',biz,max,ipd,',',rnd,lite,','1',0),(1230,'attend','stat',105,',biz,max,ipd,',',rnd,lite,','1',35),(1231,'attend','saveStat',105,',biz,max,ipd,',',rnd,lite,','1',40),(1232,'attend','exportStat',111,',biz,max,ipd,',',rnd,lite,','1',2),(1233,'attend','detail',103,',biz,max,ipd,',',rnd,lite,','1',4),(1234,'attend','exportDetail',111,',biz,max,ipd,',',rnd,lite,','1',1),(1235,'attend','settings',104,',biz,max,ipd,',',rnd,lite,','1',0),(1236,'attend','personalSettings',104,',biz,max,ipd,',',rnd,lite,','1',1),(1237,'attend','setManager',104,',biz,max,ipd,',',rnd,lite,','1',2),(1238,'attend','personal',103,',biz,max,ipd,',',rnd,lite,','1',0),(1239,'attend','edit',103,',biz,max,ipd,',',rnd,lite,','1',1),(1240,'leave','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',0),(1241,'leave','company',105,',biz,max,ipd,',',rnd,lite,','1',0),(1242,'leave','review',102,',biz,max,ipd,',',rnd,lite,','1',1),(1243,'leave','export',111,',biz,max,ipd,',',rnd,lite,','1',3),(1244,'leave','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',3),(1245,'leave','personalAnnual',104,',biz,max,ipd,',',rnd,lite,','1',4),(1246,'leave','personal',106,',biz,max,ipd,',',rnd,lite,','1',0),(1247,'leave','create',106,',biz,max,ipd,',',rnd,lite,','1',2),(1248,'leave','edit',106,',biz,max,ipd,',',rnd,lite,','1',3),(1249,'leave','delete',106,',biz,max,ipd,',',rnd,lite,','1',4),(1250,'leave','view',106,',biz,max,ipd,',',rnd,lite,','1',1),(1251,'leave','switchstatus',106,',biz,max,ipd,',',rnd,lite,','1',5),(1252,'leave','back',102,',biz,max,ipd,',',rnd,lite,','1',2),(1253,'makeup','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',4),(1254,'makeup','company',105,',biz,max,ipd,',',rnd,lite,','1',1),(1255,'makeup','review',102,',biz,max,ipd,',',rnd,lite,','1',5),(1256,'makeup','export',111,',biz,max,ipd,',',rnd,lite,','1',5),(1257,'makeup','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',5),(1258,'makeup','personal',107,',biz,max,ipd,',',rnd,lite,','1',30),(1259,'makeup','create',107,',biz,max,ipd,',',rnd,lite,','1',35),(1260,'makeup','edit',107,',biz,max,ipd,',',rnd,lite,','1',40),(1261,'makeup','view',107,',biz,max,ipd,',',rnd,lite,','1',45),(1262,'makeup','delete',107,',biz,max,ipd,',',rnd,lite,','1',50),(1263,'makeup','switchstatus',107,',biz,max,ipd,',',rnd,lite,','1',55),(1264,'overtime','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',6),(1265,'overtime','company',105,',biz,max,ipd,',',rnd,lite,','1',2),(1266,'overtime','review',102,',biz,max,ipd,',',rnd,lite,','1',7),(1267,'overtime','export',111,',biz,max,ipd,',',rnd,lite,','1',4),(1268,'overtime','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',6),(1269,'overtime','personal',108,',biz,max,ipd,',',rnd,lite,','1',30),(1270,'overtime','create',108,',biz,max,ipd,',',rnd,lite,','1',35),(1271,'overtime','edit',108,',biz,max,ipd,',',rnd,lite,','1',40),(1272,'overtime','view',108,',biz,max,ipd,',',rnd,lite,','1',45),(1273,'overtime','delete',108,',biz,max,ipd,',',rnd,lite,','1',50),(1274,'overtime','switchstatus',108,',biz,max,ipd,',',rnd,lite,','1',55),(1275,'lieu','company',105,',biz,max,ipd,',',rnd,lite,','1',3),(1276,'lieu','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',8),(1277,'lieu','review',102,',biz,max,ipd,',',rnd,lite,','1',9),(1278,'lieu','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',7),(1279,'lieu','personal',109,',biz,max,ipd,',',rnd,lite,','1',25),(1280,'lieu','create',109,',biz,max,ipd,',',rnd,lite,','1',30),(1281,'lieu','edit',109,',biz,max,ipd,',',rnd,lite,','1',35),(1282,'lieu','delete',109,',biz,max,ipd,',',rnd,lite,','1',40),(1283,'lieu','view',109,',biz,max,ipd,',',rnd,lite,','1',45),(1284,'lieu','switchstatus',109,',biz,max,ipd,',',rnd,lite,','1',50),(1285,'ops','index',126,',biz,max,ipd,',',rnd,','1',5),(1286,'ops','setting',126,',biz,max,ipd,',',rnd,','1',10),(1287,'host','browse',127,',biz,max,ipd,',',rnd,','1',5),(1288,'host','create',127,',biz,max,ipd,',',rnd,','1',10),(1289,'host','edit',127,',biz,max,ipd,',',rnd,','1',15),(1290,'host','view',127,',biz,max,ipd,',',rnd,','1',20),(1291,'host','delete',127,',biz,max,ipd,',',rnd,','1',25),(1292,'host','changeStatus',127,',biz,max,ipd,',',rnd,','1',30),(1293,'host','treemap',127,',biz,max,ipd,',',rnd,','1',35),(1294,'serverroom','browse',128,',biz,max,ipd,',',rnd,','1',0),(1295,'serverroom','create',128,',biz,max,ipd,',',rnd,','1',2),(1296,'serverroom','edit',128,',biz,max,ipd,',',rnd,','1',3),(1297,'serverroom','view',128,',biz,max,ipd,',',rnd,','1',1),(1298,'serverroom','delete',128,',biz,max,ipd,',',rnd,','1',4),(1299,'account','browse',129,',biz,max,ipd,',',rnd,','1',0),(1300,'account','create',129,',biz,max,ipd,',',rnd,','1',2),(1301,'account','edit',129,',biz,max,ipd,',',rnd,','1',3),(1302,'account','view',129,',biz,max,ipd,',',rnd,','1',1),(1303,'account','delete',129,',biz,max,ipd,',',rnd,','1',4),(1304,'domain','browse',130,',biz,max,ipd,',',rnd,','1',0),(1305,'domain','create',130,',biz,max,ipd,',',rnd,','1',2),(1306,'domain','edit',130,',biz,max,ipd,',',rnd,','1',3),(1307,'domain','view',130,',biz,max,ipd,',',rnd,','1',1),(1308,'domain','delete',130,',biz,max,ipd,',',rnd,','1',4),(1309,'service','browse',131,',biz,max,ipd,',',rnd,','1',0),(1310,'service','create',131,',biz,max,ipd,',',rnd,','1',2),(1311,'service','edit',131,',biz,max,ipd,',',rnd,','1',3),(1312,'service','delete',131,',biz,max,ipd,',',rnd,','1',5),(1313,'service','view',131,',biz,max,ipd,',',rnd,','1',1),(1315,'service','manage',131,',biz,max,ipd,',',rnd,','1',4),(1316,'deploy','browse',132,',biz,max,ipd,',',rnd,','1',0),(1317,'deploy','create',132,',biz,max,ipd,',',rnd,','1',2),(1318,'deploy','edit',132,',biz,max,ipd,',',rnd,','1',3),(1319,'deploy','delete',132,',biz,max,ipd,',',rnd,','1',6),(1320,'deploy','activate',132,',biz,max,ipd,',',rnd,','1',4),(1321,'deploy','finish',132,',biz,max,ipd,',',rnd,','1',5),(1322,'deploy','scope',133,',biz,max,ipd,',',rnd,','1',35),(1323,'deploy','manageScope',133,',biz,max,ipd,',',rnd,','1',40),(1324,'deploy','view',132,',biz,max,ipd,',',rnd,','1',1),(1325,'deploy','cases',135,',biz,max,ipd,',',rnd,','1',50),(1326,'deploy','linkCases',135,',biz,max,ipd,',',rnd,','1',55),(1327,'deploy','unlinkCase',135,',biz,max,ipd,',',rnd,','1',60),(1328,'deploy','batchUnlinkCases',135,',biz,max,ipd,',',rnd,','1',65),(1329,'deploy','steps',134,',biz,max,ipd,',',rnd,','1',0),(1330,'deploy','manageStep',134,',biz,max,ipd,',',rnd,','1',2),(1331,'deploy','finishStep',134,',biz,max,ipd,',',rnd,','1',5),(1332,'deploy','assignTo',134,',biz,max,ipd,',',rnd,','1',4),(1333,'deploy','viewStep',134,',biz,max,ipd,',',rnd,','1',1),(1334,'deploy','editStep',134,',biz,max,ipd,',',rnd,','1',3),(1335,'deploy','deleteStep',134,',biz,max,ipd,',',rnd,','1',8),(1336,'conference','admin',254,',biz,max,ipd,',',rnd,','1',3),(1337,'traincourse','browse',124,',biz,max,ipd,',',rnd,','1',5),(1338,'traincourse','admin',125,',biz,max,ipd,',',rnd,','1',0),(1339,'traincourse','deleteCourse',125,',biz,max,ipd,',',rnd,','1',1),(1340,'traincourse','changeStatus',125,',biz,max,ipd,',',rnd,','1',2),(1341,'traincourse','uploadCourse',125,',biz,max,ipd,',',rnd,','1',3),(1342,'traincourse','viewCourse',124,',biz,max,ipd,',',rnd,','1',30),(1343,'traincourse','viewChapter',124,',biz,max,ipd,',',rnd,','1',35),(1344,'chart','browse',327,',biz,max,ipd,',',rnd,','1',5),(1345,'chart','create',327,',biz,max,ipd,',',rnd,','1',10),(1346,'chart','edit',327,',biz,max,ipd,',',rnd,','1',15),(1347,'chart','design',327,',biz,max,ipd,',',rnd,','1',20),(1348,'chart','delete',327,',biz,max,ipd,',',rnd,','1',25),(1360,'pssp','browse',204,',max,ipd,',',rnd,','1',5),(1361,'pssp','update',204,',max,ipd,',',rnd,','1',10),(1362,'baseline','templateType',262,',max,ipd,',',rnd,','1',0),(1363,'baseline','template',262,',max,ipd,',',rnd,','1',1),(1364,'baseline','createTemplate',262,',max,ipd,',',rnd,','1',3),(1365,'baseline','view',262,',max,ipd,',',rnd,','1',2),(1366,'baseline','editTemplate',262,',max,ipd,',',rnd,','1',4),(1367,'baseline','editBook',262,',max,ipd,',',rnd,','1',5),(1369,'baseline','manageBook',262,',max,ipd,',',rnd,','1',7),(1370,'baseline','delete',262,',max,ipd,',',rnd,','1',6),(1371,'classify','browse',269,',max,ipd,',',rnd,','1',5),(1372,'cm','create',180,',max,ipd,',',rnd,','1',2),(1373,'cm','delete',180,',max,ipd,',',rnd,','1',4),(1374,'cm','edit',180,',max,ipd,',',rnd,','1',3),(1375,'cm','browse',180,',max,ipd,',',rnd,','1',0),(1376,'cm','view',180,',max,ipd,',',rnd,','1',1),(1377,'cm','report',180,',max,ipd,',',rnd,','1',5),(1378,'cmcl','batchCreate',270,',max,ipd,',',rnd,','1',3),(1379,'cmcl','delete',270,',max,ipd,',',rnd,','1',5),(1380,'cmcl','edit',270,',max,ipd,',',rnd,','1',4),(1381,'cmcl','browse',270,',max,ipd,',',rnd,','1',0),(1382,'cmcl','view',270,',max,ipd,',',rnd,','1',2),(1383,'cmcl','waterfallplusBrowse',270,',max,ipd,',',rnd,','1',1),(1384,'auditcl','batchCreate',271,',max,ipd,',',rnd,','1',5),(1385,'auditcl','batchEdit',271,',max,ipd,',',rnd,','1',7),(1386,'auditcl','delete',271,',max,ipd,',',rnd,','1',8),(1387,'auditcl','edit',271,',max,ipd,',',rnd,','1',6),(1389,'auditcl','scrumBrowse',271,',max,ipd,',',rnd,','1',0),(1390,'auditcl','browse',271,',max,ipd,',',rnd,','1',1),(1391,'auditcl','agilePlusBrowse',271,',max,ipd,',',rnd,','1',2),(1392,'auditcl','waterfallplusBrowse',271,',max,ipd,',',rnd,','1',3),(1393,'reviewcl','browse',272,',max,ipd,',',rnd,','1',0),(1394,'reviewcl','create',272,',max,ipd,',',rnd,','1',5),(1395,'reviewcl','batchCreate',272,',max,ipd,',',rnd,','1',6),(1396,'reviewcl','delete',272,',max,ipd,',',rnd,','1',8),(1397,'reviewcl','edit',272,',max,ipd,',',rnd,','1',7),(1398,'reviewcl','view',272,',max,ipd,',',rnd,','1',4),(1399,'reviewcl','waterfallplusBrowse',272,',max,ipd,',',rnd,','1',1),(1400,'process','create',273,',max,ipd,',',rnd,','1',5),(1401,'process','batchCreate',273,',max,ipd,',',rnd,','1',6),(1402,'process','delete',273,',max,ipd,',',rnd,','1',8),(1403,'process','edit',273,',max,ipd,',',rnd,','1',7),(1404,'process','view',273,',max,ipd,',',rnd,','1',4),(1405,'process','updateOrder',273,',max,ipd,',',rnd,','1',9),(1406,'process','activityList',273,',max,ipd,',',rnd,','1',10),(1407,'process','scrumBrowse',273,',max,ipd,',',rnd,','1',0),(1408,'process','browse',273,',max,ipd,',',rnd,','1',1),(1409,'process','agilePlusBrowse',273,',max,ipd,',',rnd,','1',2),(1410,'process','waterfallPlusBrowse',273,',max,ipd,',',rnd,','1',3),(1411,'activity','browse',274,',max,ipd,',',rnd,','1',0),(1412,'activity','create',274,',max,ipd,',',rnd,','1',2),(1413,'activity','batchCreate',274,',max,ipd,',',rnd,','1',3),(1414,'activity','delete',274,',max,ipd,',',rnd,','1',4),(1415,'activity','edit',274,',max,ipd,',',rnd,','1',5),(1416,'activity','view',274,',max,ipd,',',rnd,','1',1),(1417,'activity','assignTo',274,',max,ipd,',',rnd,','1',6),(1418,'activity','outputList',274,',max,ipd,',',rnd,','1',8),(1419,'activity','updateOrder',274,',max,ipd,',',rnd,','1',7),(1420,'zoutput','browse',275,',max,ipd,',',rnd,','1',0),(1421,'zoutput','create',275,',max,ipd,',',rnd,','1',2),(1422,'zoutput','edit',275,',max,ipd,',',rnd,','1',4),(1423,'zoutput','batchCreate',275,',max,ipd,',',rnd,','1',3),(1424,'zoutput','batchEdit',275,',max,ipd,',',rnd,','1',5),(1425,'zoutput','delete',275,',max,ipd,',',rnd,','1',6),(1426,'zoutput','view',275,',max,ipd,',',rnd,','1',1),(1427,'zoutput','updateOrder',275,',max,ipd,',',rnd,','1',7),(1428,'auditplan','browse',206,',max,ipd,',',rnd,','1',0),(1429,'auditplan','create',206,',max,ipd,',',rnd,','1',1),(1430,'auditplan','edit',206,',max,ipd,',',rnd,','1',3),(1431,'auditplan','batchCreate',206,',max,ipd,',',rnd,','1',2),(1432,'auditplan','batchEdit',206,',max,ipd,',',rnd,','1',4),(1433,'auditplan','batchCheck',314,',max,ipd,',',rnd,','1',6),(1434,'auditplan','check',314,',max,ipd,',',rnd,','1',5),(1435,'auditplan','nc',206,',max,ipd,',',rnd,','1',8),(1436,'auditplan','result',206,',max,ipd,',',rnd,','1',7),(1437,'auditplan','delete',206,',max,ipd,',',rnd,','1',10),(1438,'auditplan','assignTo',206,',max,ipd,',',rnd,','1',9),(1439,'subject','browse',267,',max,ipd,',',rnd,','1',35),(1440,'approvalflow','browse',277,',max,ipd,',',rnd,','1',4),(1441,'approvalflow','create',277,',max,ipd,',',rnd,','1',6),(1442,'approvalflow','edit',277,',max,ipd,',',rnd,','1',7),(1443,'approvalflow','view',277,',max,ipd,',',rnd,','1',5),(1444,'approvalflow','design',277,',max,ipd,',',rnd,','1',8),(1445,'approvalflow','delete',277,',max,ipd,',',rnd,','1',9),(1446,'approvalflow','role',277,',max,ipd,',',rnd,','1',0),(1447,'approvalflow','createRole',277,',max,ipd,',',rnd,','1',1),(1448,'approvalflow','editRole',277,',max,ipd,',',rnd,','1',2),(1449,'approvalflow','deleteRole',277,',max,ipd,',',rnd,','1',3),(1450,'reviewissue','issue',179,',max,ipd,',',rnd,','1',0),(1451,'reviewissue','updateStatus',179,',max,ipd,',',rnd,','1',5),(1452,'reviewissue','resolved',179,',max,ipd,',',rnd,','1',3),(1453,'reviewissue','create',179,',max,ipd,',',rnd,','1',2),(1454,'reviewissue','edit',179,',max,ipd,',',rnd,','1',4),(1455,'reviewissue','view',179,',max,ipd,',',rnd,','1',1),(1456,'reviewissue','delete',179,',max,ipd,',',rnd,','1',6),(1457,'reviewsetting','version',272,',max,ipd,',',rnd,','1',2),(1459,'reviewsetting','waterfallplusVersion',272,',max,ipd,',',rnd,','1',3),(1460,'review','browse',178,',max,ipd,',',rnd,','1',0),(1461,'review','assess',315,',max,ipd,',',rnd,','1',4),(1462,'review','create',178,',max,ipd,',',rnd,','1',2),(1463,'review','edit',178,',max,ipd,',',rnd,','1',5),(1464,'review','view',178,',max,ipd,',',rnd,','1',1),(1465,'review','submit',178,',max,ipd,',',rnd,','1',3),(1466,'review','recall',178,',max,ipd,',',rnd,','1',6),(1467,'review','report',178,',max,ipd,',',rnd,','1',7),(1468,'review','toAudit',178,',max,ipd,',',rnd,','1',8),(1469,'review','audit',316,',max,ipd,',',rnd,','1',9),(1470,'review','delete',178,',max,ipd,',',rnd,','1',10),(1471,'measurement','settips',278,',max,ipd,',',rnd,','1',0),(1472,'measurement','setSQL',278,',max,ipd,',',rnd,','1',3),(1473,'measurement','browse',278,',max,ipd,',',rnd,','1',1),(1474,'measurement','createBasic',278,',max,ipd,',',rnd,','1',2),(1475,'measurement','delete',278,',max,ipd,',',rnd,','1',6),(1477,'measurement','editBasic',278,',max,ipd,',',rnd,','1',4),(1478,'measurement','searchMeas',278,',max,ipd,',',rnd,','1',14),(1479,'measurement','template',278,',max,ipd,',',rnd,','1',7),(1480,'measurement','createTemplate',278,',max,ipd,',',rnd,','1',23),(1481,'measurement','editTemplate',278,',max,ipd,',',rnd,','1',9),(1482,'measurement','viewTemplate',278,',max,ipd,',',rnd,','1',8),(1488,'measurement','batchEdit',278,',max,ipd,',',rnd,','1',5),(1489,'measurement','saveReport',278,',max,ipd,',',rnd,','1',24),(1490,'measrecord','browse',205,',max,ipd,',',rnd,','1',0),(1491,'assetlib','caselib',98,',max,ipd,',',rnd,','1',0),(1492,'assetlib','storylib',74,',max,ipd,',',rnd,','1',0),(1493,'assetlib','createStorylib',75,',max,ipd,',',rnd,','1',0),(1494,'assetlib','editStorylib',75,',max,ipd,',',rnd,','1',1),(1495,'assetlib','deleteStorylib',76,',max,ipd,',',rnd,','1',25),(1496,'assetlib','storyLibView',74,',max,ipd,',',rnd,','1',1),(1497,'assetlib','story',74,',max,ipd,',',rnd,','1',2),(1498,'assetlib','importStory',75,',max,ipd,',',rnd,','1',3),(1499,'assetlib','assignToStory',75,',max,ipd,',',rnd,','1',6),(1500,'assetlib','batchAssignToStory',75,',max,ipd,',',rnd,','1',7),(1501,'assetlib','approveStory',77,',max,ipd,',',rnd,','1',55),(1502,'assetlib','batchApproveStory',77,',max,ipd,',',rnd,','1',60),(1503,'assetlib','editStory',75,',max,ipd,',',rnd,','1',5),(1504,'assetlib','removeStory',75,',max,ipd,',',rnd,','1',8),(1505,'assetlib','batchRemoveStory',75,',max,ipd,',',rnd,','1',9),(1506,'assetlib','storyView',74,',max,ipd,',',rnd,','1',3),(1507,'assetlib','issuelib',78,',max,ipd,',',rnd,','1',0),(1508,'assetlib','createIssuelib',79,',max,ipd,',',rnd,','1',0),(1509,'assetlib','editIssuelib',79,',max,ipd,',',rnd,','1',1),(1510,'assetlib','deleteIssuelib',80,',max,ipd,',',rnd,','1',100),(1511,'assetlib','issueLibView',78,',max,ipd,',',rnd,','1',2),(1512,'assetlib','issue',78,',max,ipd,',',rnd,','1',1),(1513,'assetlib','importIssue',79,',max,ipd,',',rnd,','1',3),(1514,'assetlib','assignToIssue',79,',max,ipd,',',rnd,','1',5),(1515,'assetlib','batchAssignToIssue',79,',max,ipd,',',rnd,','1',6),(1516,'assetlib','approveIssue',81,',max,ipd,',',rnd,','1',130),(1517,'assetlib','batchApproveIssue',81,',max,ipd,',',rnd,','1',135),(1518,'assetlib','editIssue',79,',max,ipd,',',rnd,','1',4),(1519,'assetlib','removeIssue',79,',max,ipd,',',rnd,','1',7),(1520,'assetlib','batchRemoveIssue',79,',max,ipd,',',rnd,','1',8),(1521,'assetlib','issueView',78,',max,ipd,',',rnd,','1',3),(1522,'assetlib','risklib',82,',max,ipd,',',rnd,','1',160),(1523,'assetlib','createRisklib',83,',max,ipd,',',rnd,','1',0),(1524,'assetlib','editRisklib',83,',max,ipd,',',rnd,','1',1),(1525,'assetlib','deleteRisklib',84,',max,ipd,',',rnd,','1',175),(1526,'assetlib','riskLibView',82,',max,ipd,',',rnd,','1',180),(1527,'assetlib','risk',82,',max,ipd,',',rnd,','1',185),(1528,'assetlib','importRisk',83,',max,ipd,',',rnd,','1',3),(1529,'assetlib','assignToRisk',83,',max,ipd,',',rnd,','1',5),(1530,'assetlib','batchAssignToRisk',83,',max,ipd,',',rnd,','1',6),(1531,'assetlib','approveRisk',85,',max,ipd,',',rnd,','1',205),(1532,'assetlib','batchApproveRisk',85,',max,ipd,',',rnd,','1',210),(1533,'assetlib','editRisk',83,',max,ipd,',',rnd,','1',4),(1534,'assetlib','removeRisk',83,',max,ipd,',',rnd,','1',7),(1535,'assetlib','batchRemoveRisk',83,',max,ipd,',',rnd,','1',8),(1536,'assetlib','riskView',82,',max,ipd,',',rnd,','1',230),(1537,'assetlib','opportunitylib',86,',max,ipd,',',rnd,','1',235),(1538,'assetlib','createOpportunitylib',87,',max,ipd,',',rnd,','1',0),(1539,'assetlib','editOpportunitylib',87,',max,ipd,',',rnd,','1',1),(1540,'assetlib','deleteOpportunitylib',88,',max,ipd,',',rnd,','1',250),(1541,'assetlib','opportunityLibView',86,',max,ipd,',',rnd,','1',255),(1542,'assetlib','opportunity',86,',max,ipd,',',rnd,','1',255),(1543,'assetlib','importOpportunity',87,',max,ipd,',',rnd,','1',3),(1544,'assetlib','assignToOpportunity',87,',max,ipd,',',rnd,','1',5),(1545,'assetlib','batchAssignToOpportunity',87,',max,ipd,',',rnd,','1',6),(1546,'assetlib','approveOpportunity',89,',max,ipd,',',rnd,','1',255),(1547,'assetlib','batchApproveOpportunity',89,',max,ipd,',',rnd,','1',255),(1548,'assetlib','editOpportunity',87,',max,ipd,',',rnd,','1',4),(1549,'assetlib','removeOpportunity',87,',max,ipd,',',rnd,','1',7),(1550,'assetlib','batchRemoveOpportunity',87,',max,ipd,',',rnd,','1',8),(1551,'assetlib','opportunityView',86,',max,ipd,',',rnd,','1',255),(1552,'assetlib','practicelib',90,',max,ipd,',',rnd,','1',255),(1553,'assetlib','createPracticelib',91,',max,ipd,',',rnd,','1',0),(1554,'assetlib','editPracticelib',91,',max,ipd,',',rnd,','1',1),(1555,'assetlib','deletePracticelib',92,',max,ipd,',',rnd,','1',255),(1556,'assetlib','practiceLibView',90,',max,ipd,',',rnd,','1',255),(1557,'assetlib','practice',90,',max,ipd,',',rnd,','1',255),(1558,'assetlib','importPractice',91,',max,ipd,',',rnd,','1',3),(1559,'assetlib','assignToPractice',91,',max,ipd,',',rnd,','1',5),(1560,'assetlib','batchAssignToPractice',91,',max,ipd,',',rnd,','1',6),(1561,'assetlib','approvePractice',93,',max,ipd,',',rnd,','1',255),(1562,'assetlib','batchApprovePractice',93,',max,ipd,',',rnd,','1',255),(1563,'assetlib','editPractice',91,',max,ipd,',',rnd,','1',4),(1564,'assetlib','removePractice',91,',max,ipd,',',rnd,','1',7),(1565,'assetlib','batchRemovePractice',91,',max,ipd,',',rnd,','1',8),(1566,'assetlib','practiceView',90,',max,ipd,',',rnd,','1',255),(1567,'assetlib','componentlib',94,',max,ipd,',',rnd,','1',255),(1568,'assetlib','createComponentlib',95,',max,ipd,',',rnd,','1',0),(1569,'assetlib','editComponentlib',95,',max,ipd,',',rnd,','1',1),(1570,'assetlib','deleteComponentlib',96,',max,ipd,',',rnd,','1',255),(1571,'assetlib','componentLibView',94,',max,ipd,',',rnd,','1',255),(1572,'assetlib','component',94,',max,ipd,',',rnd,','1',255),(1573,'assetlib','importComponent',95,',max,ipd,',',rnd,','1',3),(1574,'assetlib','assignToComponent',95,',max,ipd,',',rnd,','1',5),(1575,'assetlib','batchAssignToComponent',95,',max,ipd,',',rnd,','1',6),(1576,'assetlib','approveComponent',97,',max,ipd,',',rnd,','1',255),(1577,'assetlib','batchApproveComponent',97,',max,ipd,',',rnd,','1',255),(1578,'assetlib','editComponent',95,',max,ipd,',',rnd,','1',4),(1579,'assetlib','removeComponent',95,',max,ipd,',',rnd,','1',7),(1580,'assetlib','batchRemoveComponent',95,',max,ipd,',',rnd,','1',8),(1581,'assetlib','componentView',94,',max,ipd,',',rnd,','1',255),(1583,'assetlib','storylibSort',75,',max,ipd,',',rnd,','1',2),(1584,'assetlib','caselibSort',99,',max,ipd,',',rnd,','1',2),(1585,'assetlib','issuelibSort',79,',max,ipd,',',rnd,','1',2),(1586,'assetlib','risklibSort',83,',max,ipd,',',rnd,','1',2),(1587,'assetlib','opportunitylibSort',87,',max,ipd,',',rnd,','1',2),(1588,'assetlib','practicelibSort',91,',max,ipd,',',rnd,','1',2),(1589,'assetlib','componentlibSort',95,',max,ipd,',',rnd,','1',2),(1590,'setting','xuanxuan',254,',open,biz,max,ipd,',',rnd,lite,','1',0),(1596,'im','downloadXxdPackage',254,',open,biz,max,ipd,',',rnd,lite,','1',2),(1597,'im','debug',254,',open,biz,max,ipd,',',rnd,lite,','1',1),(1598,'client','browse',254,',open,biz,max,ipd,',',rnd,lite,','1',4),(1599,'client','create',254,',open,biz,max,ipd,',',rnd,lite,','1',5),(1600,'client','edit',254,',open,biz,max,ipd,',',rnd,lite,','1',6),(1601,'client','delete',254,',open,biz,max,ipd,',',rnd,lite,','1',7),(1615,'screen','create',319,',biz,max,ipd,',',rnd,','1',5),(1616,'screen','edit',319,',biz,max,ipd,',',rnd,','1',10),(1617,'screen','design',319,',biz,max,ipd,',',rnd,','1',15),(1618,'screen','publish',319,',biz,max,ipd,',',rnd,','1',20),(1619,'screen','delete',320,',biz,max,ipd,',',rnd,','1',25),(1620,'screen','annualData',318,',open,biz,max,ipd,',',rnd,','1',30),(1621,'screen','allAnnualData',321,',open,biz,max,ipd,',',rnd,','1',35),(1622,'pivot','browse',323,',biz,max,ipd,',',rnd,','1',5),(1623,'pivot','preview',322,',open,biz,max,ipd,',',rnd,','1',0),(1624,'pivot','create',323,',biz,max,ipd,',',rnd,','1',15),(1625,'pivot','edit',323,',biz,max,ipd,',',rnd,','1',20),(1626,'pivot','design',323,',biz,max,ipd,',',rnd,','1',25),(1627,'pivot','delete',323,',biz,max,ipd,',',rnd,','1',30),(1628,'pivot','export',324,',biz,max,ipd,',',rnd,','1',35),(1629,'pivot','showProduct',325,',biz,max,ipd,',',rnd,','1',40),(1630,'pivot','showProject',325,',biz,max,ipd,',',rnd,','1',45),(1631,'pivot','projectDeviation',322,',open,biz,max,ipd,',',rnd,','1',4),(1632,'pivot','productSummary',322,',open,biz,max,ipd,',',rnd,','1',1),(1633,'pivot','bugCreate',322,',open,biz,max,ipd,',',rnd,','1',5),(1634,'pivot','bugAssign',322,',open,biz,max,ipd,',',rnd,','1',6),(1635,'pivot','workload',322,',open,biz,max,ipd,',',rnd,','1',11),(1636,'pivot','casesrun',322,',biz,max,ipd,',',rnd,','1',8),(1637,'pivot','storyLinkedBug',322,',biz,max,ipd,',',rnd,','1',10),(1638,'pivot','testcase',322,',biz,max,ipd,',',rnd,','1',7),(1639,'pivot','build',322,',biz,max,ipd,',',rnd,','1',9),(1640,'pivot','workSummary',322,',biz,max,ipd,',',rnd,','1',12),(1641,'pivot','roadmap',322,',max,ipd,',',rnd,','1',2),(1642,'pivot','productInvest',322,',biz,max,ipd,',',rnd,','1',3),(1643,'pivot','bugSummary',322,',biz,max,ipd,',',rnd,','1',14),(1644,'pivot','bugAssignSummary',322,',biz,max,ipd,',',rnd,','1',15),(1645,'pivot','workAssignSummary',322,',biz,max,ipd,',',rnd,','1',13),(1646,'chart','preview',326,',open,biz,max,ipd,',',rnd,','1',5),(1648,'dataview','browse',329,',biz,max,ipd,',',rnd,','1',5),(1649,'dataview','create',330,',biz,max,ipd,',',rnd,','1',10),(1650,'dataview','edit',330,',biz,max,ipd,',',rnd,','1',15),(1651,'dataview','query',330,',biz,max,ipd,',',rnd,','1',20),(1652,'dataview','delete',331,',biz,max,ipd,',',rnd,','1',25),(1653,'dimension','browse',317,',biz,max,ipd,',',rnd,','1',5),(1654,'dimension','create',317,',biz,max,ipd,',',rnd,','1',10),(1655,'dimension','edit',317,',biz,max,ipd,',',rnd,','1',15),(1656,'dimension','delete',317,',biz,max,ipd,',',rnd,','1',20),(1664,'custom','limitTaskDate',276,',open,biz,max,ipd,',',rnd,','1',10),(1665,'tree','browsegroup',259,',biz,max,ipd,',',rnd,','1',2),(1673,'testcase','createScene',344,',open,biz,max,ipd,',',rnd,','1',5),(1674,'testcase','editScene',344,',open,biz,max,ipd,',',rnd,','1',10),(1675,'testcase','deleteScene',344,',open,biz,max,ipd,',',rnd,','1',15),(1676,'testcase','changeScene',344,',open,biz,max,ipd,',',rnd,','1',20),(1677,'testcase','batchChangeScene',344,',open,biz,max,ipd,',',rnd,','1',25),(1678,'testcase','updateOrder',142,',open,biz,max,ipd,',',rnd,','1',30),(1679,'testcase','importXmind',143,',open,biz,max,ipd,',',rnd,','1',6),(1682,'testcase','exportXmind',143,',open,biz,max,ipd,',',rnd,','1',2),(1694,'repo','import',239,',open,biz,max,ipd,',',rnd,','1',3),(1695,'chart','export',328,',biz,max,ipd,',',rnd,','1',5),(1701,'doc','index',333,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(1702,'doc','mySpace',333,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(1703,'doc','myView',333,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(1704,'doc','myCollection',333,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(1705,'doc','myCreation',333,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(1706,'doc','createLib',334,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(1707,'doc','editLib',334,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(1708,'doc','deleteLib',335,',open,biz,max,ipd,',',rnd,lite,or,','1',40),(1709,'doc','create',334,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(1710,'doc','edit',334,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(1711,'doc','view',333,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(1712,'doc','delete',335,',open,biz,max,ipd,',',rnd,lite,or,','1',60),(1713,'doc','deleteFile',335,',open,biz,max,ipd,',',rnd,lite,or,','1',65),(1714,'doc','collect',334,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(1715,'doc','productSpace',333,',open,biz,max,ipd,',',rnd,or,','1',2),(1716,'doc','projectSpace',333,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(1717,'doc','teamSpace',333,',open,biz,max,ipd,',',rnd,or,','1',4),(1718,'doc','showFiles',334,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(1719,'doc','addCatalog',334,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(1720,'doc','editCatalog',334,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(1721,'doc','sortCatalog',334,',open,biz,max,ipd,',',rnd,or,','1',7),(1722,'doc','deleteCatalog',335,',open,biz,max,ipd,',',rnd,lite,or,','1',110),(1723,'doc','displaySetting',333,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(1724,'doc','diff',333,',biz,max,ipd,',',rnd,lite,','1',11),(1725,'doc','mine2export',336,',biz,max,ipd,',',rnd,lite,','1',125),(1726,'doc','product2export',336,',biz,max,ipd,',',rnd,lite,','1',130),(1727,'doc','project2export',336,',biz,max,ipd,',',rnd,lite,','1',135),(1728,'doc','custom2export',336,',biz,max,ipd,',',rnd,lite,','1',140),(1729,'doc','execution2export',56,',biz,max,ipd,',',rnd,lite,','1',145),(1730,'doc','importToPracticeLib',48,',max,ipd,',',rnd,','1',150),(1731,'doc','importToComponentLib',48,',max,ipd,',',rnd,','1',155),(1732,'report','show',205,',max,ipd,',',rnd,','1',3),(1733,'report','custom',278,',max,ipd,',',rnd,','1',17),(1734,'report','editReport',278,',max,ipd,',',rnd,','1',18),(1735,'report','useReport',278,',max,ipd,',',rnd,','1',19),(1736,'report','deleteReport',278,',max,ipd,',',rnd,','1',20),(1737,'report','saveReport',278,',max,ipd,',',rnd,','1',21),(1738,'report','crystalExport',278,',max,ipd,',',rnd,','1',22),(1739,'report','customeredReport',205,',max,ipd,',',rnd,','1',4),(1740,'report','viewReport',205,',max,ipd,',',rnd,','1',5),(1741,'report','projectSummary',205,',max,ipd,',',rnd,','1',1),(1742,'report','projectWorkload',205,',max,ipd,',',rnd,','1',2),(1743,'report','export',278,',biz,max,ipd,',',rnd,','1',25),(1744,'api','index',338,',open,biz,max,ipd,',',rnd,','1',5),(1745,'api','createLib',339,',open,biz,max,ipd,',',rnd,','1',0),(1746,'api','editLib',339,',open,biz,max,ipd,',',rnd,','1',1),(1747,'api','deleteLib',341,',open,biz,max,ipd,',',rnd,','1',0),(1748,'api','createRelease',339,',open,biz,max,ipd,',',rnd,','1',4),(1749,'api','releases',339,',open,biz,max,ipd,',',rnd,','1',5),(1750,'api','deleteRelease',341,',open,biz,max,ipd,',',rnd,','1',3),(1751,'api','struct',339,',open,biz,max,ipd,',',rnd,','1',8),(1752,'api','createStruct',339,',open,biz,max,ipd,',',rnd,','1',6),(1753,'api','editStruct',339,',open,biz,max,ipd,',',rnd,','1',7),(1754,'api','deleteStruct',341,',open,biz,max,ipd,',',rnd,','1',2),(1755,'api','create',339,',open,biz,max,ipd,',',rnd,','1',2),(1756,'api','edit',339,',open,biz,max,ipd,',',rnd,','1',3),(1757,'api','delete',341,',open,biz,max,ipd,',',rnd,','1',1),(1758,'api','addCatalog',339,',open,biz,max,ipd,',',rnd,','1',9),(1759,'api','editCatalog',339,',open,biz,max,ipd,',',rnd,','1',10),(1760,'api','sortCatalog',339,',open,biz,max,ipd,',',rnd,','1',60),(1761,'api','deleteCatalog',341,',open,biz,max,ipd,',',rnd,','1',4),(1762,'api','getModel',342,',open,biz,max,ipd,',',rnd,','1',5),(1763,'api','debug',228,',open,biz,max,ipd,',',rnd,','1',35),(1764,'api','sql',342,',open,biz,max,ipd,',',rnd,','1',105),(1765,'api','export',340,',biz,max,ipd,',',rnd,','1',110),(1766,'doc','myEdited',333,',open,biz,max,ipd,',',rnd,or,','1',9),(1767,'traincourse','batchImport',125,',biz,max,ipd,',',rnd,','1',4),(2060,'product','activate',21,',ipd,',',or,rnd,','1',10),(2061,'charter','browse',636,',ipd,',',or,','1',10),(2062,'charter','create',638,',ipd,',',or,','1',20),(2063,'charter','edit',638,',ipd,',',or,','1',30),(2064,'charter','view',636,',ipd,',',or,','1',40),(2065,'charter','delete',638,',ipd,',',or,','1',50),(2066,'charter','review',639,',ipd,',',or,','1',60),(2067,'charter','loadRoadmapStories',636,',ipd,',',or,','1',70),(2068,'demandpool','browse',635,',ipd,',',or,','1',10),(2069,'demandpool','create',637,',ipd,',',or,','1',20),(2070,'demandpool','edit',637,',ipd,',',or,','1',30),(2071,'demandpool','view',635,',ipd,',',or,','1',40),(2072,'demandpool','close',637,',ipd,',',or,','1',50),(2073,'demandpool','activate',637,',ipd,',',or,','1',60),(2074,'demandpool','delete',649,',ipd,',',or,','1',70),(2075,'demand','browse',640,',ipd,',',or,','1',10),(2076,'demand','create',641,',ipd,',',or,','1',20),(2077,'demand','batchCreate',641,',ipd,',',or,','1',30),(2078,'demand','edit',641,',ipd,',',or,','1',40),(2079,'demand','view',640,',ipd,',',or,','1',50),(2080,'demand','assignTo',641,',ipd,',',or,','1',60),(2081,'demand','change',641,',ipd,',',or,','1',70),(2082,'demand','review',642,',ipd,',',or,','1',80),(2083,'demand','submitReview',642,',ipd,',',or,','1',90),(2084,'demand','recall',642,',ipd,',',or,','1',100),(2085,'demand','track',640,',ipd,',',or,','1',110),(2086,'demand','manageTree',641,',ipd,',',or,','1',120),(2091,'demand','delete',644,',ipd,',',or,','1',170),(2092,'demand','close',641,',ipd,',',or,','1',180),(2093,'demand','activate',641,',ipd,',',or,','1',190),(2094,'demand','distribute',641,',ipd,',',or,','1',200),(2095,'roadmap','browse',646,',ipd,',',or,rnd,','1',10),(2096,'roadmap','view',646,',ipd,',',or,rnd,','1',20),(2097,'roadmap','linkUR',647,',ipd,',',or,','1',30),(2098,'roadmap','create',647,',ipd,',',or,','1',40),(2099,'roadmap','edit',647,',ipd,',',or,','1',50),(2100,'roadmap','close',647,',ipd,',',or,','1',60),(2101,'roadmap','delete',648,',ipd,',',or,','1',70),(2102,'roadmap','activate',647,',ipd,',',or,','1',80),(2103,'roadmap','unlinkUR',647,',ipd,',',or,','1',90),(2104,'roadmap','batchUnlinkUR',647,',ipd,',',or,','1',100),(2105,'my','story',351,',ipd,',',lite,','1',10),(2106,'my','task',351,',ipd,',',lite,','1',20),(2107,'traincourse','cloudImport',125,',biz,max,ipd,',',rnd,','1',10),(2108,'dataview','export',650,',biz,max,ipd,',',rnd,','1',30),(2109,'demand','export',643,',ipd,',',or,','1',210),(2110,'demand','exportTemplate',643,',ipd,',',or,','1',220),(2111,'demand','import',643,',ipd,',',or,','1',230),(2112,'requirement','batchChangeRoadmap',32,',ipd,',',or,','1',125),(2113,'charter','close',638,',ipd,',',or,','1',80),(2114,'charter','activate',638,',ipd,',',or,','1',90),(2115,'requirement', 'relation', '32', ',max,ipd,', ',rnd,', '1', '130'); -REPLACE INTO `zt_privmanager` (`id`, `parent`, `code`, `type`, `edition`, `vision`, `order`) VALUES (4,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(5,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(6,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(7,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(8,353,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(9,354,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(10,354,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(11,357,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(12,357,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(13,357,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(14,358,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(15,358,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(16,358,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(17,359,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(18,351,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(19,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(20,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(21,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(22,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(23,367,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(24,367,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(25,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(26,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(27,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(28,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(29,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(30,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(31,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(32,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(33,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(34,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(35,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(36,364,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(37,364,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(38,364,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(39,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(40,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(41,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(42,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(43,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(44,370,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(45,371,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(46,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(47,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(48,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(50,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(51,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(52,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(53,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(54,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(55,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(56,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(57,416,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(58,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(60,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(61,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(62,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(63,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(64,416,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(65,411,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(66,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(67,412,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(68,413,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(69,414,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(71,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(72,408,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(73,408,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(74,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(75,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(76,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(77,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(78,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(79,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(80,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(81,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(82,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(83,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(84,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(85,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(86,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(87,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(88,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(89,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(90,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(91,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(92,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(93,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(94,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(95,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(96,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(97,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(98,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(99,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(100,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(101,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(102,552,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(103,547,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(104,553,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(105,554,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(106,548,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(107,549,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(108,550,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(109,551,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(110,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(111,555,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(112,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(113,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(114,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(115,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(116,543,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(117,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(118,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(119,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(121,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(122,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(123,545,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(124,566,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(125,566,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(126,557,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(127,558,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(128,559,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(129,560,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(130,561,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(131,562,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(132,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(133,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(134,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(135,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(136,421,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(137,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(138,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(139,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(140,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(141,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(142,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(143,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(144,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(145,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(146,424,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(147,424,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(148,424,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(149,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',40),(150,425,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(151,425,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(152,425,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(153,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(154,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(155,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(156,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(157,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(158,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(159,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(160,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(161,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(162,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(163,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(164,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(165,451,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(166,452,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(167,453,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(168,454,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(169,455,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(170,456,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(171,372,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(175,373,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(176,373,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(177,373,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(178,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(179,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(180,396,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(181,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(182,401,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(183,401,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(184,402,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(185,402,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(186,378,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(187,378,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(188,378,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(189,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(190,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(191,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(192,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(193,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(194,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(195,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(196,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(197,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(198,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(199,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(200,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(201,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(202,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(203,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(204,395,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(205,400,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(206,403,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(207,403,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(208,387,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(209,404,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(210,404,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(211,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(212,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(213,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(214,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(215,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(216,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(217,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',40),(218,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',45),(220,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',50),(221,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',55),(222,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',60),(223,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(224,506,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(225,506,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(226,470,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(227,506,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(228,470,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(229,470,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(230,505,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(231,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(232,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(233,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(234,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(235,463,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(236,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(237,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(238,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(239,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(240,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(241,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(242,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(243,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(244,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(245,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(246,516,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(247,516,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(248,505,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(249,461,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(250,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(251,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(252,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(253,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(254,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(255,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(256,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(257,518,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(258,537,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(259,519,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(260,520,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(261,540,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(262,482,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(263,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(264,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(265,388,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(266,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(267,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(268,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(269,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(270,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',50),(271,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(272,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',45),(273,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(274,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(275,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',40),(276,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(277,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(278,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(279,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(280,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(281,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(282,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',55),(283,419,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(284,419,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(285,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(286,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(287,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(288,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(289,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',45),(290,415,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(291,355,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(292,394,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(293,393,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(295,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',65),(296,539,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(297,536,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(298,507,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(299,504,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(300,503,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(301,538,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(302,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(303,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(304,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(305,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(306,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(307,372,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(308,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(309,408,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(311,414,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(312,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(313,371,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(314,403,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(315,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(316,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(317,446,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(318,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(319,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(320,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(321,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(322,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(323,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(324,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(325,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(326,444,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(327,444,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(328,444,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(329,445,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(330,445,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(331,445,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(333,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(334,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(335,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(336,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(338,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(339,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(340,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(341,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(342,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(344,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(345,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(346,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(347,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(348,0,'index','view',',open,biz,max,',',rnd,',10),(349,348,'index','module',',open,biz,max,ipd,',',rnd,lite,or,',10),(350,0,'my','view',',open,biz,max,ipd,',',rnd,lite,or,',5),(351,350,'my','module',',open,biz,max,ipd,',',rnd,lite,or,',20),(352,350,'todo','module',',open,biz,max,ipd,',',rnd,lite,or,',30),(353,350,'contact','module',',open,biz,max,ipd,',',rnd,lite,or,',40),(354,350,'personalsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',50),(355,350,'effort','module',',biz,max,ipd,',',rnd,lite,or,',60),(356,0,'program','view',',open,biz,max,ipd,',',rnd,',30),(357,356,'program','module',',open,biz,max,ipd,',',rnd,',70),(358,356,'personnel','module',',open,biz,max,ipd,',',rnd,lite,',80),(359,356,'programstakeholder','module',',open,biz,max,ipd,',',rnd,lite,or,',90),(360,0,'product','view',',open,biz,max,ipd,',',rnd,or,',15),(361,360,'product','module',',open,biz,max,ipd,',',rnd,or,',100),(362,360,'story','module',',open,biz,max,ipd,',',rnd,lite,',110),(363,360,'requirement','module',',open,biz,max,ipd,',',rnd,or,',120),(364,360,'productplan','module',',open,biz,max,ipd,',',rnd,',130),(365,360,'release','module',',open,biz,max,ipd,',',rnd,',140),(366,360,'branch','module',',open,biz,max,ipd,',',rnd,or,',150),(367,360,'productsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',160),(368,0,'project','view',',open,biz,max,ipd,',',rnd,lite,',50),(369,368,'project','module',',open,biz,max,ipd,',',rnd,lite,',170),(370,368,'projectplan','module',',open,biz,max,ipd,',',rnd,',180),(371,368,'projectstory','module',',open,biz,max,ipd,',',rnd,lite,',190),(372,368,'programplan','module',',open,biz,max,ipd,',',rnd,',200),(373,368,'design','module',',open,biz,max,ipd,',',rnd,',210),(374,368,'milestone','module',',max,ipd,',',rnd,',220),(375,368,'issue','module',',max,ipd,',',rnd,',230),(376,368,'risk','module',',max,ipd,',',rnd,',240),(377,368,'budget','module',',max,ipd,',',rnd,',250),(378,368,'workestimation','module',',open,biz,max,ipd,',',rnd,lite,or,',260),(379,368,'durationestimation','module',',max,ipd,',',rnd,',270),(380,368,'weekly','module',',max,ipd,',',rnd,',280),(381,368,'opportunity','module',',max,ipd,',',rnd,',290),(382,368,'trainplan','module',',max,ipd,',',rnd,',300),(383,368,'nc','module',',max,ipd,',',rnd,',310),(384,368,'gapanalysis','module',',open,biz,max,ipd,',',rnd,lite,or,',320),(385,368,'researchplan','module',',open,biz,max,ipd,',',rnd,lite,or,',330),(386,368,'researchreport','module',',max,ipd,',',rnd,',340),(387,368,'meeting','module',',max,ipd,',',rnd,',350),(388,368,'projectbuild','module',',open,biz,max,ipd,',',rnd,',360),(389,368,'projectrelease','module',',open,biz,max,ipd,',',rnd,',370),(390,368,'stakeholder','module',',open,biz,max,ipd,',',rnd,',380),(391,368,'projectsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',390),(392,368,'projectreview','module',',open,biz,max,ipd,',',rnd,lite,or,',400),(393,368,'projecttrack','module',',open,biz,max,ipd,',',rnd,lite,or,',410),(394,368,'projectqa','module',',open,biz,max,ipd,',',rnd,lite,or,',420),(395,368,'pssp','module',',max,ipd,',',rnd,',430),(396,368,'cm','module',',max,ipd,',',rnd,',440),(397,368,'auditplan','module',',max,ipd,',',rnd,',450),(398,368,'reviewissue','module',',max,ipd,',',rnd,',460),(399,368,'review','module',',max,ipd,',',rnd,',470),(400,368,'measrecord','module',',max,ipd,',',rnd,',480),(401,368,'projectreport','module',',max,ipd,',',rnd,',490),(402,368,'projectresearch','module',',max,ipd,',',rnd,',500),(403,368,'projectauditplan','module',',max,ipd,',',rnd,',510),(404,368,'projectgapanalysis','module',',max,ipd,',',rnd,',520),(405,0,'execution','view',',open,biz,max,ipd,',',rnd,lite,',60),(406,405,'execution','module',',open,biz,max,ipd,',',rnd,lite,',530),(407,405,'task','module',',open,biz,max,ipd,',',rnd,lite,',540),(408,405,'build','module',',open,biz,max,ipd,',',rnd,',550),(409,405,'executionview','module',',open,biz,max,ipd,',',rnd,lite,or,',560),(410,405,'executiongantt','module',',open,biz,max,ipd,',',rnd,lite,or,',570),(411,405,'executionkanban','module',',open,biz,max,ipd,',',rnd,lite,or,',580),(412,405,'executionburn','module',',open,biz,max,ipd,',',rnd,lite,or,',590),(413,405,'executioncfd','module',',open,biz,max,ipd,',',rnd,lite,or,',600),(414,405,'executionstory','module',',open,biz,max,ipd,',',rnd,lite,or,',610),(415,405,'executionqa','module',',open,biz,max,ipd,',',rnd,lite,or,',620),(416,405,'executionsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',630),(417,0,'kanban','view',',open,biz,max,ipd,',',rnd,lite,',70),(418,417,'kanban','module',',open,biz,max,ipd,',',rnd,lite,',640),(419,417,'managespace','module',',open,biz,max,ipd,',',rnd,lite,or,',650),(420,0,'qa','view',',open,biz,max,ipd,',',rnd,',80),(421,420,'qa','module',',open,biz,max,ipd,',',rnd,',660),(422,420,'bug','module',',open,biz,max,ipd,',',rnd,',670),(423,420,'testcase','module',',open,biz,max,ipd,',',rnd,',680),(424,420,'testtask','module',',open,biz,max,ipd,',',rnd,',690),(425,420,'testsuite','module',',open,biz,max,ipd,',',rnd,',700),(426,420,'testreport','module',',open,biz,max,ipd,',',rnd,',710),(427,420,'zahost','module',',open,biz,max,ipd,',',rnd,',720),(428,420,'zanode','module',',open,biz,max,ipd,',',rnd,',730),(429,0,'assetlib','view',',max,ipd,',',rnd,',90),(430,429,'caselib','module',',open,biz,max,ipd,',',rnd,',740),(431,429,'assetlib','module',',max,ipd,',',rnd,',750),(432,429,'storylib','module',',max,ipd,',',rnd,',760),(433,429,'issuelib','module',',max,ipd,',',rnd,',770),(434,429,'risklib','module',',max,ipd,',',rnd,',780),(435,429,'opportunitylib','module',',max,ipd,',',rnd,',790),(436,429,'practicelib','module',',max,ipd,',',rnd,',800),(437,429,'componentlib','module',',max,ipd,',',rnd,',810),(438,0,'doc','view',',open,biz,max,ipd,',',rnd,lite,or,',25),(439,438,'doc','module',',open,biz,max,ipd,',',rnd,lite,or,',820),(440,438,'api','module',',open,biz,max,ipd,',',rnd,',830),(441,0,'bi','view',',open,biz,max,ipd,',',rnd,',110),(442,441,'screen','module',',open,biz,max,ipd,',',rnd,',840),(443,441,'pivot','module',',open,biz,max,ipd,',',rnd,',850),(444,441,'chart','module',',open,biz,max,ipd,',',rnd,',860),(445,441,'dataview','module',',biz,max,ipd,',',rnd,',870),(446,441,'dimension','module',',biz,max,ipd,',',rnd,',880),(447,441,'report','module',',open,biz,max,ipd,',',rnd,',890),(448,441,'bidesign','module',',open,biz,max,ipd,',',rnd,lite,or,',900),(449,0,'system','view',',open,biz,max,ipd,',',rnd,lite,',120),(450,449,'company','module',',open,biz,max,ipd,',',rnd,lite,or,',910),(451,449,'systemteam','module',',open,biz,max,ipd,',',rnd,lite,or,',920),(452,449,'systemschedule','module',',open,biz,max,ipd,',',rnd,lite,or,',930),(453,449,'systemeffort','module',',open,biz,max,ipd,',',rnd,lite,or,',940),(454,449,'systemdynamic','module',',open,biz,max,ipd,',',rnd,lite,or,',950),(455,449,'systemcompany','module',',open,biz,max,ipd,',',rnd,lite,or,',960),(456,449,'dataaccess','module',',open,biz,max,ipd,',',rnd,lite,or,',970),(457,0,'admin','view',',open,biz,max,ipd,',',rnd,lite,or,',30),(458,457,'dept','module',',open,biz,max,ipd,',',rnd,lite,or,',980),(459,457,'group','module',',open,biz,max,ipd,',',rnd,lite,or,',990),(460,457,'user','module',',open,biz,max,ipd,',',rnd,lite,or,',1000),(461,457,'admin','module',',open,biz,max,ipd,',',rnd,lite,or,',1010),(462,457,'stage','module',',open,biz,max,ipd,',',rnd,',1020),(463,457,'extension','module',',open,biz,max,ipd,',',rnd,lite,',1030),(464,457,'custom','module',',open,biz,max,ipd,',',rnd,lite,or,',1040),(465,457,'action','module',',open,biz,max,ipd,',',rnd,lite,or,',1050),(466,457,'mail','module',',open,biz,max,ipd,',',lite,rnd,or,',1060),(467,457,'sms','module',',biz,max,ipd,',',lite,rnd,or,',1070),(468,457,'backup','module',',open,biz,max,ipd,',',lite,rnd,or,',1080),(469,457,'cron','module',',open,biz,max,ipd,',',rnd,lite,',1090),(470,457,'dev','module',',open,biz,max,ipd,',',rnd,',1100),(471,457,'editor','module',',open,biz,max,ipd,',',rnd,',1110),(472,457,'holiday','module',',open,biz,max,ipd,',',rnd,',1120),(473,457,'meetingroom','module',',max,ipd,',',rnd,',1130),(474,457,'webhook','module',',open,biz,max,ipd,',',lite,rnd,or,',1140),(475,457,'message','module',',open,biz,max,ipd,',',lite,rnd,or,',1150),(476,457,'featureswitch','module',',open,biz,max,ipd,',',rnd,lite,or,',1160),(477,457,'importdata','module',',open,biz,max,ipd,',',rnd,lite,or,',1170),(478,457,'systemsetting','module',',open,biz,max,ipd,',',rnd,lite,or,',1180),(479,457,'staffmanage','module',',open,biz,max,ipd,',',rnd,lite,or,',1190),(480,457,'modelconfig','module',',open,biz,max,ipd,',',rnd,lite,or,',1200),(481,457,'featureconfig','module',',open,biz,max,ipd,',',rnd,lite,or,',1210),(482,457,'doctemplate','module',',open,biz,max,ipd,',',rnd,lite,or,',1220),(483,457,'notifysetting','module',',open,biz,max,ipd,',',rnd,lite,or,',1230),(484,457,'ldap','module',',biz,max,ipd,',',rnd,',1240),(485,457,'sqlbuilder','module',',max,ipd,',',rnd,',1250),(486,457,'holidayseason','module',',open,biz,max,',',rnd,',1260),(487,457,'baseline','module',',max,ipd,',',rnd,',1270),(488,457,'classify','module',',max,ipd,',',rnd,',1280),(489,457,'cmcl','module',',max,ipd,',',rnd,',1290),(490,457,'auditcl','module',',max,ipd,',',rnd,',1300),(491,457,'reviewcl','module',',max,ipd,',',rnd,',1310),(492,457,'process','module',',max,ipd,',',rnd,',1320),(493,457,'activity','module',',max,ipd,',',rnd,',1330),(494,457,'zoutput','module',',max,ipd,',',rnd,',1340),(495,457,'subject','module',',max,ipd,',',rnd,',1350),(496,457,'approvalflow','module',',max,ipd,',',rnd,',1360),(497,457,'reviewsetting','module',',max,ipd,',',rnd,',1370),(498,457,'measurement','module',',max,ipd,',',rnd,',1380),(499,457,'setting','module',',open,biz,max,ipd,',',rnd,lite,',1390),(500,457,'im','module',',open,biz,max,ipd,',',rnd,lite,',1400),(501,457,'client','module',',open,biz,max,ipd,',',rnd,lite,',1410),(502,0,'devops','view',',open,biz,max,ipd,',',rnd,',140),(503,502,'svn','module',',open,biz,max,ipd,',',rnd,',1420),(504,502,'git','module',',open,biz,max,ipd,',',rnd,',1430),(505,502,'mr','module',',open,biz,max,ipd,',',rnd,',1440),(506,502,'repo','module',',open,biz,max,ipd,',',rnd,',1450),(507,502,'ci','module',',open,biz,max,ipd,',',rnd,',1460),(508,502,'compile','module',',open,biz,max,ipd,',',rnd,',1470),(509,502,'jenkins','module',',open,biz,max,ipd,',',rnd,',1480),(510,502,'job','module',',open,biz,max,ipd,',',rnd,',1490),(511,502,'gitlab','module',',open,biz,max,ipd,',',rnd,',1500),(512,502,'gogs','module',',open,biz,max,ipd,',',rnd,',1510),(513,502,'gitea','module',',open,biz,max,ipd,',',rnd,',1520),(514,502,'sonarqube','module',',open,biz,max,ipd,',',rnd,',1530),(515,502,'app','module',',open,biz,max,ipd,',',rnd,',1540),(516,502,'pipeline','module',',open,biz,max,ipd,',',rnd,lite,or,',1550),(517,502,'devopssetting','module',',open,biz,max,ipd,',',rnd,lite,or,',1560),(518,0,'search','module',',open,biz,max,ipd,',',rnd,lite,or,',1570),(519,0,'tree','module',',open,biz,max,ipd,',',rnd,lite,or,',1580),(520,0,'file','module',',open,biz,max,ipd,',',rnd,lite,or,',1590),(521,0,'misc','module',',open,biz,max,ipd,',',rnd,lite,',1600),(522,0,'approval','module',',max,ipd,',',rnd,',1610),(523,0,'workflow','view',',biz,max,ipd,',',rnd,lite,',150),(524,523,'workflow','module',',biz,max,ipd,',',rnd,lite,',1620),(525,523,'workflowfield','module',',biz,max,ipd,',',rnd,lite,',1630),(526,523,'workflowaction','module',',biz,max,ipd,',',rnd,lite,',1640),(527,523,'workflowlayout','module',',biz,max,ipd,',',rnd,lite,',1650),(528,523,'workflowcondition','module',',biz,max,ipd,',',rnd,lite,',1660),(529,523,'workflowlinkage','module',',biz,max,ipd,',',rnd,lite,',1670),(530,523,'workflowhook','module',',biz,max,ipd,',',rnd,lite,',1680),(531,523,'workflowlabel','module',',biz,max,ipd,',',rnd,lite,',1690),(532,523,'workflowrelation','module',',biz,max,ipd,',',rnd,lite,',1700),(533,523,'workflowreport','module',',biz,max,ipd,',',rnd,lite,',1710),(534,523,'workflowdatasource','module',',biz,max,ipd,',',rnd,lite,',1720),(535,523,'workflowrule','module',',biz,max,ipd,',',rnd,lite,',1730),(536,0,'datatable','module',',open,biz,max,ipd,',',rnd,lite,',1740),(537,0,'generalcomment','module',',open,biz,max,ipd,',',rnd,lite,or,',1750),(538,0,'generalping','module',',open,biz,max,ipd,',',rnd,lite,or,',1760),(539,0,'generaltemplate','module',',open,biz,max,ipd,',',rnd,lite,or,',1770),(540,0,'generaleffort','module',',open,biz,max,ipd,',',rnd,lite,or,',1780),(541,0,'feedback','view',',biz,max,ipd,',',rnd,lite,',160),(542,541,'feedback','module',',biz,max,ipd,',',rnd,lite,',1790),(543,541,'faq','module',',biz,max,ipd,',',rnd,lite,',1800),(544,541,'ticket','module',',biz,max,ipd,',',rnd,lite,',1810),(545,541,'feedbackpriv','module',',biz,max,ipd,',',rnd,',1820),(546,0,'oa','view',',biz,max,ipd,',',rnd,lite,',170),(547,546,'attend','module',',biz,max,ipd,',',rnd,lite,',1830),(548,546,'leave','module',',biz,max,ipd,',',rnd,lite,',1840),(549,546,'makeup','module',',biz,max,ipd,',',rnd,lite,',1850),(550,546,'overtime','module',',biz,max,ipd,',',rnd,lite,',1860),(551,546,'lieu','module',',biz,max,ipd,',',rnd,lite,',1870),(552,546,'officeapproval','module',',biz,max,ipd,',',rnd,',1880),(553,546,'officesetting','module',',biz,max,ipd,',',rnd,',1890),(554,546,'datapermission','module',',biz,max,ipd,',',rnd,',1900),(555,546,'officeexport','module',',biz,max,ipd,',',rnd,',1910),(556,0,'ops','view',',biz,max,ipd,',',rnd,',180),(557,556,'ops','module',',biz,max,ipd,',',rnd,',1920),(558,556,'host','module',',biz,max,ipd,',',rnd,',1930),(559,556,'serverroom','module',',biz,max,ipd,',',rnd,',1940),(560,556,'account','module',',biz,max,ipd,',',rnd,',1950),(561,556,'domain','module',',biz,max,ipd,',',rnd,',1960),(562,556,'service','module',',biz,max,ipd,',',rnd,',1970),(563,556,'deploy','module',',biz,max,ipd,',',rnd,',1980),(564,0,'conference','module',',biz,max,ipd,',',rnd,',1990),(565,0,'traincourse','view',',biz,max,ipd,',',rnd,',190),(566,565,'traincourse','module',',biz,max,ipd,',',rnd,',2000),(607,0,'demandpool','view',',ipd,',',or,',10),(608,0,'charter','view',',ipd,',',or,',20),(609,608,'charter','module',',ipd,',',or,',165),(610,607,'demandpool','module',',ipd,',',or,',55),(611,607,'demand','module',',ipd,',',or,',56),(612,360,'roadmap','module',',ipd,',',or,rnd,',125),(635,610,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(636,609,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(637,610,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(638,609,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(639,609,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(640,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(641,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(642,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(643,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(644,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(645,461,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(646,612,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(647,612,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(648,612,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(649,610,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(650,445,'','package',',biz,max,ipd,',',rnd,',20); -REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (1,'priv','de','index-index','',''),(1,'priv','en','index-index','',''),(1,'priv','fr','index-index','',''),(1,'priv','zh-cn','index-index','',''),(1,'priv','zh-tw','index-index','',''),(2,'priv','de','my-indexAction','',''),(2,'priv','en','my-indexAction','',''),(2,'priv','fr','my-indexAction','',''),(2,'priv','zh-cn','my-indexAction','',''),(2,'priv','zh-tw','my-indexAction','',''),(3,'priv','de','my-todoAction','',''),(3,'priv','en','my-todoAction','',''),(3,'priv','fr','my-todoAction','',''),(3,'priv','zh-cn','my-todoAction','',''),(3,'priv','zh-tw','my-todoAction','',''),(4,'priv','de','my-workAction','',''),(4,'priv','en','my-workAction','',''),(4,'priv','fr','my-workAction','',''),(4,'priv','zh-cn','my-workAction','',''),(4,'priv','zh-tw','my-workAction','',''),(4,'manager','zh-cn','','浏览待办',''),(5,'priv','de','my-contributeAction','',''),(5,'priv','en','my-contributeAction','',''),(5,'priv','fr','my-contributeAction','',''),(5,'priv','zh-cn','my-contributeAction','',''),(5,'priv','zh-tw','my-contributeAction','',''),(5,'manager','zh-cn','','创建维护待办',''),(6,'priv','de','my-project','',''),(6,'priv','en','my-project','',''),(6,'priv','fr','my-project','',''),(6,'priv','zh-cn','my-project','',''),(6,'priv','zh-tw','my-project','',''),(6,'manager','zh-cn','','删除待办',''),(7,'priv','de','my-profileAction','',''),(7,'priv','en','my-profileAction','',''),(7,'priv','fr','my-profileAction','',''),(7,'priv','zh-cn','my-profileAction','',''),(7,'priv','zh-tw','my-profileAction','',''),(7,'manager','zh-cn','','导入导出待办',''),(8,'priv','de','my-uploadAvatar','',''),(8,'priv','en','my-uploadAvatar','',''),(8,'priv','fr','my-uploadAvatar','',''),(8,'priv','zh-cn','my-uploadAvatar','',''),(8,'priv','zh-tw','my-uploadAvatar','',''),(8,'manager','zh-cn','','维护联系人',''),(9,'priv','de','my-preference','',''),(9,'priv','en','my-preference','',''),(9,'priv','fr','my-preference','',''),(9,'priv','zh-cn','my-preference','',''),(9,'priv','zh-tw','my-preference','',''),(9,'manager','zh-cn','','个人档案',''),(10,'priv','de','my-dynamicAction','',''),(10,'priv','en','my-dynamicAction','',''),(10,'priv','fr','my-dynamicAction','',''),(10,'priv','zh-cn','my-dynamicAction','',''),(10,'priv','zh-tw','my-dynamicAction','',''),(10,'manager','zh-cn','','个性化设置',''),(11,'priv','de','my-editProfile','',''),(11,'priv','en','my-editProfile','',''),(11,'priv','fr','my-editProfile','',''),(11,'priv','zh-cn','my-editProfile','',''),(11,'priv','zh-tw','my-editProfile','',''),(11,'manager','zh-cn','','浏览项目集',''),(12,'priv','de','my-changePassword','',''),(12,'priv','en','my-changePassword','',''),(12,'priv','fr','my-changePassword','',''),(12,'priv','zh-cn','my-changePassword','',''),(12,'priv','zh-tw','my-changePassword','',''),(12,'manager','zh-cn','','创建维护项目集',''),(13,'priv','de','my-manageContacts','',''),(13,'priv','en','my-manageContacts','',''),(13,'priv','fr','my-manageContacts','',''),(13,'priv','zh-cn','my-manageContacts','',''),(13,'priv','zh-tw','my-manageContacts','',''),(13,'manager','zh-cn','','删除项目集',''),(14,'priv','de','my-deleteContacts','',''),(14,'priv','en','my-deleteContacts','',''),(14,'priv','fr','my-deleteContacts','',''),(14,'priv','zh-cn','my-deleteContacts','',''),(14,'priv','zh-tw','my-deleteContacts','',''),(14,'manager','zh-cn','','投入人员',''),(15,'priv','de','my-score','',''),(15,'priv','en','my-score','',''),(15,'priv','fr','my-score','',''),(15,'priv','zh-cn','my-score','',''),(15,'priv','zh-tw','my-score','',''),(15,'manager','zh-cn','','可访问人员',''),(16,'priv','de','my-team','',''),(16,'priv','en','my-team','',''),(16,'priv','fr','my-team','',''),(16,'priv','zh-cn','my-team','',''),(16,'priv','zh-tw','my-team','',''),(16,'manager','zh-cn','','维护白名单',''),(17,'priv','de','my-execution','',''),(17,'priv','en','my-execution','',''),(17,'priv','fr','my-execution','',''),(17,'priv','zh-cn','my-execution','',''),(17,'priv','zh-tw','my-execution','',''),(17,'manager','zh-cn','','维护干系人',''),(18,'priv','de','my-doc','',''),(18,'priv','en','my-doc','',''),(18,'priv','fr','my-doc','',''),(18,'priv','zh-cn','my-doc','',''),(18,'priv','zh-tw','my-doc','',''),(18,'manager','zh-cn','','浏览地盘',''),(19,'priv','de','my-audit','',''),(19,'priv','en','my-audit','',''),(19,'priv','fr','my-audit','',''),(19,'priv','zh-cn','my-audit','',''),(19,'priv','zh-tw','my-audit','',''),(19,'manager','zh-cn','','浏览产品',''),(20,'priv','de','my-meeting','',''),(20,'priv','en','my-meeting','',''),(20,'priv','fr','my-meeting','',''),(20,'priv','zh-cn','my-meeting','',''),(20,'priv','zh-tw','my-meeting','',''),(20,'manager','zh-cn','','创建维护产品线',''),(21,'priv','de','my-calendarAction','',''),(21,'priv','en','my-calendarAction','',''),(21,'priv','fr','my-calendarAction','',''),(21,'priv','zh-cn','my-calendarAction','',''),(21,'priv','zh-tw','my-calendarAction','',''),(21,'manager','zh-cn','','创建维护产品',''),(22,'priv','de','my-effortAction','',''),(22,'priv','en','my-effortAction','',''),(22,'priv','fr','my-effortAction','',''),(22,'priv','zh-cn','my-effortAction','',''),(22,'priv','zh-tw','my-effortAction','',''),(22,'manager','zh-cn','','导入导出产品',''),(23,'priv','de','my-review','',''),(23,'priv','en','my-review','',''),(23,'priv','fr','my-review','',''),(23,'priv','zh-cn','my-review','',''),(23,'priv','zh-tw','my-review','',''),(23,'manager','zh-cn','','白名单管理',''),(24,'priv','de','todo-create','',''),(24,'priv','en','todo-create','',''),(24,'priv','fr','todo-create','',''),(24,'priv','zh-cn','todo-create','',''),(24,'priv','zh-tw','todo-create','',''),(24,'manager','zh-cn','','分支管理',''),(25,'priv','de','todo-createCycle','',''),(25,'priv','en','todo-createCycle','',''),(25,'priv','fr','todo-createCycle','',''),(25,'priv','zh-cn','todo-createCycle','',''),(25,'priv','zh-tw','todo-createCycle','',''),(25,'manager','zh-cn','','浏览研发需求',''),(26,'priv','de','todo-batchCreate','',''),(26,'priv','en','todo-batchCreate','',''),(26,'priv','fr','todo-batchCreate','',''),(26,'priv','zh-cn','todo-batchCreate','',''),(26,'priv','zh-tw','todo-batchCreate','',''),(26,'manager','zh-cn','','创建维护研发需求',''),(27,'priv','de','todo-edit','',''),(27,'priv','en','todo-edit','',''),(27,'priv','fr','todo-edit','',''),(27,'priv','zh-cn','todo-edit','',''),(27,'priv','zh-tw','todo-edit','',''),(27,'manager','zh-cn','','导入导出研发需求',''),(28,'priv','de','todo-batchEdit','',''),(28,'priv','en','todo-batchEdit','',''),(28,'priv','fr','todo-batchEdit','',''),(28,'priv','zh-cn','todo-batchEdit','',''),(28,'priv','zh-tw','todo-batchEdit','',''),(28,'manager','zh-cn','','删除研发需求',''),(29,'priv','de','todo-view','',''),(29,'priv','en','todo-view','',''),(29,'priv','fr','todo-view','',''),(29,'priv','zh-cn','todo-view','',''),(29,'priv','zh-tw','todo-view','',''),(29,'manager','zh-cn','','评审研发需求',''),(30,'priv','de','todo-delete','',''),(30,'priv','en','todo-delete','',''),(30,'priv','fr','todo-delete','',''),(30,'priv','zh-cn','todo-delete','',''),(30,'priv','zh-tw','todo-delete','',''),(30,'manager','zh-cn','','删除产品',''),(31,'priv','de','todo-export','',''),(31,'priv','en','todo-export','',''),(31,'priv','fr','todo-export','',''),(31,'priv','zh-cn','todo-export','',''),(31,'priv','zh-tw','todo-export','',''),(31,'manager','zh-cn','','浏览用户需求',''),(32,'priv','de','todo-start','',''),(32,'priv','en','todo-start','',''),(32,'priv','fr','todo-start','',''),(32,'priv','zh-cn','todo-start','',''),(32,'priv','zh-tw','todo-start','',''),(32,'manager','zh-cn','','创建维护用户需求',''),(33,'priv','de','todo-finish','',''),(33,'priv','en','todo-finish','',''),(33,'priv','fr','todo-finish','',''),(33,'priv','zh-cn','todo-finish','',''),(33,'priv','zh-tw','todo-finish','',''),(33,'manager','zh-cn','','导入导出用户需求',''),(34,'priv','de','todo-batchFinish','',''),(34,'priv','en','todo-batchFinish','',''),(34,'priv','fr','todo-batchFinish','',''),(34,'priv','zh-cn','todo-batchFinish','',''),(34,'priv','zh-tw','todo-batchFinish','',''),(34,'manager','zh-cn','','删除用户需求',''),(35,'priv','de','todo-import2Today','',''),(35,'priv','en','todo-import2Today','',''),(35,'priv','fr','todo-import2Today','',''),(35,'priv','zh-cn','todo-import2Today','',''),(35,'priv','zh-tw','todo-import2Today','',''),(35,'manager','zh-cn','','评审用户需求',''),(36,'priv','de','todo-assignAction','',''),(36,'priv','en','todo-assignAction','',''),(36,'priv','fr','todo-assignAction','',''),(36,'priv','zh-cn','todo-assignAction','',''),(36,'priv','zh-tw','todo-assignAction','',''),(36,'manager','zh-cn','','浏览产品计划',''),(37,'priv','de','todo-activate','',''),(37,'priv','en','todo-activate','',''),(37,'priv','fr','todo-activate','',''),(37,'priv','zh-cn','todo-activate','',''),(37,'priv','zh-tw','todo-activate','',''),(37,'manager','zh-cn','','创建维护产品计划',''),(38,'priv','de','todo-close','',''),(38,'priv','en','todo-close','',''),(38,'priv','fr','todo-close','',''),(38,'priv','zh-cn','todo-close','',''),(38,'priv','zh-tw','todo-close','',''),(38,'manager','zh-cn','','删除产品计划',''),(39,'priv','de','todo-batchClose','',''),(39,'priv','en','todo-batchClose','',''),(39,'priv','fr','todo-batchClose','',''),(39,'priv','zh-cn','todo-batchClose','',''),(39,'priv','zh-tw','todo-batchClose','',''),(39,'manager','zh-cn','','浏览发布',''),(40,'priv','de','todo-calendar','',''),(40,'priv','en','todo-calendar','',''),(40,'priv','fr','todo-calendar','',''),(40,'priv','zh-cn','todo-calendar','',''),(40,'priv','zh-tw','todo-calendar','',''),(40,'manager','zh-cn','','创建维护发布',''),(41,'priv','de','program-browse','',''),(41,'priv','en','program-browse','',''),(41,'priv','fr','program-browse','',''),(41,'priv','zh-cn','program-browse','',''),(41,'priv','zh-tw','program-browse','',''),(41,'manager','zh-cn','','导入导出发布',''),(42,'priv','de','program-kanbanAction','',''),(42,'priv','en','program-kanbanAction','',''),(42,'priv','fr','program-kanbanAction','',''),(42,'priv','zh-cn','program-kanbanAction','',''),(42,'priv','zh-tw','program-kanbanAction','',''),(42,'manager','zh-cn','','删除发布',''),(43,'priv','de','program-view','',''),(43,'priv','en','program-view','',''),(43,'priv','fr','program-view','',''),(43,'priv','zh-cn','program-view','',''),(43,'priv','zh-tw','program-view','',''),(43,'manager','zh-cn','','发布通知',''),(44,'priv','de','program-product','',''),(44,'priv','en','program-product','',''),(44,'priv','fr','program-product','',''),(44,'priv','zh-cn','program-product','',''),(44,'priv','zh-tw','program-product','',''),(44,'manager','zh-cn','','项目计划',''),(45,'priv','de','program-create','',''),(45,'priv','en','program-create','',''),(45,'priv','fr','program-create','',''),(45,'priv','zh-cn','program-create','',''),(45,'priv','zh-tw','program-create','',''),(45,'manager','zh-cn','','维护研发需求',''),(46,'priv','de','program-edit','',''),(46,'priv','en','program-edit','',''),(46,'priv','fr','program-edit','',''),(46,'priv','zh-cn','program-edit','',''),(46,'priv','zh-tw','program-edit','',''),(46,'manager','zh-cn','','浏览项目',''),(47,'priv','de','program-start','',''),(47,'priv','en','program-start','',''),(47,'priv','fr','program-start','',''),(47,'priv','zh-cn','program-start','',''),(47,'priv','zh-tw','program-start','',''),(47,'manager','zh-cn','','创建维护项目',''),(48,'priv','de','program-suspend','',''),(48,'priv','en','program-suspend','',''),(48,'priv','fr','program-suspend','',''),(48,'priv','zh-cn','program-suspend','',''),(48,'priv','zh-tw','program-suspend','',''),(48,'manager','zh-cn','','导入导出项目',''),(49,'priv','de','program-activate','',''),(49,'priv','en','program-activate','',''),(49,'priv','fr','program-activate','',''),(49,'priv','zh-cn','program-activate','',''),(49,'priv','zh-tw','program-activate','',''),(50,'priv','de','program-close','',''),(50,'priv','en','program-close','',''),(50,'priv','fr','program-close','',''),(50,'priv','zh-cn','program-close','',''),(50,'priv','zh-tw','program-close','',''),(50,'manager','zh-cn','','团队权限',''),(51,'priv','de','program-delete','',''),(51,'priv','en','program-delete','',''),(51,'priv','fr','program-delete','',''),(51,'priv','zh-cn','program-delete','',''),(51,'priv','zh-tw','program-delete','',''),(51,'manager','zh-cn','','删除项目',''),(52,'priv','de','program-project','',''),(52,'priv','en','program-project','',''),(52,'priv','fr','program-project','',''),(52,'priv','zh-cn','program-project','',''),(52,'priv','zh-tw','program-project','',''),(52,'manager','zh-cn','','项目白名单',''),(53,'priv','de','program-stakeholder','',''),(53,'priv','en','program-stakeholder','',''),(53,'priv','fr','program-stakeholder','',''),(53,'priv','zh-cn','program-stakeholder','',''),(53,'priv','zh-tw','program-stakeholder','',''),(53,'manager','zh-cn','','浏览执行',''),(54,'priv','de','program-createStakeholder','',''),(54,'priv','en','program-createStakeholder','',''),(54,'priv','fr','program-createStakeholder','',''),(54,'priv','zh-cn','program-createStakeholder','',''),(54,'priv','zh-tw','program-createStakeholder','',''),(54,'manager','zh-cn','','创建维护执行',''),(55,'priv','de','program-unlinkStakeholder','',''),(55,'priv','en','program-unlinkStakeholder','',''),(55,'priv','fr','program-unlinkStakeholder','',''),(55,'priv','zh-cn','program-unlinkStakeholder','',''),(55,'priv','zh-tw','program-unlinkStakeholder','',''),(55,'manager','zh-cn','','删除执行',''),(56,'priv','de','program-batchUnlinkStakeholders','',''),(56,'priv','en','program-batchUnlinkStakeholders','',''),(56,'priv','fr','program-batchUnlinkStakeholders','',''),(56,'priv','zh-cn','program-batchUnlinkStakeholders','',''),(56,'priv','zh-tw','program-batchUnlinkStakeholders','',''),(56,'manager','zh-cn','','导入导出执行',''),(57,'priv','de','program-unbindWhitelist','',''),(57,'priv','en','program-unbindWhitelist','',''),(57,'priv','fr','program-unbindWhitelist','',''),(57,'priv','zh-cn','program-unbindWhitelist','',''),(57,'priv','zh-tw','program-unbindWhitelist','',''),(57,'manager','zh-cn','','执行白名单',''),(58,'priv','de','program-updateOrder','',''),(58,'priv','en','program-updateOrder','',''),(58,'priv','fr','program-updateOrder','',''),(58,'priv','zh-cn','program-updateOrder','',''),(58,'priv','zh-tw','program-updateOrder','',''),(58,'manager','zh-cn','','甘特图',''),(59,'priv','de','personnel-accessible','',''),(59,'priv','en','personnel-accessible','',''),(59,'priv','fr','personnel-accessible','',''),(59,'priv','zh-cn','personnel-accessible','',''),(59,'priv','zh-tw','personnel-accessible','',''),(60,'priv','de','personnel-invest','',''),(60,'priv','en','personnel-invest','',''),(60,'priv','fr','personnel-invest','',''),(60,'priv','zh-cn','personnel-invest','',''),(60,'priv','zh-tw','personnel-invest','',''),(60,'manager','zh-cn','','浏览任务',''),(61,'priv','de','personnel-whitelist','',''),(61,'priv','en','personnel-whitelist','',''),(61,'priv','fr','personnel-whitelist','',''),(61,'priv','zh-cn','personnel-whitelist','',''),(61,'priv','zh-tw','personnel-whitelist','',''),(61,'manager','zh-cn','','创建维护任务',''),(62,'priv','de','personnel-addWhitelist','',''),(62,'priv','en','personnel-addWhitelist','',''),(62,'priv','fr','personnel-addWhitelist','',''),(62,'priv','zh-cn','personnel-addWhitelist','',''),(62,'priv','zh-tw','personnel-addWhitelist','',''),(62,'manager','zh-cn','','删除任务',''),(63,'priv','de','product-indexAction','',''),(63,'priv','en','product-indexAction','',''),(63,'priv','fr','product-indexAction','',''),(63,'priv','zh-cn','product-indexAction','',''),(63,'priv','zh-tw','product-indexAction','',''),(63,'manager','zh-cn','','导入导出任务',''),(64,'priv','de','product-browse','',''),(64,'priv','en','product-browse','',''),(64,'priv','fr','product-browse','',''),(64,'priv','zh-cn','product-browse','',''),(64,'priv','zh-tw','product-browse','',''),(64,'manager','zh-cn','','执行团队',''),(65,'priv','de','product-requirement','',''),(65,'priv','en','product-requirement','',''),(65,'priv','fr','product-requirement','',''),(65,'priv','zh-cn','product-requirement','',''),(65,'priv','zh-tw','product-requirement','',''),(65,'manager','zh-cn','','看板',''),(66,'priv','de','product-create','',''),(66,'priv','en','product-create','',''),(66,'priv','fr','product-create','',''),(66,'priv','zh-cn','product-create','',''),(66,'priv','zh-tw','product-create','',''),(66,'manager','zh-cn','','分组视图',''),(67,'priv','de','product-view','',''),(67,'priv','en','product-view','',''),(67,'priv','fr','product-view','',''),(67,'priv','zh-cn','product-view','',''),(67,'priv','zh-tw','product-view','',''),(67,'manager','zh-cn','','燃尽图',''),(68,'priv','de','product-edit','',''),(68,'priv','en','product-edit','',''),(68,'priv','fr','product-edit','',''),(68,'priv','zh-cn','product-edit','',''),(68,'priv','zh-tw','product-edit','',''),(68,'manager','zh-cn','','累积流图',''),(69,'priv','de','product-batchEdit','',''),(69,'priv','en','product-batchEdit','',''),(69,'priv','fr','product-batchEdit','',''),(69,'priv','zh-cn','product-batchEdit','',''),(69,'priv','zh-tw','product-batchEdit','',''),(69,'manager','zh-cn','','维护研发需求',''),(70,'priv','de','product-delete','',''),(70,'priv','en','product-delete','',''),(70,'priv','fr','product-delete','',''),(70,'priv','zh-cn','product-delete','',''),(70,'priv','zh-tw','product-delete','',''),(71,'priv','de','product-roadmap','',''),(71,'priv','en','product-roadmap','',''),(71,'priv','fr','product-roadmap','',''),(71,'priv','zh-cn','product-roadmap','',''),(71,'priv','zh-tw','product-roadmap','',''),(71,'manager','zh-cn','','维护日志',''),(72,'priv','de','product-track','',''),(72,'priv','en','product-track','',''),(72,'priv','fr','product-track','',''),(72,'priv','zh-cn','product-track','',''),(72,'priv','zh-tw','product-track','',''),(72,'manager','zh-cn','','创建维护版本',''),(73,'priv','de','product-dynamic','',''),(73,'priv','en','product-dynamic','',''),(73,'priv','fr','product-dynamic','',''),(73,'priv','zh-cn','product-dynamic','',''),(73,'priv','zh-tw','product-dynamic','',''),(73,'manager','zh-cn','','删除版本',''),(74,'priv','de','product-project','',''),(74,'priv','en','product-project','',''),(74,'priv','fr','product-project','',''),(74,'priv','zh-cn','product-project','',''),(74,'priv','zh-tw','product-project','',''),(74,'manager','zh-cn','','浏览需求库',''),(75,'priv','de','product-dashboard','',''),(75,'priv','en','product-dashboard','',''),(75,'priv','fr','product-dashboard','',''),(75,'priv','zh-cn','product-dashboard','',''),(75,'priv','zh-tw','product-dashboard','',''),(75,'manager','zh-cn','','创建维护需求库',''),(76,'priv','de','product-closeAction','',''),(76,'priv','en','product-closeAction','',''),(76,'priv','fr','product-closeAction','',''),(76,'priv','zh-cn','product-closeAction','',''),(76,'priv','zh-tw','product-closeAction','',''),(76,'manager','zh-cn','','删除需求库',''),(77,'priv','de','product-orderAction','',''),(77,'priv','en','product-orderAction','',''),(77,'priv','fr','product-orderAction','',''),(77,'priv','zh-cn','product-orderAction','',''),(77,'priv','zh-tw','product-orderAction','',''),(77,'manager','zh-cn','','审批需求',''),(78,'priv','de','product-list','',''),(78,'priv','en','product-list','',''),(78,'priv','fr','product-list','',''),(78,'priv','zh-cn','product-list','',''),(78,'priv','zh-tw','product-list','',''),(78,'manager','zh-cn','','浏览问题库',''),(79,'priv','de','product-kanban','',''),(79,'priv','en','product-kanban','',''),(79,'priv','fr','product-kanban','',''),(79,'priv','zh-cn','product-kanban','',''),(79,'priv','zh-tw','product-kanban','',''),(79,'manager','zh-cn','','创建编辑问题库',''),(80,'priv','de','product-manageLine','',''),(80,'priv','en','product-manageLine','',''),(80,'priv','fr','product-manageLine','',''),(80,'priv','zh-cn','product-manageLine','',''),(80,'priv','zh-tw','product-manageLine','',''),(80,'manager','zh-cn','','删除问题库',''),(81,'manager','zh-cn','','审批问题',''),(82,'priv','de','product-exportAction','',''),(82,'priv','en','product-exportAction','',''),(82,'priv','fr','product-exportAction','',''),(82,'priv','zh-cn','product-exportAction','',''),(82,'priv','zh-tw','product-exportAction','',''),(82,'manager','zh-cn','','浏览风险库',''),(83,'priv','de','product-whitelist','',''),(83,'priv','en','product-whitelist','',''),(83,'priv','fr','product-whitelist','',''),(83,'priv','zh-cn','product-whitelist','',''),(83,'priv','zh-tw','product-whitelist','',''),(83,'manager','zh-cn','','创建维护风险库',''),(84,'priv','de','product-addWhitelist','',''),(84,'priv','en','product-addWhitelist','',''),(84,'priv','fr','product-addWhitelist','',''),(84,'priv','zh-cn','product-addWhitelist','',''),(84,'priv','zh-tw','product-addWhitelist','',''),(84,'manager','zh-cn','','删除风险库',''),(85,'priv','de','product-unbindWhitelist','',''),(85,'priv','en','product-unbindWhitelist','',''),(85,'priv','fr','product-unbindWhitelist','',''),(85,'priv','zh-cn','product-unbindWhitelist','',''),(85,'priv','zh-tw','product-unbindWhitelist','',''),(85,'manager','zh-cn','','审批风险',''),(86,'priv','de','story-create','',''),(86,'priv','en','story-create','',''),(86,'priv','fr','story-create','',''),(86,'priv','zh-cn','story-create','',''),(86,'priv','zh-tw','story-create','',''),(86,'manager','zh-cn','','浏览机会库',''),(87,'priv','de','story-batchCreate','',''),(87,'priv','en','story-batchCreate','',''),(87,'priv','fr','story-batchCreate','',''),(87,'priv','zh-cn','story-batchCreate','',''),(87,'priv','zh-tw','story-batchCreate','',''),(87,'manager','zh-cn','','创建维护机会库',''),(88,'priv','de','story-editAction','',''),(88,'priv','en','story-editAction','',''),(88,'priv','fr','story-editAction','',''),(88,'priv','zh-cn','story-editAction','',''),(88,'priv','zh-tw','story-editAction','',''),(88,'manager','zh-cn','','删除机会库',''),(89,'priv','de','story-exportAction','',''),(89,'priv','en','story-exportAction','',''),(89,'priv','fr','story-exportAction','',''),(89,'priv','zh-cn','story-exportAction','',''),(89,'priv','zh-tw','story-exportAction','',''),(89,'manager','zh-cn','','审批机会',''),(90,'priv','de','story-deleteAction','',''),(90,'priv','en','story-deleteAction','',''),(90,'priv','fr','story-deleteAction','',''),(90,'priv','zh-cn','story-deleteAction','',''),(90,'priv','zh-tw','story-deleteAction','',''),(90,'manager','zh-cn','','浏览最佳实践库',''),(91,'priv','de','story-view','',''),(91,'priv','en','story-view','',''),(91,'priv','fr','story-view','',''),(91,'priv','zh-cn','story-view','',''),(91,'priv','zh-tw','story-view','',''),(91,'manager','zh-cn','','创建维护最佳实践库',''),(92,'priv','de','story-changeAction','',''),(92,'priv','en','story-changeAction','',''),(92,'priv','fr','story-changeAction','',''),(92,'priv','zh-cn','story-changeAction','',''),(92,'priv','zh-tw','story-changeAction','',''),(92,'manager','zh-cn','','删除最佳实践库',''),(93,'priv','de','story-reviewAction','',''),(93,'priv','en','story-reviewAction','',''),(93,'priv','fr','story-reviewAction','',''),(93,'priv','zh-cn','story-reviewAction','',''),(93,'priv','zh-tw','story-reviewAction','',''),(93,'manager','zh-cn','','审批最佳实践',''),(94,'priv','de','story-submitReview','',''),(94,'priv','en','story-submitReview','',''),(94,'priv','fr','story-submitReview','',''),(94,'priv','zh-cn','story-submitReview','',''),(94,'priv','zh-tw','story-submitReview','',''),(94,'manager','zh-cn','','浏览组件库',''),(95,'priv','de','story-batchReview','',''),(95,'priv','en','story-batchReview','',''),(95,'priv','fr','story-batchReview','',''),(95,'priv','zh-cn','story-batchReview','',''),(95,'priv','zh-tw','story-batchReview','',''),(95,'manager','zh-cn','','创建维护组件库',''),(96,'priv','de','story-recallAction','',''),(96,'priv','en','story-recallAction','',''),(96,'priv','fr','story-recallAction','',''),(96,'priv','zh-cn','story-recallAction','',''),(96,'priv','zh-tw','story-recallAction','',''),(96,'manager','zh-cn','','删除组件库',''),(97,'priv','de','story-closeAction','',''),(97,'priv','en','story-closeAction','',''),(97,'priv','fr','story-closeAction','',''),(97,'priv','zh-cn','story-closeAction','',''),(97,'priv','zh-tw','story-closeAction','',''),(97,'manager','zh-cn','','审批组件',''),(98,'priv','de','story-batchClose','',''),(98,'priv','en','story-batchClose','',''),(98,'priv','fr','story-batchClose','',''),(98,'priv','zh-cn','story-batchClose','',''),(98,'priv','zh-tw','story-batchClose','',''),(98,'manager','zh-cn','','浏览用例库',''),(99,'priv','de','story-batchChangePlan','',''),(99,'priv','en','story-batchChangePlan','',''),(99,'priv','fr','story-batchChangePlan','',''),(99,'priv','zh-cn','story-batchChangePlan','',''),(99,'priv','zh-tw','story-batchChangePlan','',''),(99,'manager','zh-cn','','创建维护用例库',''),(100,'priv','de','story-batchChangeStage','',''),(100,'priv','en','story-batchChangeStage','',''),(100,'priv','fr','story-batchChangeStage','',''),(100,'priv','zh-cn','story-batchChangeStage','',''),(100,'priv','zh-tw','story-batchChangeStage','',''),(100,'manager','zh-cn','','删除用例库',''),(101,'priv','de','story-assignAction','',''),(101,'priv','en','story-assignAction','',''),(101,'priv','fr','story-assignAction','',''),(101,'priv','zh-cn','story-assignAction','',''),(101,'priv','zh-tw','story-assignAction','',''),(101,'manager','zh-cn','','导入导出用例库',''),(102,'priv','de','story-batchAssignTo','',''),(102,'priv','en','story-batchAssignTo','',''),(102,'priv','fr','story-batchAssignTo','',''),(102,'priv','zh-cn','story-batchAssignTo','',''),(102,'priv','zh-tw','story-batchAssignTo','',''),(102,'manager','zh-cn','','办公审批',''),(103,'priv','de','story-activateAction','',''),(103,'priv','en','story-activateAction','',''),(103,'priv','fr','story-activateAction','',''),(103,'priv','zh-cn','story-activateAction','',''),(103,'priv','zh-tw','story-activateAction','',''),(103,'manager','zh-cn','','个人考勤',''),(104,'priv','de','story-tasks','',''),(104,'priv','en','story-tasks','',''),(104,'priv','fr','story-tasks','',''),(104,'priv','zh-cn','story-tasks','',''),(104,'priv','zh-tw','story-tasks','',''),(104,'manager','zh-cn','','办公设置',''),(105,'priv','de','story-bugs','',''),(105,'priv','en','story-bugs','',''),(105,'priv','fr','story-bugs','',''),(105,'priv','zh-cn','story-bugs','',''),(105,'priv','zh-tw','story-bugs','',''),(105,'manager','zh-cn','','数据权限',''),(106,'priv','de','story-cases','',''),(106,'priv','en','story-cases','',''),(106,'priv','fr','story-cases','',''),(106,'priv','zh-cn','story-cases','',''),(106,'priv','zh-tw','story-cases','',''),(106,'manager','zh-cn','','个人请假',''),(107,'priv','de','story-reportAction','',''),(107,'priv','en','story-reportAction','',''),(107,'priv','fr','story-reportAction','',''),(107,'priv','zh-cn','story-reportAction','',''),(107,'priv','zh-tw','story-reportAction','',''),(107,'manager','zh-cn','','个人补班',''),(108,'priv','de','story-linkStory','',''),(108,'priv','en','story-linkStory','',''),(108,'priv','fr','story-linkStory','',''),(108,'priv','zh-cn','story-linkStory','',''),(108,'priv','zh-tw','story-linkStory','',''),(108,'manager','zh-cn','','个人加班',''),(109,'priv','de','story-batchChangeBranch','',''),(109,'priv','en','story-batchChangeBranch','',''),(109,'priv','fr','story-batchChangeBranch','',''),(109,'priv','zh-cn','story-batchChangeBranch','',''),(109,'priv','zh-tw','story-batchChangeBranch','',''),(109,'manager','zh-cn','','个人调休',''),(110,'priv','de','story-batchChangeModule','',''),(110,'priv','en','story-batchChangeModule','',''),(110,'priv','fr','story-batchChangeModule','',''),(110,'priv','zh-cn','story-batchChangeModule','',''),(110,'priv','zh-tw','story-batchChangeModule','',''),(110,'manager','zh-cn','','节假日',''),(111,'priv','de','story-batchToTask','',''),(111,'priv','en','story-batchToTask','',''),(111,'priv','fr','story-batchToTask','',''),(111,'priv','zh-cn','story-batchToTask','',''),(111,'priv','zh-tw','story-batchToTask','',''),(111,'manager','zh-cn','','办公导出',''),(112,'priv','de','story-processStoryChange','',''),(112,'priv','en','story-processStoryChange','',''),(112,'priv','fr','story-processStoryChange','',''),(112,'priv','zh-cn','story-processStoryChange','',''),(112,'priv','zh-tw','story-processStoryChange','',''),(112,'manager','zh-cn','','浏览反馈',''),(113,'priv','de','story-linkStoriesAB','',''),(113,'priv','en','story-linkStoriesAB','',''),(113,'priv','fr','story-linkStoriesAB','',''),(113,'priv','zh-cn','story-linkStoriesAB','',''),(113,'priv','zh-tw','story-linkStoriesAB','',''),(113,'manager','zh-cn','','创建维护反馈',''),(114,'priv','de','story-relievedTwins','',''),(114,'priv','en','story-relievedTwins','',''),(114,'priv','fr','story-relievedTwins','',''),(114,'priv','zh-cn','story-relievedTwins','',''),(114,'priv','zh-tw','story-relievedTwins','',''),(114,'manager','zh-cn','','导入导出反馈',''),(115,'priv','de','story-batchEdit','',''),(115,'priv','en','story-batchEdit','',''),(115,'priv','fr','story-batchEdit','',''),(115,'priv','zh-cn','story-batchEdit','',''),(115,'priv','zh-tw','story-batchEdit','',''),(115,'manager','zh-cn','','处理反馈',''),(116,'priv','de','story-importCase','',''),(116,'priv','en','story-importCase','',''),(116,'priv','fr','story-importCase','',''),(116,'priv','zh-cn','story-importCase','',''),(116,'priv','zh-tw','story-importCase','',''),(116,'manager','zh-cn','','FAQ',''),(117,'priv','de','story-exportTemplate','',''),(117,'priv','en','story-exportTemplate','',''),(117,'priv','fr','story-exportTemplate','',''),(117,'priv','zh-cn','story-exportTemplate','',''),(117,'priv','zh-tw','story-exportTemplate','',''),(117,'manager','zh-cn','','浏览工单',''),(118,'priv','de','story-importToLib','',''),(118,'priv','en','story-importToLib','',''),(118,'priv','fr','story-importToLib','',''),(118,'priv','zh-cn','story-importToLib','',''),(118,'priv','zh-tw','story-importToLib','',''),(118,'manager','zh-cn','','创建维护工单',''),(119,'priv','de','story-batchImportToLib','',''),(119,'priv','en','story-batchImportToLib','',''),(119,'priv','fr','story-batchImportToLib','',''),(119,'priv','zh-cn','story-batchImportToLib','',''),(119,'priv','zh-tw','story-batchImportToLib','',''),(119,'manager','zh-cn','','导入导出工单',''),(120,'priv','de','story-relation','',''),(120,'priv','en','story-relation','',''),(120,'priv','fr','story-relation','',''),(120,'priv','zh-cn','story-relation','',''),(120,'priv','zh-tw','story-relation','',''),(121,'priv','de','requirement-create','',''),(121,'priv','en','requirement-create','',''),(121,'priv','fr','requirement-create','',''),(121,'priv','zh-cn','requirement-create','',''),(121,'priv','zh-tw','requirement-create','',''),(121,'manager','zh-cn','','删除反馈',''),(122,'priv','de','requirement-batchCreate','',''),(122,'priv','en','requirement-batchCreate','',''),(122,'priv','fr','requirement-batchCreate','',''),(122,'priv','zh-cn','requirement-batchCreate','',''),(122,'priv','zh-tw','requirement-batchCreate','',''),(122,'manager','zh-cn','','删除工单',''),(123,'priv','de','requirement-editAction','',''),(123,'priv','en','requirement-editAction','',''),(123,'priv','fr','requirement-editAction','',''),(123,'priv','zh-cn','requirement-editAction','',''),(123,'priv','zh-tw','requirement-editAction','',''),(123,'manager','zh-cn','','设置反馈权限',''),(124,'priv','de','requirement-exportAction','',''),(124,'priv','en','requirement-exportAction','',''),(124,'priv','fr','requirement-exportAction','',''),(124,'priv','zh-cn','requirement-exportAction','',''),(124,'priv','zh-tw','requirement-exportAction','',''),(124,'manager','zh-cn','','课程',''),(125,'priv','de','requirement-deleteAction','',''),(125,'priv','en','requirement-deleteAction','',''),(125,'priv','fr','requirement-deleteAction','',''),(125,'priv','zh-cn','requirement-deleteAction','',''),(125,'priv','zh-tw','requirement-deleteAction','',''),(125,'manager','zh-cn','','后台管理',''),(126,'priv','de','requirement-view','',''),(126,'priv','en','requirement-view','',''),(126,'priv','fr','requirement-view','',''),(126,'priv','zh-cn','requirement-view','',''),(126,'priv','zh-tw','requirement-view','',''),(126,'manager','zh-cn','','运维管理',''),(127,'priv','de','requirement-changeAction','',''),(127,'priv','en','requirement-changeAction','',''),(127,'priv','fr','requirement-changeAction','',''),(127,'priv','zh-cn','requirement-changeAction','',''),(127,'priv','zh-tw','requirement-changeAction','',''),(127,'manager','zh-cn','','主机管理',''),(128,'priv','de','requirement-reviewAction','',''),(128,'priv','en','requirement-reviewAction','',''),(128,'priv','fr','requirement-reviewAction','',''),(128,'priv','zh-cn','requirement-reviewAction','',''),(128,'priv','zh-tw','requirement-reviewAction','',''),(128,'manager','zh-cn','','机房管理',''),(129,'priv','de','requirement-submitReview','',''),(129,'priv','en','requirement-submitReview','',''),(129,'priv','fr','requirement-submitReview','',''),(129,'priv','zh-cn','requirement-submitReview','',''),(129,'priv','zh-tw','requirement-submitReview','',''),(129,'manager','zh-cn','','运维账号管理',''),(130,'priv','de','requirement-batchReview','',''),(130,'priv','en','requirement-batchReview','',''),(130,'priv','fr','requirement-batchReview','',''),(130,'priv','zh-cn','requirement-batchReview','',''),(130,'priv','zh-tw','requirement-batchReview','',''),(130,'manager','zh-cn','','域名管理',''),(131,'priv','de','requirement-recall','',''),(131,'priv','en','requirement-recall','',''),(131,'priv','fr','requirement-recall','',''),(131,'priv','zh-cn','requirement-recall','',''),(131,'priv','zh-tw','requirement-recall','',''),(131,'manager','zh-cn','','服务管理',''),(132,'priv','de','requirement-closeAction','',''),(132,'priv','en','requirement-closeAction','',''),(132,'priv','fr','requirement-closeAction','',''),(132,'priv','zh-cn','requirement-closeAction','',''),(132,'priv','zh-tw','requirement-closeAction','',''),(132,'manager','zh-cn','','运维计划',''),(133,'priv','de','requirement-batchClose','',''),(133,'priv','en','requirement-batchClose','',''),(133,'priv','fr','requirement-batchClose','',''),(133,'priv','zh-cn','requirement-batchClose','',''),(133,'priv','zh-tw','requirement-batchClose','',''),(133,'manager','zh-cn','','上线范围',''),(134,'priv','de','requirement-assignAction','',''),(134,'priv','en','requirement-assignAction','',''),(134,'priv','fr','requirement-assignAction','',''),(134,'priv','zh-cn','requirement-assignAction','',''),(134,'priv','zh-tw','requirement-assignAction','',''),(134,'manager','zh-cn','','上线步骤',''),(135,'priv','de','requirement-batchAssignTo','',''),(135,'priv','en','requirement-batchAssignTo','',''),(135,'priv','fr','requirement-batchAssignTo','',''),(135,'priv','zh-cn','requirement-batchAssignTo','',''),(135,'priv','zh-tw','requirement-batchAssignTo','',''),(135,'manager','zh-cn','','上线用例',''),(136,'priv','de','requirement-activateAction','',''),(136,'priv','en','requirement-activateAction','',''),(136,'priv','fr','requirement-activateAction','',''),(136,'priv','zh-cn','requirement-activateAction','',''),(136,'priv','zh-tw','requirement-activateAction','',''),(136,'manager','zh-cn','','测试仪表盘',''),(137,'priv','de','requirement-reportAction','',''),(137,'priv','en','requirement-reportAction','',''),(137,'priv','fr','requirement-reportAction','',''),(137,'priv','zh-cn','requirement-reportAction','',''),(137,'priv','zh-tw','requirement-reportAction','',''),(137,'manager','zh-cn','','浏览Bug',''),(138,'priv','de','requirement-linkStory','',''),(138,'priv','en','requirement-linkStory','',''),(138,'priv','fr','requirement-linkStory','',''),(138,'priv','zh-cn','requirement-linkStory','',''),(138,'priv','zh-tw','requirement-linkStory','',''),(138,'manager','zh-cn','','创建维护Bug',''),(139,'priv','de','requirement-batchChangeBranch','',''),(139,'priv','en','requirement-batchChangeBranch','',''),(139,'priv','fr','requirement-batchChangeBranch','',''),(139,'priv','zh-cn','requirement-batchChangeBranch','',''),(139,'priv','zh-tw','requirement-batchChangeBranch','',''),(139,'manager','zh-cn','','删除Bug',''),(140,'priv','de','requirement-batchChangeModule','',''),(140,'priv','en','requirement-batchChangeModule','',''),(140,'priv','fr','requirement-batchChangeModule','',''),(140,'priv','zh-cn','requirement-batchChangeModule','',''),(140,'priv','zh-tw','requirement-batchChangeModule','',''),(140,'manager','zh-cn','','导入导出Bug',''),(141,'priv','de','requirement-linkRequirementsAB','',''),(141,'priv','en','requirement-linkRequirementsAB','',''),(141,'priv','fr','requirement-linkRequirementsAB','',''),(141,'priv','zh-cn','requirement-linkRequirementsAB','',''),(141,'priv','zh-tw','requirement-linkRequirementsAB','',''),(141,'manager','zh-cn','','浏览用例',''),(142,'priv','de','requirement-batchEdit','',''),(142,'priv','en','requirement-batchEdit','',''),(142,'priv','fr','requirement-batchEdit','',''),(142,'priv','zh-cn','requirement-batchEdit','',''),(142,'priv','zh-tw','requirement-batchEdit','',''),(142,'manager','zh-cn','','创建维护用例',''),(143,'priv','de','requirement-importCase','',''),(143,'priv','en','requirement-importCase','',''),(143,'priv','fr','requirement-importCase','',''),(143,'priv','zh-cn','requirement-importCase','',''),(143,'priv','zh-tw','requirement-importCase','',''),(143,'manager','zh-cn','','导入导出用例',''),(144,'priv','de','requirement-exportTemplate','',''),(144,'priv','en','requirement-exportTemplate','',''),(144,'priv','fr','requirement-exportTemplate','',''),(144,'priv','zh-cn','requirement-exportTemplate','',''),(144,'priv','zh-tw','requirement-exportTemplate','',''),(144,'manager','zh-cn','','删除用例',''),(145,'priv','de','productplan-browse','',''),(145,'priv','en','productplan-browse','',''),(145,'priv','fr','productplan-browse','',''),(145,'priv','zh-cn','productplan-browse','',''),(145,'priv','zh-tw','productplan-browse','',''),(145,'manager','zh-cn','','评审用例',''),(146,'priv','de','productplan-create','',''),(146,'priv','en','productplan-create','',''),(146,'priv','fr','productplan-create','',''),(146,'priv','zh-cn','productplan-create','',''),(146,'priv','zh-tw','productplan-create','',''),(146,'manager','zh-cn','','浏览测试单',''),(147,'priv','de','productplan-edit','',''),(147,'priv','en','productplan-edit','',''),(147,'priv','fr','productplan-edit','',''),(147,'priv','zh-cn','productplan-edit','',''),(147,'priv','zh-tw','productplan-edit','',''),(147,'manager','zh-cn','','创建维护测试单',''),(148,'priv','de','productplan-delete','',''),(148,'priv','en','productplan-delete','',''),(148,'priv','fr','productplan-delete','',''),(148,'priv','zh-cn','productplan-delete','',''),(148,'priv','zh-tw','productplan-delete','',''),(148,'manager','zh-cn','','删除测试单',''),(149,'priv','de','productplan-view','',''),(149,'priv','en','productplan-view','',''),(149,'priv','fr','productplan-view','',''),(149,'priv','zh-cn','productplan-view','',''),(149,'priv','zh-tw','productplan-view','',''),(149,'manager','zh-cn','','单元测试',''),(150,'priv','de','productplan-linkStory','',''),(150,'priv','en','productplan-linkStory','',''),(150,'priv','fr','productplan-linkStory','',''),(150,'priv','zh-cn','productplan-linkStory','',''),(150,'priv','zh-tw','productplan-linkStory','',''),(150,'manager','zh-cn','','浏览套件',''),(151,'priv','de','productplan-unlinkStory','',''),(151,'priv','en','productplan-unlinkStory','',''),(151,'priv','fr','productplan-unlinkStory','',''),(151,'priv','zh-cn','productplan-unlinkStory','',''),(151,'priv','zh-tw','productplan-unlinkStory','',''),(151,'manager','zh-cn','','创建维护套件',''),(152,'priv','de','productplan-batchUnlinkStory','',''),(152,'priv','en','productplan-batchUnlinkStory','',''),(152,'priv','fr','productplan-batchUnlinkStory','',''),(152,'priv','zh-cn','productplan-batchUnlinkStory','',''),(152,'priv','zh-tw','productplan-batchUnlinkStory','',''),(152,'manager','zh-cn','','删除套件',''),(153,'priv','de','productplan-linkBug','',''),(153,'priv','en','productplan-linkBug','',''),(153,'priv','fr','productplan-linkBug','',''),(153,'priv','zh-cn','productplan-linkBug','',''),(153,'priv','zh-tw','productplan-linkBug','',''),(153,'manager','zh-cn','','浏览测试报告',''),(154,'priv','de','productplan-unlinkBug','',''),(154,'priv','en','productplan-unlinkBug','',''),(154,'priv','fr','productplan-unlinkBug','',''),(154,'priv','zh-cn','productplan-unlinkBug','',''),(154,'priv','zh-tw','productplan-unlinkBug','',''),(154,'manager','zh-cn','','创建维护测试报告',''),(155,'priv','de','productplan-batchUnlinkBug','',''),(155,'priv','en','productplan-batchUnlinkBug','',''),(155,'priv','fr','productplan-batchUnlinkBug','',''),(155,'priv','zh-cn','productplan-batchUnlinkBug','',''),(155,'priv','zh-tw','productplan-batchUnlinkBug','',''),(155,'manager','zh-cn','','删除测试报告',''),(156,'priv','de','productplan-batchEdit','',''),(156,'priv','en','productplan-batchEdit','',''),(156,'priv','fr','productplan-batchEdit','',''),(156,'priv','zh-cn','productplan-batchEdit','',''),(156,'priv','zh-tw','productplan-batchEdit','',''),(156,'manager','zh-cn','','导入导出测试报告',''),(157,'priv','de','productplan-start','',''),(157,'priv','en','productplan-start','',''),(157,'priv','fr','productplan-start','',''),(157,'priv','zh-cn','productplan-start','',''),(157,'priv','zh-tw','productplan-start','',''),(157,'manager','zh-cn','','浏览宿主机',''),(158,'priv','de','productplan-finish','',''),(158,'priv','en','productplan-finish','',''),(158,'priv','fr','productplan-finish','',''),(158,'priv','zh-cn','productplan-finish','',''),(158,'priv','zh-tw','productplan-finish','',''),(158,'manager','zh-cn','','创建维护宿主机',''),(159,'priv','de','productplan-close','',''),(159,'priv','en','productplan-close','',''),(159,'priv','fr','productplan-close','',''),(159,'priv','zh-cn','productplan-close','',''),(159,'priv','zh-tw','productplan-close','',''),(159,'manager','zh-cn','','删除宿主机',''),(160,'priv','de','productplan-activate','',''),(160,'priv','en','productplan-activate','',''),(160,'priv','fr','productplan-activate','',''),(160,'priv','zh-cn','productplan-activate','',''),(160,'priv','zh-tw','productplan-activate','',''),(160,'manager','zh-cn','','镜像',''),(161,'priv','de','productplan-batchChangeStatus','',''),(161,'priv','en','productplan-batchChangeStatus','',''),(161,'priv','fr','productplan-batchChangeStatus','',''),(161,'priv','zh-cn','productplan-batchChangeStatus','',''),(161,'priv','zh-tw','productplan-batchChangeStatus','',''),(161,'manager','zh-cn','','浏览执行节点',''),(162,'priv','de','release-browse','',''),(162,'priv','en','release-browse','',''),(162,'priv','fr','release-browse','',''),(162,'priv','zh-cn','release-browse','',''),(162,'priv','zh-tw','release-browse','',''),(162,'manager','zh-cn','','创建维护执行节点',''),(163,'priv','de','release-create','',''),(163,'priv','en','release-create','',''),(163,'priv','fr','release-create','',''),(163,'priv','zh-cn','release-create','',''),(163,'priv','zh-tw','release-create','',''),(163,'manager','zh-cn','','导入导出执行节点',''),(164,'priv','de','release-edit','',''),(164,'priv','en','release-edit','',''),(164,'priv','fr','release-edit','',''),(164,'priv','zh-cn','release-edit','',''),(164,'priv','zh-tw','release-edit','',''),(164,'manager','zh-cn','',' 快照',''),(165,'priv','de','release-delete','',''),(165,'priv','en','release-delete','',''),(165,'priv','fr','release-delete','',''),(165,'priv','zh-cn','release-delete','',''),(165,'priv','zh-tw','release-delete','',''),(165,'manager','zh-cn','','浏览组织团队',''),(166,'priv','de','release-view','',''),(166,'priv','en','release-view','',''),(166,'priv','fr','release-view','',''),(166,'priv','zh-cn','release-view','',''),(166,'priv','zh-tw','release-view','',''),(166,'manager','zh-cn','','浏览组织日程',''),(167,'priv','de','release-export','',''),(167,'priv','en','release-export','',''),(167,'priv','fr','release-export','',''),(167,'priv','zh-cn','release-export','',''),(167,'priv','zh-tw','release-export','',''),(167,'manager','zh-cn','','浏览组织日志',''),(168,'priv','de','release-linkStory','',''),(168,'priv','en','release-linkStory','',''),(168,'priv','fr','release-linkStory','',''),(168,'priv','zh-cn','release-linkStory','',''),(168,'priv','zh-tw','release-linkStory','',''),(168,'manager','zh-cn','','浏览组织动态',''),(169,'priv','de','release-unlinkStory','',''),(169,'priv','en','release-unlinkStory','',''),(169,'priv','fr','release-unlinkStory','',''),(169,'priv','zh-cn','release-unlinkStory','',''),(169,'priv','zh-tw','release-unlinkStory','',''),(169,'manager','zh-cn','','维护公司信息',''),(170,'priv','de','release-batchUnlinkStory','',''),(170,'priv','en','release-batchUnlinkStory','',''),(170,'priv','fr','release-batchUnlinkStory','',''),(170,'priv','zh-cn','release-batchUnlinkStory','',''),(170,'priv','zh-tw','release-batchUnlinkStory','',''),(170,'manager','zh-cn','','部门数据权限',''),(171,'priv','de','release-linkBug','',''),(171,'priv','en','release-linkBug','',''),(171,'priv','fr','release-linkBug','',''),(171,'priv','zh-cn','release-linkBug','',''),(171,'priv','zh-tw','release-linkBug','',''),(171,'manager','zh-cn','','项目阶段',''),(172,'priv','de','release-unlinkBug','',''),(172,'priv','en','release-unlinkBug','',''),(172,'priv','fr','release-unlinkBug','',''),(172,'priv','zh-cn','release-unlinkBug','',''),(172,'priv','zh-tw','release-unlinkBug','',''),(173,'priv','de','release-batchUnlinkBug','',''),(173,'priv','en','release-batchUnlinkBug','',''),(173,'priv','fr','release-batchUnlinkBug','',''),(173,'priv','zh-cn','release-batchUnlinkBug','',''),(173,'priv','zh-tw','release-batchUnlinkBug','',''),(174,'priv','de','release-changeStatus','',''),(174,'priv','en','release-changeStatus','',''),(174,'priv','fr','release-changeStatus','',''),(174,'priv','zh-cn','release-changeStatus','',''),(174,'priv','zh-tw','release-changeStatus','',''),(175,'priv','de','release-notify','',''),(175,'priv','en','release-notify','',''),(175,'priv','fr','release-notify','',''),(175,'priv','zh-cn','release-notify','',''),(175,'priv','zh-tw','release-notify','',''),(175,'manager','zh-cn','','浏览设计',''),(176,'priv','de','project-index','',''),(176,'priv','en','project-index','',''),(176,'priv','fr','project-index','',''),(176,'priv','zh-cn','project-index','',''),(176,'priv','zh-tw','project-index','',''),(176,'manager','zh-cn','','创建维护设计',''),(177,'priv','de','project-browse','',''),(177,'priv','en','project-browse','',''),(177,'priv','fr','project-browse','',''),(177,'priv','zh-cn','project-browse','',''),(177,'priv','zh-tw','project-browse','',''),(177,'manager','zh-cn','','删除设计',''),(178,'priv','de','project-kanban','',''),(178,'priv','en','project-kanban','',''),(178,'priv','fr','project-kanban','',''),(178,'priv','zh-cn','project-kanban','',''),(178,'priv','zh-tw','project-kanban','',''),(178,'manager','zh-cn','','维护基线评审',''),(179,'priv','de','project-create','',''),(179,'priv','en','project-create','',''),(179,'priv','fr','project-create','',''),(179,'priv','zh-cn','project-create','',''),(179,'priv','zh-tw','project-create','',''),(179,'manager','zh-cn','','维护问题',''),(180,'priv','de','project-edit','',''),(180,'priv','en','project-edit','',''),(180,'priv','fr','project-edit','',''),(180,'priv','zh-cn','project-edit','',''),(180,'priv','zh-tw','project-edit','',''),(180,'manager','zh-cn','','项目配置',''),(181,'priv','de','project-batchEdit','',''),(181,'priv','en','project-batchEdit','',''),(181,'priv','fr','project-batchEdit','',''),(181,'priv','zh-cn','project-batchEdit','',''),(181,'priv','zh-tw','project-batchEdit','',''),(181,'manager','zh-cn','','浏览项目发布',''),(182,'priv','de','project-group','',''),(182,'priv','en','project-group','',''),(182,'priv','fr','project-group','',''),(182,'priv','zh-cn','project-group','',''),(182,'priv','zh-tw','project-group','',''),(182,'manager','zh-cn','','项目周报',''),(183,'priv','de','project-createGroup','',''),(183,'priv','en','project-createGroup','',''),(183,'priv','fr','project-createGroup','',''),(183,'priv','zh-cn','project-createGroup','',''),(183,'priv','zh-tw','project-createGroup','',''),(183,'manager','zh-cn','','项目里程碑报告',''),(184,'priv','de','project-managePriv','',''),(184,'priv','en','project-managePriv','',''),(184,'priv','fr','project-managePriv','',''),(184,'priv','zh-cn','project-managePriv','',''),(184,'priv','zh-tw','project-managePriv','',''),(184,'manager','zh-cn','','调研计划',''),(185,'priv','de','project-manageMembers','',''),(185,'priv','en','project-manageMembers','',''),(185,'priv','fr','project-manageMembers','',''),(185,'priv','zh-cn','project-manageMembers','',''),(185,'priv','zh-tw','project-manageMembers','',''),(185,'manager','zh-cn','','调研报告',''),(186,'priv','de','project-manageGroupMember','',''),(186,'priv','en','project-manageGroupMember','',''),(186,'priv','fr','project-manageGroupMember','',''),(186,'priv','zh-cn','project-manageGroupMember','',''),(186,'priv','zh-tw','project-manageGroupMember','',''),(186,'manager','zh-cn','','费用估算',''),(187,'priv','de','project-copyGroup','',''),(187,'priv','en','project-copyGroup','',''),(187,'priv','fr','project-copyGroup','',''),(187,'priv','zh-cn','project-copyGroup','',''),(187,'priv','zh-tw','project-copyGroup','',''),(187,'manager','zh-cn','','工作量估算',''),(188,'priv','de','project-editGroup','',''),(188,'priv','en','project-editGroup','',''),(188,'priv','fr','project-editGroup','',''),(188,'priv','zh-cn','project-editGroup','',''),(188,'priv','zh-tw','project-editGroup','',''),(188,'manager','zh-cn','','项目工期估算',''),(189,'priv','de','project-start','',''),(189,'priv','en','project-start','',''),(189,'priv','fr','project-start','',''),(189,'priv','zh-cn','project-start','',''),(189,'priv','zh-tw','project-start','',''),(189,'manager','zh-cn','','浏览问题',''),(190,'priv','de','project-suspend','',''),(190,'priv','en','project-suspend','',''),(190,'priv','fr','project-suspend','',''),(190,'priv','zh-cn','project-suspend','',''),(190,'priv','zh-tw','project-suspend','',''),(190,'manager','zh-cn','','创建维护问题',''),(191,'priv','de','project-close','',''),(191,'priv','en','project-close','',''),(191,'priv','fr','project-close','',''),(191,'priv','zh-cn','project-close','',''),(191,'priv','zh-tw','project-close','',''),(191,'manager','zh-cn','','导入导出问题',''),(192,'priv','de','project-activate','',''),(192,'priv','en','project-activate','',''),(192,'priv','fr','project-activate','',''),(192,'priv','zh-cn','project-activate','',''),(192,'priv','zh-tw','project-activate','',''),(192,'manager','zh-cn','','删除问题',''),(193,'priv','de','project-updateOrder','',''),(193,'priv','en','project-updateOrder','',''),(193,'priv','fr','project-updateOrder','',''),(193,'priv','zh-cn','project-updateOrder','',''),(193,'priv','zh-tw','project-updateOrder','',''),(193,'manager','zh-cn','','导入问题库',''),(194,'priv','de','project-delete','',''),(194,'priv','en','project-delete','',''),(194,'priv','fr','project-delete','',''),(194,'priv','zh-cn','project-delete','',''),(194,'priv','zh-tw','project-delete','',''),(194,'manager','zh-cn','','浏览风险',''),(195,'priv','de','project-view','',''),(195,'priv','en','project-view','',''),(195,'priv','fr','project-view','',''),(195,'priv','zh-cn','project-view','',''),(195,'priv','zh-tw','project-view','',''),(195,'manager','zh-cn','','创建维护风险',''),(196,'priv','de','project-whitelist','',''),(196,'priv','en','project-whitelist','',''),(196,'priv','fr','project-whitelist','',''),(196,'priv','zh-cn','project-whitelist','',''),(196,'priv','zh-tw','project-whitelist','',''),(196,'manager','zh-cn','','导入导出风险',''),(197,'priv','de','project-addWhitelist','',''),(197,'priv','en','project-addWhitelist','',''),(197,'priv','fr','project-addWhitelist','',''),(197,'priv','zh-cn','project-addWhitelist','',''),(197,'priv','zh-tw','project-addWhitelist','',''),(197,'manager','zh-cn','','删除问题',''),(198,'priv','de','project-unbindWhitelist','',''),(198,'priv','en','project-unbindWhitelist','',''),(198,'priv','fr','project-unbindWhitelist','',''),(198,'priv','zh-cn','project-unbindWhitelist','',''),(198,'priv','zh-tw','project-unbindWhitelist','',''),(198,'manager','zh-cn','','导入风险库',''),(199,'priv','de','project-manageProducts','',''),(199,'priv','en','project-manageProducts','',''),(199,'priv','fr','project-manageProducts','',''),(199,'priv','zh-cn','project-manageProducts','',''),(199,'priv','zh-tw','project-manageProducts','',''),(199,'manager','zh-cn','','浏览机会',''),(200,'priv','de','project-dynamic','',''),(200,'priv','en','project-dynamic','',''),(200,'priv','fr','project-dynamic','',''),(200,'priv','zh-cn','project-dynamic','',''),(200,'priv','zh-tw','project-dynamic','',''),(200,'manager','zh-cn','','创建维护机会',''),(201,'manager','zh-cn','','删除机会',''),(202,'manager','zh-cn','','导入机会库',''),(203,'priv','de','project-bug','',''),(203,'priv','en','project-bug','',''),(203,'priv','fr','project-bug','',''),(203,'priv','zh-cn','project-bug','',''),(203,'priv','zh-tw','project-bug','',''),(203,'manager','zh-cn','','导入导出机会',''),(204,'priv','de','project-testcase','',''),(204,'priv','en','project-testcase','',''),(204,'priv','fr','project-testcase','',''),(204,'priv','zh-cn','project-testcase','',''),(204,'priv','zh-tw','project-testcase','',''),(204,'manager','zh-cn','','项目过程',''),(205,'priv','de','project-testtask','',''),(205,'priv','en','project-testtask','',''),(205,'priv','fr','project-testtask','',''),(205,'priv','zh-cn','project-testtask','',''),(205,'priv','zh-tw','project-testtask','',''),(205,'manager','zh-cn','','项目度量',''),(206,'priv','de','project-testreport','',''),(206,'priv','en','project-testreport','',''),(206,'priv','fr','project-testreport','',''),(206,'priv','zh-cn','project-testreport','',''),(206,'priv','zh-tw','project-testreport','',''),(206,'manager','zh-cn','','维护质量保证计划',''),(207,'priv','de','project-execution','',''),(207,'priv','en','project-execution','',''),(207,'priv','fr','project-execution','',''),(207,'priv','zh-cn','project-execution','',''),(207,'priv','zh-tw','project-execution','',''),(207,'manager','zh-cn','','不符合项',''),(208,'priv','de','project-export','',''),(208,'priv','en','project-export','',''),(208,'priv','fr','project-export','',''),(208,'priv','zh-cn','project-export','',''),(208,'priv','zh-tw','project-export','',''),(208,'manager','zh-cn','','会议',''),(209,'priv','de','project-teamAction','',''),(209,'priv','en','project-teamAction','',''),(209,'priv','fr','project-teamAction','',''),(209,'priv','zh-cn','project-teamAction','',''),(209,'priv','zh-tw','project-teamAction','',''),(209,'manager','zh-cn','','培训计划',''),(210,'priv','de','project-unlinkMemberAction','',''),(210,'priv','en','project-unlinkMemberAction','',''),(210,'priv','fr','project-unlinkMemberAction','',''),(210,'priv','zh-cn','project-unlinkMemberAction','',''),(210,'priv','zh-tw','project-unlinkMemberAction','',''),(210,'manager','zh-cn','','能力差距分析',''),(211,'manager','zh-cn','','工作流字段',''),(212,'priv','de','project-moduleOpenAction','',''),(212,'priv','en','project-moduleOpenAction','',''),(212,'priv','fr','project-moduleOpenAction','',''),(212,'priv','zh-cn','project-moduleOpenAction','',''),(212,'priv','zh-tw','project-moduleOpenAction','',''),(212,'manager','zh-cn','','工作流动作',''),(213,'priv','de','project-approval','',''),(213,'priv','en','project-approval','',''),(213,'priv','fr','project-approval','',''),(213,'priv','zh-cn','project-approval','',''),(213,'priv','zh-tw','project-approval','',''),(213,'manager','zh-cn','','工作流界面',''),(214,'priv','de','projectplan-browse','',''),(214,'priv','en','projectplan-browse','',''),(214,'priv','fr','projectplan-browse','',''),(214,'priv','zh-cn','projectplan-browse','',''),(214,'priv','zh-tw','projectplan-browse','',''),(214,'manager','zh-cn','','工作流触发条件',''),(215,'priv','de','projectplan-create','',''),(215,'priv','en','projectplan-create','',''),(215,'priv','fr','projectplan-create','',''),(215,'priv','zh-cn','projectplan-create','',''),(215,'priv','zh-tw','projectplan-create','',''),(215,'manager','zh-cn','','工作流界面联动',''),(216,'priv','de','projectplan-edit','',''),(216,'priv','en','projectplan-edit','',''),(216,'priv','fr','projectplan-edit','',''),(216,'priv','zh-cn','projectplan-edit','',''),(216,'priv','zh-tw','projectplan-edit','',''),(216,'manager','zh-cn','','工作流扩展动作',''),(217,'priv','de','projectplan-view','',''),(217,'priv','en','projectplan-view','',''),(217,'priv','fr','projectplan-view','',''),(217,'priv','zh-cn','projectplan-view','',''),(217,'priv','zh-tw','projectplan-view','',''),(217,'manager','zh-cn','','工作流标签',''),(218,'priv','de','projectstory-story','',''),(218,'priv','en','projectstory-story','',''),(218,'priv','fr','projectstory-story','',''),(218,'priv','zh-cn','projectstory-story','',''),(218,'priv','zh-tw','projectstory-story','',''),(218,'manager','zh-cn','','工作流跨流程设置',''),(219,'priv','de','projectstory-trackAction','',''),(219,'priv','en','projectstory-trackAction','',''),(219,'priv','fr','projectstory-trackAction','',''),(219,'priv','zh-cn','projectstory-trackAction','',''),(219,'priv','zh-tw','projectstory-trackAction','',''),(220,'priv','de','projectstory-view','',''),(220,'priv','en','projectstory-view','',''),(220,'priv','fr','projectstory-view','',''),(220,'priv','zh-cn','projectstory-view','',''),(220,'priv','zh-tw','projectstory-view','',''),(220,'manager','zh-cn','','工作流报表',''),(221,'priv','de','projectstory-linkStory','',''),(221,'priv','en','projectstory-linkStory','',''),(221,'priv','fr','projectstory-linkStory','',''),(221,'priv','zh-cn','projectstory-linkStory','',''),(221,'priv','zh-tw','projectstory-linkStory','',''),(221,'manager','zh-cn','','工作流数据源',''),(222,'priv','de','projectstory-importplanstories','',''),(222,'priv','en','projectstory-importplanstories','',''),(222,'priv','fr','projectstory-importplanstories','',''),(222,'priv','zh-cn','projectstory-importplanstories','',''),(222,'priv','zh-tw','projectstory-importplanstories','',''),(222,'manager','zh-cn','','工作流验证规则',''),(223,'priv','de','projectstory-unlinkStory','',''),(223,'priv','en','projectstory-unlinkStory','',''),(223,'priv','fr','projectstory-unlinkStory','',''),(223,'priv','zh-cn','projectstory-unlinkStory','',''),(223,'priv','zh-tw','projectstory-unlinkStory','',''),(223,'manager','zh-cn','','工作流',''),(224,'priv','de','projectstory-batchUnlinkStory','',''),(224,'priv','en','projectstory-batchUnlinkStory','',''),(224,'priv','fr','projectstory-batchUnlinkStory','',''),(224,'priv','zh-cn','projectstory-batchUnlinkStory','',''),(224,'priv','zh-tw','projectstory-batchUnlinkStory','',''),(224,'manager','zh-cn','','代码',''),(225,'priv','de','projectstory-importFromLib','',''),(225,'priv','en','projectstory-importFromLib','',''),(225,'priv','fr','projectstory-importFromLib','',''),(225,'priv','zh-cn','projectstory-importFromLib','',''),(225,'priv','zh-tw','projectstory-importFromLib','',''),(225,'manager','zh-cn','','下载代码',''),(226,'priv','de','execution-view','',''),(226,'priv','en','execution-view','',''),(226,'priv','fr','execution-view','',''),(226,'priv','zh-cn','execution-view','',''),(226,'priv','zh-tw','execution-view','',''),(226,'manager','zh-cn','','二次开发',''),(227,'manager','zh-cn','','评审代码',''),(228,'priv','de','execution-createExec','',''),(228,'priv','en','execution-createExec','',''),(228,'priv','fr','execution-createExec','',''),(228,'priv','zh-cn','execution-createExec','',''),(228,'priv','zh-tw','execution-createExec','',''),(228,'manager','zh-cn','','编辑器',''),(229,'priv','de','execution-editAction','',''),(229,'priv','en','execution-editAction','',''),(229,'priv','fr','execution-editAction','',''),(229,'priv','zh-cn','execution-editAction','',''),(229,'priv','zh-tw','execution-editAction','',''),(229,'manager','zh-cn','','接入禅道',''),(230,'priv','de','execution-batchEditAction','',''),(230,'priv','en','execution-batchEditAction','',''),(230,'priv','fr','execution-batchEditAction','',''),(230,'priv','zh-cn','execution-batchEditAction','',''),(230,'priv','zh-tw','execution-batchEditAction','',''),(230,'manager','zh-cn','','合并请求',''),(231,'priv','de','execution-batchChangeStatus','',''),(231,'priv','en','execution-batchChangeStatus','',''),(231,'priv','fr','execution-batchChangeStatus','',''),(231,'priv','zh-cn','execution-batchChangeStatus','',''),(231,'priv','zh-tw','execution-batchChangeStatus','',''),(231,'manager','zh-cn','','权限后台设置',''),(232,'priv','de','execution-startAction','',''),(232,'priv','en','execution-startAction','',''),(232,'priv','fr','execution-startAction','',''),(232,'priv','zh-cn','execution-startAction','',''),(232,'priv','zh-tw','execution-startAction','',''),(232,'manager','zh-cn','','部门结构',''),(233,'priv','de','execution-activateAction','',''),(233,'priv','en','execution-activateAction','',''),(233,'priv','fr','execution-activateAction','',''),(233,'priv','zh-cn','execution-activateAction','',''),(233,'priv','zh-tw','execution-activateAction','',''),(233,'manager','zh-cn','','权限分组',''),(234,'priv','de','execution-delayAction','',''),(234,'priv','en','execution-delayAction','',''),(234,'priv','fr','execution-delayAction','',''),(234,'priv','zh-cn','execution-delayAction','',''),(234,'priv','zh-tw','execution-delayAction','',''),(234,'manager','zh-cn','','维护用户',''),(235,'priv','de','execution-suspendAction','',''),(235,'priv','en','execution-suspendAction','',''),(235,'priv','fr','execution-suspendAction','',''),(235,'priv','zh-cn','execution-suspendAction','',''),(235,'priv','zh-tw','execution-suspendAction','',''),(235,'manager','zh-cn','','插件管理',''),(236,'priv','de','execution-closeAction','',''),(236,'priv','en','execution-closeAction','',''),(236,'priv','fr','execution-closeAction','',''),(236,'priv','zh-cn','execution-closeAction','',''),(236,'priv','zh-tw','execution-closeAction','',''),(236,'manager','zh-cn','','通知设置',''),(237,'priv','de','execution-deleteAB','',''),(237,'priv','en','execution-deleteAB','',''),(237,'priv','fr','execution-deleteAB','',''),(237,'priv','zh-cn','execution-deleteAB','',''),(237,'priv','zh-tw','execution-deleteAB','',''),(237,'manager','zh-cn','','邮件配置',''),(238,'priv','de','execution-task','',''),(238,'priv','en','execution-task','',''),(238,'priv','fr','execution-task','',''),(238,'priv','zh-cn','execution-task','',''),(238,'priv','zh-tw','execution-task','',''),(238,'manager','zh-cn','','Webhook',''),(239,'priv','de','execution-groupTask','',''),(239,'priv','en','execution-groupTask','',''),(239,'priv','fr','execution-groupTask','',''),(239,'priv','zh-cn','execution-groupTask','',''),(239,'priv','zh-tw','execution-groupTask','',''),(239,'manager','zh-cn','','代码库',''),(240,'priv','de','execution-importTask','',''),(240,'priv','en','execution-importTask','',''),(240,'priv','fr','execution-importTask','',''),(240,'priv','zh-cn','execution-importTask','',''),(240,'priv','zh-tw','execution-importTask','',''),(240,'manager','zh-cn','','GitLab',''),(241,'priv','de','execution-importPlanStories','',''),(241,'priv','en','execution-importPlanStories','',''),(241,'priv','fr','execution-importPlanStories','',''),(241,'priv','zh-cn','execution-importPlanStories','',''),(241,'priv','zh-tw','execution-importPlanStories','',''),(241,'manager','zh-cn','','短信配置',''),(242,'priv','de','execution-importBug','',''),(242,'priv','en','execution-importBug','',''),(242,'priv','fr','execution-importBug','',''),(242,'priv','zh-cn','execution-importBug','',''),(242,'priv','zh-tw','execution-importBug','',''),(242,'manager','zh-cn','','Gogs',''),(243,'priv','de','execution-story','',''),(243,'priv','en','execution-story','',''),(243,'priv','fr','execution-story','',''),(243,'priv','zh-cn','execution-story','',''),(243,'priv','zh-tw','execution-story','',''),(243,'manager','zh-cn','','Gitea',''),(244,'priv','de','execution-build','',''),(244,'priv','en','execution-build','',''),(244,'priv','fr','execution-build','',''),(244,'priv','zh-cn','execution-build','',''),(244,'priv','zh-tw','execution-build','',''),(244,'manager','zh-cn','','SonarQube',''),(245,'priv','de','execution-testcase','',''),(245,'priv','en','execution-testcase','',''),(245,'priv','fr','execution-testcase','',''),(245,'priv','zh-cn','execution-testcase','',''),(245,'priv','zh-tw','execution-testcase','',''),(245,'manager','zh-cn','','指令',''),(246,'priv','de','execution-bug','',''),(246,'priv','en','execution-bug','',''),(246,'priv','fr','execution-bug','',''),(246,'priv','zh-cn','execution-bug','',''),(246,'priv','zh-tw','execution-bug','',''),(246,'manager','zh-cn','','流水线',''),(247,'priv','de','execution-testtask','',''),(247,'priv','en','execution-testtask','',''),(247,'priv','fr','execution-testtask','',''),(247,'priv','zh-cn','execution-testtask','',''),(247,'priv','zh-tw','execution-testtask','',''),(247,'manager','zh-cn','','流水线列表',''),(248,'priv','de','execution-testreport','',''),(248,'priv','en','execution-testreport','',''),(248,'priv','fr','execution-testreport','',''),(248,'priv','zh-cn','execution-testreport','',''),(248,'priv','zh-tw','execution-testreport','',''),(248,'manager','zh-cn','','合并请求',''),(249,'priv','de','execution-burn','',''),(249,'priv','en','execution-burn','',''),(249,'priv','fr','execution-burn','',''),(249,'priv','zh-cn','execution-burn','',''),(249,'priv','zh-tw','execution-burn','',''),(249,'manager','zh-cn','','系统备份',''),(250,'priv','de','execution-computeBurnAction','',''),(250,'priv','en','execution-computeBurnAction','',''),(250,'priv','fr','execution-computeBurnAction','',''),(250,'priv','zh-cn','execution-computeBurnAction','',''),(250,'priv','zh-tw','execution-computeBurnAction','',''),(250,'manager','zh-cn','','回收站',''),(251,'priv','de','execution-CFD','',''),(251,'priv','en','execution-CFD','',''),(251,'priv','fr','execution-CFD','',''),(251,'priv','zh-cn','execution-CFD','',''),(251,'priv','zh-tw','execution-CFD','',''),(251,'manager','zh-cn','','安全',''),(252,'priv','de','execution-computeCFD','',''),(252,'priv','en','execution-computeCFD','',''),(252,'priv','fr','execution-computeCFD','',''),(252,'priv','zh-cn','execution-computeCFD','',''),(252,'priv','zh-tw','execution-computeCFD','',''),(252,'manager','zh-cn','','定时',''),(253,'priv','de','execution-fixFirst','',''),(253,'priv','en','execution-fixFirst','',''),(253,'priv','fr','execution-fixFirst','',''),(253,'priv','zh-cn','execution-fixFirst','',''),(253,'priv','zh-tw','execution-fixFirst','',''),(253,'manager','zh-cn','','LDAP',''),(254,'manager','zh-cn','','聊天',''),(255,'priv','de','execution-teamAction','',''),(255,'priv','en','execution-teamAction','',''),(255,'priv','fr','execution-teamAction','',''),(255,'priv','zh-cn','execution-teamAction','',''),(255,'priv','zh-tw','execution-teamAction','',''),(255,'manager','zh-cn','','jenkins',''),(256,'priv','de','execution-dynamic','',''),(256,'priv','en','execution-dynamic','',''),(256,'priv','fr','execution-dynamic','',''),(256,'priv','zh-cn','execution-dynamic','',''),(256,'priv','zh-tw','execution-dynamic','',''),(256,'manager','zh-cn','','系统设置',''),(257,'priv','de','execution-manageProducts','',''),(257,'priv','en','execution-manageProducts','',''),(257,'priv','fr','execution-manageProducts','',''),(257,'priv','zh-cn','execution-manageProducts','',''),(257,'priv','zh-tw','execution-manageProducts','',''),(257,'manager','zh-cn','','搜索',''),(258,'priv','de','execution-manageMembers','',''),(258,'priv','en','execution-manageMembers','',''),(258,'priv','fr','execution-manageMembers','',''),(258,'priv','zh-cn','execution-manageMembers','',''),(258,'priv','zh-tw','execution-manageMembers','',''),(258,'manager','zh-cn','','备注',''),(259,'priv','de','execution-unlinkMember','',''),(259,'priv','en','execution-unlinkMember','',''),(259,'priv','fr','execution-unlinkMember','',''),(259,'priv','zh-cn','execution-unlinkMember','',''),(259,'priv','zh-tw','execution-unlinkMember','',''),(259,'manager','zh-cn','','模块维护',''),(260,'priv','de','execution-linkStory','',''),(260,'priv','en','execution-linkStory','',''),(260,'priv','fr','execution-linkStory','',''),(260,'priv','zh-cn','execution-linkStory','',''),(260,'priv','zh-tw','execution-linkStory','',''),(260,'manager','zh-cn','','附件',''),(261,'priv','de','execution-unlinkStory','',''),(261,'priv','en','execution-unlinkStory','',''),(261,'priv','fr','execution-unlinkStory','',''),(261,'priv','zh-cn','execution-unlinkStory','',''),(261,'priv','zh-tw','execution-unlinkStory','',''),(261,'manager','zh-cn','','通用日志',''),(262,'priv','de','execution-batchUnlinkStory','',''),(262,'priv','en','execution-batchUnlinkStory','',''),(262,'priv','fr','execution-batchUnlinkStory','',''),(262,'priv','zh-cn','execution-batchUnlinkStory','',''),(262,'priv','zh-tw','execution-batchUnlinkStory','',''),(262,'manager','zh-cn','','文档模板',''),(263,'priv','de','execution-updateOrder','',''),(263,'priv','en','execution-updateOrder','',''),(263,'priv','fr','execution-updateOrder','',''),(263,'priv','zh-cn','execution-updateOrder','',''),(263,'priv','zh-tw','execution-updateOrder','',''),(263,'manager','zh-cn','','导入需求库',''),(264,'priv','de','execution-taskKanban','',''),(264,'priv','en','execution-taskKanban','',''),(264,'priv','fr','execution-taskKanban','',''),(264,'priv','zh-cn','execution-taskKanban','',''),(264,'priv','zh-tw','execution-taskKanban','',''),(264,'manager','zh-cn','','项目干系人',''),(265,'priv','de','execution-printKanbanAction','',''),(265,'priv','en','execution-printKanbanAction','',''),(265,'priv','fr','execution-printKanbanAction','',''),(265,'priv','zh-cn','execution-printKanbanAction','',''),(265,'priv','zh-tw','execution-printKanbanAction','',''),(265,'manager','zh-cn','','项目版本',''),(266,'priv','de','execution-treeAction','',''),(266,'priv','en','execution-treeAction','',''),(266,'priv','fr','execution-treeAction','',''),(266,'priv','zh-cn','execution-treeAction','',''),(266,'priv','zh-tw','execution-treeAction','',''),(266,'manager','zh-cn','','导入用例库',''),(267,'priv','de','execution-treeViewTask','',''),(267,'priv','en','execution-treeViewTask','',''),(267,'priv','fr','execution-treeViewTask','',''),(267,'priv','zh-cn','execution-treeViewTask','',''),(267,'priv','zh-tw','execution-treeViewTask','',''),(267,'manager','zh-cn','','通用配置',''),(268,'priv','de','execution-treeViewStory','',''),(268,'priv','en','execution-treeViewStory','',''),(268,'priv','fr','execution-treeViewStory','',''),(268,'priv','zh-cn','execution-treeViewStory','',''),(268,'priv','zh-tw','execution-treeViewStory','',''),(268,'manager','zh-cn','','阶段列表设置',''),(269,'priv','de','execution-allExecutionAB','',''),(269,'priv','en','execution-allExecutionAB','',''),(269,'priv','fr','execution-allExecutionAB','',''),(269,'priv','zh-cn','execution-allExecutionAB','',''),(269,'priv','zh-tw','execution-allExecutionAB','',''),(269,'manager','zh-cn','','分类项设置',''),(270,'priv','de','execution-exportAction','',''),(270,'priv','en','execution-exportAction','',''),(270,'priv','fr','execution-exportAction','',''),(270,'priv','zh-cn','execution-exportAction','',''),(270,'priv','zh-tw','execution-exportAction','',''),(270,'manager','zh-cn','','审计设置',''),(271,'priv','de','execution-storyKanban','',''),(271,'priv','en','execution-storyKanban','',''),(271,'priv','fr','execution-storyKanban','',''),(271,'priv','zh-cn','execution-storyKanban','',''),(271,'priv','zh-tw','execution-storyKanban','',''),(271,'manager','zh-cn','','QA检查项设置',''),(272,'priv','de','execution-storySort','',''),(272,'priv','en','execution-storySort','',''),(272,'priv','fr','execution-storySort','',''),(272,'priv','zh-cn','execution-storySort','',''),(272,'priv','zh-tw','execution-storySort','',''),(272,'manager','zh-cn','','评审设置',''),(273,'priv','de','execution-whitelist','',''),(273,'priv','en','execution-whitelist','',''),(273,'priv','fr','execution-whitelist','',''),(273,'priv','zh-cn','execution-whitelist','',''),(273,'priv','zh-tw','execution-whitelist','',''),(273,'manager','zh-cn','','过程设置',''),(274,'priv','de','execution-addWhitelist','',''),(274,'priv','en','execution-addWhitelist','',''),(274,'priv','fr','execution-addWhitelist','',''),(274,'priv','zh-cn','execution-addWhitelist','',''),(274,'priv','zh-tw','execution-addWhitelist','',''),(274,'manager','zh-cn','','活动设置',''),(275,'priv','de','execution-unbindWhitelist','',''),(275,'priv','en','execution-unbindWhitelist','',''),(275,'priv','fr','execution-unbindWhitelist','',''),(275,'priv','zh-cn','execution-unbindWhitelist','',''),(275,'priv','zh-tw','execution-unbindWhitelist','',''),(275,'manager','zh-cn','','文档设置',''),(276,'priv','de','execution-storyEstimate','',''),(276,'priv','en','execution-storyEstimate','',''),(276,'priv','fr','execution-storyEstimate','',''),(276,'priv','zh-cn','execution-storyEstimate','',''),(276,'priv','zh-tw','execution-storyEstimate','',''),(276,'manager','zh-cn','','自定义配置',''),(277,'priv','de','execution-kanbanAction','',''),(277,'priv','en','execution-kanbanAction','',''),(277,'priv','fr','execution-kanbanAction','',''),(277,'priv','zh-cn','execution-kanbanAction','',''),(277,'priv','zh-tw','execution-kanbanAction','',''),(277,'manager','zh-cn','','审批设置',''),(278,'priv','de','execution-RDKanban','',''),(278,'priv','en','execution-RDKanban','',''),(278,'priv','fr','execution-RDKanban','',''),(278,'priv','zh-cn','execution-RDKanban','',''),(278,'priv','zh-tw','execution-RDKanban','',''),(278,'manager','zh-cn','','度量设置',''),(279,'priv','de','execution-setKanban','',''),(279,'priv','en','execution-setKanban','',''),(279,'priv','fr','execution-setKanban','',''),(279,'priv','zh-cn','execution-setKanban','',''),(279,'priv','zh-tw','execution-setKanban','',''),(279,'manager','zh-cn','','用户设置',''),(280,'priv','de','execution-doc','',''),(280,'priv','en','execution-doc','',''),(280,'priv','fr','execution-doc','',''),(280,'priv','zh-cn','execution-doc','',''),(280,'priv','zh-tw','execution-doc','',''),(280,'manager','zh-cn','','会议室设置',''),(281,'priv','de','execution-storyView','',''),(281,'priv','en','execution-storyView','',''),(281,'priv','fr','execution-storyView','',''),(281,'priv','zh-cn','execution-storyView','',''),(281,'priv','zh-tw','execution-storyView','',''),(281,'manager','zh-cn','','sql构建器',''),(282,'priv','de','execution-calendar','',''),(282,'priv','en','execution-calendar','',''),(282,'priv','fr','execution-calendar','',''),(282,'priv','zh-cn','execution-calendar','',''),(282,'priv','zh-tw','execution-calendar','',''),(282,'manager','zh-cn','','设计设置',''),(283,'priv','de','execution-effortCalendar','',''),(283,'priv','en','execution-effortCalendar','',''),(283,'priv','fr','execution-effortCalendar','',''),(283,'priv','zh-cn','execution-effortCalendar','',''),(283,'priv','zh-tw','execution-effortCalendar','',''),(283,'manager','zh-cn','','维护空间',''),(284,'priv','de','execution-effortAction','',''),(284,'priv','en','execution-effortAction','',''),(284,'priv','fr','execution-effortAction','',''),(284,'priv','zh-cn','execution-effortAction','',''),(284,'priv','zh-tw','execution-effortAction','',''),(284,'manager','zh-cn','','删除空间',''),(285,'priv','de','execution-taskEffort','',''),(285,'priv','en','execution-taskEffort','',''),(285,'priv','fr','execution-taskEffort','',''),(285,'priv','zh-cn','execution-taskEffort','',''),(285,'priv','zh-tw','execution-taskEffort','',''),(285,'manager','zh-cn','','浏览看板',''),(286,'priv','de','execution-computeTaskEffort','',''),(286,'priv','en','execution-computeTaskEffort','',''),(286,'priv','fr','execution-computeTaskEffort','',''),(286,'priv','zh-cn','execution-computeTaskEffort','',''),(286,'priv','zh-tw','execution-computeTaskEffort','',''),(286,'manager','zh-cn','','创建维护看板',''),(287,'priv','de','execution-deleterelation','',''),(287,'priv','en','execution-deleterelation','',''),(287,'priv','fr','execution-deleterelation','',''),(287,'priv','zh-cn','execution-deleterelation','',''),(287,'priv','zh-tw','execution-deleterelation','',''),(287,'manager','zh-cn','','删除看板',''),(288,'priv','de','execution-editrelation','',''),(288,'priv','en','execution-editrelation','',''),(288,'priv','fr','execution-editrelation','',''),(288,'priv','zh-cn','execution-editrelation','',''),(288,'priv','zh-tw','execution-editrelation','',''),(288,'manager','zh-cn','','删除执行节点',''),(289,'priv','de','execution-viewrelation','',''),(289,'priv','en','execution-viewrelation','',''),(289,'priv','fr','execution-viewrelation','',''),(289,'priv','zh-cn','execution-viewrelation','',''),(289,'priv','zh-tw','execution-viewrelation','',''),(289,'manager','zh-cn','','自动化测试',''),(290,'priv','de','execution-ganttchart','',''),(290,'priv','en','execution-ganttchart','',''),(290,'priv','fr','execution-ganttchart','',''),(290,'priv','zh-cn','execution-ganttchart','',''),(290,'priv','zh-tw','execution-ganttchart','',''),(290,'manager','zh-cn','','测试',''),(291,'priv','de','execution-ganttSetting','',''),(291,'priv','en','execution-ganttSetting','',''),(291,'priv','fr','execution-ganttSetting','',''),(291,'priv','zh-cn','execution-ganttSetting','',''),(291,'priv','zh-tw','execution-ganttSetting','',''),(291,'manager','zh-cn','','维护日志',''),(292,'priv','de','execution-ganttEdit','',''),(292,'priv','en','execution-ganttEdit','',''),(292,'priv','fr','execution-ganttEdit','',''),(292,'priv','zh-cn','execution-ganttEdit','',''),(292,'priv','zh-tw','execution-ganttEdit','',''),(292,'manager','zh-cn','','测试',''),(293,'priv','de','kanban-spaceCommon','',''),(293,'priv','en','kanban-spaceCommon','',''),(293,'priv','fr','kanban-spaceCommon','',''),(293,'priv','zh-cn','kanban-spaceCommon','',''),(293,'priv','zh-tw','kanban-spaceCommon','',''),(293,'manager','zh-cn','','矩阵',''),(294,'priv','de','kanban-createSpace','',''),(294,'priv','en','kanban-createSpace','',''),(294,'priv','fr','kanban-createSpace','',''),(294,'priv','zh-cn','kanban-createSpace','',''),(294,'priv','zh-tw','kanban-createSpace','',''),(294,'manager','zh-cn','','后台',''),(295,'priv','de','kanban-editSpace','',''),(295,'priv','en','kanban-editSpace','',''),(295,'priv','fr','kanban-editSpace','',''),(295,'priv','zh-cn','kanban-editSpace','',''),(295,'priv','zh-tw','kanban-editSpace','',''),(295,'manager','zh-cn','','工作流跨流程设置',''),(296,'priv','de','kanban-closeSpace','',''),(296,'priv','en','kanban-closeSpace','',''),(296,'priv','fr','kanban-closeSpace','',''),(296,'priv','zh-cn','kanban-closeSpace','',''),(296,'priv','zh-tw','kanban-closeSpace','',''),(296,'manager','zh-cn','','模板',''),(297,'priv','de','kanban-deleteSpace','',''),(297,'priv','en','kanban-deleteSpace','',''),(297,'priv','fr','kanban-deleteSpace','',''),(297,'priv','zh-cn','kanban-deleteSpace','',''),(297,'priv','zh-tw','kanban-deleteSpace','',''),(297,'manager','zh-cn','','数据表格',''),(298,'manager','zh-cn','','自动化测试',''),(299,'priv','de','kanban-create','',''),(299,'priv','en','kanban-create','',''),(299,'priv','fr','kanban-create','',''),(299,'priv','zh-cn','kanban-create','',''),(299,'priv','zh-tw','kanban-create','',''),(299,'manager','zh-cn','','Git',''),(300,'priv','de','kanban-edit','',''),(300,'priv','en','kanban-edit','',''),(300,'priv','fr','kanban-edit','',''),(300,'priv','zh-cn','kanban-edit','',''),(300,'priv','zh-tw','kanban-edit','',''),(300,'manager','zh-cn','','Subversion',''),(301,'priv','de','kanban-view','',''),(301,'priv','en','kanban-view','',''),(301,'priv','fr','kanban-view','',''),(301,'priv','zh-cn','kanban-view','',''),(301,'priv','zh-tw','kanban-view','',''),(301,'manager','zh-cn','','防超时',''),(302,'priv','de','kanban-close','',''),(302,'priv','en','kanban-close','',''),(302,'priv','fr','kanban-close','',''),(302,'priv','zh-cn','kanban-close','',''),(302,'priv','zh-tw','kanban-close','',''),(302,'manager','zh-cn','','审批',''),(303,'priv','de','kanban-delete','',''),(303,'priv','en','kanban-delete','',''),(303,'priv','fr','kanban-delete','',''),(303,'priv','zh-cn','kanban-delete','',''),(303,'priv','zh-tw','kanban-delete','',''),(303,'manager','zh-cn','','创建维护项目发布',''),(304,'priv','de','kanban-createRegion','',''),(304,'priv','en','kanban-createRegion','',''),(304,'priv','fr','kanban-createRegion','',''),(304,'priv','zh-cn','kanban-createRegion','',''),(304,'priv','zh-tw','kanban-createRegion','',''),(304,'manager','zh-cn','','删除项目发布',''),(305,'priv','de','kanban-editRegion','',''),(305,'priv','en','kanban-editRegion','',''),(305,'priv','fr','kanban-editRegion','',''),(305,'priv','zh-cn','kanban-editRegion','',''),(305,'priv','zh-tw','kanban-editRegion','',''),(305,'manager','zh-cn','','导入导出项目发布',''),(306,'priv','de','kanban-sortRegion','',''),(306,'priv','en','kanban-sortRegion','',''),(306,'priv','fr','kanban-sortRegion','',''),(306,'priv','zh-cn','kanban-sortRegion','',''),(306,'priv','zh-tw','kanban-sortRegion','',''),(306,'manager','zh-cn','','发布通知',''),(307,'priv','de','kanban-sortGroup','',''),(307,'priv','en','kanban-sortGroup','',''),(307,'priv','fr','kanban-sortGroup','',''),(307,'priv','zh-cn','kanban-sortGroup','',''),(307,'priv','zh-tw','kanban-sortGroup','',''),(307,'manager','zh-cn','','甘特图',''),(308,'priv','de','kanban-deleteRegion','',''),(308,'priv','en','kanban-deleteRegion','',''),(308,'priv','fr','kanban-deleteRegion','',''),(308,'priv','zh-cn','kanban-deleteRegion','',''),(308,'priv','zh-tw','kanban-deleteRegion','',''),(308,'manager','zh-cn','','维护任务关系',''),(309,'priv','de','kanban-createLane','',''),(309,'priv','en','kanban-createLane','',''),(309,'priv','fr','kanban-createLane','',''),(309,'priv','zh-cn','kanban-createLane','',''),(309,'priv','zh-tw','kanban-createLane','',''),(309,'manager','zh-cn','','浏览版本',''),(310,'priv','de','kanban-sortLane','',''),(310,'priv','en','kanban-sortLane','',''),(310,'priv','fr','kanban-sortLane','',''),(310,'priv','zh-cn','kanban-sortLane','',''),(310,'priv','zh-tw','kanban-sortLane','',''),(311,'priv','de','kanban-deleteLane','',''),(311,'priv','en','kanban-deleteLane','',''),(311,'priv','fr','kanban-deleteLane','',''),(311,'priv','zh-cn','kanban-deleteLane','',''),(311,'priv','zh-tw','kanban-deleteLane','',''),(311,'manager','zh-cn','','浏览研发需求',''),(312,'priv','de','kanban-createColumn','',''),(312,'priv','en','kanban-createColumn','',''),(312,'priv','fr','kanban-createColumn','',''),(312,'priv','zh-cn','kanban-createColumn','',''),(312,'priv','zh-tw','kanban-createColumn','',''),(312,'manager','zh-cn','','维护卡片',''),(313,'priv','de','kanban-editColumn','',''),(313,'priv','en','kanban-editColumn','',''),(313,'priv','fr','kanban-editColumn','',''),(313,'priv','zh-cn','kanban-editColumn','',''),(313,'priv','zh-tw','kanban-editColumn','',''),(313,'manager','zh-cn','','浏览研发需求',''),(314,'priv','de','kanban-setWIP','',''),(314,'priv','en','kanban-setWIP','',''),(314,'priv','fr','kanban-setWIP','',''),(314,'priv','zh-cn','kanban-setWIP','',''),(314,'priv','zh-tw','kanban-setWIP','',''),(314,'manager','zh-cn','','检查质量保证计划',''),(315,'priv','de','kanban-sortColumn','',''),(315,'priv','en','kanban-sortColumn','',''),(315,'priv','fr','kanban-sortColumn','',''),(315,'priv','zh-cn','kanban-sortColumn','',''),(315,'priv','zh-tw','kanban-sortColumn','',''),(315,'manager','zh-cn','','评审基线评审',''),(316,'priv','de','kanban-deleteColumn','',''),(316,'priv','en','kanban-deleteColumn','',''),(316,'priv','fr','kanban-deleteColumn','',''),(316,'priv','zh-cn','kanban-deleteColumn','',''),(316,'priv','zh-tw','kanban-deleteColumn','',''),(316,'manager','zh-cn','','审计基线评审',''),(317,'priv','de','kanban-createCard','',''),(317,'priv','en','kanban-createCard','',''),(317,'priv','fr','kanban-createCard','',''),(317,'priv','zh-cn','kanban-createCard','',''),(317,'priv','zh-tw','kanban-createCard','',''),(317,'manager','zh-cn','','管理维度',''),(318,'priv','de','kanban-editCard','',''),(318,'priv','en','kanban-editCard','',''),(318,'priv','fr','kanban-editCard','',''),(318,'priv','zh-cn','kanban-editCard','',''),(318,'priv','zh-tw','kanban-editCard','',''),(318,'manager','zh-cn','','浏览大屏',''),(319,'priv','de','kanban-viewCard','',''),(319,'priv','en','kanban-viewCard','',''),(319,'priv','fr','kanban-viewCard','',''),(319,'priv','zh-cn','kanban-viewCard','',''),(319,'priv','zh-tw','kanban-viewCard','',''),(319,'manager','zh-cn','','创建维护大屏',''),(320,'priv','de','kanban-sortCard','',''),(320,'priv','en','kanban-sortCard','',''),(320,'priv','fr','kanban-sortCard','',''),(320,'priv','zh-cn','kanban-sortCard','',''),(320,'priv','zh-tw','kanban-sortCard','',''),(320,'manager','zh-cn','','删除大屏',''),(321,'priv','de','kanban-deleteCard','',''),(321,'priv','en','kanban-deleteCard','',''),(321,'priv','fr','kanban-deleteCard','',''),(321,'priv','zh-cn','kanban-deleteCard','',''),(321,'priv','zh-tw','kanban-deleteCard','',''),(321,'manager','zh-cn','','数据权限',''),(322,'priv','de','kanban-assigntoCard','',''),(322,'priv','en','kanban-assigntoCard','',''),(322,'priv','fr','kanban-assigntoCard','',''),(322,'priv','zh-cn','kanban-assigntoCard','',''),(322,'priv','zh-tw','kanban-assigntoCard','',''),(322,'manager','zh-cn','','浏览透视表',''),(323,'priv','de','kanban-moveCard','',''),(323,'priv','en','kanban-moveCard','',''),(323,'priv','fr','kanban-moveCard','',''),(323,'priv','zh-cn','kanban-moveCard','',''),(323,'priv','zh-tw','kanban-moveCard','',''),(323,'manager','zh-cn','','设计透视表',''),(324,'priv','de','kanban-setCardColor','',''),(324,'priv','en','kanban-setCardColor','',''),(324,'priv','fr','kanban-setCardColor','',''),(324,'priv','zh-cn','kanban-setCardColor','',''),(324,'priv','zh-tw','kanban-setCardColor','',''),(324,'manager','zh-cn','','导出透视表',''),(325,'manager','zh-cn','','数据权限',''),(326,'priv','de','kanban-viewArchivedColumn','',''),(326,'priv','en','kanban-viewArchivedColumn','',''),(326,'priv','fr','kanban-viewArchivedColumn','',''),(326,'priv','zh-cn','kanban-viewArchivedColumn','',''),(326,'priv','zh-tw','kanban-viewArchivedColumn','',''),(326,'manager','zh-cn','','浏览图表',''),(327,'priv','de','kanban-batchCreateCard','',''),(327,'priv','en','kanban-batchCreateCard','',''),(327,'priv','fr','kanban-batchCreateCard','',''),(327,'priv','zh-cn','kanban-batchCreateCard','',''),(327,'priv','zh-tw','kanban-batchCreateCard','',''),(327,'manager','zh-cn','','设计图表',''),(328,'priv','de','kanban-activateSpace','',''),(328,'priv','en','kanban-activateSpace','',''),(328,'priv','fr','kanban-activateSpace','',''),(328,'priv','zh-cn','kanban-activateSpace','',''),(328,'priv','zh-tw','kanban-activateSpace','',''),(328,'manager','zh-cn','','导出图表',''),(329,'priv','de','kanban-setting','',''),(329,'priv','en','kanban-setting','',''),(329,'priv','fr','kanban-setting','',''),(329,'priv','zh-cn','kanban-setting','',''),(329,'priv','zh-tw','kanban-setting','',''),(329,'manager','zh-cn','','浏览数据表',''),(330,'priv','de','kanban-activate','',''),(330,'priv','en','kanban-activate','',''),(330,'priv','fr','kanban-activate','',''),(330,'priv','zh-cn','kanban-activate','',''),(330,'priv','zh-tw','kanban-activate','',''),(330,'manager','zh-cn','','创建维护数据表',''),(331,'priv','de','kanban-editLaneColor','',''),(331,'priv','en','kanban-editLaneColor','',''),(331,'priv','fr','kanban-editLaneColor','',''),(331,'priv','zh-cn','kanban-editLaneColor','',''),(331,'priv','zh-tw','kanban-editLaneColor','',''),(331,'manager','zh-cn','','删除数据表',''),(332,'priv','de','kanban-editLaneName','',''),(332,'priv','en','kanban-editLaneName','',''),(332,'priv','fr','kanban-editLaneName','',''),(332,'priv','zh-cn','kanban-editLaneName','',''),(332,'priv','zh-tw','kanban-editLaneName','',''),(333,'priv','de','kanban-splitColumn','',''),(333,'priv','en','kanban-splitColumn','',''),(333,'priv','fr','kanban-splitColumn','',''),(333,'priv','zh-cn','kanban-splitColumn','',''),(333,'priv','zh-tw','kanban-splitColumn','',''),(333,'manager','zh-cn','','浏览文档',''),(334,'priv','de','kanban-archiveColumn','',''),(334,'priv','en','kanban-archiveColumn','',''),(334,'priv','fr','kanban-archiveColumn','',''),(334,'priv','zh-cn','kanban-archiveColumn','',''),(334,'priv','zh-tw','kanban-archiveColumn','',''),(334,'manager','zh-cn','','创建与维护文档',''),(335,'priv','de','kanban-restoreColumn','',''),(335,'priv','en','kanban-restoreColumn','',''),(335,'priv','fr','kanban-restoreColumn','',''),(335,'priv','zh-cn','kanban-restoreColumn','',''),(335,'priv','zh-tw','kanban-restoreColumn','',''),(335,'manager','zh-cn','','删除文档',''),(336,'priv','de','kanban-archiveCard','',''),(336,'priv','en','kanban-archiveCard','',''),(336,'priv','fr','kanban-archiveCard','',''),(336,'priv','zh-cn','kanban-archiveCard','',''),(336,'priv','zh-tw','kanban-archiveCard','',''),(336,'manager','zh-cn','','导出文档',''),(337,'priv','de','kanban-viewArchivedCard','',''),(337,'priv','en','kanban-viewArchivedCard','',''),(337,'priv','fr','kanban-viewArchivedCard','',''),(337,'priv','zh-cn','kanban-viewArchivedCard','',''),(337,'priv','zh-tw','kanban-viewArchivedCard','',''),(338,'priv','de','kanban-restoreCard','',''),(338,'priv','en','kanban-restoreCard','',''),(338,'priv','fr','kanban-restoreCard','',''),(338,'priv','zh-cn','kanban-restoreCard','',''),(338,'priv','zh-tw','kanban-restoreCard','',''),(338,'manager','zh-cn','','浏览接口空间',''),(339,'priv','de','programplan-create','',''),(339,'priv','en','programplan-create','',''),(339,'priv','fr','programplan-create','',''),(339,'priv','zh-cn','programplan-create','',''),(339,'priv','zh-tw','programplan-create','',''),(339,'manager','zh-cn','','创建维护接口',''),(340,'priv','de','programplan-edit','',''),(340,'priv','en','programplan-edit','',''),(340,'priv','fr','programplan-edit','',''),(340,'priv','zh-cn','programplan-edit','',''),(340,'priv','zh-tw','programplan-edit','',''),(340,'manager','zh-cn','','导出接口',''),(341,'priv','de','programplan-gantt','',''),(341,'priv','en','programplan-gantt','',''),(341,'priv','fr','programplan-gantt','',''),(341,'priv','zh-cn','programplan-gantt','',''),(341,'priv','zh-tw','programplan-gantt','',''),(341,'manager','zh-cn','','删除接口',''),(342,'priv','de','programplan-ganttEdit','',''),(342,'priv','en','programplan-ganttEdit','',''),(342,'priv','fr','programplan-ganttEdit','',''),(342,'priv','zh-cn','programplan-ganttEdit','',''),(342,'priv','zh-tw','programplan-ganttEdit','',''),(342,'manager','zh-cn','','接口调用',''),(343,'priv','de','task-create','',''),(343,'priv','en','task-create','',''),(343,'priv','fr','task-create','',''),(343,'priv','zh-cn','task-create','',''),(343,'priv','zh-tw','task-create','',''),(344,'priv','de','task-batchCreate','',''),(344,'priv','en','task-batchCreate','',''),(344,'priv','fr','task-batchCreate','',''),(344,'priv','zh-cn','task-batchCreate','',''),(344,'priv','zh-tw','task-batchCreate','',''),(344,'manager','zh-cn','','维护场景',''),(345,'priv','de','task-batchEdit','',''),(345,'priv','en','task-batchEdit','',''),(345,'priv','fr','task-batchEdit','',''),(345,'priv','zh-cn','task-batchEdit','',''),(345,'priv','zh-tw','task-batchEdit','',''),(345,'manager','zh-cn','','树状图',''),(346,'priv','de','task-edit','',''),(346,'priv','en','task-edit','',''),(346,'priv','fr','task-edit','',''),(346,'priv','zh-cn','task-edit','',''),(346,'priv','zh-tw','task-edit','',''),(346,'manager','zh-cn','','工时明细表',''),(347,'priv','de','task-assignAction','',''),(347,'priv','en','task-assignAction','',''),(347,'priv','fr','task-assignAction','',''),(347,'priv','zh-cn','task-assignAction','',''),(347,'priv','zh-tw','task-assignAction','',''),(347,'manager','zh-cn','','任务日历',''),(348,'priv','de','task-batchAssignTo','',''),(348,'priv','en','task-batchAssignTo','',''),(348,'priv','fr','task-batchAssignTo','',''),(348,'priv','zh-cn','task-batchAssignTo','',''),(348,'priv','zh-tw','task-batchAssignTo','',''),(348,'manager','de','index','',''),(348,'manager','en','index','',''),(348,'manager','fr','index','',''),(348,'manager','zh-cn','index','',''),(348,'manager','zh-tw','index','',''),(349,'priv','de','task-startAction','',''),(349,'priv','en','task-startAction','',''),(349,'priv','fr','task-startAction','',''),(349,'priv','zh-cn','task-startAction','',''),(349,'priv','zh-tw','task-startAction','',''),(349,'manager','de','index','',''),(349,'manager','en','index','',''),(349,'manager','fr','index','',''),(349,'manager','zh-cn','index','',''),(349,'manager','zh-tw','index','',''),(350,'priv','de','task-pauseAction','',''),(350,'priv','en','task-pauseAction','',''),(350,'priv','fr','task-pauseAction','',''),(350,'priv','zh-cn','task-pauseAction','',''),(350,'priv','zh-tw','task-pauseAction','',''),(350,'manager','de','my','',''),(350,'manager','en','my','',''),(350,'manager','fr','my','',''),(350,'manager','zh-cn','my','',''),(350,'manager','zh-tw','my','',''),(351,'priv','de','task-restartAction','',''),(351,'priv','en','task-restartAction','',''),(351,'priv','fr','task-restartAction','',''),(351,'priv','zh-cn','task-restartAction','',''),(351,'priv','zh-tw','task-restartAction','',''),(351,'manager','de','my','',''),(351,'manager','en','my','',''),(351,'manager','fr','my','',''),(351,'manager','zh-cn','my','',''),(351,'manager','zh-tw','my','',''),(352,'priv','de','task-finishAction','',''),(352,'priv','en','task-finishAction','',''),(352,'priv','fr','task-finishAction','',''),(352,'priv','zh-cn','task-finishAction','',''),(352,'priv','zh-tw','task-finishAction','',''),(352,'manager','de','todo','',''),(352,'manager','en','todo','',''),(352,'manager','fr','todo','',''),(352,'manager','zh-cn','todo','',''),(352,'manager','zh-tw','todo','',''),(353,'priv','de','task-cancelAction','',''),(353,'priv','en','task-cancelAction','',''),(353,'priv','fr','task-cancelAction','',''),(353,'priv','zh-cn','task-cancelAction','',''),(353,'priv','zh-tw','task-cancelAction','',''),(353,'manager','de','contact','',''),(353,'manager','en','contact','',''),(353,'manager','fr','contact','',''),(353,'manager','zh-cn','contact','',''),(353,'manager','zh-tw','contact','',''),(354,'priv','de','task-closeAction','',''),(354,'priv','en','task-closeAction','',''),(354,'priv','fr','task-closeAction','',''),(354,'priv','zh-cn','task-closeAction','',''),(354,'priv','zh-tw','task-closeAction','',''),(354,'manager','de','personalsettings','',''),(354,'manager','en','personalsettings','',''),(354,'manager','fr','personalsettings','',''),(354,'manager','zh-cn','personalsettings','',''),(354,'manager','zh-tw','personalsettings','',''),(355,'priv','de','task-batchClose','',''),(355,'priv','en','task-batchClose','',''),(355,'priv','fr','task-batchClose','',''),(355,'priv','zh-cn','task-batchClose','',''),(355,'priv','zh-tw','task-batchClose','',''),(355,'manager','de','effort','',''),(355,'manager','en','effort','',''),(355,'manager','fr','effort','',''),(355,'manager','zh-cn','effort','',''),(355,'manager','zh-tw','effort','',''),(356,'priv','de','task-activateAction','',''),(356,'priv','en','task-activateAction','',''),(356,'priv','fr','task-activateAction','',''),(356,'priv','zh-cn','task-activateAction','',''),(356,'priv','zh-tw','task-activateAction','',''),(356,'manager','de','program','',''),(356,'manager','en','program','',''),(356,'manager','fr','program','',''),(356,'manager','zh-cn','program','',''),(356,'manager','zh-tw','program','',''),(357,'priv','de','task-deleteAction','',''),(357,'priv','en','task-deleteAction','',''),(357,'priv','fr','task-deleteAction','',''),(357,'priv','zh-cn','task-deleteAction','',''),(357,'priv','zh-tw','task-deleteAction','',''),(357,'manager','de','program','',''),(357,'manager','en','program','',''),(357,'manager','fr','program','',''),(357,'manager','zh-cn','program','',''),(357,'manager','zh-tw','program','',''),(358,'priv','de','task-view','',''),(358,'priv','en','task-view','',''),(358,'priv','fr','task-view','',''),(358,'priv','zh-cn','task-view','',''),(358,'priv','zh-tw','task-view','',''),(358,'manager','de','personnel','',''),(358,'manager','en','personnel','',''),(358,'manager','fr','personnel','',''),(358,'manager','zh-cn','personnel','',''),(358,'manager','zh-tw','personnel','',''),(359,'priv','de','task-exportAction','',''),(359,'priv','en','task-exportAction','',''),(359,'priv','fr','task-exportAction','',''),(359,'priv','zh-cn','task-exportAction','',''),(359,'priv','zh-tw','task-exportAction','',''),(359,'manager','de','programstakeholder','',''),(359,'manager','en','programstakeholder','',''),(359,'manager','fr','programstakeholder','',''),(359,'manager','zh-cn','programstakeholder','',''),(359,'manager','zh-tw','programstakeholder','',''),(360,'priv','de','task-confirmStoryChange','',''),(360,'priv','en','task-confirmStoryChange','',''),(360,'priv','fr','task-confirmStoryChange','',''),(360,'priv','zh-cn','task-confirmStoryChange','',''),(360,'priv','zh-tw','task-confirmStoryChange','',''),(360,'manager','de','product','',''),(360,'manager','en','product','',''),(360,'manager','fr','product','',''),(360,'manager','zh-cn','product','',''),(360,'manager','zh-tw','product','',''),(361,'priv','de','task-recordEstimateAction','',''),(361,'priv','en','task-recordEstimateAction','',''),(361,'priv','fr','task-recordEstimateAction','',''),(361,'priv','zh-cn','task-recordEstimateAction','',''),(361,'priv','zh-tw','task-recordEstimateAction','',''),(361,'manager','de','product','',''),(361,'manager','en','product','',''),(361,'manager','fr','product','',''),(361,'manager','zh-cn','product','',''),(361,'manager','zh-tw','product','',''),(362,'priv','de','task-editEstimate','',''),(362,'priv','en','task-editEstimate','',''),(362,'priv','fr','task-editEstimate','',''),(362,'priv','zh-cn','task-editEstimate','',''),(362,'priv','zh-tw','task-editEstimate','',''),(362,'manager','de','story','',''),(362,'manager','en','story','',''),(362,'manager','fr','story','',''),(362,'manager','zh-cn','story','',''),(362,'manager','zh-tw','story','',''),(363,'priv','de','task-deleteEstimate','',''),(363,'priv','en','task-deleteEstimate','',''),(363,'priv','fr','task-deleteEstimate','',''),(363,'priv','zh-cn','task-deleteEstimate','',''),(363,'priv','zh-tw','task-deleteEstimate','',''),(363,'manager','de','requirement','',''),(363,'manager','en','requirement','',''),(363,'manager','fr','requirement','',''),(363,'manager','zh-cn','requirement','',''),(363,'manager','zh-tw','requirement','',''),(364,'priv','de','task-reportChart','',''),(364,'priv','en','task-reportChart','',''),(364,'priv','fr','task-reportChart','',''),(364,'priv','zh-cn','task-reportChart','',''),(364,'priv','zh-tw','task-reportChart','',''),(364,'manager','de','productplan','',''),(364,'manager','en','productplan','',''),(364,'manager','fr','productplan','',''),(364,'manager','zh-cn','productplan','',''),(364,'manager','zh-tw','productplan','',''),(365,'priv','de','task-batchChangeModule','',''),(365,'priv','en','task-batchChangeModule','',''),(365,'priv','fr','task-batchChangeModule','',''),(365,'priv','zh-cn','task-batchChangeModule','',''),(365,'priv','zh-tw','task-batchChangeModule','',''),(365,'manager','de','release','',''),(365,'manager','en','release','',''),(365,'manager','fr','release','',''),(365,'manager','zh-cn','release','',''),(365,'manager','zh-tw','release','',''),(366,'priv','de','task-batchCancel','',''),(366,'priv','en','task-batchCancel','',''),(366,'priv','fr','task-batchCancel','',''),(366,'priv','zh-cn','task-batchCancel','',''),(366,'priv','zh-tw','task-batchCancel','',''),(366,'manager','de','branch','',''),(366,'manager','en','branch','',''),(366,'manager','fr','branch','',''),(366,'manager','zh-cn','branch','',''),(366,'manager','zh-tw','branch','',''),(367,'priv','de','task-import','',''),(367,'priv','en','task-import','',''),(367,'priv','fr','task-import','',''),(367,'priv','zh-cn','task-import','',''),(367,'priv','zh-tw','task-import','',''),(367,'manager','de','productsettings','',''),(367,'manager','en','productsettings','',''),(367,'manager','fr','productsettings','',''),(367,'manager','zh-cn','productsettings','',''),(367,'manager','zh-tw','productsettings','',''),(368,'priv','de','task-exportTemplate','',''),(368,'priv','en','task-exportTemplate','',''),(368,'priv','fr','task-exportTemplate','',''),(368,'priv','zh-cn','task-exportTemplate','',''),(368,'priv','zh-tw','task-exportTemplate','',''),(368,'manager','de','project','',''),(368,'manager','en','project','',''),(368,'manager','fr','project','',''),(368,'manager','zh-cn','project','',''),(368,'manager','zh-tw','project','',''),(369,'priv','de','task-confirmDesignChange','',''),(369,'priv','en','task-confirmDesignChange','',''),(369,'priv','fr','task-confirmDesignChange','',''),(369,'priv','zh-cn','task-confirmDesignChange','',''),(369,'priv','zh-tw','task-confirmDesignChange','',''),(369,'manager','de','project','',''),(369,'manager','en','project','',''),(369,'manager','fr','project','',''),(369,'manager','zh-cn','project','',''),(369,'manager','zh-tw','project','',''),(370,'priv','de','build-create','',''),(370,'priv','en','build-create','',''),(370,'priv','fr','build-create','',''),(370,'priv','zh-cn','build-create','',''),(370,'priv','zh-tw','build-create','',''),(370,'manager','de','projectplan','',''),(370,'manager','en','projectplan','',''),(370,'manager','fr','projectplan','',''),(370,'manager','zh-cn','projectplan','',''),(370,'manager','zh-tw','projectplan','',''),(371,'priv','de','build-edit','',''),(371,'priv','en','build-edit','',''),(371,'priv','fr','build-edit','',''),(371,'priv','zh-cn','build-edit','',''),(371,'priv','zh-tw','build-edit','',''),(371,'manager','de','projectstory','',''),(371,'manager','en','projectstory','',''),(371,'manager','fr','projectstory','',''),(371,'manager','zh-cn','projectstory','',''),(371,'manager','zh-tw','projectstory','',''),(372,'priv','de','build-delete','',''),(372,'priv','en','build-delete','',''),(372,'priv','fr','build-delete','',''),(372,'priv','zh-cn','build-delete','',''),(372,'priv','zh-tw','build-delete','',''),(372,'manager','de','programplan','',''),(372,'manager','en','programplan','',''),(372,'manager','fr','programplan','',''),(372,'manager','zh-cn','programplan','',''),(372,'manager','zh-tw','programplan','',''),(373,'priv','de','build-view','',''),(373,'priv','en','build-view','',''),(373,'priv','fr','build-view','',''),(373,'priv','zh-cn','build-view','',''),(373,'priv','zh-tw','build-view','',''),(373,'manager','de','design','',''),(373,'manager','en','design','',''),(373,'manager','fr','design','',''),(373,'manager','zh-cn','design','',''),(373,'manager','zh-tw','design','',''),(374,'priv','de','build-linkStory','',''),(374,'priv','en','build-linkStory','',''),(374,'priv','fr','build-linkStory','',''),(374,'priv','zh-cn','build-linkStory','',''),(374,'priv','zh-tw','build-linkStory','',''),(374,'manager','de','milestone','',''),(374,'manager','en','milestone','',''),(374,'manager','fr','milestone','',''),(374,'manager','zh-cn','milestone','',''),(374,'manager','zh-tw','milestone','',''),(375,'priv','de','build-unlinkStory','',''),(375,'priv','en','build-unlinkStory','',''),(375,'priv','fr','build-unlinkStory','',''),(375,'priv','zh-cn','build-unlinkStory','',''),(375,'priv','zh-tw','build-unlinkStory','',''),(375,'manager','de','issue','',''),(375,'manager','en','issue','',''),(375,'manager','fr','issue','',''),(375,'manager','zh-cn','issue','',''),(375,'manager','zh-tw','issue','',''),(376,'priv','de','build-batchUnlinkStory','',''),(376,'priv','en','build-batchUnlinkStory','',''),(376,'priv','fr','build-batchUnlinkStory','',''),(376,'priv','zh-cn','build-batchUnlinkStory','',''),(376,'priv','zh-tw','build-batchUnlinkStory','',''),(376,'manager','de','risk','',''),(376,'manager','en','risk','',''),(376,'manager','fr','risk','',''),(376,'manager','zh-cn','risk','',''),(376,'manager','zh-tw','risk','',''),(377,'priv','de','build-linkBug','',''),(377,'priv','en','build-linkBug','',''),(377,'priv','fr','build-linkBug','',''),(377,'priv','zh-cn','build-linkBug','',''),(377,'priv','zh-tw','build-linkBug','',''),(377,'manager','de','budget','',''),(377,'manager','en','budget','',''),(377,'manager','fr','budget','',''),(377,'manager','zh-cn','budget','',''),(377,'manager','zh-tw','budget','',''),(378,'priv','de','build-unlinkBug','',''),(378,'priv','en','build-unlinkBug','',''),(378,'priv','fr','build-unlinkBug','',''),(378,'priv','zh-cn','build-unlinkBug','',''),(378,'priv','zh-tw','build-unlinkBug','',''),(378,'manager','de','workestimation','',''),(378,'manager','en','workestimation','',''),(378,'manager','fr','workestimation','',''),(378,'manager','zh-cn','workestimation','',''),(378,'manager','zh-tw','workestimation','',''),(379,'priv','de','build-batchUnlinkBug','',''),(379,'priv','en','build-batchUnlinkBug','',''),(379,'priv','fr','build-batchUnlinkBug','',''),(379,'priv','zh-cn','build-batchUnlinkBug','',''),(379,'priv','zh-tw','build-batchUnlinkBug','',''),(379,'manager','de','durationestimation','',''),(379,'manager','en','durationestimation','',''),(379,'manager','fr','durationestimation','',''),(379,'manager','zh-cn','durationestimation','',''),(379,'manager','zh-tw','durationestimation','',''),(380,'priv','de','design-browse','',''),(380,'priv','en','design-browse','',''),(380,'priv','fr','design-browse','',''),(380,'priv','zh-cn','design-browse','',''),(380,'priv','zh-tw','design-browse','',''),(380,'manager','de','weekly','',''),(380,'manager','en','weekly','',''),(380,'manager','fr','weekly','',''),(380,'manager','zh-cn','weekly','',''),(380,'manager','zh-tw','weekly','',''),(381,'priv','de','design-view','',''),(381,'priv','en','design-view','',''),(381,'priv','fr','design-view','',''),(381,'priv','zh-cn','design-view','',''),(381,'priv','zh-tw','design-view','',''),(381,'manager','de','opportunity','',''),(381,'manager','en','opportunity','',''),(381,'manager','fr','opportunity','',''),(381,'manager','zh-cn','opportunity','',''),(381,'manager','zh-tw','opportunity','',''),(382,'priv','de','design-create','',''),(382,'priv','en','design-create','',''),(382,'priv','fr','design-create','',''),(382,'priv','zh-cn','design-create','',''),(382,'priv','zh-tw','design-create','',''),(382,'manager','de','trainplan','',''),(382,'manager','en','trainplan','',''),(382,'manager','fr','trainplan','',''),(382,'manager','zh-cn','trainplan','',''),(382,'manager','zh-tw','trainplan','',''),(383,'priv','de','design-batchCreate','',''),(383,'priv','en','design-batchCreate','',''),(383,'priv','fr','design-batchCreate','',''),(383,'priv','zh-cn','design-batchCreate','',''),(383,'priv','zh-tw','design-batchCreate','',''),(383,'manager','de','nc','',''),(383,'manager','en','nc','',''),(383,'manager','fr','nc','',''),(383,'manager','zh-cn','nc','',''),(383,'manager','zh-tw','nc','',''),(384,'priv','de','design-edit','',''),(384,'priv','en','design-edit','',''),(384,'priv','fr','design-edit','',''),(384,'priv','zh-cn','design-edit','',''),(384,'priv','zh-tw','design-edit','',''),(384,'manager','de','gapanalysis','',''),(384,'manager','en','gapanalysis','',''),(384,'manager','fr','gapanalysis','',''),(384,'manager','zh-cn','gapanalysis','',''),(384,'manager','zh-tw','gapanalysis','',''),(385,'priv','de','design-assignTo','',''),(385,'priv','en','design-assignTo','',''),(385,'priv','fr','design-assignTo','',''),(385,'priv','zh-cn','design-assignTo','',''),(385,'priv','zh-tw','design-assignTo','',''),(385,'manager','de','researchplan','',''),(385,'manager','en','researchplan','',''),(385,'manager','fr','researchplan','',''),(385,'manager','zh-cn','researchplan','',''),(385,'manager','zh-tw','researchplan','',''),(386,'priv','de','design-delete','',''),(386,'priv','en','design-delete','',''),(386,'priv','fr','design-delete','',''),(386,'priv','zh-cn','design-delete','',''),(386,'priv','zh-tw','design-delete','',''),(386,'manager','de','researchreport','',''),(386,'manager','en','researchreport','',''),(386,'manager','fr','researchreport','',''),(386,'manager','zh-cn','researchreport','',''),(386,'manager','zh-tw','researchreport','',''),(387,'priv','de','design-linkCommit','',''),(387,'priv','en','design-linkCommit','',''),(387,'priv','fr','design-linkCommit','',''),(387,'priv','zh-cn','design-linkCommit','',''),(387,'priv','zh-tw','design-linkCommit','',''),(387,'manager','de','meeting','',''),(387,'manager','en','meeting','',''),(387,'manager','fr','meeting','',''),(387,'manager','zh-cn','meeting','',''),(387,'manager','zh-tw','meeting','',''),(388,'priv','de','design-viewCommit','',''),(388,'priv','en','design-viewCommit','',''),(388,'priv','fr','design-viewCommit','',''),(388,'priv','zh-cn','design-viewCommit','',''),(388,'priv','zh-tw','design-viewCommit','',''),(388,'manager','de','projectbuild','',''),(388,'manager','en','projectbuild','',''),(388,'manager','fr','projectbuild','',''),(388,'manager','zh-cn','projectbuild','',''),(388,'manager','zh-tw','projectbuild','',''),(389,'priv','de','design-unlinkCommit','',''),(389,'priv','en','design-unlinkCommit','',''),(389,'priv','fr','design-unlinkCommit','',''),(389,'priv','zh-cn','design-unlinkCommit','',''),(389,'priv','zh-tw','design-unlinkCommit','',''),(389,'manager','de','projectrelease','',''),(389,'manager','en','projectrelease','',''),(389,'manager','fr','projectrelease','',''),(389,'manager','zh-cn','projectrelease','',''),(389,'manager','zh-tw','projectrelease','',''),(390,'priv','de','design-revision','',''),(390,'priv','en','design-revision','',''),(390,'priv','fr','design-revision','',''),(390,'priv','zh-cn','design-revision','',''),(390,'priv','zh-tw','design-revision','',''),(390,'manager','de','stakeholder','',''),(390,'manager','en','stakeholder','',''),(390,'manager','fr','stakeholder','',''),(390,'manager','zh-cn','stakeholder','',''),(390,'manager','zh-tw','stakeholder','',''),(391,'priv','de','design-submit','',''),(391,'priv','en','design-submit','',''),(391,'priv','fr','design-submit','',''),(391,'priv','zh-cn','design-submit','',''),(391,'priv','zh-tw','design-submit','',''),(391,'manager','de','projectsettings','',''),(391,'manager','en','projectsettings','',''),(391,'manager','fr','projectsettings','',''),(391,'manager','zh-cn','projectsettings','',''),(391,'manager','zh-tw','projectsettings','',''),(392,'priv','de','design-setType','',''),(392,'priv','en','design-setType','',''),(392,'priv','fr','design-setType','',''),(392,'priv','zh-cn','design-setType','',''),(392,'priv','zh-tw','design-setType','',''),(392,'manager','de','projectreview','',''),(392,'manager','en','projectreview','',''),(392,'manager','fr','projectreview','',''),(392,'manager','zh-cn','projectreview','',''),(392,'manager','zh-tw','projectreview','',''),(393,'priv','de','design-setPlusType','',''),(393,'priv','en','design-setPlusType','',''),(393,'priv','fr','design-setPlusType','',''),(393,'priv','zh-cn','design-setPlusType','',''),(393,'priv','zh-tw','design-setPlusType','',''),(393,'manager','de','projecttrack','',''),(393,'manager','en','projecttrack','',''),(393,'manager','fr','projecttrack','',''),(393,'manager','zh-cn','projecttrack','',''),(393,'manager','zh-tw','projecttrack','',''),(394,'priv','de','qa-indexAction','',''),(394,'priv','en','qa-indexAction','',''),(394,'priv','fr','qa-indexAction','',''),(394,'priv','zh-cn','qa-indexAction','',''),(394,'priv','zh-tw','qa-indexAction','',''),(394,'manager','de','projectqa','',''),(394,'manager','en','projectqa','',''),(394,'manager','fr','projectqa','',''),(394,'manager','zh-cn','projectqa','',''),(394,'manager','zh-tw','projectqa','',''),(395,'priv','de','bug-browse','',''),(395,'priv','en','bug-browse','',''),(395,'priv','fr','bug-browse','',''),(395,'priv','zh-cn','bug-browse','',''),(395,'priv','zh-tw','bug-browse','',''),(395,'manager','de','pssp','',''),(395,'manager','en','pssp','',''),(395,'manager','fr','pssp','',''),(395,'manager','zh-cn','pssp','',''),(395,'manager','zh-tw','pssp','',''),(396,'priv','de','bug-create','',''),(396,'priv','en','bug-create','',''),(396,'priv','fr','bug-create','',''),(396,'priv','zh-cn','bug-create','',''),(396,'priv','zh-tw','bug-create','',''),(396,'manager','de','cm','',''),(396,'manager','en','cm','',''),(396,'manager','fr','cm','',''),(396,'manager','zh-cn','cm','',''),(396,'manager','zh-tw','cm','',''),(397,'priv','de','bug-batchCreate','',''),(397,'priv','en','bug-batchCreate','',''),(397,'priv','fr','bug-batchCreate','',''),(397,'priv','zh-cn','bug-batchCreate','',''),(397,'priv','zh-tw','bug-batchCreate','',''),(397,'manager','de','auditplan','',''),(397,'manager','en','auditplan','',''),(397,'manager','fr','auditplan','',''),(397,'manager','zh-cn','auditplan','',''),(397,'manager','zh-tw','auditplan','',''),(398,'priv','de','bug-batchEdit','',''),(398,'priv','en','bug-batchEdit','',''),(398,'priv','fr','bug-batchEdit','',''),(398,'priv','zh-cn','bug-batchEdit','',''),(398,'priv','zh-tw','bug-batchEdit','',''),(398,'manager','de','reviewissue','',''),(398,'manager','en','reviewissue','',''),(398,'manager','fr','reviewissue','',''),(398,'manager','zh-cn','reviewissue','',''),(398,'manager','zh-tw','reviewissue','',''),(399,'priv','de','bug-confirmAction','',''),(399,'priv','en','bug-confirmAction','',''),(399,'priv','fr','bug-confirmAction','',''),(399,'priv','zh-cn','bug-confirmAction','',''),(399,'priv','zh-tw','bug-confirmAction','',''),(399,'manager','de','review','',''),(399,'manager','en','review','',''),(399,'manager','fr','review','',''),(399,'manager','zh-cn','review','',''),(399,'manager','zh-tw','review','',''),(400,'priv','de','bug-batchConfirm','',''),(400,'priv','en','bug-batchConfirm','',''),(400,'priv','fr','bug-batchConfirm','',''),(400,'priv','zh-cn','bug-batchConfirm','',''),(400,'priv','zh-tw','bug-batchConfirm','',''),(400,'manager','de','measrecord','',''),(400,'manager','en','measrecord','',''),(400,'manager','fr','measrecord','',''),(400,'manager','zh-cn','measrecord','',''),(400,'manager','zh-tw','measrecord','',''),(401,'priv','de','bug-view','',''),(401,'priv','en','bug-view','',''),(401,'priv','fr','bug-view','',''),(401,'priv','zh-cn','bug-view','',''),(401,'priv','zh-tw','bug-view','',''),(401,'manager','de','projectreport','',''),(401,'manager','en','projectreport','',''),(401,'manager','fr','projectreport','',''),(401,'manager','zh-cn','projectreport','',''),(401,'manager','zh-tw','projectreport','',''),(402,'priv','de','bug-edit','',''),(402,'priv','en','bug-edit','',''),(402,'priv','fr','bug-edit','',''),(402,'priv','zh-cn','bug-edit','',''),(402,'priv','zh-tw','bug-edit','',''),(402,'manager','de','projectresearch','',''),(402,'manager','en','projectresearch','',''),(402,'manager','fr','projectresearch','',''),(402,'manager','zh-cn','projectresearch','',''),(402,'manager','zh-tw','projectresearch','',''),(403,'priv','de','bug-assignAction','',''),(403,'priv','en','bug-assignAction','',''),(403,'priv','fr','bug-assignAction','',''),(403,'priv','zh-cn','bug-assignAction','',''),(403,'priv','zh-tw','bug-assignAction','',''),(403,'manager','de','projectauditplan','',''),(403,'manager','en','projectauditplan','',''),(403,'manager','fr','projectauditplan','',''),(403,'manager','zh-cn','projectauditplan','',''),(403,'manager','zh-tw','projectauditplan','',''),(404,'priv','de','bug-batchAssignTo','',''),(404,'priv','en','bug-batchAssignTo','',''),(404,'priv','fr','bug-batchAssignTo','',''),(404,'priv','zh-cn','bug-batchAssignTo','',''),(404,'priv','zh-tw','bug-batchAssignTo','',''),(404,'manager','de','projectgapanalysis','',''),(404,'manager','en','projectgapanalysis','',''),(404,'manager','fr','projectgapanalysis','',''),(404,'manager','zh-cn','projectgapanalysis','',''),(404,'manager','zh-tw','projectgapanalysis','',''),(405,'priv','de','bug-resolveAction','',''),(405,'priv','en','bug-resolveAction','',''),(405,'priv','fr','bug-resolveAction','',''),(405,'priv','zh-cn','bug-resolveAction','',''),(405,'priv','zh-tw','bug-resolveAction','',''),(405,'manager','de','execution','',''),(405,'manager','en','execution','',''),(405,'manager','fr','execution','',''),(405,'manager','zh-cn','execution','',''),(405,'manager','zh-tw','execution','',''),(406,'priv','de','bug-batchResolve','',''),(406,'priv','en','bug-batchResolve','',''),(406,'priv','fr','bug-batchResolve','',''),(406,'priv','zh-cn','bug-batchResolve','',''),(406,'priv','zh-tw','bug-batchResolve','',''),(406,'manager','de','execution','',''),(406,'manager','en','execution','',''),(406,'manager','fr','execution','',''),(406,'manager','zh-cn','execution','',''),(406,'manager','zh-tw','execution','',''),(407,'priv','de','bug-batchClose','',''),(407,'priv','en','bug-batchClose','',''),(407,'priv','fr','bug-batchClose','',''),(407,'priv','zh-cn','bug-batchClose','',''),(407,'priv','zh-tw','bug-batchClose','',''),(407,'manager','de','task','',''),(407,'manager','en','task','',''),(407,'manager','fr','task','',''),(407,'manager','zh-cn','task','',''),(407,'manager','zh-tw','task','',''),(408,'priv','de','bug-batchActivate','',''),(408,'priv','en','bug-batchActivate','',''),(408,'priv','fr','bug-batchActivate','',''),(408,'priv','zh-cn','bug-batchActivate','',''),(408,'priv','zh-tw','bug-batchActivate','',''),(408,'manager','de','build','',''),(408,'manager','en','build','',''),(408,'manager','fr','build','',''),(408,'manager','zh-cn','build','',''),(408,'manager','zh-tw','build','',''),(409,'priv','de','bug-activateAction','',''),(409,'priv','en','bug-activateAction','',''),(409,'priv','fr','bug-activateAction','',''),(409,'priv','zh-cn','bug-activateAction','',''),(409,'priv','zh-tw','bug-activateAction','',''),(409,'manager','de','executionview','',''),(409,'manager','en','executionview','',''),(409,'manager','fr','executionview','',''),(409,'manager','zh-cn','executionview','',''),(409,'manager','zh-tw','executionview','',''),(410,'priv','de','bug-closeAction','',''),(410,'priv','en','bug-closeAction','',''),(410,'priv','fr','bug-closeAction','',''),(410,'priv','zh-cn','bug-closeAction','',''),(410,'priv','zh-tw','bug-closeAction','',''),(410,'manager','de','executiongantt','',''),(410,'manager','en','executiongantt','',''),(410,'manager','fr','executiongantt','',''),(410,'manager','zh-cn','executiongantt','',''),(410,'manager','zh-tw','executiongantt','',''),(411,'priv','de','bug-reportAction','',''),(411,'priv','en','bug-reportAction','',''),(411,'priv','fr','bug-reportAction','',''),(411,'priv','zh-cn','bug-reportAction','',''),(411,'priv','zh-tw','bug-reportAction','',''),(411,'manager','de','executionkanban','',''),(411,'manager','en','executionkanban','',''),(411,'manager','fr','executionkanban','',''),(411,'manager','zh-cn','executionkanban','',''),(411,'manager','zh-tw','executionkanban','',''),(412,'priv','de','bug-exportAction','',''),(412,'priv','en','bug-exportAction','',''),(412,'priv','fr','bug-exportAction','',''),(412,'priv','zh-cn','bug-exportAction','',''),(412,'priv','zh-tw','bug-exportAction','',''),(412,'manager','de','executionburn','',''),(412,'manager','en','executionburn','',''),(412,'manager','fr','executionburn','',''),(412,'manager','zh-cn','executionburn','',''),(412,'manager','zh-tw','executionburn','',''),(413,'priv','de','bug-confirmStoryChange','',''),(413,'priv','en','bug-confirmStoryChange','',''),(413,'priv','fr','bug-confirmStoryChange','',''),(413,'priv','zh-cn','bug-confirmStoryChange','',''),(413,'priv','zh-tw','bug-confirmStoryChange','',''),(413,'manager','de','executioncfd','',''),(413,'manager','en','executioncfd','',''),(413,'manager','fr','executioncfd','',''),(413,'manager','zh-cn','executioncfd','',''),(413,'manager','zh-tw','executioncfd','',''),(414,'priv','de','bug-deleteAction','',''),(414,'priv','en','bug-deleteAction','',''),(414,'priv','fr','bug-deleteAction','',''),(414,'priv','zh-cn','bug-deleteAction','',''),(414,'priv','zh-tw','bug-deleteAction','',''),(414,'manager','de','executionstory','',''),(414,'manager','en','executionstory','',''),(414,'manager','fr','executionstory','',''),(414,'manager','zh-cn','executionstory','',''),(414,'manager','zh-tw','executionstory','',''),(415,'priv','de','bug-linkBugs','',''),(415,'priv','en','bug-linkBugs','',''),(415,'priv','fr','bug-linkBugs','',''),(415,'priv','zh-cn','bug-linkBugs','',''),(415,'priv','zh-tw','bug-linkBugs','',''),(415,'manager','de','executionqa','',''),(415,'manager','en','executionqa','',''),(415,'manager','fr','executionqa','',''),(415,'manager','zh-cn','executionqa','',''),(415,'manager','zh-tw','executionqa','',''),(416,'priv','de','bug-batchChangeModule','',''),(416,'priv','en','bug-batchChangeModule','',''),(416,'priv','fr','bug-batchChangeModule','',''),(416,'priv','zh-cn','bug-batchChangeModule','',''),(416,'priv','zh-tw','bug-batchChangeModule','',''),(416,'manager','de','executionsettings','',''),(416,'manager','en','executionsettings','',''),(416,'manager','fr','executionsettings','',''),(416,'manager','zh-cn','executionsettings','',''),(416,'manager','zh-tw','executionsettings','',''),(417,'priv','de','bug-batchChangeBranch','',''),(417,'priv','en','bug-batchChangeBranch','',''),(417,'priv','fr','bug-batchChangeBranch','',''),(417,'priv','zh-cn','bug-batchChangeBranch','',''),(417,'priv','zh-tw','bug-batchChangeBranch','',''),(417,'manager','de','kanban','',''),(417,'manager','en','kanban','',''),(417,'manager','fr','kanban','',''),(417,'manager','zh-cn','kanban','',''),(417,'manager','zh-tw','kanban','',''),(418,'priv','de','bug-batchChangePlan','',''),(418,'priv','en','bug-batchChangePlan','',''),(418,'priv','fr','bug-batchChangePlan','',''),(418,'priv','zh-cn','bug-batchChangePlan','',''),(418,'priv','zh-tw','bug-batchChangePlan','',''),(418,'manager','de','kanban','',''),(418,'manager','en','kanban','',''),(418,'manager','fr','kanban','',''),(418,'manager','zh-cn','kanban','',''),(418,'manager','zh-tw','kanban','',''),(419,'priv','de','bug-importCase','',''),(419,'priv','en','bug-importCase','',''),(419,'priv','fr','bug-importCase','',''),(419,'priv','zh-cn','bug-importCase','',''),(419,'priv','zh-tw','bug-importCase','',''),(419,'manager','de','managespace','',''),(419,'manager','en','managespace','',''),(419,'manager','fr','managespace','',''),(419,'manager','zh-cn','managespace','',''),(419,'manager','zh-tw','managespace','',''),(420,'priv','de','bug-exportTemplate','',''),(420,'priv','en','bug-exportTemplate','',''),(420,'priv','fr','bug-exportTemplate','',''),(420,'priv','zh-cn','bug-exportTemplate','',''),(420,'priv','zh-tw','bug-exportTemplate','',''),(420,'manager','de','qa','',''),(420,'manager','en','qa','',''),(420,'manager','fr','qa','',''),(420,'manager','zh-cn','qa','',''),(420,'manager','zh-tw','qa','',''),(421,'priv','de','testcase-browse','',''),(421,'priv','en','testcase-browse','',''),(421,'priv','fr','testcase-browse','',''),(421,'priv','zh-cn','testcase-browse','',''),(421,'priv','zh-tw','testcase-browse','',''),(421,'manager','de','qa','',''),(421,'manager','en','qa','',''),(421,'manager','fr','qa','',''),(421,'manager','zh-cn','qa','',''),(421,'manager','zh-tw','qa','',''),(422,'priv','de','testcase-groupCase','',''),(422,'priv','en','testcase-groupCase','',''),(422,'priv','fr','testcase-groupCase','',''),(422,'priv','zh-cn','testcase-groupCase','',''),(422,'priv','zh-tw','testcase-groupCase','',''),(422,'manager','de','bug','',''),(422,'manager','en','bug','',''),(422,'manager','fr','bug','',''),(422,'manager','zh-cn','bug','',''),(422,'manager','zh-tw','bug','',''),(423,'priv','de','testcase-zeroCase','',''),(423,'priv','en','testcase-zeroCase','',''),(423,'priv','fr','testcase-zeroCase','',''),(423,'priv','zh-cn','testcase-zeroCase','',''),(423,'priv','zh-tw','testcase-zeroCase','',''),(423,'manager','de','testcase','',''),(423,'manager','en','testcase','',''),(423,'manager','fr','testcase','',''),(423,'manager','zh-cn','testcase','',''),(423,'manager','zh-tw','testcase','',''),(424,'priv','de','testcase-create','',''),(424,'priv','en','testcase-create','',''),(424,'priv','fr','testcase-create','',''),(424,'priv','zh-cn','testcase-create','',''),(424,'priv','zh-tw','testcase-create','',''),(424,'manager','de','testtask','',''),(424,'manager','en','testtask','',''),(424,'manager','fr','testtask','',''),(424,'manager','zh-cn','testtask','',''),(424,'manager','zh-tw','testtask','',''),(425,'priv','de','testcase-batchCreate','',''),(425,'priv','en','testcase-batchCreate','',''),(425,'priv','fr','testcase-batchCreate','',''),(425,'priv','zh-cn','testcase-batchCreate','',''),(425,'priv','zh-tw','testcase-batchCreate','',''),(425,'manager','de','testsuite','',''),(425,'manager','en','testsuite','',''),(425,'manager','fr','testsuite','',''),(425,'manager','zh-cn','testsuite','',''),(425,'manager','zh-tw','testsuite','',''),(426,'priv','de','testcase-createBug','',''),(426,'priv','en','testcase-createBug','',''),(426,'priv','fr','testcase-createBug','',''),(426,'priv','zh-cn','testcase-createBug','',''),(426,'priv','zh-tw','testcase-createBug','',''),(426,'manager','de','testreport','',''),(426,'manager','en','testreport','',''),(426,'manager','fr','testreport','',''),(426,'manager','zh-cn','testreport','',''),(426,'manager','zh-tw','testreport','',''),(427,'priv','de','testcase-view','',''),(427,'priv','en','testcase-view','',''),(427,'priv','fr','testcase-view','',''),(427,'priv','zh-cn','testcase-view','',''),(427,'priv','zh-tw','testcase-view','',''),(427,'manager','de','zahost','',''),(427,'manager','en','zahost','',''),(427,'manager','fr','zahost','',''),(427,'manager','zh-cn','zahost','',''),(427,'manager','zh-tw','zahost','',''),(428,'priv','de','testcase-edit','',''),(428,'priv','en','testcase-edit','',''),(428,'priv','fr','testcase-edit','',''),(428,'priv','zh-cn','testcase-edit','',''),(428,'priv','zh-tw','testcase-edit','',''),(428,'manager','de','zanode','',''),(428,'manager','en','zanode','',''),(428,'manager','fr','zanode','',''),(428,'manager','zh-cn','zanode','',''),(428,'manager','zh-tw','zanode','',''),(429,'priv','de','testcase-deleteAction','',''),(429,'priv','en','testcase-deleteAction','',''),(429,'priv','fr','testcase-deleteAction','',''),(429,'priv','zh-cn','testcase-deleteAction','',''),(429,'priv','zh-tw','testcase-deleteAction','',''),(429,'manager','de','assetlib','',''),(429,'manager','en','assetlib','',''),(429,'manager','fr','assetlib','',''),(429,'manager','zh-cn','assetlib','',''),(429,'manager','zh-tw','assetlib','',''),(430,'priv','de','testcase-exportAction','',''),(430,'priv','en','testcase-exportAction','',''),(430,'priv','fr','testcase-exportAction','',''),(430,'priv','zh-cn','testcase-exportAction','',''),(430,'priv','zh-tw','testcase-exportAction','',''),(430,'manager','de','caselib','',''),(430,'manager','en','caselib','',''),(430,'manager','fr','caselib','',''),(430,'manager','zh-cn','caselib','',''),(430,'manager','zh-tw','caselib','',''),(431,'priv','de','testcase-confirmChange','',''),(431,'priv','en','testcase-confirmChange','',''),(431,'priv','fr','testcase-confirmChange','',''),(431,'priv','zh-cn','testcase-confirmChange','',''),(431,'priv','zh-tw','testcase-confirmChange','',''),(431,'manager','de','assetlib','',''),(431,'manager','en','assetlib','',''),(431,'manager','fr','assetlib','',''),(431,'manager','zh-cn','assetlib','',''),(431,'manager','zh-tw','assetlib','',''),(432,'priv','de','testcase-confirmStoryChange','',''),(432,'priv','en','testcase-confirmStoryChange','',''),(432,'priv','fr','testcase-confirmStoryChange','',''),(432,'priv','zh-cn','testcase-confirmStoryChange','',''),(432,'priv','zh-tw','testcase-confirmStoryChange','',''),(432,'manager','de','storylib','',''),(432,'manager','en','storylib','',''),(432,'manager','fr','storylib','',''),(432,'manager','zh-cn','storylib','',''),(432,'manager','zh-tw','storylib','',''),(433,'priv','de','testcase-batchEdit','',''),(433,'priv','en','testcase-batchEdit','',''),(433,'priv','fr','testcase-batchEdit','',''),(433,'priv','zh-cn','testcase-batchEdit','',''),(433,'priv','zh-tw','testcase-batchEdit','',''),(433,'manager','de','issuelib','',''),(433,'manager','en','issuelib','',''),(433,'manager','fr','issuelib','',''),(433,'manager','zh-cn','issuelib','',''),(433,'manager','zh-tw','issuelib','',''),(434,'priv','de','testcase-batchDelete','',''),(434,'priv','en','testcase-batchDelete','',''),(434,'priv','fr','testcase-batchDelete','',''),(434,'priv','zh-cn','testcase-batchDelete','',''),(434,'priv','zh-tw','testcase-batchDelete','',''),(434,'manager','de','risklib','',''),(434,'manager','en','risklib','',''),(434,'manager','fr','risklib','',''),(434,'manager','zh-cn','risklib','',''),(434,'manager','zh-tw','risklib','',''),(435,'priv','de','testcase-batchChangeModule','',''),(435,'priv','en','testcase-batchChangeModule','',''),(435,'priv','fr','testcase-batchChangeModule','',''),(435,'priv','zh-cn','testcase-batchChangeModule','',''),(435,'priv','zh-tw','testcase-batchChangeModule','',''),(435,'manager','de','opportunitylib','',''),(435,'manager','en','opportunitylib','',''),(435,'manager','fr','opportunitylib','',''),(435,'manager','zh-cn','opportunitylib','',''),(435,'manager','zh-tw','opportunitylib','',''),(436,'priv','de','testcase-batchChangeBranch','',''),(436,'priv','en','testcase-batchChangeBranch','',''),(436,'priv','fr','testcase-batchChangeBranch','',''),(436,'priv','zh-cn','testcase-batchChangeBranch','',''),(436,'priv','zh-tw','testcase-batchChangeBranch','',''),(436,'manager','de','practicelib','',''),(436,'manager','en','practicelib','',''),(436,'manager','fr','practicelib','',''),(436,'manager','zh-cn','practicelib','',''),(436,'manager','zh-tw','practicelib','',''),(437,'priv','de','testcase-linkCases','',''),(437,'priv','en','testcase-linkCases','',''),(437,'priv','fr','testcase-linkCases','',''),(437,'priv','zh-cn','testcase-linkCases','',''),(437,'priv','zh-tw','testcase-linkCases','',''),(437,'manager','de','componentlib','',''),(437,'manager','en','componentlib','',''),(437,'manager','fr','componentlib','',''),(437,'manager','zh-cn','componentlib','',''),(437,'manager','zh-tw','componentlib','',''),(438,'priv','de','testcase-linkBugs','',''),(438,'priv','en','testcase-linkBugs','',''),(438,'priv','fr','testcase-linkBugs','',''),(438,'priv','zh-cn','testcase-linkBugs','',''),(438,'priv','zh-tw','testcase-linkBugs','',''),(438,'manager','de','doc','',''),(438,'manager','en','doc','',''),(438,'manager','fr','doc','',''),(438,'manager','zh-cn','doc','',''),(438,'manager','zh-tw','doc','',''),(439,'priv','de','testcase-bugs','',''),(439,'priv','en','testcase-bugs','',''),(439,'priv','fr','testcase-bugs','',''),(439,'priv','zh-cn','testcase-bugs','',''),(439,'priv','zh-tw','testcase-bugs','',''),(439,'manager','de','doc','',''),(439,'manager','en','doc','',''),(439,'manager','fr','doc','',''),(439,'manager','zh-cn','doc','',''),(439,'manager','zh-tw','doc','',''),(440,'priv','de','testcase-review','',''),(440,'priv','en','testcase-review','',''),(440,'priv','fr','testcase-review','',''),(440,'priv','zh-cn','testcase-review','',''),(440,'priv','zh-tw','testcase-review','',''),(440,'manager','de','api','',''),(440,'manager','en','api','',''),(440,'manager','fr','api','',''),(440,'manager','zh-cn','api','',''),(440,'manager','zh-tw','api','',''),(441,'priv','de','testcase-batchReview','',''),(441,'priv','en','testcase-batchReview','',''),(441,'priv','fr','testcase-batchReview','',''),(441,'priv','zh-cn','testcase-batchReview','',''),(441,'priv','zh-tw','testcase-batchReview','',''),(441,'manager','de','bi','',''),(441,'manager','en','bi','',''),(441,'manager','fr','bi','',''),(441,'manager','zh-cn','bi','',''),(441,'manager','zh-tw','bi','',''),(442,'priv','de','testcase-batchConfirmStoryChange','',''),(442,'priv','en','testcase-batchConfirmStoryChange','',''),(442,'priv','fr','testcase-batchConfirmStoryChange','',''),(442,'priv','zh-cn','testcase-batchConfirmStoryChange','',''),(442,'priv','zh-tw','testcase-batchConfirmStoryChange','',''),(442,'manager','de','screen','',''),(442,'manager','en','screen','',''),(442,'manager','fr','screen','',''),(442,'manager','zh-cn','screen','',''),(442,'manager','zh-tw','screen','',''),(443,'priv','de','testcase-importFromLib','',''),(443,'priv','en','testcase-importFromLib','',''),(443,'priv','fr','testcase-importFromLib','',''),(443,'priv','zh-cn','testcase-importFromLib','',''),(443,'priv','zh-tw','testcase-importFromLib','',''),(443,'manager','de','pivot','',''),(443,'manager','en','pivot','',''),(443,'manager','fr','pivot','',''),(443,'manager','zh-cn','pivot','',''),(443,'manager','zh-tw','pivot','',''),(444,'priv','de','testcase-batchCaseTypeChange','',''),(444,'priv','en','testcase-batchCaseTypeChange','',''),(444,'priv','fr','testcase-batchCaseTypeChange','',''),(444,'priv','zh-cn','testcase-batchCaseTypeChange','',''),(444,'priv','zh-tw','testcase-batchCaseTypeChange','',''),(444,'manager','de','chart','',''),(444,'manager','en','chart','',''),(444,'manager','fr','chart','',''),(444,'manager','zh-cn','chart','',''),(444,'manager','zh-tw','chart','',''),(445,'priv','de','testcase-confirmLibcaseChange','',''),(445,'priv','en','testcase-confirmLibcaseChange','',''),(445,'priv','fr','testcase-confirmLibcaseChange','',''),(445,'priv','zh-cn','testcase-confirmLibcaseChange','',''),(445,'priv','zh-tw','testcase-confirmLibcaseChange','',''),(445,'manager','de','dataview','',''),(445,'manager','en','dataview','',''),(445,'manager','fr','dataview','',''),(445,'manager','zh-cn','dataview','',''),(445,'manager','zh-tw','dataview','',''),(446,'priv','de','testcase-ignoreLibcaseChange','',''),(446,'priv','en','testcase-ignoreLibcaseChange','',''),(446,'priv','fr','testcase-ignoreLibcaseChange','',''),(446,'priv','zh-cn','testcase-ignoreLibcaseChange','',''),(446,'priv','zh-tw','testcase-ignoreLibcaseChange','',''),(446,'manager','de','dimension','',''),(446,'manager','en','dimension','',''),(446,'manager','fr','dimension','',''),(446,'manager','zh-cn','dimension','',''),(446,'manager','zh-tw','dimension','',''),(447,'priv','de','testcase-importToLib','',''),(447,'priv','en','testcase-importToLib','',''),(447,'priv','fr','testcase-importToLib','',''),(447,'priv','zh-cn','testcase-importToLib','',''),(447,'priv','zh-tw','testcase-importToLib','',''),(447,'manager','de','report','',''),(447,'manager','en','report','',''),(447,'manager','fr','report','',''),(447,'manager','zh-cn','report','',''),(447,'manager','zh-tw','report','',''),(448,'priv','de','testcase-automation','',''),(448,'priv','en','testcase-automation','',''),(448,'priv','fr','testcase-automation','',''),(448,'priv','zh-cn','testcase-automation','',''),(448,'priv','zh-tw','testcase-automation','',''),(448,'manager','de','bidesign','',''),(448,'manager','en','bidesign','',''),(448,'manager','fr','bidesign','',''),(448,'manager','zh-cn','bidesign','',''),(448,'manager','zh-tw','bidesign','',''),(449,'priv','de','testcase-showScript','',''),(449,'priv','en','testcase-showScript','',''),(449,'priv','fr','testcase-showScript','',''),(449,'priv','zh-cn','testcase-showScript','',''),(449,'priv','zh-tw','testcase-showScript','',''),(449,'manager','de','system','',''),(449,'manager','en','system','',''),(449,'manager','fr','system','',''),(449,'manager','zh-cn','system','',''),(449,'manager','zh-tw','system','',''),(450,'priv','de','testcase-exportTemplate','',''),(450,'priv','en','testcase-exportTemplate','',''),(450,'priv','fr','testcase-exportTemplate','',''),(450,'priv','zh-cn','testcase-exportTemplate','',''),(450,'priv','zh-tw','testcase-exportTemplate','',''),(450,'manager','de','company','',''),(450,'manager','en','company','',''),(450,'manager','fr','company','',''),(450,'manager','zh-cn','company','',''),(450,'manager','zh-tw','company','',''),(451,'priv','de','testcase-importCaseAction','',''),(451,'priv','en','testcase-importCaseAction','',''),(451,'priv','fr','testcase-importCaseAction','',''),(451,'priv','zh-cn','testcase-importCaseAction','',''),(451,'priv','zh-tw','testcase-importCaseAction','',''),(451,'manager','de','systemteam','',''),(451,'manager','en','systemteam','',''),(451,'manager','fr','systemteam','',''),(451,'manager','zh-cn','systemteam','',''),(451,'manager','zh-tw','systemteam','',''),(452,'manager','de','systemschedule','',''),(452,'manager','en','systemschedule','',''),(452,'manager','fr','systemschedule','',''),(452,'manager','zh-cn','systemschedule','',''),(452,'manager','zh-tw','systemschedule','',''),(453,'priv','de','testcase-submit','',''),(453,'priv','en','testcase-submit','',''),(453,'priv','fr','testcase-submit','',''),(453,'priv','zh-cn','testcase-submit','',''),(453,'priv','zh-tw','testcase-submit','',''),(453,'manager','de','systemeffort','',''),(453,'manager','en','systemeffort','',''),(453,'manager','fr','systemeffort','',''),(453,'manager','zh-cn','systemeffort','',''),(453,'manager','zh-tw','systemeffort','',''),(454,'priv','de','testtask-create','',''),(454,'priv','en','testtask-create','',''),(454,'priv','fr','testtask-create','',''),(454,'priv','zh-cn','testtask-create','',''),(454,'priv','zh-tw','testtask-create','',''),(454,'manager','de','systemdynamic','',''),(454,'manager','en','systemdynamic','',''),(454,'manager','fr','systemdynamic','',''),(454,'manager','zh-cn','systemdynamic','',''),(454,'manager','zh-tw','systemdynamic','',''),(455,'priv','de','testtask-browse','',''),(455,'priv','en','testtask-browse','',''),(455,'priv','fr','testtask-browse','',''),(455,'priv','zh-cn','testtask-browse','',''),(455,'priv','zh-tw','testtask-browse','',''),(455,'manager','de','systemcompany','',''),(455,'manager','en','systemcompany','',''),(455,'manager','fr','systemcompany','',''),(455,'manager','zh-cn','systemcompany','',''),(455,'manager','zh-tw','systemcompany','',''),(456,'priv','de','testtask-viewAction','',''),(456,'priv','en','testtask-viewAction','',''),(456,'priv','fr','testtask-viewAction','',''),(456,'priv','zh-cn','testtask-viewAction','',''),(456,'priv','zh-tw','testtask-viewAction','',''),(456,'manager','de','dataaccess','',''),(456,'manager','en','dataaccess','',''),(456,'manager','fr','dataaccess','',''),(456,'manager','zh-cn','dataaccess','',''),(456,'manager','zh-tw','dataaccess','',''),(457,'priv','de','testtask-casesAction','',''),(457,'priv','en','testtask-casesAction','',''),(457,'priv','fr','testtask-casesAction','',''),(457,'priv','zh-cn','testtask-casesAction','',''),(457,'priv','zh-tw','testtask-casesAction','',''),(457,'manager','de','admin','',''),(457,'manager','en','admin','',''),(457,'manager','fr','admin','',''),(457,'manager','zh-cn','admin','',''),(457,'manager','zh-tw','admin','',''),(458,'priv','de','testtask-groupCase','',''),(458,'priv','en','testtask-groupCase','',''),(458,'priv','fr','testtask-groupCase','',''),(458,'priv','zh-cn','testtask-groupCase','',''),(458,'priv','zh-tw','testtask-groupCase','',''),(458,'manager','de','dept','',''),(458,'manager','en','dept','',''),(458,'manager','fr','dept','',''),(458,'manager','zh-cn','dept','',''),(458,'manager','zh-tw','dept','',''),(459,'priv','de','testtask-edit','',''),(459,'priv','en','testtask-edit','',''),(459,'priv','fr','testtask-edit','',''),(459,'priv','zh-cn','testtask-edit','',''),(459,'priv','zh-tw','testtask-edit','',''),(459,'manager','de','group','',''),(459,'manager','en','group','',''),(459,'manager','fr','group','',''),(459,'manager','zh-cn','group','',''),(459,'manager','zh-tw','group','',''),(460,'priv','de','testtask-startAction','',''),(460,'priv','en','testtask-startAction','',''),(460,'priv','fr','testtask-startAction','',''),(460,'priv','zh-cn','testtask-startAction','',''),(460,'priv','zh-tw','testtask-startAction','',''),(460,'manager','de','user','',''),(460,'manager','en','user','',''),(460,'manager','fr','user','',''),(460,'manager','zh-cn','user','',''),(460,'manager','zh-tw','user','',''),(461,'priv','de','testtask-activateAction','',''),(461,'priv','en','testtask-activateAction','',''),(461,'priv','fr','testtask-activateAction','',''),(461,'priv','zh-cn','testtask-activateAction','',''),(461,'priv','zh-tw','testtask-activateAction','',''),(461,'manager','de','admin','',''),(461,'manager','en','admin','',''),(461,'manager','fr','admin','',''),(461,'manager','zh-cn','admin','',''),(461,'manager','zh-tw','admin','',''),(462,'priv','de','testtask-blockAction','',''),(462,'priv','en','testtask-blockAction','',''),(462,'priv','fr','testtask-blockAction','',''),(462,'priv','zh-cn','testtask-blockAction','',''),(462,'priv','zh-tw','testtask-blockAction','',''),(462,'manager','de','stage','',''),(462,'manager','en','stage','',''),(462,'manager','fr','stage','',''),(462,'manager','zh-cn','stage','',''),(462,'manager','zh-tw','stage','',''),(463,'priv','de','testtask-closeAction','',''),(463,'priv','en','testtask-closeAction','',''),(463,'priv','fr','testtask-closeAction','',''),(463,'priv','zh-cn','testtask-closeAction','',''),(463,'priv','zh-tw','testtask-closeAction','',''),(463,'manager','de','extension','',''),(463,'manager','en','extension','',''),(463,'manager','fr','extension','',''),(463,'manager','zh-cn','extension','',''),(463,'manager','zh-tw','extension','',''),(464,'priv','de','testtask-delete','',''),(464,'priv','en','testtask-delete','',''),(464,'priv','fr','testtask-delete','',''),(464,'priv','zh-cn','testtask-delete','',''),(464,'priv','zh-tw','testtask-delete','',''),(464,'manager','de','custom','',''),(464,'manager','en','custom','',''),(464,'manager','fr','custom','',''),(464,'manager','zh-cn','custom','',''),(464,'manager','zh-tw','custom','',''),(465,'priv','de','testtask-batchAssign','',''),(465,'priv','en','testtask-batchAssign','',''),(465,'priv','fr','testtask-batchAssign','',''),(465,'priv','zh-cn','testtask-batchAssign','',''),(465,'priv','zh-tw','testtask-batchAssign','',''),(465,'manager','de','action','',''),(465,'manager','en','action','',''),(465,'manager','fr','action','',''),(465,'manager','zh-cn','action','',''),(465,'manager','zh-tw','action','',''),(466,'priv','de','testtask-linkCase','',''),(466,'priv','en','testtask-linkCase','',''),(466,'priv','fr','testtask-linkCase','',''),(466,'priv','zh-cn','testtask-linkCase','',''),(466,'priv','zh-tw','testtask-linkCase','',''),(466,'manager','de','mail','',''),(466,'manager','en','mail','',''),(466,'manager','fr','mail','',''),(466,'manager','zh-cn','mail','',''),(466,'manager','zh-tw','mail','',''),(467,'priv','de','testtask-lblUnlinkCase','',''),(467,'priv','en','testtask-lblUnlinkCase','',''),(467,'priv','fr','testtask-lblUnlinkCase','',''),(467,'priv','zh-cn','testtask-lblUnlinkCase','',''),(467,'priv','zh-tw','testtask-lblUnlinkCase','',''),(467,'manager','de','sms','',''),(467,'manager','en','sms','',''),(467,'manager','fr','sms','',''),(467,'manager','zh-cn','sms','',''),(467,'manager','zh-tw','sms','',''),(468,'priv','de','testtask-lblRunCase','',''),(468,'priv','en','testtask-lblRunCase','',''),(468,'priv','fr','testtask-lblRunCase','',''),(468,'priv','zh-cn','testtask-lblRunCase','',''),(468,'priv','zh-tw','testtask-lblRunCase','',''),(468,'manager','de','backup','',''),(468,'manager','en','backup','',''),(468,'manager','fr','backup','',''),(468,'manager','zh-cn','backup','',''),(468,'manager','zh-tw','backup','',''),(469,'priv','de','testtask-resultsAction','',''),(469,'priv','en','testtask-resultsAction','',''),(469,'priv','fr','testtask-resultsAction','',''),(469,'priv','zh-cn','testtask-resultsAction','',''),(469,'priv','zh-tw','testtask-resultsAction','',''),(469,'manager','de','cron','',''),(469,'manager','en','cron','',''),(469,'manager','fr','cron','',''),(469,'manager','zh-cn','cron','',''),(469,'manager','zh-tw','cron','',''),(470,'priv','de','testtask-batchUnlinkCases','',''),(470,'priv','en','testtask-batchUnlinkCases','',''),(470,'priv','fr','testtask-batchUnlinkCases','',''),(470,'priv','zh-cn','testtask-batchUnlinkCases','',''),(470,'priv','zh-tw','testtask-batchUnlinkCases','',''),(470,'manager','de','dev','',''),(470,'manager','en','dev','',''),(470,'manager','fr','dev','',''),(470,'manager','zh-cn','dev','',''),(470,'manager','zh-tw','dev','',''),(471,'priv','de','testtask-reportAction','',''),(471,'priv','en','testtask-reportAction','',''),(471,'priv','fr','testtask-reportAction','',''),(471,'priv','zh-cn','testtask-reportAction','',''),(471,'priv','zh-tw','testtask-reportAction','',''),(471,'manager','de','editor','',''),(471,'manager','en','editor','',''),(471,'manager','fr','editor','',''),(471,'manager','zh-cn','editor','',''),(471,'manager','zh-tw','editor','',''),(472,'priv','de','testtask-browseUnits','',''),(472,'priv','en','testtask-browseUnits','',''),(472,'priv','fr','testtask-browseUnits','',''),(472,'priv','zh-cn','testtask-browseUnits','',''),(472,'priv','zh-tw','testtask-browseUnits','',''),(472,'manager','de','holiday','',''),(472,'manager','en','holiday','',''),(472,'manager','fr','holiday','',''),(472,'manager','zh-cn','holiday','',''),(472,'manager','zh-tw','holiday','',''),(473,'priv','de','testtask-unitCases','',''),(473,'priv','en','testtask-unitCases','',''),(473,'priv','fr','testtask-unitCases','',''),(473,'priv','zh-cn','testtask-unitCases','',''),(473,'priv','zh-tw','testtask-unitCases','',''),(473,'manager','de','meetingroom','',''),(473,'manager','en','meetingroom','',''),(473,'manager','fr','meetingroom','',''),(473,'manager','zh-cn','meetingroom','',''),(473,'manager','zh-tw','meetingroom','',''),(474,'priv','de','testtask-importUnitResult','',''),(474,'priv','en','testtask-importUnitResult','',''),(474,'priv','fr','testtask-importUnitResult','',''),(474,'priv','zh-cn','testtask-importUnitResult','',''),(474,'priv','zh-tw','testtask-importUnitResult','',''),(474,'manager','de','webhook','',''),(474,'manager','en','webhook','',''),(474,'manager','fr','webhook','',''),(474,'manager','zh-cn','webhook','',''),(474,'manager','zh-tw','webhook','',''),(475,'priv','de','testtask-batchRun','',''),(475,'priv','en','testtask-batchRun','',''),(475,'priv','fr','testtask-batchRun','',''),(475,'priv','zh-cn','testtask-batchRun','',''),(475,'priv','zh-tw','testtask-batchRun','',''),(475,'manager','de','message','',''),(475,'manager','en','message','',''),(475,'manager','fr','message','',''),(475,'manager','zh-cn','message','',''),(475,'manager','zh-tw','message','',''),(476,'priv','de','testtask-runDeployCase','',''),(476,'priv','en','testtask-runDeployCase','',''),(476,'priv','fr','testtask-runDeployCase','',''),(476,'priv','zh-cn','testtask-runDeployCase','',''),(476,'priv','zh-tw','testtask-runDeployCase','',''),(476,'manager','de','featureswitch','',''),(476,'manager','en','featureswitch','',''),(476,'manager','fr','featureswitch','',''),(476,'manager','zh-cn','featureswitch','',''),(476,'manager','zh-tw','featureswitch','',''),(477,'priv','de','testtask-deployCaseResults','',''),(477,'priv','en','testtask-deployCaseResults','',''),(477,'priv','fr','testtask-deployCaseResults','',''),(477,'priv','zh-cn','testtask-deployCaseResults','',''),(477,'priv','zh-tw','testtask-deployCaseResults','',''),(477,'manager','de','importdata','',''),(477,'manager','en','importdata','',''),(477,'manager','fr','importdata','',''),(477,'manager','zh-cn','importdata','',''),(477,'manager','zh-tw','importdata','',''),(478,'manager','de','systemsetting','',''),(478,'manager','en','systemsetting','',''),(478,'manager','fr','systemsetting','',''),(478,'manager','zh-cn','systemsetting','',''),(478,'manager','zh-tw','systemsetting','',''),(479,'priv','de','testsuite-browse','',''),(479,'priv','en','testsuite-browse','',''),(479,'priv','fr','testsuite-browse','',''),(479,'priv','zh-cn','testsuite-browse','',''),(479,'priv','zh-tw','testsuite-browse','',''),(479,'manager','de','staffmanage','',''),(479,'manager','en','staffmanage','',''),(479,'manager','fr','staffmanage','',''),(479,'manager','zh-cn','staffmanage','',''),(479,'manager','zh-tw','staffmanage','',''),(480,'priv','de','testsuite-create','',''),(480,'priv','en','testsuite-create','',''),(480,'priv','fr','testsuite-create','',''),(480,'priv','zh-cn','testsuite-create','',''),(480,'priv','zh-tw','testsuite-create','',''),(480,'manager','de','modelconfig','',''),(480,'manager','en','modelconfig','',''),(480,'manager','fr','modelconfig','',''),(480,'manager','zh-cn','modelconfig','',''),(480,'manager','zh-tw','modelconfig','',''),(481,'priv','de','testsuite-view','',''),(481,'priv','en','testsuite-view','',''),(481,'priv','fr','testsuite-view','',''),(481,'priv','zh-cn','testsuite-view','',''),(481,'priv','zh-tw','testsuite-view','',''),(481,'manager','de','featureconfig','',''),(481,'manager','en','featureconfig','',''),(481,'manager','fr','featureconfig','',''),(481,'manager','zh-cn','featureconfig','',''),(481,'manager','zh-tw','featureconfig','',''),(482,'priv','de','testsuite-edit','',''),(482,'priv','en','testsuite-edit','',''),(482,'priv','fr','testsuite-edit','',''),(482,'priv','zh-cn','testsuite-edit','',''),(482,'priv','zh-tw','testsuite-edit','',''),(482,'manager','de','doctemplate','',''),(482,'manager','en','doctemplate','',''),(482,'manager','fr','doctemplate','',''),(482,'manager','zh-cn','doctemplate','',''),(482,'manager','zh-tw','doctemplate','',''),(483,'priv','de','testsuite-delete','',''),(483,'priv','en','testsuite-delete','',''),(483,'priv','fr','testsuite-delete','',''),(483,'priv','zh-cn','testsuite-delete','',''),(483,'priv','zh-tw','testsuite-delete','',''),(483,'manager','de','notifysetting','',''),(483,'manager','en','notifysetting','',''),(483,'manager','fr','notifysetting','',''),(483,'manager','zh-cn','notifysetting','',''),(483,'manager','zh-tw','notifysetting','',''),(484,'priv','de','testsuite-linkCase','',''),(484,'priv','en','testsuite-linkCase','',''),(484,'priv','fr','testsuite-linkCase','',''),(484,'priv','zh-cn','testsuite-linkCase','',''),(484,'priv','zh-tw','testsuite-linkCase','',''),(484,'manager','de','ldap','',''),(484,'manager','en','ldap','',''),(484,'manager','fr','ldap','',''),(484,'manager','zh-cn','ldap','',''),(484,'manager','zh-tw','ldap','',''),(485,'priv','de','testsuite-unlinkCaseAction','',''),(485,'priv','en','testsuite-unlinkCaseAction','',''),(485,'priv','fr','testsuite-unlinkCaseAction','',''),(485,'priv','zh-cn','testsuite-unlinkCaseAction','',''),(485,'priv','zh-tw','testsuite-unlinkCaseAction','',''),(485,'manager','de','sqlbuilder','',''),(485,'manager','en','sqlbuilder','',''),(485,'manager','fr','sqlbuilder','',''),(485,'manager','zh-cn','sqlbuilder','',''),(485,'manager','zh-tw','sqlbuilder','',''),(486,'priv','de','testsuite-batchUnlinkCases','',''),(486,'priv','en','testsuite-batchUnlinkCases','',''),(486,'priv','fr','testsuite-batchUnlinkCases','',''),(486,'priv','zh-cn','testsuite-batchUnlinkCases','',''),(486,'priv','zh-tw','testsuite-batchUnlinkCases','',''),(486,'manager','de','holidayseason','',''),(486,'manager','en','holidayseason','',''),(486,'manager','fr','holidayseason','',''),(486,'manager','zh-cn','holidayseason','',''),(486,'manager','zh-tw','holidayseason','',''),(487,'priv','de','testreport-browse','',''),(487,'priv','en','testreport-browse','',''),(487,'priv','fr','testreport-browse','',''),(487,'priv','zh-cn','testreport-browse','',''),(487,'priv','zh-tw','testreport-browse','',''),(487,'manager','de','baseline','',''),(487,'manager','en','baseline','',''),(487,'manager','fr','baseline','',''),(487,'manager','zh-cn','baseline','',''),(487,'manager','zh-tw','baseline','',''),(488,'priv','de','testreport-create','',''),(488,'priv','en','testreport-create','',''),(488,'priv','fr','testreport-create','',''),(488,'priv','zh-cn','testreport-create','',''),(488,'priv','zh-tw','testreport-create','',''),(488,'manager','de','classify','',''),(488,'manager','en','classify','',''),(488,'manager','fr','classify','',''),(488,'manager','zh-cn','classify','',''),(488,'manager','zh-tw','classify','',''),(489,'priv','de','testreport-view','',''),(489,'priv','en','testreport-view','',''),(489,'priv','fr','testreport-view','',''),(489,'priv','zh-cn','testreport-view','',''),(489,'priv','zh-tw','testreport-view','',''),(489,'manager','de','cmcl','',''),(489,'manager','en','cmcl','',''),(489,'manager','fr','cmcl','',''),(489,'manager','zh-cn','cmcl','',''),(489,'manager','zh-tw','cmcl','',''),(490,'priv','de','testreport-delete','',''),(490,'priv','en','testreport-delete','',''),(490,'priv','fr','testreport-delete','',''),(490,'priv','zh-cn','testreport-delete','',''),(490,'priv','zh-tw','testreport-delete','',''),(490,'manager','de','auditcl','',''),(490,'manager','en','auditcl','',''),(490,'manager','fr','auditcl','',''),(490,'manager','zh-cn','auditcl','',''),(490,'manager','zh-tw','auditcl','',''),(491,'priv','de','testreport-edit','',''),(491,'priv','en','testreport-edit','',''),(491,'priv','fr','testreport-edit','',''),(491,'priv','zh-cn','testreport-edit','',''),(491,'priv','zh-tw','testreport-edit','',''),(491,'manager','de','reviewcl','',''),(491,'manager','en','reviewcl','',''),(491,'manager','fr','reviewcl','',''),(491,'manager','zh-cn','reviewcl','',''),(491,'manager','zh-tw','reviewcl','',''),(492,'priv','de','testreport-exportAction','',''),(492,'priv','en','testreport-exportAction','',''),(492,'priv','fr','testreport-exportAction','',''),(492,'priv','zh-cn','testreport-exportAction','',''),(492,'priv','zh-tw','testreport-exportAction','',''),(492,'manager','de','process','',''),(492,'manager','en','process','',''),(492,'manager','fr','process','',''),(492,'manager','zh-cn','process','',''),(492,'manager','zh-tw','process','',''),(493,'priv','de','milestone-indexAction','',''),(493,'priv','en','milestone-indexAction','',''),(493,'priv','fr','milestone-indexAction','',''),(493,'priv','zh-cn','milestone-indexAction','',''),(493,'priv','zh-tw','milestone-indexAction','',''),(493,'manager','de','activity','',''),(493,'manager','en','activity','',''),(493,'manager','fr','activity','',''),(493,'manager','zh-cn','activity','',''),(493,'manager','zh-tw','activity','',''),(494,'priv','de','milestone-saveOtherProblem','',''),(494,'priv','en','milestone-saveOtherProblem','',''),(494,'priv','fr','milestone-saveOtherProblem','',''),(494,'priv','zh-cn','milestone-saveOtherProblem','',''),(494,'priv','zh-tw','milestone-saveOtherProblem','',''),(494,'manager','de','zoutput','',''),(494,'manager','en','zoutput','',''),(494,'manager','fr','zoutput','',''),(494,'manager','zh-cn','zoutput','',''),(494,'manager','zh-tw','zoutput','',''),(495,'manager','de','subject','',''),(495,'manager','en','subject','',''),(495,'manager','fr','subject','',''),(495,'manager','zh-cn','subject','',''),(495,'manager','zh-tw','subject','',''),(496,'priv','de','caselib-browseAction','',''),(496,'priv','en','caselib-browseAction','',''),(496,'priv','fr','caselib-browseAction','',''),(496,'priv','zh-cn','caselib-browseAction','',''),(496,'priv','zh-tw','caselib-browseAction','',''),(496,'manager','de','approvalflow','',''),(496,'manager','en','approvalflow','',''),(496,'manager','fr','approvalflow','',''),(496,'manager','zh-cn','approvalflow','',''),(496,'manager','zh-tw','approvalflow','',''),(497,'priv','de','caselib-create','',''),(497,'priv','en','caselib-create','',''),(497,'priv','fr','caselib-create','',''),(497,'priv','zh-cn','caselib-create','',''),(497,'priv','zh-tw','caselib-create','',''),(497,'manager','de','reviewsetting','',''),(497,'manager','en','reviewsetting','',''),(497,'manager','fr','reviewsetting','',''),(497,'manager','zh-cn','reviewsetting','',''),(497,'manager','zh-tw','reviewsetting','',''),(498,'priv','de','caselib-edit','',''),(498,'priv','en','caselib-edit','',''),(498,'priv','fr','caselib-edit','',''),(498,'priv','zh-cn','caselib-edit','',''),(498,'priv','zh-tw','caselib-edit','',''),(498,'manager','de','measurement','',''),(498,'manager','en','measurement','',''),(498,'manager','fr','measurement','',''),(498,'manager','zh-cn','measurement','',''),(498,'manager','zh-tw','measurement','',''),(499,'priv','de','caselib-deleteAction','',''),(499,'priv','en','caselib-deleteAction','',''),(499,'priv','fr','caselib-deleteAction','',''),(499,'priv','zh-cn','caselib-deleteAction','',''),(499,'priv','zh-tw','caselib-deleteAction','',''),(499,'manager','de','setting','',''),(499,'manager','en','setting','',''),(499,'manager','fr','setting','',''),(499,'manager','zh-cn','setting','',''),(499,'manager','zh-tw','setting','',''),(500,'priv','de','caselib-view','',''),(500,'priv','en','caselib-view','',''),(500,'priv','fr','caselib-view','',''),(500,'priv','zh-cn','caselib-view','',''),(500,'priv','zh-tw','caselib-view','',''),(500,'manager','de','im','',''),(500,'manager','en','im','',''),(500,'manager','fr','im','',''),(500,'manager','zh-cn','im','',''),(500,'manager','zh-tw','im','',''),(501,'priv','de','caselib-createCase','',''),(501,'priv','en','caselib-createCase','',''),(501,'priv','fr','caselib-createCase','',''),(501,'priv','zh-cn','caselib-createCase','',''),(501,'priv','zh-tw','caselib-createCase','',''),(501,'manager','de','client','',''),(501,'manager','en','client','',''),(501,'manager','fr','client','',''),(501,'manager','zh-cn','client','',''),(501,'manager','zh-tw','client','',''),(502,'priv','de','caselib-batchCreateCase','',''),(502,'priv','en','caselib-batchCreateCase','',''),(502,'priv','fr','caselib-batchCreateCase','',''),(502,'priv','zh-cn','caselib-batchCreateCase','',''),(502,'priv','zh-tw','caselib-batchCreateCase','',''),(502,'manager','de','devops','',''),(502,'manager','en','devops','',''),(502,'manager','fr','devops','',''),(502,'manager','zh-cn','devops','',''),(502,'manager','zh-tw','devops','',''),(503,'priv','de','caselib-exportTemplate','',''),(503,'priv','en','caselib-exportTemplate','',''),(503,'priv','fr','caselib-exportTemplate','',''),(503,'priv','zh-cn','caselib-exportTemplate','',''),(503,'priv','zh-tw','caselib-exportTemplate','',''),(503,'manager','de','svn','',''),(503,'manager','en','svn','',''),(503,'manager','fr','svn','',''),(503,'manager','zh-cn','svn','',''),(503,'manager','zh-tw','svn','',''),(504,'priv','de','caselib-importAction','',''),(504,'priv','en','caselib-importAction','',''),(504,'priv','fr','caselib-importAction','',''),(504,'priv','zh-cn','caselib-importAction','',''),(504,'priv','zh-tw','caselib-importAction','',''),(504,'manager','de','git','',''),(504,'manager','en','git','',''),(504,'manager','fr','git','',''),(504,'manager','zh-cn','git','',''),(504,'manager','zh-tw','git','',''),(505,'priv','de','caselib-showImport','',''),(505,'priv','en','caselib-showImport','',''),(505,'priv','fr','caselib-showImport','',''),(505,'priv','zh-cn','caselib-showImport','',''),(505,'priv','zh-tw','caselib-showImport','',''),(505,'manager','de','mr','',''),(505,'manager','en','mr','',''),(505,'manager','fr','mr','',''),(505,'manager','zh-cn','mr','',''),(505,'manager','zh-tw','mr','',''),(506,'priv','de','zahost-browse','',''),(506,'priv','en','zahost-browse','',''),(506,'priv','fr','zahost-browse','',''),(506,'priv','zh-cn','zahost-browse','',''),(506,'priv','zh-tw','zahost-browse','',''),(506,'manager','de','repo','',''),(506,'manager','en','repo','',''),(506,'manager','fr','repo','',''),(506,'manager','zh-cn','repo','',''),(506,'manager','zh-tw','repo','',''),(507,'priv','de','zahost-create','',''),(507,'priv','en','zahost-create','',''),(507,'priv','fr','zahost-create','',''),(507,'priv','zh-cn','zahost-create','',''),(507,'priv','zh-tw','zahost-create','',''),(507,'manager','de','ci','',''),(507,'manager','en','ci','',''),(507,'manager','fr','ci','',''),(507,'manager','zh-cn','ci','',''),(507,'manager','zh-tw','ci','',''),(508,'priv','de','zahost-editAction','',''),(508,'priv','en','zahost-editAction','',''),(508,'priv','fr','zahost-editAction','',''),(508,'priv','zh-cn','zahost-editAction','',''),(508,'priv','zh-tw','zahost-editAction','',''),(508,'manager','de','compile','',''),(508,'manager','en','compile','',''),(508,'manager','fr','compile','',''),(508,'manager','zh-cn','compile','',''),(508,'manager','zh-tw','compile','',''),(509,'priv','de','zahost-deleteAction','',''),(509,'priv','en','zahost-deleteAction','',''),(509,'priv','fr','zahost-deleteAction','',''),(509,'priv','zh-cn','zahost-deleteAction','',''),(509,'priv','zh-tw','zahost-deleteAction','',''),(509,'manager','de','jenkins','',''),(509,'manager','en','jenkins','',''),(509,'manager','fr','jenkins','',''),(509,'manager','zh-cn','jenkins','',''),(509,'manager','zh-tw','jenkins','',''),(510,'priv','de','zahost-view','',''),(510,'priv','en','zahost-view','',''),(510,'priv','fr','zahost-view','',''),(510,'priv','zh-cn','zahost-view','',''),(510,'priv','zh-tw','zahost-view','',''),(510,'manager','de','job','',''),(510,'manager','en','job','',''),(510,'manager','fr','job','',''),(510,'manager','zh-cn','job','',''),(510,'manager','zh-tw','job','',''),(511,'priv','de','zahost-browseImage','',''),(511,'priv','en','zahost-browseImage','',''),(511,'priv','fr','zahost-browseImage','',''),(511,'priv','zh-cn','zahost-browseImage','',''),(511,'priv','zh-tw','zahost-browseImage','',''),(511,'manager','de','gitlab','',''),(511,'manager','en','gitlab','',''),(511,'manager','fr','gitlab','',''),(511,'manager','zh-cn','gitlab','',''),(511,'manager','zh-tw','gitlab','',''),(512,'priv','de','zahost-downloadImage','',''),(512,'priv','en','zahost-downloadImage','',''),(512,'priv','fr','zahost-downloadImage','',''),(512,'priv','zh-cn','zahost-downloadImage','',''),(512,'priv','zh-tw','zahost-downloadImage','',''),(512,'manager','de','gogs','',''),(512,'manager','en','gogs','',''),(512,'manager','fr','gogs','',''),(512,'manager','zh-cn','gogs','',''),(512,'manager','zh-tw','gogs','',''),(513,'priv','de','zahost-cancel','',''),(513,'priv','en','zahost-cancel','',''),(513,'priv','fr','zahost-cancel','',''),(513,'priv','zh-cn','zahost-cancel','',''),(513,'priv','zh-tw','zahost-cancel','',''),(513,'manager','de','gitea','',''),(513,'manager','en','gitea','',''),(513,'manager','fr','gitea','',''),(513,'manager','zh-cn','gitea','',''),(513,'manager','zh-tw','gitea','',''),(514,'priv','de','zanode-browse','',''),(514,'priv','en','zanode-browse','',''),(514,'priv','fr','zanode-browse','',''),(514,'priv','zh-cn','zanode-browse','',''),(514,'priv','zh-tw','zanode-browse','',''),(514,'manager','de','sonarqube','',''),(514,'manager','en','sonarqube','',''),(514,'manager','fr','sonarqube','',''),(514,'manager','zh-cn','sonarqube','',''),(514,'manager','zh-tw','sonarqube','',''),(515,'priv','de','zanode-create','',''),(515,'priv','en','zanode-create','',''),(515,'priv','fr','zanode-create','',''),(515,'priv','zh-cn','zanode-create','',''),(515,'priv','zh-tw','zanode-create','',''),(515,'manager','de','app','',''),(515,'manager','en','app','',''),(515,'manager','fr','app','',''),(515,'manager','zh-cn','app','',''),(515,'manager','zh-tw','app','',''),(516,'priv','de','zanode-edit','',''),(516,'priv','en','zanode-edit','',''),(516,'priv','fr','zanode-edit','',''),(516,'priv','zh-cn','zanode-edit','',''),(516,'priv','zh-tw','zanode-edit','',''),(516,'manager','de','pipeline','',''),(516,'manager','en','pipeline','',''),(516,'manager','fr','pipeline','',''),(516,'manager','zh-cn','pipeline','',''),(516,'manager','zh-tw','pipeline','',''),(517,'priv','de','zanode-destroy','',''),(517,'priv','en','zanode-destroy','',''),(517,'priv','fr','zanode-destroy','',''),(517,'priv','zh-cn','zanode-destroy','',''),(517,'priv','zh-tw','zanode-destroy','',''),(517,'manager','de','devopssetting','',''),(517,'manager','en','devopssetting','',''),(517,'manager','fr','devopssetting','',''),(517,'manager','zh-cn','devopssetting','',''),(517,'manager','zh-tw','devopssetting','',''),(518,'priv','de','zanode-reboot','',''),(518,'priv','en','zanode-reboot','',''),(518,'priv','fr','zanode-reboot','',''),(518,'priv','zh-cn','zanode-reboot','',''),(518,'priv','zh-tw','zanode-reboot','',''),(518,'manager','de','search','',''),(518,'manager','en','search','',''),(518,'manager','fr','search','',''),(518,'manager','zh-cn','search','',''),(518,'manager','zh-tw','search','',''),(519,'priv','de','zanode-resume','',''),(519,'priv','en','zanode-resume','',''),(519,'priv','fr','zanode-resume','',''),(519,'priv','zh-cn','zanode-resume','',''),(519,'priv','zh-tw','zanode-resume','',''),(519,'manager','de','tree','',''),(519,'manager','en','tree','',''),(519,'manager','fr','tree','',''),(519,'manager','zh-cn','tree','',''),(519,'manager','zh-tw','tree','',''),(520,'priv','de','zanode-getVNC','',''),(520,'priv','en','zanode-getVNC','',''),(520,'priv','fr','zanode-getVNC','',''),(520,'priv','zh-cn','zanode-getVNC','',''),(520,'priv','zh-tw','zanode-getVNC','',''),(520,'manager','de','file','',''),(520,'manager','en','file','',''),(520,'manager','fr','file','',''),(520,'manager','zh-cn','file','',''),(520,'manager','zh-tw','file','',''),(521,'priv','de','zanode-boot','',''),(521,'priv','en','zanode-boot','',''),(521,'priv','fr','zanode-boot','',''),(521,'priv','zh-cn','zanode-boot','',''),(521,'priv','zh-tw','zanode-boot','',''),(521,'manager','de','misc','',''),(521,'manager','en','misc','',''),(521,'manager','fr','misc','',''),(521,'manager','zh-cn','misc','',''),(521,'manager','zh-tw','misc','',''),(522,'priv','de','zanode-shutdown','',''),(522,'priv','en','zanode-shutdown','',''),(522,'priv','fr','zanode-shutdown','',''),(522,'priv','zh-cn','zanode-shutdown','',''),(522,'priv','zh-tw','zanode-shutdown','',''),(522,'manager','de','approval','',''),(522,'manager','en','approval','',''),(522,'manager','fr','approval','',''),(522,'manager','zh-cn','approval','',''),(522,'manager','zh-tw','approval','',''),(523,'priv','de','zanode-view','',''),(523,'priv','en','zanode-view','',''),(523,'priv','fr','zanode-view','',''),(523,'priv','zh-cn','zanode-view','',''),(523,'priv','zh-tw','zanode-view','',''),(523,'manager','de','workflow','',''),(523,'manager','en','workflow','',''),(523,'manager','fr','workflow','',''),(523,'manager','zh-cn','workflow','',''),(523,'manager','zh-tw','workflow','',''),(524,'priv','de','zanode-createImage','',''),(524,'priv','en','zanode-createImage','',''),(524,'priv','fr','zanode-createImage','',''),(524,'priv','zh-cn','zanode-createImage','',''),(524,'priv','zh-tw','zanode-createImage','',''),(524,'manager','de','workflow','',''),(524,'manager','en','workflow','',''),(524,'manager','fr','workflow','',''),(524,'manager','zh-cn','workflow','',''),(524,'manager','zh-tw','workflow','',''),(525,'priv','de','zanode-browseSnapshot','',''),(525,'priv','en','zanode-browseSnapshot','',''),(525,'priv','fr','zanode-browseSnapshot','',''),(525,'priv','zh-cn','zanode-browseSnapshot','',''),(525,'priv','zh-tw','zanode-browseSnapshot','',''),(525,'manager','de','workflowfield','',''),(525,'manager','en','workflowfield','',''),(525,'manager','fr','workflowfield','',''),(525,'manager','zh-cn','workflowfield','',''),(525,'manager','zh-tw','workflowfield','',''),(526,'priv','de','zanode-createSnapshot','',''),(526,'priv','en','zanode-createSnapshot','',''),(526,'priv','fr','zanode-createSnapshot','',''),(526,'priv','zh-cn','zanode-createSnapshot','',''),(526,'priv','zh-tw','zanode-createSnapshot','',''),(526,'manager','de','workflowaction','',''),(526,'manager','en','workflowaction','',''),(526,'manager','fr','workflowaction','',''),(526,'manager','zh-cn','workflowaction','',''),(526,'manager','zh-tw','workflowaction','',''),(527,'priv','de','zanode-editSnapshot','',''),(527,'priv','en','zanode-editSnapshot','',''),(527,'priv','fr','zanode-editSnapshot','',''),(527,'priv','zh-cn','zanode-editSnapshot','',''),(527,'priv','zh-tw','zanode-editSnapshot','',''),(527,'manager','de','workflowlayout','',''),(527,'manager','en','workflowlayout','',''),(527,'manager','fr','workflowlayout','',''),(527,'manager','zh-cn','workflowlayout','',''),(527,'manager','zh-tw','workflowlayout','',''),(528,'priv','de','zanode-restoreSnapshot','',''),(528,'priv','en','zanode-restoreSnapshot','',''),(528,'priv','fr','zanode-restoreSnapshot','',''),(528,'priv','zh-cn','zanode-restoreSnapshot','',''),(528,'priv','zh-tw','zanode-restoreSnapshot','',''),(528,'manager','de','workflowcondition','',''),(528,'manager','en','workflowcondition','',''),(528,'manager','fr','workflowcondition','',''),(528,'manager','zh-cn','workflowcondition','',''),(528,'manager','zh-tw','workflowcondition','',''),(529,'priv','de','zanode-deleteSnapshot','',''),(529,'priv','en','zanode-deleteSnapshot','',''),(529,'priv','fr','zanode-deleteSnapshot','',''),(529,'priv','zh-cn','zanode-deleteSnapshot','',''),(529,'priv','zh-tw','zanode-deleteSnapshot','',''),(529,'manager','de','workflowlinkage','',''),(529,'manager','en','workflowlinkage','',''),(529,'manager','fr','workflowlinkage','',''),(529,'manager','zh-cn','workflowlinkage','',''),(529,'manager','zh-tw','workflowlinkage','',''),(530,'priv','de','zanode-suspend','',''),(530,'priv','en','zanode-suspend','',''),(530,'priv','fr','zanode-suspend','',''),(530,'priv','zh-cn','zanode-suspend','',''),(530,'priv','zh-tw','zanode-suspend','',''),(530,'manager','de','workflowhook','',''),(530,'manager','en','workflowhook','',''),(530,'manager','fr','workflowhook','',''),(530,'manager','zh-cn','workflowhook','',''),(530,'manager','zh-tw','workflowhook','',''),(531,'manager','de','workflowlabel','',''),(531,'manager','en','workflowlabel','',''),(531,'manager','fr','workflowlabel','',''),(531,'manager','zh-cn','workflowlabel','',''),(531,'manager','zh-tw','workflowlabel','',''),(532,'manager','de','workflowrelation','',''),(532,'manager','en','workflowrelation','',''),(532,'manager','fr','workflowrelation','',''),(532,'manager','zh-cn','workflowrelation','',''),(532,'manager','zh-tw','workflowrelation','',''),(533,'manager','de','workflowreport','',''),(533,'manager','en','workflowreport','',''),(533,'manager','fr','workflowreport','',''),(533,'manager','zh-cn','workflowreport','',''),(533,'manager','zh-tw','workflowreport','',''),(534,'manager','de','workflowdatasource','',''),(534,'manager','en','workflowdatasource','',''),(534,'manager','fr','workflowdatasource','',''),(534,'manager','zh-cn','workflowdatasource','',''),(534,'manager','zh-tw','workflowdatasource','',''),(535,'manager','de','workflowrule','',''),(535,'manager','en','workflowrule','',''),(535,'manager','fr','workflowrule','',''),(535,'manager','zh-cn','workflowrule','',''),(535,'manager','zh-tw','workflowrule','',''),(536,'manager','de','datatable','',''),(536,'manager','en','datatable','',''),(536,'manager','fr','datatable','',''),(536,'manager','zh-cn','datatable','',''),(536,'manager','zh-tw','datatable','',''),(537,'manager','de','generalcomment','',''),(537,'manager','en','generalcomment','',''),(537,'manager','fr','generalcomment','',''),(537,'manager','zh-cn','generalcomment','',''),(537,'manager','zh-tw','generalcomment','',''),(538,'manager','de','generalping','',''),(538,'manager','en','generalping','',''),(538,'manager','fr','generalping','',''),(538,'manager','zh-cn','generalping','',''),(538,'manager','zh-tw','generalping','',''),(539,'manager','de','generaltemplate','',''),(539,'manager','en','generaltemplate','',''),(539,'manager','fr','generaltemplate','',''),(539,'manager','zh-cn','generaltemplate','',''),(539,'manager','zh-tw','generaltemplate','',''),(540,'manager','de','generaleffort','',''),(540,'manager','en','generaleffort','',''),(540,'manager','fr','generaleffort','',''),(540,'manager','zh-cn','generaleffort','',''),(540,'manager','zh-tw','generaleffort','',''),(541,'manager','de','feedback','',''),(541,'manager','en','feedback','',''),(541,'manager','fr','feedback','',''),(541,'manager','zh-cn','feedback','',''),(541,'manager','zh-tw','feedback','',''),(542,'manager','de','feedback','',''),(542,'manager','en','feedback','',''),(542,'manager','fr','feedback','',''),(542,'manager','zh-cn','feedback','',''),(542,'manager','zh-tw','feedback','',''),(543,'manager','de','faq','',''),(543,'manager','en','faq','',''),(543,'manager','fr','faq','',''),(543,'manager','zh-cn','faq','',''),(543,'manager','zh-tw','faq','',''),(544,'manager','de','ticket','',''),(544,'manager','en','ticket','',''),(544,'manager','fr','ticket','',''),(544,'manager','zh-cn','ticket','',''),(544,'manager','zh-tw','ticket','',''),(545,'manager','de','feedbackpriv','',''),(545,'manager','en','feedbackpriv','',''),(545,'manager','fr','feedbackpriv','',''),(545,'manager','zh-cn','feedbackpriv','',''),(545,'manager','zh-tw','feedbackpriv','',''),(546,'manager','de','oa','',''),(546,'manager','en','oa','',''),(546,'manager','fr','oa','',''),(546,'manager','zh-cn','oa','',''),(546,'manager','zh-tw','oa','',''),(547,'manager','de','attend','',''),(547,'manager','en','attend','',''),(547,'manager','fr','attend','',''),(547,'manager','zh-cn','attend','',''),(547,'manager','zh-tw','attend','',''),(548,'manager','de','leave','',''),(548,'manager','en','leave','',''),(548,'manager','fr','leave','',''),(548,'manager','zh-cn','leave','',''),(548,'manager','zh-tw','leave','',''),(549,'manager','de','makeup','',''),(549,'manager','en','makeup','',''),(549,'manager','fr','makeup','',''),(549,'manager','zh-cn','makeup','',''),(549,'manager','zh-tw','makeup','',''),(550,'manager','de','overtime','',''),(550,'manager','en','overtime','',''),(550,'manager','fr','overtime','',''),(550,'manager','zh-cn','overtime','',''),(550,'manager','zh-tw','overtime','',''),(551,'manager','de','lieu','',''),(551,'manager','en','lieu','',''),(551,'manager','fr','lieu','',''),(551,'manager','zh-cn','lieu','',''),(551,'manager','zh-tw','lieu','',''),(552,'manager','de','officeapproval','',''),(552,'manager','en','officeapproval','',''),(552,'manager','fr','officeapproval','',''),(552,'manager','zh-cn','officeapproval','',''),(552,'manager','zh-tw','officeapproval','',''),(553,'manager','de','officesetting','',''),(553,'manager','en','officesetting','',''),(553,'manager','fr','officesetting','',''),(553,'manager','zh-cn','officesetting','',''),(553,'manager','zh-tw','officesetting','',''),(554,'manager','de','datapermission','',''),(554,'manager','en','datapermission','',''),(554,'manager','fr','datapermission','',''),(554,'manager','zh-cn','datapermission','',''),(554,'manager','zh-tw','datapermission','',''),(555,'manager','de','officeexport','',''),(555,'manager','en','officeexport','',''),(555,'manager','fr','officeexport','',''),(555,'manager','zh-cn','officeexport','',''),(555,'manager','zh-tw','officeexport','',''),(556,'manager','de','ops','',''),(556,'manager','en','ops','',''),(556,'manager','fr','ops','',''),(556,'manager','zh-cn','ops','',''),(556,'manager','zh-tw','ops','',''),(557,'manager','de','ops','',''),(557,'manager','en','ops','',''),(557,'manager','fr','ops','',''),(557,'manager','zh-cn','ops','',''),(557,'manager','zh-tw','ops','',''),(558,'priv','de','screen-browse','',''),(558,'priv','en','screen-browse','',''),(558,'priv','fr','screen-browse','',''),(558,'priv','zh-cn','screen-browse','',''),(558,'priv','zh-tw','screen-browse','',''),(558,'manager','de','host','',''),(558,'manager','en','host','',''),(558,'manager','fr','host','',''),(558,'manager','zh-cn','host','',''),(558,'manager','zh-tw','host','',''),(559,'priv','de','screen-view','',''),(559,'priv','en','screen-view','',''),(559,'priv','fr','screen-view','',''),(559,'priv','zh-cn','screen-view','',''),(559,'priv','zh-tw','screen-view','',''),(559,'manager','de','serverroom','',''),(559,'manager','en','serverroom','',''),(559,'manager','fr','serverroom','',''),(559,'manager','zh-cn','serverroom','',''),(559,'manager','zh-tw','serverroom','',''),(560,'manager','de','account','',''),(560,'manager','en','account','',''),(560,'manager','fr','account','',''),(560,'manager','zh-cn','account','',''),(560,'manager','zh-tw','account','',''),(561,'manager','de','domain','',''),(561,'manager','en','domain','',''),(561,'manager','fr','domain','',''),(561,'manager','zh-cn','domain','',''),(561,'manager','zh-tw','domain','',''),(562,'manager','de','service','',''),(562,'manager','en','service','',''),(562,'manager','fr','service','',''),(562,'manager','zh-cn','service','',''),(562,'manager','zh-tw','service','',''),(563,'manager','de','deploy','',''),(563,'manager','en','deploy','',''),(563,'manager','fr','deploy','',''),(563,'manager','zh-cn','deploy','',''),(563,'manager','zh-tw','deploy','',''),(564,'manager','de','conference','',''),(564,'manager','en','conference','',''),(564,'manager','fr','conference','',''),(564,'manager','zh-cn','conference','',''),(564,'manager','zh-tw','conference','',''),(565,'manager','de','traincourse','',''),(565,'manager','en','traincourse','',''),(565,'manager','fr','traincourse','',''),(565,'manager','zh-cn','traincourse','',''),(565,'manager','zh-tw','traincourse','',''),(566,'manager','de','traincourse','',''),(566,'manager','en','traincourse','',''),(566,'manager','fr','traincourse','',''),(566,'manager','zh-cn','traincourse','',''),(566,'manager','zh-tw','traincourse','',''),(595,'priv','de','company-browse','',''),(595,'priv','en','company-browse','',''),(595,'priv','fr','company-browse','',''),(595,'priv','zh-cn','company-browse','',''),(595,'priv','zh-tw','company-browse','',''),(596,'priv','de','company-edit','',''),(596,'priv','en','company-edit','',''),(596,'priv','fr','company-edit','',''),(596,'priv','zh-cn','company-edit','',''),(596,'priv','zh-tw','company-edit','',''),(597,'priv','de','company-dynamic','',''),(597,'priv','en','company-dynamic','',''),(597,'priv','fr','company-dynamic','',''),(597,'priv','zh-cn','company-dynamic','',''),(597,'priv','zh-tw','company-dynamic','',''),(598,'priv','de','company-view','',''),(598,'priv','en','company-view','',''),(598,'priv','fr','company-view','',''),(598,'priv','zh-cn','company-view','',''),(598,'priv','zh-tw','company-view','',''),(599,'priv','de','company-companyTodo','',''),(599,'priv','en','company-companyTodo','',''),(599,'priv','fr','company-companyTodo','',''),(599,'priv','zh-cn','company-companyTodo','',''),(599,'priv','zh-tw','company-companyTodo','',''),(600,'priv','de','company-effortCalendar','',''),(600,'priv','en','company-effortCalendar','',''),(600,'priv','fr','company-effortCalendar','',''),(600,'priv','zh-cn','company-effortCalendar','',''),(600,'priv','zh-tw','company-effortCalendar','',''),(601,'priv','de','company-allTodo','',''),(601,'priv','en','company-allTodo','',''),(601,'priv','fr','company-allTodo','',''),(601,'priv','zh-cn','company-allTodo','',''),(601,'priv','zh-tw','company-allTodo','',''),(602,'priv','de','company-companyEffort','',''),(602,'priv','en','company-companyEffort','',''),(602,'priv','fr','company-companyEffort','',''),(602,'priv','zh-cn','company-companyEffort','',''),(602,'priv','zh-tw','company-companyEffort','',''),(603,'priv','de','company-allEffort','',''),(603,'priv','en','company-allEffort','',''),(603,'priv','fr','company-allEffort','',''),(603,'priv','zh-cn','company-allEffort','',''),(603,'priv','zh-tw','company-allEffort','',''),(604,'priv','de','dept-browse','',''),(604,'priv','en','dept-browse','',''),(604,'priv','fr','dept-browse','',''),(604,'priv','zh-cn','dept-browse','',''),(604,'priv','zh-tw','dept-browse','',''),(605,'priv','de','dept-updateOrder','',''),(605,'priv','en','dept-updateOrder','',''),(605,'priv','fr','dept-updateOrder','',''),(605,'priv','zh-cn','dept-updateOrder','',''),(605,'priv','zh-tw','dept-updateOrder','',''),(606,'priv','de','dept-manageChildAction','',''),(606,'priv','en','dept-manageChildAction','',''),(606,'priv','fr','dept-manageChildAction','',''),(606,'priv','zh-cn','dept-manageChildAction','',''),(606,'priv','zh-tw','dept-manageChildAction','',''),(607,'priv','de','dept-edit','',''),(607,'priv','en','dept-edit','',''),(607,'priv','fr','dept-edit','',''),(607,'priv','zh-cn','dept-edit','',''),(607,'priv','zh-tw','dept-edit','',''),(607,'manager','de','demandpool','',''),(607,'manager','en','demandpool','',''),(607,'manager','fr','demandpool','',''),(607,'manager','zh-cn','demandpool','',''),(607,'manager','zh-tw','demandpool','',''),(608,'priv','de','dept-delete','',''),(608,'priv','en','dept-delete','',''),(608,'priv','fr','dept-delete','',''),(608,'priv','zh-cn','dept-delete','',''),(608,'priv','zh-tw','dept-delete','',''),(608,'manager','de','charter','',''),(608,'manager','en','charter','',''),(608,'manager','fr','charter','',''),(608,'manager','zh-cn','charter','',''),(608,'manager','zh-tw','charter','',''),(609,'priv','de','group-browseAction','',''),(609,'priv','en','group-browseAction','',''),(609,'priv','fr','group-browseAction','',''),(609,'priv','zh-cn','group-browseAction','',''),(609,'priv','zh-tw','group-browseAction','',''),(609,'manager','de','charter','',''),(609,'manager','en','charter','',''),(609,'manager','fr','charter','',''),(609,'manager','zh-cn','charter','',''),(609,'manager','zh-tw','charter','',''),(610,'priv','de','group-create','',''),(610,'priv','en','group-create','',''),(610,'priv','fr','group-create','',''),(610,'priv','zh-cn','group-create','',''),(610,'priv','zh-tw','group-create','',''),(610,'manager','de','demandpool','',''),(610,'manager','en','demandpool','',''),(610,'manager','fr','demandpool','',''),(610,'manager','zh-cn','demandpool','',''),(610,'manager','zh-tw','demandpool','',''),(611,'priv','de','group-edit','',''),(611,'priv','en','group-edit','',''),(611,'priv','fr','group-edit','',''),(611,'priv','zh-cn','group-edit','',''),(611,'priv','zh-tw','group-edit','',''),(611,'manager','de','demand','',''),(611,'manager','en','demand','',''),(611,'manager','fr','demand','',''),(611,'manager','zh-cn','demand','',''),(611,'manager','zh-tw','demand','',''),(612,'priv','de','group-copy','',''),(612,'priv','en','group-copy','',''),(612,'priv','fr','group-copy','',''),(612,'priv','zh-cn','group-copy','',''),(612,'priv','zh-tw','group-copy','',''),(612,'manager','de','roadmap','',''),(612,'manager','en','roadmap','',''),(612,'manager','fr','roadmap','',''),(612,'manager','zh-cn','roadmap','',''),(612,'manager','zh-tw','roadmap','',''),(613,'priv','de','group-delete','',''),(613,'priv','en','group-delete','',''),(613,'priv','fr','group-delete','',''),(613,'priv','zh-cn','group-delete','',''),(613,'priv','zh-tw','group-delete','',''),(614,'priv','de','group-managePriv','',''),(614,'priv','en','group-managePriv','',''),(614,'priv','fr','group-managePriv','',''),(614,'priv','zh-cn','group-managePriv','',''),(614,'priv','zh-tw','group-managePriv','',''),(615,'priv','de','group-manageMember','',''),(615,'priv','en','group-manageMember','',''),(615,'priv','fr','group-manageMember','',''),(615,'priv','zh-cn','group-manageMember','',''),(615,'priv','zh-tw','group-manageMember','',''),(616,'priv','de','group-manageProjectAdmin','',''),(616,'priv','en','group-manageProjectAdmin','',''),(616,'priv','fr','group-manageProjectAdmin','',''),(616,'priv','zh-cn','group-manageProjectAdmin','',''),(616,'priv','zh-tw','group-manageProjectAdmin','',''),(618,'priv','de','group-manageView','',''),(618,'priv','en','group-manageView','',''),(618,'priv','fr','group-manageView','',''),(618,'priv','zh-cn','group-manageView','',''),(618,'priv','zh-tw','group-manageView','',''),(624,'priv','de','user-create','',''),(624,'priv','en','user-create','',''),(624,'priv','fr','user-create','',''),(624,'priv','zh-cn','user-create','',''),(624,'priv','zh-tw','user-create','',''),(625,'priv','de','user-batchCreate','',''),(625,'priv','en','user-batchCreate','',''),(625,'priv','fr','user-batchCreate','',''),(625,'priv','zh-cn','user-batchCreate','',''),(625,'priv','zh-tw','user-batchCreate','',''),(626,'priv','de','user-view','',''),(626,'priv','en','user-view','',''),(626,'priv','fr','user-view','',''),(626,'priv','zh-cn','user-view','',''),(626,'priv','zh-tw','user-view','',''),(627,'priv','de','user-edit','',''),(627,'priv','en','user-edit','',''),(627,'priv','fr','user-edit','',''),(627,'priv','zh-cn','user-edit','',''),(627,'priv','zh-tw','user-edit','',''),(628,'priv','de','user-unlock','',''),(628,'priv','en','user-unlock','',''),(628,'priv','fr','user-unlock','',''),(628,'priv','zh-cn','user-unlock','',''),(628,'priv','zh-tw','user-unlock','',''),(629,'priv','de','user-delete','',''),(629,'priv','en','user-delete','',''),(629,'priv','fr','user-delete','',''),(629,'priv','zh-cn','user-delete','',''),(629,'priv','zh-tw','user-delete','',''),(630,'priv','de','user-todo','',''),(630,'priv','en','user-todo','',''),(630,'priv','fr','user-todo','',''),(630,'priv','zh-cn','user-todo','',''),(630,'priv','zh-tw','user-todo','',''),(631,'priv','de','user-task','',''),(631,'priv','en','user-task','',''),(631,'priv','fr','user-task','',''),(631,'priv','zh-cn','user-task','',''),(631,'priv','zh-tw','user-task','',''),(632,'priv','de','user-bug','',''),(632,'priv','en','user-bug','',''),(632,'priv','fr','user-bug','',''),(632,'priv','zh-cn','user-bug','',''),(632,'priv','zh-tw','user-bug','',''),(633,'priv','de','user-dynamic','',''),(633,'priv','en','user-dynamic','',''),(633,'priv','fr','user-dynamic','',''),(633,'priv','zh-cn','user-dynamic','',''),(633,'priv','zh-tw','user-dynamic','',''),(635,'priv','de','user-profile','',''),(635,'priv','en','user-profile','',''),(635,'priv','fr','user-profile','',''),(635,'priv','zh-cn','user-profile','',''),(635,'priv','zh-tw','user-profile','',''),(635,'manager','zh-cn','','浏览需求池',''),(636,'priv','de','user-batchEdit','',''),(636,'priv','en','user-batchEdit','',''),(636,'priv','fr','user-batchEdit','',''),(636,'priv','zh-cn','user-batchEdit','',''),(636,'priv','zh-tw','user-batchEdit','',''),(636,'manager','zh-cn','','浏览立项',''),(637,'priv','de','user-unbind','',''),(637,'priv','en','user-unbind','',''),(637,'priv','fr','user-unbind','',''),(637,'priv','zh-cn','user-unbind','',''),(637,'priv','zh-tw','user-unbind','',''),(637,'manager','zh-cn','','创建维护需求池',''),(638,'priv','de','user-setPublicTemplate','',''),(638,'priv','en','user-setPublicTemplate','',''),(638,'priv','fr','user-setPublicTemplate','',''),(638,'priv','zh-cn','user-setPublicTemplate','',''),(638,'priv','zh-tw','user-setPublicTemplate','',''),(638,'manager','zh-cn','','创建维护立项',''),(639,'priv','de','user-export','',''),(639,'priv','en','user-export','',''),(639,'priv','fr','user-export','',''),(639,'priv','zh-cn','user-export','',''),(639,'priv','zh-tw','user-export','',''),(639,'manager','zh-cn','','立项审批',''),(640,'priv','de','user-exportTemplate','',''),(640,'priv','en','user-exportTemplate','',''),(640,'priv','fr','user-exportTemplate','',''),(640,'priv','zh-cn','user-exportTemplate','',''),(640,'priv','zh-tw','user-exportTemplate','',''),(640,'manager','zh-cn','','浏览需求',''),(641,'priv','de','user-story','',''),(641,'priv','en','user-story','',''),(641,'priv','fr','user-story','',''),(641,'priv','zh-cn','user-story','',''),(641,'priv','zh-tw','user-story','',''),(641,'manager','zh-cn','','创建维护需求',''),(642,'priv','de','user-testTask','',''),(642,'priv','en','user-testTask','',''),(642,'priv','fr','user-testTask','',''),(642,'priv','zh-cn','user-testTask','',''),(642,'priv','zh-tw','user-testTask','',''),(642,'manager','zh-cn','','评审需求',''),(643,'priv','de','user-testCase','',''),(643,'priv','en','user-testCase','',''),(643,'priv','fr','user-testCase','',''),(643,'priv','zh-cn','user-testCase','',''),(643,'priv','zh-tw','user-testCase','',''),(643,'manager','zh-cn','','导入导出需求',''),(644,'priv','de','user-execution','',''),(644,'priv','en','user-execution','',''),(644,'priv','fr','user-execution','',''),(644,'priv','zh-cn','user-execution','',''),(644,'priv','zh-tw','user-execution','',''),(644,'manager','zh-cn','','删除需求',''),(645,'priv','de','user-effortcalendar','',''),(645,'priv','en','user-effortcalendar','',''),(645,'priv','fr','user-effortcalendar','',''),(645,'priv','zh-cn','user-effortcalendar','',''),(645,'priv','zh-tw','user-effortcalendar','',''),(645,'manager','zh-cn','','后台',''),(646,'priv','de','user-todocalendar','',''),(646,'priv','en','user-todocalendar','',''),(646,'priv','fr','user-todocalendar','',''),(646,'priv','zh-cn','user-todocalendar','',''),(646,'priv','zh-tw','user-todocalendar','',''),(646,'manager','zh-cn','','浏览产品路标',''),(647,'priv','de','user-effort','',''),(647,'priv','en','user-effort','',''),(647,'priv','fr','user-effort','',''),(647,'priv','zh-cn','user-effort','',''),(647,'priv','zh-tw','user-effort','',''),(647,'manager','zh-cn','','创建维护产品路标',''),(648,'priv','de','user-import','',''),(648,'priv','en','user-import','',''),(648,'priv','fr','user-import','',''),(648,'priv','zh-cn','user-import','',''),(648,'priv','zh-tw','user-import','',''),(648,'manager','zh-cn','','删除产品路标',''),(649,'priv','de','user-importLDAP','',''),(649,'priv','en','user-importLDAP','',''),(649,'priv','fr','user-importLDAP','',''),(649,'priv','zh-cn','user-importLDAP','',''),(649,'priv','zh-tw','user-importLDAP','',''),(649,'manager','zh-cn','','删除需求池',''),(650,'priv','de','user-issue','',''),(650,'priv','en','user-issue','',''),(650,'priv','fr','user-issue','',''),(650,'priv','zh-cn','user-issue','',''),(650,'priv','zh-tw','user-issue','',''),(650,'manager','zh-cn','','导出数据表',''),(651,'priv','de','user-risk','',''),(651,'priv','en','user-risk','',''),(651,'priv','fr','user-risk','',''),(651,'priv','zh-cn','user-risk','',''),(651,'priv','zh-tw','user-risk','',''),(652,'priv','de','admin-index','',''),(652,'priv','en','admin-index','',''),(652,'priv','fr','admin-index','',''),(652,'priv','zh-cn','admin-index','',''),(652,'priv','zh-tw','admin-index','',''),(654,'priv','de','admin-checkWeak','',''),(654,'priv','en','admin-checkWeak','',''),(654,'priv','fr','admin-checkWeak','',''),(654,'priv','zh-cn','admin-checkWeak','',''),(654,'priv','zh-tw','admin-checkWeak','',''),(655,'priv','de','admin-ssoAction','',''),(655,'priv','en','admin-ssoAction','',''),(655,'priv','fr','admin-ssoAction','',''),(655,'priv','zh-cn','admin-ssoAction','',''),(655,'priv','zh-tw','admin-ssoAction','',''),(656,'priv','de','admin-register','',''),(656,'priv','en','admin-register','',''),(656,'priv','fr','admin-register','',''),(656,'priv','zh-cn','admin-register','',''),(656,'priv','zh-tw','admin-register','',''),(657,'priv','de','admin-xuanxuan','',''),(657,'priv','en','admin-xuanxuan','',''),(657,'priv','fr','admin-xuanxuan','',''),(657,'priv','zh-cn','admin-xuanxuan','',''),(657,'priv','zh-tw','admin-xuanxuan','',''),(659,'priv','de','admin-resetPWDSetting','',''),(659,'priv','en','admin-resetPWDSetting','',''),(659,'priv','fr','admin-resetPWDSetting','',''),(659,'priv','zh-cn','admin-resetPWDSetting','',''),(659,'priv','zh-tw','admin-resetPWDSetting','',''),(660,'priv','de','admin-tableEngine','',''),(660,'priv','en','admin-tableEngine','',''),(660,'priv','fr','admin-tableEngine','',''),(660,'priv','zh-cn','admin-tableEngine','',''),(660,'priv','zh-tw','admin-tableEngine','',''),(661,'priv','de','admin-safeIndex','',''),(661,'priv','en','admin-safeIndex','',''),(661,'priv','fr','admin-safeIndex','',''),(661,'priv','zh-cn','admin-safeIndex','',''),(661,'priv','zh-tw','admin-safeIndex','',''),(662,'priv','de','stage-browse','',''),(662,'priv','en','stage-browse','',''),(662,'priv','fr','stage-browse','',''),(662,'priv','zh-cn','stage-browse','',''),(662,'priv','zh-tw','stage-browse','',''),(663,'priv','de','stage-create','',''),(663,'priv','en','stage-create','',''),(663,'priv','fr','stage-create','',''),(663,'priv','zh-cn','stage-create','',''),(663,'priv','zh-tw','stage-create','',''),(664,'priv','de','stage-batchCreate','',''),(664,'priv','en','stage-batchCreate','',''),(664,'priv','fr','stage-batchCreate','',''),(664,'priv','zh-cn','stage-batchCreate','',''),(664,'priv','zh-tw','stage-batchCreate','',''),(665,'priv','de','stage-edit','',''),(665,'priv','en','stage-edit','',''),(665,'priv','fr','stage-edit','',''),(665,'priv','zh-cn','stage-edit','',''),(665,'priv','zh-tw','stage-edit','',''),(666,'priv','de','stage-setType','',''),(666,'priv','en','stage-setType','',''),(666,'priv','fr','stage-setType','',''),(666,'priv','zh-cn','stage-setType','',''),(666,'priv','zh-tw','stage-setType','',''),(667,'priv','de','stage-delete','',''),(667,'priv','en','stage-delete','',''),(667,'priv','fr','stage-delete','',''),(667,'priv','zh-cn','stage-delete','',''),(667,'priv','zh-tw','stage-delete','',''),(668,'priv','de','stage-plusBrowse','',''),(668,'priv','en','stage-plusBrowse','',''),(668,'priv','fr','stage-plusBrowse','',''),(668,'priv','zh-cn','stage-plusBrowse','',''),(668,'priv','zh-tw','stage-plusBrowse','',''),(669,'priv','de','extension-browseAction','',''),(669,'priv','en','extension-browseAction','',''),(669,'priv','fr','extension-browseAction','',''),(669,'priv','zh-cn','extension-browseAction','',''),(669,'priv','zh-tw','extension-browseAction','',''),(670,'priv','de','extension-obtain','',''),(670,'priv','en','extension-obtain','',''),(670,'priv','fr','extension-obtain','',''),(670,'priv','zh-cn','extension-obtain','',''),(670,'priv','zh-tw','extension-obtain','',''),(671,'priv','de','extension-structureAction','',''),(671,'priv','en','extension-structureAction','',''),(671,'priv','fr','extension-structureAction','',''),(671,'priv','zh-cn','extension-structureAction','',''),(671,'priv','zh-tw','extension-structureAction','',''),(672,'priv','de','extension-install','',''),(672,'priv','en','extension-install','',''),(672,'priv','fr','extension-install','',''),(672,'priv','zh-cn','extension-install','',''),(672,'priv','zh-tw','extension-install','',''),(673,'priv','de','extension-uninstallAction','',''),(673,'priv','en','extension-uninstallAction','',''),(673,'priv','fr','extension-uninstallAction','',''),(673,'priv','zh-cn','extension-uninstallAction','',''),(673,'priv','zh-tw','extension-uninstallAction','',''),(674,'priv','de','extension-activateAction','',''),(674,'priv','en','extension-activateAction','',''),(674,'priv','fr','extension-activateAction','',''),(674,'priv','zh-cn','extension-activateAction','',''),(674,'priv','zh-tw','extension-activateAction','',''),(675,'priv','de','extension-deactivateAction','',''),(675,'priv','en','extension-deactivateAction','',''),(675,'priv','fr','extension-deactivateAction','',''),(675,'priv','zh-cn','extension-deactivateAction','',''),(675,'priv','zh-tw','extension-deactivateAction','',''),(676,'priv','de','extension-upload','',''),(676,'priv','en','extension-upload','',''),(676,'priv','fr','extension-upload','',''),(676,'priv','zh-cn','extension-upload','',''),(676,'priv','zh-tw','extension-upload','',''),(677,'priv','de','extension-eraseAction','',''),(677,'priv','en','extension-eraseAction','',''),(677,'priv','fr','extension-eraseAction','',''),(677,'priv','zh-cn','extension-eraseAction','',''),(677,'priv','zh-tw','extension-eraseAction','',''),(678,'priv','de','extension-upgrade','',''),(678,'priv','en','extension-upgrade','',''),(678,'priv','fr','extension-upgrade','',''),(678,'priv','zh-cn','extension-upgrade','',''),(678,'priv','zh-tw','extension-upgrade','',''),(680,'priv','de','custom-set','',''),(680,'priv','en','custom-set','',''),(680,'priv','fr','custom-set','',''),(680,'priv','zh-cn','custom-set','',''),(680,'priv','zh-tw','custom-set','',''),(681,'priv','de','custom-productName','',''),(681,'priv','en','custom-productName','',''),(681,'priv','fr','custom-productName','',''),(681,'priv','zh-cn','custom-productName','',''),(681,'priv','zh-tw','custom-productName','',''),(682,'priv','de','custom-executionCommon','',''),(682,'priv','en','custom-executionCommon','',''),(682,'priv','fr','custom-executionCommon','',''),(682,'priv','zh-cn','custom-executionCommon','',''),(682,'priv','zh-tw','custom-executionCommon','',''),(683,'priv','de','custom-required','',''),(683,'priv','en','custom-required','',''),(683,'priv','fr','custom-required','',''),(683,'priv','zh-cn','custom-required','',''),(683,'priv','zh-tw','custom-required','',''),(684,'priv','de','custom-restore','',''),(684,'priv','en','custom-restore','',''),(684,'priv','fr','custom-restore','',''),(684,'priv','zh-cn','custom-restore','',''),(684,'priv','zh-tw','custom-restore','',''),(685,'priv','de','custom-flow','',''),(685,'priv','en','custom-flow','',''),(685,'priv','fr','custom-flow','',''),(685,'priv','zh-cn','custom-flow','',''),(685,'priv','zh-tw','custom-flow','',''),(687,'priv','de','custom-timezone','',''),(687,'priv','en','custom-timezone','',''),(687,'priv','fr','custom-timezone','',''),(687,'priv','zh-cn','custom-timezone','',''),(687,'priv','zh-tw','custom-timezone','',''),(688,'priv','de','custom-estimate','',''),(688,'priv','en','custom-estimate','',''),(688,'priv','fr','custom-estimate','',''),(688,'priv','zh-cn','custom-estimate','',''),(688,'priv','zh-tw','custom-estimate','',''),(689,'priv','de','custom-editStoryConcept','',''),(689,'priv','en','custom-editStoryConcept','',''),(689,'priv','fr','custom-editStoryConcept','',''),(689,'priv','zh-cn','custom-editStoryConcept','',''),(689,'priv','zh-tw','custom-editStoryConcept','',''),(690,'priv','de','custom-browseStoryConcept','',''),(690,'priv','en','custom-browseStoryConcept','',''),(690,'priv','fr','custom-browseStoryConcept','',''),(690,'priv','zh-cn','custom-browseStoryConcept','',''),(690,'priv','zh-tw','custom-browseStoryConcept','',''),(691,'priv','de','custom-setDefaultConcept','',''),(691,'priv','en','custom-setDefaultConcept','',''),(691,'priv','fr','custom-setDefaultConcept','',''),(691,'priv','zh-cn','custom-setDefaultConcept','',''),(691,'priv','zh-tw','custom-setDefaultConcept','',''),(692,'priv','de','custom-deleteStoryConcept','',''),(692,'priv','en','custom-deleteStoryConcept','',''),(692,'priv','fr','custom-deleteStoryConcept','',''),(692,'priv','zh-cn','custom-deleteStoryConcept','',''),(692,'priv','zh-tw','custom-deleteStoryConcept','',''),(693,'priv','de','custom-kanban','',''),(693,'priv','en','custom-kanban','',''),(693,'priv','fr','custom-kanban','',''),(693,'priv','zh-cn','custom-kanban','',''),(693,'priv','zh-tw','custom-kanban','',''),(694,'priv','de','custom-code','',''),(694,'priv','en','custom-code','',''),(694,'priv','fr','custom-code','',''),(694,'priv','zh-cn','custom-code','',''),(694,'priv','zh-tw','custom-code','',''),(695,'priv','de','custom-hours','',''),(695,'priv','en','custom-hours','',''),(695,'priv','fr','custom-hours','',''),(695,'priv','zh-cn','custom-hours','',''),(695,'priv','zh-tw','custom-hours','',''),(696,'priv','de','custom-percent','',''),(696,'priv','en','custom-percent','',''),(696,'priv','fr','custom-percent','',''),(696,'priv','zh-cn','custom-percent','',''),(696,'priv','zh-tw','custom-percent','',''),(697,'priv','de','custom-setStoryConcept','',''),(697,'priv','en','custom-setStoryConcept','',''),(697,'priv','fr','custom-setStoryConcept','',''),(697,'priv','zh-cn','custom-setStoryConcept','',''),(697,'priv','zh-tw','custom-setStoryConcept','',''),(698,'priv','de','custom-libreOffice','',''),(698,'priv','en','custom-libreOffice','',''),(698,'priv','fr','custom-libreOffice','',''),(698,'priv','zh-cn','custom-libreOffice','',''),(698,'priv','zh-tw','custom-libreOffice','',''),(699,'priv','de','action-trashAction','',''),(699,'priv','en','action-trashAction','',''),(699,'priv','fr','action-trashAction','',''),(699,'priv','zh-cn','action-trashAction','',''),(699,'priv','zh-tw','action-trashAction','',''),(700,'priv','de','action-undeleteAction','',''),(700,'priv','en','action-undeleteAction','',''),(700,'priv','fr','action-undeleteAction','',''),(700,'priv','zh-cn','action-undeleteAction','',''),(700,'priv','zh-tw','action-undeleteAction','',''),(701,'priv','de','action-hideOneAction','',''),(701,'priv','en','action-hideOneAction','',''),(701,'priv','fr','action-hideOneAction','',''),(701,'priv','zh-cn','action-hideOneAction','',''),(701,'priv','zh-tw','action-hideOneAction','',''),(702,'priv','de','action-hideAll','',''),(702,'priv','en','action-hideAll','',''),(702,'priv','fr','action-hideAll','',''),(702,'priv','zh-cn','action-hideAll','',''),(702,'priv','zh-tw','action-hideAll','',''),(703,'priv','de','action-comment','',''),(703,'priv','en','action-comment','',''),(703,'priv','fr','action-comment','',''),(703,'priv','zh-cn','action-comment','',''),(703,'priv','zh-tw','action-comment','',''),(704,'priv','de','action-editComment','',''),(704,'priv','en','action-editComment','',''),(704,'priv','fr','action-editComment','',''),(704,'priv','zh-cn','action-editComment','',''),(704,'priv','zh-tw','action-editComment','',''),(705,'priv','de','mail-index','',''),(705,'priv','en','mail-index','',''),(705,'priv','fr','mail-index','',''),(705,'priv','zh-cn','mail-index','',''),(705,'priv','zh-tw','mail-index','',''),(706,'priv','de','mail-detectAction','',''),(706,'priv','en','mail-detectAction','',''),(706,'priv','fr','mail-detectAction','',''),(706,'priv','zh-cn','mail-detectAction','',''),(706,'priv','zh-tw','mail-detectAction','',''),(707,'priv','de','mail-edit','',''),(707,'priv','en','mail-edit','',''),(707,'priv','fr','mail-edit','',''),(707,'priv','zh-cn','mail-edit','',''),(707,'priv','zh-tw','mail-edit','',''),(708,'priv','de','mail-saveAction','',''),(708,'priv','en','mail-saveAction','',''),(708,'priv','fr','mail-saveAction','',''),(708,'priv','zh-cn','mail-saveAction','',''),(708,'priv','zh-tw','mail-saveAction','',''),(709,'priv','de','mail-test','',''),(709,'priv','en','mail-test','',''),(709,'priv','fr','mail-test','',''),(709,'priv','zh-cn','mail-test','',''),(709,'priv','zh-tw','mail-test','',''),(710,'priv','de','mail-resetAction','',''),(710,'priv','en','mail-resetAction','',''),(710,'priv','fr','mail-resetAction','',''),(710,'priv','zh-cn','mail-resetAction','',''),(710,'priv','zh-tw','mail-resetAction','',''),(711,'priv','de','mail-browse','',''),(711,'priv','en','mail-browse','',''),(711,'priv','fr','mail-browse','',''),(711,'priv','zh-cn','mail-browse','',''),(711,'priv','zh-tw','mail-browse','',''),(712,'priv','de','mail-delete','',''),(712,'priv','en','mail-delete','',''),(712,'priv','fr','mail-delete','',''),(712,'priv','zh-cn','mail-delete','',''),(712,'priv','zh-tw','mail-delete','',''),(713,'priv','de','mail-batchDelete','',''),(713,'priv','en','mail-batchDelete','',''),(713,'priv','fr','mail-batchDelete','',''),(713,'priv','zh-cn','mail-batchDelete','',''),(713,'priv','zh-tw','mail-batchDelete','',''),(714,'priv','de','mail-resendAction','',''),(714,'priv','en','mail-resendAction','',''),(714,'priv','fr','mail-resendAction','',''),(714,'priv','zh-cn','mail-resendAction','',''),(714,'priv','zh-tw','mail-resendAction','',''),(715,'priv','de','sms-index','',''),(715,'priv','en','sms-index','',''),(715,'priv','fr','sms-index','',''),(715,'priv','zh-cn','sms-index','',''),(715,'priv','zh-tw','sms-index','',''),(716,'priv','de','sms-test','',''),(716,'priv','en','sms-test','',''),(716,'priv','fr','sms-test','',''),(716,'priv','zh-cn','sms-test','',''),(716,'priv','zh-tw','sms-test','',''),(717,'priv','de','sms-reset','',''),(717,'priv','en','sms-reset','',''),(717,'priv','fr','sms-reset','',''),(717,'priv','zh-cn','sms-reset','',''),(717,'priv','zh-tw','sms-reset','',''),(718,'priv','de','svn-diff','',''),(718,'priv','en','svn-diff','',''),(718,'priv','fr','svn-diff','',''),(718,'priv','zh-cn','svn-diff','',''),(718,'priv','zh-tw','svn-diff','',''),(719,'priv','de','svn-cat','',''),(719,'priv','en','svn-cat','',''),(719,'priv','fr','svn-cat','',''),(719,'priv','zh-cn','svn-cat','',''),(719,'priv','zh-tw','svn-cat','',''),(720,'priv','de','svn-apiSync','',''),(720,'priv','en','svn-apiSync','',''),(720,'priv','fr','svn-apiSync','',''),(720,'priv','zh-cn','svn-apiSync','',''),(720,'priv','zh-tw','svn-apiSync','',''),(721,'priv','de','git-diff','',''),(721,'priv','en','git-diff','',''),(721,'priv','fr','git-diff','',''),(721,'priv','zh-cn','git-diff','',''),(721,'priv','zh-tw','git-diff','',''),(722,'priv','de','git-cat','',''),(722,'priv','en','git-cat','',''),(722,'priv','fr','git-cat','',''),(722,'priv','zh-cn','git-cat','',''),(722,'priv','zh-tw','git-cat','',''),(723,'priv','de','git-apiSync','',''),(723,'priv','en','git-apiSync','',''),(723,'priv','fr','git-apiSync','',''),(723,'priv','zh-cn','git-apiSync','',''),(723,'priv','zh-tw','git-apiSync','',''),(724,'priv','de','search-buildForm','',''),(724,'priv','en','search-buildForm','',''),(724,'priv','fr','search-buildForm','',''),(724,'priv','zh-cn','search-buildForm','',''),(724,'priv','zh-tw','search-buildForm','',''),(725,'priv','de','search-buildQuery','',''),(725,'priv','en','search-buildQuery','',''),(725,'priv','fr','search-buildQuery','',''),(725,'priv','zh-cn','search-buildQuery','',''),(725,'priv','zh-tw','search-buildQuery','',''),(726,'priv','de','search-saveQuery','',''),(726,'priv','en','search-saveQuery','',''),(726,'priv','fr','search-saveQuery','',''),(726,'priv','zh-cn','search-saveQuery','',''),(726,'priv','zh-tw','search-saveQuery','',''),(727,'priv','de','search-deleteQuery','',''),(727,'priv','en','search-deleteQuery','',''),(727,'priv','fr','search-deleteQuery','',''),(727,'priv','zh-cn','search-deleteQuery','',''),(727,'priv','zh-tw','search-deleteQuery','',''),(728,'priv','de','search-select','',''),(728,'priv','en','search-select','',''),(728,'priv','fr','search-select','',''),(728,'priv','zh-cn','search-select','',''),(728,'priv','zh-tw','search-select','',''),(729,'priv','de','search-index','',''),(729,'priv','en','search-index','',''),(729,'priv','fr','search-index','',''),(729,'priv','zh-cn','search-index','',''),(729,'priv','zh-tw','search-index','',''),(730,'priv','de','search-buildIndex','',''),(730,'priv','en','search-buildIndex','',''),(730,'priv','fr','search-buildIndex','',''),(730,'priv','zh-cn','search-buildIndex','',''),(730,'priv','zh-tw','search-buildIndex','',''),(731,'priv','de','tree-browse','',''),(731,'priv','en','tree-browse','',''),(731,'priv','fr','tree-browse','',''),(731,'priv','zh-cn','tree-browse','',''),(731,'priv','zh-tw','tree-browse','',''),(732,'priv','de','tree-browseTask','',''),(732,'priv','en','tree-browseTask','',''),(732,'priv','fr','tree-browseTask','',''),(732,'priv','zh-cn','tree-browseTask','',''),(732,'priv','zh-tw','tree-browseTask','',''),(733,'priv','de','tree-updateOrder','',''),(733,'priv','en','tree-updateOrder','',''),(733,'priv','fr','tree-updateOrder','',''),(733,'priv','zh-cn','tree-updateOrder','',''),(733,'priv','zh-tw','tree-updateOrder','',''),(734,'priv','de','tree-manageChild','',''),(734,'priv','en','tree-manageChild','',''),(734,'priv','fr','tree-manageChild','',''),(734,'priv','zh-cn','tree-manageChild','',''),(734,'priv','zh-tw','tree-manageChild','',''),(735,'priv','de','tree-edit','',''),(735,'priv','en','tree-edit','',''),(735,'priv','fr','tree-edit','',''),(735,'priv','zh-cn','tree-edit','',''),(735,'priv','zh-tw','tree-edit','',''),(736,'priv','de','tree-delete','',''),(736,'priv','en','tree-delete','',''),(736,'priv','fr','tree-delete','',''),(736,'priv','zh-cn','tree-delete','',''),(736,'priv','zh-tw','tree-delete','',''),(737,'priv','de','tree-editHost','',''),(737,'priv','en','tree-editHost','',''),(737,'priv','fr','tree-editHost','',''),(737,'priv','zh-cn','tree-editHost','',''),(737,'priv','zh-tw','tree-editHost','',''),(738,'priv','de','tree-fix','',''),(738,'priv','en','tree-fix','',''),(738,'priv','fr','tree-fix','',''),(738,'priv','zh-cn','tree-fix','',''),(738,'priv','zh-tw','tree-fix','',''),(739,'priv','de','tree-groupMaintenance','',''),(739,'priv','en','tree-groupMaintenance','',''),(739,'priv','fr','tree-groupMaintenance','',''),(739,'priv','zh-cn','tree-groupMaintenance','',''),(739,'priv','zh-tw','tree-groupMaintenance','',''),(758,'priv','de','file-download','',''),(758,'priv','en','file-download','',''),(758,'priv','fr','file-download','',''),(758,'priv','zh-cn','file-download','',''),(758,'priv','zh-tw','file-download','',''),(759,'priv','de','file-edit','',''),(759,'priv','en','file-edit','',''),(759,'priv','fr','file-edit','',''),(759,'priv','zh-cn','file-edit','',''),(759,'priv','zh-tw','file-edit','',''),(760,'priv','de','file-delete','',''),(760,'priv','en','file-delete','',''),(760,'priv','fr','file-delete','',''),(760,'priv','zh-cn','file-delete','',''),(760,'priv','zh-tw','file-delete','',''),(761,'priv','de','file-uploadImages','',''),(761,'priv','en','file-uploadImages','',''),(761,'priv','fr','file-uploadImages','',''),(761,'priv','zh-cn','file-uploadImages','',''),(761,'priv','zh-tw','file-uploadImages','',''),(762,'priv','de','file-setPublic','',''),(762,'priv','en','file-setPublic','',''),(762,'priv','fr','file-setPublic','',''),(762,'priv','zh-cn','file-setPublic','',''),(762,'priv','zh-tw','file-setPublic','',''),(763,'priv','de','misc-ping','',''),(763,'priv','en','misc-ping','',''),(763,'priv','fr','misc-ping','',''),(763,'priv','zh-cn','misc-ping','',''),(763,'priv','zh-tw','misc-ping','',''),(764,'priv','de','backup-index','',''),(764,'priv','en','backup-index','',''),(764,'priv','fr','backup-index','',''),(764,'priv','zh-cn','backup-index','',''),(764,'priv','zh-tw','backup-index','',''),(765,'priv','de','backup-backup','',''),(765,'priv','en','backup-backup','',''),(765,'priv','fr','backup-backup','',''),(765,'priv','zh-cn','backup-backup','',''),(765,'priv','zh-tw','backup-backup','',''),(766,'priv','de','backup-restoreAction','',''),(766,'priv','en','backup-restoreAction','',''),(766,'priv','fr','backup-restoreAction','',''),(766,'priv','zh-cn','backup-restoreAction','',''),(766,'priv','zh-tw','backup-restoreAction','',''),(767,'priv','de','backup-delete','',''),(767,'priv','en','backup-delete','',''),(767,'priv','fr','backup-delete','',''),(767,'priv','zh-cn','backup-delete','',''),(767,'priv','zh-tw','backup-delete','',''),(768,'priv','de','backup-settingAction','',''),(768,'priv','en','backup-settingAction','',''),(768,'priv','fr','backup-settingAction','',''),(768,'priv','zh-cn','backup-settingAction','',''),(768,'priv','zh-tw','backup-settingAction','',''),(769,'priv','de','backup-rmPHPHeader','',''),(769,'priv','en','backup-rmPHPHeader','',''),(769,'priv','fr','backup-rmPHPHeader','',''),(769,'priv','zh-cn','backup-rmPHPHeader','',''),(769,'priv','zh-tw','backup-rmPHPHeader','',''),(770,'priv','de','backup-change','',''),(770,'priv','en','backup-change','',''),(770,'priv','fr','backup-change','',''),(770,'priv','zh-cn','backup-change','',''),(770,'priv','zh-tw','backup-change','',''),(771,'priv','de','cron-index','',''),(771,'priv','en','cron-index','',''),(771,'priv','fr','cron-index','',''),(771,'priv','zh-cn','cron-index','',''),(771,'priv','zh-tw','cron-index','',''),(772,'priv','de','cron-turnon','',''),(772,'priv','en','cron-turnon','',''),(772,'priv','fr','cron-turnon','',''),(772,'priv','zh-cn','cron-turnon','',''),(772,'priv','zh-tw','cron-turnon','',''),(773,'priv','de','cron-createAction','',''),(773,'priv','en','cron-createAction','',''),(773,'priv','fr','cron-createAction','',''),(773,'priv','zh-cn','cron-createAction','',''),(773,'priv','zh-tw','cron-createAction','',''),(774,'priv','de','cron-edit','',''),(774,'priv','en','cron-edit','',''),(774,'priv','fr','cron-edit','',''),(774,'priv','zh-cn','cron-edit','',''),(774,'priv','zh-tw','cron-edit','',''),(775,'priv','de','cron-toggle','',''),(775,'priv','en','cron-toggle','',''),(775,'priv','fr','cron-toggle','',''),(775,'priv','zh-cn','cron-toggle','',''),(775,'priv','zh-tw','cron-toggle','',''),(776,'priv','de','cron-delete','',''),(776,'priv','en','cron-delete','',''),(776,'priv','fr','cron-delete','',''),(776,'priv','zh-cn','cron-delete','',''),(776,'priv','zh-tw','cron-delete','',''),(777,'priv','de','cron-restart','',''),(777,'priv','en','cron-restart','',''),(777,'priv','fr','cron-restart','',''),(777,'priv','zh-cn','cron-restart','',''),(777,'priv','zh-tw','cron-restart','',''),(778,'priv','de','dev-api','',''),(778,'priv','en','dev-api','',''),(778,'priv','fr','dev-api','',''),(778,'priv','zh-cn','dev-api','',''),(778,'priv','zh-tw','dev-api','',''),(779,'priv','de','dev-db','',''),(779,'priv','en','dev-db','',''),(779,'priv','fr','dev-db','',''),(779,'priv','zh-cn','dev-db','',''),(779,'priv','zh-tw','dev-db','',''),(781,'priv','de','editor-index','',''),(781,'priv','en','editor-index','',''),(781,'priv','fr','editor-index','',''),(781,'priv','zh-cn','editor-index','',''),(781,'priv','zh-tw','editor-index','',''),(782,'priv','de','editor-extend','',''),(782,'priv','en','editor-extend','',''),(782,'priv','fr','editor-extend','',''),(782,'priv','zh-cn','editor-extend','',''),(782,'priv','zh-tw','editor-extend','',''),(783,'priv','de','editor-edit','',''),(783,'priv','en','editor-edit','',''),(783,'priv','fr','editor-edit','',''),(783,'priv','zh-cn','editor-edit','',''),(783,'priv','zh-tw','editor-edit','',''),(784,'priv','de','editor-newPage','',''),(784,'priv','en','editor-newPage','',''),(784,'priv','fr','editor-newPage','',''),(784,'priv','zh-cn','editor-newPage','',''),(784,'priv','zh-tw','editor-newPage','',''),(785,'priv','de','editor-save','',''),(785,'priv','en','editor-save','',''),(785,'priv','fr','editor-save','',''),(785,'priv','zh-cn','editor-save','',''),(785,'priv','zh-tw','editor-save','',''),(786,'priv','de','editor-delete','',''),(786,'priv','en','editor-delete','',''),(786,'priv','fr','editor-delete','',''),(786,'priv','zh-cn','editor-delete','',''),(786,'priv','zh-tw','editor-delete','',''),(787,'priv','de','issue-browse','',''),(787,'priv','en','issue-browse','',''),(787,'priv','fr','issue-browse','',''),(787,'priv','zh-cn','issue-browse','',''),(787,'priv','zh-tw','issue-browse','',''),(788,'priv','de','issue-create','',''),(788,'priv','en','issue-create','',''),(788,'priv','fr','issue-create','',''),(788,'priv','zh-cn','issue-create','',''),(788,'priv','zh-tw','issue-create','',''),(789,'priv','de','issue-batchCreate','',''),(789,'priv','en','issue-batchCreate','',''),(789,'priv','fr','issue-batchCreate','',''),(789,'priv','zh-cn','issue-batchCreate','',''),(789,'priv','zh-tw','issue-batchCreate','',''),(790,'priv','de','issue-deleteAction','',''),(790,'priv','en','issue-deleteAction','',''),(790,'priv','fr','issue-deleteAction','',''),(790,'priv','zh-cn','issue-deleteAction','',''),(790,'priv','zh-tw','issue-deleteAction','',''),(791,'priv','de','issue-editAction','',''),(791,'priv','en','issue-editAction','',''),(791,'priv','fr','issue-editAction','',''),(791,'priv','zh-cn','issue-editAction','',''),(791,'priv','zh-tw','issue-editAction','',''),(792,'priv','de','issue-confirmAction','',''),(792,'priv','en','issue-confirmAction','',''),(792,'priv','fr','issue-confirmAction','',''),(792,'priv','zh-cn','issue-confirmAction','',''),(792,'priv','zh-tw','issue-confirmAction','',''),(793,'priv','de','issue-assignToAction','',''),(793,'priv','en','issue-assignToAction','',''),(793,'priv','fr','issue-assignToAction','',''),(793,'priv','zh-cn','issue-assignToAction','',''),(793,'priv','zh-tw','issue-assignToAction','',''),(794,'priv','de','issue-closeAction','',''),(794,'priv','en','issue-closeAction','',''),(794,'priv','fr','issue-closeAction','',''),(794,'priv','zh-cn','issue-closeAction','',''),(794,'priv','zh-tw','issue-closeAction','',''),(795,'priv','de','issue-cancelAction','',''),(795,'priv','en','issue-cancelAction','',''),(795,'priv','fr','issue-cancelAction','',''),(795,'priv','zh-cn','issue-cancelAction','',''),(795,'priv','zh-tw','issue-cancelAction','',''),(796,'priv','de','issue-activateAction','',''),(796,'priv','en','issue-activateAction','',''),(796,'priv','fr','issue-activateAction','',''),(796,'priv','zh-cn','issue-activateAction','',''),(796,'priv','zh-tw','issue-activateAction','',''),(797,'priv','de','issue-resolveAction','',''),(797,'priv','en','issue-resolveAction','',''),(797,'priv','fr','issue-resolveAction','',''),(797,'priv','zh-cn','issue-resolveAction','',''),(797,'priv','zh-tw','issue-resolveAction','',''),(798,'priv','de','issue-view','',''),(798,'priv','en','issue-view','',''),(798,'priv','fr','issue-view','',''),(798,'priv','zh-cn','issue-view','',''),(798,'priv','zh-tw','issue-view','',''),(799,'priv','de','issue-exportAction','',''),(799,'priv','en','issue-exportAction','',''),(799,'priv','fr','issue-exportAction','',''),(799,'priv','zh-cn','issue-exportAction','',''),(799,'priv','zh-tw','issue-exportAction','',''),(800,'priv','de','issue-importToLib','',''),(800,'priv','en','issue-importToLib','',''),(800,'priv','fr','issue-importToLib','',''),(800,'priv','zh-cn','issue-importToLib','',''),(800,'priv','zh-tw','issue-importToLib','',''),(801,'priv','de','issue-batchImportToLib','',''),(801,'priv','en','issue-batchImportToLib','',''),(801,'priv','fr','issue-batchImportToLib','',''),(801,'priv','zh-cn','issue-batchImportToLib','',''),(801,'priv','zh-tw','issue-batchImportToLib','',''),(802,'priv','de','issue-importFromLib','',''),(802,'priv','en','issue-importFromLib','',''),(802,'priv','fr','issue-importFromLib','',''),(802,'priv','zh-cn','issue-importFromLib','',''),(802,'priv','zh-tw','issue-importFromLib','',''),(803,'priv','de','risk-browse','',''),(803,'priv','en','risk-browse','',''),(803,'priv','fr','risk-browse','',''),(803,'priv','zh-cn','risk-browse','',''),(803,'priv','zh-tw','risk-browse','',''),(804,'priv','de','risk-create','',''),(804,'priv','en','risk-create','',''),(804,'priv','fr','risk-create','',''),(804,'priv','zh-cn','risk-create','',''),(804,'priv','zh-tw','risk-create','',''),(805,'priv','de','risk-edit','',''),(805,'priv','en','risk-edit','',''),(805,'priv','fr','risk-edit','',''),(805,'priv','zh-cn','risk-edit','',''),(805,'priv','zh-tw','risk-edit','',''),(806,'priv','de','risk-deleteAction','',''),(806,'priv','en','risk-deleteAction','',''),(806,'priv','fr','risk-deleteAction','',''),(806,'priv','zh-cn','risk-deleteAction','',''),(806,'priv','zh-tw','risk-deleteAction','',''),(807,'priv','de','risk-activateAction','',''),(807,'priv','en','risk-activateAction','',''),(807,'priv','fr','risk-activateAction','',''),(807,'priv','zh-cn','risk-activateAction','',''),(807,'priv','zh-tw','risk-activateAction','',''),(808,'priv','de','risk-closeAction','',''),(808,'priv','en','risk-closeAction','',''),(808,'priv','fr','risk-closeAction','',''),(808,'priv','zh-cn','risk-closeAction','',''),(808,'priv','zh-tw','risk-closeAction','',''),(809,'priv','de','risk-hangupAction','',''),(809,'priv','en','risk-hangupAction','',''),(809,'priv','fr','risk-hangupAction','',''),(809,'priv','zh-cn','risk-hangupAction','',''),(809,'priv','zh-tw','risk-hangupAction','',''),(810,'priv','de','risk-batchCreate','',''),(810,'priv','en','risk-batchCreate','',''),(810,'priv','fr','risk-batchCreate','',''),(810,'priv','zh-cn','risk-batchCreate','',''),(810,'priv','zh-tw','risk-batchCreate','',''),(811,'priv','de','risk-cancelAction','',''),(811,'priv','en','risk-cancelAction','',''),(811,'priv','fr','risk-cancelAction','',''),(811,'priv','zh-cn','risk-cancelAction','',''),(811,'priv','zh-tw','risk-cancelAction','',''),(812,'priv','de','risk-trackAction','',''),(812,'priv','en','risk-trackAction','',''),(812,'priv','fr','risk-trackAction','',''),(812,'priv','zh-cn','risk-trackAction','',''),(812,'priv','zh-tw','risk-trackAction','',''),(813,'priv','de','risk-view','',''),(813,'priv','en','risk-view','',''),(813,'priv','fr','risk-view','',''),(813,'priv','zh-cn','risk-view','',''),(813,'priv','zh-tw','risk-view','',''),(814,'priv','de','risk-assignToAction','',''),(814,'priv','en','risk-assignToAction','',''),(814,'priv','fr','risk-assignToAction','',''),(814,'priv','zh-cn','risk-assignToAction','',''),(814,'priv','zh-tw','risk-assignToAction','',''),(815,'priv','de','risk-importToLib','',''),(815,'priv','en','risk-importToLib','',''),(815,'priv','fr','risk-importToLib','',''),(815,'priv','zh-cn','risk-importToLib','',''),(815,'priv','zh-tw','risk-importToLib','',''),(816,'priv','de','risk-batchImportToLib','',''),(816,'priv','en','risk-batchImportToLib','',''),(816,'priv','fr','risk-batchImportToLib','',''),(816,'priv','zh-cn','risk-batchImportToLib','',''),(816,'priv','zh-tw','risk-batchImportToLib','',''),(817,'priv','de','risk-importFromLib','',''),(817,'priv','en','risk-importFromLib','',''),(817,'priv','fr','risk-importFromLib','',''),(817,'priv','zh-cn','risk-importFromLib','',''),(817,'priv','zh-tw','risk-importFromLib','',''),(818,'priv','de','risk-exportAction','',''),(818,'priv','en','risk-exportAction','',''),(818,'priv','fr','risk-exportAction','',''),(818,'priv','zh-cn','risk-exportAction','',''),(818,'priv','zh-tw','risk-exportAction','',''),(819,'priv','de','mr-create','',''),(819,'priv','en','mr-create','',''),(819,'priv','fr','mr-create','',''),(819,'priv','zh-cn','mr-create','',''),(819,'priv','zh-tw','mr-create','',''),(820,'priv','de','mr-browseAction','',''),(820,'priv','en','mr-browseAction','',''),(820,'priv','fr','mr-browseAction','',''),(820,'priv','zh-cn','mr-browseAction','',''),(820,'priv','zh-tw','mr-browseAction','',''),(821,'priv','de','mr-edit','',''),(821,'priv','en','mr-edit','',''),(821,'priv','fr','mr-edit','',''),(821,'priv','zh-cn','mr-edit','',''),(821,'priv','zh-tw','mr-edit','',''),(822,'priv','de','mr-delete','',''),(822,'priv','en','mr-delete','',''),(822,'priv','fr','mr-delete','',''),(822,'priv','zh-cn','mr-delete','',''),(822,'priv','zh-tw','mr-delete','',''),(823,'priv','de','mr-viewAction','',''),(823,'priv','en','mr-viewAction','',''),(823,'priv','fr','mr-viewAction','',''),(823,'priv','zh-cn','mr-viewAction','',''),(823,'priv','zh-tw','mr-viewAction','',''),(824,'priv','de','mr-accept','',''),(824,'priv','en','mr-accept','',''),(824,'priv','fr','mr-accept','',''),(824,'priv','zh-cn','mr-accept','',''),(824,'priv','zh-tw','mr-accept','',''),(825,'priv','de','mr-viewDiff','',''),(825,'priv','en','mr-viewDiff','',''),(825,'priv','fr','mr-viewDiff','',''),(825,'priv','zh-cn','mr-viewDiff','',''),(825,'priv','zh-tw','mr-viewDiff','',''),(826,'priv','de','mr-linkList','',''),(826,'priv','en','mr-linkList','',''),(826,'priv','fr','mr-linkList','',''),(826,'priv','zh-cn','mr-linkList','',''),(826,'priv','zh-tw','mr-linkList','',''),(827,'priv','de','mr-linkStory','',''),(827,'priv','en','mr-linkStory','',''),(827,'priv','fr','mr-linkStory','',''),(827,'priv','zh-cn','mr-linkStory','',''),(827,'priv','zh-tw','mr-linkStory','',''),(828,'priv','de','mr-linkBug','',''),(828,'priv','en','mr-linkBug','',''),(828,'priv','fr','mr-linkBug','',''),(828,'priv','zh-cn','mr-linkBug','',''),(828,'priv','zh-tw','mr-linkBug','',''),(829,'priv','de','mr-linkTask','',''),(829,'priv','en','mr-linkTask','',''),(829,'priv','fr','mr-linkTask','',''),(829,'priv','zh-cn','mr-linkTask','',''),(829,'priv','zh-tw','mr-linkTask','',''),(830,'priv','de','mr-unlink','',''),(830,'priv','en','mr-unlink','',''),(830,'priv','fr','mr-unlink','',''),(830,'priv','zh-cn','mr-unlink','',''),(830,'priv','zh-tw','mr-unlink','',''),(831,'priv','de','mr-approval','',''),(831,'priv','en','mr-approval','',''),(831,'priv','fr','mr-approval','',''),(831,'priv','zh-cn','mr-approval','',''),(831,'priv','zh-tw','mr-approval','',''),(832,'priv','de','mr-close','',''),(832,'priv','en','mr-close','',''),(832,'priv','fr','mr-close','',''),(832,'priv','zh-cn','mr-close','',''),(832,'priv','zh-tw','mr-close','',''),(833,'priv','de','mr-reopen','',''),(833,'priv','en','mr-reopen','',''),(833,'priv','fr','mr-reopen','',''),(833,'priv','zh-cn','mr-reopen','',''),(833,'priv','zh-tw','mr-reopen','',''),(834,'priv','de','mr-addReview','',''),(834,'priv','en','mr-addReview','',''),(834,'priv','fr','mr-addReview','',''),(834,'priv','zh-cn','mr-addReview','',''),(834,'priv','zh-tw','mr-addReview','',''),(835,'priv','de','budget-browseAction','',''),(835,'priv','en','budget-browseAction','',''),(835,'priv','fr','budget-browseAction','',''),(835,'priv','zh-cn','budget-browseAction','',''),(835,'priv','zh-tw','budget-browseAction','',''),(836,'priv','de','budget-summaryAction','',''),(836,'priv','en','budget-summaryAction','',''),(836,'priv','fr','budget-summaryAction','',''),(836,'priv','zh-cn','budget-summaryAction','',''),(836,'priv','zh-tw','budget-summaryAction','',''),(837,'priv','de','budget-createAction','',''),(837,'priv','en','budget-createAction','',''),(837,'priv','fr','budget-createAction','',''),(837,'priv','zh-cn','budget-createAction','',''),(837,'priv','zh-tw','budget-createAction','',''),(838,'priv','de','budget-batchCreate','',''),(838,'priv','en','budget-batchCreate','',''),(838,'priv','fr','budget-batchCreate','',''),(838,'priv','zh-cn','budget-batchCreate','',''),(838,'priv','zh-tw','budget-batchCreate','',''),(839,'priv','de','budget-editAction','',''),(839,'priv','en','budget-editAction','',''),(839,'priv','fr','budget-editAction','',''),(839,'priv','zh-cn','budget-editAction','',''),(839,'priv','zh-tw','budget-editAction','',''),(840,'priv','de','budget-viewAction','',''),(840,'priv','en','budget-viewAction','',''),(840,'priv','fr','budget-viewAction','',''),(840,'priv','zh-cn','budget-viewAction','',''),(840,'priv','zh-tw','budget-viewAction','',''),(841,'priv','de','budget-deleteAction','',''),(841,'priv','en','budget-deleteAction','',''),(841,'priv','fr','budget-deleteAction','',''),(841,'priv','zh-cn','budget-deleteAction','',''),(841,'priv','zh-tw','budget-deleteAction','',''),(842,'priv','de','workestimation-index','',''),(842,'priv','en','workestimation-index','',''),(842,'priv','fr','workestimation-index','',''),(842,'priv','zh-cn','workestimation-index','',''),(842,'priv','zh-tw','workestimation-index','',''),(843,'priv','de','durationestimation-indexAction','',''),(843,'priv','en','durationestimation-indexAction','',''),(843,'priv','fr','durationestimation-indexAction','',''),(843,'priv','zh-cn','durationestimation-indexAction','',''),(843,'priv','zh-tw','durationestimation-indexAction','',''),(844,'priv','de','durationestimation-create','',''),(844,'priv','en','durationestimation-create','',''),(844,'priv','fr','durationestimation-create','',''),(844,'priv','zh-cn','durationestimation-create','',''),(844,'priv','zh-tw','durationestimation-create','',''),(845,'priv','de','holiday-browse','',''),(845,'priv','en','holiday-browse','',''),(845,'priv','fr','holiday-browse','',''),(845,'priv','zh-cn','holiday-browse','',''),(845,'priv','zh-tw','holiday-browse','',''),(846,'priv','de','holiday-createAction','',''),(846,'priv','en','holiday-createAction','',''),(846,'priv','fr','holiday-createAction','',''),(846,'priv','zh-cn','holiday-createAction','',''),(846,'priv','zh-tw','holiday-createAction','',''),(847,'priv','de','holiday-editAction','',''),(847,'priv','en','holiday-editAction','',''),(847,'priv','fr','holiday-editAction','',''),(847,'priv','zh-cn','holiday-editAction','',''),(847,'priv','zh-tw','holiday-editAction','',''),(848,'priv','de','holiday-deleteAction','',''),(848,'priv','en','holiday-deleteAction','',''),(848,'priv','fr','holiday-deleteAction','',''),(848,'priv','zh-cn','holiday-deleteAction','',''),(848,'priv','zh-tw','holiday-deleteAction','',''),(849,'priv','de','holiday-importAction','',''),(849,'priv','en','holiday-importAction','',''),(849,'priv','fr','holiday-importAction','',''),(849,'priv','zh-cn','holiday-importAction','',''),(849,'priv','zh-tw','holiday-importAction','',''),(850,'priv','de','weekly-index','',''),(850,'priv','en','weekly-index','',''),(850,'priv','fr','weekly-index','',''),(850,'priv','zh-cn','weekly-index','',''),(850,'priv','zh-tw','weekly-index','',''),(851,'priv','de','weekly-exportWeeklyReport','',''),(851,'priv','en','weekly-exportWeeklyReport','',''),(851,'priv','fr','weekly-exportWeeklyReport','',''),(851,'priv','zh-cn','weekly-exportWeeklyReport','',''),(851,'priv','zh-tw','weekly-exportWeeklyReport','',''),(852,'priv','de','opportunity-browse','',''),(852,'priv','en','opportunity-browse','',''),(852,'priv','fr','opportunity-browse','',''),(852,'priv','zh-cn','opportunity-browse','',''),(852,'priv','zh-tw','opportunity-browse','',''),(853,'priv','de','opportunity-create','',''),(853,'priv','en','opportunity-create','',''),(853,'priv','fr','opportunity-create','',''),(853,'priv','zh-cn','opportunity-create','',''),(853,'priv','zh-tw','opportunity-create','',''),(854,'priv','de','opportunity-edit','',''),(854,'priv','en','opportunity-edit','',''),(854,'priv','fr','opportunity-edit','',''),(854,'priv','zh-cn','opportunity-edit','',''),(854,'priv','zh-tw','opportunity-edit','',''),(855,'priv','de','opportunity-deleteAction','',''),(855,'priv','en','opportunity-deleteAction','',''),(855,'priv','fr','opportunity-deleteAction','',''),(855,'priv','zh-cn','opportunity-deleteAction','',''),(855,'priv','zh-tw','opportunity-deleteAction','',''),(856,'priv','de','opportunity-activateAction','',''),(856,'priv','en','opportunity-activateAction','',''),(856,'priv','fr','opportunity-activateAction','',''),(856,'priv','zh-cn','opportunity-activateAction','',''),(856,'priv','zh-tw','opportunity-activateAction','',''),(857,'priv','de','opportunity-closeAction','',''),(857,'priv','en','opportunity-closeAction','',''),(857,'priv','fr','opportunity-closeAction','',''),(857,'priv','zh-cn','opportunity-closeAction','',''),(857,'priv','zh-tw','opportunity-closeAction','',''),(858,'priv','de','opportunity-hangupAction','',''),(858,'priv','en','opportunity-hangupAction','',''),(858,'priv','fr','opportunity-hangupAction','',''),(858,'priv','zh-cn','opportunity-hangupAction','',''),(858,'priv','zh-tw','opportunity-hangupAction','',''),(859,'priv','de','opportunity-cancelAction','',''),(859,'priv','en','opportunity-cancelAction','',''),(859,'priv','fr','opportunity-cancelAction','',''),(859,'priv','zh-cn','opportunity-cancelAction','',''),(859,'priv','zh-tw','opportunity-cancelAction','',''),(860,'priv','de','opportunity-trackAction','',''),(860,'priv','en','opportunity-trackAction','',''),(860,'priv','fr','opportunity-trackAction','',''),(860,'priv','zh-cn','opportunity-trackAction','',''),(860,'priv','zh-tw','opportunity-trackAction','',''),(861,'priv','de','opportunity-view','',''),(861,'priv','en','opportunity-view','',''),(861,'priv','fr','opportunity-view','',''),(861,'priv','zh-cn','opportunity-view','',''),(861,'priv','zh-tw','opportunity-view','',''),(862,'priv','de','opportunity-assignToAction','',''),(862,'priv','en','opportunity-assignToAction','',''),(862,'priv','fr','opportunity-assignToAction','',''),(862,'priv','zh-cn','opportunity-assignToAction','',''),(862,'priv','zh-tw','opportunity-assignToAction','',''),(863,'priv','de','opportunity-batchCreate','',''),(863,'priv','en','opportunity-batchCreate','',''),(863,'priv','fr','opportunity-batchCreate','',''),(863,'priv','zh-cn','opportunity-batchCreate','',''),(863,'priv','zh-tw','opportunity-batchCreate','',''),(864,'priv','de','opportunity-batchEdit','',''),(864,'priv','en','opportunity-batchEdit','',''),(864,'priv','fr','opportunity-batchEdit','',''),(864,'priv','zh-cn','opportunity-batchEdit','',''),(864,'priv','zh-tw','opportunity-batchEdit','',''),(865,'priv','de','opportunity-batchAssignTo','',''),(865,'priv','en','opportunity-batchAssignTo','',''),(865,'priv','fr','opportunity-batchAssignTo','',''),(865,'priv','zh-cn','opportunity-batchAssignTo','',''),(865,'priv','zh-tw','opportunity-batchAssignTo','',''),(866,'priv','de','opportunity-batchClose','',''),(866,'priv','en','opportunity-batchClose','',''),(866,'priv','fr','opportunity-batchClose','',''),(866,'priv','zh-cn','opportunity-batchClose','',''),(866,'priv','zh-tw','opportunity-batchClose','',''),(867,'priv','de','opportunity-batchCancel','',''),(867,'priv','en','opportunity-batchCancel','',''),(867,'priv','fr','opportunity-batchCancel','',''),(867,'priv','zh-cn','opportunity-batchCancel','',''),(867,'priv','zh-tw','opportunity-batchCancel','',''),(868,'priv','de','opportunity-batchHangup','',''),(868,'priv','en','opportunity-batchHangup','',''),(868,'priv','fr','opportunity-batchHangup','',''),(868,'priv','zh-cn','opportunity-batchHangup','',''),(868,'priv','zh-tw','opportunity-batchHangup','',''),(869,'priv','de','opportunity-batchActivate','',''),(869,'priv','en','opportunity-batchActivate','',''),(869,'priv','fr','opportunity-batchActivate','',''),(869,'priv','zh-cn','opportunity-batchActivate','',''),(869,'priv','zh-tw','opportunity-batchActivate','',''),(870,'priv','de','opportunity-importToLib','',''),(870,'priv','en','opportunity-importToLib','',''),(870,'priv','fr','opportunity-importToLib','',''),(870,'priv','zh-cn','opportunity-importToLib','',''),(870,'priv','zh-tw','opportunity-importToLib','',''),(871,'priv','de','opportunity-batchImportToLib','',''),(871,'priv','en','opportunity-batchImportToLib','',''),(871,'priv','fr','opportunity-batchImportToLib','',''),(871,'priv','zh-cn','opportunity-batchImportToLib','',''),(871,'priv','zh-tw','opportunity-batchImportToLib','',''),(872,'priv','de','opportunity-importFromLib','',''),(872,'priv','en','opportunity-importFromLib','',''),(872,'priv','fr','opportunity-importFromLib','',''),(872,'priv','zh-cn','opportunity-importFromLib','',''),(872,'priv','zh-tw','opportunity-importFromLib','',''),(873,'priv','de','opportunity-exportAction','',''),(873,'priv','en','opportunity-exportAction','',''),(873,'priv','fr','opportunity-exportAction','',''),(873,'priv','zh-cn','opportunity-exportAction','',''),(873,'priv','zh-tw','opportunity-exportAction','',''),(874,'priv','de','trainplan-browse','',''),(874,'priv','en','trainplan-browse','',''),(874,'priv','fr','trainplan-browse','',''),(874,'priv','zh-cn','trainplan-browse','',''),(874,'priv','zh-tw','trainplan-browse','',''),(875,'priv','de','trainplan-create','',''),(875,'priv','en','trainplan-create','',''),(875,'priv','fr','trainplan-create','',''),(875,'priv','zh-cn','trainplan-create','',''),(875,'priv','zh-tw','trainplan-create','',''),(876,'priv','de','trainplan-edit','',''),(876,'priv','en','trainplan-edit','',''),(876,'priv','fr','trainplan-edit','',''),(876,'priv','zh-cn','trainplan-edit','',''),(876,'priv','zh-tw','trainplan-edit','',''),(877,'priv','de','trainplan-batchCreate','',''),(877,'priv','en','trainplan-batchCreate','',''),(877,'priv','fr','trainplan-batchCreate','',''),(877,'priv','zh-cn','trainplan-batchCreate','',''),(877,'priv','zh-tw','trainplan-batchCreate','',''),(878,'priv','de','trainplan-batchEdit','',''),(878,'priv','en','trainplan-batchEdit','',''),(878,'priv','fr','trainplan-batchEdit','',''),(878,'priv','zh-cn','trainplan-batchEdit','',''),(878,'priv','zh-tw','trainplan-batchEdit','',''),(879,'priv','de','trainplan-batchFinish','',''),(879,'priv','en','trainplan-batchFinish','',''),(879,'priv','fr','trainplan-batchFinish','',''),(879,'priv','zh-cn','trainplan-batchFinish','',''),(879,'priv','zh-tw','trainplan-batchFinish','',''),(880,'priv','de','trainplan-delete','',''),(880,'priv','en','trainplan-delete','',''),(880,'priv','fr','trainplan-delete','',''),(880,'priv','zh-cn','trainplan-delete','',''),(880,'priv','zh-tw','trainplan-delete','',''),(881,'priv','de','trainplan-finishAction','',''),(881,'priv','en','trainplan-finishAction','',''),(881,'priv','fr','trainplan-finishAction','',''),(881,'priv','zh-cn','trainplan-finishAction','',''),(881,'priv','zh-tw','trainplan-finishAction','',''),(882,'priv','de','trainplan-summaryAction','',''),(882,'priv','en','trainplan-summaryAction','',''),(882,'priv','fr','trainplan-summaryAction','',''),(882,'priv','zh-cn','trainplan-summaryAction','',''),(882,'priv','zh-tw','trainplan-summaryAction','',''),(883,'priv','de','trainplan-view','',''),(883,'priv','en','trainplan-view','',''),(883,'priv','fr','trainplan-view','',''),(883,'priv','zh-cn','trainplan-view','',''),(883,'priv','zh-tw','trainplan-view','',''),(884,'priv','de','nc-browse','',''),(884,'priv','en','nc-browse','',''),(884,'priv','fr','nc-browse','',''),(884,'priv','zh-cn','nc-browse','',''),(884,'priv','zh-tw','nc-browse','',''),(885,'priv','de','nc-create','',''),(885,'priv','en','nc-create','',''),(885,'priv','fr','nc-create','',''),(885,'priv','zh-cn','nc-create','',''),(885,'priv','zh-tw','nc-create','',''),(886,'priv','de','nc-edit','',''),(886,'priv','en','nc-edit','',''),(886,'priv','fr','nc-edit','',''),(886,'priv','zh-cn','nc-edit','',''),(886,'priv','zh-tw','nc-edit','',''),(887,'priv','de','nc-resolve','',''),(887,'priv','en','nc-resolve','',''),(887,'priv','fr','nc-resolve','',''),(887,'priv','zh-cn','nc-resolve','',''),(887,'priv','zh-tw','nc-resolve','',''),(888,'priv','de','nc-view','',''),(888,'priv','en','nc-view','',''),(888,'priv','fr','nc-view','',''),(888,'priv','zh-cn','nc-view','',''),(888,'priv','zh-tw','nc-view','',''),(889,'priv','de','nc-close','',''),(889,'priv','en','nc-close','',''),(889,'priv','fr','nc-close','',''),(889,'priv','zh-cn','nc-close','',''),(889,'priv','zh-tw','nc-close','',''),(890,'priv','de','nc-delete','',''),(890,'priv','en','nc-delete','',''),(890,'priv','fr','nc-delete','',''),(890,'priv','zh-cn','nc-delete','',''),(890,'priv','zh-tw','nc-delete','',''),(891,'priv','de','nc-assignTo','',''),(891,'priv','en','nc-assignTo','',''),(891,'priv','fr','nc-assignTo','',''),(891,'priv','zh-cn','nc-assignTo','',''),(891,'priv','zh-tw','nc-assignTo','',''),(892,'priv','de','nc-activate','',''),(892,'priv','en','nc-activate','',''),(892,'priv','fr','nc-activate','',''),(892,'priv','zh-cn','nc-activate','',''),(892,'priv','zh-tw','nc-activate','',''),(893,'priv','de','nc-exportAction','',''),(893,'priv','en','nc-exportAction','',''),(893,'priv','fr','nc-exportAction','',''),(893,'priv','zh-cn','nc-exportAction','',''),(893,'priv','zh-tw','nc-exportAction','',''),(894,'priv','de','gapanalysis-browse','',''),(894,'priv','en','gapanalysis-browse','',''),(894,'priv','fr','gapanalysis-browse','',''),(894,'priv','zh-cn','gapanalysis-browse','',''),(894,'priv','zh-tw','gapanalysis-browse','',''),(895,'priv','de','gapanalysis-create','',''),(895,'priv','en','gapanalysis-create','',''),(895,'priv','fr','gapanalysis-create','',''),(895,'priv','zh-cn','gapanalysis-create','',''),(895,'priv','zh-tw','gapanalysis-create','',''),(896,'priv','de','gapanalysis-edit','',''),(896,'priv','en','gapanalysis-edit','',''),(896,'priv','fr','gapanalysis-edit','',''),(896,'priv','zh-cn','gapanalysis-edit','',''),(896,'priv','zh-tw','gapanalysis-edit','',''),(897,'priv','de','gapanalysis-batchCreate','',''),(897,'priv','en','gapanalysis-batchCreate','',''),(897,'priv','fr','gapanalysis-batchCreate','',''),(897,'priv','zh-cn','gapanalysis-batchCreate','',''),(897,'priv','zh-tw','gapanalysis-batchCreate','',''),(898,'priv','de','gapanalysis-batchEdit','',''),(898,'priv','en','gapanalysis-batchEdit','',''),(898,'priv','fr','gapanalysis-batchEdit','',''),(898,'priv','zh-cn','gapanalysis-batchEdit','',''),(898,'priv','zh-tw','gapanalysis-batchEdit','',''),(899,'priv','de','gapanalysis-delete','',''),(899,'priv','en','gapanalysis-delete','',''),(899,'priv','fr','gapanalysis-delete','',''),(899,'priv','zh-cn','gapanalysis-delete','',''),(899,'priv','zh-tw','gapanalysis-delete','',''),(900,'priv','de','gapanalysis-view','',''),(900,'priv','en','gapanalysis-view','',''),(900,'priv','fr','gapanalysis-view','',''),(900,'priv','zh-cn','gapanalysis-view','',''),(900,'priv','zh-tw','gapanalysis-view','',''),(901,'priv','de','researchplan-browse','',''),(901,'priv','en','researchplan-browse','',''),(901,'priv','fr','researchplan-browse','',''),(901,'priv','zh-cn','researchplan-browse','',''),(901,'priv','zh-tw','researchplan-browse','',''),(902,'priv','de','researchplan-create','',''),(902,'priv','en','researchplan-create','',''),(902,'priv','fr','researchplan-create','',''),(902,'priv','zh-cn','researchplan-create','',''),(902,'priv','zh-tw','researchplan-create','',''),(903,'priv','de','researchplan-edit','',''),(903,'priv','en','researchplan-edit','',''),(903,'priv','fr','researchplan-edit','',''),(903,'priv','zh-cn','researchplan-edit','',''),(903,'priv','zh-tw','researchplan-edit','',''),(904,'priv','de','researchplan-delete','',''),(904,'priv','en','researchplan-delete','',''),(904,'priv','fr','researchplan-delete','',''),(904,'priv','zh-cn','researchplan-delete','',''),(904,'priv','zh-tw','researchplan-delete','',''),(905,'priv','de','researchplan-view','',''),(905,'priv','en','researchplan-view','',''),(905,'priv','fr','researchplan-view','',''),(905,'priv','zh-cn','researchplan-view','',''),(905,'priv','zh-tw','researchplan-view','',''),(906,'priv','de','researchreport-browse','',''),(906,'priv','en','researchreport-browse','',''),(906,'priv','fr','researchreport-browse','',''),(906,'priv','zh-cn','researchreport-browse','',''),(906,'priv','zh-tw','researchreport-browse','',''),(907,'priv','de','researchreport-create','',''),(907,'priv','en','researchreport-create','',''),(907,'priv','fr','researchreport-create','',''),(907,'priv','zh-cn','researchreport-create','',''),(907,'priv','zh-tw','researchreport-create','',''),(908,'priv','de','researchreport-edit','',''),(908,'priv','en','researchreport-edit','',''),(908,'priv','fr','researchreport-edit','',''),(908,'priv','zh-cn','researchreport-edit','',''),(908,'priv','zh-tw','researchreport-edit','',''),(909,'priv','de','researchreport-delete','',''),(909,'priv','en','researchreport-delete','',''),(909,'priv','fr','researchreport-delete','',''),(909,'priv','zh-cn','researchreport-delete','',''),(909,'priv','zh-tw','researchreport-delete','',''),(910,'priv','de','researchreport-view','',''),(910,'priv','en','researchreport-view','',''),(910,'priv','fr','researchreport-view','',''),(910,'priv','zh-cn','researchreport-view','',''),(910,'priv','zh-tw','researchreport-view','',''),(911,'priv','de','meeting-browse','',''),(911,'priv','en','meeting-browse','',''),(911,'priv','fr','meeting-browse','',''),(911,'priv','zh-cn','meeting-browse','',''),(911,'priv','zh-tw','meeting-browse','',''),(912,'priv','de','meeting-create','',''),(912,'priv','en','meeting-create','',''),(912,'priv','fr','meeting-create','',''),(912,'priv','zh-cn','meeting-create','',''),(912,'priv','zh-tw','meeting-create','',''),(913,'priv','de','meeting-edit','',''),(913,'priv','en','meeting-edit','',''),(913,'priv','fr','meeting-edit','',''),(913,'priv','zh-cn','meeting-edit','',''),(913,'priv','zh-tw','meeting-edit','',''),(914,'priv','de','meeting-deleteAction','',''),(914,'priv','en','meeting-deleteAction','',''),(914,'priv','fr','meeting-deleteAction','',''),(914,'priv','zh-cn','meeting-deleteAction','',''),(914,'priv','zh-tw','meeting-deleteAction','',''),(915,'priv','de','meeting-view','',''),(915,'priv','en','meeting-view','',''),(915,'priv','fr','meeting-view','',''),(915,'priv','zh-cn','meeting-view','',''),(915,'priv','zh-tw','meeting-view','',''),(916,'priv','de','meeting-minutes','',''),(916,'priv','en','meeting-minutes','',''),(916,'priv','fr','meeting-minutes','',''),(916,'priv','zh-cn','meeting-minutes','',''),(916,'priv','zh-tw','meeting-minutes','',''),(917,'priv','de','meetingroom-browse','',''),(917,'priv','en','meetingroom-browse','',''),(917,'priv','fr','meetingroom-browse','',''),(917,'priv','zh-cn','meetingroom-browse','',''),(917,'priv','zh-tw','meetingroom-browse','',''),(918,'priv','de','meetingroom-create','',''),(918,'priv','en','meetingroom-create','',''),(918,'priv','fr','meetingroom-create','',''),(918,'priv','zh-cn','meetingroom-create','',''),(918,'priv','zh-tw','meetingroom-create','',''),(919,'priv','de','meetingroom-edit','',''),(919,'priv','en','meetingroom-edit','',''),(919,'priv','fr','meetingroom-edit','',''),(919,'priv','zh-cn','meetingroom-edit','',''),(919,'priv','zh-tw','meetingroom-edit','',''),(920,'priv','de','meetingroom-deleteAction','',''),(920,'priv','en','meetingroom-deleteAction','',''),(920,'priv','fr','meetingroom-deleteAction','',''),(920,'priv','zh-cn','meetingroom-deleteAction','',''),(920,'priv','zh-tw','meetingroom-deleteAction','',''),(921,'priv','de','meetingroom-view','',''),(921,'priv','en','meetingroom-view','',''),(921,'priv','fr','meetingroom-view','',''),(921,'priv','zh-cn','meetingroom-view','',''),(921,'priv','zh-tw','meetingroom-view','',''),(922,'priv','de','meetingroom-batchCreate','',''),(922,'priv','en','meetingroom-batchCreate','',''),(922,'priv','fr','meetingroom-batchCreate','',''),(922,'priv','zh-cn','meetingroom-batchCreate','',''),(922,'priv','zh-tw','meetingroom-batchCreate','',''),(923,'priv','de','meetingroom-batchEdit','',''),(923,'priv','en','meetingroom-batchEdit','',''),(923,'priv','fr','meetingroom-batchEdit','',''),(923,'priv','zh-cn','meetingroom-batchEdit','',''),(923,'priv','zh-tw','meetingroom-batchEdit','',''),(924,'priv','de','approval-progress','',''),(924,'priv','en','approval-progress','',''),(924,'priv','fr','approval-progress','',''),(924,'priv','zh-cn','approval-progress','',''),(924,'priv','zh-tw','approval-progress','',''),(925,'priv','de','workflow-browseFlow','',''),(925,'priv','en','workflow-browseFlow','',''),(925,'priv','fr','workflow-browseFlow','',''),(925,'priv','zh-cn','workflow-browseFlow','',''),(925,'priv','zh-tw','workflow-browseFlow','',''),(926,'priv','de','workflow-browseDB','',''),(926,'priv','en','workflow-browseDB','',''),(926,'priv','fr','workflow-browseDB','',''),(926,'priv','zh-cn','workflow-browseDB','',''),(926,'priv','zh-tw','workflow-browseDB','',''),(927,'priv','de','workflow-create','',''),(927,'priv','en','workflow-create','',''),(927,'priv','fr','workflow-create','',''),(927,'priv','zh-cn','workflow-create','',''),(927,'priv','zh-tw','workflow-create','',''),(928,'priv','de','workflow-copy','',''),(928,'priv','en','workflow-copy','',''),(928,'priv','fr','workflow-copy','',''),(928,'priv','zh-cn','workflow-copy','',''),(928,'priv','zh-tw','workflow-copy','',''),(929,'priv','de','workflow-edit','',''),(929,'priv','en','workflow-edit','',''),(929,'priv','fr','workflow-edit','',''),(929,'priv','zh-cn','workflow-edit','',''),(929,'priv','zh-tw','workflow-edit','',''),(930,'priv','de','workflow-backup','',''),(930,'priv','en','workflow-backup','',''),(930,'priv','fr','workflow-backup','',''),(930,'priv','zh-cn','workflow-backup','',''),(930,'priv','zh-tw','workflow-backup','',''),(931,'priv','de','workflow-upgradeAction','',''),(931,'priv','en','workflow-upgradeAction','',''),(931,'priv','fr','workflow-upgradeAction','',''),(931,'priv','zh-cn','workflow-upgradeAction','',''),(931,'priv','zh-tw','workflow-upgradeAction','',''),(932,'priv','de','workflow-view','',''),(932,'priv','en','workflow-view','',''),(932,'priv','fr','workflow-view','',''),(932,'priv','zh-cn','workflow-view','',''),(932,'priv','zh-tw','workflow-view','',''),(933,'priv','de','workflow-delete','',''),(933,'priv','en','workflow-delete','',''),(933,'priv','fr','workflow-delete','',''),(933,'priv','zh-cn','workflow-delete','',''),(933,'priv','zh-tw','workflow-delete','',''),(934,'priv','de','workflow-flowchart','',''),(934,'priv','en','workflow-flowchart','',''),(934,'priv','fr','workflow-flowchart','',''),(934,'priv','zh-cn','workflow-flowchart','',''),(934,'priv','zh-tw','workflow-flowchart','',''),(935,'priv','de','workflow-ui','',''),(935,'priv','en','workflow-ui','',''),(935,'priv','fr','workflow-ui','',''),(935,'priv','zh-cn','workflow-ui','',''),(935,'priv','zh-tw','workflow-ui','',''),(936,'priv','de','workflow-release','',''),(936,'priv','en','workflow-release','',''),(936,'priv','fr','workflow-release','',''),(936,'priv','zh-cn','workflow-release','',''),(936,'priv','zh-tw','workflow-release','',''),(937,'priv','de','workflow-deactivate','',''),(937,'priv','en','workflow-deactivate','',''),(937,'priv','fr','workflow-deactivate','',''),(937,'priv','zh-cn','workflow-deactivate','',''),(937,'priv','zh-tw','workflow-deactivate','',''),(938,'priv','de','workflow-activate','',''),(938,'priv','en','workflow-activate','',''),(938,'priv','fr','workflow-activate','',''),(938,'priv','zh-cn','workflow-activate','',''),(938,'priv','zh-tw','workflow-activate','',''),(939,'priv','de','workflow-setApproval','',''),(939,'priv','en','workflow-setApproval','',''),(939,'priv','fr','workflow-setApproval','',''),(939,'priv','zh-cn','workflow-setApproval','',''),(939,'priv','zh-tw','workflow-setApproval','',''),(940,'priv','de','workflow-setJS','',''),(940,'priv','en','workflow-setJS','',''),(940,'priv','fr','workflow-setJS','',''),(940,'priv','zh-cn','workflow-setJS','',''),(940,'priv','zh-tw','workflow-setJS','',''),(941,'priv','de','workflow-setCSS','',''),(941,'priv','en','workflow-setCSS','',''),(941,'priv','fr','workflow-setCSS','',''),(941,'priv','zh-cn','workflow-setCSS','',''),(941,'priv','zh-tw','workflow-setCSS','',''),(942,'priv','de','workflowfield-browse','',''),(942,'priv','en','workflowfield-browse','',''),(942,'priv','fr','workflowfield-browse','',''),(942,'priv','zh-cn','workflowfield-browse','',''),(942,'priv','zh-tw','workflowfield-browse','',''),(943,'priv','de','workflowfield-create','',''),(943,'priv','en','workflowfield-create','',''),(943,'priv','fr','workflowfield-create','',''),(943,'priv','zh-cn','workflowfield-create','',''),(943,'priv','zh-tw','workflowfield-create','',''),(944,'priv','de','workflowfield-edit','',''),(944,'priv','en','workflowfield-edit','',''),(944,'priv','fr','workflowfield-edit','',''),(944,'priv','zh-cn','workflowfield-edit','',''),(944,'priv','zh-tw','workflowfield-edit','',''),(945,'priv','de','workflowfield-delete','',''),(945,'priv','en','workflowfield-delete','',''),(945,'priv','fr','workflowfield-delete','',''),(945,'priv','zh-cn','workflowfield-delete','',''),(945,'priv','zh-tw','workflowfield-delete','',''),(946,'priv','de','workflowfield-sort','',''),(946,'priv','en','workflowfield-sort','',''),(946,'priv','fr','workflowfield-sort','',''),(946,'priv','zh-cn','workflowfield-sort','',''),(946,'priv','zh-tw','workflowfield-sort','',''),(947,'priv','de','workflowfield-import','',''),(947,'priv','en','workflowfield-import','',''),(947,'priv','fr','workflowfield-import','',''),(947,'priv','zh-cn','workflowfield-import','',''),(947,'priv','zh-tw','workflowfield-import','',''),(948,'priv','de','workflowfield-showImport','',''),(948,'priv','en','workflowfield-showImport','',''),(948,'priv','fr','workflowfield-showImport','',''),(948,'priv','zh-cn','workflowfield-showImport','',''),(948,'priv','zh-tw','workflowfield-showImport','',''),(949,'priv','de','workflowfield-exportTemplate','',''),(949,'priv','en','workflowfield-exportTemplate','',''),(949,'priv','fr','workflowfield-exportTemplate','',''),(949,'priv','zh-cn','workflowfield-exportTemplate','',''),(949,'priv','zh-tw','workflowfield-exportTemplate','',''),(950,'priv','de','workflowfield-setValue','',''),(950,'priv','en','workflowfield-setValue','',''),(950,'priv','fr','workflowfield-setValue','',''),(950,'priv','zh-cn','workflowfield-setValue','',''),(950,'priv','zh-tw','workflowfield-setValue','',''),(951,'priv','de','workflowfield-setExport','',''),(951,'priv','en','workflowfield-setExport','',''),(951,'priv','fr','workflowfield-setExport','',''),(951,'priv','zh-cn','workflowfield-setExport','',''),(951,'priv','zh-tw','workflowfield-setExport','',''),(952,'priv','de','workflowfield-setSearch','',''),(952,'priv','en','workflowfield-setSearch','',''),(952,'priv','fr','workflowfield-setSearch','',''),(952,'priv','zh-cn','workflowfield-setSearch','',''),(952,'priv','zh-tw','workflowfield-setSearch','',''),(953,'priv','de','workflowaction-browse','',''),(953,'priv','en','workflowaction-browse','',''),(953,'priv','fr','workflowaction-browse','',''),(953,'priv','zh-cn','workflowaction-browse','',''),(953,'priv','zh-tw','workflowaction-browse','',''),(954,'priv','de','workflowaction-create','',''),(954,'priv','en','workflowaction-create','',''),(954,'priv','fr','workflowaction-create','',''),(954,'priv','zh-cn','workflowaction-create','',''),(954,'priv','zh-tw','workflowaction-create','',''),(955,'priv','de','workflowaction-edit','',''),(955,'priv','en','workflowaction-edit','',''),(955,'priv','fr','workflowaction-edit','',''),(955,'priv','zh-cn','workflowaction-edit','',''),(955,'priv','zh-tw','workflowaction-edit','',''),(956,'priv','de','workflowaction-view','',''),(956,'priv','en','workflowaction-view','',''),(956,'priv','fr','workflowaction-view','',''),(956,'priv','zh-cn','workflowaction-view','',''),(956,'priv','zh-tw','workflowaction-view','',''),(957,'priv','de','workflowaction-delete','',''),(957,'priv','en','workflowaction-delete','',''),(957,'priv','fr','workflowaction-delete','',''),(957,'priv','zh-cn','workflowaction-delete','',''),(957,'priv','zh-tw','workflowaction-delete','',''),(958,'priv','de','workflowaction-sort','',''),(958,'priv','en','workflowaction-sort','',''),(958,'priv','fr','workflowaction-sort','',''),(958,'priv','zh-cn','workflowaction-sort','',''),(958,'priv','zh-tw','workflowaction-sort','',''),(959,'priv','de','workflowaction-setVerification','',''),(959,'priv','en','workflowaction-setVerification','',''),(959,'priv','fr','workflowaction-setVerification','',''),(959,'priv','zh-cn','workflowaction-setVerification','',''),(959,'priv','zh-tw','workflowaction-setVerification','',''),(960,'priv','de','workflowaction-setNotice','',''),(960,'priv','en','workflowaction-setNotice','',''),(960,'priv','fr','workflowaction-setNotice','',''),(960,'priv','zh-cn','workflowaction-setNotice','',''),(960,'priv','zh-tw','workflowaction-setNotice','',''),(961,'priv','de','workflowaction-setJS','',''),(961,'priv','en','workflowaction-setJS','',''),(961,'priv','fr','workflowaction-setJS','',''),(961,'priv','zh-cn','workflowaction-setJS','',''),(961,'priv','zh-tw','workflowaction-setJS','',''),(962,'priv','de','workflowaction-setCSS','',''),(962,'priv','en','workflowaction-setCSS','',''),(962,'priv','fr','workflowaction-setCSS','',''),(962,'priv','zh-cn','workflowaction-setCSS','',''),(962,'priv','zh-tw','workflowaction-setCSS','',''),(963,'priv','de','workflowlayout-admin','',''),(963,'priv','en','workflowlayout-admin','',''),(963,'priv','fr','workflowlayout-admin','',''),(963,'priv','zh-cn','workflowlayout-admin','',''),(963,'priv','zh-tw','workflowlayout-admin','',''),(964,'priv','de','workflowlayout-block','',''),(964,'priv','en','workflowlayout-block','',''),(964,'priv','fr','workflowlayout-block','',''),(964,'priv','zh-cn','workflowlayout-block','',''),(964,'priv','zh-tw','workflowlayout-block','',''),(965,'priv','de','workflowcondition-browse','',''),(965,'priv','en','workflowcondition-browse','',''),(965,'priv','fr','workflowcondition-browse','',''),(965,'priv','zh-cn','workflowcondition-browse','',''),(965,'priv','zh-tw','workflowcondition-browse','',''),(966,'priv','de','workflowcondition-create','',''),(966,'priv','en','workflowcondition-create','',''),(966,'priv','fr','workflowcondition-create','',''),(966,'priv','zh-cn','workflowcondition-create','',''),(966,'priv','zh-tw','workflowcondition-create','',''),(967,'priv','de','workflowcondition-edit','',''),(967,'priv','en','workflowcondition-edit','',''),(967,'priv','fr','workflowcondition-edit','',''),(967,'priv','zh-cn','workflowcondition-edit','',''),(967,'priv','zh-tw','workflowcondition-edit','',''),(968,'priv','de','workflowcondition-delete','',''),(968,'priv','en','workflowcondition-delete','',''),(968,'priv','fr','workflowcondition-delete','',''),(968,'priv','zh-cn','workflowcondition-delete','',''),(968,'priv','zh-tw','workflowcondition-delete','',''),(969,'priv','de','workflowlinkage-browse','',''),(969,'priv','en','workflowlinkage-browse','',''),(969,'priv','fr','workflowlinkage-browse','',''),(969,'priv','zh-cn','workflowlinkage-browse','',''),(969,'priv','zh-tw','workflowlinkage-browse','',''),(970,'priv','de','workflowlinkage-create','',''),(970,'priv','en','workflowlinkage-create','',''),(970,'priv','fr','workflowlinkage-create','',''),(970,'priv','zh-cn','workflowlinkage-create','',''),(970,'priv','zh-tw','workflowlinkage-create','',''),(971,'priv','de','workflowlinkage-edit','',''),(971,'priv','en','workflowlinkage-edit','',''),(971,'priv','fr','workflowlinkage-edit','',''),(971,'priv','zh-cn','workflowlinkage-edit','',''),(971,'priv','zh-tw','workflowlinkage-edit','',''),(972,'priv','de','workflowlinkage-delete','',''),(972,'priv','en','workflowlinkage-delete','',''),(972,'priv','fr','workflowlinkage-delete','',''),(972,'priv','zh-cn','workflowlinkage-delete','',''),(972,'priv','zh-tw','workflowlinkage-delete','',''),(973,'priv','de','workflowhook-browse','',''),(973,'priv','en','workflowhook-browse','',''),(973,'priv','fr','workflowhook-browse','',''),(973,'priv','zh-cn','workflowhook-browse','',''),(973,'priv','zh-tw','workflowhook-browse','',''),(974,'priv','de','workflowhook-create','',''),(974,'priv','en','workflowhook-create','',''),(974,'priv','fr','workflowhook-create','',''),(974,'priv','zh-cn','workflowhook-create','',''),(974,'priv','zh-tw','workflowhook-create','',''),(975,'priv','de','workflowhook-edit','',''),(975,'priv','en','workflowhook-edit','',''),(975,'priv','fr','workflowhook-edit','',''),(975,'priv','zh-cn','workflowhook-edit','',''),(975,'priv','zh-tw','workflowhook-edit','',''),(976,'priv','de','workflowhook-delete','',''),(976,'priv','en','workflowhook-delete','',''),(976,'priv','fr','workflowhook-delete','',''),(976,'priv','zh-cn','workflowhook-delete','',''),(976,'priv','zh-tw','workflowhook-delete','',''),(977,'priv','de','workflowlabel-browse','',''),(977,'priv','en','workflowlabel-browse','',''),(977,'priv','fr','workflowlabel-browse','',''),(977,'priv','zh-cn','workflowlabel-browse','',''),(977,'priv','zh-tw','workflowlabel-browse','',''),(978,'priv','de','workflowlabel-create','',''),(978,'priv','en','workflowlabel-create','',''),(978,'priv','fr','workflowlabel-create','',''),(978,'priv','zh-cn','workflowlabel-create','',''),(978,'priv','zh-tw','workflowlabel-create','',''),(979,'priv','de','workflowlabel-edit','',''),(979,'priv','en','workflowlabel-edit','',''),(979,'priv','fr','workflowlabel-edit','',''),(979,'priv','zh-cn','workflowlabel-edit','',''),(979,'priv','zh-tw','workflowlabel-edit','',''),(980,'priv','de','workflowlabel-delete','',''),(980,'priv','en','workflowlabel-delete','',''),(980,'priv','fr','workflowlabel-delete','',''),(980,'priv','zh-cn','workflowlabel-delete','',''),(980,'priv','zh-tw','workflowlabel-delete','',''),(981,'priv','de','workflowlabel-sort','',''),(981,'priv','en','workflowlabel-sort','',''),(981,'priv','fr','workflowlabel-sort','',''),(981,'priv','zh-cn','workflowlabel-sort','',''),(981,'priv','zh-tw','workflowlabel-sort','',''),(982,'priv','de','workflowrelation-admin','',''),(982,'priv','en','workflowrelation-admin','',''),(982,'priv','fr','workflowrelation-admin','',''),(982,'priv','zh-cn','workflowrelation-admin','',''),(982,'priv','zh-tw','workflowrelation-admin','',''),(983,'priv','de','workflowreport-brow','',''),(983,'priv','en','workflowreport-brow','',''),(983,'priv','fr','workflowreport-brow','',''),(983,'priv','zh-cn','workflowreport-brow','',''),(983,'priv','zh-tw','workflowreport-brow','',''),(984,'priv','de','workflowreport-create','',''),(984,'priv','en','workflowreport-create','',''),(984,'priv','fr','workflowreport-create','',''),(984,'priv','zh-cn','workflowreport-create','',''),(984,'priv','zh-tw','workflowreport-create','',''),(985,'priv','de','workflowreport-edit','',''),(985,'priv','en','workflowreport-edit','',''),(985,'priv','fr','workflowreport-edit','',''),(985,'priv','zh-cn','workflowreport-edit','',''),(985,'priv','zh-tw','workflowreport-edit','',''),(986,'priv','de','workflowreport-delete','',''),(986,'priv','en','workflowreport-delete','',''),(986,'priv','fr','workflowreport-delete','',''),(986,'priv','zh-cn','workflowreport-delete','',''),(986,'priv','zh-tw','workflowreport-delete','',''),(987,'priv','de','workflowreport-sort','',''),(987,'priv','en','workflowreport-sort','',''),(987,'priv','fr','workflowreport-sort','',''),(987,'priv','zh-cn','workflowreport-sort','',''),(987,'priv','zh-tw','workflowreport-sort','',''),(988,'priv','de','workflowdatasource-browse','',''),(988,'priv','en','workflowdatasource-browse','',''),(988,'priv','fr','workflowdatasource-browse','',''),(988,'priv','zh-cn','workflowdatasource-browse','',''),(988,'priv','zh-tw','workflowdatasource-browse','',''),(989,'priv','de','workflowdatasource-create','',''),(989,'priv','en','workflowdatasource-create','',''),(989,'priv','fr','workflowdatasource-create','',''),(989,'priv','zh-cn','workflowdatasource-create','',''),(989,'priv','zh-tw','workflowdatasource-create','',''),(990,'priv','de','workflowdatasource-edit','',''),(990,'priv','en','workflowdatasource-edit','',''),(990,'priv','fr','workflowdatasource-edit','',''),(990,'priv','zh-cn','workflowdatasource-edit','',''),(990,'priv','zh-tw','workflowdatasource-edit','',''),(991,'priv','de','workflowdatasource-delete','',''),(991,'priv','en','workflowdatasource-delete','',''),(991,'priv','fr','workflowdatasource-delete','',''),(991,'priv','zh-cn','workflowdatasource-delete','',''),(991,'priv','zh-tw','workflowdatasource-delete','',''),(992,'priv','de','workflowrule-browse','',''),(992,'priv','en','workflowrule-browse','',''),(992,'priv','fr','workflowrule-browse','',''),(992,'priv','zh-cn','workflowrule-browse','',''),(992,'priv','zh-tw','workflowrule-browse','',''),(993,'priv','de','workflowrule-create','',''),(993,'priv','en','workflowrule-create','',''),(993,'priv','fr','workflowrule-create','',''),(993,'priv','zh-cn','workflowrule-create','',''),(993,'priv','zh-tw','workflowrule-create','',''),(994,'priv','de','workflowrule-edit','',''),(994,'priv','en','workflowrule-edit','',''),(994,'priv','fr','workflowrule-edit','',''),(994,'priv','zh-cn','workflowrule-edit','',''),(994,'priv','zh-tw','workflowrule-edit','',''),(995,'priv','de','workflowrule-view','',''),(995,'priv','en','workflowrule-view','',''),(995,'priv','fr','workflowrule-view','',''),(995,'priv','zh-cn','workflowrule-view','',''),(995,'priv','zh-tw','workflowrule-view','',''),(996,'priv','de','workflowrule-delete','',''),(996,'priv','en','workflowrule-delete','',''),(996,'priv','fr','workflowrule-delete','',''),(996,'priv','zh-cn','workflowrule-delete','',''),(996,'priv','zh-tw','workflowrule-delete','',''),(997,'priv','de','projectbuild-browse','',''),(997,'priv','en','projectbuild-browse','',''),(997,'priv','fr','projectbuild-browse','',''),(997,'priv','zh-cn','projectbuild-browse','',''),(997,'priv','zh-tw','projectbuild-browse','',''),(998,'priv','de','projectbuild-create','',''),(998,'priv','en','projectbuild-create','',''),(998,'priv','fr','projectbuild-create','',''),(998,'priv','zh-cn','projectbuild-create','',''),(998,'priv','zh-tw','projectbuild-create','',''),(999,'priv','de','projectbuild-edit','',''),(999,'priv','en','projectbuild-edit','',''),(999,'priv','fr','projectbuild-edit','',''),(999,'priv','zh-cn','projectbuild-edit','',''),(999,'priv','zh-tw','projectbuild-edit','',''),(1000,'priv','de','projectbuild-view','',''),(1000,'priv','en','projectbuild-view','',''),(1000,'priv','fr','projectbuild-view','',''),(1000,'priv','zh-cn','projectbuild-view','',''),(1000,'priv','zh-tw','projectbuild-view','',''),(1001,'priv','de','projectbuild-delete','',''),(1001,'priv','en','projectbuild-delete','',''),(1001,'priv','fr','projectbuild-delete','',''),(1001,'priv','zh-cn','projectbuild-delete','',''),(1001,'priv','zh-tw','projectbuild-delete','',''),(1002,'priv','de','projectbuild-linkStory','',''),(1002,'priv','en','projectbuild-linkStory','',''),(1002,'priv','fr','projectbuild-linkStory','',''),(1002,'priv','zh-cn','projectbuild-linkStory','',''),(1002,'priv','zh-tw','projectbuild-linkStory','',''),(1003,'priv','de','projectbuild-unlinkStory','',''),(1003,'priv','en','projectbuild-unlinkStory','',''),(1003,'priv','fr','projectbuild-unlinkStory','',''),(1003,'priv','zh-cn','projectbuild-unlinkStory','',''),(1003,'priv','zh-tw','projectbuild-unlinkStory','',''),(1004,'priv','de','projectbuild-batchUnlinkStory','',''),(1004,'priv','en','projectbuild-batchUnlinkStory','',''),(1004,'priv','fr','projectbuild-batchUnlinkStory','',''),(1004,'priv','zh-cn','projectbuild-batchUnlinkStory','',''),(1004,'priv','zh-tw','projectbuild-batchUnlinkStory','',''),(1005,'priv','de','projectbuild-linkBug','',''),(1005,'priv','en','projectbuild-linkBug','',''),(1005,'priv','fr','projectbuild-linkBug','',''),(1005,'priv','zh-cn','projectbuild-linkBug','',''),(1005,'priv','zh-tw','projectbuild-linkBug','',''),(1006,'priv','de','projectbuild-unlinkBug','',''),(1006,'priv','en','projectbuild-unlinkBug','',''),(1006,'priv','fr','projectbuild-unlinkBug','',''),(1006,'priv','zh-cn','projectbuild-unlinkBug','',''),(1006,'priv','zh-tw','projectbuild-unlinkBug','',''),(1007,'priv','de','projectbuild-batchUnlinkBug','',''),(1007,'priv','en','projectbuild-batchUnlinkBug','',''),(1007,'priv','fr','projectbuild-batchUnlinkBug','',''),(1007,'priv','zh-cn','projectbuild-batchUnlinkBug','',''),(1007,'priv','zh-tw','projectbuild-batchUnlinkBug','',''),(1008,'priv','de','projectrelease-browseAction','',''),(1008,'priv','en','projectrelease-browseAction','',''),(1008,'priv','fr','projectrelease-browseAction','',''),(1008,'priv','zh-cn','projectrelease-browseAction','',''),(1008,'priv','zh-tw','projectrelease-browseAction','',''),(1009,'priv','de','projectrelease-create','',''),(1009,'priv','en','projectrelease-create','',''),(1009,'priv','fr','projectrelease-create','',''),(1009,'priv','zh-cn','projectrelease-create','',''),(1009,'priv','zh-tw','projectrelease-create','',''),(1010,'priv','de','projectrelease-edit','',''),(1010,'priv','en','projectrelease-edit','',''),(1010,'priv','fr','projectrelease-edit','',''),(1010,'priv','zh-cn','projectrelease-edit','',''),(1010,'priv','zh-tw','projectrelease-edit','',''),(1011,'priv','de','projectrelease-delete','',''),(1011,'priv','en','projectrelease-delete','',''),(1011,'priv','fr','projectrelease-delete','',''),(1011,'priv','zh-cn','projectrelease-delete','',''),(1011,'priv','zh-tw','projectrelease-delete','',''),(1012,'priv','de','projectrelease-view','',''),(1012,'priv','en','projectrelease-view','',''),(1012,'priv','fr','projectrelease-view','',''),(1012,'priv','zh-cn','projectrelease-view','',''),(1012,'priv','zh-tw','projectrelease-view','',''),(1013,'priv','de','projectrelease-export','',''),(1013,'priv','en','projectrelease-export','',''),(1013,'priv','fr','projectrelease-export','',''),(1013,'priv','zh-cn','projectrelease-export','',''),(1013,'priv','zh-tw','projectrelease-export','',''),(1014,'priv','de','projectrelease-linkStory','',''),(1014,'priv','en','projectrelease-linkStory','',''),(1014,'priv','fr','projectrelease-linkStory','',''),(1014,'priv','zh-cn','projectrelease-linkStory','',''),(1014,'priv','zh-tw','projectrelease-linkStory','',''),(1015,'priv','de','projectrelease-unlinkStory','',''),(1015,'priv','en','projectrelease-unlinkStory','',''),(1015,'priv','fr','projectrelease-unlinkStory','',''),(1015,'priv','zh-cn','projectrelease-unlinkStory','',''),(1015,'priv','zh-tw','projectrelease-unlinkStory','',''),(1016,'priv','de','projectrelease-batchUnlinkStory','',''),(1016,'priv','en','projectrelease-batchUnlinkStory','',''),(1016,'priv','fr','projectrelease-batchUnlinkStory','',''),(1016,'priv','zh-cn','projectrelease-batchUnlinkStory','',''),(1016,'priv','zh-tw','projectrelease-batchUnlinkStory','',''),(1017,'priv','de','projectrelease-linkBug','',''),(1017,'priv','en','projectrelease-linkBug','',''),(1017,'priv','fr','projectrelease-linkBug','',''),(1017,'priv','zh-cn','projectrelease-linkBug','',''),(1017,'priv','zh-tw','projectrelease-linkBug','',''),(1018,'priv','de','projectrelease-unlinkBug','',''),(1018,'priv','en','projectrelease-unlinkBug','',''),(1018,'priv','fr','projectrelease-unlinkBug','',''),(1018,'priv','zh-cn','projectrelease-unlinkBug','',''),(1018,'priv','zh-tw','projectrelease-unlinkBug','',''),(1019,'priv','de','projectrelease-batchUnlinkBug','',''),(1019,'priv','en','projectrelease-batchUnlinkBug','',''),(1019,'priv','fr','projectrelease-batchUnlinkBug','',''),(1019,'priv','zh-cn','projectrelease-batchUnlinkBug','',''),(1019,'priv','zh-tw','projectrelease-batchUnlinkBug','',''),(1020,'priv','de','projectrelease-changeStatus','',''),(1020,'priv','en','projectrelease-changeStatus','',''),(1020,'priv','fr','projectrelease-changeStatus','',''),(1020,'priv','zh-cn','projectrelease-changeStatus','',''),(1020,'priv','zh-tw','projectrelease-changeStatus','',''),(1021,'priv','de','projectrelease-notify','',''),(1021,'priv','en','projectrelease-notify','',''),(1021,'priv','fr','projectrelease-notify','',''),(1021,'priv','zh-cn','projectrelease-notify','',''),(1021,'priv','zh-tw','projectrelease-notify','',''),(1022,'priv','de','stakeholder-browse','',''),(1022,'priv','en','stakeholder-browse','',''),(1022,'priv','fr','stakeholder-browse','',''),(1022,'priv','zh-cn','stakeholder-browse','',''),(1022,'priv','zh-tw','stakeholder-browse','',''),(1023,'priv','de','stakeholder-create','',''),(1023,'priv','en','stakeholder-create','',''),(1023,'priv','fr','stakeholder-create','',''),(1023,'priv','zh-cn','stakeholder-create','',''),(1023,'priv','zh-tw','stakeholder-create','',''),(1024,'priv','de','stakeholder-batchCreate','',''),(1024,'priv','en','stakeholder-batchCreate','',''),(1024,'priv','fr','stakeholder-batchCreate','',''),(1024,'priv','zh-cn','stakeholder-batchCreate','',''),(1024,'priv','zh-tw','stakeholder-batchCreate','',''),(1025,'priv','de','stakeholder-edit','',''),(1025,'priv','en','stakeholder-edit','',''),(1025,'priv','fr','stakeholder-edit','',''),(1025,'priv','zh-cn','stakeholder-edit','',''),(1025,'priv','zh-tw','stakeholder-edit','',''),(1027,'priv','de','stakeholder-delete','',''),(1027,'priv','en','stakeholder-delete','',''),(1027,'priv','fr','stakeholder-delete','',''),(1027,'priv','zh-cn','stakeholder-delete','',''),(1027,'priv','zh-tw','stakeholder-delete','',''),(1028,'priv','de','stakeholder-viewAction','',''),(1028,'priv','en','stakeholder-viewAction','',''),(1028,'priv','fr','stakeholder-viewAction','',''),(1028,'priv','zh-cn','stakeholder-viewAction','',''),(1028,'priv','zh-tw','stakeholder-viewAction','',''),(1031,'priv','de','stakeholder-communicate','',''),(1031,'priv','en','stakeholder-communicate','',''),(1031,'priv','fr','stakeholder-communicate','',''),(1031,'priv','zh-cn','stakeholder-communicate','',''),(1031,'priv','zh-tw','stakeholder-communicate','',''),(1032,'priv','de','stakeholder-expect','',''),(1032,'priv','en','stakeholder-expect','',''),(1032,'priv','fr','stakeholder-expect','',''),(1032,'priv','zh-cn','stakeholder-expect','',''),(1032,'priv','zh-tw','stakeholder-expect','',''),(1038,'priv','de','stakeholder-userIssue','',''),(1038,'priv','en','stakeholder-userIssue','',''),(1038,'priv','fr','stakeholder-userIssue','',''),(1038,'priv','zh-cn','stakeholder-userIssue','',''),(1038,'priv','zh-tw','stakeholder-userIssue','',''),(1039,'priv','de','branch-manage','',''),(1039,'priv','en','branch-manage','',''),(1039,'priv','fr','branch-manage','',''),(1039,'priv','zh-cn','branch-manage','',''),(1039,'priv','zh-tw','branch-manage','',''),(1040,'priv','de','branch-createAction','',''),(1040,'priv','en','branch-createAction','',''),(1040,'priv','fr','branch-createAction','',''),(1040,'priv','zh-cn','branch-createAction','',''),(1040,'priv','zh-tw','branch-createAction','',''),(1041,'priv','de','branch-editAction','',''),(1041,'priv','en','branch-editAction','',''),(1041,'priv','fr','branch-editAction','',''),(1041,'priv','zh-cn','branch-editAction','',''),(1041,'priv','zh-tw','branch-editAction','',''),(1042,'priv','de','branch-closeAction','',''),(1042,'priv','en','branch-closeAction','',''),(1042,'priv','fr','branch-closeAction','',''),(1042,'priv','zh-cn','branch-closeAction','',''),(1042,'priv','zh-tw','branch-closeAction','',''),(1043,'priv','de','branch-activateAction','',''),(1043,'priv','en','branch-activateAction','',''),(1043,'priv','fr','branch-activateAction','',''),(1043,'priv','zh-cn','branch-activateAction','',''),(1043,'priv','zh-tw','branch-activateAction','',''),(1044,'priv','de','branch-sort','',''),(1044,'priv','en','branch-sort','',''),(1044,'priv','fr','branch-sort','',''),(1044,'priv','zh-cn','branch-sort','',''),(1044,'priv','zh-tw','branch-sort','',''),(1045,'priv','de','branch-batchEdit','',''),(1045,'priv','en','branch-batchEdit','',''),(1045,'priv','fr','branch-batchEdit','',''),(1045,'priv','zh-cn','branch-batchEdit','',''),(1045,'priv','zh-tw','branch-batchEdit','',''),(1046,'priv','de','branch-mergeBranchAction','',''),(1046,'priv','en','branch-mergeBranchAction','',''),(1046,'priv','fr','branch-mergeBranchAction','',''),(1046,'priv','zh-cn','branch-mergeBranchAction','',''),(1046,'priv','zh-tw','branch-mergeBranchAction','',''),(1047,'priv','de','repo-createAction','',''),(1047,'priv','en','repo-createAction','',''),(1047,'priv','fr','repo-createAction','',''),(1047,'priv','zh-cn','repo-createAction','',''),(1047,'priv','zh-tw','repo-createAction','',''),(1048,'priv','de','repo-editAction','',''),(1048,'priv','en','repo-editAction','',''),(1048,'priv','fr','repo-editAction','',''),(1048,'priv','zh-cn','repo-editAction','',''),(1048,'priv','zh-tw','repo-editAction','',''),(1049,'priv','de','repo-delete','',''),(1049,'priv','en','repo-delete','',''),(1049,'priv','fr','repo-delete','',''),(1049,'priv','zh-cn','repo-delete','',''),(1049,'priv','zh-tw','repo-delete','',''),(1050,'priv','de','repo-showSyncCommit','',''),(1050,'priv','en','repo-showSyncCommit','',''),(1050,'priv','fr','repo-showSyncCommit','',''),(1050,'priv','zh-cn','repo-showSyncCommit','',''),(1050,'priv','zh-tw','repo-showSyncCommit','',''),(1051,'priv','de','repo-maintain','',''),(1051,'priv','en','repo-maintain','',''),(1051,'priv','fr','repo-maintain','',''),(1051,'priv','zh-cn','repo-maintain','',''),(1051,'priv','zh-tw','repo-maintain','',''),(1052,'priv','de','repo-browseAction','',''),(1052,'priv','en','repo-browseAction','',''),(1052,'priv','fr','repo-browseAction','',''),(1052,'priv','zh-cn','repo-browseAction','',''),(1052,'priv','zh-tw','repo-browseAction','',''),(1053,'priv','de','repo-view','',''),(1053,'priv','en','repo-view','',''),(1053,'priv','fr','repo-view','',''),(1053,'priv','zh-cn','repo-view','',''),(1053,'priv','zh-tw','repo-view','',''),(1054,'priv','de','repo-diffAction','',''),(1054,'priv','en','repo-diffAction','',''),(1054,'priv','fr','repo-diffAction','',''),(1054,'priv','zh-cn','repo-diffAction','',''),(1054,'priv','zh-tw','repo-diffAction','',''),(1055,'priv','de','repo-log','',''),(1055,'priv','en','repo-log','',''),(1055,'priv','fr','repo-log','',''),(1055,'priv','zh-cn','repo-log','',''),(1055,'priv','zh-tw','repo-log','',''),(1056,'priv','de','repo-revisionAction','',''),(1056,'priv','en','repo-revisionAction','',''),(1056,'priv','fr','repo-revisionAction','',''),(1056,'priv','zh-cn','repo-revisionAction','',''),(1056,'priv','zh-tw','repo-revisionAction','',''),(1057,'priv','de','repo-blameAction','',''),(1057,'priv','en','repo-blameAction','',''),(1057,'priv','fr','repo-blameAction','',''),(1057,'priv','zh-cn','repo-blameAction','',''),(1057,'priv','zh-tw','repo-blameAction','',''),(1058,'priv','de','repo-downloadAction','',''),(1058,'priv','en','repo-downloadAction','',''),(1058,'priv','fr','repo-downloadAction','',''),(1058,'priv','zh-cn','repo-downloadAction','',''),(1058,'priv','zh-tw','repo-downloadAction','',''),(1059,'priv','de','repo-setRules','',''),(1059,'priv','en','repo-setRules','',''),(1059,'priv','fr','repo-setRules','',''),(1059,'priv','zh-cn','repo-setRules','',''),(1059,'priv','zh-tw','repo-setRules','',''),(1060,'priv','de','repo-apiGetRepoByUrl','',''),(1060,'priv','en','repo-apiGetRepoByUrl','',''),(1060,'priv','fr','repo-apiGetRepoByUrl','',''),(1060,'priv','zh-cn','repo-apiGetRepoByUrl','',''),(1060,'priv','zh-tw','repo-apiGetRepoByUrl','',''),(1061,'priv','de','repo-downloadCode','',''),(1061,'priv','en','repo-downloadCode','',''),(1061,'priv','fr','repo-downloadCode','',''),(1061,'priv','zh-cn','repo-downloadCode','',''),(1061,'priv','zh-tw','repo-downloadCode','',''),(1062,'priv','de','repo-linkStory','',''),(1062,'priv','en','repo-linkStory','',''),(1062,'priv','fr','repo-linkStory','',''),(1062,'priv','zh-cn','repo-linkStory','',''),(1062,'priv','zh-tw','repo-linkStory','',''),(1063,'priv','de','repo-linkBug','',''),(1063,'priv','en','repo-linkBug','',''),(1063,'priv','fr','repo-linkBug','',''),(1063,'priv','zh-cn','repo-linkBug','',''),(1063,'priv','zh-tw','repo-linkBug','',''),(1064,'priv','de','repo-linkTask','',''),(1064,'priv','en','repo-linkTask','',''),(1064,'priv','fr','repo-linkTask','',''),(1064,'priv','zh-cn','repo-linkTask','',''),(1064,'priv','zh-tw','repo-linkTask','',''),(1065,'priv','de','repo-unlink','',''),(1065,'priv','en','repo-unlink','',''),(1065,'priv','fr','repo-unlink','',''),(1065,'priv','zh-cn','repo-unlink','',''),(1065,'priv','zh-tw','repo-unlink','',''),(1066,'priv','de','repo-reviewAction','',''),(1066,'priv','en','repo-reviewAction','',''),(1066,'priv','fr','repo-reviewAction','',''),(1066,'priv','zh-cn','repo-reviewAction','',''),(1066,'priv','zh-tw','repo-reviewAction','',''),(1067,'priv','de','repo-addBug','',''),(1067,'priv','en','repo-addBug','',''),(1067,'priv','fr','repo-addBug','',''),(1067,'priv','zh-cn','repo-addBug','',''),(1067,'priv','zh-tw','repo-addBug','',''),(1068,'priv','de','repo-editBug','',''),(1068,'priv','en','repo-editBug','',''),(1068,'priv','fr','repo-editBug','',''),(1068,'priv','zh-cn','repo-editBug','',''),(1068,'priv','zh-tw','repo-editBug','',''),(1069,'priv','de','repo-deleteBug','',''),(1069,'priv','en','repo-deleteBug','',''),(1069,'priv','fr','repo-deleteBug','',''),(1069,'priv','zh-cn','repo-deleteBug','',''),(1069,'priv','zh-tw','repo-deleteBug','',''),(1070,'priv','de','repo-addComment','',''),(1070,'priv','en','repo-addComment','',''),(1070,'priv','fr','repo-addComment','',''),(1070,'priv','zh-cn','repo-addComment','',''),(1070,'priv','zh-tw','repo-addComment','',''),(1071,'priv','de','repo-editComment','',''),(1071,'priv','en','repo-editComment','',''),(1071,'priv','fr','repo-editComment','',''),(1071,'priv','zh-cn','repo-editComment','',''),(1071,'priv','zh-tw','repo-editComment','',''),(1072,'priv','de','repo-deleteComment','',''),(1072,'priv','en','repo-deleteComment','',''),(1072,'priv','fr','repo-deleteComment','',''),(1072,'priv','zh-cn','repo-deleteComment','',''),(1072,'priv','zh-tw','repo-deleteComment','',''),(1073,'priv','de','ci-commitResult','',''),(1073,'priv','en','ci-commitResult','',''),(1073,'priv','fr','ci-commitResult','',''),(1073,'priv','zh-cn','ci-commitResult','',''),(1073,'priv','zh-tw','ci-commitResult','',''),(1074,'priv','de','ci-checkCompileStatus','',''),(1074,'priv','en','ci-checkCompileStatus','',''),(1074,'priv','fr','ci-checkCompileStatus','',''),(1074,'priv','zh-cn','ci-checkCompileStatus','',''),(1074,'priv','zh-tw','ci-checkCompileStatus','',''),(1075,'priv','de','compile-browse','',''),(1075,'priv','en','compile-browse','',''),(1075,'priv','fr','compile-browse','',''),(1075,'priv','zh-cn','compile-browse','',''),(1075,'priv','zh-tw','compile-browse','',''),(1076,'priv','de','compile-logs','',''),(1076,'priv','en','compile-logs','',''),(1076,'priv','fr','compile-logs','',''),(1076,'priv','zh-cn','compile-logs','',''),(1076,'priv','zh-tw','compile-logs','',''),(1077,'priv','de','compile-syncCompile','',''),(1077,'priv','en','compile-syncCompile','',''),(1077,'priv','fr','compile-syncCompile','',''),(1077,'priv','zh-cn','compile-syncCompile','',''),(1077,'priv','zh-tw','compile-syncCompile','',''),(1078,'priv','de','jenkins-browseAction','',''),(1078,'priv','en','jenkins-browseAction','',''),(1078,'priv','fr','jenkins-browseAction','',''),(1078,'priv','zh-cn','jenkins-browseAction','',''),(1078,'priv','zh-tw','jenkins-browseAction','',''),(1079,'priv','de','jenkins-create','',''),(1079,'priv','en','jenkins-create','',''),(1079,'priv','fr','jenkins-create','',''),(1079,'priv','zh-cn','jenkins-create','',''),(1079,'priv','zh-tw','jenkins-create','',''),(1080,'priv','de','jenkins-edit','',''),(1080,'priv','en','jenkins-edit','',''),(1080,'priv','fr','jenkins-edit','',''),(1080,'priv','zh-cn','jenkins-edit','',''),(1080,'priv','zh-tw','jenkins-edit','',''),(1081,'priv','de','jenkins-deleteAction','',''),(1081,'priv','en','jenkins-deleteAction','',''),(1081,'priv','fr','jenkins-deleteAction','',''),(1081,'priv','zh-cn','jenkins-deleteAction','',''),(1081,'priv','zh-tw','jenkins-deleteAction','',''),(1082,'priv','de','job-browseAction','',''),(1082,'priv','en','job-browseAction','',''),(1082,'priv','fr','job-browseAction','',''),(1082,'priv','zh-cn','job-browseAction','',''),(1082,'priv','zh-tw','job-browseAction','',''),(1083,'priv','de','job-create','',''),(1083,'priv','en','job-create','',''),(1083,'priv','fr','job-create','',''),(1083,'priv','zh-cn','job-create','',''),(1083,'priv','zh-tw','job-create','',''),(1084,'priv','de','job-edit','',''),(1084,'priv','en','job-edit','',''),(1084,'priv','fr','job-edit','',''),(1084,'priv','zh-cn','job-edit','',''),(1084,'priv','zh-tw','job-edit','',''),(1085,'priv','de','job-delete','',''),(1085,'priv','en','job-delete','',''),(1085,'priv','fr','job-delete','',''),(1085,'priv','zh-cn','job-delete','',''),(1085,'priv','zh-tw','job-delete','',''),(1086,'priv','de','job-exec','',''),(1086,'priv','en','job-exec','',''),(1086,'priv','fr','job-exec','',''),(1086,'priv','zh-cn','job-exec','',''),(1086,'priv','zh-tw','job-exec','',''),(1087,'priv','de','job-view','',''),(1087,'priv','en','job-view','',''),(1087,'priv','fr','job-view','',''),(1087,'priv','zh-cn','job-view','',''),(1087,'priv','zh-tw','job-view','',''),(1088,'priv','de','datatable-setGlobal','',''),(1088,'priv','en','datatable-setGlobal','',''),(1088,'priv','fr','datatable-setGlobal','',''),(1088,'priv','zh-cn','datatable-setGlobal','',''),(1088,'priv','zh-tw','datatable-setGlobal','',''),(1089,'priv','de','gitlab-browseAction','',''),(1089,'priv','en','gitlab-browseAction','',''),(1089,'priv','fr','gitlab-browseAction','',''),(1089,'priv','zh-cn','gitlab-browseAction','',''),(1089,'priv','zh-tw','gitlab-browseAction','',''),(1090,'priv','de','gitlab-create','',''),(1090,'priv','en','gitlab-create','',''),(1090,'priv','fr','gitlab-create','',''),(1090,'priv','zh-cn','gitlab-create','',''),(1090,'priv','zh-tw','gitlab-create','',''),(1091,'priv','de','gitlab-edit','',''),(1091,'priv','en','gitlab-edit','',''),(1091,'priv','fr','gitlab-edit','',''),(1091,'priv','zh-cn','gitlab-edit','',''),(1091,'priv','zh-tw','gitlab-edit','',''),(1092,'priv','de','gitlab-view','',''),(1092,'priv','en','gitlab-view','',''),(1092,'priv','fr','gitlab-view','',''),(1092,'priv','zh-cn','gitlab-view','',''),(1092,'priv','zh-tw','gitlab-view','',''),(1093,'priv','de','gitlab-importIssue','',''),(1093,'priv','en','gitlab-importIssue','',''),(1093,'priv','fr','gitlab-importIssue','',''),(1093,'priv','zh-cn','gitlab-importIssue','',''),(1093,'priv','zh-tw','gitlab-importIssue','',''),(1094,'priv','de','gitlab-delete','',''),(1094,'priv','en','gitlab-delete','',''),(1094,'priv','fr','gitlab-delete','',''),(1094,'priv','zh-cn','gitlab-delete','',''),(1094,'priv','zh-tw','gitlab-delete','',''),(1095,'priv','de','gitlab-bindUser','',''),(1095,'priv','en','gitlab-bindUser','',''),(1095,'priv','fr','gitlab-bindUser','',''),(1095,'priv','zh-cn','gitlab-bindUser','',''),(1095,'priv','zh-tw','gitlab-bindUser','',''),(1096,'priv','de','gitlab-browseProject','',''),(1096,'priv','en','gitlab-browseProject','',''),(1096,'priv','fr','gitlab-browseProject','',''),(1096,'priv','zh-cn','gitlab-browseProject','',''),(1096,'priv','zh-tw','gitlab-browseProject','',''),(1097,'priv','de','gitlab-createProject','',''),(1097,'priv','en','gitlab-createProject','',''),(1097,'priv','fr','gitlab-createProject','',''),(1097,'priv','zh-cn','gitlab-createProject','',''),(1097,'priv','zh-tw','gitlab-createProject','',''),(1098,'priv','de','gitlab-editProject','',''),(1098,'priv','en','gitlab-editProject','',''),(1098,'priv','fr','gitlab-editProject','',''),(1098,'priv','zh-cn','gitlab-editProject','',''),(1098,'priv','zh-tw','gitlab-editProject','',''),(1099,'priv','de','gitlab-deleteProject','',''),(1099,'priv','en','gitlab-deleteProject','',''),(1099,'priv','fr','gitlab-deleteProject','',''),(1099,'priv','zh-cn','gitlab-deleteProject','',''),(1099,'priv','zh-tw','gitlab-deleteProject','',''),(1100,'priv','de','gitlab-browseGroup','',''),(1100,'priv','en','gitlab-browseGroup','',''),(1100,'priv','fr','gitlab-browseGroup','',''),(1100,'priv','zh-cn','gitlab-browseGroup','',''),(1100,'priv','zh-tw','gitlab-browseGroup','',''),(1101,'priv','de','gitlab-createGroup','',''),(1101,'priv','en','gitlab-createGroup','',''),(1101,'priv','fr','gitlab-createGroup','',''),(1101,'priv','zh-cn','gitlab-createGroup','',''),(1101,'priv','zh-tw','gitlab-createGroup','',''),(1102,'priv','de','gitlab-editGroup','',''),(1102,'priv','en','gitlab-editGroup','',''),(1102,'priv','fr','gitlab-editGroup','',''),(1102,'priv','zh-cn','gitlab-editGroup','',''),(1102,'priv','zh-tw','gitlab-editGroup','',''),(1103,'priv','de','gitlab-deleteGroup','',''),(1103,'priv','en','gitlab-deleteGroup','',''),(1103,'priv','fr','gitlab-deleteGroup','',''),(1103,'priv','zh-cn','gitlab-deleteGroup','',''),(1103,'priv','zh-tw','gitlab-deleteGroup','',''),(1104,'priv','de','gitlab-manageGroupMembers','',''),(1104,'priv','en','gitlab-manageGroupMembers','',''),(1104,'priv','fr','gitlab-manageGroupMembers','',''),(1104,'priv','zh-cn','gitlab-manageGroupMembers','',''),(1104,'priv','zh-tw','gitlab-manageGroupMembers','',''),(1105,'priv','de','gitlab-browseUser','',''),(1105,'priv','en','gitlab-browseUser','',''),(1105,'priv','fr','gitlab-browseUser','',''),(1105,'priv','zh-cn','gitlab-browseUser','',''),(1105,'priv','zh-tw','gitlab-browseUser','',''),(1106,'priv','de','gitlab-createUser','',''),(1106,'priv','en','gitlab-createUser','',''),(1106,'priv','fr','gitlab-createUser','',''),(1106,'priv','zh-cn','gitlab-createUser','',''),(1106,'priv','zh-tw','gitlab-createUser','',''),(1107,'priv','de','gitlab-editUser','',''),(1107,'priv','en','gitlab-editUser','',''),(1107,'priv','fr','gitlab-editUser','',''),(1107,'priv','zh-cn','gitlab-editUser','',''),(1107,'priv','zh-tw','gitlab-editUser','',''),(1108,'priv','de','gitlab-deleteUser','',''),(1108,'priv','en','gitlab-deleteUser','',''),(1108,'priv','fr','gitlab-deleteUser','',''),(1108,'priv','zh-cn','gitlab-deleteUser','',''),(1108,'priv','zh-tw','gitlab-deleteUser','',''),(1109,'priv','de','gitlab-createBranch','',''),(1109,'priv','en','gitlab-createBranch','',''),(1109,'priv','fr','gitlab-createBranch','',''),(1109,'priv','zh-cn','gitlab-createBranch','',''),(1109,'priv','zh-tw','gitlab-createBranch','',''),(1110,'priv','de','gitlab-browseBranch','',''),(1110,'priv','en','gitlab-browseBranch','',''),(1110,'priv','fr','gitlab-browseBranch','',''),(1110,'priv','zh-cn','gitlab-browseBranch','',''),(1110,'priv','zh-tw','gitlab-browseBranch','',''),(1111,'priv','de','gitlab-webhook','',''),(1111,'priv','en','gitlab-webhook','',''),(1111,'priv','fr','gitlab-webhook','',''),(1111,'priv','zh-cn','gitlab-webhook','',''),(1111,'priv','zh-tw','gitlab-webhook','',''),(1112,'priv','de','gitlab-createWebhook','',''),(1112,'priv','en','gitlab-createWebhook','',''),(1112,'priv','fr','gitlab-createWebhook','',''),(1112,'priv','zh-cn','gitlab-createWebhook','',''),(1112,'priv','zh-tw','gitlab-createWebhook','',''),(1113,'priv','de','gitlab-manageProjectMembers','',''),(1113,'priv','en','gitlab-manageProjectMembers','',''),(1113,'priv','fr','gitlab-manageProjectMembers','',''),(1113,'priv','zh-cn','gitlab-manageProjectMembers','',''),(1113,'priv','zh-tw','gitlab-manageProjectMembers','',''),(1114,'priv','de','gitlab-browseBranchPriv','',''),(1114,'priv','en','gitlab-browseBranchPriv','',''),(1114,'priv','fr','gitlab-browseBranchPriv','',''),(1114,'priv','zh-cn','gitlab-browseBranchPriv','',''),(1114,'priv','zh-tw','gitlab-browseBranchPriv','',''),(1115,'priv','de','gitlab-browseTagPriv','',''),(1115,'priv','en','gitlab-browseTagPriv','',''),(1115,'priv','fr','gitlab-browseTagPriv','',''),(1115,'priv','zh-cn','gitlab-browseTagPriv','',''),(1115,'priv','zh-tw','gitlab-browseTagPriv','',''),(1116,'priv','de','gitlab-browseTag','',''),(1116,'priv','en','gitlab-browseTag','',''),(1116,'priv','fr','gitlab-browseTag','',''),(1116,'priv','zh-cn','gitlab-browseTag','',''),(1116,'priv','zh-tw','gitlab-browseTag','',''),(1117,'priv','de','gitlab-createTag','',''),(1117,'priv','en','gitlab-createTag','',''),(1117,'priv','fr','gitlab-createTag','',''),(1117,'priv','zh-cn','gitlab-createTag','',''),(1117,'priv','zh-tw','gitlab-createTag','',''),(1118,'priv','de','gitlab-deleteTag','',''),(1118,'priv','en','gitlab-deleteTag','',''),(1118,'priv','fr','gitlab-deleteTag','',''),(1118,'priv','zh-cn','gitlab-deleteTag','',''),(1118,'priv','zh-tw','gitlab-deleteTag','',''),(1120,'priv','de','gogs-browseAction','',''),(1120,'priv','en','gogs-browseAction','',''),(1120,'priv','fr','gogs-browseAction','',''),(1120,'priv','zh-cn','gogs-browseAction','',''),(1120,'priv','zh-tw','gogs-browseAction','',''),(1121,'priv','de','gogs-create','',''),(1121,'priv','en','gogs-create','',''),(1121,'priv','fr','gogs-create','',''),(1121,'priv','zh-cn','gogs-create','',''),(1121,'priv','zh-tw','gogs-create','',''),(1122,'priv','de','gogs-edit','',''),(1122,'priv','en','gogs-edit','',''),(1122,'priv','fr','gogs-edit','',''),(1122,'priv','zh-cn','gogs-edit','',''),(1122,'priv','zh-tw','gogs-edit','',''),(1123,'priv','de','gogs-view','',''),(1123,'priv','en','gogs-view','',''),(1123,'priv','fr','gogs-view','',''),(1123,'priv','zh-cn','gogs-view','',''),(1123,'priv','zh-tw','gogs-view','',''),(1124,'priv','de','gogs-delete','',''),(1124,'priv','en','gogs-delete','',''),(1124,'priv','fr','gogs-delete','',''),(1124,'priv','zh-cn','gogs-delete','',''),(1124,'priv','zh-tw','gogs-delete','',''),(1125,'priv','de','gogs-bindUser','',''),(1125,'priv','en','gogs-bindUser','',''),(1125,'priv','fr','gogs-bindUser','',''),(1125,'priv','zh-cn','gogs-bindUser','',''),(1125,'priv','zh-tw','gogs-bindUser','',''),(1126,'priv','de','gitea-browseAction','',''),(1126,'priv','en','gitea-browseAction','',''),(1126,'priv','fr','gitea-browseAction','',''),(1126,'priv','zh-cn','gitea-browseAction','',''),(1126,'priv','zh-tw','gitea-browseAction','',''),(1127,'priv','de','gitea-create','',''),(1127,'priv','en','gitea-create','',''),(1127,'priv','fr','gitea-create','',''),(1127,'priv','zh-cn','gitea-create','',''),(1127,'priv','zh-tw','gitea-create','',''),(1128,'priv','de','gitea-edit','',''),(1128,'priv','en','gitea-edit','',''),(1128,'priv','fr','gitea-edit','',''),(1128,'priv','zh-cn','gitea-edit','',''),(1128,'priv','zh-tw','gitea-edit','',''),(1129,'priv','de','gitea-view','',''),(1129,'priv','en','gitea-view','',''),(1129,'priv','fr','gitea-view','',''),(1129,'priv','zh-cn','gitea-view','',''),(1129,'priv','zh-tw','gitea-view','',''),(1130,'priv','de','gitea-delete','',''),(1130,'priv','en','gitea-delete','',''),(1130,'priv','fr','gitea-delete','',''),(1130,'priv','zh-cn','gitea-delete','',''),(1130,'priv','zh-tw','gitea-delete','',''),(1131,'priv','de','gitea-bindUser','',''),(1131,'priv','en','gitea-bindUser','',''),(1131,'priv','fr','gitea-bindUser','',''),(1131,'priv','zh-cn','gitea-bindUser','',''),(1131,'priv','zh-tw','gitea-bindUser','',''),(1132,'priv','de','sonarqube-browse','',''),(1132,'priv','en','sonarqube-browse','',''),(1132,'priv','fr','sonarqube-browse','',''),(1132,'priv','zh-cn','sonarqube-browse','',''),(1132,'priv','zh-tw','sonarqube-browse','',''),(1133,'priv','de','sonarqube-create','',''),(1133,'priv','en','sonarqube-create','',''),(1133,'priv','fr','sonarqube-create','',''),(1133,'priv','zh-cn','sonarqube-create','',''),(1133,'priv','zh-tw','sonarqube-create','',''),(1134,'priv','de','sonarqube-edit','',''),(1134,'priv','en','sonarqube-edit','',''),(1134,'priv','fr','sonarqube-edit','',''),(1134,'priv','zh-cn','sonarqube-edit','',''),(1134,'priv','zh-tw','sonarqube-edit','',''),(1135,'priv','de','sonarqube-delete','',''),(1135,'priv','en','sonarqube-delete','',''),(1135,'priv','fr','sonarqube-delete','',''),(1135,'priv','zh-cn','sonarqube-delete','',''),(1135,'priv','zh-tw','sonarqube-delete','',''),(1136,'priv','de','sonarqube-browseProject','',''),(1136,'priv','en','sonarqube-browseProject','',''),(1136,'priv','fr','sonarqube-browseProject','',''),(1136,'priv','zh-cn','sonarqube-browseProject','',''),(1136,'priv','zh-tw','sonarqube-browseProject','',''),(1137,'priv','de','sonarqube-createProject','',''),(1137,'priv','en','sonarqube-createProject','',''),(1137,'priv','fr','sonarqube-createProject','',''),(1137,'priv','zh-cn','sonarqube-createProject','',''),(1137,'priv','zh-tw','sonarqube-createProject','',''),(1138,'priv','de','sonarqube-deleteProject','',''),(1138,'priv','en','sonarqube-deleteProject','',''),(1138,'priv','fr','sonarqube-deleteProject','',''),(1138,'priv','zh-cn','sonarqube-deleteProject','',''),(1138,'priv','zh-tw','sonarqube-deleteProject','',''),(1139,'priv','de','sonarqube-execJob','',''),(1139,'priv','en','sonarqube-execJob','',''),(1139,'priv','fr','sonarqube-execJob','',''),(1139,'priv','zh-cn','sonarqube-execJob','',''),(1139,'priv','zh-tw','sonarqube-execJob','',''),(1140,'priv','de','sonarqube-reportView','',''),(1140,'priv','en','sonarqube-reportView','',''),(1140,'priv','fr','sonarqube-reportView','',''),(1140,'priv','zh-cn','sonarqube-reportView','',''),(1140,'priv','zh-tw','sonarqube-reportView','',''),(1141,'priv','de','sonarqube-browseIssue','',''),(1141,'priv','en','sonarqube-browseIssue','',''),(1141,'priv','fr','sonarqube-browseIssue','',''),(1141,'priv','zh-cn','sonarqube-browseIssue','',''),(1141,'priv','zh-tw','sonarqube-browseIssue','',''),(1142,'priv','de','app-serverLink','',''),(1142,'priv','en','app-serverLink','',''),(1142,'priv','fr','app-serverLink','',''),(1142,'priv','zh-cn','app-serverLink','',''),(1142,'priv','zh-tw','app-serverLink','',''),(1143,'priv','de','webhook-list','',''),(1143,'priv','en','webhook-list','',''),(1143,'priv','fr','webhook-list','',''),(1143,'priv','zh-cn','webhook-list','',''),(1143,'priv','zh-tw','webhook-list','',''),(1144,'priv','de','webhook-create','',''),(1144,'priv','en','webhook-create','',''),(1144,'priv','fr','webhook-create','',''),(1144,'priv','zh-cn','webhook-create','',''),(1144,'priv','zh-tw','webhook-create','',''),(1145,'priv','de','webhook-edit','',''),(1145,'priv','en','webhook-edit','',''),(1145,'priv','fr','webhook-edit','',''),(1145,'priv','zh-cn','webhook-edit','',''),(1145,'priv','zh-tw','webhook-edit','',''),(1146,'priv','de','webhook-delete','',''),(1146,'priv','en','webhook-delete','',''),(1146,'priv','fr','webhook-delete','',''),(1146,'priv','zh-cn','webhook-delete','',''),(1146,'priv','zh-tw','webhook-delete','',''),(1147,'priv','de','webhook-logAction','',''),(1147,'priv','en','webhook-logAction','',''),(1147,'priv','fr','webhook-logAction','',''),(1147,'priv','zh-cn','webhook-logAction','',''),(1147,'priv','zh-tw','webhook-logAction','',''),(1148,'priv','de','webhook-bind','',''),(1148,'priv','en','webhook-bind','',''),(1148,'priv','fr','webhook-bind','',''),(1148,'priv','zh-cn','webhook-bind','',''),(1148,'priv','zh-tw','webhook-bind','',''),(1149,'priv','de','webhook-chooseDept','',''),(1149,'priv','en','webhook-chooseDept','',''),(1149,'priv','fr','webhook-chooseDept','',''),(1149,'priv','zh-cn','webhook-chooseDept','',''),(1149,'priv','zh-tw','webhook-chooseDept','',''),(1150,'priv','de','message-index','',''),(1150,'priv','en','message-index','',''),(1150,'priv','fr','message-index','',''),(1150,'priv','zh-cn','message-index','',''),(1150,'priv','zh-tw','message-index','',''),(1151,'priv','de','message-browser','',''),(1151,'priv','en','message-browser','',''),(1151,'priv','fr','message-browser','',''),(1151,'priv','zh-cn','message-browser','',''),(1151,'priv','zh-tw','message-browser','',''),(1152,'priv','de','message-setting','',''),(1152,'priv','en','message-setting','',''),(1152,'priv','fr','message-setting','',''),(1152,'priv','zh-cn','message-setting','',''),(1152,'priv','zh-tw','message-setting','',''),(1153,'priv','de','effort-calendarAction','',''),(1153,'priv','en','effort-calendarAction','',''),(1153,'priv','fr','effort-calendarAction','',''),(1153,'priv','zh-cn','effort-calendarAction','',''),(1153,'priv','zh-tw','effort-calendarAction','',''),(1154,'priv','de','effort-batchCreate','',''),(1154,'priv','en','effort-batchCreate','',''),(1154,'priv','fr','effort-batchCreate','',''),(1154,'priv','zh-cn','effort-batchCreate','',''),(1154,'priv','zh-tw','effort-batchCreate','',''),(1155,'priv','de','effort-createForObject','',''),(1155,'priv','en','effort-createForObject','',''),(1155,'priv','fr','effort-createForObject','',''),(1155,'priv','zh-cn','effort-createForObject','',''),(1155,'priv','zh-tw','effort-createForObject','',''),(1156,'priv','de','effort-edit','',''),(1156,'priv','en','effort-edit','',''),(1156,'priv','fr','effort-edit','',''),(1156,'priv','zh-cn','effort-edit','',''),(1156,'priv','zh-tw','effort-edit','',''),(1157,'priv','de','effort-batchEdit','',''),(1157,'priv','en','effort-batchEdit','',''),(1157,'priv','fr','effort-batchEdit','',''),(1157,'priv','zh-cn','effort-batchEdit','',''),(1157,'priv','zh-tw','effort-batchEdit','',''),(1158,'priv','de','effort-view','',''),(1158,'priv','en','effort-view','',''),(1158,'priv','fr','effort-view','',''),(1158,'priv','zh-cn','effort-view','',''),(1158,'priv','zh-tw','effort-view','',''),(1159,'priv','de','effort-delete','',''),(1159,'priv','en','effort-delete','',''),(1159,'priv','fr','effort-delete','',''),(1159,'priv','zh-cn','effort-delete','',''),(1159,'priv','zh-tw','effort-delete','',''),(1160,'priv','de','effort-exportAction','',''),(1160,'priv','en','effort-exportAction','',''),(1160,'priv','fr','effort-exportAction','',''),(1160,'priv','zh-cn','effort-exportAction','',''),(1160,'priv','zh-tw','effort-exportAction','',''),(1162,'priv','de','ldap-common','',''),(1162,'priv','en','ldap-common','',''),(1162,'priv','fr','ldap-common','',''),(1162,'priv','zh-cn','ldap-common','',''),(1162,'priv','zh-tw','ldap-common','',''),(1163,'priv','de','sqlbuilder-browseSQLView','',''),(1163,'priv','en','sqlbuilder-browseSQLView','',''),(1163,'priv','fr','sqlbuilder-browseSQLView','',''),(1163,'priv','zh-cn','sqlbuilder-browseSQLView','',''),(1163,'priv','zh-tw','sqlbuilder-browseSQLView','',''),(1164,'priv','de','sqlbuilder-createSQLView','',''),(1164,'priv','en','sqlbuilder-createSQLView','',''),(1164,'priv','fr','sqlbuilder-createSQLView','',''),(1164,'priv','zh-cn','sqlbuilder-createSQLView','',''),(1164,'priv','zh-tw','sqlbuilder-createSQLView','',''),(1165,'priv','de','sqlbuilder-editSQLView','',''),(1165,'priv','en','sqlbuilder-editSQLView','',''),(1165,'priv','fr','sqlbuilder-editSQLView','',''),(1165,'priv','zh-cn','sqlbuilder-editSQLView','',''),(1165,'priv','zh-tw','sqlbuilder-editSQLView','',''),(1166,'priv','de','sqlbuilder-deleteSQLView','',''),(1166,'priv','en','sqlbuilder-deleteSQLView','',''),(1166,'priv','fr','sqlbuilder-deleteSQLView','',''),(1166,'priv','zh-cn','sqlbuilder-deleteSQLView','',''),(1166,'priv','zh-tw','sqlbuilder-deleteSQLView','',''),(1168,'priv','de','feedback-create','',''),(1168,'priv','en','feedback-create','',''),(1168,'priv','fr','feedback-create','',''),(1168,'priv','zh-cn','feedback-create','',''),(1168,'priv','zh-tw','feedback-create','',''),(1169,'priv','de','feedback-edit','',''),(1169,'priv','en','feedback-edit','',''),(1169,'priv','fr','feedback-edit','',''),(1169,'priv','zh-cn','feedback-edit','',''),(1169,'priv','zh-tw','feedback-edit','',''),(1170,'priv','de','feedback-editOthers','',''),(1170,'priv','en','feedback-editOthers','',''),(1170,'priv','fr','feedback-editOthers','',''),(1170,'priv','zh-cn','feedback-editOthers','',''),(1170,'priv','zh-tw','feedback-editOthers','',''),(1171,'priv','de','feedback-adminView','',''),(1171,'priv','en','feedback-adminView','',''),(1171,'priv','fr','feedback-adminView','',''),(1171,'priv','zh-cn','feedback-adminView','',''),(1171,'priv','zh-tw','feedback-adminView','',''),(1172,'priv','de','feedback-admin','',''),(1172,'priv','en','feedback-admin','',''),(1172,'priv','fr','feedback-admin','',''),(1172,'priv','zh-cn','feedback-admin','',''),(1172,'priv','zh-tw','feedback-admin','',''),(1173,'priv','de','feedback-assignAction','',''),(1173,'priv','en','feedback-assignAction','',''),(1173,'priv','fr','feedback-assignAction','',''),(1173,'priv','zh-cn','feedback-assignAction','',''),(1173,'priv','zh-tw','feedback-assignAction','',''),(1174,'priv','de','feedback-toTask','',''),(1174,'priv','en','feedback-toTask','',''),(1174,'priv','fr','feedback-toTask','',''),(1174,'priv','zh-cn','feedback-toTask','',''),(1174,'priv','zh-tw','feedback-toTask','',''),(1175,'priv','de','feedback-toTodo','',''),(1175,'priv','en','feedback-toTodo','',''),(1175,'priv','fr','feedback-toTodo','',''),(1175,'priv','zh-cn','feedback-toTodo','',''),(1175,'priv','zh-tw','feedback-toTodo','',''),(1176,'priv','de','feedback-toBug','',''),(1176,'priv','en','feedback-toBug','',''),(1176,'priv','fr','feedback-toBug','',''),(1176,'priv','zh-cn','feedback-toBug','',''),(1176,'priv','zh-tw','feedback-toBug','',''),(1177,'priv','de','feedback-toStory','',''),(1177,'priv','en','feedback-toStory','',''),(1177,'priv','fr','feedback-toStory','',''),(1177,'priv','zh-cn','feedback-toStory','',''),(1177,'priv','zh-tw','feedback-toStory','',''),(1178,'priv','de','feedback-toTicket','',''),(1178,'priv','en','feedback-toTicket','',''),(1178,'priv','fr','feedback-toTicket','',''),(1178,'priv','zh-cn','feedback-toTicket','',''),(1178,'priv','zh-tw','feedback-toTicket','',''),(1179,'priv','de','feedback-toUserStory','',''),(1179,'priv','en','feedback-toUserStory','',''),(1179,'priv','fr','feedback-toUserStory','',''),(1179,'priv','zh-cn','feedback-toUserStory','',''),(1179,'priv','zh-tw','feedback-toUserStory','',''),(1180,'priv','de','feedback-reviewAction','',''),(1180,'priv','en','feedback-reviewAction','',''),(1180,'priv','fr','feedback-reviewAction','',''),(1180,'priv','zh-cn','feedback-reviewAction','',''),(1180,'priv','zh-tw','feedback-reviewAction','',''),(1181,'priv','de','feedback-comment','',''),(1181,'priv','en','feedback-comment','',''),(1181,'priv','fr','feedback-comment','',''),(1181,'priv','zh-cn','feedback-comment','',''),(1181,'priv','zh-tw','feedback-comment','',''),(1182,'priv','de','feedback-reply','',''),(1182,'priv','en','feedback-reply','',''),(1182,'priv','fr','feedback-reply','',''),(1182,'priv','zh-cn','feedback-reply','',''),(1182,'priv','zh-tw','feedback-reply','',''),(1183,'priv','de','feedback-ask','',''),(1183,'priv','en','feedback-ask','',''),(1183,'priv','fr','feedback-ask','',''),(1183,'priv','zh-cn','feedback-ask','',''),(1183,'priv','zh-tw','feedback-ask','',''),(1184,'priv','de','feedback-closeAction','',''),(1184,'priv','en','feedback-closeAction','',''),(1184,'priv','fr','feedback-closeAction','',''),(1184,'priv','zh-cn','feedback-closeAction','',''),(1184,'priv','zh-tw','feedback-closeAction','',''),(1185,'priv','de','feedback-delete','',''),(1185,'priv','en','feedback-delete','',''),(1185,'priv','fr','feedback-delete','',''),(1185,'priv','zh-cn','feedback-delete','',''),(1185,'priv','zh-tw','feedback-delete','',''),(1186,'priv','de','feedback-activate','',''),(1186,'priv','en','feedback-activate','',''),(1186,'priv','fr','feedback-activate','',''),(1186,'priv','zh-cn','feedback-activate','',''),(1186,'priv','zh-tw','feedback-activate','',''),(1187,'priv','de','feedback-exportAction','',''),(1187,'priv','en','feedback-exportAction','',''),(1187,'priv','fr','feedback-exportAction','',''),(1187,'priv','zh-cn','feedback-exportAction','',''),(1187,'priv','zh-tw','feedback-exportAction','',''),(1188,'priv','de','feedback-batchEdit','',''),(1188,'priv','en','feedback-batchEdit','',''),(1188,'priv','fr','feedback-batchEdit','',''),(1188,'priv','zh-cn','feedback-batchEdit','',''),(1188,'priv','zh-tw','feedback-batchEdit','',''),(1189,'priv','de','feedback-batchClose','',''),(1189,'priv','en','feedback-batchClose','',''),(1189,'priv','fr','feedback-batchClose','',''),(1189,'priv','zh-cn','feedback-batchClose','',''),(1189,'priv','zh-tw','feedback-batchClose','',''),(1190,'priv','de','feedback-batchReview','',''),(1190,'priv','en','feedback-batchReview','',''),(1190,'priv','fr','feedback-batchReview','',''),(1190,'priv','zh-cn','feedback-batchReview','',''),(1190,'priv','zh-tw','feedback-batchReview','',''),(1191,'priv','de','feedback-batchAssignTo','',''),(1191,'priv','en','feedback-batchAssignTo','',''),(1191,'priv','fr','feedback-batchAssignTo','',''),(1191,'priv','zh-cn','feedback-batchAssignTo','',''),(1191,'priv','zh-tw','feedback-batchAssignTo','',''),(1193,'priv','de','feedback-products','',''),(1193,'priv','en','feedback-products','',''),(1193,'priv','fr','feedback-products','',''),(1193,'priv','zh-cn','feedback-products','',''),(1193,'priv','zh-tw','feedback-products','',''),(1194,'priv','de','feedback-manageProduct','',''),(1194,'priv','en','feedback-manageProduct','',''),(1194,'priv','fr','feedback-manageProduct','',''),(1194,'priv','zh-cn','feedback-manageProduct','',''),(1194,'priv','zh-tw','feedback-manageProduct','',''),(1195,'priv','de','feedback-import','',''),(1195,'priv','en','feedback-import','',''),(1195,'priv','fr','feedback-import','',''),(1195,'priv','zh-cn','feedback-import','',''),(1195,'priv','zh-tw','feedback-import','',''),(1196,'priv','de','feedback-exportTemplate','',''),(1196,'priv','en','feedback-exportTemplate','',''),(1196,'priv','fr','feedback-exportTemplate','',''),(1196,'priv','zh-cn','feedback-exportTemplate','',''),(1196,'priv','zh-tw','feedback-exportTemplate','',''),(1197,'priv','de','feedback-syncProduct','',''),(1197,'priv','en','feedback-syncProduct','',''),(1197,'priv','fr','feedback-syncProduct','',''),(1197,'priv','zh-cn','feedback-syncProduct','',''),(1197,'priv','zh-tw','feedback-syncProduct','',''),(1198,'priv','de','feedback-productSetting','',''),(1198,'priv','en','feedback-productSetting','',''),(1198,'priv','fr','feedback-productSetting','',''),(1198,'priv','zh-cn','feedback-productSetting','',''),(1198,'priv','zh-tw','feedback-productSetting','',''),(1199,'priv','de','faq-browse','',''),(1199,'priv','en','faq-browse','',''),(1199,'priv','fr','faq-browse','',''),(1199,'priv','zh-cn','faq-browse','',''),(1199,'priv','zh-tw','faq-browse','',''),(1200,'priv','de','faq-create','',''),(1200,'priv','en','faq-create','',''),(1200,'priv','fr','faq-create','',''),(1200,'priv','zh-cn','faq-create','',''),(1200,'priv','zh-tw','faq-create','',''),(1201,'priv','de','faq-edit','',''),(1201,'priv','en','faq-edit','',''),(1201,'priv','fr','faq-edit','',''),(1201,'priv','zh-cn','faq-edit','',''),(1201,'priv','zh-tw','faq-edit','',''),(1202,'priv','de','faq-delete','',''),(1202,'priv','en','faq-delete','',''),(1202,'priv','fr','faq-delete','',''),(1202,'priv','zh-cn','faq-delete','',''),(1202,'priv','zh-tw','faq-delete','',''),(1204,'priv','de','ticket-create','',''),(1204,'priv','en','ticket-create','',''),(1204,'priv','fr','ticket-create','',''),(1204,'priv','zh-cn','ticket-create','',''),(1204,'priv','zh-tw','ticket-create','',''),(1205,'priv','de','ticket-edit','',''),(1205,'priv','en','ticket-edit','',''),(1205,'priv','fr','ticket-edit','',''),(1205,'priv','zh-cn','ticket-edit','',''),(1205,'priv','zh-tw','ticket-edit','',''),(1206,'priv','de','ticket-view','',''),(1206,'priv','en','ticket-view','',''),(1206,'priv','fr','ticket-view','',''),(1206,'priv','zh-cn','ticket-view','',''),(1206,'priv','zh-tw','ticket-view','',''),(1207,'priv','de','ticket-browse','',''),(1207,'priv','en','ticket-browse','',''),(1207,'priv','fr','ticket-browse','',''),(1207,'priv','zh-cn','ticket-browse','',''),(1207,'priv','zh-tw','ticket-browse','',''),(1208,'priv','de','ticket-assign','',''),(1208,'priv','en','ticket-assign','',''),(1208,'priv','fr','ticket-assign','',''),(1208,'priv','zh-cn','ticket-assign','',''),(1208,'priv','zh-tw','ticket-assign','',''),(1209,'priv','de','ticket-createBug','',''),(1209,'priv','en','ticket-createBug','',''),(1209,'priv','fr','ticket-createBug','',''),(1209,'priv','zh-cn','ticket-createBug','',''),(1209,'priv','zh-tw','ticket-createBug','',''),(1210,'priv','de','ticket-createStory','',''),(1210,'priv','en','ticket-createStory','',''),(1210,'priv','fr','ticket-createStory','',''),(1210,'priv','zh-cn','ticket-createStory','',''),(1210,'priv','zh-tw','ticket-createStory','',''),(1211,'priv','de','ticket-start','',''),(1211,'priv','en','ticket-start','',''),(1211,'priv','fr','ticket-start','',''),(1211,'priv','zh-cn','ticket-start','',''),(1211,'priv','zh-tw','ticket-start','',''),(1212,'priv','de','ticket-finish','',''),(1212,'priv','en','ticket-finish','',''),(1212,'priv','fr','ticket-finish','',''),(1212,'priv','zh-cn','ticket-finish','',''),(1212,'priv','zh-tw','ticket-finish','',''),(1213,'priv','de','ticket-close','',''),(1213,'priv','en','ticket-close','',''),(1213,'priv','fr','ticket-close','',''),(1213,'priv','zh-cn','ticket-close','',''),(1213,'priv','zh-tw','ticket-close','',''),(1214,'priv','de','ticket-activate','',''),(1214,'priv','en','ticket-activate','',''),(1214,'priv','fr','ticket-activate','',''),(1214,'priv','zh-cn','ticket-activate','',''),(1214,'priv','zh-tw','ticket-activate','',''),(1215,'priv','de','ticket-delete','',''),(1215,'priv','en','ticket-delete','',''),(1215,'priv','fr','ticket-delete','',''),(1215,'priv','zh-cn','ticket-delete','',''),(1215,'priv','zh-tw','ticket-delete','',''),(1216,'priv','de','ticket-exportTemplate','',''),(1216,'priv','en','ticket-exportTemplate','',''),(1216,'priv','fr','ticket-exportTemplate','',''),(1216,'priv','zh-cn','ticket-exportTemplate','',''),(1216,'priv','zh-tw','ticket-exportTemplate','',''),(1217,'priv','de','ticket-import','',''),(1217,'priv','en','ticket-import','',''),(1217,'priv','fr','ticket-import','',''),(1217,'priv','zh-cn','ticket-import','',''),(1217,'priv','zh-tw','ticket-import','',''),(1218,'priv','de','ticket-exportAction','',''),(1218,'priv','en','ticket-exportAction','',''),(1218,'priv','fr','ticket-exportAction','',''),(1218,'priv','zh-cn','ticket-exportAction','',''),(1218,'priv','zh-tw','ticket-exportAction','',''),(1219,'priv','de','ticket-batchEdit','',''),(1219,'priv','en','ticket-batchEdit','',''),(1219,'priv','fr','ticket-batchEdit','',''),(1219,'priv','zh-cn','ticket-batchEdit','',''),(1219,'priv','zh-tw','ticket-batchEdit','',''),(1220,'priv','de','ticket-batchClose','',''),(1220,'priv','en','ticket-batchClose','',''),(1220,'priv','fr','ticket-batchClose','',''),(1220,'priv','zh-cn','ticket-batchClose','',''),(1220,'priv','zh-tw','ticket-batchClose','',''),(1221,'priv','de','ticket-batchActivate','',''),(1221,'priv','en','ticket-batchActivate','',''),(1221,'priv','fr','ticket-batchActivate','',''),(1221,'priv','zh-cn','ticket-batchActivate','',''),(1221,'priv','zh-tw','ticket-batchActivate','',''),(1222,'priv','de','ticket-batchFinish','',''),(1222,'priv','en','ticket-batchFinish','',''),(1222,'priv','fr','ticket-batchFinish','',''),(1222,'priv','zh-cn','ticket-batchFinish','',''),(1222,'priv','zh-tw','ticket-batchFinish','',''),(1223,'priv','de','ticket-batchAssignTo','',''),(1223,'priv','en','ticket-batchAssignTo','',''),(1223,'priv','fr','ticket-batchAssignTo','',''),(1223,'priv','zh-cn','ticket-batchAssignTo','',''),(1223,'priv','zh-tw','ticket-batchAssignTo','',''),(1224,'priv','de','ticket-syncProduct','',''),(1224,'priv','en','ticket-syncProduct','',''),(1224,'priv','fr','ticket-syncProduct','',''),(1224,'priv','zh-cn','ticket-syncProduct','',''),(1224,'priv','zh-tw','ticket-syncProduct','',''),(1225,'priv','de','attend-department','',''),(1225,'priv','en','attend-department','',''),(1225,'priv','fr','attend-department','',''),(1225,'priv','zh-cn','attend-department','',''),(1225,'priv','zh-tw','attend-department','',''),(1226,'priv','de','attend-company','',''),(1226,'priv','en','attend-company','',''),(1226,'priv','fr','attend-company','',''),(1226,'priv','zh-cn','attend-company','',''),(1226,'priv','zh-tw','attend-company','',''),(1227,'priv','de','attend-browseReview','',''),(1227,'priv','en','attend-browseReview','',''),(1227,'priv','fr','attend-browseReview','',''),(1227,'priv','zh-cn','attend-browseReview','',''),(1227,'priv','zh-tw','attend-browseReview','',''),(1228,'priv','de','attend-review','',''),(1228,'priv','en','attend-review','',''),(1228,'priv','fr','attend-review','',''),(1228,'priv','zh-cn','attend-review','',''),(1228,'priv','zh-tw','attend-review','',''),(1229,'priv','de','attend-exportAction','',''),(1229,'priv','en','attend-exportAction','',''),(1229,'priv','fr','attend-exportAction','',''),(1229,'priv','zh-cn','attend-exportAction','',''),(1229,'priv','zh-tw','attend-exportAction','',''),(1230,'priv','de','attend-reportAction','',''),(1230,'priv','en','attend-reportAction','',''),(1230,'priv','fr','attend-reportAction','',''),(1230,'priv','zh-cn','attend-reportAction','',''),(1230,'priv','zh-tw','attend-reportAction','',''),(1231,'priv','de','attend-saveStatAction','',''),(1231,'priv','en','attend-saveStatAction','',''),(1231,'priv','fr','attend-saveStatAction','',''),(1231,'priv','zh-cn','attend-saveStatAction','',''),(1231,'priv','zh-tw','attend-saveStatAction','',''),(1232,'priv','de','attend-exportStat','',''),(1232,'priv','en','attend-exportStat','',''),(1232,'priv','fr','attend-exportStat','',''),(1232,'priv','zh-cn','attend-exportStat','',''),(1232,'priv','zh-tw','attend-exportStat','',''),(1233,'priv','de','attend-detailAction','',''),(1233,'priv','en','attend-detailAction','',''),(1233,'priv','fr','attend-detailAction','',''),(1233,'priv','zh-cn','attend-detailAction','',''),(1233,'priv','zh-tw','attend-detailAction','',''),(1234,'priv','de','attend-exportDetail','',''),(1234,'priv','en','attend-exportDetail','',''),(1234,'priv','fr','attend-exportDetail','',''),(1234,'priv','zh-cn','attend-exportDetail','',''),(1234,'priv','zh-tw','attend-exportDetail','',''),(1235,'priv','de','attend-settings','',''),(1235,'priv','en','attend-settings','',''),(1235,'priv','fr','attend-settings','',''),(1235,'priv','zh-cn','attend-settings','',''),(1235,'priv','zh-tw','attend-settings','',''),(1236,'priv','de','attend-personalSettings','',''),(1236,'priv','en','attend-personalSettings','',''),(1236,'priv','fr','attend-personalSettings','',''),(1236,'priv','zh-cn','attend-personalSettings','',''),(1236,'priv','zh-tw','attend-personalSettings','',''),(1237,'priv','de','attend-setManager','',''),(1237,'priv','en','attend-setManager','',''),(1237,'priv','fr','attend-setManager','',''),(1237,'priv','zh-cn','attend-setManager','',''),(1237,'priv','zh-tw','attend-setManager','',''),(1238,'priv','de','attend-personal','',''),(1238,'priv','en','attend-personal','',''),(1238,'priv','fr','attend-personal','',''),(1238,'priv','zh-cn','attend-personal','',''),(1238,'priv','zh-tw','attend-personal','',''),(1239,'priv','de','attend-editAction','',''),(1239,'priv','en','attend-editAction','',''),(1239,'priv','fr','attend-editAction','',''),(1239,'priv','zh-cn','attend-editAction','',''),(1239,'priv','zh-tw','attend-editAction','',''),(1240,'priv','de','leave-browseReview','',''),(1240,'priv','en','leave-browseReview','',''),(1240,'priv','fr','leave-browseReview','',''),(1240,'priv','zh-cn','leave-browseReview','',''),(1240,'priv','zh-tw','leave-browseReview','',''),(1241,'priv','de','leave-companyAction','',''),(1241,'priv','en','leave-companyAction','',''),(1241,'priv','fr','leave-companyAction','',''),(1241,'priv','zh-cn','leave-companyAction','',''),(1241,'priv','zh-tw','leave-companyAction','',''),(1242,'priv','de','leave-reviewAction','',''),(1242,'priv','en','leave-reviewAction','',''),(1242,'priv','fr','leave-reviewAction','',''),(1242,'priv','zh-cn','leave-reviewAction','',''),(1242,'priv','zh-tw','leave-reviewAction','',''),(1243,'priv','de','leave-exportAction','',''),(1243,'priv','en','leave-exportAction','',''),(1243,'priv','fr','leave-exportAction','',''),(1243,'priv','zh-cn','leave-exportAction','',''),(1243,'priv','zh-tw','leave-exportAction','',''),(1244,'priv','de','leave-setReviewerAction','',''),(1244,'priv','en','leave-setReviewerAction','',''),(1244,'priv','fr','leave-setReviewerAction','',''),(1244,'priv','zh-cn','leave-setReviewerAction','',''),(1244,'priv','zh-tw','leave-setReviewerAction','',''),(1245,'priv','de','leave-personalAnnual','',''),(1245,'priv','en','leave-personalAnnual','',''),(1245,'priv','fr','leave-personalAnnual','',''),(1245,'priv','zh-cn','leave-personalAnnual','',''),(1245,'priv','zh-tw','leave-personalAnnual','',''),(1246,'priv','de','leave-personal','',''),(1246,'priv','en','leave-personal','',''),(1246,'priv','fr','leave-personal','',''),(1246,'priv','zh-cn','leave-personal','',''),(1246,'priv','zh-tw','leave-personal','',''),(1247,'priv','de','leave-createAction','',''),(1247,'priv','en','leave-createAction','',''),(1247,'priv','fr','leave-createAction','',''),(1247,'priv','zh-cn','leave-createAction','',''),(1247,'priv','zh-tw','leave-createAction','',''),(1248,'priv','de','leave-editAction','',''),(1248,'priv','en','leave-editAction','',''),(1248,'priv','fr','leave-editAction','',''),(1248,'priv','zh-cn','leave-editAction','',''),(1248,'priv','zh-tw','leave-editAction','',''),(1249,'priv','de','leave-deleteAction','',''),(1249,'priv','en','leave-deleteAction','',''),(1249,'priv','fr','leave-deleteAction','',''),(1249,'priv','zh-cn','leave-deleteAction','',''),(1249,'priv','zh-tw','leave-deleteAction','',''),(1250,'priv','de','leave-viewAction','',''),(1250,'priv','en','leave-viewAction','',''),(1250,'priv','fr','leave-viewAction','',''),(1250,'priv','zh-cn','leave-viewAction','',''),(1250,'priv','zh-tw','leave-viewAction','',''),(1251,'priv','de','leave-switchstatus','',''),(1251,'priv','en','leave-switchstatus','',''),(1251,'priv','fr','leave-switchstatus','',''),(1251,'priv','zh-cn','leave-switchstatus','',''),(1251,'priv','zh-tw','leave-switchstatus','',''),(1252,'priv','de','leave-backAction','',''),(1252,'priv','en','leave-backAction','',''),(1252,'priv','fr','leave-backAction','',''),(1252,'priv','zh-cn','leave-backAction','',''),(1252,'priv','zh-tw','leave-backAction','',''),(1253,'priv','de','makeup-browseReview','',''),(1253,'priv','en','makeup-browseReview','',''),(1253,'priv','fr','makeup-browseReview','',''),(1253,'priv','zh-cn','makeup-browseReview','',''),(1253,'priv','zh-tw','makeup-browseReview','',''),(1254,'priv','de','makeup-companyAction','',''),(1254,'priv','en','makeup-companyAction','',''),(1254,'priv','fr','makeup-companyAction','',''),(1254,'priv','zh-cn','makeup-companyAction','',''),(1254,'priv','zh-tw','makeup-companyAction','',''),(1255,'priv','de','makeup-reviewAction','',''),(1255,'priv','en','makeup-reviewAction','',''),(1255,'priv','fr','makeup-reviewAction','',''),(1255,'priv','zh-cn','makeup-reviewAction','',''),(1255,'priv','zh-tw','makeup-reviewAction','',''),(1256,'priv','de','makeup-exportAction','',''),(1256,'priv','en','makeup-exportAction','',''),(1256,'priv','fr','makeup-exportAction','',''),(1256,'priv','zh-cn','makeup-exportAction','',''),(1256,'priv','zh-tw','makeup-exportAction','',''),(1257,'priv','de','makeup-setReviewerAction','',''),(1257,'priv','en','makeup-setReviewerAction','',''),(1257,'priv','fr','makeup-setReviewerAction','',''),(1257,'priv','zh-cn','makeup-setReviewerAction','',''),(1257,'priv','zh-tw','makeup-setReviewerAction','',''),(1258,'priv','de','makeup-personal','',''),(1258,'priv','en','makeup-personal','',''),(1258,'priv','fr','makeup-personal','',''),(1258,'priv','zh-cn','makeup-personal','',''),(1258,'priv','zh-tw','makeup-personal','',''),(1259,'priv','de','makeup-createAction','',''),(1259,'priv','en','makeup-createAction','',''),(1259,'priv','fr','makeup-createAction','',''),(1259,'priv','zh-cn','makeup-createAction','',''),(1259,'priv','zh-tw','makeup-createAction','',''),(1260,'priv','de','makeup-editAction','',''),(1260,'priv','en','makeup-editAction','',''),(1260,'priv','fr','makeup-editAction','',''),(1260,'priv','zh-cn','makeup-editAction','',''),(1260,'priv','zh-tw','makeup-editAction','',''),(1261,'priv','de','makeup-viewAction','',''),(1261,'priv','en','makeup-viewAction','',''),(1261,'priv','fr','makeup-viewAction','',''),(1261,'priv','zh-cn','makeup-viewAction','',''),(1261,'priv','zh-tw','makeup-viewAction','',''),(1262,'priv','de','makeup-deleteAction','',''),(1262,'priv','en','makeup-deleteAction','',''),(1262,'priv','fr','makeup-deleteAction','',''),(1262,'priv','zh-cn','makeup-deleteAction','',''),(1262,'priv','zh-tw','makeup-deleteAction','',''),(1263,'priv','de','makeup-switchstatus','',''),(1263,'priv','en','makeup-switchstatus','',''),(1263,'priv','fr','makeup-switchstatus','',''),(1263,'priv','zh-cn','makeup-switchstatus','',''),(1263,'priv','zh-tw','makeup-switchstatus','',''),(1264,'priv','de','overtime-browseReview','',''),(1264,'priv','en','overtime-browseReview','',''),(1264,'priv','fr','overtime-browseReview','',''),(1264,'priv','zh-cn','overtime-browseReview','',''),(1264,'priv','zh-tw','overtime-browseReview','',''),(1265,'priv','de','overtime-companyAction','',''),(1265,'priv','en','overtime-companyAction','',''),(1265,'priv','fr','overtime-companyAction','',''),(1265,'priv','zh-cn','overtime-companyAction','',''),(1265,'priv','zh-tw','overtime-companyAction','',''),(1266,'priv','de','overtime-reviewAction','',''),(1266,'priv','en','overtime-reviewAction','',''),(1266,'priv','fr','overtime-reviewAction','',''),(1266,'priv','zh-cn','overtime-reviewAction','',''),(1266,'priv','zh-tw','overtime-reviewAction','',''),(1267,'priv','de','overtime-exportAction','',''),(1267,'priv','en','overtime-exportAction','',''),(1267,'priv','fr','overtime-exportAction','',''),(1267,'priv','zh-cn','overtime-exportAction','',''),(1267,'priv','zh-tw','overtime-exportAction','',''),(1268,'priv','de','overtime-setReviewerAction','',''),(1268,'priv','en','overtime-setReviewerAction','',''),(1268,'priv','fr','overtime-setReviewerAction','',''),(1268,'priv','zh-cn','overtime-setReviewerAction','',''),(1268,'priv','zh-tw','overtime-setReviewerAction','',''),(1269,'priv','de','overtime-personal','',''),(1269,'priv','en','overtime-personal','',''),(1269,'priv','fr','overtime-personal','',''),(1269,'priv','zh-cn','overtime-personal','',''),(1269,'priv','zh-tw','overtime-personal','',''),(1270,'priv','de','overtime-createAction','',''),(1270,'priv','en','overtime-createAction','',''),(1270,'priv','fr','overtime-createAction','',''),(1270,'priv','zh-cn','overtime-createAction','',''),(1270,'priv','zh-tw','overtime-createAction','',''),(1271,'priv','de','overtime-editAction','',''),(1271,'priv','en','overtime-editAction','',''),(1271,'priv','fr','overtime-editAction','',''),(1271,'priv','zh-cn','overtime-editAction','',''),(1271,'priv','zh-tw','overtime-editAction','',''),(1272,'priv','de','overtime-viewAction','',''),(1272,'priv','en','overtime-viewAction','',''),(1272,'priv','fr','overtime-viewAction','',''),(1272,'priv','zh-cn','overtime-viewAction','',''),(1272,'priv','zh-tw','overtime-viewAction','',''),(1273,'priv','de','overtime-deleteAction','',''),(1273,'priv','en','overtime-deleteAction','',''),(1273,'priv','fr','overtime-deleteAction','',''),(1273,'priv','zh-cn','overtime-deleteAction','',''),(1273,'priv','zh-tw','overtime-deleteAction','',''),(1274,'priv','de','overtime-switchstatus','',''),(1274,'priv','en','overtime-switchstatus','',''),(1274,'priv','fr','overtime-switchstatus','',''),(1274,'priv','zh-cn','overtime-switchstatus','',''),(1274,'priv','zh-tw','overtime-switchstatus','',''),(1275,'priv','de','lieu-companyAction','',''),(1275,'priv','en','lieu-companyAction','',''),(1275,'priv','fr','lieu-companyAction','',''),(1275,'priv','zh-cn','lieu-companyAction','',''),(1275,'priv','zh-tw','lieu-companyAction','',''),(1276,'priv','de','lieu-browseReviewAction','',''),(1276,'priv','en','lieu-browseReviewAction','',''),(1276,'priv','fr','lieu-browseReviewAction','',''),(1276,'priv','zh-cn','lieu-browseReviewAction','',''),(1276,'priv','zh-tw','lieu-browseReviewAction','',''),(1277,'priv','de','lieu-reviewAction','',''),(1277,'priv','en','lieu-reviewAction','',''),(1277,'priv','fr','lieu-reviewAction','',''),(1277,'priv','zh-cn','lieu-reviewAction','',''),(1277,'priv','zh-tw','lieu-reviewAction','',''),(1278,'priv','de','lieu-setReviewerAction','',''),(1278,'priv','en','lieu-setReviewerAction','',''),(1278,'priv','fr','lieu-setReviewerAction','',''),(1278,'priv','zh-cn','lieu-setReviewerAction','',''),(1278,'priv','zh-tw','lieu-setReviewerAction','',''),(1279,'priv','de','lieu-personal','',''),(1279,'priv','en','lieu-personal','',''),(1279,'priv','fr','lieu-personal','',''),(1279,'priv','zh-cn','lieu-personal','',''),(1279,'priv','zh-tw','lieu-personal','',''),(1280,'priv','de','lieu-createAction','',''),(1280,'priv','en','lieu-createAction','',''),(1280,'priv','fr','lieu-createAction','',''),(1280,'priv','zh-cn','lieu-createAction','',''),(1280,'priv','zh-tw','lieu-createAction','',''),(1281,'priv','de','lieu-editAction','',''),(1281,'priv','en','lieu-editAction','',''),(1281,'priv','fr','lieu-editAction','',''),(1281,'priv','zh-cn','lieu-editAction','',''),(1281,'priv','zh-tw','lieu-editAction','',''),(1282,'priv','de','lieu-deleteAction','',''),(1282,'priv','en','lieu-deleteAction','',''),(1282,'priv','fr','lieu-deleteAction','',''),(1282,'priv','zh-cn','lieu-deleteAction','',''),(1282,'priv','zh-tw','lieu-deleteAction','',''),(1283,'priv','de','lieu-viewAction','',''),(1283,'priv','en','lieu-viewAction','',''),(1283,'priv','fr','lieu-viewAction','',''),(1283,'priv','zh-cn','lieu-viewAction','',''),(1283,'priv','zh-tw','lieu-viewAction','',''),(1284,'priv','de','lieu-switchstatus','',''),(1284,'priv','en','lieu-switchstatus','',''),(1284,'priv','fr','lieu-switchstatus','',''),(1284,'priv','zh-cn','lieu-switchstatus','',''),(1284,'priv','zh-tw','lieu-switchstatus','',''),(1285,'priv','de','ops-index','',''),(1285,'priv','en','ops-index','',''),(1285,'priv','fr','ops-index','',''),(1285,'priv','zh-cn','ops-index','',''),(1285,'priv','zh-tw','ops-index','',''),(1286,'priv','de','ops-setting','',''),(1286,'priv','en','ops-setting','',''),(1286,'priv','fr','ops-setting','',''),(1286,'priv','zh-cn','ops-setting','',''),(1286,'priv','zh-tw','ops-setting','',''),(1287,'priv','de','host-browse','',''),(1287,'priv','en','host-browse','',''),(1287,'priv','fr','host-browse','',''),(1287,'priv','zh-cn','host-browse','',''),(1287,'priv','zh-tw','host-browse','',''),(1288,'priv','de','host-create','',''),(1288,'priv','en','host-create','',''),(1288,'priv','fr','host-create','',''),(1288,'priv','zh-cn','host-create','',''),(1288,'priv','zh-tw','host-create','',''),(1289,'priv','de','host-editAction','',''),(1289,'priv','en','host-editAction','',''),(1289,'priv','fr','host-editAction','',''),(1289,'priv','zh-cn','host-editAction','',''),(1289,'priv','zh-tw','host-editAction','',''),(1290,'priv','de','host-view','',''),(1290,'priv','en','host-view','',''),(1290,'priv','fr','host-view','',''),(1290,'priv','zh-cn','host-view','',''),(1290,'priv','zh-tw','host-view','',''),(1291,'priv','de','host-deleteAction','',''),(1291,'priv','en','host-deleteAction','',''),(1291,'priv','fr','host-deleteAction','',''),(1291,'priv','zh-cn','host-deleteAction','',''),(1291,'priv','zh-tw','host-deleteAction','',''),(1292,'priv','de','host-changeStatus','',''),(1292,'priv','en','host-changeStatus','',''),(1292,'priv','fr','host-changeStatus','',''),(1292,'priv','zh-cn','host-changeStatus','',''),(1292,'priv','zh-tw','host-changeStatus','',''),(1293,'priv','de','host-treemap','',''),(1293,'priv','en','host-treemap','',''),(1293,'priv','fr','host-treemap','',''),(1293,'priv','zh-cn','host-treemap','',''),(1293,'priv','zh-tw','host-treemap','',''),(1294,'priv','de','serverroom-browse','',''),(1294,'priv','en','serverroom-browse','',''),(1294,'priv','fr','serverroom-browse','',''),(1294,'priv','zh-cn','serverroom-browse','',''),(1294,'priv','zh-tw','serverroom-browse','',''),(1295,'priv','de','serverroom-create','',''),(1295,'priv','en','serverroom-create','',''),(1295,'priv','fr','serverroom-create','',''),(1295,'priv','zh-cn','serverroom-create','',''),(1295,'priv','zh-tw','serverroom-create','',''),(1296,'priv','de','serverroom-editAction','',''),(1296,'priv','en','serverroom-editAction','',''),(1296,'priv','fr','serverroom-editAction','',''),(1296,'priv','zh-cn','serverroom-editAction','',''),(1296,'priv','zh-tw','serverroom-editAction','',''),(1297,'priv','de','serverroom-view','',''),(1297,'priv','en','serverroom-view','',''),(1297,'priv','fr','serverroom-view','',''),(1297,'priv','zh-cn','serverroom-view','',''),(1297,'priv','zh-tw','serverroom-view','',''),(1298,'priv','de','serverroom-delete','',''),(1298,'priv','en','serverroom-delete','',''),(1298,'priv','fr','serverroom-delete','',''),(1298,'priv','zh-cn','serverroom-delete','',''),(1298,'priv','zh-tw','serverroom-delete','',''),(1299,'priv','de','account-browse','',''),(1299,'priv','en','account-browse','',''),(1299,'priv','fr','account-browse','',''),(1299,'priv','zh-cn','account-browse','',''),(1299,'priv','zh-tw','account-browse','',''),(1300,'priv','de','account-create','',''),(1300,'priv','en','account-create','',''),(1300,'priv','fr','account-create','',''),(1300,'priv','zh-cn','account-create','',''),(1300,'priv','zh-tw','account-create','',''),(1301,'priv','de','account-editAction','',''),(1301,'priv','en','account-editAction','',''),(1301,'priv','fr','account-editAction','',''),(1301,'priv','zh-cn','account-editAction','',''),(1301,'priv','zh-tw','account-editAction','',''),(1302,'priv','de','account-view','',''),(1302,'priv','en','account-view','',''),(1302,'priv','fr','account-view','',''),(1302,'priv','zh-cn','account-view','',''),(1302,'priv','zh-tw','account-view','',''),(1303,'priv','de','account-deleteAction','',''),(1303,'priv','en','account-deleteAction','',''),(1303,'priv','fr','account-deleteAction','',''),(1303,'priv','zh-cn','account-deleteAction','',''),(1303,'priv','zh-tw','account-deleteAction','',''),(1304,'priv','de','domain-browse','',''),(1304,'priv','en','domain-browse','',''),(1304,'priv','fr','domain-browse','',''),(1304,'priv','zh-cn','domain-browse','',''),(1304,'priv','zh-tw','domain-browse','',''),(1305,'priv','de','domain-create','',''),(1305,'priv','en','domain-create','',''),(1305,'priv','fr','domain-create','',''),(1305,'priv','zh-cn','domain-create','',''),(1305,'priv','zh-tw','domain-create','',''),(1306,'priv','de','domain-editAction','',''),(1306,'priv','en','domain-editAction','',''),(1306,'priv','fr','domain-editAction','',''),(1306,'priv','zh-cn','domain-editAction','',''),(1306,'priv','zh-tw','domain-editAction','',''),(1307,'priv','de','domain-view','',''),(1307,'priv','en','domain-view','',''),(1307,'priv','fr','domain-view','',''),(1307,'priv','zh-cn','domain-view','',''),(1307,'priv','zh-tw','domain-view','',''),(1308,'priv','de','domain-deleteAction','',''),(1308,'priv','en','domain-deleteAction','',''),(1308,'priv','fr','domain-deleteAction','',''),(1308,'priv','zh-cn','domain-deleteAction','',''),(1308,'priv','zh-tw','domain-deleteAction','',''),(1309,'priv','de','service-browseAction','',''),(1309,'priv','en','service-browseAction','',''),(1309,'priv','fr','service-browseAction','',''),(1309,'priv','zh-cn','service-browseAction','',''),(1309,'priv','zh-tw','service-browseAction','',''),(1310,'priv','de','service-create','',''),(1310,'priv','en','service-create','',''),(1310,'priv','fr','service-create','',''),(1310,'priv','zh-cn','service-create','',''),(1310,'priv','zh-tw','service-create','',''),(1311,'priv','de','service-edit','',''),(1311,'priv','en','service-edit','',''),(1311,'priv','fr','service-edit','',''),(1311,'priv','zh-cn','service-edit','',''),(1311,'priv','zh-tw','service-edit','',''),(1312,'priv','de','service-delete','',''),(1312,'priv','en','service-delete','',''),(1312,'priv','fr','service-delete','',''),(1312,'priv','zh-cn','service-delete','',''),(1312,'priv','zh-tw','service-delete','',''),(1313,'priv','de','service-view','',''),(1313,'priv','en','service-view','',''),(1313,'priv','fr','service-view','',''),(1313,'priv','zh-cn','service-view','',''),(1313,'priv','zh-tw','service-view','',''),(1315,'priv','de','service-manage','',''),(1315,'priv','en','service-manage','',''),(1315,'priv','fr','service-manage','',''),(1315,'priv','zh-cn','service-manage','',''),(1315,'priv','zh-tw','service-manage','',''),(1316,'priv','de','deploy-browseAction','',''),(1316,'priv','en','deploy-browseAction','',''),(1316,'priv','fr','deploy-browseAction','',''),(1316,'priv','zh-cn','deploy-browseAction','',''),(1316,'priv','zh-tw','deploy-browseAction','',''),(1317,'priv','de','deploy-create','',''),(1317,'priv','en','deploy-create','',''),(1317,'priv','fr','deploy-create','',''),(1317,'priv','zh-cn','deploy-create','',''),(1317,'priv','zh-tw','deploy-create','',''),(1318,'priv','de','deploy-editAction','',''),(1318,'priv','en','deploy-editAction','',''),(1318,'priv','fr','deploy-editAction','',''),(1318,'priv','zh-cn','deploy-editAction','',''),(1318,'priv','zh-tw','deploy-editAction','',''),(1319,'priv','de','deploy-deleteAction','',''),(1319,'priv','en','deploy-deleteAction','',''),(1319,'priv','fr','deploy-deleteAction','',''),(1319,'priv','zh-cn','deploy-deleteAction','',''),(1319,'priv','zh-tw','deploy-deleteAction','',''),(1320,'priv','de','deploy-activateAction','',''),(1320,'priv','en','deploy-activateAction','',''),(1320,'priv','fr','deploy-activateAction','',''),(1320,'priv','zh-cn','deploy-activateAction','',''),(1320,'priv','zh-tw','deploy-activateAction','',''),(1321,'priv','de','deploy-finishAction','',''),(1321,'priv','en','deploy-finishAction','',''),(1321,'priv','fr','deploy-finishAction','',''),(1321,'priv','zh-cn','deploy-finishAction','',''),(1321,'priv','zh-tw','deploy-finishAction','',''),(1322,'priv','de','deploy-scope','',''),(1322,'priv','en','deploy-scope','',''),(1322,'priv','fr','deploy-scope','',''),(1322,'priv','zh-cn','deploy-scope','',''),(1322,'priv','zh-tw','deploy-scope','',''),(1323,'priv','de','deploy-manageScope','',''),(1323,'priv','en','deploy-manageScope','',''),(1323,'priv','fr','deploy-manageScope','',''),(1323,'priv','zh-cn','deploy-manageScope','',''),(1323,'priv','zh-tw','deploy-manageScope','',''),(1324,'priv','de','deploy-view','',''),(1324,'priv','en','deploy-view','',''),(1324,'priv','fr','deploy-view','',''),(1324,'priv','zh-cn','deploy-view','',''),(1324,'priv','zh-tw','deploy-view','',''),(1325,'priv','de','deploy-casesAction','',''),(1325,'priv','en','deploy-casesAction','',''),(1325,'priv','fr','deploy-casesAction','',''),(1325,'priv','zh-cn','deploy-casesAction','',''),(1325,'priv','zh-tw','deploy-casesAction','',''),(1326,'priv','de','deploy-linkCases','',''),(1326,'priv','en','deploy-linkCases','',''),(1326,'priv','fr','deploy-linkCases','',''),(1326,'priv','zh-cn','deploy-linkCases','',''),(1326,'priv','zh-tw','deploy-linkCases','',''),(1327,'priv','de','deploy-unlinkCase','',''),(1327,'priv','en','deploy-unlinkCase','',''),(1327,'priv','fr','deploy-unlinkCase','',''),(1327,'priv','zh-cn','deploy-unlinkCase','',''),(1327,'priv','zh-tw','deploy-unlinkCase','',''),(1328,'priv','de','deploy-batchUnlinkCases','',''),(1328,'priv','en','deploy-batchUnlinkCases','',''),(1328,'priv','fr','deploy-batchUnlinkCases','',''),(1328,'priv','zh-cn','deploy-batchUnlinkCases','',''),(1328,'priv','zh-tw','deploy-batchUnlinkCases','',''),(1329,'priv','de','deploy-steps','',''),(1329,'priv','en','deploy-steps','',''),(1329,'priv','fr','deploy-steps','',''),(1329,'priv','zh-cn','deploy-steps','',''),(1329,'priv','zh-tw','deploy-steps','',''),(1330,'priv','de','deploy-manageStep','',''),(1330,'priv','en','deploy-manageStep','',''),(1330,'priv','fr','deploy-manageStep','',''),(1330,'priv','zh-cn','deploy-manageStep','',''),(1330,'priv','zh-tw','deploy-manageStep','',''),(1331,'priv','de','deploy-finishStep','',''),(1331,'priv','en','deploy-finishStep','',''),(1331,'priv','fr','deploy-finishStep','',''),(1331,'priv','zh-cn','deploy-finishStep','',''),(1331,'priv','zh-tw','deploy-finishStep','',''),(1332,'priv','de','deploy-assignAction','',''),(1332,'priv','en','deploy-assignAction','',''),(1332,'priv','fr','deploy-assignAction','',''),(1332,'priv','zh-cn','deploy-assignAction','',''),(1332,'priv','zh-tw','deploy-assignAction','',''),(1333,'priv','de','deploy-viewStep','',''),(1333,'priv','en','deploy-viewStep','',''),(1333,'priv','fr','deploy-viewStep','',''),(1333,'priv','zh-cn','deploy-viewStep','',''),(1333,'priv','zh-tw','deploy-viewStep','',''),(1334,'priv','de','deploy-editStep','',''),(1334,'priv','en','deploy-editStep','',''),(1334,'priv','fr','deploy-editStep','',''),(1334,'priv','zh-cn','deploy-editStep','',''),(1334,'priv','zh-tw','deploy-editStep','',''),(1335,'priv','de','deploy-deleteStep','',''),(1335,'priv','en','deploy-deleteStep','',''),(1335,'priv','fr','deploy-deleteStep','',''),(1335,'priv','zh-cn','deploy-deleteStep','',''),(1335,'priv','zh-tw','deploy-deleteStep','',''),(1336,'priv','de','conference-admin','',''),(1336,'priv','en','conference-admin','',''),(1336,'priv','fr','conference-admin','',''),(1336,'priv','zh-cn','conference-admin','',''),(1336,'priv','zh-tw','conference-admin','',''),(1337,'priv','de','traincourse-browseAction','',''),(1337,'priv','en','traincourse-browseAction','',''),(1337,'priv','fr','traincourse-browseAction','',''),(1337,'priv','zh-cn','traincourse-browseAction','',''),(1337,'priv','zh-tw','traincourse-browseAction','',''),(1338,'priv','de','traincourse-adminAction','',''),(1338,'priv','en','traincourse-adminAction','',''),(1338,'priv','fr','traincourse-adminAction','',''),(1338,'priv','zh-cn','traincourse-adminAction','',''),(1338,'priv','zh-tw','traincourse-adminAction','',''),(1339,'priv','de','traincourse-deleteCourse','',''),(1339,'priv','en','traincourse-deleteCourse','',''),(1339,'priv','fr','traincourse-deleteCourse','',''),(1339,'priv','zh-cn','traincourse-deleteCourse','',''),(1339,'priv','zh-tw','traincourse-deleteCourse','',''),(1340,'priv','de','traincourse-changeStatus','',''),(1340,'priv','en','traincourse-changeStatus','',''),(1340,'priv','fr','traincourse-changeStatus','',''),(1340,'priv','zh-cn','traincourse-changeStatus','',''),(1340,'priv','zh-tw','traincourse-changeStatus','',''),(1341,'priv','de','traincourse-uploadCourse','',''),(1341,'priv','en','traincourse-uploadCourse','',''),(1341,'priv','fr','traincourse-uploadCourse','',''),(1341,'priv','zh-cn','traincourse-uploadCourse','',''),(1341,'priv','zh-tw','traincourse-uploadCourse','',''),(1342,'priv','de','traincourse-viewCourse','',''),(1342,'priv','en','traincourse-viewCourse','',''),(1342,'priv','fr','traincourse-viewCourse','',''),(1342,'priv','zh-cn','traincourse-viewCourse','',''),(1342,'priv','zh-tw','traincourse-viewCourse','',''),(1343,'priv','de','traincourse-viewChapter','',''),(1343,'priv','en','traincourse-viewChapter','',''),(1343,'priv','fr','traincourse-viewChapter','',''),(1343,'priv','zh-cn','traincourse-viewChapter','',''),(1343,'priv','zh-tw','traincourse-viewChapter','',''),(1344,'priv','de','chart-browseAction','',''),(1344,'priv','en','chart-browseAction','',''),(1344,'priv','fr','chart-browseAction','',''),(1344,'priv','zh-cn','chart-browseAction','',''),(1344,'priv','zh-tw','chart-browseAction','',''),(1345,'priv','de','chart-create','',''),(1345,'priv','en','chart-create','',''),(1345,'priv','fr','chart-create','',''),(1345,'priv','zh-cn','chart-create','',''),(1345,'priv','zh-tw','chart-create','',''),(1346,'priv','de','chart-edit','',''),(1346,'priv','en','chart-edit','',''),(1346,'priv','fr','chart-edit','',''),(1346,'priv','zh-cn','chart-edit','',''),(1346,'priv','zh-tw','chart-edit','',''),(1347,'priv','de','chart-design','',''),(1347,'priv','en','chart-design','',''),(1347,'priv','fr','chart-design','',''),(1347,'priv','zh-cn','chart-design','',''),(1347,'priv','zh-tw','chart-design','',''),(1348,'priv','de','chart-delete','',''),(1348,'priv','en','chart-delete','',''),(1348,'priv','fr','chart-delete','',''),(1348,'priv','zh-cn','chart-delete','',''),(1348,'priv','zh-tw','chart-delete','',''),(1360,'priv','de','pssp-browse','',''),(1360,'priv','en','pssp-browse','',''),(1360,'priv','fr','pssp-browse','',''),(1360,'priv','zh-cn','pssp-browse','',''),(1360,'priv','zh-tw','pssp-browse','',''),(1361,'priv','de','pssp-update','',''),(1361,'priv','en','pssp-update','',''),(1361,'priv','fr','pssp-update','',''),(1361,'priv','zh-cn','pssp-update','',''),(1361,'priv','zh-tw','pssp-update','',''),(1362,'priv','de','baseline-templateType','',''),(1362,'priv','en','baseline-templateType','',''),(1362,'priv','fr','baseline-templateType','',''),(1362,'priv','zh-cn','baseline-templateType','',''),(1362,'priv','zh-tw','baseline-templateType','',''),(1363,'priv','de','baseline-template','',''),(1363,'priv','en','baseline-template','',''),(1363,'priv','fr','baseline-template','',''),(1363,'priv','zh-cn','baseline-template','',''),(1363,'priv','zh-tw','baseline-template','',''),(1364,'priv','de','baseline-createTemplate','',''),(1364,'priv','en','baseline-createTemplate','',''),(1364,'priv','fr','baseline-createTemplate','',''),(1364,'priv','zh-cn','baseline-createTemplate','',''),(1364,'priv','zh-tw','baseline-createTemplate','',''),(1365,'priv','de','baseline-view','',''),(1365,'priv','en','baseline-view','',''),(1365,'priv','fr','baseline-view','',''),(1365,'priv','zh-cn','baseline-view','',''),(1365,'priv','zh-tw','baseline-view','',''),(1366,'priv','de','baseline-editTemplate','',''),(1366,'priv','en','baseline-editTemplate','',''),(1366,'priv','fr','baseline-editTemplate','',''),(1366,'priv','zh-cn','baseline-editTemplate','',''),(1366,'priv','zh-tw','baseline-editTemplate','',''),(1367,'priv','de','baseline-editBook','',''),(1367,'priv','en','baseline-editBook','',''),(1367,'priv','fr','baseline-editBook','',''),(1367,'priv','zh-cn','baseline-editBook','',''),(1367,'priv','zh-tw','baseline-editBook','',''),(1369,'priv','de','baseline-manageBook','',''),(1369,'priv','en','baseline-manageBook','',''),(1369,'priv','fr','baseline-manageBook','',''),(1369,'priv','zh-cn','baseline-manageBook','',''),(1369,'priv','zh-tw','baseline-manageBook','',''),(1370,'priv','de','baseline-delete','',''),(1370,'priv','en','baseline-delete','',''),(1370,'priv','fr','baseline-delete','',''),(1370,'priv','zh-cn','baseline-delete','',''),(1370,'priv','zh-tw','baseline-delete','',''),(1371,'priv','de','classify-browse','',''),(1371,'priv','en','classify-browse','',''),(1371,'priv','fr','classify-browse','',''),(1371,'priv','zh-cn','classify-browse','',''),(1371,'priv','zh-tw','classify-browse','',''),(1372,'priv','de','cm-create','',''),(1372,'priv','en','cm-create','',''),(1372,'priv','fr','cm-create','',''),(1372,'priv','zh-cn','cm-create','',''),(1372,'priv','zh-tw','cm-create','',''),(1373,'priv','de','cm-delete','',''),(1373,'priv','en','cm-delete','',''),(1373,'priv','fr','cm-delete','',''),(1373,'priv','zh-cn','cm-delete','',''),(1373,'priv','zh-tw','cm-delete','',''),(1374,'priv','de','cm-edit','',''),(1374,'priv','en','cm-edit','',''),(1374,'priv','fr','cm-edit','',''),(1374,'priv','zh-cn','cm-edit','',''),(1374,'priv','zh-tw','cm-edit','',''),(1375,'priv','de','cm-browse','',''),(1375,'priv','en','cm-browse','',''),(1375,'priv','fr','cm-browse','',''),(1375,'priv','zh-cn','cm-browse','',''),(1375,'priv','zh-tw','cm-browse','',''),(1376,'priv','de','cm-view','',''),(1376,'priv','en','cm-view','',''),(1376,'priv','fr','cm-view','',''),(1376,'priv','zh-cn','cm-view','',''),(1376,'priv','zh-tw','cm-view','',''),(1377,'priv','de','cm-report','',''),(1377,'priv','en','cm-report','',''),(1377,'priv','fr','cm-report','',''),(1377,'priv','zh-cn','cm-report','',''),(1377,'priv','zh-tw','cm-report','',''),(1378,'priv','de','cmcl-batchCreate','',''),(1378,'priv','en','cmcl-batchCreate','',''),(1378,'priv','fr','cmcl-batchCreate','',''),(1378,'priv','zh-cn','cmcl-batchCreate','',''),(1378,'priv','zh-tw','cmcl-batchCreate','',''),(1379,'priv','de','cmcl-delete','',''),(1379,'priv','en','cmcl-delete','',''),(1379,'priv','fr','cmcl-delete','',''),(1379,'priv','zh-cn','cmcl-delete','',''),(1379,'priv','zh-tw','cmcl-delete','',''),(1380,'priv','de','cmcl-edit','',''),(1380,'priv','en','cmcl-edit','',''),(1380,'priv','fr','cmcl-edit','',''),(1380,'priv','zh-cn','cmcl-edit','',''),(1380,'priv','zh-tw','cmcl-edit','',''),(1381,'priv','de','cmcl-browse','',''),(1381,'priv','en','cmcl-browse','',''),(1381,'priv','fr','cmcl-browse','',''),(1381,'priv','zh-cn','cmcl-browse','',''),(1381,'priv','zh-tw','cmcl-browse','',''),(1382,'priv','de','cmcl-view','',''),(1382,'priv','en','cmcl-view','',''),(1382,'priv','fr','cmcl-view','',''),(1382,'priv','zh-cn','cmcl-view','',''),(1382,'priv','zh-tw','cmcl-view','',''),(1383,'priv','de','cmcl-waterfallplusBrowse','',''),(1383,'priv','en','cmcl-waterfallplusBrowse','',''),(1383,'priv','fr','cmcl-waterfallplusBrowse','',''),(1383,'priv','zh-cn','cmcl-waterfallplusBrowse','',''),(1383,'priv','zh-tw','cmcl-waterfallplusBrowse','',''),(1384,'priv','de','auditcl-batchCreate','',''),(1384,'priv','en','auditcl-batchCreate','',''),(1384,'priv','fr','auditcl-batchCreate','',''),(1384,'priv','zh-cn','auditcl-batchCreate','',''),(1384,'priv','zh-tw','auditcl-batchCreate','',''),(1385,'priv','de','auditcl-batchEdit','',''),(1385,'priv','en','auditcl-batchEdit','',''),(1385,'priv','fr','auditcl-batchEdit','',''),(1385,'priv','zh-cn','auditcl-batchEdit','',''),(1385,'priv','zh-tw','auditcl-batchEdit','',''),(1386,'priv','de','auditcl-delete','',''),(1386,'priv','en','auditcl-delete','',''),(1386,'priv','fr','auditcl-delete','',''),(1386,'priv','zh-cn','auditcl-delete','',''),(1386,'priv','zh-tw','auditcl-delete','',''),(1387,'priv','de','auditcl-edit','',''),(1387,'priv','en','auditcl-edit','',''),(1387,'priv','fr','auditcl-edit','',''),(1387,'priv','zh-cn','auditcl-edit','',''),(1387,'priv','zh-tw','auditcl-edit','',''),(1389,'priv','de','auditcl-scrumBrowse','',''),(1389,'priv','en','auditcl-scrumBrowse','',''),(1389,'priv','fr','auditcl-scrumBrowse','',''),(1389,'priv','zh-cn','auditcl-scrumBrowse','',''),(1389,'priv','zh-tw','auditcl-scrumBrowse','',''),(1390,'priv','de','auditcl-browse','',''),(1390,'priv','en','auditcl-browse','',''),(1390,'priv','fr','auditcl-browse','',''),(1390,'priv','zh-cn','auditcl-browse','',''),(1390,'priv','zh-tw','auditcl-browse','',''),(1391,'priv','de','auditcl-agilePlusBrowse','',''),(1391,'priv','en','auditcl-agilePlusBrowse','',''),(1391,'priv','fr','auditcl-agilePlusBrowse','',''),(1391,'priv','zh-cn','auditcl-agilePlusBrowse','',''),(1391,'priv','zh-tw','auditcl-agilePlusBrowse','',''),(1392,'priv','de','auditcl-waterfallplusBrowse','',''),(1392,'priv','en','auditcl-waterfallplusBrowse','',''),(1392,'priv','fr','auditcl-waterfallplusBrowse','',''),(1392,'priv','zh-cn','auditcl-waterfallplusBrowse','',''),(1392,'priv','zh-tw','auditcl-waterfallplusBrowse','',''),(1393,'priv','de','reviewcl-browse','',''),(1393,'priv','en','reviewcl-browse','',''),(1393,'priv','fr','reviewcl-browse','',''),(1393,'priv','zh-cn','reviewcl-browse','',''),(1393,'priv','zh-tw','reviewcl-browse','',''),(1394,'priv','de','reviewcl-create','',''),(1394,'priv','en','reviewcl-create','',''),(1394,'priv','fr','reviewcl-create','',''),(1394,'priv','zh-cn','reviewcl-create','',''),(1394,'priv','zh-tw','reviewcl-create','',''),(1395,'priv','de','reviewcl-batchCreate','',''),(1395,'priv','en','reviewcl-batchCreate','',''),(1395,'priv','fr','reviewcl-batchCreate','',''),(1395,'priv','zh-cn','reviewcl-batchCreate','',''),(1395,'priv','zh-tw','reviewcl-batchCreate','',''),(1396,'priv','de','reviewcl-delete','',''),(1396,'priv','en','reviewcl-delete','',''),(1396,'priv','fr','reviewcl-delete','',''),(1396,'priv','zh-cn','reviewcl-delete','',''),(1396,'priv','zh-tw','reviewcl-delete','',''),(1397,'priv','de','reviewcl-edit','',''),(1397,'priv','en','reviewcl-edit','',''),(1397,'priv','fr','reviewcl-edit','',''),(1397,'priv','zh-cn','reviewcl-edit','',''),(1397,'priv','zh-tw','reviewcl-edit','',''),(1398,'priv','de','reviewcl-view','',''),(1398,'priv','en','reviewcl-view','',''),(1398,'priv','fr','reviewcl-view','',''),(1398,'priv','zh-cn','reviewcl-view','',''),(1398,'priv','zh-tw','reviewcl-view','',''),(1399,'priv','de','reviewcl-waterfallplusBrowse','',''),(1399,'priv','en','reviewcl-waterfallplusBrowse','',''),(1399,'priv','fr','reviewcl-waterfallplusBrowse','',''),(1399,'priv','zh-cn','reviewcl-waterfallplusBrowse','',''),(1399,'priv','zh-tw','reviewcl-waterfallplusBrowse','',''),(1400,'priv','de','process-create','',''),(1400,'priv','en','process-create','',''),(1400,'priv','fr','process-create','',''),(1400,'priv','zh-cn','process-create','',''),(1400,'priv','zh-tw','process-create','',''),(1401,'priv','de','process-batchCreate','',''),(1401,'priv','en','process-batchCreate','',''),(1401,'priv','fr','process-batchCreate','',''),(1401,'priv','zh-cn','process-batchCreate','',''),(1401,'priv','zh-tw','process-batchCreate','',''),(1402,'priv','de','process-delete','',''),(1402,'priv','en','process-delete','',''),(1402,'priv','fr','process-delete','',''),(1402,'priv','zh-cn','process-delete','',''),(1402,'priv','zh-tw','process-delete','',''),(1403,'priv','de','process-edit','',''),(1403,'priv','en','process-edit','',''),(1403,'priv','fr','process-edit','',''),(1403,'priv','zh-cn','process-edit','',''),(1403,'priv','zh-tw','process-edit','',''),(1404,'priv','de','process-view','',''),(1404,'priv','en','process-view','',''),(1404,'priv','fr','process-view','',''),(1404,'priv','zh-cn','process-view','',''),(1404,'priv','zh-tw','process-view','',''),(1405,'priv','de','process-updateOrder','',''),(1405,'priv','en','process-updateOrder','',''),(1405,'priv','fr','process-updateOrder','',''),(1405,'priv','zh-cn','process-updateOrder','',''),(1405,'priv','zh-tw','process-updateOrder','',''),(1406,'priv','de','process-activityList','',''),(1406,'priv','en','process-activityList','',''),(1406,'priv','fr','process-activityList','',''),(1406,'priv','zh-cn','process-activityList','',''),(1406,'priv','zh-tw','process-activityList','',''),(1407,'priv','de','process-scrumBrowse','',''),(1407,'priv','en','process-scrumBrowse','',''),(1407,'priv','fr','process-scrumBrowse','',''),(1407,'priv','zh-cn','process-scrumBrowse','',''),(1407,'priv','zh-tw','process-scrumBrowse','',''),(1408,'priv','de','process-browse','',''),(1408,'priv','en','process-browse','',''),(1408,'priv','fr','process-browse','',''),(1408,'priv','zh-cn','process-browse','',''),(1408,'priv','zh-tw','process-browse','',''),(1409,'priv','de','process-agilePlusBrowse','',''),(1409,'priv','en','process-agilePlusBrowse','',''),(1409,'priv','fr','process-agilePlusBrowse','',''),(1409,'priv','zh-cn','process-agilePlusBrowse','',''),(1409,'priv','zh-tw','process-agilePlusBrowse','',''),(1410,'priv','de','process-waterfallPlusBrowse','',''),(1410,'priv','en','process-waterfallPlusBrowse','',''),(1410,'priv','fr','process-waterfallPlusBrowse','',''),(1410,'priv','zh-cn','process-waterfallPlusBrowse','',''),(1410,'priv','zh-tw','process-waterfallPlusBrowse','',''),(1411,'priv','de','activity-browse','',''),(1411,'priv','en','activity-browse','',''),(1411,'priv','fr','activity-browse','',''),(1411,'priv','zh-cn','activity-browse','',''),(1411,'priv','zh-tw','activity-browse','',''),(1412,'priv','de','activity-create','',''),(1412,'priv','en','activity-create','',''),(1412,'priv','fr','activity-create','',''),(1412,'priv','zh-cn','activity-create','',''),(1412,'priv','zh-tw','activity-create','',''),(1413,'priv','de','activity-batchCreate','',''),(1413,'priv','en','activity-batchCreate','',''),(1413,'priv','fr','activity-batchCreate','',''),(1413,'priv','zh-cn','activity-batchCreate','',''),(1413,'priv','zh-tw','activity-batchCreate','',''),(1414,'priv','de','activity-delete','',''),(1414,'priv','en','activity-delete','',''),(1414,'priv','fr','activity-delete','',''),(1414,'priv','zh-cn','activity-delete','',''),(1414,'priv','zh-tw','activity-delete','',''),(1415,'priv','de','activity-edit','',''),(1415,'priv','en','activity-edit','',''),(1415,'priv','fr','activity-edit','',''),(1415,'priv','zh-cn','activity-edit','',''),(1415,'priv','zh-tw','activity-edit','',''),(1416,'priv','de','activity-view','',''),(1416,'priv','en','activity-view','',''),(1416,'priv','fr','activity-view','',''),(1416,'priv','zh-cn','activity-view','',''),(1416,'priv','zh-tw','activity-view','',''),(1417,'priv','de','activity-assignTo','',''),(1417,'priv','en','activity-assignTo','',''),(1417,'priv','fr','activity-assignTo','',''),(1417,'priv','zh-cn','activity-assignTo','',''),(1417,'priv','zh-tw','activity-assignTo','',''),(1418,'priv','de','activity-outputList','',''),(1418,'priv','en','activity-outputList','',''),(1418,'priv','fr','activity-outputList','',''),(1418,'priv','zh-cn','activity-outputList','',''),(1418,'priv','zh-tw','activity-outputList','',''),(1419,'priv','de','activity-updateOrder','',''),(1419,'priv','en','activity-updateOrder','',''),(1419,'priv','fr','activity-updateOrder','',''),(1419,'priv','zh-cn','activity-updateOrder','',''),(1419,'priv','zh-tw','activity-updateOrder','',''),(1420,'priv','de','zoutput-browse','',''),(1420,'priv','en','zoutput-browse','',''),(1420,'priv','fr','zoutput-browse','',''),(1420,'priv','zh-cn','zoutput-browse','',''),(1420,'priv','zh-tw','zoutput-browse','',''),(1421,'priv','de','zoutput-create','',''),(1421,'priv','en','zoutput-create','',''),(1421,'priv','fr','zoutput-create','',''),(1421,'priv','zh-cn','zoutput-create','',''),(1421,'priv','zh-tw','zoutput-create','',''),(1422,'priv','de','zoutput-edit','',''),(1422,'priv','en','zoutput-edit','',''),(1422,'priv','fr','zoutput-edit','',''),(1422,'priv','zh-cn','zoutput-edit','',''),(1422,'priv','zh-tw','zoutput-edit','',''),(1423,'priv','de','zoutput-batchCreate','',''),(1423,'priv','en','zoutput-batchCreate','',''),(1423,'priv','fr','zoutput-batchCreate','',''),(1423,'priv','zh-cn','zoutput-batchCreate','',''),(1423,'priv','zh-tw','zoutput-batchCreate','',''),(1424,'priv','de','zoutput-batchEdit','',''),(1424,'priv','en','zoutput-batchEdit','',''),(1424,'priv','fr','zoutput-batchEdit','',''),(1424,'priv','zh-cn','zoutput-batchEdit','',''),(1424,'priv','zh-tw','zoutput-batchEdit','',''),(1425,'priv','de','zoutput-delete','',''),(1425,'priv','en','zoutput-delete','',''),(1425,'priv','fr','zoutput-delete','',''),(1425,'priv','zh-cn','zoutput-delete','',''),(1425,'priv','zh-tw','zoutput-delete','',''),(1426,'priv','de','zoutput-view','',''),(1426,'priv','en','zoutput-view','',''),(1426,'priv','fr','zoutput-view','',''),(1426,'priv','zh-cn','zoutput-view','',''),(1426,'priv','zh-tw','zoutput-view','',''),(1427,'priv','de','zoutput-updateOrder','',''),(1427,'priv','en','zoutput-updateOrder','',''),(1427,'priv','fr','zoutput-updateOrder','',''),(1427,'priv','zh-cn','zoutput-updateOrder','',''),(1427,'priv','zh-tw','zoutput-updateOrder','',''),(1428,'priv','de','auditplan-browseAction','',''),(1428,'priv','en','auditplan-browseAction','',''),(1428,'priv','fr','auditplan-browseAction','',''),(1428,'priv','zh-cn','auditplan-browseAction','',''),(1428,'priv','zh-tw','auditplan-browseAction','',''),(1429,'priv','de','auditplan-create','',''),(1429,'priv','en','auditplan-create','',''),(1429,'priv','fr','auditplan-create','',''),(1429,'priv','zh-cn','auditplan-create','',''),(1429,'priv','zh-tw','auditplan-create','',''),(1430,'priv','de','auditplan-editAction','',''),(1430,'priv','en','auditplan-editAction','',''),(1430,'priv','fr','auditplan-editAction','',''),(1430,'priv','zh-cn','auditplan-editAction','',''),(1430,'priv','zh-tw','auditplan-editAction','',''),(1431,'priv','de','auditplan-batchCreate','',''),(1431,'priv','en','auditplan-batchCreate','',''),(1431,'priv','fr','auditplan-batchCreate','',''),(1431,'priv','zh-cn','auditplan-batchCreate','',''),(1431,'priv','zh-tw','auditplan-batchCreate','',''),(1432,'priv','de','auditplan-batchEdit','',''),(1432,'priv','en','auditplan-batchEdit','',''),(1432,'priv','fr','auditplan-batchEdit','',''),(1432,'priv','zh-cn','auditplan-batchEdit','',''),(1432,'priv','zh-tw','auditplan-batchEdit','',''),(1433,'priv','de','auditplan-batchCheck','',''),(1433,'priv','en','auditplan-batchCheck','',''),(1433,'priv','fr','auditplan-batchCheck','',''),(1433,'priv','zh-cn','auditplan-batchCheck','',''),(1433,'priv','zh-tw','auditplan-batchCheck','',''),(1434,'priv','de','auditplan-check','',''),(1434,'priv','en','auditplan-check','',''),(1434,'priv','fr','auditplan-check','',''),(1434,'priv','zh-cn','auditplan-check','',''),(1434,'priv','zh-tw','auditplan-check','',''),(1435,'priv','de','auditplan-nc','',''),(1435,'priv','en','auditplan-nc','',''),(1435,'priv','fr','auditplan-nc','',''),(1435,'priv','zh-cn','auditplan-nc','',''),(1435,'priv','zh-tw','auditplan-nc','',''),(1436,'priv','de','auditplan-result','',''),(1436,'priv','en','auditplan-result','',''),(1436,'priv','fr','auditplan-result','',''),(1436,'priv','zh-cn','auditplan-result','',''),(1436,'priv','zh-tw','auditplan-result','',''),(1437,'priv','de','auditplan-delete','',''),(1437,'priv','en','auditplan-delete','',''),(1437,'priv','fr','auditplan-delete','',''),(1437,'priv','zh-cn','auditplan-delete','',''),(1437,'priv','zh-tw','auditplan-delete','',''),(1438,'priv','de','auditplan-assignTo','',''),(1438,'priv','en','auditplan-assignTo','',''),(1438,'priv','fr','auditplan-assignTo','',''),(1438,'priv','zh-cn','auditplan-assignTo','',''),(1438,'priv','zh-tw','auditplan-assignTo','',''),(1439,'priv','de','subject-common','',''),(1439,'priv','en','subject-common','',''),(1439,'priv','fr','subject-common','',''),(1439,'priv','zh-cn','subject-common','',''),(1439,'priv','zh-tw','subject-common','',''),(1440,'priv','de','approvalflow-browse','',''),(1440,'priv','en','approvalflow-browse','',''),(1440,'priv','fr','approvalflow-browse','',''),(1440,'priv','zh-cn','approvalflow-browse','',''),(1440,'priv','zh-tw','approvalflow-browse','',''),(1441,'priv','de','approvalflow-create','',''),(1441,'priv','en','approvalflow-create','',''),(1441,'priv','fr','approvalflow-create','',''),(1441,'priv','zh-cn','approvalflow-create','',''),(1441,'priv','zh-tw','approvalflow-create','',''),(1442,'priv','de','approvalflow-edit','',''),(1442,'priv','en','approvalflow-edit','',''),(1442,'priv','fr','approvalflow-edit','',''),(1442,'priv','zh-cn','approvalflow-edit','',''),(1442,'priv','zh-tw','approvalflow-edit','',''),(1443,'priv','de','approvalflow-view','',''),(1443,'priv','en','approvalflow-view','',''),(1443,'priv','fr','approvalflow-view','',''),(1443,'priv','zh-cn','approvalflow-view','',''),(1443,'priv','zh-tw','approvalflow-view','',''),(1444,'priv','de','approvalflow-design','',''),(1444,'priv','en','approvalflow-design','',''),(1444,'priv','fr','approvalflow-design','',''),(1444,'priv','zh-cn','approvalflow-design','',''),(1444,'priv','zh-tw','approvalflow-design','',''),(1445,'priv','de','approvalflow-delete','',''),(1445,'priv','en','approvalflow-delete','',''),(1445,'priv','fr','approvalflow-delete','',''),(1445,'priv','zh-cn','approvalflow-delete','',''),(1445,'priv','zh-tw','approvalflow-delete','',''),(1446,'priv','de','approvalflow-roleList','',''),(1446,'priv','en','approvalflow-roleList','',''),(1446,'priv','fr','approvalflow-roleList','',''),(1446,'priv','zh-cn','approvalflow-roleList','',''),(1446,'priv','zh-tw','approvalflow-roleList','',''),(1447,'priv','de','approvalflow-createRole','',''),(1447,'priv','en','approvalflow-createRole','',''),(1447,'priv','fr','approvalflow-createRole','',''),(1447,'priv','zh-cn','approvalflow-createRole','',''),(1447,'priv','zh-tw','approvalflow-createRole','',''),(1448,'priv','de','approvalflow-editRole','',''),(1448,'priv','en','approvalflow-editRole','',''),(1448,'priv','fr','approvalflow-editRole','',''),(1448,'priv','zh-cn','approvalflow-editRole','',''),(1448,'priv','zh-tw','approvalflow-editRole','',''),(1449,'priv','de','approvalflow-deleteRole','',''),(1449,'priv','en','approvalflow-deleteRole','',''),(1449,'priv','fr','approvalflow-deleteRole','',''),(1449,'priv','zh-cn','approvalflow-deleteRole','',''),(1449,'priv','zh-tw','approvalflow-deleteRole','',''),(1450,'priv','de','reviewissue-issue','',''),(1450,'priv','en','reviewissue-issue','',''),(1450,'priv','fr','reviewissue-issue','',''),(1450,'priv','zh-cn','reviewissue-issue','',''),(1450,'priv','zh-tw','reviewissue-issue','',''),(1451,'priv','de','reviewissue-updateStatus','',''),(1451,'priv','en','reviewissue-updateStatus','',''),(1451,'priv','fr','reviewissue-updateStatus','',''),(1451,'priv','zh-cn','reviewissue-updateStatus','',''),(1451,'priv','zh-tw','reviewissue-updateStatus','',''),(1452,'priv','de','reviewissue-resolved','',''),(1452,'priv','en','reviewissue-resolved','',''),(1452,'priv','fr','reviewissue-resolved','',''),(1452,'priv','zh-cn','reviewissue-resolved','',''),(1452,'priv','zh-tw','reviewissue-resolved','',''),(1453,'priv','de','reviewissue-create','',''),(1453,'priv','en','reviewissue-create','',''),(1453,'priv','fr','reviewissue-create','',''),(1453,'priv','zh-cn','reviewissue-create','',''),(1453,'priv','zh-tw','reviewissue-create','',''),(1454,'priv','de','reviewissue-edit','',''),(1454,'priv','en','reviewissue-edit','',''),(1454,'priv','fr','reviewissue-edit','',''),(1454,'priv','zh-cn','reviewissue-edit','',''),(1454,'priv','zh-tw','reviewissue-edit','',''),(1455,'priv','de','reviewissue-view','',''),(1455,'priv','en','reviewissue-view','',''),(1455,'priv','fr','reviewissue-view','',''),(1455,'priv','zh-cn','reviewissue-view','',''),(1455,'priv','zh-tw','reviewissue-view','',''),(1456,'priv','de','reviewissue-delete','',''),(1456,'priv','en','reviewissue-delete','',''),(1456,'priv','fr','reviewissue-delete','',''),(1456,'priv','zh-cn','reviewissue-delete','',''),(1456,'priv','zh-tw','reviewissue-delete','',''),(1457,'priv','de','reviewsetting-version','',''),(1457,'priv','en','reviewsetting-version','',''),(1457,'priv','fr','reviewsetting-version','',''),(1457,'priv','zh-cn','reviewsetting-version','',''),(1457,'priv','zh-tw','reviewsetting-version','',''),(1459,'priv','de','reviewsetting-waterfallplusVersion','',''),(1459,'priv','en','reviewsetting-waterfallplusVersion','',''),(1459,'priv','fr','reviewsetting-waterfallplusVersion','',''),(1459,'priv','zh-cn','reviewsetting-waterfallplusVersion','',''),(1459,'priv','zh-tw','reviewsetting-waterfallplusVersion','',''),(1460,'priv','de','review-browseAction','',''),(1460,'priv','en','review-browseAction','',''),(1460,'priv','fr','review-browseAction','',''),(1460,'priv','zh-cn','review-browseAction','',''),(1460,'priv','zh-tw','review-browseAction','',''),(1461,'priv','de','review-assess','',''),(1461,'priv','en','review-assess','',''),(1461,'priv','fr','review-assess','',''),(1461,'priv','zh-cn','review-assess','',''),(1461,'priv','zh-tw','review-assess','',''),(1462,'priv','de','review-create','',''),(1462,'priv','en','review-create','',''),(1462,'priv','fr','review-create','',''),(1462,'priv','zh-cn','review-create','',''),(1462,'priv','zh-tw','review-create','',''),(1463,'priv','de','review-edit','',''),(1463,'priv','en','review-edit','',''),(1463,'priv','fr','review-edit','',''),(1463,'priv','zh-cn','review-edit','',''),(1463,'priv','zh-tw','review-edit','',''),(1464,'priv','de','review-view','',''),(1464,'priv','en','review-view','',''),(1464,'priv','fr','review-view','',''),(1464,'priv','zh-cn','review-view','',''),(1464,'priv','zh-tw','review-view','',''),(1465,'priv','de','review-submit','',''),(1465,'priv','en','review-submit','',''),(1465,'priv','fr','review-submit','',''),(1465,'priv','zh-cn','review-submit','',''),(1465,'priv','zh-tw','review-submit','',''),(1466,'priv','de','review-recall','',''),(1466,'priv','en','review-recall','',''),(1466,'priv','fr','review-recall','',''),(1466,'priv','zh-cn','review-recall','',''),(1466,'priv','zh-tw','review-recall','',''),(1467,'priv','de','review-reviewReport','',''),(1467,'priv','en','review-reviewReport','',''),(1467,'priv','fr','review-reviewReport','',''),(1467,'priv','zh-cn','review-reviewReport','',''),(1467,'priv','zh-tw','review-reviewReport','',''),(1468,'priv','de','review-toAudit','',''),(1468,'priv','en','review-toAudit','',''),(1468,'priv','fr','review-toAudit','',''),(1468,'priv','zh-cn','review-toAudit','',''),(1468,'priv','zh-tw','review-toAudit','',''),(1469,'priv','de','review-audit','',''),(1469,'priv','en','review-audit','',''),(1469,'priv','fr','review-audit','',''),(1469,'priv','zh-cn','review-audit','',''),(1469,'priv','zh-tw','review-audit','',''),(1470,'priv','de','review-delete','',''),(1470,'priv','en','review-delete','',''),(1470,'priv','fr','review-delete','',''),(1470,'priv','zh-cn','review-delete','',''),(1470,'priv','zh-tw','review-delete','',''),(1471,'priv','de','measurement-setTips','',''),(1471,'priv','en','measurement-setTips','',''),(1471,'priv','fr','measurement-setTips','',''),(1471,'priv','zh-cn','measurement-setTips','',''),(1471,'priv','zh-tw','measurement-setTips','',''),(1472,'priv','de','measurement-setSQL','',''),(1472,'priv','en','measurement-setSQL','',''),(1472,'priv','fr','measurement-setSQL','',''),(1472,'priv','zh-cn','measurement-setSQL','',''),(1472,'priv','zh-tw','measurement-setSQL','',''),(1473,'priv','de','measurement-browseAction','',''),(1473,'priv','en','measurement-browseAction','',''),(1473,'priv','fr','measurement-browseAction','',''),(1473,'priv','zh-cn','measurement-browseAction','',''),(1473,'priv','zh-tw','measurement-browseAction','',''),(1474,'priv','de','measurement-createBasic','',''),(1474,'priv','en','measurement-createBasic','',''),(1474,'priv','fr','measurement-createBasic','',''),(1474,'priv','zh-cn','measurement-createBasic','',''),(1474,'priv','zh-tw','measurement-createBasic','',''),(1475,'priv','de','measurement-deleteAction','',''),(1475,'priv','en','measurement-deleteAction','',''),(1475,'priv','fr','measurement-deleteAction','',''),(1475,'priv','zh-cn','measurement-deleteAction','',''),(1475,'priv','zh-tw','measurement-deleteAction','',''),(1477,'priv','de','measurement-editBasic','',''),(1477,'priv','en','measurement-editBasic','',''),(1477,'priv','fr','measurement-editBasic','',''),(1477,'priv','zh-cn','measurement-editBasic','',''),(1477,'priv','zh-tw','measurement-editBasic','',''),(1478,'priv','de','measurement-searchMeas','',''),(1478,'priv','en','measurement-searchMeas','',''),(1478,'priv','fr','measurement-searchMeas','',''),(1478,'priv','zh-cn','measurement-searchMeas','',''),(1478,'priv','zh-tw','measurement-searchMeas','',''),(1479,'priv','de','measurement-template','',''),(1479,'priv','en','measurement-template','',''),(1479,'priv','fr','measurement-template','',''),(1479,'priv','zh-cn','measurement-template','',''),(1479,'priv','zh-tw','measurement-template','',''),(1480,'priv','de','measurement-createTemplate','',''),(1480,'priv','en','measurement-createTemplate','',''),(1480,'priv','fr','measurement-createTemplate','',''),(1480,'priv','zh-cn','measurement-createTemplate','',''),(1480,'priv','zh-tw','measurement-createTemplate','',''),(1481,'priv','de','measurement-editTemplate','',''),(1481,'priv','en','measurement-editTemplate','',''),(1481,'priv','fr','measurement-editTemplate','',''),(1481,'priv','zh-cn','measurement-editTemplate','',''),(1481,'priv','zh-tw','measurement-editTemplate','',''),(1482,'priv','de','measurement-viewTemplate','',''),(1482,'priv','en','measurement-viewTemplate','',''),(1482,'priv','fr','measurement-viewTemplate','',''),(1482,'priv','zh-cn','measurement-viewTemplate','',''),(1482,'priv','zh-tw','measurement-viewTemplate','',''),(1488,'priv','de','measurement-batchEditAction','',''),(1488,'priv','en','measurement-batchEditAction','',''),(1488,'priv','fr','measurement-batchEditAction','',''),(1488,'priv','zh-cn','measurement-batchEditAction','',''),(1488,'priv','zh-tw','measurement-batchEditAction','',''),(1489,'priv','de','measurement-saveReportAB','',''),(1489,'priv','en','measurement-saveReportAB','',''),(1489,'priv','fr','measurement-saveReportAB','',''),(1489,'priv','zh-cn','measurement-saveReportAB','',''),(1489,'priv','zh-tw','measurement-saveReportAB','',''),(1490,'priv','de','measrecord-browse','',''),(1490,'priv','en','measrecord-browse','',''),(1490,'priv','fr','measrecord-browse','',''),(1490,'priv','zh-cn','measrecord-browse','',''),(1490,'priv','zh-tw','measrecord-browse','',''),(1491,'priv','de','assetlib-caseLib','',''),(1491,'priv','en','assetlib-caseLib','',''),(1491,'priv','fr','assetlib-caseLib','',''),(1491,'priv','zh-cn','assetlib-caseLib','',''),(1491,'priv','zh-tw','assetlib-caseLib','',''),(1492,'priv','de','assetlib-storyLib','',''),(1492,'priv','en','assetlib-storyLib','',''),(1492,'priv','fr','assetlib-storyLib','',''),(1492,'priv','zh-cn','assetlib-storyLib','',''),(1492,'priv','zh-tw','assetlib-storyLib','',''),(1493,'priv','de','assetlib-createStoryLib','',''),(1493,'priv','en','assetlib-createStoryLib','',''),(1493,'priv','fr','assetlib-createStoryLib','',''),(1493,'priv','zh-cn','assetlib-createStoryLib','',''),(1493,'priv','zh-tw','assetlib-createStoryLib','',''),(1494,'priv','de','assetlib-editStoryLib','',''),(1494,'priv','en','assetlib-editStoryLib','',''),(1494,'priv','fr','assetlib-editStoryLib','',''),(1494,'priv','zh-cn','assetlib-editStoryLib','',''),(1494,'priv','zh-tw','assetlib-editStoryLib','',''),(1495,'priv','de','assetlib-deleteStoryLib','',''),(1495,'priv','en','assetlib-deleteStoryLib','',''),(1495,'priv','fr','assetlib-deleteStoryLib','',''),(1495,'priv','zh-cn','assetlib-deleteStoryLib','',''),(1495,'priv','zh-tw','assetlib-deleteStoryLib','',''),(1496,'priv','de','assetlib-storyLibView','',''),(1496,'priv','en','assetlib-storyLibView','',''),(1496,'priv','fr','assetlib-storyLibView','',''),(1496,'priv','zh-cn','assetlib-storyLibView','',''),(1496,'priv','zh-tw','assetlib-storyLibView','',''),(1497,'priv','de','assetlib-story','',''),(1497,'priv','en','assetlib-story','',''),(1497,'priv','fr','assetlib-story','',''),(1497,'priv','zh-cn','assetlib-story','',''),(1497,'priv','zh-tw','assetlib-story','',''),(1498,'priv','de','assetlib-importStory','',''),(1498,'priv','en','assetlib-importStory','',''),(1498,'priv','fr','assetlib-importStory','',''),(1498,'priv','zh-cn','assetlib-importStory','',''),(1498,'priv','zh-tw','assetlib-importStory','',''),(1499,'priv','de','assetlib-assignToStory','',''),(1499,'priv','en','assetlib-assignToStory','',''),(1499,'priv','fr','assetlib-assignToStory','',''),(1499,'priv','zh-cn','assetlib-assignToStory','',''),(1499,'priv','zh-tw','assetlib-assignToStory','',''),(1500,'priv','de','assetlib-batchAssignToStory','',''),(1500,'priv','en','assetlib-batchAssignToStory','',''),(1500,'priv','fr','assetlib-batchAssignToStory','',''),(1500,'priv','zh-cn','assetlib-batchAssignToStory','',''),(1500,'priv','zh-tw','assetlib-batchAssignToStory','',''),(1501,'priv','de','assetlib-approveStory','',''),(1501,'priv','en','assetlib-approveStory','',''),(1501,'priv','fr','assetlib-approveStory','',''),(1501,'priv','zh-cn','assetlib-approveStory','',''),(1501,'priv','zh-tw','assetlib-approveStory','',''),(1502,'priv','de','assetlib-batchApproveStory','',''),(1502,'priv','en','assetlib-batchApproveStory','',''),(1502,'priv','fr','assetlib-batchApproveStory','',''),(1502,'priv','zh-cn','assetlib-batchApproveStory','',''),(1502,'priv','zh-tw','assetlib-batchApproveStory','',''),(1503,'priv','de','assetlib-editStory','',''),(1503,'priv','en','assetlib-editStory','',''),(1503,'priv','fr','assetlib-editStory','',''),(1503,'priv','zh-cn','assetlib-editStory','',''),(1503,'priv','zh-tw','assetlib-editStory','',''),(1504,'priv','de','assetlib-removeStory','',''),(1504,'priv','en','assetlib-removeStory','',''),(1504,'priv','fr','assetlib-removeStory','',''),(1504,'priv','zh-cn','assetlib-removeStory','',''),(1504,'priv','zh-tw','assetlib-removeStory','',''),(1505,'priv','de','assetlib-batchRemoveStory','',''),(1505,'priv','en','assetlib-batchRemoveStory','',''),(1505,'priv','fr','assetlib-batchRemoveStory','',''),(1505,'priv','zh-cn','assetlib-batchRemoveStory','',''),(1505,'priv','zh-tw','assetlib-batchRemoveStory','',''),(1506,'priv','de','assetlib-storyView','',''),(1506,'priv','en','assetlib-storyView','',''),(1506,'priv','fr','assetlib-storyView','',''),(1506,'priv','zh-cn','assetlib-storyView','',''),(1506,'priv','zh-tw','assetlib-storyView','',''),(1507,'priv','de','assetlib-issueLib','',''),(1507,'priv','en','assetlib-issueLib','',''),(1507,'priv','fr','assetlib-issueLib','',''),(1507,'priv','zh-cn','assetlib-issueLib','',''),(1507,'priv','zh-tw','assetlib-issueLib','',''),(1508,'priv','de','assetlib-createIssueLib','',''),(1508,'priv','en','assetlib-createIssueLib','',''),(1508,'priv','fr','assetlib-createIssueLib','',''),(1508,'priv','zh-cn','assetlib-createIssueLib','',''),(1508,'priv','zh-tw','assetlib-createIssueLib','',''),(1509,'priv','de','assetlib-editIssueLib','',''),(1509,'priv','en','assetlib-editIssueLib','',''),(1509,'priv','fr','assetlib-editIssueLib','',''),(1509,'priv','zh-cn','assetlib-editIssueLib','',''),(1509,'priv','zh-tw','assetlib-editIssueLib','',''),(1510,'priv','de','assetlib-deleteIssueLib','',''),(1510,'priv','en','assetlib-deleteIssueLib','',''),(1510,'priv','fr','assetlib-deleteIssueLib','',''),(1510,'priv','zh-cn','assetlib-deleteIssueLib','',''),(1510,'priv','zh-tw','assetlib-deleteIssueLib','',''),(1511,'priv','de','assetlib-issueLibView','',''),(1511,'priv','en','assetlib-issueLibView','',''),(1511,'priv','fr','assetlib-issueLibView','',''),(1511,'priv','zh-cn','assetlib-issueLibView','',''),(1511,'priv','zh-tw','assetlib-issueLibView','',''),(1512,'priv','de','assetlib-issue','',''),(1512,'priv','en','assetlib-issue','',''),(1512,'priv','fr','assetlib-issue','',''),(1512,'priv','zh-cn','assetlib-issue','',''),(1512,'priv','zh-tw','assetlib-issue','',''),(1513,'priv','de','assetlib-importIssue','',''),(1513,'priv','en','assetlib-importIssue','',''),(1513,'priv','fr','assetlib-importIssue','',''),(1513,'priv','zh-cn','assetlib-importIssue','',''),(1513,'priv','zh-tw','assetlib-importIssue','',''),(1514,'priv','de','assetlib-assignToIssue','',''),(1514,'priv','en','assetlib-assignToIssue','',''),(1514,'priv','fr','assetlib-assignToIssue','',''),(1514,'priv','zh-cn','assetlib-assignToIssue','',''),(1514,'priv','zh-tw','assetlib-assignToIssue','',''),(1515,'priv','de','assetlib-batchAssignToIssue','',''),(1515,'priv','en','assetlib-batchAssignToIssue','',''),(1515,'priv','fr','assetlib-batchAssignToIssue','',''),(1515,'priv','zh-cn','assetlib-batchAssignToIssue','',''),(1515,'priv','zh-tw','assetlib-batchAssignToIssue','',''),(1516,'priv','de','assetlib-approveIssue','',''),(1516,'priv','en','assetlib-approveIssue','',''),(1516,'priv','fr','assetlib-approveIssue','',''),(1516,'priv','zh-cn','assetlib-approveIssue','',''),(1516,'priv','zh-tw','assetlib-approveIssue','',''),(1517,'priv','de','assetlib-batchApproveIssue','',''),(1517,'priv','en','assetlib-batchApproveIssue','',''),(1517,'priv','fr','assetlib-batchApproveIssue','',''),(1517,'priv','zh-cn','assetlib-batchApproveIssue','',''),(1517,'priv','zh-tw','assetlib-batchApproveIssue','',''),(1518,'priv','de','assetlib-editIssue','',''),(1518,'priv','en','assetlib-editIssue','',''),(1518,'priv','fr','assetlib-editIssue','',''),(1518,'priv','zh-cn','assetlib-editIssue','',''),(1518,'priv','zh-tw','assetlib-editIssue','',''),(1519,'priv','de','assetlib-removeIssue','',''),(1519,'priv','en','assetlib-removeIssue','',''),(1519,'priv','fr','assetlib-removeIssue','',''),(1519,'priv','zh-cn','assetlib-removeIssue','',''),(1519,'priv','zh-tw','assetlib-removeIssue','',''),(1520,'priv','de','assetlib-batchRemoveIssue','',''),(1520,'priv','en','assetlib-batchRemoveIssue','',''),(1520,'priv','fr','assetlib-batchRemoveIssue','',''),(1520,'priv','zh-cn','assetlib-batchRemoveIssue','',''),(1520,'priv','zh-tw','assetlib-batchRemoveIssue','',''),(1521,'priv','de','assetlib-issueView','',''),(1521,'priv','en','assetlib-issueView','',''),(1521,'priv','fr','assetlib-issueView','',''),(1521,'priv','zh-cn','assetlib-issueView','',''),(1521,'priv','zh-tw','assetlib-issueView','',''),(1522,'priv','de','assetlib-riskLib','',''),(1522,'priv','en','assetlib-riskLib','',''),(1522,'priv','fr','assetlib-riskLib','',''),(1522,'priv','zh-cn','assetlib-riskLib','',''),(1522,'priv','zh-tw','assetlib-riskLib','',''),(1523,'priv','de','assetlib-createRiskLib','',''),(1523,'priv','en','assetlib-createRiskLib','',''),(1523,'priv','fr','assetlib-createRiskLib','',''),(1523,'priv','zh-cn','assetlib-createRiskLib','',''),(1523,'priv','zh-tw','assetlib-createRiskLib','',''),(1524,'priv','de','assetlib-editRiskLib','',''),(1524,'priv','en','assetlib-editRiskLib','',''),(1524,'priv','fr','assetlib-editRiskLib','',''),(1524,'priv','zh-cn','assetlib-editRiskLib','',''),(1524,'priv','zh-tw','assetlib-editRiskLib','',''),(1525,'priv','de','assetlib-deleteRiskLib','',''),(1525,'priv','en','assetlib-deleteRiskLib','',''),(1525,'priv','fr','assetlib-deleteRiskLib','',''),(1525,'priv','zh-cn','assetlib-deleteRiskLib','',''),(1525,'priv','zh-tw','assetlib-deleteRiskLib','',''),(1526,'priv','de','assetlib-riskLibView','',''),(1526,'priv','en','assetlib-riskLibView','',''),(1526,'priv','fr','assetlib-riskLibView','',''),(1526,'priv','zh-cn','assetlib-riskLibView','',''),(1526,'priv','zh-tw','assetlib-riskLibView','',''),(1527,'priv','de','assetlib-risk','',''),(1527,'priv','en','assetlib-risk','',''),(1527,'priv','fr','assetlib-risk','',''),(1527,'priv','zh-cn','assetlib-risk','',''),(1527,'priv','zh-tw','assetlib-risk','',''),(1528,'priv','de','assetlib-importRisk','',''),(1528,'priv','en','assetlib-importRisk','',''),(1528,'priv','fr','assetlib-importRisk','',''),(1528,'priv','zh-cn','assetlib-importRisk','',''),(1528,'priv','zh-tw','assetlib-importRisk','',''),(1529,'priv','de','assetlib-assignToRisk','',''),(1529,'priv','en','assetlib-assignToRisk','',''),(1529,'priv','fr','assetlib-assignToRisk','',''),(1529,'priv','zh-cn','assetlib-assignToRisk','',''),(1529,'priv','zh-tw','assetlib-assignToRisk','',''),(1530,'priv','de','assetlib-batchAssignToRisk','',''),(1530,'priv','en','assetlib-batchAssignToRisk','',''),(1530,'priv','fr','assetlib-batchAssignToRisk','',''),(1530,'priv','zh-cn','assetlib-batchAssignToRisk','',''),(1530,'priv','zh-tw','assetlib-batchAssignToRisk','',''),(1531,'priv','de','assetlib-approveRisk','',''),(1531,'priv','en','assetlib-approveRisk','',''),(1531,'priv','fr','assetlib-approveRisk','',''),(1531,'priv','zh-cn','assetlib-approveRisk','',''),(1531,'priv','zh-tw','assetlib-approveRisk','',''),(1532,'priv','de','assetlib-batchApproveRisk','',''),(1532,'priv','en','assetlib-batchApproveRisk','',''),(1532,'priv','fr','assetlib-batchApproveRisk','',''),(1532,'priv','zh-cn','assetlib-batchApproveRisk','',''),(1532,'priv','zh-tw','assetlib-batchApproveRisk','',''),(1533,'priv','de','assetlib-editRisk','',''),(1533,'priv','en','assetlib-editRisk','',''),(1533,'priv','fr','assetlib-editRisk','',''),(1533,'priv','zh-cn','assetlib-editRisk','',''),(1533,'priv','zh-tw','assetlib-editRisk','',''),(1534,'priv','de','assetlib-removeRisk','',''),(1534,'priv','en','assetlib-removeRisk','',''),(1534,'priv','fr','assetlib-removeRisk','',''),(1534,'priv','zh-cn','assetlib-removeRisk','',''),(1534,'priv','zh-tw','assetlib-removeRisk','',''),(1535,'priv','de','assetlib-batchRemoveRisk','',''),(1535,'priv','en','assetlib-batchRemoveRisk','',''),(1535,'priv','fr','assetlib-batchRemoveRisk','',''),(1535,'priv','zh-cn','assetlib-batchRemoveRisk','',''),(1535,'priv','zh-tw','assetlib-batchRemoveRisk','',''),(1536,'priv','de','assetlib-riskView','',''),(1536,'priv','en','assetlib-riskView','',''),(1536,'priv','fr','assetlib-riskView','',''),(1536,'priv','zh-cn','assetlib-riskView','',''),(1536,'priv','zh-tw','assetlib-riskView','',''),(1537,'priv','de','assetlib-opportunityLib','',''),(1537,'priv','en','assetlib-opportunityLib','',''),(1537,'priv','fr','assetlib-opportunityLib','',''),(1537,'priv','zh-cn','assetlib-opportunityLib','',''),(1537,'priv','zh-tw','assetlib-opportunityLib','',''),(1538,'priv','de','assetlib-createOpportunityLib','',''),(1538,'priv','en','assetlib-createOpportunityLib','',''),(1538,'priv','fr','assetlib-createOpportunityLib','',''),(1538,'priv','zh-cn','assetlib-createOpportunityLib','',''),(1538,'priv','zh-tw','assetlib-createOpportunityLib','',''),(1539,'priv','de','assetlib-editOpportunityLib','',''),(1539,'priv','en','assetlib-editOpportunityLib','',''),(1539,'priv','fr','assetlib-editOpportunityLib','',''),(1539,'priv','zh-cn','assetlib-editOpportunityLib','',''),(1539,'priv','zh-tw','assetlib-editOpportunityLib','',''),(1540,'priv','de','assetlib-deleteOpportunityLib','',''),(1540,'priv','en','assetlib-deleteOpportunityLib','',''),(1540,'priv','fr','assetlib-deleteOpportunityLib','',''),(1540,'priv','zh-cn','assetlib-deleteOpportunityLib','',''),(1540,'priv','zh-tw','assetlib-deleteOpportunityLib','',''),(1541,'priv','de','assetlib-opportunityLibView','',''),(1541,'priv','en','assetlib-opportunityLibView','',''),(1541,'priv','fr','assetlib-opportunityLibView','',''),(1541,'priv','zh-cn','assetlib-opportunityLibView','',''),(1541,'priv','zh-tw','assetlib-opportunityLibView','',''),(1542,'priv','de','assetlib-opportunity','',''),(1542,'priv','en','assetlib-opportunity','',''),(1542,'priv','fr','assetlib-opportunity','',''),(1542,'priv','zh-cn','assetlib-opportunity','',''),(1542,'priv','zh-tw','assetlib-opportunity','',''),(1543,'priv','de','assetlib-importOpportunity','',''),(1543,'priv','en','assetlib-importOpportunity','',''),(1543,'priv','fr','assetlib-importOpportunity','',''),(1543,'priv','zh-cn','assetlib-importOpportunity','',''),(1543,'priv','zh-tw','assetlib-importOpportunity','',''),(1544,'priv','de','assetlib-assignToOpportunity','',''),(1544,'priv','en','assetlib-assignToOpportunity','',''),(1544,'priv','fr','assetlib-assignToOpportunity','',''),(1544,'priv','zh-cn','assetlib-assignToOpportunity','',''),(1544,'priv','zh-tw','assetlib-assignToOpportunity','',''),(1545,'priv','de','assetlib-batchAssignToOpportunity','',''),(1545,'priv','en','assetlib-batchAssignToOpportunity','',''),(1545,'priv','fr','assetlib-batchAssignToOpportunity','',''),(1545,'priv','zh-cn','assetlib-batchAssignToOpportunity','',''),(1545,'priv','zh-tw','assetlib-batchAssignToOpportunity','',''),(1546,'priv','de','assetlib-approveOpportunity','',''),(1546,'priv','en','assetlib-approveOpportunity','',''),(1546,'priv','fr','assetlib-approveOpportunity','',''),(1546,'priv','zh-cn','assetlib-approveOpportunity','',''),(1546,'priv','zh-tw','assetlib-approveOpportunity','',''),(1547,'priv','de','assetlib-batchApproveOpportunity','',''),(1547,'priv','en','assetlib-batchApproveOpportunity','',''),(1547,'priv','fr','assetlib-batchApproveOpportunity','',''),(1547,'priv','zh-cn','assetlib-batchApproveOpportunity','',''),(1547,'priv','zh-tw','assetlib-batchApproveOpportunity','',''),(1548,'priv','de','assetlib-editOpportunity','',''),(1548,'priv','en','assetlib-editOpportunity','',''),(1548,'priv','fr','assetlib-editOpportunity','',''),(1548,'priv','zh-cn','assetlib-editOpportunity','',''),(1548,'priv','zh-tw','assetlib-editOpportunity','',''),(1549,'priv','de','assetlib-removeOpportunity','',''),(1549,'priv','en','assetlib-removeOpportunity','',''),(1549,'priv','fr','assetlib-removeOpportunity','',''),(1549,'priv','zh-cn','assetlib-removeOpportunity','',''),(1549,'priv','zh-tw','assetlib-removeOpportunity','',''),(1550,'priv','de','assetlib-batchRemoveOpportunity','',''),(1550,'priv','en','assetlib-batchRemoveOpportunity','',''),(1550,'priv','fr','assetlib-batchRemoveOpportunity','',''),(1550,'priv','zh-cn','assetlib-batchRemoveOpportunity','',''),(1550,'priv','zh-tw','assetlib-batchRemoveOpportunity','',''),(1551,'priv','de','assetlib-opportunityView','',''),(1551,'priv','en','assetlib-opportunityView','',''),(1551,'priv','fr','assetlib-opportunityView','',''),(1551,'priv','zh-cn','assetlib-opportunityView','',''),(1551,'priv','zh-tw','assetlib-opportunityView','',''),(1552,'priv','de','assetlib-practiceLib','',''),(1552,'priv','en','assetlib-practiceLib','',''),(1552,'priv','fr','assetlib-practiceLib','',''),(1552,'priv','zh-cn','assetlib-practiceLib','',''),(1552,'priv','zh-tw','assetlib-practiceLib','',''),(1553,'priv','de','assetlib-createPracticeLib','',''),(1553,'priv','en','assetlib-createPracticeLib','',''),(1553,'priv','fr','assetlib-createPracticeLib','',''),(1553,'priv','zh-cn','assetlib-createPracticeLib','',''),(1553,'priv','zh-tw','assetlib-createPracticeLib','',''),(1554,'priv','de','assetlib-editPracticeLib','',''),(1554,'priv','en','assetlib-editPracticeLib','',''),(1554,'priv','fr','assetlib-editPracticeLib','',''),(1554,'priv','zh-cn','assetlib-editPracticeLib','',''),(1554,'priv','zh-tw','assetlib-editPracticeLib','',''),(1555,'priv','de','assetlib-deletePracticeLib','',''),(1555,'priv','en','assetlib-deletePracticeLib','',''),(1555,'priv','fr','assetlib-deletePracticeLib','',''),(1555,'priv','zh-cn','assetlib-deletePracticeLib','',''),(1555,'priv','zh-tw','assetlib-deletePracticeLib','',''),(1556,'priv','de','assetlib-practiceLibView','',''),(1556,'priv','en','assetlib-practiceLibView','',''),(1556,'priv','fr','assetlib-practiceLibView','',''),(1556,'priv','zh-cn','assetlib-practiceLibView','',''),(1556,'priv','zh-tw','assetlib-practiceLibView','',''),(1557,'priv','de','assetlib-practice','',''),(1557,'priv','en','assetlib-practice','',''),(1557,'priv','fr','assetlib-practice','',''),(1557,'priv','zh-cn','assetlib-practice','',''),(1557,'priv','zh-tw','assetlib-practice','',''),(1558,'priv','de','assetlib-importPractice','',''),(1558,'priv','en','assetlib-importPractice','',''),(1558,'priv','fr','assetlib-importPractice','',''),(1558,'priv','zh-cn','assetlib-importPractice','',''),(1558,'priv','zh-tw','assetlib-importPractice','',''),(1559,'priv','de','assetlib-assignToPractice','',''),(1559,'priv','en','assetlib-assignToPractice','',''),(1559,'priv','fr','assetlib-assignToPractice','',''),(1559,'priv','zh-cn','assetlib-assignToPractice','',''),(1559,'priv','zh-tw','assetlib-assignToPractice','',''),(1560,'priv','de','assetlib-batchAssignToPractice','',''),(1560,'priv','en','assetlib-batchAssignToPractice','',''),(1560,'priv','fr','assetlib-batchAssignToPractice','',''),(1560,'priv','zh-cn','assetlib-batchAssignToPractice','',''),(1560,'priv','zh-tw','assetlib-batchAssignToPractice','',''),(1561,'priv','de','assetlib-approvePractice','',''),(1561,'priv','en','assetlib-approvePractice','',''),(1561,'priv','fr','assetlib-approvePractice','',''),(1561,'priv','zh-cn','assetlib-approvePractice','',''),(1561,'priv','zh-tw','assetlib-approvePractice','',''),(1562,'priv','de','assetlib-batchApprovePractice','',''),(1562,'priv','en','assetlib-batchApprovePractice','',''),(1562,'priv','fr','assetlib-batchApprovePractice','',''),(1562,'priv','zh-cn','assetlib-batchApprovePractice','',''),(1562,'priv','zh-tw','assetlib-batchApprovePractice','',''),(1563,'priv','de','assetlib-editPractice','',''),(1563,'priv','en','assetlib-editPractice','',''),(1563,'priv','fr','assetlib-editPractice','',''),(1563,'priv','zh-cn','assetlib-editPractice','',''),(1563,'priv','zh-tw','assetlib-editPractice','',''),(1564,'priv','de','assetlib-removePractice','',''),(1564,'priv','en','assetlib-removePractice','',''),(1564,'priv','fr','assetlib-removePractice','',''),(1564,'priv','zh-cn','assetlib-removePractice','',''),(1564,'priv','zh-tw','assetlib-removePractice','',''),(1565,'priv','de','assetlib-batchRemovePractice','',''),(1565,'priv','en','assetlib-batchRemovePractice','',''),(1565,'priv','fr','assetlib-batchRemovePractice','',''),(1565,'priv','zh-cn','assetlib-batchRemovePractice','',''),(1565,'priv','zh-tw','assetlib-batchRemovePractice','',''),(1566,'priv','de','assetlib-practiceView','',''),(1566,'priv','en','assetlib-practiceView','',''),(1566,'priv','fr','assetlib-practiceView','',''),(1566,'priv','zh-cn','assetlib-practiceView','',''),(1566,'priv','zh-tw','assetlib-practiceView','',''),(1567,'priv','de','assetlib-componentLib','',''),(1567,'priv','en','assetlib-componentLib','',''),(1567,'priv','fr','assetlib-componentLib','',''),(1567,'priv','zh-cn','assetlib-componentLib','',''),(1567,'priv','zh-tw','assetlib-componentLib','',''),(1568,'priv','de','assetlib-createComponentLib','',''),(1568,'priv','en','assetlib-createComponentLib','',''),(1568,'priv','fr','assetlib-createComponentLib','',''),(1568,'priv','zh-cn','assetlib-createComponentLib','',''),(1568,'priv','zh-tw','assetlib-createComponentLib','',''),(1569,'priv','de','assetlib-editComponentLib','',''),(1569,'priv','en','assetlib-editComponentLib','',''),(1569,'priv','fr','assetlib-editComponentLib','',''),(1569,'priv','zh-cn','assetlib-editComponentLib','',''),(1569,'priv','zh-tw','assetlib-editComponentLib','',''),(1570,'priv','de','assetlib-deleteComponentLib','',''),(1570,'priv','en','assetlib-deleteComponentLib','',''),(1570,'priv','fr','assetlib-deleteComponentLib','',''),(1570,'priv','zh-cn','assetlib-deleteComponentLib','',''),(1570,'priv','zh-tw','assetlib-deleteComponentLib','',''),(1571,'priv','de','assetlib-componentLibView','',''),(1571,'priv','en','assetlib-componentLibView','',''),(1571,'priv','fr','assetlib-componentLibView','',''),(1571,'priv','zh-cn','assetlib-componentLibView','',''),(1571,'priv','zh-tw','assetlib-componentLibView','',''),(1572,'priv','de','assetlib-component','',''),(1572,'priv','en','assetlib-component','',''),(1572,'priv','fr','assetlib-component','',''),(1572,'priv','zh-cn','assetlib-component','',''),(1572,'priv','zh-tw','assetlib-component','',''),(1573,'priv','de','assetlib-importComponent','',''),(1573,'priv','en','assetlib-importComponent','',''),(1573,'priv','fr','assetlib-importComponent','',''),(1573,'priv','zh-cn','assetlib-importComponent','',''),(1573,'priv','zh-tw','assetlib-importComponent','',''),(1574,'priv','de','assetlib-assignToComponent','',''),(1574,'priv','en','assetlib-assignToComponent','',''),(1574,'priv','fr','assetlib-assignToComponent','',''),(1574,'priv','zh-cn','assetlib-assignToComponent','',''),(1574,'priv','zh-tw','assetlib-assignToComponent','',''),(1575,'priv','de','assetlib-batchAssignToComponent','',''),(1575,'priv','en','assetlib-batchAssignToComponent','',''),(1575,'priv','fr','assetlib-batchAssignToComponent','',''),(1575,'priv','zh-cn','assetlib-batchAssignToComponent','',''),(1575,'priv','zh-tw','assetlib-batchAssignToComponent','',''),(1576,'priv','de','assetlib-approveComponent','',''),(1576,'priv','en','assetlib-approveComponent','',''),(1576,'priv','fr','assetlib-approveComponent','',''),(1576,'priv','zh-cn','assetlib-approveComponent','',''),(1576,'priv','zh-tw','assetlib-approveComponent','',''),(1577,'priv','de','assetlib-batchApproveComponent','',''),(1577,'priv','en','assetlib-batchApproveComponent','',''),(1577,'priv','fr','assetlib-batchApproveComponent','',''),(1577,'priv','zh-cn','assetlib-batchApproveComponent','',''),(1577,'priv','zh-tw','assetlib-batchApproveComponent','',''),(1578,'priv','de','assetlib-editComponent','',''),(1578,'priv','en','assetlib-editComponent','',''),(1578,'priv','fr','assetlib-editComponent','',''),(1578,'priv','zh-cn','assetlib-editComponent','',''),(1578,'priv','zh-tw','assetlib-editComponent','',''),(1579,'priv','de','assetlib-removeComponent','',''),(1579,'priv','en','assetlib-removeComponent','',''),(1579,'priv','fr','assetlib-removeComponent','',''),(1579,'priv','zh-cn','assetlib-removeComponent','',''),(1579,'priv','zh-tw','assetlib-removeComponent','',''),(1580,'priv','de','assetlib-batchRemoveComponent','',''),(1580,'priv','en','assetlib-batchRemoveComponent','',''),(1580,'priv','fr','assetlib-batchRemoveComponent','',''),(1580,'priv','zh-cn','assetlib-batchRemoveComponent','',''),(1580,'priv','zh-tw','assetlib-batchRemoveComponent','',''),(1581,'priv','de','assetlib-componentView','',''),(1581,'priv','en','assetlib-componentView','',''),(1581,'priv','fr','assetlib-componentView','',''),(1581,'priv','zh-cn','assetlib-componentView','',''),(1581,'priv','zh-tw','assetlib-componentView','',''),(1583,'priv','de','assetlib-storylibSort','',''),(1583,'priv','en','assetlib-storylibSort','',''),(1583,'priv','fr','assetlib-storylibSort','',''),(1583,'priv','zh-cn','assetlib-storylibSort','',''),(1583,'priv','zh-tw','assetlib-storylibSort','',''),(1584,'priv','de','assetlib-caselibSort','',''),(1584,'priv','en','assetlib-caselibSort','',''),(1584,'priv','fr','assetlib-caselibSort','',''),(1584,'priv','zh-cn','assetlib-caselibSort','',''),(1584,'priv','zh-tw','assetlib-caselibSort','',''),(1585,'priv','de','assetlib-issuelibSort','',''),(1585,'priv','en','assetlib-issuelibSort','',''),(1585,'priv','fr','assetlib-issuelibSort','',''),(1585,'priv','zh-cn','assetlib-issuelibSort','',''),(1585,'priv','zh-tw','assetlib-issuelibSort','',''),(1586,'priv','de','assetlib-risklibSort','',''),(1586,'priv','en','assetlib-risklibSort','',''),(1586,'priv','fr','assetlib-risklibSort','',''),(1586,'priv','zh-cn','assetlib-risklibSort','',''),(1586,'priv','zh-tw','assetlib-risklibSort','',''),(1587,'priv','de','assetlib-opportunitylibSort','',''),(1587,'priv','en','assetlib-opportunitylibSort','',''),(1587,'priv','fr','assetlib-opportunitylibSort','',''),(1587,'priv','zh-cn','assetlib-opportunitylibSort','',''),(1587,'priv','zh-tw','assetlib-opportunitylibSort','',''),(1588,'priv','de','assetlib-practicelibSort','',''),(1588,'priv','en','assetlib-practicelibSort','',''),(1588,'priv','fr','assetlib-practicelibSort','',''),(1588,'priv','zh-cn','assetlib-practicelibSort','',''),(1588,'priv','zh-tw','assetlib-practicelibSort','',''),(1589,'priv','de','assetlib-componentlibSort','',''),(1589,'priv','en','assetlib-componentlibSort','',''),(1589,'priv','fr','assetlib-componentlibSort','',''),(1589,'priv','zh-cn','assetlib-componentlibSort','',''),(1589,'priv','zh-tw','assetlib-componentlibSort','',''),(1590,'priv','de','setting-xuanxuan','',''),(1590,'priv','en','setting-xuanxuan','',''),(1590,'priv','fr','setting-xuanxuan','',''),(1590,'priv','zh-cn','setting-xuanxuan','',''),(1590,'priv','zh-tw','setting-xuanxuan','',''),(1596,'priv','de','im-downloadXXD','',''),(1596,'priv','en','im-downloadXXD','',''),(1596,'priv','fr','im-downloadXXD','',''),(1596,'priv','zh-cn','im-downloadXXD','',''),(1596,'priv','zh-tw','im-downloadXXD','',''),(1597,'priv','de','im-debug','',''),(1597,'priv','en','im-debug','',''),(1597,'priv','fr','im-debug','',''),(1597,'priv','zh-cn','im-debug','',''),(1597,'priv','zh-tw','im-debug','',''),(1598,'priv','de','client-browse','',''),(1598,'priv','en','client-browse','',''),(1598,'priv','fr','client-browse','',''),(1598,'priv','zh-cn','client-browse','',''),(1598,'priv','zh-tw','client-browse','',''),(1599,'priv','de','client-create','',''),(1599,'priv','en','client-create','',''),(1599,'priv','fr','client-create','',''),(1599,'priv','zh-cn','client-create','',''),(1599,'priv','zh-tw','client-create','',''),(1600,'priv','de','client-edit','',''),(1600,'priv','en','client-edit','',''),(1600,'priv','fr','client-edit','',''),(1600,'priv','zh-cn','client-edit','',''),(1600,'priv','zh-tw','client-edit','',''),(1601,'priv','de','client-delete','',''),(1601,'priv','en','client-delete','',''),(1601,'priv','fr','client-delete','',''),(1601,'priv','zh-cn','client-delete','',''),(1601,'priv','zh-tw','client-delete','',''),(1615,'priv','de','screen-create','',''),(1615,'priv','en','screen-create','',''),(1615,'priv','fr','screen-create','',''),(1615,'priv','zh-cn','screen-create','',''),(1615,'priv','zh-tw','screen-create','',''),(1616,'priv','de','screen-editScreen','',''),(1616,'priv','en','screen-editScreen','',''),(1616,'priv','fr','screen-editScreen','',''),(1616,'priv','zh-cn','screen-editScreen','',''),(1616,'priv','zh-tw','screen-editScreen','',''),(1617,'priv','de','screen-designScreen','',''),(1617,'priv','en','screen-designScreen','',''),(1617,'priv','fr','screen-designScreen','',''),(1617,'priv','zh-cn','screen-designScreen','',''),(1617,'priv','zh-tw','screen-designScreen','',''),(1618,'priv','de','screen-publishScreen','',''),(1618,'priv','en','screen-publishScreen','',''),(1618,'priv','fr','screen-publishScreen','',''),(1618,'priv','zh-cn','screen-publishScreen','',''),(1618,'priv','zh-tw','screen-publishScreen','',''),(1619,'priv','de','screen-deleteScreen','',''),(1619,'priv','en','screen-deleteScreen','',''),(1619,'priv','fr','screen-deleteScreen','',''),(1619,'priv','zh-cn','screen-deleteScreen','',''),(1619,'priv','zh-tw','screen-deleteScreen','',''),(1620,'priv','de','screen-annualData','',''),(1620,'priv','en','screen-annualData','',''),(1620,'priv','fr','screen-annualData','',''),(1620,'priv','zh-cn','screen-annualData','',''),(1620,'priv','zh-tw','screen-annualData','',''),(1621,'priv','de','screen-allAnnualData','',''),(1621,'priv','en','screen-allAnnualData','',''),(1621,'priv','fr','screen-allAnnualData','',''),(1621,'priv','zh-cn','screen-allAnnualData','',''),(1621,'priv','zh-tw','screen-allAnnualData','',''),(1622,'priv','de','pivot-browseAction','',''),(1622,'priv','en','pivot-browseAction','',''),(1622,'priv','fr','pivot-browseAction','',''),(1622,'priv','zh-cn','pivot-browseAction','',''),(1622,'priv','zh-tw','pivot-browseAction','',''),(1623,'priv','de','pivot-preview','',''),(1623,'priv','en','pivot-preview','',''),(1623,'priv','fr','pivot-preview','',''),(1623,'priv','zh-cn','pivot-preview','',''),(1623,'priv','zh-tw','pivot-preview','',''),(1624,'priv','de','pivot-create','',''),(1624,'priv','en','pivot-create','',''),(1624,'priv','fr','pivot-create','',''),(1624,'priv','zh-cn','pivot-create','',''),(1624,'priv','zh-tw','pivot-create','',''),(1625,'priv','de','pivot-edit','',''),(1625,'priv','en','pivot-edit','',''),(1625,'priv','fr','pivot-edit','',''),(1625,'priv','zh-cn','pivot-edit','',''),(1625,'priv','zh-tw','pivot-edit','',''),(1626,'priv','de','pivot-design','',''),(1626,'priv','en','pivot-design','',''),(1626,'priv','fr','pivot-design','',''),(1626,'priv','zh-cn','pivot-design','',''),(1626,'priv','zh-tw','pivot-design','',''),(1627,'priv','de','pivot-delete','',''),(1627,'priv','en','pivot-delete','',''),(1627,'priv','fr','pivot-delete','',''),(1627,'priv','zh-cn','pivot-delete','',''),(1627,'priv','zh-tw','pivot-delete','',''),(1628,'priv','de','pivot-export','',''),(1628,'priv','en','pivot-export','',''),(1628,'priv','fr','pivot-export','',''),(1628,'priv','zh-cn','pivot-export','',''),(1628,'priv','zh-tw','pivot-export','',''),(1629,'priv','de','pivot-showProduct','',''),(1629,'priv','en','pivot-showProduct','',''),(1629,'priv','fr','pivot-showProduct','',''),(1629,'priv','zh-cn','pivot-showProduct','',''),(1629,'priv','zh-tw','pivot-showProduct','',''),(1630,'priv','de','pivot-showProject','',''),(1630,'priv','en','pivot-showProject','',''),(1630,'priv','fr','pivot-showProject','',''),(1630,'priv','zh-cn','pivot-showProject','',''),(1630,'priv','zh-tw','pivot-showProject','',''),(1631,'priv','de','pivot-projectDeviation','',''),(1631,'priv','en','pivot-projectDeviation','',''),(1631,'priv','fr','pivot-projectDeviation','',''),(1631,'priv','zh-cn','pivot-projectDeviation','',''),(1631,'priv','zh-tw','pivot-projectDeviation','',''),(1632,'priv','de','pivot-productSummary','',''),(1632,'priv','en','pivot-productSummary','',''),(1632,'priv','fr','pivot-productSummary','',''),(1632,'priv','zh-cn','pivot-productSummary','',''),(1632,'priv','zh-tw','pivot-productSummary','',''),(1633,'priv','de','pivot-bugCreate','',''),(1633,'priv','en','pivot-bugCreate','',''),(1633,'priv','fr','pivot-bugCreate','',''),(1633,'priv','zh-cn','pivot-bugCreate','',''),(1633,'priv','zh-tw','pivot-bugCreate','',''),(1634,'priv','de','pivot-bugAssign','',''),(1634,'priv','en','pivot-bugAssign','',''),(1634,'priv','fr','pivot-bugAssign','',''),(1634,'priv','zh-cn','pivot-bugAssign','',''),(1634,'priv','zh-tw','pivot-bugAssign','',''),(1635,'priv','de','pivot-workload','',''),(1635,'priv','en','pivot-workload','',''),(1635,'priv','fr','pivot-workload','',''),(1635,'priv','zh-cn','pivot-workload','',''),(1635,'priv','zh-tw','pivot-workload','',''),(1636,'priv','de','pivot-casesrun','',''),(1636,'priv','en','pivot-casesrun','',''),(1636,'priv','fr','pivot-casesrun','',''),(1636,'priv','zh-cn','pivot-casesrun','',''),(1636,'priv','zh-tw','pivot-casesrun','',''),(1637,'priv','de','pivot-storyLinkedBug','',''),(1637,'priv','en','pivot-storyLinkedBug','',''),(1637,'priv','fr','pivot-storyLinkedBug','',''),(1637,'priv','zh-cn','pivot-storyLinkedBug','',''),(1637,'priv','zh-tw','pivot-storyLinkedBug','',''),(1638,'priv','de','pivot-testcase','',''),(1638,'priv','en','pivot-testcase','',''),(1638,'priv','fr','pivot-testcase','',''),(1638,'priv','zh-cn','pivot-testcase','',''),(1638,'priv','zh-tw','pivot-testcase','',''),(1639,'priv','de','pivot-build','',''),(1639,'priv','en','pivot-build','',''),(1639,'priv','fr','pivot-build','',''),(1639,'priv','zh-cn','pivot-build','',''),(1639,'priv','zh-tw','pivot-build','',''),(1640,'priv','de','pivot-workSummary','',''),(1640,'priv','en','pivot-workSummary','',''),(1640,'priv','fr','pivot-workSummary','',''),(1640,'priv','zh-cn','pivot-workSummary','',''),(1640,'priv','zh-tw','pivot-workSummary','',''),(1641,'priv','de','pivot-roadmap','',''),(1641,'priv','en','pivot-roadmap','',''),(1641,'priv','fr','pivot-roadmap','',''),(1641,'priv','zh-cn','pivot-roadmap','',''),(1641,'priv','zh-tw','pivot-roadmap','',''),(1642,'priv','de','pivot-productInvest','',''),(1642,'priv','en','pivot-productInvest','',''),(1642,'priv','fr','pivot-productInvest','',''),(1642,'priv','zh-cn','pivot-productInvest','',''),(1642,'priv','zh-tw','pivot-productInvest','',''),(1643,'priv','de','pivot-bugSummary','',''),(1643,'priv','en','pivot-bugSummary','',''),(1643,'priv','fr','pivot-bugSummary','',''),(1643,'priv','zh-cn','pivot-bugSummary','',''),(1643,'priv','zh-tw','pivot-bugSummary','',''),(1644,'priv','de','pivot-bugAssignSummary','',''),(1644,'priv','en','pivot-bugAssignSummary','',''),(1644,'priv','fr','pivot-bugAssignSummary','',''),(1644,'priv','zh-cn','pivot-bugAssignSummary','',''),(1644,'priv','zh-tw','pivot-bugAssignSummary','',''),(1645,'priv','de','pivot-workAssignSummary','',''),(1645,'priv','en','pivot-workAssignSummary','',''),(1645,'priv','fr','pivot-workAssignSummary','',''),(1645,'priv','zh-cn','pivot-workAssignSummary','',''),(1645,'priv','zh-tw','pivot-workAssignSummary','',''),(1646,'priv','de','chart-preview','',''),(1646,'priv','en','chart-preview','',''),(1646,'priv','fr','chart-preview','',''),(1646,'priv','zh-cn','chart-preview','',''),(1646,'priv','zh-tw','chart-preview','',''),(1648,'priv','de','dataview-browse','',''),(1648,'priv','en','dataview-browse','',''),(1648,'priv','fr','dataview-browse','',''),(1648,'priv','zh-cn','dataview-browse','',''),(1648,'priv','zh-tw','dataview-browse','',''),(1649,'priv','de','dataview-create','',''),(1649,'priv','en','dataview-create','',''),(1649,'priv','fr','dataview-create','',''),(1649,'priv','zh-cn','dataview-create','',''),(1649,'priv','zh-tw','dataview-create','',''),(1650,'priv','de','dataview-edit','',''),(1650,'priv','en','dataview-edit','',''),(1650,'priv','fr','dataview-edit','',''),(1650,'priv','zh-cn','dataview-edit','',''),(1650,'priv','zh-tw','dataview-edit','',''),(1651,'priv','de','dataview-design','',''),(1651,'priv','en','dataview-design','',''),(1651,'priv','fr','dataview-design','',''),(1651,'priv','zh-cn','dataview-design','',''),(1651,'priv','zh-tw','dataview-design','',''),(1652,'priv','de','dataview-delete','',''),(1652,'priv','en','dataview-delete','',''),(1652,'priv','fr','dataview-delete','',''),(1652,'priv','zh-cn','dataview-delete','',''),(1652,'priv','zh-tw','dataview-delete','',''),(1653,'priv','de','dimension-browse','',''),(1653,'priv','en','dimension-browse','',''),(1653,'priv','fr','dimension-browse','',''),(1653,'priv','zh-cn','dimension-browse','',''),(1653,'priv','zh-tw','dimension-browse','',''),(1654,'priv','de','dimension-create','',''),(1654,'priv','en','dimension-create','',''),(1654,'priv','fr','dimension-create','',''),(1654,'priv','zh-cn','dimension-create','',''),(1654,'priv','zh-tw','dimension-create','',''),(1655,'priv','de','dimension-edit','',''),(1655,'priv','en','dimension-edit','',''),(1655,'priv','fr','dimension-edit','',''),(1655,'priv','zh-cn','dimension-edit','',''),(1655,'priv','zh-tw','dimension-edit','',''),(1656,'priv','de','dimension-delete','',''),(1656,'priv','en','dimension-delete','',''),(1656,'priv','fr','dimension-delete','',''),(1656,'priv','zh-cn','dimension-delete','',''),(1656,'priv','zh-tw','dimension-delete','',''),(1664,'priv','de','custom-limitTaskDateAction','',''),(1664,'priv','en','custom-limitTaskDateAction','',''),(1664,'priv','fr','custom-limitTaskDateAction','',''),(1664,'priv','zh-cn','custom-limitTaskDateAction','',''),(1664,'priv','zh-tw','custom-limitTaskDateAction','',''),(1665,'priv','de','tree-browsegroup','',''),(1665,'priv','en','tree-browsegroup','',''),(1665,'priv','fr','tree-browsegroup','',''),(1665,'priv','zh-cn','tree-browsegroup','',''),(1665,'priv','zh-tw','tree-browsegroup','',''),(1673,'priv','de','testcase-createScene','',''),(1673,'priv','en','testcase-createScene','',''),(1673,'priv','fr','testcase-createScene','',''),(1673,'priv','zh-cn','testcase-createScene','',''),(1673,'priv','zh-tw','testcase-createScene','',''),(1674,'priv','de','testcase-editScene','',''),(1674,'priv','en','testcase-editScene','',''),(1674,'priv','fr','testcase-editScene','',''),(1674,'priv','zh-cn','testcase-editScene','',''),(1674,'priv','zh-tw','testcase-editScene','',''),(1675,'priv','de','testcase-deleteScene','',''),(1675,'priv','en','testcase-deleteScene','',''),(1675,'priv','fr','testcase-deleteScene','',''),(1675,'priv','zh-cn','testcase-deleteScene','',''),(1675,'priv','zh-tw','testcase-deleteScene','',''),(1676,'priv','de','testcase-changeScene','',''),(1676,'priv','en','testcase-changeScene','',''),(1676,'priv','fr','testcase-changeScene','',''),(1676,'priv','zh-cn','testcase-changeScene','',''),(1676,'priv','zh-tw','testcase-changeScene','',''),(1677,'priv','de','testcase-batchChangeScene','',''),(1677,'priv','en','testcase-batchChangeScene','',''),(1677,'priv','fr','testcase-batchChangeScene','',''),(1677,'priv','zh-cn','testcase-batchChangeScene','',''),(1677,'priv','zh-tw','testcase-batchChangeScene','',''),(1678,'priv','de','testcase-updateOrder','',''),(1678,'priv','en','testcase-updateOrder','',''),(1678,'priv','fr','testcase-updateOrder','',''),(1678,'priv','zh-cn','testcase-updateOrder','',''),(1678,'priv','zh-tw','testcase-updateOrder','',''),(1679,'priv','de','testcase-importXmind','',''),(1679,'priv','en','testcase-importXmind','',''),(1679,'priv','fr','testcase-importXmind','',''),(1679,'priv','zh-cn','testcase-importXmind','',''),(1679,'priv','zh-tw','testcase-importXmind','',''),(1682,'priv','de','testcase-exportXmind','',''),(1682,'priv','en','testcase-exportXmind','',''),(1682,'priv','fr','testcase-exportXmind','',''),(1682,'priv','zh-cn','testcase-exportXmind','',''),(1682,'priv','zh-tw','testcase-exportXmind','',''),(1694,'priv','de','repo-importAction','',''),(1694,'priv','en','repo-importAction','',''),(1694,'priv','fr','repo-importAction','',''),(1694,'priv','zh-cn','repo-importAction','',''),(1694,'priv','zh-tw','repo-importAction','',''),(1695,'priv','de','chart-export','',''),(1695,'priv','en','chart-export','',''),(1695,'priv','fr','chart-export','',''),(1695,'priv','zh-cn','chart-export','',''),(1695,'priv','zh-tw','chart-export','',''),(1701,'priv','de','doc-index','',''),(1701,'priv','en','doc-index','',''),(1701,'priv','fr','doc-index','',''),(1701,'priv','zh-cn','doc-index','',''),(1701,'priv','zh-tw','doc-index','',''),(1702,'priv','de','doc-mySpace','',''),(1702,'priv','en','doc-mySpace','',''),(1702,'priv','fr','doc-mySpace','',''),(1702,'priv','zh-cn','doc-mySpace','',''),(1702,'priv','zh-tw','doc-mySpace','',''),(1703,'priv','de','doc-myView','',''),(1703,'priv','en','doc-myView','',''),(1703,'priv','fr','doc-myView','',''),(1703,'priv','zh-cn','doc-myView','',''),(1703,'priv','zh-tw','doc-myView','',''),(1704,'priv','de','doc-myCollection','',''),(1704,'priv','en','doc-myCollection','',''),(1704,'priv','fr','doc-myCollection','',''),(1704,'priv','zh-cn','doc-myCollection','',''),(1704,'priv','zh-tw','doc-myCollection','',''),(1705,'priv','de','doc-myCreation','',''),(1705,'priv','en','doc-myCreation','',''),(1705,'priv','fr','doc-myCreation','',''),(1705,'priv','zh-cn','doc-myCreation','',''),(1705,'priv','zh-tw','doc-myCreation','',''),(1706,'priv','de','doc-createLib','',''),(1706,'priv','en','doc-createLib','',''),(1706,'priv','fr','doc-createLib','',''),(1706,'priv','zh-cn','doc-createLib','',''),(1706,'priv','zh-tw','doc-createLib','',''),(1707,'priv','de','doc-editLib','',''),(1707,'priv','en','doc-editLib','',''),(1707,'priv','fr','doc-editLib','',''),(1707,'priv','zh-cn','doc-editLib','',''),(1707,'priv','zh-tw','doc-editLib','',''),(1708,'priv','de','doc-deleteLib','',''),(1708,'priv','en','doc-deleteLib','',''),(1708,'priv','fr','doc-deleteLib','',''),(1708,'priv','zh-cn','doc-deleteLib','',''),(1708,'priv','zh-tw','doc-deleteLib','',''),(1709,'priv','de','doc-create','',''),(1709,'priv','en','doc-create','',''),(1709,'priv','fr','doc-create','',''),(1709,'priv','zh-cn','doc-create','',''),(1709,'priv','zh-tw','doc-create','',''),(1710,'priv','de','doc-edit','',''),(1710,'priv','en','doc-edit','',''),(1710,'priv','fr','doc-edit','',''),(1710,'priv','zh-cn','doc-edit','',''),(1710,'priv','zh-tw','doc-edit','',''),(1711,'priv','de','doc-view','',''),(1711,'priv','en','doc-view','',''),(1711,'priv','fr','doc-view','',''),(1711,'priv','zh-cn','doc-view','',''),(1711,'priv','zh-tw','doc-view','',''),(1712,'priv','de','doc-delete','',''),(1712,'priv','en','doc-delete','',''),(1712,'priv','fr','doc-delete','',''),(1712,'priv','zh-cn','doc-delete','',''),(1712,'priv','zh-tw','doc-delete','',''),(1713,'priv','de','doc-deleteFile','',''),(1713,'priv','en','doc-deleteFile','',''),(1713,'priv','fr','doc-deleteFile','',''),(1713,'priv','zh-cn','doc-deleteFile','',''),(1713,'priv','zh-tw','doc-deleteFile','',''),(1714,'priv','de','doc-collectAction','',''),(1714,'priv','en','doc-collectAction','',''),(1714,'priv','fr','doc-collectAction','',''),(1714,'priv','zh-cn','doc-collectAction','',''),(1714,'priv','zh-tw','doc-collectAction','',''),(1715,'priv','de','doc-productSpace','',''),(1715,'priv','en','doc-productSpace','',''),(1715,'priv','fr','doc-productSpace','',''),(1715,'priv','zh-cn','doc-productSpace','',''),(1715,'priv','zh-tw','doc-productSpace','',''),(1716,'priv','de','doc-projectSpace','',''),(1716,'priv','en','doc-projectSpace','',''),(1716,'priv','fr','doc-projectSpace','',''),(1716,'priv','zh-cn','doc-projectSpace','',''),(1716,'priv','zh-tw','doc-projectSpace','',''),(1717,'priv','de','doc-teamSpace','',''),(1717,'priv','en','doc-teamSpace','',''),(1717,'priv','fr','doc-teamSpace','',''),(1717,'priv','zh-cn','doc-teamSpace','',''),(1717,'priv','zh-tw','doc-teamSpace','',''),(1718,'priv','de','doc-showFiles','',''),(1718,'priv','en','doc-showFiles','',''),(1718,'priv','fr','doc-showFiles','',''),(1718,'priv','zh-cn','doc-showFiles','',''),(1718,'priv','zh-tw','doc-showFiles','',''),(1719,'priv','de','doc-addCatalog','',''),(1719,'priv','en','doc-addCatalog','',''),(1719,'priv','fr','doc-addCatalog','',''),(1719,'priv','zh-cn','doc-addCatalog','',''),(1719,'priv','zh-tw','doc-addCatalog','',''),(1720,'priv','de','doc-editCatalog','',''),(1720,'priv','en','doc-editCatalog','',''),(1720,'priv','fr','doc-editCatalog','',''),(1720,'priv','zh-cn','doc-editCatalog','',''),(1720,'priv','zh-tw','doc-editCatalog','',''),(1721,'priv','de','doc-sortCatalog','',''),(1721,'priv','en','doc-sortCatalog','',''),(1721,'priv','fr','doc-sortCatalog','',''),(1721,'priv','zh-cn','doc-sortCatalog','',''),(1721,'priv','zh-tw','doc-sortCatalog','',''),(1722,'priv','de','doc-deleteCatalog','',''),(1722,'priv','en','doc-deleteCatalog','',''),(1722,'priv','fr','doc-deleteCatalog','',''),(1722,'priv','zh-cn','doc-deleteCatalog','',''),(1722,'priv','zh-tw','doc-deleteCatalog','',''),(1723,'priv','de','doc-displaySetting','',''),(1723,'priv','en','doc-displaySetting','',''),(1723,'priv','fr','doc-displaySetting','',''),(1723,'priv','zh-cn','doc-displaySetting','',''),(1723,'priv','zh-tw','doc-displaySetting','',''),(1724,'priv','de','doc-diffAction','',''),(1724,'priv','en','doc-diffAction','',''),(1724,'priv','fr','doc-diffAction','',''),(1724,'priv','zh-cn','doc-diffAction','',''),(1724,'priv','zh-tw','doc-diffAction','',''),(1725,'priv','de','doc-mine2export','',''),(1725,'priv','en','doc-mine2export','',''),(1725,'priv','fr','doc-mine2export','',''),(1725,'priv','zh-cn','doc-mine2export','',''),(1725,'priv','zh-tw','doc-mine2export','',''),(1726,'priv','de','doc-product2export','',''),(1726,'priv','en','doc-product2export','',''),(1726,'priv','fr','doc-product2export','',''),(1726,'priv','zh-cn','doc-product2export','',''),(1726,'priv','zh-tw','doc-product2export','',''),(1727,'priv','de','doc-project2export','',''),(1727,'priv','en','doc-project2export','',''),(1727,'priv','fr','doc-project2export','',''),(1727,'priv','zh-cn','doc-project2export','',''),(1727,'priv','zh-tw','doc-project2export','',''),(1728,'priv','de','doc-custom2export','',''),(1728,'priv','en','doc-custom2export','',''),(1728,'priv','fr','doc-custom2export','',''),(1728,'priv','zh-cn','doc-custom2export','',''),(1728,'priv','zh-tw','doc-custom2export','',''),(1729,'priv','de','doc-execution2export','',''),(1729,'priv','en','doc-execution2export','',''),(1729,'priv','fr','doc-execution2export','',''),(1729,'priv','zh-cn','doc-execution2export','',''),(1729,'priv','zh-tw','doc-execution2export','',''),(1730,'priv','de','doc-importToPracticeLib','',''),(1730,'priv','en','doc-importToPracticeLib','',''),(1730,'priv','fr','doc-importToPracticeLib','',''),(1730,'priv','zh-cn','doc-importToPracticeLib','',''),(1730,'priv','zh-tw','doc-importToPracticeLib','',''),(1731,'priv','de','doc-importToComponentLib','',''),(1731,'priv','en','doc-importToComponentLib','',''),(1731,'priv','fr','doc-importToComponentLib','',''),(1731,'priv','zh-cn','doc-importToComponentLib','',''),(1731,'priv','zh-tw','doc-importToComponentLib','',''),(1732,'priv','de','report-show','',''),(1732,'priv','en','report-show','',''),(1732,'priv','fr','report-show','',''),(1732,'priv','zh-cn','report-show','',''),(1732,'priv','zh-tw','report-show','',''),(1733,'priv','de','report-custom','',''),(1733,'priv','en','report-custom','',''),(1733,'priv','fr','report-custom','',''),(1733,'priv','zh-cn','report-custom','',''),(1733,'priv','zh-tw','report-custom','',''),(1734,'priv','de','report-editReportAction','',''),(1734,'priv','en','report-editReportAction','',''),(1734,'priv','fr','report-editReportAction','',''),(1734,'priv','zh-cn','report-editReportAction','',''),(1734,'priv','zh-tw','report-editReportAction','',''),(1735,'priv','de','report-useReportAction','',''),(1735,'priv','en','report-useReportAction','',''),(1735,'priv','fr','report-useReportAction','',''),(1735,'priv','zh-cn','report-useReportAction','',''),(1735,'priv','zh-tw','report-useReportAction','',''),(1736,'priv','de','report-deleteReport','',''),(1736,'priv','en','report-deleteReport','',''),(1736,'priv','fr','report-deleteReport','',''),(1736,'priv','zh-cn','report-deleteReport','',''),(1736,'priv','zh-tw','report-deleteReport','',''),(1737,'priv','de','report-saveReport','',''),(1737,'priv','en','report-saveReport','',''),(1737,'priv','fr','report-saveReport','',''),(1737,'priv','zh-cn','report-saveReport','',''),(1737,'priv','zh-tw','report-saveReport','',''),(1738,'priv','de','report-crystalExport','',''),(1738,'priv','en','report-crystalExport','',''),(1738,'priv','fr','report-crystalExport','',''),(1738,'priv','zh-cn','report-crystalExport','',''),(1738,'priv','zh-tw','report-crystalExport','',''),(1739,'priv','de','report-customeredReport','',''),(1739,'priv','en','report-customeredReport','',''),(1739,'priv','fr','report-customeredReport','',''),(1739,'priv','zh-cn','report-customeredReport','',''),(1739,'priv','zh-tw','report-customeredReport','',''),(1740,'priv','de','report-viewReport','',''),(1740,'priv','en','report-viewReport','',''),(1740,'priv','fr','report-viewReport','',''),(1740,'priv','zh-cn','report-viewReport','',''),(1740,'priv','zh-tw','report-viewReport','',''),(1741,'priv','de','report-projectSummary','',''),(1741,'priv','en','report-projectSummary','',''),(1741,'priv','fr','report-projectSummary','',''),(1741,'priv','zh-cn','report-projectSummary','',''),(1741,'priv','zh-tw','report-projectSummary','',''),(1742,'priv','de','report-projectWorkload','',''),(1742,'priv','en','report-projectWorkload','',''),(1742,'priv','fr','report-projectWorkload','',''),(1742,'priv','zh-cn','report-projectWorkload','',''),(1742,'priv','zh-tw','report-projectWorkload','',''),(1743,'priv','de','report-export','',''),(1743,'priv','en','report-export','',''),(1743,'priv','fr','report-export','',''),(1743,'priv','zh-cn','report-export','',''),(1743,'priv','zh-tw','report-export','',''),(1744,'priv','de','api-index','',''),(1744,'priv','en','api-index','',''),(1744,'priv','fr','api-index','',''),(1744,'priv','zh-cn','api-index','',''),(1744,'priv','zh-tw','api-index','',''),(1745,'priv','de','api-createLib','',''),(1745,'priv','en','api-createLib','',''),(1745,'priv','fr','api-createLib','',''),(1745,'priv','zh-cn','api-createLib','',''),(1745,'priv','zh-tw','api-createLib','',''),(1746,'priv','de','api-editLib','',''),(1746,'priv','en','api-editLib','',''),(1746,'priv','fr','api-editLib','',''),(1746,'priv','zh-cn','api-editLib','',''),(1746,'priv','zh-tw','api-editLib','',''),(1747,'priv','de','api-deleteLib','',''),(1747,'priv','en','api-deleteLib','',''),(1747,'priv','fr','api-deleteLib','',''),(1747,'priv','zh-cn','api-deleteLib','',''),(1747,'priv','zh-tw','api-deleteLib','',''),(1748,'priv','de','api-createRelease','',''),(1748,'priv','en','api-createRelease','',''),(1748,'priv','fr','api-createRelease','',''),(1748,'priv','zh-cn','api-createRelease','',''),(1748,'priv','zh-tw','api-createRelease','',''),(1749,'priv','de','api-releases','',''),(1749,'priv','en','api-releases','',''),(1749,'priv','fr','api-releases','',''),(1749,'priv','zh-cn','api-releases','',''),(1749,'priv','zh-tw','api-releases','',''),(1750,'priv','de','api-deleteRelease','',''),(1750,'priv','en','api-deleteRelease','',''),(1750,'priv','fr','api-deleteRelease','',''),(1750,'priv','zh-cn','api-deleteRelease','',''),(1750,'priv','zh-tw','api-deleteRelease','',''),(1751,'priv','de','api-struct','',''),(1751,'priv','en','api-struct','',''),(1751,'priv','fr','api-struct','',''),(1751,'priv','zh-cn','api-struct','',''),(1751,'priv','zh-tw','api-struct','',''),(1752,'priv','de','api-createStruct','',''),(1752,'priv','en','api-createStruct','',''),(1752,'priv','fr','api-createStruct','',''),(1752,'priv','zh-cn','api-createStruct','',''),(1752,'priv','zh-tw','api-createStruct','',''),(1753,'priv','de','api-editStruct','',''),(1753,'priv','en','api-editStruct','',''),(1753,'priv','fr','api-editStruct','',''),(1753,'priv','zh-cn','api-editStruct','',''),(1753,'priv','zh-tw','api-editStruct','',''),(1754,'priv','de','api-deleteStruct','',''),(1754,'priv','en','api-deleteStruct','',''),(1754,'priv','fr','api-deleteStruct','',''),(1754,'priv','zh-cn','api-deleteStruct','',''),(1754,'priv','zh-tw','api-deleteStruct','',''),(1755,'priv','de','api-create','',''),(1755,'priv','en','api-create','',''),(1755,'priv','fr','api-create','',''),(1755,'priv','zh-cn','api-create','',''),(1755,'priv','zh-tw','api-create','',''),(1756,'priv','de','api-edit','',''),(1756,'priv','en','api-edit','',''),(1756,'priv','fr','api-edit','',''),(1756,'priv','zh-cn','api-edit','',''),(1756,'priv','zh-tw','api-edit','',''),(1757,'priv','de','api-delete','',''),(1757,'priv','en','api-delete','',''),(1757,'priv','fr','api-delete','',''),(1757,'priv','zh-cn','api-delete','',''),(1757,'priv','zh-tw','api-delete','',''),(1758,'priv','de','api-addCatalog','',''),(1758,'priv','en','api-addCatalog','',''),(1758,'priv','fr','api-addCatalog','',''),(1758,'priv','zh-cn','api-addCatalog','',''),(1758,'priv','zh-tw','api-addCatalog','',''),(1759,'priv','de','api-editCatalog','',''),(1759,'priv','en','api-editCatalog','',''),(1759,'priv','fr','api-editCatalog','',''),(1759,'priv','zh-cn','api-editCatalog','',''),(1759,'priv','zh-tw','api-editCatalog','',''),(1760,'priv','de','api-sortCatalog','',''),(1760,'priv','en','api-sortCatalog','',''),(1760,'priv','fr','api-sortCatalog','',''),(1760,'priv','zh-cn','api-sortCatalog','',''),(1760,'priv','zh-tw','api-sortCatalog','',''),(1761,'priv','de','api-deleteCatalog','',''),(1761,'priv','en','api-deleteCatalog','',''),(1761,'priv','fr','api-deleteCatalog','',''),(1761,'priv','zh-cn','api-deleteCatalog','',''),(1761,'priv','zh-tw','api-deleteCatalog','',''),(1762,'priv','de','api-getModel','',''),(1762,'priv','en','api-getModel','',''),(1762,'priv','fr','api-getModel','',''),(1762,'priv','zh-cn','api-getModel','',''),(1762,'priv','zh-tw','api-getModel','',''),(1763,'priv','de','api-debug','',''),(1763,'priv','en','api-debug','',''),(1763,'priv','fr','api-debug','',''),(1763,'priv','zh-cn','api-debug','',''),(1763,'priv','zh-tw','api-debug','',''),(1764,'priv','de','api-sql','',''),(1764,'priv','en','api-sql','',''),(1764,'priv','fr','api-sql','',''),(1764,'priv','zh-cn','api-sql','',''),(1764,'priv','zh-tw','api-sql','',''),(1765,'priv','de','api-export','',''),(1765,'priv','en','api-export','',''),(1765,'priv','fr','api-export','',''),(1765,'priv','zh-cn','api-export','',''),(1765,'priv','zh-tw','api-export','',''),(1766,'priv','de','doc-myEdited','',''),(1766,'priv','en','doc-myEdited','',''),(1766,'priv','fr','doc-myEdited','',''),(1766,'priv','zh-cn','doc-myEdited','',''),(1766,'priv','zh-tw','doc-myEdited','',''),(1767,'priv','de','traincourse-batchImport','',''),(1767,'priv','en','traincourse-batchImport','',''),(1767,'priv','fr','traincourse-batchImport','',''),(1767,'priv','zh-cn','traincourse-batchImport','',''),(1767,'priv','zh-tw','traincourse-batchImport','',''),(2060,'priv','de','product-activateAction','',''),(2060,'priv','en','product-activateAction','',''),(2060,'priv','fr','product-activateAction','',''),(2060,'priv','zh-cn','product-activateAction','',''),(2060,'priv','zh-tw','product-activateAction','',''),(2061,'priv','de','charter-browse','',''),(2061,'priv','en','charter-browse','',''),(2061,'priv','fr','charter-browse','',''),(2061,'priv','zh-cn','charter-browse','',''),(2061,'priv','zh-tw','charter-browse','',''),(2062,'priv','de','charter-create','',''),(2062,'priv','en','charter-create','',''),(2062,'priv','fr','charter-create','',''),(2062,'priv','zh-cn','charter-create','',''),(2062,'priv','zh-tw','charter-create','',''),(2063,'priv','de','charter-edit','',''),(2063,'priv','en','charter-edit','',''),(2063,'priv','fr','charter-edit','',''),(2063,'priv','zh-cn','charter-edit','',''),(2063,'priv','zh-tw','charter-edit','',''),(2064,'priv','de','charter-view','',''),(2064,'priv','en','charter-view','',''),(2064,'priv','fr','charter-view','',''),(2064,'priv','zh-cn','charter-view','',''),(2064,'priv','zh-tw','charter-view','',''),(2065,'priv','de','charter-delete','',''),(2065,'priv','en','charter-delete','',''),(2065,'priv','fr','charter-delete','',''),(2065,'priv','zh-cn','charter-delete','',''),(2065,'priv','zh-tw','charter-delete','',''),(2066,'priv','de','charter-review','',''),(2066,'priv','en','charter-review','',''),(2066,'priv','fr','charter-review','',''),(2066,'priv','zh-cn','charter-review','',''),(2066,'priv','zh-tw','charter-review','',''),(2067,'priv','de','charter-loadStories','',''),(2067,'priv','en','charter-loadStories','',''),(2067,'priv','fr','charter-loadStories','',''),(2067,'priv','zh-cn','charter-loadStories','',''),(2067,'priv','zh-tw','charter-loadStories','',''),(2068,'priv','de','demandpool-browse','',''),(2068,'priv','en','demandpool-browse','',''),(2068,'priv','fr','demandpool-browse','',''),(2068,'priv','zh-cn','demandpool-browse','',''),(2068,'priv','zh-tw','demandpool-browse','',''),(2069,'priv','de','demandpool-create','',''),(2069,'priv','en','demandpool-create','',''),(2069,'priv','fr','demandpool-create','',''),(2069,'priv','zh-cn','demandpool-create','',''),(2069,'priv','zh-tw','demandpool-create','',''),(2070,'priv','de','demandpool-edit','',''),(2070,'priv','en','demandpool-edit','',''),(2070,'priv','fr','demandpool-edit','',''),(2070,'priv','zh-cn','demandpool-edit','',''),(2070,'priv','zh-tw','demandpool-edit','',''),(2071,'priv','de','demandpool-view','',''),(2071,'priv','en','demandpool-view','',''),(2071,'priv','fr','demandpool-view','',''),(2071,'priv','zh-cn','demandpool-view','',''),(2071,'priv','zh-tw','demandpool-view','',''),(2072,'priv','de','demandpool-close','',''),(2072,'priv','en','demandpool-close','',''),(2072,'priv','fr','demandpool-close','',''),(2072,'priv','zh-cn','demandpool-close','',''),(2072,'priv','zh-tw','demandpool-close','',''),(2073,'priv','de','demandpool-activate','',''),(2073,'priv','en','demandpool-activate','',''),(2073,'priv','fr','demandpool-activate','',''),(2073,'priv','zh-cn','demandpool-activate','',''),(2073,'priv','zh-tw','demandpool-activate','',''),(2074,'priv','de','demandpool-delete','',''),(2074,'priv','en','demandpool-delete','',''),(2074,'priv','fr','demandpool-delete','',''),(2074,'priv','zh-cn','demandpool-delete','',''),(2074,'priv','zh-tw','demandpool-delete','',''),(2075,'priv','de','demand-browse','',''),(2075,'priv','en','demand-browse','',''),(2075,'priv','fr','demand-browse','',''),(2075,'priv','zh-cn','demand-browse','',''),(2075,'priv','zh-tw','demand-browse','',''),(2076,'priv','de','demand-create','',''),(2076,'priv','en','demand-create','',''),(2076,'priv','fr','demand-create','',''),(2076,'priv','zh-cn','demand-create','',''),(2076,'priv','zh-tw','demand-create','',''),(2077,'priv','de','demand-batchCreate','',''),(2077,'priv','en','demand-batchCreate','',''),(2077,'priv','fr','demand-batchCreate','',''),(2077,'priv','zh-cn','demand-batchCreate','',''),(2077,'priv','zh-tw','demand-batchCreate','',''),(2078,'priv','de','demand-edit','',''),(2078,'priv','en','demand-edit','',''),(2078,'priv','fr','demand-edit','',''),(2078,'priv','zh-cn','demand-edit','',''),(2078,'priv','zh-tw','demand-edit','',''),(2079,'priv','de','demand-view','',''),(2079,'priv','en','demand-view','',''),(2079,'priv','fr','demand-view','',''),(2079,'priv','zh-cn','demand-view','',''),(2079,'priv','zh-tw','demand-view','',''),(2080,'priv','de','demand-assignedTo','',''),(2080,'priv','en','demand-assignedTo','',''),(2080,'priv','fr','demand-assignedTo','',''),(2080,'priv','zh-cn','demand-assignedTo','',''),(2080,'priv','zh-tw','demand-assignedTo','',''),(2081,'priv','de','demand-change','',''),(2081,'priv','en','demand-change','',''),(2081,'priv','fr','demand-change','',''),(2081,'priv','zh-cn','demand-change','',''),(2081,'priv','zh-tw','demand-change','',''),(2082,'priv','de','demand-review','',''),(2082,'priv','en','demand-review','',''),(2082,'priv','fr','demand-review','',''),(2082,'priv','zh-cn','demand-review','',''),(2082,'priv','zh-tw','demand-review','',''),(2083,'priv','de','demand-submitReview','',''),(2083,'priv','en','demand-submitReview','',''),(2083,'priv','fr','demand-submitReview','',''),(2083,'priv','zh-cn','demand-submitReview','',''),(2083,'priv','zh-tw','demand-submitReview','',''),(2084,'priv','de','demand-recall','',''),(2084,'priv','en','demand-recall','',''),(2084,'priv','fr','demand-recall','',''),(2084,'priv','zh-cn','demand-recall','',''),(2084,'priv','zh-tw','demand-recall','',''),(2085,'priv','de','demand-track','',''),(2085,'priv','en','demand-track','',''),(2085,'priv','fr','demand-track','',''),(2085,'priv','zh-cn','demand-track','',''),(2085,'priv','zh-tw','demand-track','',''),(2086,'priv','de','demand-manageTree','',''),(2086,'priv','en','demand-manageTree','',''),(2086,'priv','fr','demand-manageTree','',''),(2086,'priv','zh-cn','demand-manageTree','',''),(2086,'priv','zh-tw','demand-manageTree','',''),(2087,'priv','de','demand-export','',''),(2087,'priv','en','demand-export','',''),(2087,'priv','fr','demand-export','',''),(2087,'priv','zh-cn','demand-export','',''),(2087,'priv','zh-tw','demand-export','',''),(2088,'priv','de','demand-exportTemplate','',''),(2088,'priv','en','demand-exportTemplate','',''),(2088,'priv','fr','demand-exportTemplate','',''),(2088,'priv','zh-cn','demand-exportTemplate','',''),(2088,'priv','zh-tw','demand-exportTemplate','',''),(2089,'priv','de','demand-import','',''),(2089,'priv','en','demand-import','',''),(2089,'priv','fr','demand-import','',''),(2089,'priv','zh-cn','demand-import','',''),(2089,'priv','zh-tw','demand-import','',''),(2090,'priv','de','demand-showImport','',''),(2090,'priv','en','demand-showImport','',''),(2090,'priv','fr','demand-showImport','',''),(2090,'priv','zh-cn','demand-showImport','',''),(2090,'priv','zh-tw','demand-showImport','',''),(2091,'priv','de','demand-delete','',''),(2091,'priv','en','demand-delete','',''),(2091,'priv','fr','demand-delete','',''),(2091,'priv','zh-cn','demand-delete','',''),(2091,'priv','zh-tw','demand-delete','',''),(2092,'priv','de','demand-close','',''),(2092,'priv','en','demand-close','',''),(2092,'priv','fr','demand-close','',''),(2092,'priv','zh-cn','demand-close','',''),(2092,'priv','zh-tw','demand-close','',''),(2093,'priv','de','demand-activate','',''),(2093,'priv','en','demand-activate','',''),(2093,'priv','fr','demand-activate','',''),(2093,'priv','zh-cn','demand-activate','',''),(2093,'priv','zh-tw','demand-activate','',''),(2094,'priv','de','demand-distribute','',''),(2094,'priv','en','demand-distribute','',''),(2094,'priv','fr','demand-distribute','',''),(2094,'priv','zh-cn','demand-distribute','',''),(2094,'priv','zh-tw','demand-distribute','',''),(2095,'priv','de','roadmap-browse','',''),(2095,'priv','en','roadmap-browse','',''),(2095,'priv','fr','roadmap-browse','',''),(2095,'priv','zh-cn','roadmap-browse','',''),(2095,'priv','zh-tw','roadmap-browse','',''),(2096,'priv','de','roadmap-view','',''),(2096,'priv','en','roadmap-view','',''),(2096,'priv','fr','roadmap-view','',''),(2096,'priv','zh-cn','roadmap-view','',''),(2096,'priv','zh-tw','roadmap-view','',''),(2097,'priv','de','roadmap-linkUR','',''),(2097,'priv','en','roadmap-linkUR','',''),(2097,'priv','fr','roadmap-linkUR','',''),(2097,'priv','zh-cn','roadmap-linkUR','',''),(2097,'priv','zh-tw','roadmap-linkUR','',''),(2098,'priv','de','roadmap-create','',''),(2098,'priv','en','roadmap-create','',''),(2098,'priv','fr','roadmap-create','',''),(2098,'priv','zh-cn','roadmap-create','',''),(2098,'priv','zh-tw','roadmap-create','',''),(2099,'priv','de','roadmap-edit','',''),(2099,'priv','en','roadmap-edit','',''),(2099,'priv','fr','roadmap-edit','',''),(2099,'priv','zh-cn','roadmap-edit','',''),(2099,'priv','zh-tw','roadmap-edit','',''),(2100,'priv','de','roadmap-close','',''),(2100,'priv','en','roadmap-close','',''),(2100,'priv','fr','roadmap-close','',''),(2100,'priv','zh-cn','roadmap-close','',''),(2100,'priv','zh-tw','roadmap-close','',''),(2101,'priv','de','roadmap-delete','',''),(2101,'priv','en','roadmap-delete','',''),(2101,'priv','fr','roadmap-delete','',''),(2101,'priv','zh-cn','roadmap-delete','',''),(2101,'priv','zh-tw','roadmap-delete','',''),(2102,'priv','de','roadmap-activate','',''),(2102,'priv','en','roadmap-activate','',''),(2102,'priv','fr','roadmap-activate','',''),(2102,'priv','zh-cn','roadmap-activate','',''),(2102,'priv','zh-tw','roadmap-activate','',''),(2103,'priv','de','roadmap-unlinkUR','',''),(2103,'priv','en','roadmap-unlinkUR','',''),(2103,'priv','fr','roadmap-unlinkUR','',''),(2103,'priv','zh-cn','roadmap-unlinkUR','',''),(2103,'priv','zh-tw','roadmap-unlinkUR','',''),(2104,'priv','de','roadmap-batchUnlinkUR','',''),(2104,'priv','en','roadmap-batchUnlinkUR','',''),(2104,'priv','fr','roadmap-batchUnlinkUR','',''),(2104,'priv','zh-cn','roadmap-batchUnlinkUR','',''),(2104,'priv','zh-tw','roadmap-batchUnlinkUR','',''),(2105,'priv','de','my-story','',''),(2105,'priv','en','my-story','',''),(2105,'priv','fr','my-story','',''),(2105,'priv','zh-cn','my-story','',''),(2105,'priv','zh-tw','my-story','',''),(2106,'priv','de','my-task','',''),(2106,'priv','en','my-task','',''),(2106,'priv','fr','my-task','',''),(2106,'priv','zh-cn','my-task','',''),(2106,'priv','zh-tw','my-task','',''),(2107,'priv','de','traincourse-cloudImport','',''),(2107,'priv','en','traincourse-cloudImport','',''),(2107,'priv','fr','traincourse-cloudImport','',''),(2107,'priv','zh-cn','traincourse-cloudImport','',''),(2107,'priv','zh-tw','traincourse-cloudImport','',''),(2108,'priv','de','dataview-export','',''),(2108,'priv','en','dataview-export','',''),(2108,'priv','fr','dataview-export','',''),(2108,'priv','zh-cn','dataview-export','',''),(2108,'priv','zh-tw','dataview-export','',''),(2109,'priv','de','demand-export','',''),(2109,'priv','en','demand-export','',''),(2109,'priv','fr','demand-export','',''),(2109,'priv','zh-cn','demand-export','',''),(2109,'priv','zh-tw','demand-export','',''),(2110,'priv','de','demand-exportTemplate','',''),(2110,'priv','en','demand-exportTemplate','',''),(2110,'priv','fr','demand-exportTemplate','',''),(2110,'priv','zh-cn','demand-exportTemplate','',''),(2110,'priv','zh-tw','demand-exportTemplate','',''),(2111,'priv','de','demand-import','',''),(2111,'priv','en','demand-import','',''),(2111,'priv','fr','demand-import','',''),(2111,'priv','zh-cn','demand-import','',''),(2111,'priv','zh-tw','demand-import','',''),(2112,'priv','de','requirement-batchChangeRoadmap','',''),(2112,'priv','en','requirement-batchChangeRoadmap','',''),(2112,'priv','fr','requirement-batchChangeRoadmap','',''),(2112,'priv','zh-cn','requirement-batchChangeRoadmap','',''),(2112,'priv','zh-tw','requirement-batchChangeRoadmap','',''),(2113,'priv','de','charter-close','',''),(2113,'priv','en','charter-close','',''),(2113,'priv','fr','charter-close','',''),(2113,'priv','zh-cn','charter-close','',''),(2113,'priv','zh-tw','charter-close','',''),(2114,'priv','de','charter-activate','',''),(2114,'priv','en','charter-activate','',''),(2114,'priv','fr','charter-activate','',''),(2114,'priv','zh-cn','charter-activate','',''),(2114,'priv','zh-tw','charter-activate','',''),(2115, 'priv', 'de', 'requirement-relation', '', ''),(2115, 'priv', 'en', 'requirement-relation', '', ''),(2115, 'priv', 'fr', 'requirement-relation', '', ''),(2115, 'priv', 'zh-cn', 'requirement-relation', '', ''),(2115, 'priv', 'zh-tw', 'requirement-relation', '', ''); -REPLACE INTO `zt_privrelation` (`priv`, `type`, `relationPriv`) VALUES (2,'recommend',3),(3,'depend',2),(3,'depend',21),(3,'recommend',29),(4,'depend',2),(5,'depend',2),(6,'depend',2),(7,'depend',2),(8,'depend',2),(8,'depend',7),(9,'depend',2),(10,'depend',2),(11,'depend',2),(11,'depend',7),(12,'depend',2),(12,'depend',7),(13,'recommend',14),(14,'recommend',13),(15,'depend',2),(16,'recommend',630),(16,'recommend',631),(16,'recommend',632),(16,'recommend',633),(16,'recommend',635),(16,'recommend',641),(16,'recommend',642),(16,'recommend',643),(16,'recommend',644),(16,'recommend',645),(16,'recommend',646),(16,'recommend',647),(16,'recommend',650),(16,'recommend',651),(17,'depend',2),(18,'depend',2),(19,'depend',2),(21,'depend',2),(21,'recommend',3),(22,'depend',1153),(24,'depend',2),(24,'depend',21),(24,'depend',29),(24,'recommend',26),(25,'depend',2),(25,'depend',21),(25,'depend',24),(25,'depend',29),(26,'depend',2),(26,'depend',21),(26,'depend',29),(26,'recommend',24),(27,'depend',2),(27,'depend',21),(27,'depend',29),(27,'recommend',28),(28,'depend',2),(28,'depend',21),(28,'depend',29),(28,'recommend',24),(28,'recommend',27),(29,'depend',2),(29,'depend',21),(29,'recommend',3),(30,'depend',2),(30,'depend',21),(30,'depend',29),(31,'depend',2),(31,'depend',21),(32,'depend',2),(32,'depend',21),(32,'depend',29),(32,'recommend',33),(32,'recommend',37),(32,'recommend',38),(33,'depend',2),(33,'depend',21),(33,'depend',29),(33,'recommend',37),(33,'recommend',38),(34,'depend',2),(34,'depend',21),(34,'depend',29),(34,'recommend',33),(35,'depend',2),(35,'depend',21),(36,'depend',2),(36,'depend',21),(36,'depend',29),(37,'depend',2),(37,'depend',21),(37,'depend',29),(37,'recommend',38),(38,'depend',2),(38,'depend',21),(38,'depend',29),(38,'recommend',37),(39,'depend',2),(39,'depend',21),(39,'depend',29),(45,'depend',41),(45,'recommend',46),(45,'recommend',47),(45,'recommend',58),(46,'depend',41),(46,'recommend',45),(46,'recommend',47),(46,'recommend',48),(46,'recommend',49),(46,'recommend',50),(46,'recommend',58),(47,'depend',41),(47,'depend',43),(47,'recommend',45),(47,'recommend',46),(47,'recommend',49),(47,'recommend',50),(47,'recommend',51),(48,'depend',41),(48,'depend',43),(48,'recommend',45),(48,'recommend',46),(48,'recommend',47),(48,'recommend',49),(48,'recommend',50),(48,'recommend',51),(49,'depend',41),(49,'depend',43),(49,'recommend',45),(49,'recommend',46),(49,'recommend',47),(49,'recommend',50),(49,'recommend',51),(50,'depend',41),(50,'depend',43),(50,'recommend',45),(50,'recommend',46),(50,'recommend',47),(50,'recommend',49),(50,'recommend',51),(51,'depend',41),(51,'recommend',45),(53,'depend',41),(54,'depend',41),(54,'depend',53),(54,'recommend',55),(55,'depend',41),(55,'depend',53),(55,'recommend',54),(56,'depend',41),(56,'depend',53),(56,'recommend',55),(57,'depend',41),(57,'depend',61),(57,'recommend',62),(58,'depend',41),(58,'recommend',45),(58,'recommend',46),(59,'depend',41),(60,'depend',41),(61,'depend',41),(62,'depend',41),(62,'depend',61),(62,'recommend',57),(63,'recommend',67),(63,'recommend',75),(63,'recommend',78),(63,'recommend',79),(64,'recommend',91),(64,'recommend',107),(65,'depend',64),(65,'recommend',126),(65,'recommend',137),(66,'depend',78),(66,'recommend',68),(66,'recommend',76),(66,'recommend',77),(67,'depend',64),(67,'depend',75),(67,'depend',78),(67,'recommend',66),(67,'recommend',68),(67,'recommend',73),(67,'recommend',75),(67,'recommend',78),(67,'recommend',79),(67,'recommend',83),(67,'recommend',1039),(68,'depend',67),(68,'depend',78),(68,'recommend',66),(68,'recommend',69),(68,'recommend',76),(68,'recommend',77),(69,'depend',78),(69,'recommend',68),(70,'depend',67),(70,'recommend',66),(70,'recommend',68),(71,'depend',64),(71,'depend',75),(71,'depend',78),(71,'recommend',166),(72,'depend',64),(72,'recommend',64),(72,'recommend',65),(72,'recommend',91),(72,'recommend',126),(73,'depend',64),(73,'recommend',67),(73,'recommend',78),(73,'recommend',79),(74,'depend',64),(74,'recommend',179),(75,'recommend',71),(75,'recommend',73),(76,'depend',67),(76,'recommend',66),(76,'recommend',68),(77,'depend',78),(77,'recommend',66),(77,'recommend',68),(78,'recommend',63),(78,'recommend',66),(78,'recommend',67),(78,'recommend',68),(78,'recommend',73),(78,'recommend',75),(78,'recommend',77),(78,'recommend',79),(79,'recommend',63),(79,'recommend',67),(79,'recommend',73),(79,'recommend',75),(79,'recommend',78),(80,'depend',78),(80,'recommend',66),(80,'recommend',68),(80,'recommend',77),(81,'depend',64),(82,'depend',78),(83,'depend',64),(83,'recommend',67),(83,'recommend',84),(83,'recommend',85),(84,'depend',83),(84,'recommend',66),(85,'depend',83),(85,'recommend',66),(85,'recommend',84),(86,'recommend',87),(86,'recommend',88),(86,'recommend',92),(86,'recommend',94),(86,'recommend',96),(86,'recommend',97),(86,'recommend',101),(86,'recommend',103),(86,'recommend',108),(86,'recommend',112),(86,'recommend',113),(86,'recommend',114),(86,'recommend',120),(87,'depend',64),(87,'recommend',86),(88,'depend',91),(88,'recommend',86),(88,'recommend',92),(88,'recommend',94),(88,'recommend',96),(88,'recommend',97),(88,'recommend',101),(88,'recommend',103),(88,'recommend',108),(88,'recommend',112),(88,'recommend',113),(88,'recommend',114),(88,'recommend',115),(89,'depend',64),(90,'depend',91),(90,'recommend',86),(90,'recommend',88),(92,'depend',91),(92,'recommend',86),(92,'recommend',88),(92,'recommend',94),(92,'recommend',96),(92,'recommend',97),(92,'recommend',101),(92,'recommend',103),(92,'recommend',108),(92,'recommend',112),(92,'recommend',113),(92,'recommend',114),(93,'depend',91),(93,'recommend',95),(94,'depend',91),(94,'recommend',86),(94,'recommend',88),(94,'recommend',92),(94,'recommend',96),(94,'recommend',97),(94,'recommend',101),(94,'recommend',103),(94,'recommend',108),(94,'recommend',112),(94,'recommend',113),(94,'recommend',114),(95,'depend',64),(95,'recommend',93),(96,'depend',91),(96,'recommend',86),(96,'recommend',88),(96,'recommend',92),(96,'recommend',94),(96,'recommend',97),(96,'recommend',101),(96,'recommend',103),(96,'recommend',108),(96,'recommend',112),(96,'recommend',113),(96,'recommend',114),(97,'depend',91),(97,'recommend',86),(97,'recommend',88),(97,'recommend',92),(97,'recommend',94),(97,'recommend',96),(97,'recommend',101),(97,'recommend',103),(97,'recommend',108),(97,'recommend',112),(97,'recommend',113),(97,'recommend',114),(98,'depend',64),(98,'recommend',97),(99,'depend',64),(99,'recommend',88),(100,'depend',64),(100,'recommend',88),(101,'depend',64),(101,'recommend',86),(101,'recommend',88),(101,'recommend',92),(101,'recommend',94),(101,'recommend',96),(101,'recommend',97),(101,'recommend',103),(101,'recommend',108),(101,'recommend',112),(101,'recommend',113),(101,'recommend',114),(102,'depend',64),(102,'recommend',88),(103,'depend',91),(103,'recommend',86),(103,'recommend',88),(103,'recommend',92),(103,'recommend',94),(103,'recommend',96),(103,'recommend',97),(103,'recommend',101),(103,'recommend',108),(103,'recommend',112),(103,'recommend',113),(103,'recommend',114),(104,'depend',64),(105,'depend',64),(106,'depend',64),(107,'depend',64),(108,'depend',91),(108,'recommend',86),(108,'recommend',88),(108,'recommend',92),(108,'recommend',94),(108,'recommend',96),(108,'recommend',97),(108,'recommend',101),(108,'recommend',103),(108,'recommend',112),(108,'recommend',113),(108,'recommend',114),(109,'depend',64),(109,'recommend',88),(110,'depend',64),(110,'recommend',88),(111,'depend',218),(111,'recommend',238),(112,'depend',91),(112,'recommend',86),(112,'recommend',88),(112,'recommend',92),(112,'recommend',94),(112,'recommend',96),(112,'recommend',97),(112,'recommend',101),(112,'recommend',103),(112,'recommend',108),(112,'recommend',113),(112,'recommend',114),(113,'depend',91),(113,'recommend',86),(113,'recommend',88),(113,'recommend',92),(113,'recommend',94),(113,'recommend',96),(113,'recommend',97),(113,'recommend',101),(113,'recommend',103),(113,'recommend',108),(113,'recommend',112),(113,'recommend',114),(114,'depend',91),(114,'recommend',86),(114,'recommend',88),(114,'recommend',92),(114,'recommend',94),(114,'recommend',96),(114,'recommend',97),(114,'recommend',101),(114,'recommend',103),(114,'recommend',108),(114,'recommend',112),(114,'recommend',113),(115,'depend',64),(115,'recommend',88),(116,'depend',64),(116,'depend',117),(117,'depend',64),(118,'depend',91),(118,'recommend',119),(119,'depend',64),(119,'recommend',118),(120,'depend',91),(121,'recommend',122),(121,'recommend',123),(121,'recommend',127),(121,'recommend',129),(121,'recommend',131),(121,'recommend',132),(121,'recommend',134),(121,'recommend',136),(121,'recommend',138),(121,'recommend',141),(122,'depend',65),(122,'recommend',121),(123,'depend',126),(123,'recommend',121),(123,'recommend',127),(123,'recommend',129),(123,'recommend',131),(123,'recommend',132),(123,'recommend',134),(123,'recommend',136),(123,'recommend',138),(123,'recommend',141),(123,'recommend',142),(124,'depend',65),(125,'depend',126),(125,'recommend',121),(125,'recommend',123),(127,'depend',126),(127,'recommend',121),(127,'recommend',123),(127,'recommend',129),(127,'recommend',131),(127,'recommend',132),(127,'recommend',134),(127,'recommend',136),(127,'recommend',138),(127,'recommend',141),(128,'depend',126),(128,'recommend',130),(129,'depend',126),(129,'recommend',121),(129,'recommend',123),(129,'recommend',127),(129,'recommend',131),(129,'recommend',132),(129,'recommend',134),(129,'recommend',136),(129,'recommend',138),(129,'recommend',141),(130,'depend',65),(130,'recommend',128),(131,'depend',126),(131,'recommend',121),(131,'recommend',123),(131,'recommend',127),(131,'recommend',129),(131,'recommend',132),(131,'recommend',134),(131,'recommend',136),(131,'recommend',138),(131,'recommend',141),(132,'depend',126),(132,'recommend',121),(132,'recommend',123),(132,'recommend',127),(132,'recommend',129),(132,'recommend',131),(132,'recommend',133),(132,'recommend',134),(132,'recommend',136),(132,'recommend',138),(132,'recommend',141),(133,'depend',65),(133,'recommend',132),(134,'depend',126),(134,'recommend',121),(134,'recommend',123),(134,'recommend',127),(134,'recommend',129),(134,'recommend',131),(134,'recommend',132),(134,'recommend',135),(134,'recommend',136),(134,'recommend',138),(134,'recommend',141),(135,'depend',65),(135,'recommend',134),(136,'depend',126),(136,'recommend',121),(136,'recommend',123),(136,'recommend',127),(136,'recommend',129),(136,'recommend',131),(136,'recommend',132),(136,'recommend',134),(136,'recommend',138),(136,'recommend',141),(137,'depend',65),(138,'depend',126),(138,'recommend',121),(138,'recommend',123),(138,'recommend',127),(138,'recommend',129),(138,'recommend',131),(138,'recommend',132),(138,'recommend',134),(138,'recommend',136),(138,'recommend',140),(138,'recommend',141),(139,'depend',65),(139,'recommend',123),(140,'depend',65),(140,'recommend',123),(141,'depend',126),(141,'recommend',121),(141,'recommend',123),(141,'recommend',127),(141,'recommend',129),(141,'recommend',131),(141,'recommend',132),(141,'recommend',134),(141,'recommend',136),(141,'recommend',138),(142,'depend',65),(142,'recommend',123),(143,'depend',65),(143,'depend',144),(144,'depend',65),(145,'depend',64),(145,'recommend',146),(145,'recommend',147),(145,'recommend',149),(146,'depend',145),(146,'recommend',147),(146,'recommend',150),(146,'recommend',153),(146,'recommend',157),(146,'recommend',158),(146,'recommend',159),(146,'recommend',160),(147,'depend',149),(147,'recommend',146),(147,'recommend',150),(147,'recommend',151),(147,'recommend',153),(147,'recommend',154),(147,'recommend',156),(147,'recommend',157),(147,'recommend',158),(147,'recommend',159),(147,'recommend',160),(148,'depend',149),(148,'recommend',146),(148,'recommend',147),(149,'depend',145),(149,'recommend',146),(149,'recommend',147),(150,'depend',149),(150,'recommend',146),(150,'recommend',147),(150,'recommend',151),(150,'recommend',153),(150,'recommend',154),(150,'recommend',157),(150,'recommend',158),(150,'recommend',159),(150,'recommend',160),(151,'depend',149),(151,'recommend',146),(151,'recommend',147),(151,'recommend',150),(151,'recommend',152),(151,'recommend',153),(151,'recommend',154),(151,'recommend',157),(151,'recommend',158),(151,'recommend',159),(151,'recommend',160),(152,'depend',145),(152,'recommend',151),(153,'depend',149),(153,'recommend',146),(153,'recommend',147),(153,'recommend',150),(153,'recommend',151),(153,'recommend',154),(153,'recommend',157),(153,'recommend',158),(153,'recommend',159),(153,'recommend',160),(154,'depend',149),(154,'recommend',146),(154,'recommend',147),(154,'recommend',150),(154,'recommend',151),(154,'recommend',153),(154,'recommend',155),(154,'recommend',157),(154,'recommend',158),(154,'recommend',159),(154,'recommend',160),(155,'depend',149),(155,'recommend',154),(156,'depend',145),(156,'recommend',147),(157,'depend',149),(157,'recommend',146),(157,'recommend',147),(157,'recommend',150),(157,'recommend',151),(157,'recommend',153),(157,'recommend',154),(157,'recommend',158),(157,'recommend',159),(157,'recommend',160),(158,'depend',149),(158,'recommend',146),(158,'recommend',147),(158,'recommend',150),(158,'recommend',151),(158,'recommend',153),(158,'recommend',154),(158,'recommend',157),(158,'recommend',159),(158,'recommend',160),(159,'depend',149),(159,'recommend',146),(159,'recommend',147),(159,'recommend',150),(159,'recommend',151),(159,'recommend',153),(159,'recommend',154),(159,'recommend',157),(159,'recommend',158),(159,'recommend',160),(160,'depend',149),(160,'recommend',146),(160,'recommend',147),(160,'recommend',150),(160,'recommend',151),(160,'recommend',153),(160,'recommend',154),(160,'recommend',157),(160,'recommend',158),(160,'recommend',159),(161,'depend',145),(161,'recommend',147),(162,'depend',64),(162,'recommend',166),(163,'depend',162),(163,'recommend',164),(163,'recommend',168),(163,'recommend',169),(163,'recommend',171),(163,'recommend',172),(163,'recommend',174),(163,'recommend',175),(164,'depend',166),(164,'recommend',163),(164,'recommend',168),(164,'recommend',169),(164,'recommend',171),(164,'recommend',172),(164,'recommend',174),(164,'recommend',175),(165,'depend',166),(165,'recommend',163),(165,'recommend',164),(166,'depend',162),(166,'recommend',71),(167,'depend',166),(168,'depend',166),(168,'recommend',163),(168,'recommend',164),(168,'recommend',169),(168,'recommend',171),(168,'recommend',172),(168,'recommend',174),(168,'recommend',175),(169,'depend',166),(169,'recommend',163),(169,'recommend',164),(169,'recommend',168),(169,'recommend',170),(169,'recommend',171),(169,'recommend',172),(169,'recommend',174),(169,'recommend',175),(170,'depend',166),(170,'recommend',169),(171,'depend',166),(171,'recommend',163),(171,'recommend',164),(171,'recommend',168),(171,'recommend',169),(171,'recommend',172),(171,'recommend',174),(171,'recommend',175),(172,'depend',166),(172,'recommend',163),(172,'recommend',164),(172,'recommend',168),(172,'recommend',169),(172,'recommend',171),(172,'recommend',173),(172,'recommend',174),(172,'recommend',175),(173,'depend',166),(173,'recommend',172),(174,'depend',166),(174,'recommend',163),(174,'recommend',164),(174,'recommend',168),(174,'recommend',169),(174,'recommend',171),(174,'recommend',172),(174,'recommend',175),(175,'depend',166),(175,'recommend',163),(175,'recommend',164),(175,'recommend',168),(175,'recommend',169),(175,'recommend',171),(175,'recommend',172),(176,'recommend',177),(176,'recommend',178),(177,'depend',176),(177,'recommend',176),(177,'recommend',178),(177,'recommend',179),(177,'recommend',180),(177,'recommend',193),(177,'recommend',195),(177,'recommend',200),(178,'depend',176),(178,'recommend',177),(178,'recommend',195),(178,'recommend',200),(179,'depend',177),(179,'recommend',180),(179,'recommend',182),(179,'recommend',189),(179,'recommend',190),(179,'recommend',191),(179,'recommend',192),(179,'recommend',193),(179,'recommend',196),(179,'recommend',199),(179,'recommend',209),(180,'depend',177),(180,'recommend',179),(180,'recommend',181),(180,'recommend',189),(180,'recommend',190),(180,'recommend',191),(180,'recommend',192),(180,'recommend',193),(180,'recommend',199),(181,'depend',177),(181,'recommend',180),(182,'depend',176),(182,'recommend',179),(182,'recommend',180),(182,'recommend',183),(183,'depend',182),(183,'recommend',184),(183,'recommend',186),(183,'recommend',187),(183,'recommend',188),(184,'depend',182),(184,'recommend',183),(184,'recommend',186),(184,'recommend',187),(184,'recommend',188),(185,'depend',209),(185,'recommend',210),(186,'depend',182),(186,'recommend',183),(186,'recommend',184),(186,'recommend',187),(186,'recommend',188),(187,'depend',182),(187,'recommend',183),(187,'recommend',184),(187,'recommend',186),(187,'recommend',188),(188,'depend',182),(188,'recommend',183),(188,'recommend',184),(188,'recommend',186),(188,'recommend',187),(189,'depend',177),(189,'recommend',179),(189,'recommend',180),(189,'recommend',181),(189,'recommend',190),(189,'recommend',191),(189,'recommend',192),(190,'depend',177),(190,'recommend',179),(190,'recommend',180),(190,'recommend',181),(190,'recommend',189),(190,'recommend',191),(190,'recommend',192),(191,'depend',177),(191,'recommend',179),(191,'recommend',180),(191,'recommend',181),(191,'recommend',189),(191,'recommend',190),(191,'recommend',192),(192,'depend',177),(192,'recommend',179),(192,'recommend',180),(192,'recommend',181),(192,'recommend',189),(192,'recommend',190),(192,'recommend',191),(193,'depend',177),(193,'recommend',179),(193,'recommend',180),(194,'depend',177),(194,'recommend',179),(194,'recommend',180),(195,'depend',176),(195,'recommend',179),(195,'recommend',180),(195,'recommend',182),(195,'recommend',199),(195,'recommend',209),(195,'recommend',1022),(196,'depend',176),(196,'recommend',195),(196,'recommend',197),(196,'recommend',198),(197,'depend',196),(197,'recommend',198),(198,'depend',196),(198,'recommend',197),(199,'depend',177),(199,'recommend',179),(199,'recommend',180),(200,'depend',176),(200,'recommend',177),(200,'recommend',195),(201,'depend',176),(203,'depend',176),(203,'recommend',204),(203,'recommend',205),(203,'recommend',206),(204,'depend',176),(204,'recommend',205),(204,'recommend',206),(205,'depend',176),(205,'recommend',204),(205,'recommend',206),(206,'depend',176),(206,'recommend',205),(207,'depend',176),(207,'recommend',228),(208,'depend',177),(209,'recommend',185),(209,'recommend',210),(210,'depend',209),(210,'recommend',185),(212,'depend',177),(212,'recommend',41),(214,'depend',176),(214,'recommend',215),(214,'recommend',216),(215,'depend',214),(215,'recommend',216),(216,'depend',214),(216,'recommend',215),(217,'depend',214),(218,'depend',176),(218,'recommend',220),(219,'depend',176),(219,'recommend',218),(219,'recommend',220),(219,'recommend',390),(220,'depend',218),(221,'depend',218),(221,'recommend',111),(221,'recommend',222),(221,'recommend',223),(221,'recommend',225),(222,'depend',218),(222,'recommend',111),(222,'recommend',221),(222,'recommend',223),(222,'recommend',225),(223,'depend',218),(223,'recommend',111),(223,'recommend',221),(223,'recommend',222),(223,'recommend',224),(223,'recommend',225),(224,'depend',218),(224,'recommend',223),(225,'depend',218),(225,'recommend',111),(225,'recommend',221),(225,'recommend',222),(225,'recommend',223),(225,'recommend',224),(225,'recommend',1492),(225,'recommend',1497),(226,'recommend',227),(226,'recommend',256),(226,'recommend',269),(226,'recommend',280),(227,'recommend',226),(227,'recommend',256),(227,'recommend',269),(227,'recommend',280),(228,'depend',269),(228,'recommend',229),(228,'recommend',232),(228,'recommend',233),(228,'recommend',234),(228,'recommend',235),(228,'recommend',236),(228,'recommend',257),(229,'depend',269),(229,'recommend',228),(229,'recommend',230),(229,'recommend',232),(229,'recommend',233),(229,'recommend',234),(229,'recommend',235),(229,'recommend',236),(229,'recommend',257),(230,'depend',269),(230,'recommend',229),(231,'depend',269),(231,'recommend',229),(232,'depend',269),(232,'recommend',228),(232,'recommend',229),(232,'recommend',233),(232,'recommend',234),(232,'recommend',235),(232,'recommend',236),(233,'depend',269),(233,'recommend',228),(233,'recommend',229),(233,'recommend',232),(233,'recommend',234),(233,'recommend',235),(233,'recommend',236),(234,'depend',269),(234,'recommend',228),(234,'recommend',229),(234,'recommend',232),(234,'recommend',233),(234,'recommend',235),(234,'recommend',236),(235,'depend',269),(235,'recommend',228),(235,'recommend',229),(235,'recommend',232),(235,'recommend',233),(235,'recommend',234),(235,'recommend',236),(236,'depend',269),(236,'recommend',228),(236,'recommend',229),(236,'recommend',232),(236,'recommend',233),(236,'recommend',234),(236,'recommend',235),(237,'depend',269),(237,'recommend',228),(237,'recommend',229),(238,'recommend',343),(238,'recommend',358),(238,'recommend',364),(239,'recommend',266),(239,'recommend',282),(239,'recommend',285),(239,'recommend',290),(240,'depend',238),(240,'recommend',343),(240,'recommend',346),(241,'depend',238),(241,'recommend',343),(241,'recommend',346),(242,'depend',238),(242,'recommend',343),(242,'recommend',346),(243,'recommend',260),(243,'recommend',261),(243,'recommend',271),(243,'recommend',272),(243,'recommend',276),(243,'recommend',281),(244,'recommend',370),(244,'recommend',371),(244,'recommend',373),(244,'recommend',374),(244,'recommend',375),(244,'recommend',377),(244,'recommend',378),(245,'recommend',247),(245,'recommend',248),(246,'recommend',245),(246,'recommend',247),(246,'recommend',248),(247,'recommend',245),(247,'recommend',248),(248,'recommend',245),(248,'recommend',247),(249,'recommend',250),(249,'recommend',253),(250,'depend',249),(250,'recommend',253),(251,'recommend',252),(252,'depend',251),(253,'depend',249),(253,'recommend',250),(255,'recommend',258),(255,'recommend',259),(256,'recommend',226),(256,'recommend',227),(256,'recommend',269),(256,'recommend',280),(257,'depend',269),(257,'recommend',228),(257,'recommend',229),(258,'depend',255),(258,'recommend',259),(259,'depend',255),(259,'recommend',258),(260,'depend',243),(260,'recommend',261),(260,'recommend',271),(260,'recommend',272),(260,'recommend',276),(260,'recommend',281),(261,'depend',243),(261,'recommend',260),(261,'recommend',271),(261,'recommend',272),(261,'recommend',276),(261,'recommend',281),(262,'depend',243),(262,'recommend',261),(263,'depend',269),(263,'recommend',226),(263,'recommend',227),(263,'recommend',256),(263,'recommend',269),(263,'recommend',280),(264,'depend',277),(264,'recommend',277),(264,'recommend',279),(265,'depend',277),(266,'recommend',239),(266,'recommend',267),(266,'recommend',268),(266,'recommend',282),(266,'recommend',285),(266,'recommend',290),(267,'depend',266),(267,'recommend',268),(268,'depend',266),(268,'recommend',267),(269,'recommend',226),(269,'recommend',227),(269,'recommend',228),(269,'recommend',229),(269,'recommend',256),(269,'recommend',263),(269,'recommend',280),(270,'depend',269),(271,'depend',243),(271,'recommend',260),(271,'recommend',261),(271,'recommend',272),(271,'recommend',276),(271,'recommend',281),(272,'depend',243),(272,'recommend',260),(272,'recommend',261),(272,'recommend',271),(272,'recommend',276),(272,'recommend',281),(273,'recommend',274),(273,'recommend',275),(274,'depend',273),(274,'recommend',275),(275,'depend',273),(275,'recommend',274),(276,'depend',243),(276,'recommend',260),(276,'recommend',261),(276,'recommend',271),(276,'recommend',272),(276,'recommend',281),(277,'recommend',279),(278,'depend',277),(278,'recommend',277),(278,'recommend',279),(279,'depend',277),(280,'recommend',226),(280,'recommend',227),(280,'recommend',256),(280,'recommend',269),(281,'depend',243),(281,'recommend',260),(281,'recommend',261),(281,'recommend',271),(281,'recommend',272),(281,'recommend',276),(282,'recommend',239),(282,'recommend',266),(282,'recommend',285),(282,'recommend',290),(285,'recommend',239),(285,'recommend',266),(285,'recommend',282),(285,'recommend',286),(285,'recommend',290),(286,'depend',285),(287,'depend',289),(287,'depend',290),(288,'depend',289),(288,'depend',290),(289,'depend',290),(289,'recommend',287),(289,'recommend',288),(290,'recommend',239),(290,'recommend',266),(290,'recommend',282),(290,'recommend',285),(290,'recommend',291),(290,'recommend',292),(291,'depend',290),(292,'depend',290),(293,'recommend',294),(294,'depend',293),(294,'recommend',295),(294,'recommend',296),(294,'recommend',298),(294,'recommend',328),(295,'depend',293),(295,'recommend',294),(295,'recommend',296),(295,'recommend',298),(295,'recommend',328),(296,'depend',293),(296,'recommend',294),(296,'recommend',295),(296,'recommend',328),(297,'depend',293),(298,'depend',293),(298,'recommend',294),(298,'recommend',295),(299,'depend',301),(299,'recommend',300),(299,'recommend',302),(299,'recommend',329),(299,'recommend',330),(300,'depend',301),(300,'recommend',299),(300,'recommend',302),(300,'recommend',329),(300,'recommend',330),(301,'recommend',299),(301,'recommend',300),(301,'recommend',302),(301,'recommend',329),(301,'recommend',330),(302,'depend',301),(302,'recommend',299),(302,'recommend',300),(302,'recommend',329),(302,'recommend',330),(303,'depend',301),(303,'recommend',299),(303,'recommend',300),(304,'depend',301),(304,'recommend',305),(304,'recommend',306),(304,'recommend',308),(305,'depend',301),(305,'recommend',304),(305,'recommend',306),(305,'recommend',308),(306,'depend',301),(306,'recommend',304),(306,'recommend',305),(306,'recommend',308),(307,'depend',301),(307,'recommend',309),(307,'recommend',310),(307,'recommend',311),(307,'recommend',331),(307,'recommend',332),(308,'depend',301),(308,'recommend',304),(308,'recommend',305),(308,'recommend',306),(309,'depend',301),(309,'recommend',307),(309,'recommend',310),(309,'recommend',311),(309,'recommend',331),(309,'recommend',332),(310,'depend',301),(310,'recommend',307),(310,'recommend',309),(310,'recommend',311),(310,'recommend',331),(310,'recommend',332),(311,'depend',301),(311,'recommend',307),(311,'recommend',309),(311,'recommend',310),(311,'recommend',331),(311,'recommend',332),(312,'depend',301),(312,'recommend',313),(312,'recommend',314),(312,'recommend',315),(312,'recommend',316),(312,'recommend',326),(312,'recommend',333),(312,'recommend',334),(312,'recommend',335),(313,'depend',301),(313,'recommend',312),(313,'recommend',314),(313,'recommend',315),(313,'recommend',316),(313,'recommend',326),(313,'recommend',333),(313,'recommend',334),(313,'recommend',335),(314,'depend',301),(314,'recommend',312),(314,'recommend',313),(314,'recommend',315),(314,'recommend',316),(314,'recommend',326),(314,'recommend',333),(314,'recommend',334),(314,'recommend',335),(315,'depend',301),(315,'recommend',312),(315,'recommend',313),(315,'recommend',314),(315,'recommend',316),(315,'recommend',326),(315,'recommend',333),(315,'recommend',334),(315,'recommend',335),(316,'depend',301),(316,'recommend',312),(316,'recommend',313),(316,'recommend',314),(316,'recommend',315),(316,'recommend',326),(316,'recommend',333),(316,'recommend',334),(316,'recommend',335),(317,'depend',301),(317,'recommend',318),(317,'recommend',319),(317,'recommend',320),(317,'recommend',321),(317,'recommend',323),(317,'recommend',324),(317,'recommend',327),(317,'recommend',336),(317,'recommend',337),(317,'recommend',338),(318,'depend',301),(318,'recommend',317),(318,'recommend',319),(318,'recommend',320),(318,'recommend',321),(318,'recommend',323),(318,'recommend',324),(318,'recommend',336),(318,'recommend',337),(318,'recommend',338),(319,'depend',301),(319,'recommend',317),(319,'recommend',318),(319,'recommend',320),(319,'recommend',321),(319,'recommend',323),(319,'recommend',324),(319,'recommend',336),(319,'recommend',337),(319,'recommend',338),(320,'depend',301),(320,'recommend',317),(320,'recommend',318),(320,'recommend',319),(320,'recommend',321),(320,'recommend',323),(320,'recommend',324),(320,'recommend',336),(320,'recommend',337),(320,'recommend',338),(321,'depend',301),(321,'recommend',317),(321,'recommend',318),(321,'recommend',319),(321,'recommend',320),(321,'recommend',323),(321,'recommend',324),(321,'recommend',336),(321,'recommend',337),(321,'recommend',338),(322,'depend',301),(322,'recommend',317),(322,'recommend',318),(322,'recommend',319),(322,'recommend',320),(322,'recommend',321),(322,'recommend',323),(322,'recommend',324),(322,'recommend',336),(322,'recommend',337),(322,'recommend',338),(323,'depend',301),(323,'recommend',317),(323,'recommend',318),(323,'recommend',319),(323,'recommend',320),(323,'recommend',321),(323,'recommend',324),(323,'recommend',336),(323,'recommend',337),(323,'recommend',338),(324,'depend',301),(324,'recommend',317),(324,'recommend',318),(324,'recommend',319),(324,'recommend',320),(324,'recommend',321),(324,'recommend',323),(324,'recommend',336),(324,'recommend',337),(324,'recommend',338),(325,'recommend',307),(325,'recommend',309),(325,'recommend',310),(325,'recommend',311),(325,'recommend',331),(325,'recommend',332),(326,'depend',301),(326,'recommend',312),(326,'recommend',313),(326,'recommend',314),(326,'recommend',315),(326,'recommend',316),(326,'recommend',333),(326,'recommend',334),(326,'recommend',335),(327,'depend',301),(327,'recommend',317),(328,'depend',293),(328,'recommend',294),(328,'recommend',295),(328,'recommend',296),(329,'depend',301),(329,'recommend',299),(329,'recommend',300),(329,'recommend',302),(329,'recommend',330),(330,'depend',301),(330,'recommend',299),(330,'recommend',300),(330,'recommend',302),(330,'recommend',329),(331,'depend',301),(331,'recommend',307),(331,'recommend',309),(331,'recommend',310),(331,'recommend',311),(331,'recommend',332),(332,'depend',301),(332,'recommend',307),(332,'recommend',309),(332,'recommend',310),(332,'recommend',311),(332,'recommend',331),(333,'depend',301),(333,'recommend',312),(333,'recommend',313),(333,'recommend',314),(333,'recommend',315),(333,'recommend',316),(333,'recommend',326),(333,'recommend',334),(333,'recommend',335),(334,'depend',301),(334,'recommend',312),(334,'recommend',313),(334,'recommend',314),(334,'recommend',315),(334,'recommend',316),(334,'recommend',326),(334,'recommend',333),(334,'recommend',335),(335,'depend',301),(335,'recommend',312),(335,'recommend',313),(335,'recommend',314),(335,'recommend',315),(335,'recommend',316),(335,'recommend',326),(335,'recommend',333),(335,'recommend',334),(336,'depend',301),(336,'recommend',317),(336,'recommend',318),(336,'recommend',319),(336,'recommend',320),(336,'recommend',321),(336,'recommend',323),(336,'recommend',324),(336,'recommend',337),(336,'recommend',338),(337,'depend',301),(337,'recommend',317),(337,'recommend',318),(337,'recommend',319),(337,'recommend',320),(337,'recommend',321),(337,'recommend',323),(337,'recommend',324),(337,'recommend',336),(337,'recommend',338),(338,'depend',301),(338,'recommend',317),(338,'recommend',318),(338,'recommend',319),(338,'recommend',320),(338,'recommend',321),(338,'recommend',323),(338,'recommend',324),(338,'recommend',336),(338,'recommend',337),(339,'depend',341),(339,'recommend',340),(340,'depend',341),(340,'recommend',339),(341,'depend',176),(341,'recommend',342),(342,'depend',341),(343,'depend',238),(343,'recommend',241),(343,'recommend',242),(343,'recommend',344),(343,'recommend',346),(343,'recommend',347),(343,'recommend',349),(343,'recommend',350),(343,'recommend',351),(343,'recommend',352),(343,'recommend',353),(343,'recommend',354),(343,'recommend',356),(344,'depend',238),(344,'recommend',343),(345,'depend',238),(345,'recommend',346),(346,'depend',238),(346,'recommend',343),(346,'recommend',345),(346,'recommend',347),(346,'recommend',349),(346,'recommend',350),(346,'recommend',351),(346,'recommend',352),(346,'recommend',353),(346,'recommend',354),(346,'recommend',356),(346,'recommend',360),(346,'recommend',365),(346,'recommend',369),(347,'depend',238),(347,'recommend',343),(347,'recommend',346),(347,'recommend',348),(347,'recommend',349),(347,'recommend',350),(347,'recommend',351),(347,'recommend',352),(347,'recommend',353),(347,'recommend',354),(347,'recommend',356),(348,'depend',238),(348,'recommend',347),(349,'depend',238),(349,'recommend',343),(349,'recommend',346),(349,'recommend',347),(349,'recommend',350),(349,'recommend',351),(349,'recommend',352),(349,'recommend',353),(349,'recommend',354),(349,'recommend',356),(350,'depend',238),(350,'recommend',343),(350,'recommend',346),(350,'recommend',347),(350,'recommend',349),(350,'recommend',351),(350,'recommend',352),(350,'recommend',353),(350,'recommend',354),(350,'recommend',356),(351,'depend',238),(351,'recommend',343),(351,'recommend',346),(351,'recommend',347),(351,'recommend',349),(351,'recommend',350),(351,'recommend',352),(351,'recommend',353),(351,'recommend',354),(351,'recommend',356),(352,'depend',238),(352,'recommend',343),(352,'recommend',346),(352,'recommend',347),(352,'recommend',349),(352,'recommend',350),(352,'recommend',351),(352,'recommend',353),(352,'recommend',354),(352,'recommend',356),(353,'depend',238),(353,'recommend',343),(353,'recommend',346),(353,'recommend',347),(353,'recommend',349),(353,'recommend',350),(353,'recommend',351),(353,'recommend',352),(353,'recommend',354),(353,'recommend',356),(353,'recommend',366),(354,'depend',238),(354,'recommend',343),(354,'recommend',346),(354,'recommend',347),(354,'recommend',349),(354,'recommend',350),(354,'recommend',351),(354,'recommend',352),(354,'recommend',353),(354,'recommend',355),(354,'recommend',356),(355,'depend',238),(355,'recommend',354),(355,'recommend',362),(355,'recommend',363),(356,'depend',238),(356,'recommend',343),(356,'recommend',346),(356,'recommend',347),(356,'recommend',349),(356,'recommend',350),(356,'recommend',351),(356,'recommend',352),(356,'recommend',353),(356,'recommend',354),(357,'depend',238),(357,'recommend',343),(357,'recommend',346),(358,'depend',238),(358,'recommend',343),(358,'recommend',346),(358,'recommend',347),(358,'recommend',349),(358,'recommend',350),(358,'recommend',351),(358,'recommend',352),(358,'recommend',353),(358,'recommend',354),(358,'recommend',356),(359,'depend',238),(360,'depend',238),(360,'recommend',346),(361,'depend',238),(361,'recommend',362),(361,'recommend',363),(362,'depend',238),(362,'depend',361),(362,'recommend',363),(363,'depend',238),(363,'depend',361),(363,'recommend',362),(364,'depend',238),(365,'depend',238),(365,'recommend',346),(366,'depend',238),(366,'recommend',353),(367,'depend',238),(367,'depend',368),(368,'depend',238),(368,'recommend',367),(369,'depend',238),(369,'recommend',346),(370,'depend',244),(370,'recommend',371),(370,'recommend',374),(370,'recommend',375),(370,'recommend',377),(370,'recommend',378),(371,'depend',244),(371,'recommend',370),(371,'recommend',374),(371,'recommend',375),(371,'recommend',377),(371,'recommend',378),(372,'depend',244),(372,'recommend',370),(372,'recommend',371),(373,'depend',244),(373,'recommend',370),(373,'recommend',371),(373,'recommend',374),(373,'recommend',375),(373,'recommend',377),(373,'recommend',378),(374,'depend',244),(374,'recommend',370),(374,'recommend',371),(374,'recommend',375),(374,'recommend',377),(374,'recommend',378),(375,'depend',244),(375,'recommend',370),(375,'recommend',371),(375,'recommend',374),(375,'recommend',376),(375,'recommend',377),(375,'recommend',378),(376,'depend',244),(376,'recommend',375),(377,'depend',244),(377,'recommend',370),(377,'recommend',371),(377,'recommend',374),(377,'recommend',375),(377,'recommend',378),(378,'depend',244),(378,'recommend',370),(378,'recommend',371),(378,'recommend',374),(378,'recommend',375),(378,'recommend',377),(378,'recommend',379),(379,'depend',244),(379,'recommend',378),(380,'depend',176),(380,'recommend',381),(381,'depend',380),(382,'depend',380),(382,'recommend',383),(382,'recommend',384),(382,'recommend',385),(382,'recommend',387),(382,'recommend',389),(382,'recommend',391),(383,'depend',380),(383,'recommend',382),(384,'depend',380),(384,'recommend',382),(384,'recommend',385),(384,'recommend',387),(384,'recommend',389),(384,'recommend',390),(384,'recommend',391),(385,'depend',380),(385,'recommend',382),(385,'recommend',384),(385,'recommend',387),(385,'recommend',389),(385,'recommend',390),(385,'recommend',391),(386,'depend',380),(386,'recommend',382),(386,'recommend',384),(386,'recommend',385),(386,'recommend',387),(386,'recommend',389),(386,'recommend',391),(387,'depend',380),(387,'recommend',382),(387,'recommend',384),(387,'recommend',385),(387,'recommend',388),(387,'recommend',389),(387,'recommend',390),(387,'recommend',391),(388,'depend',380),(388,'recommend',387),(388,'recommend',390),(389,'depend',380),(389,'recommend',382),(389,'recommend',384),(389,'recommend',385),(389,'recommend',387),(389,'recommend',388),(389,'recommend',390),(389,'recommend',391),(390,'depend',388),(390,'recommend',387),(390,'recommend',388),(390,'recommend',389),(391,'depend',380),(395,'depend',394),(395,'recommend',401),(395,'recommend',411),(396,'depend',401),(396,'recommend',397),(396,'recommend',399),(396,'recommend',402),(396,'recommend',403),(396,'recommend',405),(396,'recommend',409),(396,'recommend',410),(396,'recommend',413),(396,'recommend',415),(397,'recommend',396),(398,'recommend',402),(399,'depend',401),(399,'recommend',396),(399,'recommend',400),(399,'recommend',402),(399,'recommend',403),(399,'recommend',405),(399,'recommend',409),(399,'recommend',410),(399,'recommend',413),(399,'recommend',415),(400,'recommend',399),(402,'depend',401),(402,'recommend',396),(402,'recommend',398),(402,'recommend',399),(402,'recommend',403),(402,'recommend',405),(402,'recommend',409),(402,'recommend',410),(402,'recommend',413),(402,'recommend',415),(403,'depend',401),(403,'recommend',396),(403,'recommend',399),(403,'recommend',402),(403,'recommend',404),(403,'recommend',405),(403,'recommend',409),(403,'recommend',410),(403,'recommend',413),(403,'recommend',415),(404,'recommend',403),(405,'depend',401),(405,'recommend',396),(405,'recommend',399),(405,'recommend',402),(405,'recommend',403),(405,'recommend',406),(405,'recommend',409),(405,'recommend',410),(405,'recommend',413),(405,'recommend',415),(406,'recommend',405),(407,'recommend',410),(408,'recommend',409),(409,'depend',401),(409,'recommend',396),(409,'recommend',399),(409,'recommend',402),(409,'recommend',403),(409,'recommend',405),(409,'recommend',408),(409,'recommend',410),(409,'recommend',413),(409,'recommend',415),(410,'depend',401),(410,'recommend',396),(410,'recommend',399),(410,'recommend',402),(410,'recommend',403),(410,'recommend',405),(410,'recommend',407),(410,'recommend',409),(410,'recommend',413),(410,'recommend',415),(413,'depend',401),(413,'recommend',396),(413,'recommend',399),(413,'recommend',402),(413,'recommend',403),(413,'recommend',405),(413,'recommend',409),(413,'recommend',410),(413,'recommend',415),(414,'depend',401),(415,'depend',402),(416,'recommend',402),(417,'recommend',402),(418,'recommend',402),(419,'depend',420),(420,'depend',419),(421,'depend',394),(421,'recommend',422),(421,'recommend',423),(421,'recommend',427),(424,'depend',427),(424,'recommend',428),(424,'recommend',431),(424,'recommend',432),(424,'recommend',437),(424,'recommend',438),(424,'recommend',445),(424,'recommend',446),(424,'recommend',453),(425,'recommend',424),(426,'depend',427),(426,'recommend',424),(426,'recommend',428),(426,'recommend',431),(426,'recommend',432),(426,'recommend',437),(426,'recommend',438),(426,'recommend',445),(426,'recommend',446),(426,'recommend',453),(428,'depend',427),(428,'recommend',424),(428,'recommend',431),(428,'recommend',432),(428,'recommend',437),(428,'recommend',438),(428,'recommend',445),(428,'recommend',446),(428,'recommend',453),(429,'depend',427),(429,'recommend',434),(430,'recommend',1682),(431,'depend',427),(431,'recommend',424),(431,'recommend',428),(431,'recommend',432),(431,'recommend',437),(431,'recommend',438),(431,'recommend',445),(431,'recommend',446),(432,'depend',427),(432,'recommend',424),(432,'recommend',428),(432,'recommend',431),(432,'recommend',437),(432,'recommend',438),(432,'recommend',445),(432,'recommend',446),(434,'recommend',429),(435,'recommend',428),(436,'recommend',428),(437,'depend',427),(437,'recommend',424),(437,'recommend',428),(437,'recommend',438),(438,'depend',427),(438,'recommend',424),(438,'recommend',428),(438,'recommend',437),(440,'depend',427),(440,'recommend',441),(441,'recommend',440),(443,'recommend',496),(443,'recommend',1491),(444,'recommend',428),(445,'depend',427),(445,'recommend',424),(445,'recommend',428),(445,'recommend',431),(445,'recommend',432),(445,'recommend',446),(446,'depend',427),(446,'recommend',424),(446,'recommend',428),(446,'recommend',431),(446,'recommend',432),(446,'recommend',445),(447,'depend',427),(448,'depend',421),(449,'depend',421),(450,'depend',451),(451,'depend',450),(451,'recommend',1679),(452,'depend',451),(453,'depend',427),(453,'recommend',424),(453,'recommend',428),(453,'recommend',431),(453,'recommend',432),(453,'recommend',437),(453,'recommend',438),(453,'recommend',445),(453,'recommend',446),(454,'recommend',459),(454,'recommend',460),(454,'recommend',461),(454,'recommend',462),(454,'recommend',463),(455,'depend',394),(457,'recommend',458),(457,'recommend',471),(458,'depend',457),(459,'recommend',454),(459,'recommend',460),(459,'recommend',461),(459,'recommend',462),(459,'recommend',463),(460,'recommend',454),(460,'recommend',459),(460,'recommend',461),(460,'recommend',462),(460,'recommend',463),(461,'recommend',454),(461,'recommend',459),(461,'recommend',460),(461,'recommend',462),(461,'recommend',463),(462,'recommend',454),(462,'recommend',459),(462,'recommend',460),(462,'recommend',461),(462,'recommend',463),(463,'recommend',454),(463,'recommend',459),(463,'recommend',460),(463,'recommend',461),(463,'recommend',462),(465,'depend',457),(466,'depend',457),(466,'recommend',467),(467,'depend',457),(467,'recommend',466),(468,'depend',457),(468,'recommend',469),(469,'depend',457),(469,'recommend',468),(470,'depend',457),(470,'recommend',467),(471,'depend',457),(473,'depend',472),(474,'depend',472),(475,'depend',457),(475,'recommend',468),(476,'depend',1285),(476,'depend',1316),(476,'depend',1329),(476,'recommend',477),(476,'recommend',1330),(476,'recommend',1331),(476,'recommend',1332),(476,'recommend',1334),(477,'depend',1285),(477,'depend',1316),(477,'depend',1329),(477,'recommend',476),(477,'recommend',1330),(477,'recommend',1331),(477,'recommend',1332),(477,'recommend',1334),(479,'depend',394),(479,'depend',478),(480,'depend',479),(480,'recommend',482),(481,'depend',478),(482,'depend',479),(482,'depend',481),(482,'recommend',480),(483,'depend',479),(483,'depend',481),(484,'depend',481),(484,'recommend',485),(484,'recommend',486),(485,'depend',481),(485,'recommend',484),(486,'depend',481),(486,'recommend',485),(487,'depend',394),(487,'recommend',489),(488,'depend',489),(488,'recommend',491),(490,'depend',489),(491,'depend',489),(491,'recommend',488),(493,'depend',176),(493,'depend',850),(493,'recommend',494),(494,'depend',493),(494,'depend',850),(496,'recommend',497),(496,'recommend',498),(496,'recommend',500),(496,'recommend',501),(496,'recommend',504),(496,'recommend',1491),(497,'depend',496),(497,'recommend',498),(497,'recommend',501),(497,'recommend',504),(497,'recommend',1584),(498,'depend',500),(498,'recommend',497),(498,'recommend',1584),(499,'depend',500),(499,'recommend',497),(499,'recommend',498),(500,'depend',496),(500,'recommend',498),(500,'recommend',1491),(501,'depend',496),(501,'recommend',497),(501,'recommend',502),(501,'recommend',504),(502,'depend',496),(502,'recommend',501),(503,'depend',496),(503,'depend',504),(504,'depend',496),(504,'depend',503),(504,'depend',505),(505,'depend',504),(506,'depend',394),(506,'recommend',510),(507,'depend',506),(507,'recommend',508),(508,'depend',506),(508,'recommend',507),(509,'depend',506),(510,'depend',506),(511,'depend',506),(512,'depend',511),(512,'depend',513),(513,'depend',512),(514,'depend',394),(514,'recommend',523),(515,'depend',514),(515,'depend',523),(515,'recommend',516),(515,'recommend',518),(515,'recommend',519),(515,'recommend',520),(515,'recommend',521),(515,'recommend',522),(515,'recommend',530),(516,'depend',514),(516,'depend',523),(516,'recommend',515),(516,'recommend',518),(516,'recommend',519),(516,'recommend',520),(516,'recommend',521),(516,'recommend',522),(516,'recommend',530),(517,'depend',514),(517,'depend',523),(518,'depend',514),(518,'depend',523),(518,'recommend',515),(518,'recommend',516),(518,'recommend',519),(518,'recommend',520),(518,'recommend',521),(518,'recommend',522),(518,'recommend',530),(519,'depend',514),(519,'depend',523),(519,'recommend',515),(519,'recommend',516),(519,'recommend',518),(519,'recommend',520),(519,'recommend',521),(519,'recommend',522),(519,'recommend',530),(520,'depend',514),(520,'depend',523),(520,'recommend',515),(520,'recommend',516),(520,'recommend',518),(520,'recommend',519),(520,'recommend',521),(520,'recommend',522),(520,'recommend',530),(521,'depend',514),(521,'depend',523),(521,'recommend',515),(521,'recommend',516),(521,'recommend',518),(521,'recommend',519),(521,'recommend',520),(521,'recommend',522),(521,'recommend',530),(522,'depend',514),(522,'depend',523),(522,'recommend',515),(522,'recommend',516),(522,'recommend',518),(522,'recommend',519),(522,'recommend',520),(522,'recommend',521),(522,'recommend',530),(523,'depend',514),(524,'depend',514),(525,'depend',523),(526,'depend',514),(526,'depend',523),(526,'recommend',527),(527,'depend',525),(527,'recommend',526),(528,'depend',525),(529,'depend',525),(530,'depend',514),(530,'depend',523),(530,'recommend',515),(530,'recommend',516),(530,'recommend',518),(530,'recommend',519),(530,'recommend',520),(530,'recommend',521),(530,'recommend',522),(595,'depend',652),(595,'depend',656),(595,'recommend',626),(596,'depend',16),(596,'depend',598),(597,'depend',16),(598,'depend',16),(598,'recommend',596),(599,'depend',16),(600,'depend',16),(600,'depend',602),(601,'depend',16),(601,'depend',630),(601,'recommend',603),(602,'depend',16),(602,'recommend',600),(603,'depend',16),(603,'depend',630),(603,'recommend',601),(604,'depend',607),(604,'depend',652),(604,'depend',656),(604,'recommend',605),(604,'recommend',606),(604,'recommend',608),(605,'depend',604),(605,'depend',652),(605,'depend',656),(605,'recommend',606),(605,'recommend',607),(605,'recommend',608),(605,'recommend',733),(606,'depend',604),(606,'depend',652),(606,'depend',656),(606,'recommend',607),(606,'recommend',608),(606,'recommend',733),(607,'depend',604),(607,'depend',652),(607,'depend',656),(607,'recommend',606),(607,'recommend',608),(607,'recommend',733),(608,'depend',604),(608,'depend',652),(608,'depend',656),(608,'recommend',606),(608,'recommend',607),(608,'recommend',733),(609,'depend',652),(609,'depend',656),(610,'depend',609),(610,'depend',652),(610,'depend',656),(610,'recommend',611),(610,'recommend',612),(610,'recommend',613),(610,'recommend',615),(610,'recommend',616),(610,'recommend',617),(610,'recommend',618),(611,'depend',609),(611,'depend',652),(611,'depend',656),(611,'recommend',610),(611,'recommend',612),(611,'recommend',613),(611,'recommend',615),(611,'recommend',616),(611,'recommend',617),(611,'recommend',618),(612,'depend',609),(612,'depend',652),(612,'depend',656),(612,'recommend',610),(612,'recommend',611),(612,'recommend',613),(612,'recommend',615),(612,'recommend',616),(612,'recommend',617),(612,'recommend',618),(613,'depend',609),(613,'depend',652),(613,'depend',656),(613,'recommend',610),(613,'recommend',611),(613,'recommend',612),(613,'recommend',615),(613,'recommend',616),(613,'recommend',617),(613,'recommend',618),(614,'depend',609),(614,'depend',652),(614,'depend',656),(615,'depend',609),(615,'depend',652),(615,'depend',656),(615,'recommend',610),(615,'recommend',611),(615,'recommend',612),(615,'recommend',613),(615,'recommend',616),(615,'recommend',617),(615,'recommend',618),(616,'depend',609),(616,'depend',652),(616,'depend',656),(616,'recommend',610),(616,'recommend',611),(616,'recommend',612),(616,'recommend',613),(616,'recommend',615),(616,'recommend',617),(616,'recommend',618),(617,'depend',609),(617,'recommend',610),(617,'recommend',611),(617,'recommend',612),(617,'recommend',613),(617,'recommend',615),(617,'recommend',616),(617,'recommend',618),(618,'depend',609),(618,'depend',652),(618,'depend',656),(618,'recommend',610),(618,'recommend',611),(618,'recommend',612),(618,'recommend',613),(618,'recommend',615),(618,'recommend',616),(618,'recommend',617),(619,'depend',614),(619,'recommend',620),(619,'recommend',621),(619,'recommend',622),(619,'recommend',623),(620,'depend',614),(620,'recommend',619),(620,'recommend',621),(620,'recommend',622),(620,'recommend',623),(621,'depend',614),(621,'recommend',619),(621,'recommend',620),(621,'recommend',622),(621,'recommend',623),(622,'depend',614),(622,'recommend',619),(622,'recommend',620),(622,'recommend',621),(622,'recommend',623),(623,'depend',614),(623,'recommend',619),(623,'recommend',620),(623,'recommend',621),(623,'recommend',622),(624,'depend',595),(624,'depend',652),(624,'depend',656),(624,'recommend',625),(624,'recommend',627),(624,'recommend',628),(624,'recommend',629),(625,'depend',595),(625,'depend',652),(625,'depend',656),(625,'recommend',624),(626,'depend',595),(626,'depend',652),(626,'depend',656),(627,'depend',595),(627,'depend',626),(627,'depend',652),(627,'depend',656),(627,'recommend',624),(627,'recommend',628),(627,'recommend',629),(627,'recommend',636),(628,'depend',595),(628,'depend',626),(628,'depend',652),(628,'depend',656),(628,'recommend',624),(628,'recommend',627),(628,'recommend',629),(629,'depend',595),(629,'depend',626),(629,'depend',652),(629,'depend',656),(629,'recommend',624),(629,'recommend',627),(629,'recommend',628),(630,'depend',16),(630,'recommend',631),(630,'recommend',632),(630,'recommend',633),(630,'recommend',635),(630,'recommend',641),(630,'recommend',642),(630,'recommend',643),(630,'recommend',644),(630,'recommend',645),(630,'recommend',646),(630,'recommend',647),(630,'recommend',650),(630,'recommend',651),(631,'depend',16),(631,'depend',630),(631,'recommend',632),(631,'recommend',633),(631,'recommend',635),(631,'recommend',641),(631,'recommend',642),(631,'recommend',643),(631,'recommend',644),(631,'recommend',647),(631,'recommend',650),(631,'recommend',651),(632,'depend',16),(632,'depend',630),(632,'recommend',631),(632,'recommend',633),(632,'recommend',635),(632,'recommend',641),(632,'recommend',642),(632,'recommend',643),(632,'recommend',644),(632,'recommend',647),(632,'recommend',650),(632,'recommend',651),(633,'depend',16),(633,'depend',630),(633,'recommend',631),(633,'recommend',632),(633,'recommend',635),(633,'recommend',641),(633,'recommend',642),(633,'recommend',643),(633,'recommend',644),(633,'recommend',647),(633,'recommend',650),(633,'recommend',651),(635,'depend',16),(635,'depend',630),(635,'recommend',631),(635,'recommend',632),(635,'recommend',633),(635,'recommend',641),(635,'recommend',642),(635,'recommend',643),(635,'recommend',644),(635,'recommend',647),(635,'recommend',650),(635,'recommend',651),(636,'depend',595),(636,'depend',626),(636,'depend',652),(636,'depend',656),(636,'recommend',627),(637,'depend',652),(637,'depend',656),(639,'depend',595),(640,'depend',595),(640,'depend',648),(641,'depend',16),(641,'depend',630),(641,'recommend',631),(641,'recommend',632),(641,'recommend',633),(641,'recommend',635),(641,'recommend',642),(641,'recommend',643),(641,'recommend',644),(641,'recommend',647),(641,'recommend',650),(641,'recommend',651),(642,'depend',16),(642,'depend',630),(642,'recommend',631),(642,'recommend',632),(642,'recommend',633),(642,'recommend',635),(642,'recommend',641),(642,'recommend',643),(642,'recommend',644),(642,'recommend',647),(642,'recommend',650),(642,'recommend',651),(643,'depend',16),(643,'depend',630),(643,'recommend',631),(643,'recommend',632),(643,'recommend',633),(643,'recommend',635),(643,'recommend',641),(643,'recommend',642),(643,'recommend',644),(643,'recommend',647),(643,'recommend',650),(643,'recommend',651),(644,'depend',16),(644,'depend',630),(644,'recommend',631),(644,'recommend',632),(644,'recommend',633),(644,'recommend',635),(644,'recommend',641),(644,'recommend',642),(644,'recommend',643),(644,'recommend',647),(644,'recommend',650),(644,'recommend',651),(645,'depend',16),(645,'depend',630),(646,'depend',16),(646,'depend',630),(647,'depend',16),(647,'depend',630),(647,'recommend',631),(647,'recommend',632),(647,'recommend',633),(647,'recommend',635),(647,'recommend',641),(647,'recommend',642),(647,'recommend',643),(647,'recommend',644),(647,'recommend',650),(647,'recommend',651),(648,'depend',595),(648,'depend',640),(649,'depend',1162),(650,'depend',16),(650,'depend',630),(650,'recommend',631),(650,'recommend',632),(650,'recommend',633),(650,'recommend',635),(650,'recommend',641),(650,'recommend',642),(650,'recommend',643),(650,'recommend',644),(650,'recommend',647),(650,'recommend',651),(651,'depend',16),(651,'depend',630),(651,'recommend',631),(651,'recommend',632),(651,'recommend',633),(651,'recommend',635),(651,'recommend',641),(651,'recommend',642),(651,'recommend',643),(651,'recommend',644),(651,'recommend',647),(651,'recommend',650),(654,'depend',652),(655,'depend',652),(655,'depend',656),(659,'depend',652),(660,'depend',652),(661,'depend',652),(663,'recommend',664),(663,'recommend',665),(663,'recommend',667),(664,'recommend',663),(665,'recommend',663),(665,'recommend',667),(667,'recommend',663),(667,'recommend',665),(670,'depend',669),(670,'recommend',671),(670,'recommend',672),(670,'recommend',673),(670,'recommend',674),(670,'recommend',675),(670,'recommend',676),(670,'recommend',677),(670,'recommend',678),(671,'depend',669),(671,'recommend',670),(671,'recommend',672),(671,'recommend',673),(671,'recommend',674),(671,'recommend',675),(671,'recommend',676),(671,'recommend',677),(671,'recommend',678),(672,'depend',669),(672,'recommend',670),(672,'recommend',671),(672,'recommend',673),(672,'recommend',674),(672,'recommend',675),(672,'recommend',676),(672,'recommend',677),(672,'recommend',678),(673,'depend',669),(673,'recommend',670),(673,'recommend',671),(673,'recommend',672),(673,'recommend',674),(673,'recommend',675),(673,'recommend',676),(673,'recommend',677),(673,'recommend',678),(674,'depend',669),(674,'recommend',670),(674,'recommend',671),(674,'recommend',672),(674,'recommend',673),(674,'recommend',675),(674,'recommend',676),(674,'recommend',677),(674,'recommend',678),(675,'depend',669),(675,'recommend',670),(675,'recommend',671),(675,'recommend',672),(675,'recommend',673),(675,'recommend',674),(675,'recommend',676),(675,'recommend',677),(675,'recommend',678),(676,'depend',669),(676,'recommend',670),(676,'recommend',671),(676,'recommend',672),(676,'recommend',673),(676,'recommend',674),(676,'recommend',675),(676,'recommend',677),(676,'recommend',678),(677,'depend',669),(677,'recommend',670),(677,'recommend',671),(677,'recommend',672),(677,'recommend',673),(677,'recommend',674),(677,'recommend',675),(677,'recommend',676),(677,'recommend',678),(678,'depend',669),(678,'recommend',670),(678,'recommend',671),(678,'recommend',672),(678,'recommend',673),(678,'recommend',674),(678,'recommend',675),(678,'recommend',676),(678,'recommend',677),(680,'depend',652),(680,'depend',656),(681,'depend',652),(681,'depend',656),(682,'depend',652),(682,'depend',656),(683,'depend',652),(683,'depend',656),(684,'depend',652),(684,'depend',656),(685,'depend',652),(685,'depend',656),(687,'depend',652),(689,'depend',652),(689,'depend',656),(689,'depend',690),(690,'depend',652),(690,'depend',656),(691,'depend',652),(691,'depend',656),(691,'depend',690),(692,'depend',652),(692,'depend',656),(692,'depend',690),(693,'depend',652),(693,'depend',656),(694,'depend',652),(694,'depend',656),(695,'depend',652),(695,'depend',656),(696,'depend',652),(696,'depend',656),(697,'depend',652),(697,'depend',656),(697,'depend',690),(700,'depend',699),(701,'depend',699),(701,'recommend',702),(702,'depend',699),(702,'recommend',701),(704,'depend',703),(707,'depend',1150),(708,'depend',707),(708,'recommend',710),(709,'depend',707),(710,'depend',707),(710,'recommend',708),(711,'depend',707),(712,'depend',711),(713,'depend',711),(713,'recommend',712),(714,'depend',711),(716,'depend',715),(717,'depend',715),(718,'depend',719),(718,'depend',720),(719,'depend',718),(719,'depend',720),(720,'depend',718),(720,'depend',719),(721,'recommend',722),(721,'recommend',723),(722,'recommend',721),(722,'recommend',723),(723,'recommend',721),(723,'recommend',722),(725,'depend',724),(726,'depend',724),(726,'recommend',727),(727,'depend',724),(727,'recommend',726),(730,'depend',652),(731,'depend',735),(731,'recommend',734),(731,'recommend',736),(732,'depend',735),(732,'recommend',734),(732,'recommend',736),(734,'depend',735),(734,'recommend',736),(760,'recommend',759),(765,'depend',764),(766,'depend',764),(767,'depend',764),(768,'depend',764),(768,'recommend',770),(769,'depend',764),(770,'depend',768),(772,'depend',771),(773,'depend',771),(773,'recommend',774),(773,'recommend',775),(773,'recommend',776),(774,'depend',771),(774,'recommend',773),(774,'recommend',775),(774,'recommend',776),(775,'depend',771),(775,'recommend',773),(775,'recommend',774),(775,'recommend',776),(776,'depend',771),(776,'recommend',773),(776,'recommend',774),(776,'recommend',775),(777,'depend',771),(787,'recommend',798),(788,'depend',787),(788,'depend',798),(788,'recommend',789),(788,'recommend',791),(788,'recommend',792),(788,'recommend',793),(788,'recommend',794),(788,'recommend',795),(788,'recommend',796),(788,'recommend',797),(789,'depend',787),(789,'recommend',788),(790,'depend',787),(791,'depend',787),(791,'depend',798),(791,'recommend',788),(791,'recommend',792),(791,'recommend',793),(791,'recommend',794),(791,'recommend',795),(791,'recommend',796),(791,'recommend',797),(792,'depend',787),(792,'depend',798),(792,'recommend',788),(792,'recommend',791),(792,'recommend',793),(792,'recommend',794),(792,'recommend',795),(792,'recommend',796),(792,'recommend',797),(793,'depend',787),(793,'depend',798),(793,'recommend',788),(793,'recommend',791),(793,'recommend',792),(793,'recommend',794),(793,'recommend',795),(793,'recommend',796),(793,'recommend',797),(794,'depend',787),(794,'depend',798),(794,'recommend',788),(794,'recommend',791),(794,'recommend',792),(794,'recommend',793),(794,'recommend',795),(794,'recommend',796),(794,'recommend',797),(795,'depend',787),(795,'depend',798),(795,'recommend',788),(795,'recommend',791),(795,'recommend',792),(795,'recommend',793),(795,'recommend',794),(795,'recommend',796),(795,'recommend',797),(796,'depend',787),(796,'depend',798),(796,'recommend',788),(796,'recommend',791),(796,'recommend',792),(796,'recommend',793),(796,'recommend',794),(796,'recommend',795),(796,'recommend',797),(797,'depend',787),(797,'depend',798),(797,'recommend',788),(797,'recommend',791),(797,'recommend',792),(797,'recommend',793),(797,'recommend',794),(797,'recommend',795),(797,'recommend',796),(798,'depend',787),(799,'depend',787),(800,'depend',798),(800,'recommend',801),(801,'depend',787),(801,'recommend',800),(802,'depend',787),(802,'recommend',1507),(802,'recommend',1512),(803,'recommend',813),(804,'depend',803),(804,'depend',813),(804,'recommend',805),(804,'recommend',807),(804,'recommend',808),(804,'recommend',809),(804,'recommend',810),(804,'recommend',811),(804,'recommend',812),(804,'recommend',814),(805,'depend',803),(805,'depend',813),(805,'recommend',804),(805,'recommend',807),(805,'recommend',808),(805,'recommend',809),(805,'recommend',811),(805,'recommend',812),(805,'recommend',814),(806,'depend',803),(807,'depend',803),(807,'depend',813),(807,'recommend',804),(807,'recommend',805),(807,'recommend',808),(807,'recommend',809),(807,'recommend',811),(807,'recommend',812),(807,'recommend',814),(808,'depend',803),(808,'depend',813),(808,'recommend',804),(808,'recommend',805),(808,'recommend',807),(808,'recommend',809),(808,'recommend',811),(808,'recommend',812),(808,'recommend',814),(809,'depend',803),(809,'depend',813),(809,'recommend',804),(809,'recommend',805),(809,'recommend',807),(809,'recommend',808),(809,'recommend',811),(809,'recommend',812),(809,'recommend',814),(810,'depend',803),(810,'depend',813),(810,'recommend',804),(811,'depend',803),(811,'depend',813),(811,'recommend',804),(811,'recommend',805),(811,'recommend',807),(811,'recommend',808),(811,'recommend',809),(811,'recommend',812),(811,'recommend',814),(812,'depend',803),(812,'depend',813),(812,'recommend',804),(812,'recommend',805),(812,'recommend',807),(812,'recommend',808),(812,'recommend',809),(812,'recommend',811),(812,'recommend',814),(813,'depend',803),(814,'depend',803),(814,'depend',813),(814,'recommend',804),(814,'recommend',805),(814,'recommend',807),(814,'recommend',808),(814,'recommend',809),(814,'recommend',811),(814,'recommend',812),(815,'depend',813),(815,'recommend',816),(816,'depend',803),(816,'recommend',815),(817,'depend',803),(817,'depend',813),(817,'recommend',1522),(817,'recommend',1527),(818,'depend',803),(819,'depend',824),(819,'recommend',821),(820,'depend',824),(820,'recommend',819),(820,'recommend',821),(820,'recommend',823),(820,'recommend',825),(820,'recommend',826),(820,'recommend',827),(820,'recommend',828),(820,'recommend',829),(820,'recommend',830),(820,'recommend',831),(820,'recommend',832),(820,'recommend',833),(820,'recommend',834),(821,'depend',824),(821,'recommend',819),(821,'recommend',827),(821,'recommend',828),(821,'recommend',829),(821,'recommend',830),(822,'depend',824),(822,'recommend',819),(822,'recommend',821),(823,'depend',824),(823,'recommend',825),(823,'recommend',826),(824,'recommend',819),(824,'recommend',820),(824,'recommend',821),(825,'depend',824),(825,'recommend',823),(825,'recommend',826),(826,'depend',824),(826,'recommend',823),(826,'recommend',825),(827,'depend',824),(827,'depend',826),(827,'recommend',825),(827,'recommend',828),(827,'recommend',829),(827,'recommend',830),(827,'recommend',831),(827,'recommend',832),(827,'recommend',833),(828,'depend',824),(828,'depend',826),(828,'recommend',827),(828,'recommend',829),(828,'recommend',830),(829,'depend',824),(829,'depend',826),(829,'recommend',827),(829,'recommend',828),(829,'recommend',830),(830,'depend',824),(830,'recommend',826),(830,'recommend',827),(830,'recommend',828),(830,'recommend',829),(831,'depend',824),(831,'recommend',832),(831,'recommend',833),(832,'depend',824),(832,'recommend',831),(832,'recommend',833),(833,'depend',824),(833,'recommend',831),(833,'recommend',832),(834,'depend',824),(834,'recommend',1067),(835,'depend',176),(835,'depend',842),(835,'recommend',836),(836,'depend',842),(836,'recommend',835),(837,'depend',842),(837,'recommend',838),(838,'depend',842),(838,'recommend',837),(839,'depend',835),(839,'depend',842),(839,'recommend',840),(840,'depend',835),(840,'depend',842),(840,'recommend',839),(841,'depend',835),(841,'depend',842),(841,'recommend',837),(841,'recommend',839),(842,'depend',176),(843,'depend',176),(843,'depend',835),(843,'depend',842),(843,'recommend',839),(843,'recommend',844),(844,'depend',842),(844,'depend',843),(846,'depend',845),(846,'recommend',847),(846,'recommend',848),(847,'depend',845),(847,'recommend',846),(848,'depend',845),(848,'recommend',846),(848,'recommend',847),(849,'depend',845),(849,'recommend',846),(850,'depend',176),(851,'depend',850),(851,'recommend',850),(852,'recommend',861),(853,'depend',852),(853,'depend',861),(853,'recommend',854),(853,'recommend',856),(853,'recommend',857),(853,'recommend',858),(853,'recommend',859),(853,'recommend',860),(853,'recommend',862),(853,'recommend',863),(854,'depend',852),(854,'depend',861),(854,'recommend',853),(854,'recommend',856),(854,'recommend',857),(854,'recommend',858),(854,'recommend',859),(854,'recommend',860),(854,'recommend',862),(854,'recommend',864),(855,'depend',852),(856,'depend',852),(856,'depend',861),(856,'recommend',853),(856,'recommend',854),(856,'recommend',857),(856,'recommend',858),(856,'recommend',859),(856,'recommend',860),(856,'recommend',862),(856,'recommend',869),(857,'depend',852),(857,'depend',861),(857,'recommend',853),(857,'recommend',854),(857,'recommend',856),(857,'recommend',858),(857,'recommend',859),(857,'recommend',860),(857,'recommend',862),(857,'recommend',866),(858,'depend',852),(858,'depend',861),(858,'recommend',853),(858,'recommend',854),(858,'recommend',856),(858,'recommend',857),(858,'recommend',859),(858,'recommend',860),(858,'recommend',862),(858,'recommend',868),(859,'depend',852),(859,'depend',861),(859,'recommend',853),(859,'recommend',854),(859,'recommend',856),(859,'recommend',857),(859,'recommend',858),(859,'recommend',860),(859,'recommend',862),(859,'recommend',867),(860,'depend',852),(860,'depend',861),(860,'recommend',853),(860,'recommend',854),(860,'recommend',856),(860,'recommend',857),(860,'recommend',858),(860,'recommend',859),(860,'recommend',862),(862,'depend',852),(862,'depend',861),(862,'recommend',853),(862,'recommend',854),(862,'recommend',856),(862,'recommend',857),(862,'recommend',858),(862,'recommend',859),(862,'recommend',860),(862,'recommend',865),(863,'depend',852),(863,'recommend',853),(864,'depend',852),(864,'recommend',854),(865,'depend',852),(865,'recommend',862),(866,'depend',852),(866,'recommend',857),(867,'depend',852),(867,'recommend',859),(868,'depend',852),(868,'recommend',858),(869,'depend',852),(869,'recommend',856),(870,'depend',861),(870,'recommend',871),(871,'depend',852),(871,'recommend',870),(872,'depend',852),(872,'recommend',1537),(872,'recommend',1542),(873,'depend',852),(875,'depend',874),(875,'recommend',876),(875,'recommend',880),(875,'recommend',881),(875,'recommend',882),(876,'depend',874),(876,'recommend',875),(876,'recommend',878),(876,'recommend',880),(876,'recommend',881),(876,'recommend',882),(877,'depend',874),(877,'recommend',875),(878,'depend',874),(878,'recommend',876),(879,'depend',874),(879,'recommend',881),(880,'depend',883),(880,'recommend',875),(880,'recommend',876),(881,'depend',874),(881,'recommend',875),(881,'recommend',876),(881,'recommend',879),(881,'recommend',880),(881,'recommend',882),(882,'depend',874),(882,'recommend',881),(883,'depend',874),(885,'depend',884),(885,'recommend',886),(885,'recommend',887),(885,'recommend',889),(885,'recommend',890),(885,'recommend',891),(885,'recommend',892),(886,'depend',884),(886,'recommend',885),(886,'recommend',887),(886,'recommend',889),(886,'recommend',890),(886,'recommend',891),(886,'recommend',892),(887,'depend',884),(887,'recommend',885),(887,'recommend',886),(887,'recommend',889),(887,'recommend',890),(887,'recommend',891),(887,'recommend',892),(888,'depend',884),(889,'depend',884),(889,'recommend',885),(889,'recommend',886),(889,'recommend',887),(889,'recommend',890),(889,'recommend',891),(889,'recommend',892),(890,'depend',884),(890,'recommend',885),(890,'recommend',886),(890,'recommend',887),(890,'recommend',889),(890,'recommend',891),(890,'recommend',892),(891,'depend',884),(891,'recommend',885),(891,'recommend',886),(891,'recommend',887),(891,'recommend',889),(891,'recommend',890),(891,'recommend',892),(892,'depend',884),(892,'recommend',885),(892,'recommend',886),(892,'recommend',887),(892,'recommend',889),(892,'recommend',890),(892,'recommend',891),(893,'depend',884),(895,'depend',894),(895,'recommend',896),(895,'recommend',897),(895,'recommend',899),(896,'depend',894),(896,'recommend',895),(896,'recommend',898),(896,'recommend',899),(897,'depend',894),(897,'recommend',895),(898,'depend',894),(898,'recommend',896),(898,'recommend',897),(899,'depend',900),(899,'recommend',895),(900,'depend',894),(901,'depend',176),(901,'recommend',902),(901,'recommend',903),(901,'recommend',905),(902,'depend',901),(902,'recommend',903),(902,'recommend',905),(903,'depend',901),(903,'recommend',902),(903,'recommend',905),(904,'depend',901),(904,'recommend',902),(904,'recommend',903),(904,'recommend',905),(905,'depend',901),(905,'recommend',902),(905,'recommend',903),(906,'depend',176),(906,'depend',901),(906,'recommend',907),(906,'recommend',908),(906,'recommend',910),(907,'depend',901),(907,'depend',906),(907,'recommend',908),(907,'recommend',910),(908,'depend',901),(908,'depend',906),(908,'recommend',907),(908,'recommend',910),(909,'depend',901),(909,'depend',906),(909,'recommend',907),(909,'recommend',908),(909,'recommend',910),(910,'depend',901),(910,'depend',906),(910,'recommend',907),(910,'recommend',908),(912,'depend',911),(912,'recommend',913),(912,'recommend',914),(912,'recommend',915),(912,'recommend',916),(913,'depend',911),(913,'recommend',912),(913,'recommend',914),(913,'recommend',915),(913,'recommend',916),(914,'depend',915),(914,'recommend',912),(915,'depend',911),(915,'recommend',912),(915,'recommend',913),(915,'recommend',914),(915,'recommend',916),(916,'depend',911),(916,'recommend',912),(916,'recommend',913),(916,'recommend',915),(918,'depend',917),(918,'recommend',919),(918,'recommend',920),(918,'recommend',921),(918,'recommend',922),(919,'depend',917),(919,'recommend',918),(919,'recommend',920),(919,'recommend',921),(919,'recommend',923),(920,'depend',921),(920,'recommend',918),(920,'recommend',919),(921,'depend',917),(921,'recommend',918),(921,'recommend',919),(921,'recommend',920),(921,'recommend',922),(921,'recommend',923),(922,'depend',917),(922,'recommend',918),(923,'depend',917),(923,'recommend',918),(926,'depend',925),(927,'depend',925),(928,'depend',925),(929,'depend',925),(930,'depend',925),(931,'depend',925),(932,'depend',925),(933,'depend',925),(934,'depend',925),(935,'depend',925),(936,'depend',925),(937,'depend',925),(938,'depend',925),(939,'depend',925),(940,'depend',925),(941,'depend',925),(942,'depend',925),(943,'depend',925),(944,'depend',925),(945,'depend',925),(946,'depend',925),(947,'depend',925),(948,'depend',925),(949,'depend',925),(950,'depend',925),(951,'depend',925),(952,'depend',925),(953,'depend',925),(954,'depend',925),(955,'depend',925),(956,'depend',925),(957,'depend',925),(958,'depend',925),(959,'depend',925),(960,'depend',925),(961,'depend',925),(962,'depend',925),(963,'depend',925),(964,'depend',925),(965,'depend',925),(966,'depend',925),(967,'depend',925),(968,'depend',925),(969,'depend',925),(970,'depend',925),(971,'depend',925),(972,'depend',925),(973,'depend',925),(974,'depend',925),(975,'depend',925),(976,'depend',925),(977,'depend',925),(978,'depend',925),(979,'depend',925),(980,'depend',925),(981,'depend',925),(982,'depend',925),(983,'depend',925),(984,'depend',925),(985,'depend',925),(986,'depend',925),(987,'depend',925),(988,'depend',925),(989,'depend',925),(990,'depend',925),(991,'depend',925),(992,'depend',925),(993,'depend',925),(994,'depend',925),(995,'depend',925),(996,'depend',925),(997,'depend',176),(997,'recommend',1000),(998,'recommend',999),(998,'recommend',1001),(998,'recommend',1002),(998,'recommend',1003),(998,'recommend',1004),(998,'recommend',1005),(998,'recommend',1006),(998,'recommend',1007),(999,'recommend',998),(999,'recommend',1001),(999,'recommend',1002),(999,'recommend',1003),(999,'recommend',1004),(999,'recommend',1005),(999,'recommend',1006),(999,'recommend',1007),(1000,'depend',997),(1001,'recommend',998),(1001,'recommend',999),(1001,'recommend',1002),(1001,'recommend',1003),(1001,'recommend',1004),(1001,'recommend',1005),(1001,'recommend',1006),(1001,'recommend',1007),(1002,'recommend',998),(1002,'recommend',999),(1002,'recommend',1001),(1002,'recommend',1003),(1002,'recommend',1005),(1003,'recommend',998),(1003,'recommend',999),(1003,'recommend',1001),(1003,'recommend',1002),(1003,'recommend',1004),(1004,'recommend',1003),(1005,'recommend',998),(1005,'recommend',999),(1005,'recommend',1001),(1005,'recommend',1006),(1006,'recommend',998),(1006,'recommend',999),(1006,'recommend',1001),(1006,'recommend',1002),(1006,'recommend',1004),(1007,'recommend',1006),(1008,'depend',176),(1008,'recommend',1009),(1008,'recommend',1010),(1008,'recommend',1012),(1009,'depend',1008),(1009,'recommend',1010),(1009,'recommend',1011),(1009,'recommend',1014),(1009,'recommend',1015),(1009,'recommend',1017),(1009,'recommend',1018),(1009,'recommend',1020),(1010,'depend',1008),(1010,'recommend',1009),(1010,'recommend',1011),(1010,'recommend',1014),(1010,'recommend',1015),(1010,'recommend',1017),(1010,'recommend',1018),(1010,'recommend',1020),(1011,'depend',1008),(1011,'recommend',1009),(1011,'recommend',1010),(1011,'recommend',1014),(1011,'recommend',1015),(1011,'recommend',1017),(1011,'recommend',1018),(1011,'recommend',1020),(1012,'depend',1008),(1012,'recommend',1009),(1012,'recommend',1010),(1013,'depend',1008),(1013,'depend',1012),(1014,'depend',1008),(1014,'recommend',1009),(1014,'recommend',1010),(1014,'recommend',1011),(1014,'recommend',1015),(1014,'recommend',1017),(1014,'recommend',1018),(1014,'recommend',1020),(1015,'depend',1008),(1015,'recommend',1009),(1015,'recommend',1010),(1015,'recommend',1011),(1015,'recommend',1014),(1015,'recommend',1016),(1015,'recommend',1017),(1015,'recommend',1018),(1015,'recommend',1020),(1016,'depend',1008),(1016,'recommend',1015),(1017,'depend',1008),(1017,'recommend',1009),(1017,'recommend',1010),(1017,'recommend',1011),(1017,'recommend',1014),(1017,'recommend',1015),(1017,'recommend',1018),(1017,'recommend',1020),(1018,'depend',1008),(1018,'recommend',1009),(1018,'recommend',1010),(1018,'recommend',1011),(1018,'recommend',1014),(1018,'recommend',1015),(1018,'recommend',1017),(1018,'recommend',1019),(1018,'recommend',1020),(1019,'depend',1008),(1019,'recommend',1018),(1020,'depend',1008),(1020,'recommend',1009),(1020,'recommend',1010),(1020,'recommend',1011),(1020,'recommend',1014),(1020,'recommend',1015),(1020,'recommend',1017),(1020,'recommend',1018),(1021,'depend',1008),(1022,'depend',176),(1022,'recommend',1028),(1023,'depend',1022),(1023,'recommend',1024),(1023,'recommend',1025),(1023,'recommend',1027),(1023,'recommend',1031),(1023,'recommend',1032),(1023,'recommend',1038),(1024,'depend',1022),(1024,'recommend',1023),(1025,'depend',1022),(1025,'recommend',1023),(1025,'recommend',1024),(1025,'recommend',1027),(1025,'recommend',1031),(1025,'recommend',1032),(1025,'recommend',1038),(1027,'depend',1022),(1027,'recommend',1023),(1027,'recommend',1024),(1027,'recommend',1025),(1027,'recommend',1031),(1027,'recommend',1032),(1027,'recommend',1038),(1028,'depend',1022),(1031,'depend',1022),(1031,'recommend',1023),(1031,'recommend',1024),(1031,'recommend',1025),(1031,'recommend',1027),(1031,'recommend',1032),(1031,'recommend',1038),(1032,'depend',1022),(1032,'recommend',1023),(1032,'recommend',1024),(1032,'recommend',1025),(1032,'recommend',1027),(1032,'recommend',1031),(1032,'recommend',1038),(1038,'depend',1022),(1038,'recommend',1023),(1038,'recommend',1024),(1038,'recommend',1025),(1038,'recommend',1027),(1038,'recommend',1031),(1038,'recommend',1032),(1039,'depend',66),(1039,'depend',67),(1039,'depend',68),(1039,'recommend',1040),(1039,'recommend',1041),(1039,'recommend',1042),(1039,'recommend',1043),(1039,'recommend',1044),(1039,'recommend',1046),(1040,'depend',1039),(1040,'recommend',1041),(1040,'recommend',1042),(1040,'recommend',1043),(1040,'recommend',1044),(1040,'recommend',1045),(1040,'recommend',1046),(1041,'depend',1039),(1041,'recommend',1040),(1041,'recommend',1042),(1041,'recommend',1043),(1041,'recommend',1044),(1041,'recommend',1045),(1041,'recommend',1046),(1042,'depend',1039),(1042,'recommend',1040),(1042,'recommend',1041),(1042,'recommend',1043),(1042,'recommend',1044),(1042,'recommend',1045),(1042,'recommend',1046),(1043,'depend',1039),(1043,'depend',1042),(1043,'recommend',1040),(1043,'recommend',1041),(1043,'recommend',1044),(1043,'recommend',1046),(1044,'depend',1039),(1044,'recommend',1040),(1044,'recommend',1041),(1045,'depend',78),(1045,'recommend',68),(1046,'depend',1039),(1046,'recommend',1040),(1046,'recommend',1041),(1046,'recommend',1042),(1046,'recommend',1043),(1046,'recommend',1044),(1046,'recommend',1045),(1047,'depend',1051),(1047,'recommend',1048),(1047,'recommend',1694),(1048,'depend',1051),(1048,'recommend',1047),(1049,'depend',1051),(1049,'recommend',1047),(1049,'recommend',1048),(1050,'recommend',1053),(1050,'recommend',1055),(1050,'recommend',1056),(1050,'recommend',1057),(1050,'recommend',1062),(1050,'recommend',1063),(1050,'recommend',1064),(1050,'recommend',1065),(1051,'recommend',1047),(1051,'recommend',1048),(1051,'recommend',1052),(1052,'depend',1051),(1052,'recommend',1047),(1052,'recommend',1048),(1053,'recommend',1050),(1053,'recommend',1055),(1053,'recommend',1056),(1053,'recommend',1057),(1053,'recommend',1062),(1053,'recommend',1063),(1053,'recommend',1064),(1053,'recommend',1065),(1054,'recommend',1066),(1054,'recommend',1067),(1054,'recommend',1068),(1055,'recommend',1050),(1055,'recommend',1053),(1055,'recommend',1056),(1055,'recommend',1057),(1055,'recommend',1062),(1055,'recommend',1063),(1055,'recommend',1064),(1055,'recommend',1065),(1056,'recommend',1050),(1056,'recommend',1053),(1056,'recommend',1055),(1056,'recommend',1057),(1056,'recommend',1062),(1056,'recommend',1063),(1056,'recommend',1064),(1056,'recommend',1065),(1057,'recommend',1050),(1057,'recommend',1053),(1057,'recommend',1055),(1057,'recommend',1056),(1057,'recommend',1062),(1057,'recommend',1063),(1057,'recommend',1064),(1057,'recommend',1065),(1058,'recommend',1061),(1060,'depend',1051),(1061,'recommend',1058),(1062,'recommend',1050),(1062,'recommend',1053),(1062,'recommend',1055),(1062,'recommend',1056),(1062,'recommend',1057),(1062,'recommend',1063),(1062,'recommend',1064),(1062,'recommend',1065),(1063,'recommend',1050),(1063,'recommend',1053),(1063,'recommend',1055),(1063,'recommend',1056),(1063,'recommend',1057),(1063,'recommend',1062),(1063,'recommend',1064),(1063,'recommend',1065),(1064,'recommend',1050),(1064,'recommend',1053),(1064,'recommend',1055),(1064,'recommend',1056),(1064,'recommend',1057),(1064,'recommend',1062),(1064,'recommend',1063),(1064,'recommend',1065),(1065,'recommend',1050),(1065,'recommend',1053),(1065,'recommend',1055),(1065,'recommend',1056),(1065,'recommend',1057),(1065,'recommend',1062),(1065,'recommend',1063),(1065,'recommend',1064),(1066,'depend',1054),(1066,'recommend',1067),(1066,'recommend',1068),(1067,'depend',1054),(1067,'recommend',834),(1067,'recommend',1066),(1067,'recommend',1068),(1067,'recommend',1070),(1067,'recommend',1071),(1068,'depend',1054),(1068,'recommend',1066),(1068,'recommend',1067),(1068,'recommend',1070),(1068,'recommend',1071),(1069,'depend',1054),(1069,'recommend',1066),(1069,'recommend',1067),(1069,'recommend',1068),(1069,'recommend',1070),(1069,'recommend',1071),(1070,'depend',1054),(1070,'recommend',1066),(1070,'recommend',1067),(1070,'recommend',1068),(1070,'recommend',1071),(1071,'depend',1054),(1071,'recommend',1066),(1071,'recommend',1067),(1071,'recommend',1068),(1071,'recommend',1070),(1072,'depend',1054),(1072,'recommend',1066),(1072,'recommend',1067),(1072,'recommend',1068),(1072,'recommend',1070),(1072,'recommend',1071),(1073,'recommend',1074),(1074,'recommend',1073),(1075,'depend',1082),(1075,'recommend',1076),(1075,'recommend',1086),(1075,'recommend',1087),(1076,'depend',1082),(1076,'recommend',1075),(1076,'recommend',1086),(1076,'recommend',1087),(1077,'depend',1082),(1078,'recommend',1079),(1078,'recommend',1080),(1079,'depend',1078),(1079,'recommend',1080),(1080,'depend',1078),(1080,'recommend',1079),(1081,'depend',1078),(1081,'recommend',1079),(1081,'recommend',1080),(1082,'recommend',1083),(1082,'recommend',1084),(1083,'depend',1082),(1083,'recommend',1084),(1084,'depend',1082),(1084,'recommend',1083),(1085,'depend',1082),(1085,'recommend',1083),(1085,'recommend',1084),(1086,'depend',1082),(1086,'recommend',1075),(1086,'recommend',1076),(1086,'recommend',1087),(1087,'depend',1082),(1087,'recommend',1075),(1087,'recommend',1076),(1087,'recommend',1086),(1089,'recommend',1090),(1089,'recommend',1091),(1089,'recommend',1092),(1090,'depend',1089),(1090,'recommend',1091),(1090,'recommend',1092),(1091,'depend',1089),(1091,'recommend',1090),(1091,'recommend',1092),(1092,'depend',1089),(1092,'recommend',1090),(1092,'recommend',1091),(1093,'depend',1089),(1093,'recommend',1095),(1093,'recommend',1112),(1093,'recommend',1131),(1094,'depend',1089),(1094,'recommend',1090),(1094,'recommend',1091),(1094,'recommend',1092),(1095,'depend',1089),(1095,'recommend',1093),(1095,'recommend',1112),(1095,'recommend',1131),(1096,'depend',1089),(1096,'recommend',1097),(1096,'recommend',1098),(1097,'depend',1089),(1097,'depend',1096),(1097,'recommend',1098),(1098,'depend',1089),(1098,'depend',1096),(1098,'recommend',1097),(1099,'depend',1089),(1099,'depend',1096),(1099,'recommend',1097),(1099,'recommend',1098),(1100,'depend',1089),(1100,'recommend',1101),(1100,'recommend',1102),(1100,'recommend',1104),(1101,'depend',1089),(1101,'depend',1100),(1101,'recommend',1102),(1101,'recommend',1104),(1102,'depend',1089),(1102,'depend',1100),(1102,'recommend',1101),(1102,'recommend',1104),(1103,'depend',1089),(1103,'depend',1100),(1103,'recommend',1101),(1103,'recommend',1102),(1103,'recommend',1104),(1104,'depend',1089),(1104,'depend',1100),(1104,'recommend',1101),(1104,'recommend',1102),(1105,'depend',1089),(1105,'recommend',1106),(1105,'recommend',1107),(1106,'depend',1089),(1106,'depend',1105),(1106,'recommend',1107),(1107,'depend',1089),(1107,'depend',1105),(1107,'recommend',1106),(1108,'depend',1089),(1108,'depend',1105),(1108,'recommend',1106),(1108,'recommend',1107),(1109,'depend',1089),(1109,'depend',1110),(1109,'recommend',1110),(1109,'recommend',1114),(1110,'depend',1089),(1110,'recommend',1109),(1110,'recommend',1114),(1111,'depend',1089),(1112,'depend',1089),(1112,'recommend',1093),(1112,'recommend',1095),(1112,'recommend',1131),(1113,'depend',1089),(1113,'depend',1096),(1113,'recommend',1097),(1113,'recommend',1098),(1114,'depend',1089),(1114,'depend',1110),(1114,'recommend',1109),(1114,'recommend',1110),(1115,'depend',1089),(1115,'depend',1116),(1115,'recommend',1117),(1116,'depend',1089),(1116,'recommend',1115),(1116,'recommend',1117),(1117,'depend',1089),(1117,'depend',1116),(1117,'recommend',1115),(1118,'depend',1089),(1118,'depend',1116),(1118,'recommend',1115),(1118,'recommend',1117),(1120,'recommend',1121),(1120,'recommend',1122),(1120,'recommend',1123),(1120,'recommend',1125),(1121,'depend',1120),(1121,'recommend',1122),(1121,'recommend',1123),(1121,'recommend',1125),(1122,'depend',1120),(1122,'recommend',1121),(1122,'recommend',1123),(1122,'recommend',1125),(1123,'depend',1120),(1123,'recommend',1121),(1123,'recommend',1122),(1123,'recommend',1125),(1124,'depend',1120),(1124,'recommend',1121),(1124,'recommend',1122),(1124,'recommend',1123),(1124,'recommend',1125),(1125,'depend',1120),(1125,'recommend',1121),(1125,'recommend',1122),(1125,'recommend',1123),(1126,'recommend',1127),(1126,'recommend',1128),(1126,'recommend',1129),(1127,'depend',1126),(1127,'recommend',1128),(1127,'recommend',1129),(1128,'depend',1126),(1128,'recommend',1127),(1128,'recommend',1129),(1129,'depend',1126),(1129,'recommend',1127),(1129,'recommend',1128),(1130,'depend',1126),(1130,'recommend',1127),(1130,'recommend',1128),(1130,'recommend',1129),(1131,'depend',1089),(1131,'recommend',1127),(1131,'recommend',1128),(1131,'recommend',1129),(1132,'recommend',1133),(1132,'recommend',1134),(1133,'depend',1132),(1133,'recommend',1134),(1134,'depend',1132),(1134,'recommend',1133),(1135,'depend',1132),(1135,'recommend',1133),(1135,'recommend',1134),(1136,'depend',1132),(1137,'depend',1132),(1137,'depend',1136),(1137,'recommend',1139),(1137,'recommend',1140),(1137,'recommend',1141),(1138,'depend',1132),(1138,'depend',1136),(1138,'recommend',1137),(1138,'recommend',1139),(1138,'recommend',1140),(1138,'recommend',1141),(1139,'depend',1132),(1139,'depend',1136),(1139,'recommend',1137),(1139,'recommend',1140),(1139,'recommend',1141),(1140,'depend',1132),(1140,'depend',1136),(1140,'recommend',1137),(1140,'recommend',1139),(1140,'recommend',1141),(1141,'depend',1132),(1141,'depend',1136),(1141,'recommend',1137),(1141,'recommend',1139),(1141,'recommend',1140),(1144,'depend',1143),(1144,'recommend',1145),(1144,'recommend',1146),(1144,'recommend',1147),(1144,'recommend',1148),(1144,'recommend',1149),(1145,'depend',1143),(1145,'recommend',1144),(1145,'recommend',1146),(1145,'recommend',1147),(1145,'recommend',1148),(1145,'recommend',1149),(1146,'depend',1143),(1146,'recommend',1144),(1146,'recommend',1145),(1146,'recommend',1147),(1146,'recommend',1148),(1146,'recommend',1149),(1147,'depend',1143),(1147,'recommend',1144),(1147,'recommend',1145),(1147,'recommend',1146),(1147,'recommend',1148),(1147,'recommend',1149),(1148,'depend',1149),(1149,'depend',1143),(1149,'recommend',1144),(1149,'recommend',1145),(1149,'recommend',1146),(1154,'depend',1153),(1154,'recommend',1156),(1154,'recommend',1158),(1154,'recommend',1159),(1155,'recommend',1156),(1155,'recommend',1159),(1156,'recommend',1154),(1156,'recommend',1155),(1156,'recommend',1157),(1156,'recommend',1158),(1156,'recommend',1159),(1156,'recommend',1160),(1157,'depend',22),(1157,'recommend',1156),(1158,'depend',1153),(1158,'recommend',22),(1158,'recommend',1156),(1158,'recommend',1159),(1159,'recommend',1154),(1159,'recommend',1155),(1159,'recommend',1156),(1159,'recommend',1157),(1159,'recommend',1158),(1159,'recommend',1160),(1160,'depend',22),(1160,'depend',1153),(1160,'recommend',1158),(1164,'depend',1163),(1164,'recommend',1165),(1164,'recommend',1166),(1165,'depend',1163),(1165,'recommend',1164),(1165,'recommend',1166),(1166,'depend',1163),(1166,'recommend',1164),(1166,'recommend',1165),(1168,'depend',1172),(1168,'recommend',1169),(1168,'recommend',1173),(1168,'recommend',1181),(1168,'recommend',1183),(1168,'recommend',1184),(1168,'recommend',1186),(1169,'depend',1172),(1169,'recommend',1168),(1169,'recommend',1173),(1169,'recommend',1181),(1169,'recommend',1183),(1169,'recommend',1184),(1169,'recommend',1186),(1169,'recommend',1188),(1170,'depend',1172),(1170,'recommend',1169),(1171,'depend',1172),(1171,'recommend',1168),(1171,'recommend',1169),(1172,'recommend',1171),(1173,'depend',1172),(1173,'recommend',1168),(1173,'recommend',1169),(1173,'recommend',1181),(1173,'recommend',1183),(1173,'recommend',1184),(1173,'recommend',1186),(1173,'recommend',1191),(1174,'depend',1172),(1174,'recommend',1175),(1174,'recommend',1176),(1174,'recommend',1177),(1174,'recommend',1178),(1174,'recommend',1179),(1174,'recommend',1180),(1174,'recommend',1182),(1175,'depend',1172),(1175,'recommend',1174),(1175,'recommend',1176),(1175,'recommend',1177),(1175,'recommend',1178),(1175,'recommend',1179),(1175,'recommend',1180),(1175,'recommend',1182),(1176,'depend',1172),(1176,'recommend',1174),(1176,'recommend',1175),(1176,'recommend',1177),(1176,'recommend',1178),(1176,'recommend',1179),(1176,'recommend',1180),(1176,'recommend',1182),(1177,'depend',1172),(1177,'recommend',1174),(1177,'recommend',1175),(1177,'recommend',1176),(1177,'recommend',1178),(1177,'recommend',1179),(1177,'recommend',1180),(1177,'recommend',1182),(1178,'depend',1172),(1178,'recommend',1174),(1178,'recommend',1175),(1178,'recommend',1176),(1178,'recommend',1177),(1178,'recommend',1179),(1178,'recommend',1180),(1178,'recommend',1182),(1179,'depend',1172),(1179,'recommend',1174),(1179,'recommend',1175),(1179,'recommend',1176),(1179,'recommend',1177),(1179,'recommend',1178),(1179,'recommend',1180),(1179,'recommend',1182),(1180,'depend',1172),(1180,'recommend',1174),(1180,'recommend',1175),(1180,'recommend',1176),(1180,'recommend',1177),(1180,'recommend',1178),(1180,'recommend',1179),(1180,'recommend',1182),(1180,'recommend',1190),(1181,'depend',1172),(1181,'recommend',1168),(1181,'recommend',1169),(1181,'recommend',1173),(1181,'recommend',1183),(1181,'recommend',1184),(1181,'recommend',1186),(1182,'depend',1172),(1182,'recommend',1174),(1182,'recommend',1175),(1182,'recommend',1176),(1182,'recommend',1177),(1182,'recommend',1178),(1182,'recommend',1179),(1182,'recommend',1180),(1183,'depend',1172),(1183,'recommend',1168),(1183,'recommend',1169),(1183,'recommend',1173),(1183,'recommend',1181),(1183,'recommend',1184),(1183,'recommend',1186),(1184,'depend',1172),(1184,'recommend',1168),(1184,'recommend',1169),(1184,'recommend',1173),(1184,'recommend',1181),(1184,'recommend',1183),(1184,'recommend',1186),(1184,'recommend',1189),(1185,'depend',1172),(1185,'recommend',1168),(1185,'recommend',1169),(1186,'depend',1172),(1186,'recommend',1168),(1186,'recommend',1169),(1186,'recommend',1173),(1186,'recommend',1181),(1186,'recommend',1183),(1186,'recommend',1184),(1187,'depend',1172),(1188,'depend',1172),(1188,'recommend',1169),(1189,'depend',1172),(1189,'recommend',1184),(1190,'depend',1172),(1190,'recommend',1180),(1191,'depend',1172),(1191,'recommend',1173),(1192,'depend',1172),(1193,'recommend',1194),(1193,'recommend',1198),(1194,'depend',1193),(1194,'recommend',1198),(1195,'depend',1172),(1195,'depend',1196),(1196,'depend',1172),(1196,'depend',1195),(1197,'depend',1172),(1198,'depend',1193),(1198,'recommend',1194),(1199,'recommend',1200),(1199,'recommend',1201),(1200,'depend',1199),(1200,'recommend',1201),(1201,'depend',1199),(1201,'recommend',1200),(1202,'depend',1199),(1202,'recommend',1200),(1202,'recommend',1201),(1204,'depend',1207),(1204,'recommend',1205),(1204,'recommend',1213),(1204,'recommend',1214),(1205,'depend',1207),(1205,'recommend',1204),(1205,'recommend',1213),(1205,'recommend',1214),(1206,'depend',1207),(1206,'recommend',1205),(1207,'recommend',1204),(1207,'recommend',1205),(1207,'recommend',1206),(1208,'depend',1207),(1208,'recommend',1204),(1208,'recommend',1205),(1208,'recommend',1223),(1209,'depend',1207),(1209,'recommend',1210),(1209,'recommend',1211),(1209,'recommend',1212),(1210,'depend',1207),(1210,'recommend',1209),(1210,'recommend',1211),(1210,'recommend',1212),(1211,'depend',1207),(1211,'recommend',1204),(1211,'recommend',1205),(1211,'recommend',1208),(1211,'recommend',1209),(1211,'recommend',1210),(1211,'recommend',1212),(1211,'recommend',1213),(1211,'recommend',1214),(1212,'depend',1207),(1212,'recommend',1209),(1212,'recommend',1210),(1212,'recommend',1211),(1213,'depend',1207),(1213,'recommend',1205),(1213,'recommend',1220),(1214,'depend',1207),(1214,'recommend',1221),(1215,'depend',1207),(1215,'recommend',1204),(1215,'recommend',1205),(1216,'depend',1207),(1216,'depend',1217),(1217,'depend',1207),(1217,'depend',1216),(1218,'depend',1207),(1219,'depend',1207),(1219,'recommend',1205),(1220,'depend',1207),(1220,'recommend',1213),(1221,'depend',1207),(1221,'recommend',1214),(1222,'depend',1207),(1222,'recommend',1212),(1223,'depend',1207),(1223,'recommend',1208),(1224,'depend',1207),(1225,'depend',1238),(1226,'depend',1238),(1227,'depend',1238),(1228,'depend',1227),(1228,'depend',1238),(1229,'depend',1225),(1229,'depend',1238),(1230,'depend',1238),(1231,'depend',1230),(1231,'depend',1238),(1232,'depend',1230),(1232,'depend',1238),(1233,'depend',1238),(1234,'depend',1233),(1234,'depend',1238),(1235,'depend',1238),(1236,'depend',1238),(1237,'depend',1238),(1238,'recommend',1239),(1239,'depend',1238),(1239,'recommend',1227),(1240,'depend',1238),(1240,'depend',1246),(1241,'depend',1238),(1242,'depend',1238),(1242,'depend',1240),(1242,'depend',1246),(1243,'depend',1238),(1243,'depend',1246),(1244,'depend',1238),(1244,'depend',1246),(1245,'depend',1238),(1245,'depend',1246),(1246,'depend',1238),(1246,'recommend',1247),(1246,'recommend',1248),(1246,'recommend',1250),(1247,'depend',1238),(1247,'depend',1246),(1247,'recommend',1248),(1247,'recommend',1249),(1247,'recommend',1250),(1247,'recommend',1251),(1248,'depend',1238),(1248,'depend',1246),(1248,'recommend',1247),(1248,'recommend',1249),(1248,'recommend',1250),(1248,'recommend',1251),(1249,'depend',1238),(1249,'depend',1246),(1249,'recommend',1247),(1249,'recommend',1248),(1249,'recommend',1250),(1249,'recommend',1251),(1250,'depend',1238),(1250,'depend',1246),(1251,'depend',1238),(1251,'depend',1246),(1251,'recommend',1247),(1251,'recommend',1248),(1251,'recommend',1249),(1251,'recommend',1250),(1252,'depend',1238),(1252,'depend',1246),(1253,'depend',1238),(1253,'depend',1258),(1254,'depend',1238),(1255,'depend',1238),(1255,'depend',1253),(1255,'depend',1258),(1256,'depend',1238),(1256,'depend',1258),(1257,'depend',1238),(1257,'depend',1258),(1258,'depend',1238),(1258,'recommend',1259),(1258,'recommend',1260),(1258,'recommend',1261),(1259,'depend',1238),(1259,'depend',1258),(1259,'recommend',1260),(1259,'recommend',1261),(1259,'recommend',1262),(1259,'recommend',1263),(1260,'depend',1238),(1260,'depend',1258),(1260,'recommend',1259),(1260,'recommend',1261),(1260,'recommend',1262),(1260,'recommend',1263),(1261,'depend',1238),(1261,'depend',1258),(1262,'depend',1238),(1262,'depend',1258),(1262,'recommend',1259),(1262,'recommend',1260),(1262,'recommend',1261),(1262,'recommend',1263),(1263,'depend',1238),(1263,'depend',1258),(1263,'recommend',1259),(1263,'recommend',1260),(1263,'recommend',1261),(1263,'recommend',1262),(1264,'depend',1238),(1264,'depend',1269),(1265,'depend',1238),(1266,'depend',1238),(1266,'depend',1264),(1266,'depend',1269),(1267,'depend',1238),(1268,'depend',1238),(1268,'depend',1269),(1269,'depend',1238),(1269,'recommend',1270),(1269,'recommend',1271),(1269,'recommend',1272),(1270,'depend',1238),(1270,'depend',1269),(1270,'recommend',1271),(1270,'recommend',1272),(1270,'recommend',1273),(1270,'recommend',1274),(1271,'depend',1238),(1271,'depend',1269),(1271,'recommend',1270),(1271,'recommend',1272),(1271,'recommend',1273),(1271,'recommend',1274),(1272,'depend',1238),(1272,'depend',1269),(1273,'depend',1238),(1273,'depend',1269),(1273,'recommend',1270),(1273,'recommend',1271),(1273,'recommend',1272),(1273,'recommend',1274),(1274,'depend',1238),(1274,'depend',1269),(1274,'recommend',1270),(1274,'recommend',1271),(1274,'recommend',1272),(1274,'recommend',1273),(1275,'depend',1238),(1276,'depend',1238),(1276,'depend',1279),(1277,'depend',1238),(1277,'depend',1276),(1277,'depend',1279),(1278,'depend',1238),(1279,'depend',1238),(1279,'recommend',1280),(1279,'recommend',1281),(1279,'recommend',1283),(1280,'depend',1238),(1280,'depend',1279),(1280,'recommend',1281),(1280,'recommend',1282),(1280,'recommend',1283),(1280,'recommend',1284),(1281,'depend',1238),(1281,'depend',1279),(1281,'recommend',1280),(1281,'recommend',1282),(1281,'recommend',1283),(1281,'recommend',1284),(1282,'depend',1238),(1282,'depend',1279),(1282,'recommend',1280),(1282,'recommend',1281),(1282,'recommend',1283),(1282,'recommend',1284),(1283,'depend',1238),(1283,'depend',1279),(1284,'depend',1238),(1284,'depend',1279),(1284,'recommend',1280),(1284,'recommend',1281),(1284,'recommend',1282),(1284,'recommend',1283),(1286,'depend',1285),(1287,'depend',1285),(1287,'recommend',1288),(1287,'recommend',1289),(1287,'recommend',1290),(1287,'recommend',1293),(1288,'depend',1285),(1288,'depend',1287),(1288,'recommend',1289),(1288,'recommend',1292),(1289,'depend',1285),(1289,'depend',1287),(1289,'recommend',1288),(1289,'recommend',1292),(1290,'depend',1285),(1290,'depend',1287),(1290,'recommend',1288),(1290,'recommend',1289),(1291,'depend',1285),(1291,'depend',1287),(1291,'recommend',1288),(1291,'recommend',1289),(1292,'depend',1285),(1292,'depend',1287),(1292,'recommend',1288),(1292,'recommend',1289),(1293,'depend',1285),(1293,'depend',1287),(1294,'depend',1285),(1294,'recommend',1295),(1294,'recommend',1296),(1294,'recommend',1297),(1295,'depend',1285),(1295,'depend',1294),(1295,'recommend',1296),(1296,'depend',1285),(1296,'depend',1294),(1296,'recommend',1295),(1297,'depend',1285),(1297,'depend',1294),(1297,'recommend',1295),(1297,'recommend',1296),(1298,'depend',1285),(1298,'depend',1294),(1298,'recommend',1295),(1298,'recommend',1296),(1299,'depend',1285),(1299,'recommend',1300),(1299,'recommend',1301),(1299,'recommend',1302),(1300,'depend',1285),(1300,'depend',1299),(1300,'recommend',1301),(1301,'depend',1285),(1301,'depend',1299),(1301,'recommend',1300),(1302,'depend',1285),(1302,'depend',1299),(1302,'recommend',1300),(1302,'recommend',1301),(1303,'depend',1285),(1303,'depend',1299),(1303,'recommend',1300),(1303,'recommend',1301),(1304,'depend',1285),(1304,'recommend',1305),(1304,'recommend',1306),(1304,'recommend',1307),(1305,'depend',1285),(1305,'depend',1304),(1305,'recommend',1306),(1306,'depend',1285),(1306,'depend',1304),(1306,'recommend',1305),(1307,'depend',1285),(1307,'depend',1304),(1307,'recommend',1305),(1307,'recommend',1306),(1308,'depend',1285),(1308,'depend',1304),(1308,'recommend',1305),(1308,'recommend',1306),(1309,'depend',1285),(1309,'recommend',1310),(1309,'recommend',1311),(1309,'recommend',1313),(1309,'recommend',1315),(1310,'depend',1285),(1310,'depend',1309),(1310,'recommend',1311),(1310,'recommend',1315),(1311,'depend',1285),(1311,'depend',1309),(1311,'recommend',1310),(1311,'recommend',1315),(1312,'depend',1285),(1312,'depend',1309),(1312,'recommend',1310),(1312,'recommend',1311),(1312,'recommend',1315),(1313,'depend',1285),(1313,'depend',1309),(1313,'recommend',1310),(1313,'recommend',1311),(1313,'recommend',1315),(1315,'depend',1285),(1315,'depend',1309),(1315,'recommend',1310),(1315,'recommend',1311),(1316,'depend',1285),(1316,'recommend',1317),(1316,'recommend',1318),(1316,'recommend',1320),(1316,'recommend',1321),(1316,'recommend',1324),(1317,'depend',1285),(1317,'depend',1316),(1317,'recommend',1318),(1317,'recommend',1320),(1317,'recommend',1321),(1318,'depend',1285),(1318,'depend',1316),(1318,'recommend',1317),(1318,'recommend',1320),(1318,'recommend',1321),(1319,'depend',1285),(1319,'depend',1316),(1319,'recommend',1317),(1319,'recommend',1318),(1320,'depend',1285),(1320,'depend',1316),(1320,'recommend',1317),(1320,'recommend',1318),(1320,'recommend',1321),(1321,'depend',1285),(1321,'depend',1316),(1321,'recommend',1317),(1321,'recommend',1318),(1321,'recommend',1320),(1322,'depend',1285),(1322,'depend',1316),(1322,'recommend',1323),(1323,'depend',1285),(1323,'depend',1316),(1323,'depend',1322),(1324,'depend',1285),(1324,'depend',1316),(1324,'recommend',1317),(1324,'recommend',1318),(1324,'recommend',1320),(1324,'recommend',1321),(1325,'depend',1285),(1325,'depend',1316),(1325,'recommend',1326),(1325,'recommend',1327),(1326,'depend',1285),(1326,'depend',1316),(1326,'depend',1325),(1326,'recommend',1327),(1327,'depend',1285),(1327,'depend',1316),(1327,'depend',1325),(1327,'recommend',1326),(1327,'recommend',1328),(1328,'depend',1285),(1328,'depend',1316),(1328,'depend',1325),(1328,'recommend',1327),(1329,'depend',1285),(1329,'depend',1316),(1329,'recommend',476),(1329,'recommend',477),(1329,'recommend',1330),(1329,'recommend',1331),(1329,'recommend',1332),(1329,'recommend',1333),(1329,'recommend',1334),(1330,'depend',1285),(1330,'depend',1316),(1330,'depend',1329),(1330,'recommend',476),(1330,'recommend',477),(1330,'recommend',1331),(1330,'recommend',1332),(1330,'recommend',1334),(1331,'depend',1285),(1331,'depend',1316),(1331,'depend',1329),(1331,'recommend',476),(1331,'recommend',477),(1331,'recommend',1330),(1331,'recommend',1332),(1331,'recommend',1334),(1332,'depend',1285),(1332,'depend',1316),(1332,'depend',1329),(1332,'recommend',476),(1332,'recommend',477),(1332,'recommend',1330),(1332,'recommend',1331),(1332,'recommend',1334),(1333,'depend',1285),(1333,'depend',1316),(1333,'depend',1329),(1333,'recommend',476),(1333,'recommend',477),(1333,'recommend',1330),(1333,'recommend',1331),(1333,'recommend',1332),(1333,'recommend',1334),(1334,'depend',1285),(1334,'depend',1316),(1334,'depend',1329),(1334,'recommend',476),(1334,'recommend',477),(1334,'recommend',1330),(1334,'recommend',1331),(1334,'recommend',1332),(1335,'depend',1285),(1335,'depend',1316),(1335,'depend',1329),(1335,'recommend',476),(1335,'recommend',477),(1335,'recommend',1330),(1335,'recommend',1331),(1335,'recommend',1332),(1335,'recommend',1334),(1339,'depend',1338),(1339,'recommend',1341),(1340,'depend',1338),(1340,'recommend',1341),(1341,'depend',1338),(1341,'recommend',1339),(1342,'depend',1337),(1343,'depend',1337),(1343,'depend',1342),(1344,'depend',1646),(1345,'depend',1344),(1345,'recommend',1346),(1345,'recommend',1347),(1345,'recommend',1348),(1346,'depend',1344),(1346,'recommend',1345),(1346,'recommend',1347),(1346,'recommend',1348),(1347,'depend',1344),(1347,'recommend',1345),(1347,'recommend',1346),(1347,'recommend',1348),(1348,'depend',1344),(1348,'recommend',1345),(1348,'recommend',1346),(1348,'recommend',1347),(1360,'depend',176),(1361,'depend',1360),(1364,'depend',1363),(1364,'recommend',1366),(1364,'recommend',1367),(1364,'recommend',1369),(1364,'recommend',1370),(1365,'depend',1363),(1366,'depend',1363),(1366,'recommend',1364),(1366,'recommend',1367),(1366,'recommend',1369),(1366,'recommend',1370),(1367,'depend',1363),(1367,'recommend',1364),(1367,'recommend',1366),(1367,'recommend',1369),(1367,'recommend',1370),(1368,'depend',1363),(1369,'depend',1363),(1369,'recommend',1364),(1369,'recommend',1366),(1369,'recommend',1367),(1369,'recommend',1370),(1370,'depend',1363),(1370,'recommend',1364),(1372,'depend',1375),(1372,'depend',1376),(1372,'recommend',1373),(1372,'recommend',1374),(1372,'recommend',1460),(1373,'depend',1375),(1373,'depend',1376),(1373,'recommend',1372),(1373,'recommend',1374),(1374,'depend',1375),(1374,'depend',1376),(1374,'recommend',1372),(1374,'recommend',1373),(1375,'depend',176),(1375,'recommend',1376),(1376,'depend',1375),(1377,'depend',1375),(1378,'recommend',1379),(1378,'recommend',1380),(1379,'recommend',1378),(1379,'recommend',1380),(1380,'recommend',1378),(1380,'recommend',1379),(1384,'recommend',1385),(1384,'recommend',1386),(1384,'recommend',1387),(1385,'recommend',1384),(1385,'recommend',1386),(1385,'recommend',1387),(1386,'recommend',1384),(1386,'recommend',1385),(1386,'recommend',1387),(1387,'recommend',1384),(1387,'recommend',1385),(1387,'recommend',1386),(1394,'recommend',1395),(1394,'recommend',1396),(1394,'recommend',1397),(1394,'recommend',1398),(1395,'recommend',1394),(1396,'recommend',1394),(1396,'recommend',1397),(1396,'recommend',1398),(1397,'recommend',1394),(1397,'recommend',1396),(1397,'recommend',1398),(1400,'recommend',1401),(1400,'recommend',1402),(1400,'recommend',1403),(1400,'recommend',1404),(1400,'recommend',1405),(1400,'recommend',1406),(1401,'recommend',1400),(1402,'recommend',1400),(1403,'recommend',1400),(1403,'recommend',1402),(1403,'recommend',1404),(1403,'recommend',1405),(1403,'recommend',1406),(1404,'recommend',1406),(1405,'recommend',1400),(1405,'recommend',1403),(1406,'recommend',1400),(1406,'recommend',1403),(1406,'recommend',1404),(1412,'depend',1411),(1412,'recommend',1413),(1412,'recommend',1414),(1412,'recommend',1415),(1412,'recommend',1416),(1412,'recommend',1417),(1412,'recommend',1418),(1412,'recommend',1419),(1413,'depend',1411),(1413,'recommend',1412),(1414,'depend',1411),(1414,'recommend',1412),(1415,'depend',1411),(1415,'recommend',1412),(1415,'recommend',1413),(1415,'recommend',1414),(1415,'recommend',1416),(1415,'recommend',1417),(1415,'recommend',1418),(1415,'recommend',1419),(1416,'depend',1411),(1416,'recommend',1418),(1417,'depend',1411),(1417,'recommend',1412),(1417,'recommend',1415),(1418,'depend',1411),(1418,'recommend',1412),(1418,'recommend',1415),(1418,'recommend',1416),(1419,'depend',1411),(1419,'recommend',1412),(1419,'recommend',1415),(1421,'depend',1420),(1421,'recommend',1422),(1421,'recommend',1423),(1421,'recommend',1425),(1421,'recommend',1426),(1421,'recommend',1427),(1422,'depend',1420),(1422,'recommend',1421),(1422,'recommend',1424),(1422,'recommend',1425),(1422,'recommend',1426),(1422,'recommend',1427),(1423,'depend',1420),(1423,'recommend',1421),(1424,'depend',1420),(1424,'recommend',1422),(1425,'depend',1420),(1425,'recommend',1421),(1426,'depend',1420),(1427,'depend',1420),(1427,'recommend',1421),(1427,'recommend',1422),(1429,'depend',1428),(1429,'recommend',1430),(1429,'recommend',1431),(1429,'recommend',1434),(1429,'recommend',1435),(1429,'recommend',1436),(1429,'recommend',1437),(1429,'recommend',1438),(1430,'depend',1428),(1430,'recommend',1429),(1430,'recommend',1432),(1430,'recommend',1434),(1430,'recommend',1435),(1430,'recommend',1436),(1430,'recommend',1437),(1430,'recommend',1438),(1431,'depend',1428),(1431,'recommend',1429),(1432,'depend',1428),(1432,'recommend',1430),(1433,'depend',1428),(1433,'recommend',1434),(1434,'depend',1428),(1434,'recommend',1429),(1434,'recommend',1430),(1434,'recommend',1433),(1434,'recommend',1435),(1434,'recommend',1436),(1434,'recommend',1438),(1435,'depend',1428),(1435,'recommend',1429),(1435,'recommend',1430),(1435,'recommend',1434),(1435,'recommend',1436),(1435,'recommend',1438),(1436,'depend',1428),(1436,'recommend',1429),(1436,'recommend',1430),(1436,'recommend',1434),(1436,'recommend',1435),(1436,'recommend',1438),(1437,'depend',1428),(1437,'recommend',1429),(1437,'recommend',1430),(1438,'depend',1428),(1438,'recommend',1429),(1438,'recommend',1430),(1438,'recommend',1434),(1438,'recommend',1435),(1438,'recommend',1436),(1441,'depend',1440),(1441,'recommend',1442),(1441,'recommend',1443),(1441,'recommend',1444),(1441,'recommend',1445),(1442,'depend',1440),(1442,'recommend',1441),(1442,'recommend',1443),(1442,'recommend',1444),(1442,'recommend',1445),(1443,'depend',1440),(1444,'depend',1440),(1444,'recommend',1441),(1444,'recommend',1442),(1444,'recommend',1443),(1444,'recommend',1445),(1445,'depend',1440),(1445,'recommend',1441),(1445,'recommend',1442),(1445,'recommend',1443),(1445,'recommend',1444),(1447,'depend',1446),(1447,'recommend',1448),(1447,'recommend',1449),(1448,'depend',1446),(1448,'recommend',1447),(1448,'recommend',1449),(1449,'depend',1446),(1449,'recommend',1447),(1449,'recommend',1448),(1450,'depend',176),(1450,'depend',1460),(1451,'depend',1450),(1451,'recommend',1452),(1451,'recommend',1453),(1451,'recommend',1454),(1451,'recommend',1456),(1452,'depend',1450),(1452,'recommend',1451),(1452,'recommend',1453),(1452,'recommend',1454),(1452,'recommend',1456),(1453,'depend',1450),(1453,'recommend',1451),(1453,'recommend',1452),(1453,'recommend',1454),(1453,'recommend',1456),(1454,'depend',1450),(1454,'recommend',1451),(1454,'recommend',1452),(1454,'recommend',1453),(1454,'recommend',1456),(1455,'depend',1450),(1456,'depend',1450),(1456,'recommend',1451),(1456,'recommend',1452),(1456,'recommend',1453),(1456,'recommend',1454),(1460,'depend',176),(1460,'recommend',1464),(1461,'depend',1460),(1461,'recommend',1467),(1462,'depend',1460),(1462,'recommend',1463),(1462,'recommend',1465),(1462,'recommend',1466),(1462,'recommend',1467),(1462,'recommend',1468),(1463,'depend',1460),(1463,'recommend',1462),(1463,'recommend',1465),(1463,'recommend',1466),(1463,'recommend',1467),(1463,'recommend',1468),(1463,'recommend',1470),(1464,'depend',1460),(1465,'depend',1460),(1465,'recommend',1462),(1465,'recommend',1463),(1465,'recommend',1466),(1465,'recommend',1467),(1465,'recommend',1468),(1466,'depend',1460),(1466,'recommend',1462),(1466,'recommend',1463),(1466,'recommend',1465),(1466,'recommend',1467),(1466,'recommend',1468),(1466,'recommend',1470),(1467,'depend',1460),(1467,'recommend',1462),(1467,'recommend',1463),(1467,'recommend',1465),(1467,'recommend',1466),(1467,'recommend',1468),(1467,'recommend',1470),(1468,'depend',1460),(1468,'recommend',1462),(1468,'recommend',1463),(1468,'recommend',1465),(1468,'recommend',1466),(1468,'recommend',1467),(1468,'recommend',1470),(1469,'depend',1460),(1470,'depend',1460),(1470,'recommend',1462),(1470,'recommend',1463),(1472,'depend',1473),(1472,'recommend',1474),(1472,'recommend',1475),(1472,'recommend',1477),(1474,'depend',1473),(1474,'recommend',1472),(1474,'recommend',1475),(1474,'recommend',1477),(1475,'depend',1473),(1475,'recommend',1472),(1475,'recommend',1474),(1475,'recommend',1477),(1475,'recommend',1488),(1477,'depend',1473),(1477,'recommend',1472),(1477,'recommend',1474),(1477,'recommend',1475),(1477,'recommend',1488),(1480,'depend',1479),(1480,'recommend',1481),(1480,'recommend',1482),(1481,'recommend',1480),(1481,'recommend',1482),(1488,'depend',1473),(1488,'recommend',1477),(1489,'depend',1482),(1490,'depend',176),(1491,'recommend',496),(1491,'recommend',500),(1491,'recommend',1584),(1492,'recommend',1493),(1492,'recommend',1494),(1492,'recommend',1496),(1492,'recommend',1497),(1492,'recommend',1583),(1493,'depend',1492),(1493,'recommend',1494),(1493,'recommend',1583),(1494,'depend',1492),(1494,'recommend',1493),(1494,'recommend',1583),(1495,'depend',1492),(1495,'recommend',1493),(1495,'recommend',1494),(1496,'depend',1492),(1496,'depend',1497),(1496,'recommend',1494),(1497,'depend',1492),(1497,'recommend',1498),(1497,'recommend',1499),(1497,'recommend',1503),(1497,'recommend',1504),(1497,'recommend',1506),(1498,'depend',1492),(1498,'depend',1497),(1498,'recommend',1499),(1498,'recommend',1503),(1498,'recommend',1504),(1499,'depend',1492),(1499,'depend',1497),(1499,'recommend',1498),(1499,'recommend',1500),(1499,'recommend',1503),(1499,'recommend',1504),(1500,'depend',1492),(1500,'depend',1497),(1500,'recommend',1499),(1501,'depend',1492),(1501,'depend',1497),(1501,'recommend',1502),(1502,'depend',1492),(1502,'depend',1497),(1502,'recommend',1501),(1503,'depend',1492),(1503,'depend',1497),(1503,'recommend',1498),(1503,'recommend',1499),(1503,'recommend',1504),(1504,'depend',1492),(1504,'depend',1497),(1504,'recommend',1498),(1504,'recommend',1503),(1504,'recommend',1505),(1505,'depend',1492),(1505,'depend',1497),(1505,'recommend',1504),(1506,'depend',1492),(1506,'depend',1497),(1506,'recommend',1498),(1506,'recommend',1499),(1506,'recommend',1503),(1506,'recommend',1504),(1507,'recommend',1508),(1507,'recommend',1509),(1507,'recommend',1511),(1507,'recommend',1512),(1507,'recommend',1585),(1508,'depend',1507),(1508,'recommend',1509),(1508,'recommend',1585),(1509,'depend',1507),(1509,'recommend',1508),(1509,'recommend',1585),(1510,'depend',1507),(1510,'recommend',1508),(1510,'recommend',1509),(1511,'depend',1507),(1511,'depend',1512),(1511,'recommend',1509),(1512,'depend',1507),(1512,'recommend',1513),(1512,'recommend',1518),(1512,'recommend',1519),(1512,'recommend',1521),(1513,'depend',1507),(1513,'depend',1512),(1513,'recommend',1514),(1513,'recommend',1518),(1513,'recommend',1519),(1514,'depend',1507),(1514,'depend',1512),(1514,'recommend',1513),(1514,'recommend',1515),(1514,'recommend',1518),(1514,'recommend',1519),(1515,'depend',1507),(1515,'depend',1512),(1515,'recommend',1514),(1516,'depend',1507),(1516,'depend',1512),(1516,'recommend',1517),(1517,'depend',1507),(1517,'depend',1512),(1517,'recommend',1516),(1518,'depend',1507),(1518,'depend',1512),(1518,'recommend',1513),(1518,'recommend',1514),(1518,'recommend',1519),(1519,'depend',1507),(1519,'depend',1512),(1519,'recommend',1513),(1519,'recommend',1518),(1519,'recommend',1520),(1520,'depend',1507),(1520,'depend',1512),(1520,'recommend',1519),(1521,'depend',1507),(1521,'depend',1512),(1521,'recommend',1518),(1521,'recommend',1519),(1522,'recommend',1523),(1522,'recommend',1524),(1522,'recommend',1526),(1522,'recommend',1527),(1522,'recommend',1586),(1523,'depend',1522),(1523,'recommend',1524),(1523,'recommend',1586),(1524,'depend',1522),(1524,'recommend',1523),(1524,'recommend',1586),(1525,'depend',1522),(1525,'recommend',1523),(1525,'recommend',1524),(1526,'depend',1522),(1526,'recommend',1533),(1527,'depend',1522),(1527,'recommend',1528),(1527,'recommend',1529),(1527,'recommend',1533),(1527,'recommend',1534),(1527,'recommend',1536),(1528,'depend',1522),(1528,'depend',1527),(1528,'recommend',1529),(1528,'recommend',1533),(1528,'recommend',1534),(1529,'depend',1522),(1529,'depend',1527),(1529,'recommend',1528),(1529,'recommend',1530),(1529,'recommend',1533),(1529,'recommend',1534),(1530,'depend',1522),(1530,'depend',1527),(1530,'recommend',1529),(1531,'depend',1522),(1531,'depend',1527),(1531,'recommend',1532),(1532,'depend',1522),(1532,'depend',1527),(1532,'recommend',1531),(1533,'depend',1522),(1533,'depend',1527),(1533,'recommend',1528),(1533,'recommend',1529),(1533,'recommend',1534),(1534,'depend',1522),(1534,'depend',1527),(1534,'recommend',1528),(1534,'recommend',1533),(1534,'recommend',1535),(1535,'depend',1522),(1535,'depend',1527),(1535,'recommend',1534),(1536,'depend',1522),(1536,'depend',1527),(1536,'recommend',1529),(1536,'recommend',1533),(1537,'recommend',1538),(1537,'recommend',1539),(1537,'recommend',1587),(1538,'depend',1537),(1538,'recommend',1539),(1538,'recommend',1587),(1539,'depend',1537),(1539,'recommend',1538),(1539,'recommend',1587),(1540,'depend',1537),(1540,'recommend',1543),(1540,'recommend',1548),(1541,'depend',1537),(1541,'recommend',1539),(1542,'depend',1537),(1542,'recommend',1543),(1542,'recommend',1544),(1542,'recommend',1548),(1542,'recommend',1549),(1543,'depend',1537),(1543,'depend',1542),(1543,'recommend',1544),(1543,'recommend',1548),(1543,'recommend',1549),(1544,'depend',1537),(1544,'depend',1542),(1544,'recommend',1543),(1544,'recommend',1545),(1544,'recommend',1548),(1544,'recommend',1549),(1545,'depend',1537),(1545,'depend',1542),(1545,'recommend',1544),(1546,'depend',1537),(1546,'depend',1542),(1546,'recommend',1547),(1547,'depend',1537),(1547,'depend',1542),(1547,'recommend',1546),(1548,'depend',1537),(1548,'depend',1542),(1548,'recommend',1543),(1548,'recommend',1544),(1548,'recommend',1549),(1549,'depend',1537),(1549,'depend',1542),(1549,'recommend',1543),(1549,'recommend',1548),(1549,'recommend',1550),(1550,'depend',1537),(1550,'depend',1542),(1550,'recommend',1549),(1551,'depend',1537),(1551,'depend',1542),(1551,'recommend',1544),(1551,'recommend',1548),(1552,'recommend',1553),(1552,'recommend',1554),(1552,'recommend',1588),(1553,'depend',1552),(1553,'recommend',1554),(1553,'recommend',1588),(1554,'depend',1552),(1554,'recommend',1553),(1554,'recommend',1588),(1555,'depend',1552),(1555,'recommend',1553),(1555,'recommend',1554),(1556,'depend',1552),(1556,'recommend',1554),(1557,'depend',1552),(1557,'recommend',1558),(1557,'recommend',1559),(1557,'recommend',1563),(1557,'recommend',1564),(1558,'depend',1552),(1558,'depend',1557),(1558,'recommend',1559),(1558,'recommend',1563),(1558,'recommend',1564),(1559,'depend',1552),(1559,'depend',1557),(1559,'recommend',1558),(1559,'recommend',1560),(1559,'recommend',1563),(1559,'recommend',1564),(1560,'depend',1552),(1560,'depend',1557),(1560,'recommend',1559),(1561,'depend',1552),(1561,'depend',1557),(1561,'recommend',1562),(1562,'depend',1552),(1562,'depend',1557),(1562,'recommend',1561),(1563,'depend',1552),(1563,'depend',1557),(1563,'recommend',1558),(1563,'recommend',1559),(1563,'recommend',1564),(1564,'depend',1552),(1564,'depend',1557),(1564,'recommend',1558),(1564,'recommend',1563),(1564,'recommend',1565),(1565,'depend',1552),(1565,'depend',1557),(1565,'recommend',1564),(1566,'depend',1552),(1566,'depend',1557),(1566,'recommend',1563),(1566,'recommend',1564),(1567,'recommend',1568),(1567,'recommend',1569),(1567,'recommend',1589),(1568,'depend',1567),(1568,'recommend',1569),(1568,'recommend',1589),(1569,'depend',1567),(1569,'recommend',1568),(1569,'recommend',1589),(1570,'depend',1567),(1570,'recommend',1568),(1570,'recommend',1569),(1571,'depend',1567),(1571,'recommend',1568),(1571,'recommend',1569),(1572,'depend',1567),(1572,'recommend',1573),(1572,'recommend',1574),(1572,'recommend',1578),(1572,'recommend',1579),(1573,'depend',1567),(1573,'depend',1572),(1573,'recommend',1574),(1573,'recommend',1578),(1573,'recommend',1579),(1574,'depend',1567),(1574,'depend',1572),(1574,'recommend',1573),(1574,'recommend',1575),(1574,'recommend',1578),(1574,'recommend',1579),(1575,'depend',1567),(1575,'depend',1572),(1575,'recommend',1574),(1576,'depend',1567),(1576,'depend',1572),(1576,'recommend',1577),(1577,'depend',1567),(1577,'depend',1572),(1577,'recommend',1576),(1578,'depend',1567),(1578,'depend',1572),(1578,'recommend',1573),(1578,'recommend',1574),(1578,'recommend',1579),(1579,'depend',1567),(1579,'depend',1572),(1579,'recommend',1573),(1579,'recommend',1578),(1579,'recommend',1580),(1580,'depend',1567),(1580,'depend',1572),(1580,'recommend',1579),(1581,'depend',1567),(1581,'depend',1572),(1581,'recommend',1578),(1583,'depend',1492),(1583,'recommend',1493),(1583,'recommend',1494),(1584,'depend',1491),(1584,'recommend',497),(1584,'recommend',498),(1585,'depend',1507),(1585,'recommend',1508),(1585,'recommend',1509),(1586,'depend',1522),(1586,'recommend',1523),(1586,'recommend',1524),(1587,'depend',1537),(1587,'recommend',1538),(1587,'recommend',1539),(1588,'depend',1552),(1588,'recommend',1553),(1588,'recommend',1554),(1589,'depend',1567),(1589,'recommend',1568),(1589,'recommend',1569),(1615,'depend',558),(1615,'recommend',1616),(1615,'recommend',1617),(1615,'recommend',1618),(1616,'depend',558),(1616,'recommend',1615),(1616,'recommend',1617),(1616,'recommend',1618),(1617,'depend',558),(1617,'recommend',1615),(1617,'recommend',1616),(1617,'recommend',1618),(1618,'depend',558),(1618,'recommend',1615),(1618,'recommend',1616),(1618,'recommend',1617),(1619,'depend',558),(1620,'depend',558),(1621,'depend',1620),(1622,'depend',1623),(1624,'depend',1622),(1624,'recommend',1625),(1624,'recommend',1626),(1624,'recommend',1627),(1625,'depend',1622),(1625,'recommend',1624),(1625,'recommend',1626),(1625,'recommend',1627),(1626,'depend',1622),(1626,'recommend',1624),(1626,'recommend',1625),(1626,'recommend',1627),(1627,'depend',1622),(1627,'recommend',1624),(1627,'recommend',1625),(1627,'recommend',1626),(1628,'depend',1623),(1631,'depend',1623),(1632,'depend',1623),(1633,'depend',1623),(1634,'depend',1623),(1635,'depend',1623),(1636,'depend',1623),(1637,'depend',1623),(1638,'depend',1623),(1639,'depend',1623),(1640,'depend',1623),(1641,'depend',1623),(1642,'depend',1623),(1643,'depend',1623),(1644,'depend',1623),(1645,'depend',1623),(1649,'depend',1648),(1649,'recommend',1650),(1649,'recommend',1651),(1650,'depend',1648),(1650,'recommend',1649),(1650,'recommend',1651),(1651,'depend',1648),(1651,'recommend',1649),(1651,'recommend',1650),(1652,'depend',1648),(1654,'depend',1653),(1654,'recommend',1655),(1654,'recommend',1656),(1655,'depend',1653),(1655,'recommend',1654),(1655,'recommend',1656),(1656,'depend',1653),(1656,'recommend',1654),(1656,'recommend',1655),(1664,'depend',652),(1664,'depend',656),(1664,'depend',682),(1673,'depend',421),(1673,'recommend',1674),(1673,'recommend',1676),(1673,'recommend',1677),(1674,'depend',421),(1674,'recommend',1673),(1674,'recommend',1676),(1674,'recommend',1677),(1675,'depend',421),(1676,'depend',421),(1676,'recommend',1673),(1676,'recommend',1674),(1676,'recommend',1677),(1677,'depend',421),(1677,'recommend',1673),(1677,'recommend',1674),(1677,'recommend',1676),(1679,'recommend',451),(1682,'recommend',430),(1694,'depend',1051),(1694,'recommend',1047),(1695,'depend',1646),(1701,'recommend',1702),(1701,'recommend',1711),(1701,'recommend',1715),(1701,'recommend',1716),(1701,'recommend',1717),(1702,'recommend',1701),(1702,'recommend',1711),(1702,'recommend',1715),(1702,'recommend',1716),(1702,'recommend',1717),(1703,'depend',1702),(1703,'recommend',1704),(1703,'recommend',1705),(1703,'recommend',1766),(1704,'depend',1702),(1704,'recommend',1703),(1704,'recommend',1705),(1704,'recommend',1766),(1705,'depend',1702),(1705,'recommend',1703),(1705,'recommend',1704),(1705,'recommend',1766),(1706,'recommend',1707),(1706,'recommend',1718),(1707,'recommend',1706),(1707,'recommend',1718),(1709,'recommend',1710),(1709,'recommend',1714),(1710,'recommend',1709),(1710,'recommend',1714),(1711,'recommend',1701),(1711,'recommend',1702),(1711,'recommend',1703),(1711,'recommend',1704),(1711,'recommend',1705),(1711,'recommend',1715),(1711,'recommend',1716),(1711,'recommend',1717),(1711,'recommend',1723),(1711,'recommend',1724),(1711,'recommend',1766),(1714,'recommend',1709),(1714,'recommend',1710),(1715,'recommend',1701),(1715,'recommend',1702),(1715,'recommend',1711),(1715,'recommend',1716),(1715,'recommend',1717),(1716,'recommend',1701),(1716,'recommend',1702),(1716,'recommend',1711),(1716,'recommend',1715),(1716,'recommend',1717),(1717,'recommend',1701),(1717,'recommend',1702),(1717,'recommend',1711),(1717,'recommend',1715),(1717,'recommend',1716),(1718,'recommend',1706),(1718,'recommend',1707),(1719,'recommend',1720),(1719,'recommend',1721),(1720,'recommend',1719),(1720,'recommend',1721),(1721,'recommend',1719),(1721,'recommend',1720),(1723,'depend',1711),(1724,'depend',1711),(1725,'depend',1702),(1726,'depend',1715),(1727,'depend',1716),(1728,'depend',1717),(1740,'depend',1739),(1745,'depend',1744),(1745,'recommend',1746),(1746,'depend',1744),(1746,'recommend',1745),(1747,'depend',1744),(1748,'depend',1744),(1748,'recommend',1749),(1748,'recommend',1755),(1748,'recommend',1756),(1749,'depend',1744),(1749,'recommend',1748),(1749,'recommend',1755),(1749,'recommend',1756),(1750,'depend',1744),(1751,'depend',1744),(1751,'recommend',1752),(1751,'recommend',1753),(1752,'depend',1744),(1752,'recommend',1751),(1752,'recommend',1753),(1753,'depend',1744),(1753,'recommend',1751),(1753,'recommend',1752),(1754,'depend',1744),(1755,'depend',1744),(1755,'recommend',1748),(1755,'recommend',1749),(1755,'recommend',1756),(1756,'depend',1744),(1756,'recommend',1748),(1756,'recommend',1749),(1756,'recommend',1755),(1757,'depend',1744),(1758,'depend',1744),(1758,'recommend',1759),(1759,'depend',1744),(1759,'recommend',1758),(1760,'depend',1744),(1761,'depend',1744),(1765,'depend',1744),(1766,'depend',1702),(1766,'recommend',1703),(1766,'recommend',1704),(1766,'recommend',1705),(2062,'depend',2061),(2062,'recommend',2063),(2062,'recommend',2065),(2063,'depend',2061),(2063,'depend',2064),(2063,'depend',2067),(2063,'recommend',2062),(2063,'recommend',2065),(2064,'depend',2061),(2065,'depend',2061),(2065,'depend',2064),(2066,'depend',2061),(2066,'depend',2064),(2066,'depend',2067),(2067,'depend',2061),(2067,'depend',2064),(2068,'recommend',2070),(2068,'recommend',2071),(2069,'depend',2068),(2069,'recommend',2070),(2069,'recommend',2071),(2069,'recommend',2072),(2070,'depend',2068),(2070,'depend',2071),(2070,'recommend',2069),(2070,'recommend',2072),(2071,'depend',2068),(2071,'recommend',2070),(2071,'recommend',2072),(2071,'recommend',2073),(2071,'recommend',2074),(2072,'depend',2068),(2072,'depend',2071),(2072,'recommend',2069),(2072,'recommend',2070),(2072,'recommend',2073),(2073,'depend',2068),(2073,'depend',2071),(2073,'recommend',2069),(2073,'recommend',2070),(2073,'recommend',2072),(2074,'depend',2068),(2074,'depend',2071),(2074,'recommend',2069),(2074,'recommend',2070),(2075,'recommend',2079),(2076,'depend',2075),(2076,'depend',2079),(2076,'recommend',2077),(2076,'recommend',2078),(2076,'recommend',2080),(2076,'recommend',2081),(2076,'recommend',2083),(2076,'recommend',2084),(2077,'depend',2075),(2077,'depend',2079),(2077,'recommend',2076),(2078,'depend',2075),(2078,'recommend',2077),(2078,'recommend',2080),(2079,'depend',2075),(2079,'recommend',2076),(2079,'recommend',2078),(2079,'recommend',2080),(2079,'recommend',2081),(2079,'recommend',2082),(2079,'recommend',2083),(2079,'recommend',2084),(2080,'depend',2075),(2080,'recommend',2076),(2080,'recommend',2078),(2080,'recommend',2092),(2080,'recommend',2093),(2081,'depend',2075),(2081,'depend',2079),(2081,'recommend',2076),(2081,'recommend',2077),(2081,'recommend',2078),(2081,'recommend',2080),(2081,'recommend',2092),(2081,'recommend',2093),(2082,'depend',2075),(2082,'depend',2079),(2082,'recommend',2076),(2082,'recommend',2077),(2082,'recommend',2078),(2082,'recommend',2080),(2082,'recommend',2081),(2082,'recommend',2092),(2082,'recommend',2093),(2083,'depend',2075),(2083,'depend',2079),(2083,'recommend',2076),(2083,'recommend',2077),(2083,'recommend',2078),(2083,'recommend',2080),(2083,'recommend',2081),(2083,'recommend',2092),(2083,'recommend',2093),(2084,'depend',2075),(2084,'depend',2079),(2084,'recommend',2076),(2084,'recommend',2077),(2084,'recommend',2078),(2084,'recommend',2080),(2084,'recommend',2081),(2084,'recommend',2092),(2084,'recommend',2093),(2085,'recommend',2075),(2085,'recommend',2079),(2086,'depend',2075),(2086,'depend',2088),(2086,'depend',2090),(2087,'depend',2075),(2087,'recommend',2089),(2087,'recommend',2090),(2088,'depend',2075),(2088,'recommend',2089),(2088,'recommend',2090),(2089,'depend',2075),(2090,'depend',2075),(2091,'depend',2075),(2091,'depend',2079),(2092,'depend',2075),(2092,'depend',2079),(2092,'recommend',2076),(2092,'recommend',2077),(2092,'recommend',2078),(2092,'recommend',2080),(2092,'recommend',2093),(2093,'depend',2075),(2093,'depend',2079),(2093,'recommend',2076),(2093,'recommend',2077),(2093,'recommend',2078),(2093,'recommend',2080),(2093,'recommend',2092),(2094,'depend',2075),(2094,'depend',2079),(2094,'recommend',2076),(2094,'recommend',2077),(2094,'recommend',2078),(2094,'recommend',2080),(2095,'recommend',2096),(2095,'recommend',2098),(2095,'recommend',2099),(2096,'depend',2095),(2096,'recommend',2097),(2096,'recommend',2099),(2097,'depend',2095),(2097,'depend',2096),(2097,'recommend',2103),(2097,'recommend',2104),(2098,'depend',2095),(2098,'depend',2096),(2098,'recommend',2099),(2099,'depend',2095),(2099,'depend',2096),(2099,'recommend',2098),(2100,'depend',2095),(2100,'depend',2096),(2100,'recommend',2102),(2101,'depend',2095),(2101,'depend',2096),(2102,'depend',2095),(2102,'depend',2096),(2102,'recommend',2100),(2103,'depend',2095),(2103,'depend',2096),(2103,'recommend',2104),(2104,'depend',2095),(2104,'depend',2096),(2104,'recommend',2103),(2108,'depend',1648),(2108,'depend',1651),(2109,'depend',2075),(2109,'recommend',2110),(2109,'recommend',2111),(2110,'depend',2075),(2110,'recommend',2109),(2111,'depend',2075),(2111,'depend',2110),(2111,'recommend',2076),(2111,'recommend',2077),(2111,'recommend',2109),(2112,'depend',65),(2112,'recommend',121),(2112,'recommend',122),(2112,'recommend',123),(2113,'depend',2061),(2113,'depend',2064),(2113,'recommend',2062),(2113,'recommend',2063),(2113,'recommend',2114),(2114,'depend',2061),(2114,'depend',2064),(2114,'recommend',2062),(2114,'recommend',2063),(2114,'recommend',2113); +REPLACE INTO `zt_priv` (`id`, `module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES (1,'index','index',349,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(2,'my','index',18,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(3,'my','todo',4,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(4,'my','work',18,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(5,'my','contribute',18,',open,biz,max,ipd,',',rnd,lite,','1',3),(6,'my','project',18,',open,biz,max,ipd,',',rnd,lite,','1',4),(7,'my','profile',9,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(8,'my','uploadAvatar',9,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(9,'my','preference',10,',open,biz,max,ipd,',',rnd,','1',40),(10,'my','dynamic',18,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(11,'my','editProfile',9,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(12,'my','changePassword',9,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(13,'my','manageContacts',8,',open,biz,max,ipd,',',rnd,lite,or,','1',60),(14,'my','deleteContacts',8,',open,biz,max,ipd,',',rnd,lite,or,','1',65),(15,'my','score',18,',open,biz,max,ipd,',',rnd,lite,','1',70),(16,'my','team',165,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(17,'my','execution',18,',open,biz,max,ipd,',',rnd,lite,','1',5),(18,'my','doc',18,',open,biz,max,ipd,',',rnd,lite,','1',55),(19,'my','audit',18,',open,biz,max,ipd,',',rnd,or,','1',7),(20,'my','meeting',18,',max,ipd,',',rnd,','1',8),(21,'my','calendar',4,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(22,'my','effort',291,',biz,max,ipd,',',rnd,lite,','1',1),(23,'my','review',18,',biz,max,ipd,',',rnd,lite,','1',9),(24,'todo','create',5,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(25,'todo','createcycle',5,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(26,'todo','batchCreate',5,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(27,'todo','edit',5,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(28,'todo','batchEdit',5,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(29,'todo','view',4,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(30,'todo','delete',6,',open,biz,max,ipd,',',rnd,lite,or,','1',35),(31,'todo','export',7,',open,biz,max,ipd,',',rnd,lite,or,','1',40),(32,'todo','start',5,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(33,'todo','finish',5,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(34,'todo','batchFinish',5,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(35,'todo','import2Today',5,',open,biz,max,ipd,',',rnd,lite,or,','1',12),(36,'todo','assignTo',5,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(37,'todo','activate',5,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(38,'todo','close',5,',open,biz,max,ipd,',',rnd,lite,or,','1',9),(39,'todo','batchClose',5,',open,biz,max,ipd,',',rnd,lite,or,','1',11),(40,'todo','calendar',4,',biz,max,ipd,',',rnd,lite,','1',85),(41,'program','browse',11,',open,biz,max,ipd,',',rnd,','1',0),(42,'program','kanban',11,',open,biz,max,ipd,',',rnd,','1',1),(43,'program','view',11,',open,biz,max,ipd,',',rnd,','1',2),(44,'program','product',11,',open,biz,max,ipd,',',rnd,','1',3),(45,'program','create',12,',open,biz,max,ipd,',',rnd,','1',25),(46,'program','edit',12,',open,biz,max,ipd,',',rnd,','1',30),(47,'program','start',12,',open,biz,max,ipd,',',rnd,','1',35),(48,'program','suspend',12,',open,biz,max,ipd,',',rnd,','1',40),(49,'program','activate',12,',open,biz,max,ipd,',',rnd,','1',45),(50,'program','close',12,',open,biz,max,ipd,',',rnd,','1',50),(51,'program','delete',13,',open,biz,max,ipd,',',rnd,','1',55),(52,'program','project',11,',open,biz,max,ipd,',',rnd,','1',4),(53,'program','stakeholder',17,',open,biz,max,ipd,',',rnd,','1',65),(54,'program','createStakeholder',17,',open,biz,max,ipd,',',rnd,','1',70),(55,'program','unlinkStakeholder',17,',open,biz,max,ipd,',',rnd,','1',75),(56,'program','batchUnlinkStakeholders',17,',open,biz,max,ipd,',',rnd,','1',80),(57,'program','unbindWhitelist',16,',open,biz,max,ipd,',',rnd,','1',85),(58,'program','updateOrder',12,',open,biz,max,ipd,',',rnd,','1',90),(59,'personnel','accessible',15,',open,biz,max,ipd,',',rnd,lite,','1',5),(60,'personnel','invest',14,',open,biz,max,ipd,',',rnd,lite,','1',10),(61,'personnel','whitelist',16,',open,biz,max,ipd,',',rnd,lite,','1',15),(62,'personnel','addWhitelist',16,',open,biz,max,ipd,',',rnd,lite,','1',20),(63,'product','index',19,',open,biz,max,ipd,',',rnd,','1',0),(64,'product','browse',25,',open,biz,max,ipd,',',rnd,or,','1',10),(65,'product','requirement',31,',open,biz,max,ipd,',',rnd,or,','1',15),(66,'product','create',21,',open,biz,max,ipd,',',rnd,or,','1',20),(67,'product','view',19,',open,biz,max,ipd,',',rnd,or,','1',4),(68,'product','edit',21,',open,biz,max,ipd,',',rnd,or,','1',30),(69,'product','batchEdit',21,',open,biz,max,ipd,',',rnd,or,','1',35),(70,'product','delete',30,',open,biz,max,ipd,',',rnd,or,','1',40),(71,'product','roadmap',19,',open,biz,max,ipd,',',rnd,','1',5),(72,'product','track',19,',open,biz,max,ipd,',',rnd,','1',6),(73,'product','dynamic',19,',open,biz,max,ipd,',',rnd,or,','1',7),(74,'product','project',19,',open,biz,max,ipd,',',rnd,','1',8),(75,'product','dashboard',19,',open,biz,max,ipd,',',rnd,or,','1',3),(76,'product','close',21,',open,biz,max,ipd,',',rnd,or,','1',70),(77,'product','updateOrder',21,',open,biz,max,ipd,',',rnd,or,','1',75),(78,'product','all',19,',open,biz,max,ipd,',',rnd,or,','1',1),(79,'product','kanban',19,',open,biz,max,ipd,',',rnd,','1',2),(80,'product','manageLine',20,',open,biz,max,ipd,',',rnd,','1',90),(82,'product','export',22,',open,biz,max,ipd,',',rnd,or,','1',100),(83,'product','whitelist',23,',open,biz,max,ipd,',',rnd,or,','1',105),(84,'product','addWhitelist',23,',open,biz,max,ipd,',',rnd,or,','1',110),(85,'product','unbindWhitelist',23,',open,biz,max,ipd,',',rnd,or,','1',115),(86,'story','create',26,',open,biz,max,ipd,',',rnd,lite,','1',0),(87,'story','batchCreate',26,',open,biz,max,ipd,',',rnd,lite,','1',1),(88,'story','edit',26,',open,biz,max,ipd,',',rnd,lite,','1',2),(89,'story','export',27,',open,biz,max,ipd,',',rnd,lite,','1',0),(90,'story','delete',28,',open,biz,max,ipd,',',rnd,lite,','1',25),(91,'story','view',25,',open,biz,max,ipd,',',rnd,lite,','1',30),(92,'story','change',26,',open,biz,max,ipd,',',rnd,lite,','1',4),(93,'story','review',29,',open,biz,max,ipd,',',rnd,lite,','1',40),(94,'story','submitReview',26,',open,biz,max,ipd,',',rnd,lite,','1',5),(95,'story','batchReview',29,',open,biz,max,ipd,',',rnd,lite,','1',50),(96,'story','recall',26,',open,biz,max,ipd,',',rnd,lite,','1',6),(97,'story','close',26,',open,biz,max,ipd,',',rnd,lite,','1',7),(98,'story','batchClose',26,',open,biz,max,ipd,',',rnd,lite,','1',8),(99,'story','batchChangePlan',26,',open,biz,max,ipd,',',rnd,lite,','1',9),(100,'story','batchChangeStage',26,',open,biz,max,ipd,',',rnd,lite,','1',10),(101,'story','assignTo',26,',open,biz,max,ipd,',',rnd,lite,','1',11),(102,'story','batchAssignTo',26,',open,biz,max,ipd,',',rnd,lite,','1',12),(103,'story','activate',26,',open,biz,max,ipd,',',rnd,lite,','1',13),(104,'story','tasks',25,',open,biz,max,ipd,',',rnd,lite,','1',95),(105,'story','bugs',25,',open,biz,max,ipd,',',rnd,','1',100),(106,'story','cases',25,',open,biz,max,ipd,',',rnd,','1',105),(107,'story','report',25,',open,biz,max,ipd,',',rnd,lite,','1',110),(108,'story','linkStory',26,',open,biz,max,ipd,',',rnd,lite,','1',14),(109,'story','batchChangeBranch',26,',open,biz,max,ipd,',',rnd,lite,','1',15),(110,'story','batchChangeModule',26,',open,biz,max,ipd,',',rnd,lite,','1',16),(111,'story','batchToTask',45,',open,biz,max,ipd,',',rnd,lite,','1',130),(112,'story','processStoryChange',26,',open,biz,max,ipd,',',rnd,lite,','1',17),(113,'story','linkStories',26,',open,biz,max,ipd,',',rnd,','1',18),(114,'story','relieved',26,',open,biz,max,ipd,',',rnd,','1',20),(115,'story','batchEdit',26,',open,biz,max,ipd,',',rnd,lite,','1',3),(116,'story','import',27,',biz,max,ipd,',',rnd,','1',2),(117,'story','exportTemplate',27,',biz,max,ipd,',',rnd,','1',1),(118,'story','importToLib',263,',max,ipd,',',rnd,','1',165),(119,'story','batchImportToLib',263,',max,ipd,',',rnd,','1',170),(120,'story','relation',26,',max,ipd,',',rnd,','1',19),(121,'requirement','create',32,',open,biz,max,ipd,',',rnd,or,','1',5),(122,'requirement','batchCreate',32,',open,biz,max,ipd,',',rnd,or,','1',10),(123,'requirement','edit',32,',open,biz,max,ipd,',',rnd,or,','1',15),(124,'requirement','export',33,',open,biz,max,ipd,',',rnd,or,','1',20),(125,'requirement','delete',32,',open,biz,max,ipd,',',rnd,or,','1',25),(126,'requirement','view',31,',open,biz,max,ipd,',',rnd,or,','1',30),(127,'requirement','change',32,',open,biz,max,ipd,',',rnd,or,','1',35),(128,'requirement','review',35,',open,biz,max,ipd,',',rnd,or,','1',40),(129,'requirement','submitReview',32,',open,biz,max,ipd,',',rnd,or,','1',45),(130,'requirement','batchReview',35,',open,biz,max,ipd,',',rnd,or,','1',50),(131,'requirement','recall',32,',open,biz,max,ipd,',',rnd,or,','1',55),(132,'requirement','close',32,',open,biz,max,ipd,',',rnd,or,','1',60),(133,'requirement','batchClose',32,',open,biz,max,ipd,',',rnd,or,','1',65),(134,'requirement','assignTo',32,',open,biz,max,ipd,',',rnd,or,','1',70),(135,'requirement','batchAssignTo',32,',open,biz,max,ipd,',',rnd,or,','1',75),(136,'requirement','activate',32,',open,biz,max,ipd,',',rnd,or,','1',80),(137,'requirement','report',31,',open,biz,max,ipd,',',rnd,or,','1',85),(138,'requirement','linkStory',32,',open,biz,max,ipd,',',rnd,or,','1',90),(139,'requirement','batchChangeBranch',32,',open,biz,max,ipd,',',rnd,or,','1',95),(140,'requirement','batchChangeModule',32,',open,biz,max,ipd,',',rnd,or,','1',100),(141,'requirement','linkRequirements',32,',open,biz,max,ipd,',',rnd,or,','1',105),(142,'requirement','batchEdit',32,',open,biz,max,ipd,',',rnd,or,','1',110),(143,'requirement','import',33,',max,ipd,',',rnd,or,','1',115),(144,'requirement','exportTemplate',33,',max,ipd,',',rnd,or,','1',120),(145,'productplan','browse',36,',open,biz,max,ipd,',',rnd,','1',5),(146,'productplan','create',37,',open,biz,max,ipd,',',rnd,','1',10),(147,'productplan','edit',37,',open,biz,max,ipd,',',rnd,','1',15),(148,'productplan','delete',38,',open,biz,max,ipd,',',rnd,','1',20),(149,'productplan','view',36,',open,biz,max,ipd,',',rnd,','1',25),(150,'productplan','linkStory',37,',open,biz,max,ipd,',',rnd,','1',30),(151,'productplan','unlinkStory',37,',open,biz,max,ipd,',',rnd,','1',35),(152,'productplan','batchUnlinkStory',37,',open,biz,max,ipd,',',rnd,','1',40),(153,'productplan','linkBug',37,',open,biz,max,ipd,',',rnd,','1',45),(154,'productplan','unlinkBug',37,',open,biz,max,ipd,',',rnd,','1',50),(155,'productplan','batchUnlinkBug',37,',open,biz,max,ipd,',',rnd,','1',55),(156,'productplan','batchEdit',37,',open,biz,max,ipd,',',rnd,','1',60),(157,'productplan','start',37,',open,biz,max,ipd,',',rnd,','1',65),(158,'productplan','finish',37,',open,biz,max,ipd,',',rnd,','1',70),(159,'productplan','close',37,',open,biz,max,ipd,',',rnd,','1',75),(160,'productplan','activate',37,',open,biz,max,ipd,',',rnd,','1',80),(161,'productplan','batchChangeStatus',37,',open,biz,max,ipd,',',rnd,','1',85),(162,'release','browse',39,',open,biz,max,ipd,',',rnd,','1',5),(163,'release','create',40,',open,biz,max,ipd,',',rnd,','1',10),(164,'release','edit',40,',open,biz,max,ipd,',',rnd,','1',15),(165,'release','delete',42,',open,biz,max,ipd,',',rnd,','1',20),(166,'release','view',39,',open,biz,max,ipd,',',rnd,','1',25),(167,'release','export',41,',open,biz,max,ipd,',',rnd,','1',30),(168,'release','linkStory',40,',open,biz,max,ipd,',',rnd,','1',35),(169,'release','unlinkStory',40,',open,biz,max,ipd,',',rnd,','1',40),(170,'release','batchUnlinkStory',40,',open,biz,max,ipd,',',rnd,','1',45),(171,'release','linkBug',40,',open,biz,max,ipd,',',rnd,','1',50),(172,'release','unlinkBug',40,',open,biz,max,ipd,',',rnd,','1',55),(173,'release','batchUnlinkBug',40,',open,biz,max,ipd,',',rnd,','1',60),(174,'release','changeStatus',40,',open,biz,max,ipd,',',rnd,','1',65),(175,'release','notify',43,',open,biz,max,ipd,',',rnd,','1',70),(176,'project','index',46,',open,biz,max,ipd,',',rnd,lite,','1',5),(177,'project','browse',46,',open,biz,max,ipd,',',rnd,lite,','1',40),(178,'project','kanban',46,',open,biz,max,ipd,',',rnd,lite,','1',15),(179,'project','create',47,',open,biz,max,ipd,',',rnd,lite,','1',0),(180,'project','edit',47,',open,biz,max,ipd,',',rnd,lite,','1',1),(181,'project','batchEdit',47,',open,biz,max,ipd,',',rnd,lite,','1',2),(182,'project','group',50,',open,biz,max,ipd,',',rnd,lite,','1',0),(183,'project','createGroup',50,',open,biz,max,ipd,',',rnd,lite,','1',1),(184,'project','managePriv',50,',open,biz,max,ipd,',',rnd,lite,','1',3),(185,'project','manageMembers',50,',open,biz,max,ipd,',',rnd,lite,','1',6),(186,'project','manageGroupMember',50,',open,biz,max,ipd,',',rnd,lite,','1',4),(187,'project','copyGroup',50,',open,biz,max,ipd,',',rnd,lite,','1',5),(188,'project','editGroup',50,',open,biz,max,ipd,',',rnd,lite,','1',2),(189,'project','start',47,',open,biz,max,ipd,',',rnd,lite,','1',3),(190,'project','suspend',47,',open,biz,max,ipd,',',rnd,lite,','1',4),(191,'project','close',47,',open,biz,max,ipd,',',rnd,lite,','1',6),(192,'project','activate',47,',open,biz,max,ipd,',',rnd,lite,','1',5),(193,'project','updateOrder',47,',open,biz,max,ipd,',',rnd,lite,','1',7),(194,'project','delete',51,',open,biz,max,ipd,',',rnd,lite,','1',95),(195,'project','view',46,',open,biz,max,ipd,',',rnd,lite,','1',100),(196,'project','whitelist',52,',open,biz,max,ipd,',',rnd,lite,','1',105),(197,'project','addWhitelist',52,',open,biz,max,ipd,',',rnd,lite,','1',110),(198,'project','unbindWhitelist',52,',open,biz,max,ipd,',',rnd,lite,','1',115),(199,'project','manageProducts',47,',open,biz,max,ipd,',',rnd,','1',8),(200,'project','dynamic',46,',open,biz,max,ipd,',',rnd,lite,','1',125),(203,'project','bug',292,',open,biz,max,ipd,',',rnd,','1',140),(204,'project','testcase',292,',open,biz,max,ipd,',',rnd,','1',145),(205,'project','testtask',292,',open,biz,max,ipd,',',rnd,','1',150),(206,'project','testreport',292,',open,biz,max,ipd,',',rnd,','1',155),(207,'project','execution',46,',open,biz,max,ipd,',',rnd,lite,','1',160),(208,'project','export',48,',open,biz,max,ipd,',',rnd,lite,','1',165),(209,'project','team',50,',open,biz,max,ipd,',',rnd,lite,','1',7),(210,'project','unlinkMember',50,',open,biz,max,ipd,',',rnd,lite,','1',8),(212,'project','programTitle',47,',open,biz,max,ipd,',',rnd,','1',9),(213,'project','approval',302,',max,ipd,',',rnd,','1',5),(214,'projectplan','browse',44,',open,biz,max,ipd,',',rnd,','1',0),(215,'projectplan','create',44,',open,biz,max,ipd,',',rnd,','1',2),(216,'projectplan','edit',44,',open,biz,max,ipd,',',rnd,','1',3),(217,'projectplan','view',44,',open,biz,max,ipd,',',rnd,','1',1),(218,'projectstory','story',313,',open,biz,max,ipd,',',rnd,lite,','1',5),(219,'projectstory','track',293,',max,',',rnd,','1',10),(220,'projectstory','view',313,',open,biz,max,ipd,',',rnd,lite,','1',15),(221,'projectstory','linkStory',45,',open,biz,max,ipd,',',rnd,lite,','1',20),(222,'projectstory','importplanstories',45,',open,biz,max,ipd,',',rnd,','1',25),(223,'projectstory','unlinkStory',45,',open,biz,max,ipd,',',rnd,lite,','1',30),(224,'projectstory','batchUnlinkStory',45,',open,biz,max,ipd,',',rnd,lite,','1',35),(225,'projectstory','importFromLib',45,',max,ipd,',',rnd,','1',40),(226,'execution','view',53,',open,biz,max,ipd,',',rnd,lite,','1',2),(228,'execution','create',54,',open,biz,max,ipd,',',rnd,lite,','1',0),(229,'execution','edit',54,',open,biz,max,ipd,',',rnd,lite,','1',2),(230,'execution','batchedit',54,',open,biz,max,ipd,',',rnd,lite,','1',3),(231,'execution','batchchangestatus',54,',open,biz,max,ipd,',',rnd,','1',4),(232,'execution','start',54,',open,biz,max,ipd,',',rnd,lite,','1',5),(233,'execution','activate',54,',open,biz,max,ipd,',',rnd,lite,','1',6),(234,'execution','putoff',54,',open,biz,max,ipd,',',rnd,lite,','1',7),(235,'execution','suspend',54,',open,biz,max,ipd,',',rnd,lite,','1',8),(236,'execution','close',54,',open,biz,max,ipd,',',rnd,lite,','1',9),(237,'execution','delete',55,',open,biz,max,ipd,',',rnd,lite,','1',60),(238,'execution','task',60,',open,biz,max,ipd,',',rnd,lite,','1',65),(239,'execution','grouptask',66,',open,biz,max,ipd,',',rnd,lite,','1',0),(240,'execution','importtask',61,',open,biz,max,ipd,',',rnd,lite,','1',15),(241,'execution','importplanstories',61,',open,biz,max,ipd,',',rnd,','1',16),(242,'execution','importBug',61,',open,biz,max,ipd,',',rnd,','1',17),(243,'execution','story',311,',open,biz,max,ipd,',',rnd,lite,','1',0),(244,'execution','build',309,',open,biz,max,ipd,',',rnd,','1',0),(245,'execution','testcase',290,',open,biz,max,ipd,',',rnd,','1',1),(246,'execution','bug',290,',open,biz,max,ipd,',',rnd,','1',0),(247,'execution','testtask',290,',open,biz,max,ipd,',',rnd,','1',2),(248,'execution','testreport',290,',open,biz,max,ipd,',',rnd,','1',3),(249,'execution','burn',67,',open,biz,max,ipd,',',rnd,','1',120),(250,'execution','computeBurn',67,',open,biz,max,ipd,',',rnd,','1',125),(251,'execution','cfd',68,',open,biz,max,ipd,',',rnd,','1',130),(252,'execution','computeCFD',68,',open,biz,max,ipd,',',rnd,','1',135),(253,'execution','fixFirst',67,',open,biz,max,ipd,',',rnd,','1',140),(255,'execution','team',64,',open,biz,max,ipd,',',rnd,lite,','1',0),(256,'execution','dynamic',53,',open,biz,max,ipd,',',rnd,lite,','1',5),(257,'execution','manageProducts',54,',open,biz,max,ipd,',',rnd,','1',1),(258,'execution','manageMembers',64,',open,biz,max,ipd,',',rnd,lite,','1',1),(259,'execution','unlinkMember',64,',open,biz,max,ipd,',',rnd,lite,','1',2),(260,'execution','linkStory',69,',open,biz,max,ipd,',',rnd,lite,','1',3),(261,'execution','unlinkStory',69,',open,biz,max,ipd,',',rnd,lite,','1',4),(262,'execution','batchUnlinkStory',69,',open,biz,max,ipd,',',rnd,lite,','1',5),(263,'execution','updateOrder',53,',open,biz,max,ipd,',',rnd,lite,','1',1),(264,'execution','taskKanban',65,',open,biz,max,ipd,',',rnd,lite,','1',2),(265,'execution','printKanban',65,',open,biz,max,ipd,',',rnd,','1',4),(266,'execution','tree',345,',open,biz,max,ipd,',',rnd,lite,','1',1),(267,'execution','treeTask',345,',open,biz,max,ipd,',',rnd,lite,','1',2),(268,'execution','treeStory',345,',open,biz,max,ipd,',',rnd,lite,','1',3),(269,'execution','all',53,',open,biz,max,ipd,',',rnd,lite,','1',0),(270,'execution','export',56,',open,biz,max,ipd,',',rnd,lite,','1',225),(271,'execution','storyKanban',311,',open,biz,max,ipd,',',rnd,lite,','1',1),(272,'execution','storySort',69,',open,biz,max,ipd,',',rnd,lite,','1',6),(273,'execution','whitelist',57,',open,biz,max,ipd,',',rnd,lite,','1',240),(274,'execution','addWhitelist',57,',open,biz,max,ipd,',',rnd,lite,','1',245),(275,'execution','unbindWhitelist',57,',open,biz,max,ipd,',',rnd,lite,','1',250),(276,'execution','storyEstimate',69,',open,biz,max,ipd,',',rnd,','1',7),(277,'execution','executionkanban',65,',open,biz,max,ipd,',',rnd,','1',0),(278,'execution','kanban',65,',open,biz,max,ipd,',',rnd,lite,','1',1),(279,'execution','setKanban',65,',open,biz,max,ipd,',',rnd,','1',3),(280,'execution','doc',53,',open,biz,max,ipd,',',rnd,lite,','1',4),(281,'execution','storyView',311,',open,biz,max,ipd,',',rnd,','1',2),(282,'execution','calendar',347,',biz,max,ipd,',',rnd,lite,','1',6),(283,'execution','effortCalendar',53,',biz,max,ipd,',',rnd,','1',0),(284,'execution','effort',71,',biz,max,ipd,',',rnd,','1',255),(285,'execution','taskEffort',346,',biz,max,ipd,',',rnd,','1',4),(286,'execution','computeTaskEffort',346,',biz,max,ipd,',',rnd,','1',5),(287,'execution','deleterelation',308,',biz,max,ipd,',',rnd,','1',5),(288,'execution','maintainrelation',308,',biz,max,ipd,',',rnd,','1',3),(289,'execution','relation',308,',biz,max,ipd,',',rnd,','1',4),(290,'execution','gantt',58,',biz,max,ipd,',',rnd,lite,','1',0),(291,'execution','ganttsetting',58,',biz,max,ipd,',',rnd,','1',2),(292,'execution','ganttEdit',58,',biz,max,ipd,',',rnd,','1',1),(293,'kanban','space',283,',open,biz,max,ipd,',',rnd,lite,','1',0),(294,'kanban','createSpace',283,',open,biz,max,ipd,',',rnd,lite,','1',1),(295,'kanban','editSpace',283,',open,biz,max,ipd,',',rnd,lite,','1',2),(296,'kanban','closeSpace',283,',open,biz,max,ipd,',',rnd,lite,','1',4),(297,'kanban','deleteSpace',284,',open,biz,max,ipd,',',rnd,lite,','1',25),(299,'kanban','create',286,',open,biz,max,ipd,',',rnd,lite,','1',0),(300,'kanban','edit',286,',open,biz,max,ipd,',',rnd,lite,','1',1),(301,'kanban','view',285,',open,biz,max,ipd,',',rnd,lite,','1',45),(302,'kanban','close',286,',open,biz,max,ipd,',',rnd,lite,','1',3),(303,'kanban','delete',287,',open,biz,max,ipd,',',rnd,lite,','1',55),(304,'kanban','createRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',14),(305,'kanban','editRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',15),(306,'kanban','sortRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',16),(307,'kanban','sortGroup',286,',open,biz,max,ipd,',',rnd,lite,','1',22),(308,'kanban','deleteRegion',286,',open,biz,max,ipd,',',rnd,lite,','1',17),(309,'kanban','createLane',286,',open,biz,max,ipd,',',rnd,lite,','1',18),(310,'kanban','sortLane',286,',open,biz,max,ipd,',',rnd,lite,','1',21),(311,'kanban','deleteLane',286,',open,biz,max,ipd,',',rnd,lite,','1',23),(312,'kanban','createColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',5),(313,'kanban','setColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',7),(314,'kanban','setWIP',286,',open,biz,max,ipd,',',rnd,lite,','1',19),(315,'kanban','sortColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',9),(316,'kanban','deleteColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',13),(317,'kanban','createCard',312,',open,biz,max,ipd,',',rnd,lite,','1',0),(318,'kanban','editCard',312,',open,biz,max,ipd,',',rnd,lite,','1',2),(319,'kanban','viewCard',312,',open,biz,max,ipd,',',rnd,lite,','1',5),(320,'kanban','sortCard',312,',open,biz,max,ipd,',',rnd,lite,','1',7),(321,'kanban','deleteCard',312,',open,biz,max,ipd,',',rnd,lite,','1',8),(322,'kanban','assigntoCard',312,',open,biz,max,ipd,',',rnd,lite,','1',4),(323,'kanban','moveCard',312,',open,biz,max,ipd,',',rnd,lite,','1',6),(324,'kanban','setCardColor',312,',open,biz,max,ipd,',',rnd,lite,','1',3),(326,'kanban','viewArchivedColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',11),(327,'kanban','batchCreateCard',312,',open,biz,max,ipd,',',rnd,lite,','1',1),(328,'kanban','activateSpace',283,',open,biz,max,ipd,',',rnd,','1',5),(329,'kanban','setting',286,',open,biz,max,ipd,',',rnd,','1',2),(330,'kanban','activate',286,',open,biz,max,ipd,',',rnd,','1',4),(331,'kanban','editLaneColor',286,',open,biz,max,ipd,',',rnd,lite,','1',8),(332,'kanban','editLaneName',286,',open,biz,max,ipd,',',rnd,lite,','1',20),(333,'kanban','splitColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',6),(334,'kanban','archiveColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',10),(335,'kanban','restoreColumn',286,',open,biz,max,ipd,',',rnd,lite,','1',12),(336,'kanban','archiveCard',312,',open,biz,max,ipd,',',rnd,lite,','1',9),(337,'kanban','viewArchivedCard',312,',open,biz,max,ipd,',',rnd,lite,','1',10),(338,'kanban','restoreCard',312,',open,biz,max,ipd,',',rnd,lite,','1',11),(339,'programplan','create',171,',open,biz,max,ipd,',',rnd,','1',5),(340,'programplan','edit',171,',open,biz,max,ipd,',',rnd,','1',10),(341,'programplan','browse',307,',max,ipd,',',rnd,','1',15),(342,'programplan','ganttEdit',307,',max,ipd,',',rnd,','1',20),(343,'task','create',61,',open,biz,max,ipd,',',rnd,lite,','1',0),(344,'task','batchCreate',61,',open,biz,max,ipd,',',rnd,lite,','1',1),(345,'task','batchEdit',61,',open,biz,max,ipd,',',rnd,lite,','1',3),(346,'task','edit',61,',open,biz,max,ipd,',',rnd,lite,','1',2),(347,'task','assignTo',61,',open,biz,max,ipd,',',rnd,lite,','1',4),(348,'task','batchAssignTo',61,',open,biz,max,ipd,',',rnd,lite,','1',5),(349,'task','start',61,',open,biz,max,ipd,',',rnd,lite,','1',6),(350,'task','pause',61,',open,biz,max,ipd,',',rnd,lite,','1',7),(351,'task','restart',61,',open,biz,max,ipd,',',rnd,lite,','1',8),(352,'task','finish',61,',open,biz,max,ipd,',',rnd,lite,','1',9),(353,'task','cancel',61,',open,biz,max,ipd,',',rnd,lite,','1',10),(354,'task','close',61,',open,biz,max,ipd,',',rnd,lite,','1',12),(355,'task','batchClose',61,',open,biz,max,ipd,',',rnd,lite,','1',13),(356,'task','activate',61,',open,biz,max,ipd,',',rnd,lite,','1',14),(357,'task','delete',62,',open,biz,max,ipd,',',rnd,lite,','1',75),(358,'task','view',60,',open,biz,max,ipd,',',rnd,lite,','1',80),(359,'task','export',63,',open,biz,max,ipd,',',rnd,lite,','1',0),(360,'task','confirmStoryChange',61,',open,biz,max,ipd,',',rnd,lite,','1',18),(361,'task','recordEstimate',61,',open,biz,max,ipd,',',rnd,lite,','1',20),(362,'task','editEstimate',61,',open,biz,max,ipd,',',rnd,lite,','1',21),(363,'task','deleteEstimate',61,',open,biz,max,ipd,',',rnd,lite,','1',22),(364,'task','report',60,',open,biz,max,ipd,',',rnd,lite,','1',110),(365,'task','batchChangeModule',61,',open,biz,max,ipd,',',rnd,lite,','1',23),(366,'task','batchCancel',61,',open,biz,max,ipd,',',rnd,lite,','1',11),(367,'task','import',63,',biz,max,ipd,',',rnd,lite,','1',2),(368,'task','exportTemplate',63,',biz,max,ipd,',',rnd,lite,','1',1),(369,'task','confirmdesignchange',61,',max,ipd,',',rnd,','1',19),(370,'build','create',72,',open,biz,max,ipd,',',rnd,','1',2),(371,'build','edit',72,',open,biz,max,ipd,',',rnd,','1',3),(372,'build','delete',73,',open,biz,max,ipd,',',rnd,','1',15),(373,'build','view',309,',open,biz,max,ipd,',',rnd,','1',1),(374,'build','linkStory',72,',open,biz,max,ipd,',',rnd,','1',4),(375,'build','unlinkStory',72,',open,biz,max,ipd,',',rnd,','1',5),(376,'build','batchUnlinkStory',72,',open,biz,max,ipd,',',rnd,','1',6),(377,'build','linkBug',72,',open,biz,max,ipd,',',rnd,','1',7),(378,'build','unlinkBug',72,',open,biz,max,ipd,',',rnd,','1',8),(379,'build','batchUnlinkBug',72,',open,biz,max,ipd,',',rnd,','1',9),(380,'design','browse',175,',open,biz,max,ipd,',',rnd,','1',5),(381,'design','view',175,',open,biz,max,ipd,',',rnd,','1',10),(382,'design','create',176,',open,biz,max,ipd,',',rnd,','1',0),(383,'design','batchCreate',176,',open,biz,max,ipd,',',rnd,','1',1),(384,'design','edit',176,',open,biz,max,ipd,',',rnd,','1',3),(385,'design','assignTo',176,',open,biz,max,ipd,',',rnd,','1',2),(386,'design','delete',177,',open,biz,max,ipd,',',rnd,','1',35),(387,'design','linkCommit',176,',open,biz,max,ipd,',',rnd,','1',4),(388,'design','viewCommit',176,',open,biz,max,ipd,',',rnd,','1',6),(389,'design','unlinkCommit',176,',open,biz,max,ipd,',',rnd,','1',5),(390,'design','revision',176,',open,biz,max,ipd,',',rnd,','1',45),(391,'design','submit',176,',max,ipd,',',rnd,','1',7),(392,'design','setType',282,',max,ipd,',',rnd,','1',65),(393,'design','setPlusType',282,',max,ipd,',',rnd,','1',70),(394,'qa','index',136,',open,biz,max,ipd,',',rnd,','1',5),(395,'bug','browse',137,',open,biz,max,ipd,',',rnd,','1',5),(396,'bug','create',138,',open,biz,max,ipd,',',rnd,','1',0),(397,'bug','batchCreate',138,',open,biz,max,ipd,',',rnd,','1',1),(398,'bug','batchEdit',138,',open,biz,max,ipd,',',rnd,','1',3),(399,'bug','confirmBug',138,',open,biz,max,ipd,',',rnd,','1',4),(400,'bug','batchConfirm',138,',open,biz,max,ipd,',',rnd,','1',5),(401,'bug','view',137,',open,biz,max,ipd,',',rnd,','1',35),(402,'bug','edit',138,',open,biz,max,ipd,',',rnd,','1',2),(403,'bug','assignTo',138,',open,biz,max,ipd,',',rnd,','1',6),(404,'bug','batchAssignTo',138,',open,biz,max,ipd,',',rnd,','1',7),(405,'bug','resolve',138,',open,biz,max,ipd,',',rnd,','1',8),(406,'bug','batchResolve',138,',open,biz,max,ipd,',',rnd,','1',9),(407,'bug','batchClose',138,',open,biz,max,ipd,',',rnd,','1',11),(408,'bug','batchActivate',138,',open,biz,max,ipd,',',rnd,','1',13),(409,'bug','activate',138,',open,biz,max,ipd,',',rnd,','1',12),(410,'bug','close',138,',open,biz,max,ipd,',',rnd,','1',10),(411,'bug','report',137,',open,biz,max,ipd,',',rnd,','1',85),(412,'bug','export',140,',open,biz,max,ipd,',',rnd,','1',90),(413,'bug','confirmStoryChange',138,',open,biz,max,ipd,',',rnd,','1',14),(414,'bug','delete',139,',open,biz,max,ipd,',',rnd,','1',100),(415,'bug','linkBugs',138,',open,biz,max,ipd,',',rnd,','1',15),(416,'bug','batchChangeModule',138,',open,biz,max,ipd,',',rnd,','1',16),(417,'bug','batchChangeBranch',138,',open,biz,max,ipd,',',rnd,','1',17),(418,'bug','batchChangePlan',138,',open,biz,max,ipd,',',rnd,','1',18),(419,'bug','import',140,',biz,max,ipd,',',rnd,','1',125),(420,'bug','exportTemplate',140,',biz,max,ipd,',',rnd,','1',130),(421,'testcase','browse',141,',open,biz,max,ipd,',',rnd,','1',5),(422,'testcase','groupCase',141,',open,biz,max,ipd,',',rnd,','1',10),(423,'testcase','zeroCase',141,',open,biz,max,ipd,',',rnd,','1',15),(424,'testcase','create',142,',open,biz,max,ipd,',',rnd,','1',0),(425,'testcase','batchCreate',142,',open,biz,max,ipd,',',rnd,','1',1),(426,'testcase','createBug',142,',open,biz,max,ipd,',',rnd,','1',5),(427,'testcase','view',141,',open,biz,max,ipd,',',rnd,','1',35),(428,'testcase','edit',142,',open,biz,max,ipd,',',rnd,','1',2),(429,'testcase','delete',144,',open,biz,max,ipd,',',rnd,','1',45),(430,'testcase','export',143,',open,biz,max,ipd,',',rnd,','1',0),(431,'testcase','confirmChange',142,',open,biz,max,ipd,',',rnd,','1',6),(432,'testcase','confirmStoryChange',142,',open,biz,max,ipd,',',rnd,','1',7),(433,'testcase','batchEdit',142,',open,biz,max,ipd,',',rnd,','1',3),(434,'testcase','batchDelete',144,',open,biz,max,ipd,',',rnd,','1',70),(435,'testcase','batchChangeModule',142,',open,biz,max,ipd,',',rnd,','1',9),(436,'testcase','batchChangeBranch',142,',open,biz,max,ipd,',',rnd,','1',10),(437,'testcase','linkCases',142,',open,biz,max,ipd,',',rnd,','1',12),(438,'testcase','linkBugs',142,',open,biz,max,ipd,',',rnd,','1',13),(439,'testcase','bugs',141,',open,biz,max,ipd,',',rnd,','1',95),(440,'testcase','review',145,',open,biz,max,ipd,',',rnd,','1',100),(441,'testcase','batchReview',145,',open,biz,max,ipd,',',rnd,','1',105),(442,'testcase','batchConfirmStoryChange',142,',open,biz,max,ipd,',',rnd,','1',8),(443,'testcase','importFromLib',143,',open,biz,max,ipd,',',rnd,','1',5),(444,'testcase','batchCaseTypeChange',142,',open,biz,max,ipd,',',rnd,','1',11),(445,'testcase','confirmLibcaseChange',142,',open,biz,max,ipd,',',rnd,','1',14),(446,'testcase','ignoreLibcaseChange',142,',open,biz,max,ipd,',',rnd,','1',15),(447,'testcase','importToLib',266,',open,biz,max,ipd,',',rnd,','1',135),(448,'testcase','automation',289,',open,biz,max,ipd,',',rnd,','1',140),(449,'testcase','showScript',289,',open,biz,max,ipd,',',rnd,','1',145),(450,'testcase','exportTemplate',143,',open,biz,max,ipd,',',rnd,','1',1),(451,'testcase','import',143,',open,biz,max,ipd,',',rnd,','1',3),(453,'testcase','submit',142,',max,ipd,',',rnd,','1',4),(454,'testtask','create',147,',open,biz,max,ipd,',',rnd,','1',0),(455,'testtask','browse',146,',open,biz,max,ipd,',',rnd,','1',10),(456,'testtask','view',146,',open,biz,max,ipd,',',rnd,','1',15),(457,'testtask','cases',146,',open,biz,max,ipd,',',rnd,','1',20),(458,'testtask','groupCase',146,',open,biz,max,ipd,',',rnd,','1',25),(459,'testtask','edit',147,',open,biz,max,ipd,',',rnd,','1',1),(460,'testtask','start',147,',open,biz,max,ipd,',',rnd,','1',2),(461,'testtask','activate',147,',open,biz,max,ipd,',',rnd,','1',3),(462,'testtask','block',147,',open,biz,max,ipd,',',rnd,','1',4),(463,'testtask','close',147,',open,biz,max,ipd,',',rnd,','1',5),(464,'testtask','delete',148,',open,biz,max,ipd,',',rnd,','1',55),(465,'testtask','batchAssign',147,',open,biz,max,ipd,',',rnd,','1',12),(466,'testtask','linkcase',147,',open,biz,max,ipd,',',rnd,','1',6),(467,'testtask','unlinkcase',147,',open,biz,max,ipd,',',rnd,','1',7),(468,'testtask','runcase',147,',open,biz,max,ipd,',',rnd,','1',9),(469,'testtask','results',147,',open,biz,max,ipd,',',rnd,','1',11),(470,'testtask','batchUnlinkCases',147,',open,biz,max,ipd,',',rnd,','1',8),(471,'testtask','report',146,',open,biz,max,ipd,',',rnd,','1',90),(472,'testtask','browseUnits',149,',open,biz,max,ipd,',',rnd,','1',0),(473,'testtask','unitCases',149,',open,biz,max,ipd,',',rnd,','1',1),(474,'testtask','importUnitResult',149,',open,biz,max,ipd,',',rnd,','1',2),(475,'testtask','batchRun',147,',open,biz,max,ipd,',',rnd,','1',10),(476,'testtask','runDeployCase',134,',biz,max,ipd,',',rnd,','1',6),(477,'testtask','deployCaseResults',134,',biz,max,ipd,',',rnd,','1',7),(479,'testsuite','browse',150,',open,biz,max,ipd,',',rnd,','1',0),(480,'testsuite','create',151,',open,biz,max,ipd,',',rnd,','1',15),(481,'testsuite','view',150,',open,biz,max,ipd,',',rnd,','1',2),(482,'testsuite','edit',151,',open,biz,max,ipd,',',rnd,','1',25),(483,'testsuite','delete',152,',open,biz,max,ipd,',',rnd,','1',30),(484,'testsuite','linkCase',151,',open,biz,max,ipd,',',rnd,','1',35),(485,'testsuite','unlinkCase',151,',open,biz,max,ipd,',',rnd,','1',40),(486,'testsuite','batchUnlinkCases',151,',open,biz,max,ipd,',',rnd,','1',45),(487,'testreport','browse',153,',open,biz,max,ipd,',',rnd,','1',5),(488,'testreport','create',154,',open,biz,max,ipd,',',rnd,','1',10),(489,'testreport','view',153,',open,biz,max,ipd,',',rnd,','1',15),(490,'testreport','delete',155,',open,biz,max,ipd,',',rnd,','1',20),(491,'testreport','edit',154,',open,biz,max,ipd,',',rnd,','1',25),(492,'testreport','export',156,',biz,max,ipd,',',rnd,','1',30),(493,'milestone','index',183,',max,ipd,',',rnd,','1',5),(494,'milestone','saveOtherProblem',183,',max,ipd,',',rnd,','1',10),(496,'caselib','browse',98,',open,biz,max,ipd,',',rnd,','1',2),(497,'caselib','create',99,',open,biz,max,ipd,',',rnd,','1',0),(498,'caselib','edit',99,',open,biz,max,ipd,',',rnd,','1',1),(499,'caselib','delete',100,',open,biz,max,ipd,',',rnd,','1',25),(500,'caselib','view',98,',open,biz,max,ipd,',',rnd,','1',3),(501,'caselib','createCase',99,',open,biz,max,ipd,',',rnd,','1',3),(502,'caselib','batchCreateCase',99,',open,biz,max,ipd,',',rnd,','1',4),(503,'caselib','exportTemplate',101,',open,biz,max,ipd,',',rnd,','1',45),(504,'caselib','import',101,',open,biz,max,ipd,',',rnd,','1',50),(505,'caselib','showImport',101,',open,biz,max,ipd,',',rnd,','1',55),(506,'zahost','browse',157,',open,biz,max,ipd,',',rnd,','1',5),(507,'zahost','create',158,',open,biz,max,ipd,',',rnd,','1',10),(508,'zahost','edit',158,',open,biz,max,ipd,',',rnd,','1',15),(509,'zahost','delete',159,',open,biz,max,ipd,',',rnd,','1',20),(510,'zahost','view',157,',open,biz,max,ipd,',',rnd,','1',25),(511,'zahost','browseImage',160,',open,biz,max,ipd,',',rnd,','1',30),(512,'zahost','downloadImage',160,',open,biz,max,ipd,',',rnd,','1',35),(513,'zahost','cancelDownload',160,',open,biz,max,ipd,',',rnd,','1',40),(514,'zanode','browse',161,',open,biz,max,ipd,',',rnd,','1',5),(515,'zanode','create',162,',open,biz,max,ipd,',',rnd,','1',10),(516,'zanode','edit',162,',open,biz,max,ipd,',',rnd,','1',15),(517,'zanode','destroy',288,',open,biz,max,ipd,',',rnd,','1',20),(518,'zanode','reboot',162,',open,biz,max,ipd,',',rnd,','1',25),(519,'zanode','resume',162,',open,biz,max,ipd,',',rnd,','1',30),(520,'zanode','getVNC',162,',open,biz,max,ipd,',',rnd,','1',35),(521,'zanode','start',162,',open,biz,max,ipd,',',rnd,','1',40),(522,'zanode','close',162,',open,biz,max,ipd,',',rnd,','1',45),(523,'zanode','view',161,',open,biz,max,ipd,',',rnd,','1',50),(524,'zanode','createImage',163,',open,biz,max,ipd,',',rnd,','1',55),(525,'zanode','browseSnapshot',164,',open,biz,max,ipd,',',rnd,','1',60),(526,'zanode','createSnapshot',164,',open,biz,max,ipd,',',rnd,','1',65),(527,'zanode','editSnapshot',164,',open,biz,max,ipd,',',rnd,','1',70),(528,'zanode','restoreSnapshot',164,',open,biz,max,ipd,',',rnd,','1',75),(529,'zanode','deleteSnapshot',164,',open,biz,max,ipd,',',rnd,','1',80),(530,'zanode','suspend',162,',open,biz,max,ipd,',',rnd,','1',85),(558,'screen','browse',318,',open,biz,max,ipd,',',rnd,','1',5),(559,'screen','view',318,',open,biz,max,ipd,',',rnd,','1',10),(595,'company','browse',234,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(596,'company','edit',169,',open,biz,max,ipd,',',rnd,lite,or,','1',15),(597,'company','dynamic',168,',open,biz,max,ipd,',',rnd,lite,or,','1',20),(598,'company','view',169,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(599,'company','todo',166,',biz,max,ipd,',',rnd,lite,','1',30),(600,'company','calendar',167,',biz,max,ipd,',',rnd,lite,','1',10),(601,'company','allTodo',170,',biz,max,ipd,',',rnd,lite,','1',40),(602,'company','effort',167,',biz,max,ipd,',',rnd,lite,','1',45),(603,'company','alleffort',170,',biz,max,ipd,',',rnd,lite,','1',50),(604,'dept','browse',232,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(605,'dept','updateOrder',232,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(606,'dept','manageChild',232,',open,biz,max,ipd,',',rnd,lite,or,','1',15),(607,'dept','edit',232,',open,biz,max,ipd,',',rnd,lite,or,','1',20),(608,'dept','delete',232,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(609,'group','browse',233,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(610,'group','create',233,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(611,'group','edit',233,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(612,'group','copy',233,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(613,'group','delete',233,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(614,'group','managePriv',231,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(615,'group','manageMember',233,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(616,'group','manageProjectAdmin',233,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(618,'group','manageView',233,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(624,'user','create',234,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(625,'user','batchCreate',234,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(626,'user','view',234,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(627,'user','edit',234,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(628,'user','unlock',234,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(629,'user','delete',234,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(630,'user','todo',165,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(631,'user','task',165,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(632,'user','bug',165,',open,biz,max,ipd,',',rnd,or,','1',7),(633,'user','dynamic',165,',open,biz,max,ipd,',',rnd,lite,or,','1',13),(635,'user','profile',165,',open,biz,max,ipd,',',rnd,lite,or,','1',14),(636,'user','batchEdit',234,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(637,'user','unbind',234,',open,biz,max,ipd,',',rnd,lite,','1',8),(638,'user','setPublicTemplate',296,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(639,'user','export',234,',biz,max,ipd,',',rnd,or,','1',9),(640,'user','exportTemplate',234,',biz,max,ipd,',',rnd,or,','1',10),(641,'user','story',165,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(642,'user','testTask',165,',open,biz,max,ipd,',',rnd,or,','1',8),(643,'user','testCase',165,',open,biz,max,ipd,',',rnd,or,','1',9),(644,'user','execution',165,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(645,'user','effortcalendar',165,',biz,max,ipd,',',rnd,','1',3),(646,'user','todocalendar',165,',biz,max,ipd,',',rnd,','1',4),(647,'user','effort',165,',biz,max,ipd,',',rnd,','1',1),(648,'user','import',234,',biz,max,ipd,',',rnd,or,','1',11),(649,'user','importldap',253,',biz,max,ipd,',',rnd,or,','1',15),(650,'user','issue',165,',max,ipd,',',rnd,','1',11),(651,'user','risk',165,',max,ipd,',',rnd,','1',12),(652,'admin','index',645,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(654,'admin','checkWeak',251,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(655,'admin','sso',234,',open,biz,max,ipd,',',rnd,lite,','1',65),(656,'admin','register',645,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(657,'admin','xuanxuan',254,',open,biz,max,ipd,',',rnd,lite,','1',8),(659,'admin','resetPWDSetting',251,',open,biz,max,ipd,',',rnd,or,','1',2),(660,'admin','tableEngine',256,',open,biz,max,ipd,',',rnd,or,','1',45),(661,'admin','safe',251,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(662,'stage','browse',268,',open,biz,max,ipd,',',rnd,','1',0),(663,'stage','create',268,',open,biz,max,ipd,',',rnd,','1',2),(664,'stage','batchCreate',268,',open,biz,max,ipd,',',rnd,','1',3),(665,'stage','edit',268,',open,biz,max,ipd,',',rnd,','1',4),(666,'stage','setType',267,',open,biz,max,ipd,',',rnd,','1',25),(667,'stage','delete',268,',open,biz,max,ipd,',',rnd,','1',5),(668,'stage','plusBrowse',268,',open,biz,max,ipd,',',rnd,','1',1),(669,'extension','browse',235,',open,biz,max,ipd,',',rnd,lite,','1',0),(670,'extension','obtain',235,',open,biz,max,ipd,',',rnd,lite,','1',2),(671,'extension','structure',235,',open,biz,max,ipd,',',rnd,lite,','1',3),(672,'extension','install',235,',open,biz,max,ipd,',',rnd,lite,','1',4),(673,'extension','uninstall',235,',open,biz,max,ipd,',',rnd,lite,','1',5),(674,'extension','activate',235,',open,biz,max,ipd,',',rnd,lite,','1',6),(675,'extension','deactivate',235,',open,biz,max,ipd,',',rnd,lite,','1',7),(676,'extension','upload',235,',open,biz,max,ipd,',',rnd,lite,','1',1),(677,'extension','erase',235,',open,biz,max,ipd,',',rnd,lite,','1',8),(678,'extension','upgrade',235,',open,biz,max,ipd,',',rnd,lite,','1',9),(680,'custom','set',276,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(681,'custom','product',276,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(682,'custom','execution',276,',open,biz,max,ipd,',',rnd,lite,','1',9),(683,'custom','required',276,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(684,'custom','restore',276,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(685,'custom','flow',267,',open,biz,max,ipd,',',rnd,lite,or,','1',35),(687,'custom','timezone',256,',open,biz,max,ipd,',',rnd,lite,or,','1',45),(688,'custom','estimate',267,',max,ipd,',',rnd,','1',50),(689,'custom','editStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(690,'custom','browseStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(691,'custom','setDefaultConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(692,'custom','deleteStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(693,'custom','kanban',276,',open,biz,max,ipd,',',rnd,','1',11),(694,'custom','code',267,',open,biz,max,ipd,',',rnd,or,','1',80),(695,'custom','hours',267,',open,biz,max,ipd,',',rnd,or,','1',85),(696,'custom','percent',267,',open,biz,max,ipd,',',rnd,or,','1',90),(697,'custom','setStoryConcept',276,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(698,'custom','libreoffice',256,',biz,max,ipd,',',rnd,lite,','1',100),(699,'action','trash',250,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(700,'action','undelete',250,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(701,'action','hideOne',250,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(702,'action','hideAll',250,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(703,'action','comment',258,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(704,'action','editComment',258,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(705,'mail','index',237,',open,biz,max,ipd,',',lite,rnd,or,','1',0),(706,'mail','detect',237,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(707,'mail','edit',237,',open,biz,max,ipd,',',lite,rnd,or,','1',1),(708,'mail','save',237,',open,biz,max,ipd,',',lite,rnd,or,','1',3),(709,'mail','test',237,',open,biz,max,ipd,',',lite,rnd,or,','1',2),(710,'mail','reset',237,',open,biz,max,ipd,',',lite,rnd,or,','1',4),(711,'mail','browse',237,',open,biz,max,ipd,',',lite,rnd,or,','1',6),(712,'mail','delete',237,',open,biz,max,ipd,',',lite,rnd,or,','1',7),(713,'mail','batchDelete',237,',open,biz,max,ipd,',',lite,rnd,or,','1',8),(714,'mail','resend',237,',open,biz,max,ipd,',',lite,rnd,or,','1',9),(715,'sms','index',241,',biz,max,ipd,',',lite,rnd,or,','1',5),(716,'sms','test',241,',biz,max,ipd,',',lite,rnd,or,','1',10),(717,'sms','reset',241,',biz,max,ipd,',',lite,rnd,or,','1',15),(718,'svn','diff',300,',open,biz,max,ipd,',',rnd,','1',5),(719,'svn','cat',300,',open,biz,max,ipd,',',rnd,','1',10),(720,'svn','apiSync',300,',open,biz,max,ipd,',',rnd,','1',15),(721,'git','diff',299,',open,biz,max,ipd,',',rnd,','1',5),(722,'git','cat',299,',open,biz,max,ipd,',',rnd,','1',10),(723,'git','apiSync',299,',open,biz,max,ipd,',',rnd,','1',15),(724,'search','buildForm',257,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(725,'search','buildQuery',257,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(726,'search','saveQuery',257,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(727,'search','deleteQuery',257,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(728,'search','select',257,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(729,'search','index',257,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(730,'search','buildIndex',256,',open,biz,max,ipd,',',rnd,lite,or,','1',35),(731,'tree','browse',259,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(732,'tree','browseTask',259,',open,biz,max,ipd,',',rnd,lite,','1',1),(733,'tree','updateOrder',259,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(734,'tree','manageChild',259,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(735,'tree','edit',259,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(736,'tree','delete',259,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(737,'tree','editHost',259,',biz,max,ipd,',',rnd,lite,','1',4),(738,'tree','fix',259,',open,biz,max,ipd,',',rnd,lite,or,','1',9),(739,'tree','browsehost',259,',biz,max,ipd,',',rnd,lite,','1',3),(758,'file','download',260,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(759,'file','edit',260,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(760,'file','delete',260,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(761,'file','uploadImages',260,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(762,'file','setPublic',260,',open,biz,max,ipd,',',rnd,lite,or,','1',25),(763,'misc','ping',301,',open,biz,max,ipd,',',rnd,lite,','1',5),(764,'backup','index',249,',open,biz,max,ipd,',',lite,rnd,or,','1',0),(765,'backup','backup',249,',open,biz,max,ipd,',',lite,rnd,or,','1',2),(766,'backup','restore',249,',open,biz,max,ipd,',',lite,rnd,or,','1',3),(767,'backup','delete',249,',open,biz,max,ipd,',',lite,rnd,or,','1',4),(768,'backup','setting',249,',open,biz,max,ipd,',',lite,rnd,or,','1',1),(769,'backup','rmPHPHeader',249,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(770,'backup','change',249,',open,biz,max,ipd,',',lite,rnd,or,','1',6),(771,'cron','index',252,',open,biz,max,ipd,',',rnd,lite,','1',0),(772,'cron','turnon',252,',open,biz,max,ipd,',',rnd,lite,','1',1),(773,'cron','create',252,',open,biz,max,ipd,',',rnd,lite,','1',3),(774,'cron','edit',252,',open,biz,max,ipd,',',rnd,lite,','1',5),(775,'cron','toggle',252,',open,biz,max,ipd,',',rnd,lite,','1',4),(776,'cron','delete',252,',open,biz,max,ipd,',',rnd,lite,','1',6),(777,'cron','openProcess',252,',open,biz,max,ipd,',',rnd,lite,','1',2),(778,'dev','api',226,',open,biz,max,ipd,',',rnd,','1',5),(779,'dev','db',226,',open,biz,max,ipd,',',rnd,','1',10),(781,'editor','index',228,',open,biz,max,ipd,',',rnd,','1',5),(782,'editor','extend',228,',open,biz,max,ipd,',',rnd,','1',10),(783,'editor','edit',228,',open,biz,max,ipd,',',rnd,','1',15),(784,'editor','newPage',228,',open,biz,max,ipd,',',rnd,','1',20),(785,'editor','save',228,',open,biz,max,ipd,',',rnd,','1',25),(786,'editor','delete',228,',open,biz,max,ipd,',',rnd,','1',30),(787,'issue','browse',189,',max,ipd,',',rnd,','1',5),(788,'issue','create',190,',max,ipd,',',rnd,','1',10),(789,'issue','batchCreate',190,',max,ipd,',',rnd,','1',15),(790,'issue','delete',192,',max,ipd,',',rnd,','1',20),(791,'issue','edit',190,',max,ipd,',',rnd,','1',25),(792,'issue','confirm',190,',max,ipd,',',rnd,','1',30),(793,'issue','assignTo',190,',max,ipd,',',rnd,','1',35),(794,'issue','close',190,',max,ipd,',',rnd,','1',40),(795,'issue','cancel',190,',max,ipd,',',rnd,','1',45),(796,'issue','activate',190,',max,ipd,',',rnd,','1',50),(797,'issue','resolve',190,',max,ipd,',',rnd,','1',55),(798,'issue','view',189,',max,ipd,',',rnd,','1',60),(799,'issue','export',191,',max,ipd,',',rnd,','1',65),(800,'issue','importToLib',193,',max,ipd,',',rnd,','1',70),(801,'issue','batchImportToLib',193,',max,ipd,',',rnd,','1',75),(802,'issue','importFromLib',191,',max,ipd,',',rnd,','1',80),(803,'risk','browse',194,',max,ipd,',',rnd,','1',5),(804,'risk','create',195,',max,ipd,',',rnd,','1',0),(805,'risk','edit',195,',max,ipd,',',rnd,','1',2),(806,'risk','delete',197,',max,ipd,',',rnd,','1',20),(807,'risk','activate',195,',max,ipd,',',rnd,','1',3),(808,'risk','close',195,',max,ipd,',',rnd,','1',8),(809,'risk','hangup',195,',max,ipd,',',rnd,','1',6),(810,'risk','batchCreate',195,',max,ipd,',',rnd,','1',1),(811,'risk','cancel',195,',max,ipd,',',rnd,','1',7),(812,'risk','track',195,',max,ipd,',',rnd,','1',5),(813,'risk','view',194,',max,ipd,',',rnd,','1',55),(814,'risk','assignTo',195,',max,ipd,',',rnd,','1',4),(815,'risk','importToLib',198,',max,ipd,',',rnd,','1',65),(816,'risk','batchImportToLib',198,',max,ipd,',',rnd,','1',70),(817,'risk','importFromLib',196,',max,ipd,',',rnd,','1',1),(818,'risk','export',196,',max,ipd,',',rnd,','1',0),(819,'mr','create',230,',open,biz,max,ipd,',',rnd,','1',2),(820,'mr','browse',230,',open,biz,max,ipd,',',rnd,','1',1),(821,'mr','edit',230,',open,biz,max,ipd,',',rnd,','1',3),(822,'mr','delete',230,',open,biz,max,ipd,',',rnd,','1',4),(823,'mr','view',230,',open,biz,max,ipd,',',rnd,','1',5),(824,'mr','accept',230,',open,biz,max,ipd,',',rnd,','1',0),(825,'mr','diff',230,',open,biz,max,ipd,',',rnd,','1',6),(826,'mr','link',230,',open,biz,max,ipd,',',rnd,','1',7),(827,'mr','linkStory',230,',open,biz,max,ipd,',',rnd,','1',8),(828,'mr','linkBug',230,',open,biz,max,ipd,',',rnd,','1',9),(829,'mr','linkTask',230,',open,biz,max,ipd,',',rnd,','1',10),(830,'mr','unlink',230,',open,biz,max,ipd,',',rnd,','1',11),(831,'mr','approval',230,',open,biz,max,ipd,',',rnd,','1',13),(832,'mr','close',230,',open,biz,max,ipd,',',rnd,','1',14),(833,'mr','reopen',230,',open,biz,max,ipd,',',rnd,','1',15),(834,'mr','addReview',230,',open,biz,max,ipd,',',rnd,','1',12),(835,'budget','browse',186,',max,ipd,',',rnd,','1',5),(836,'budget','summary',186,',max,ipd,',',rnd,','1',10),(837,'budget','create',186,',max,ipd,',',rnd,','1',15),(838,'budget','batchCreate',186,',max,ipd,',',rnd,','1',20),(839,'budget','edit',186,',max,ipd,',',rnd,','1',25),(840,'budget','view',186,',max,ipd,',',rnd,','1',30),(841,'budget','delete',186,',max,ipd,',',rnd,','1',35),(842,'workestimation','index',187,',max,ipd,',',rnd,','1',5),(843,'durationestimation','index',188,',max,ipd,',',rnd,','1',5),(844,'durationestimation','create',188,',max,ipd,',',rnd,','1',10),(845,'holiday','browse',110,',open,biz,max,ipd,',',rnd,','1',5),(846,'holiday','create',110,',open,biz,max,ipd,',',rnd,','1',10),(847,'holiday','edit',110,',open,biz,max,ipd,',',rnd,','1',15),(848,'holiday','delete',110,',open,biz,max,ipd,',',rnd,','1',20),(849,'holiday','import',110,',open,biz,max,ipd,',',rnd,','1',25),(850,'weekly','index',182,',max,ipd,',',rnd,','1',5),(851,'weekly','exportweeklyreport',182,',max,ipd,',',rnd,','1',10),(852,'opportunity','browse',199,',max,ipd,',',rnd,','1',5),(853,'opportunity','create',200,',max,ipd,',',rnd,','1',0),(854,'opportunity','edit',200,',max,ipd,',',rnd,','1',2),(855,'opportunity','delete',201,',max,ipd,',',rnd,','1',20),(856,'opportunity','activate',200,',max,ipd,',',rnd,','1',4),(857,'opportunity','close',200,',max,ipd,',',rnd,','1',10),(858,'opportunity','hangup',200,',max,ipd,',',rnd,','1',8),(859,'opportunity','cancel',200,',max,ipd,',',rnd,','1',13),(860,'opportunity','track',200,',max,ipd,',',rnd,','1',12),(861,'opportunity','view',199,',max,ipd,',',rnd,','1',50),(862,'opportunity','assignTo',200,',max,ipd,',',rnd,','1',6),(863,'opportunity','batchCreate',200,',max,ipd,',',rnd,','1',1),(864,'opportunity','batchEdit',200,',max,ipd,',',rnd,','1',3),(865,'opportunity','batchAssignTo',200,',max,ipd,',',rnd,','1',7),(866,'opportunity','batchClose',200,',max,ipd,',',rnd,','1',11),(867,'opportunity','batchCancel',200,',max,ipd,',',rnd,','1',14),(868,'opportunity','batchHangup',200,',max,ipd,',',rnd,','1',9),(869,'opportunity','batchActivate',200,',max,ipd,',',rnd,','1',5),(870,'opportunity','importToLib',202,',max,ipd,',',rnd,','1',95),(871,'opportunity','batchImportToLib',202,',max,ipd,',',rnd,','1',100),(872,'opportunity','importFromLib',203,',max,ipd,',',rnd,','1',105),(873,'opportunity','export',203,',max,ipd,',',rnd,','1',110),(874,'trainplan','browse',209,',max,ipd,',',rnd,','1',0),(875,'trainplan','create',209,',max,ipd,',',rnd,','1',2),(876,'trainplan','edit',209,',max,ipd,',',rnd,','1',4),(877,'trainplan','batchCreate',209,',max,ipd,',',rnd,','1',3),(878,'trainplan','batchEdit',209,',max,ipd,',',rnd,','1',5),(879,'trainplan','batchFinish',209,',max,ipd,',',rnd,','1',7),(880,'trainplan','delete',209,',max,ipd,',',rnd,','1',8),(881,'trainplan','finish',209,',max,ipd,',',rnd,','1',6),(882,'trainplan','summary',209,',max,ipd,',',rnd,','1',9),(883,'trainplan','view',209,',max,ipd,',',rnd,','1',1),(884,'nc','browse',207,',max,ipd,',',rnd,','1',0),(885,'nc','create',207,',max,ipd,',',rnd,','1',2),(886,'nc','edit',207,',max,ipd,',',rnd,','1',3),(887,'nc','resolve',207,',max,ipd,',',rnd,','1',4),(888,'nc','view',207,',max,ipd,',',rnd,','1',1),(889,'nc','close',207,',max,ipd,',',rnd,','1',5),(890,'nc','delete',207,',max,ipd,',',rnd,','1',6),(891,'nc','assignTo',207,',max,ipd,',',rnd,','1',7),(892,'nc','activate',207,',max,ipd,',',rnd,','1',8),(893,'nc','export',207,',max,ipd,',',rnd,','1',9),(894,'gapanalysis','browse',210,',max,ipd,',',rnd,','1',0),(895,'gapanalysis','create',210,',max,ipd,',',rnd,','1',2),(896,'gapanalysis','edit',210,',max,ipd,',',rnd,','1',4),(897,'gapanalysis','batchCreate',210,',max,ipd,',',rnd,','1',3),(898,'gapanalysis','batchEdit',210,',max,ipd,',',rnd,','1',5),(899,'gapanalysis','delete',210,',max,ipd,',',rnd,','1',6),(900,'gapanalysis','view',210,',max,ipd,',',rnd,','1',1),(901,'researchplan','browse',184,',max,ipd,',',rnd,','1',0),(902,'researchplan','create',184,',max,ipd,',',rnd,','1',2),(903,'researchplan','edit',184,',max,ipd,',',rnd,','1',3),(904,'researchplan','delete',184,',max,ipd,',',rnd,','1',4),(905,'researchplan','view',184,',max,ipd,',',rnd,','1',1),(906,'researchreport','browse',185,',max,ipd,',',rnd,','1',0),(907,'researchreport','create',185,',max,ipd,',',rnd,','1',2),(908,'researchreport','edit',185,',max,ipd,',',rnd,','1',3),(909,'researchreport','delete',185,',max,ipd,',',rnd,','1',4),(910,'researchreport','view',185,',max,ipd,',',rnd,','1',1),(911,'meeting','browse',208,',max,ipd,',',rnd,','1',0),(912,'meeting','create',208,',max,ipd,',',rnd,','1',2),(913,'meeting','edit',208,',max,ipd,',',rnd,','1',3),(914,'meeting','delete',208,',max,ipd,',',rnd,','1',4),(915,'meeting','view',208,',max,ipd,',',rnd,','1',1),(916,'meeting','minutes',208,',max,ipd,',',rnd,','1',5),(917,'meetingroom','browse',280,',max,ipd,',',rnd,','1',0),(918,'meetingroom','create',280,',max,ipd,',',rnd,','1',2),(919,'meetingroom','edit',280,',max,ipd,',',rnd,','1',4),(920,'meetingroom','delete',280,',max,ipd,',',rnd,','1',6),(921,'meetingroom','view',280,',max,ipd,',',rnd,','1',1),(922,'meetingroom','batchCreate',280,',max,ipd,',',rnd,','1',3),(923,'meetingroom','batchEdit',280,',max,ipd,',',rnd,','1',5),(924,'approval','progress',277,',max,ipd,',',rnd,','1',10),(925,'workflow','browseFlow',223,',biz,max,ipd,',',rnd,lite,','1',5),(926,'workflow','browseDB',223,',biz,max,ipd,',',rnd,lite,','1',10),(927,'workflow','create',223,',biz,max,ipd,',',rnd,lite,','1',15),(928,'workflow','copy',223,',biz,max,ipd,',',rnd,lite,','1',20),(929,'workflow','edit',223,',biz,max,ipd,',',rnd,lite,','1',25),(930,'workflow','backup',223,',biz,max,ipd,',',rnd,lite,','1',30),(931,'workflow','upgrade',223,',biz,max,ipd,',',rnd,lite,','1',35),(932,'workflow','view',223,',biz,max,ipd,',',rnd,lite,','1',40),(933,'workflow','delete',223,',biz,max,ipd,',',rnd,lite,','1',45),(934,'workflow','flowchart',223,',biz,max,ipd,',',rnd,lite,','1',50),(935,'workflow','ui',223,',biz,max,ipd,',',rnd,lite,','1',55),(936,'workflow','release',223,',biz,max,ipd,',',rnd,lite,','1',60),(937,'workflow','deactivate',223,',biz,max,ipd,',',rnd,lite,','1',65),(938,'workflow','activate',223,',biz,max,ipd,',',rnd,lite,','1',70),(939,'workflow','setApproval',223,',max,',',rnd,','1',75),(940,'workflow','setJS',223,',biz,max,ipd,',',rnd,lite,','1',80),(941,'workflow','setCSS',223,',biz,max,ipd,',',rnd,lite,','1',85),(942,'workflowfield','browse',211,',biz,max,ipd,',',rnd,lite,','1',5),(943,'workflowfield','create',211,',biz,max,ipd,',',rnd,lite,','1',10),(944,'workflowfield','edit',211,',biz,max,ipd,',',rnd,lite,','1',15),(945,'workflowfield','delete',211,',biz,max,ipd,',',rnd,lite,','1',20),(946,'workflowfield','sort',211,',biz,max,ipd,',',rnd,lite,','1',25),(947,'workflowfield','import',211,',biz,max,ipd,',',rnd,lite,','1',30),(948,'workflowfield','showImport',211,',biz,max,ipd,',',rnd,lite,','1',35),(949,'workflowfield','exportTemplate',211,',biz,max,ipd,',',rnd,lite,','1',40),(950,'workflowfield','setValue',211,',biz,max,ipd,',',rnd,lite,','1',45),(951,'workflowfield','setExport',211,',biz,max,ipd,',',rnd,lite,','1',50),(952,'workflowfield','setSearch',211,',biz,max,ipd,',',rnd,lite,','1',55),(953,'workflowaction','browse',212,',biz,max,ipd,',',rnd,lite,','1',5),(954,'workflowaction','create',212,',biz,max,ipd,',',rnd,lite,','1',10),(955,'workflowaction','edit',212,',biz,max,ipd,',',rnd,lite,','1',15),(956,'workflowaction','view',212,',biz,max,ipd,',',rnd,lite,','1',20),(957,'workflowaction','delete',212,',biz,max,ipd,',',rnd,lite,','1',25),(958,'workflowaction','sort',212,',biz,max,ipd,',',rnd,lite,','1',30),(959,'workflowaction','setVerification',212,',biz,max,ipd,',',rnd,lite,','1',35),(960,'workflowaction','setNotice',212,',biz,max,ipd,',',rnd,lite,','1',40),(961,'workflowaction','setJS',212,',biz,max,ipd,',',rnd,lite,','1',45),(962,'workflowaction','setCSS',212,',biz,max,ipd,',',rnd,lite,','1',50),(963,'workflowlayout','admin',213,',biz,max,ipd,',',rnd,lite,','1',5),(964,'workflowlayout','block',213,',biz,max,ipd,',',rnd,lite,','1',10),(965,'workflowcondition','browse',214,',biz,max,ipd,',',rnd,lite,','1',5),(966,'workflowcondition','create',214,',biz,max,ipd,',',rnd,lite,','1',10),(967,'workflowcondition','edit',214,',biz,max,ipd,',',rnd,lite,','1',15),(968,'workflowcondition','delete',214,',biz,max,ipd,',',rnd,lite,','1',20),(969,'workflowlinkage','browse',215,',biz,max,ipd,',',rnd,lite,','1',5),(970,'workflowlinkage','create',215,',biz,max,ipd,',',rnd,lite,','1',10),(971,'workflowlinkage','edit',215,',biz,max,ipd,',',rnd,lite,','1',15),(972,'workflowlinkage','delete',215,',biz,max,ipd,',',rnd,lite,','1',20),(973,'workflowhook','browse',216,',biz,max,ipd,',',rnd,lite,','1',5),(974,'workflowhook','create',216,',biz,max,ipd,',',rnd,lite,','1',10),(975,'workflowhook','edit',216,',biz,max,ipd,',',rnd,lite,','1',15),(976,'workflowhook','delete',216,',biz,max,ipd,',',rnd,lite,','1',20),(977,'workflowlabel','browse',217,',biz,max,ipd,',',rnd,lite,','1',5),(978,'workflowlabel','create',217,',biz,max,ipd,',',rnd,lite,','1',10),(979,'workflowlabel','edit',217,',biz,max,ipd,',',rnd,lite,','1',15),(980,'workflowlabel','delete',217,',biz,max,ipd,',',rnd,lite,','1',20),(981,'workflowlabel','sort',217,',biz,max,ipd,',',rnd,lite,','1',25),(982,'workflowrelation','admin',295,',biz,max,ipd,',',rnd,lite,','1',5),(983,'workflowreport','browse',220,',biz,max,ipd,',',rnd,lite,','1',5),(984,'workflowreport','create',220,',biz,max,ipd,',',rnd,lite,','1',10),(985,'workflowreport','edit',220,',biz,max,ipd,',',rnd,lite,','1',15),(986,'workflowreport','delete',220,',biz,max,ipd,',',rnd,lite,','1',20),(987,'workflowreport','sort',220,',biz,max,ipd,',',rnd,lite,','1',25),(988,'workflowdatasource','browse',221,',biz,max,ipd,',',rnd,lite,','1',5),(989,'workflowdatasource','create',221,',biz,max,ipd,',',rnd,lite,','1',10),(990,'workflowdatasource','edit',221,',biz,max,ipd,',',rnd,lite,','1',15),(991,'workflowdatasource','delete',221,',biz,max,ipd,',',rnd,lite,','1',20),(992,'workflowrule','browse',222,',biz,max,ipd,',',rnd,lite,','1',5),(993,'workflowrule','create',222,',biz,max,ipd,',',rnd,lite,','1',10),(994,'workflowrule','edit',222,',biz,max,ipd,',',rnd,lite,','1',15),(995,'workflowrule','view',222,',biz,max,ipd,',',rnd,lite,','1',20),(996,'workflowrule','delete',222,',biz,max,ipd,',',rnd,lite,','1',25),(997,'projectbuild','browse',265,',open,biz,max,ipd,',',rnd,','1',0),(998,'projectbuild','create',265,',open,biz,max,ipd,',',rnd,','1',2),(999,'projectbuild','edit',265,',open,biz,max,ipd,',',rnd,','1',3),(1000,'projectbuild','view',265,',open,biz,max,ipd,',',rnd,','1',1),(1001,'projectbuild','delete',265,',open,biz,max,ipd,',',rnd,','1',4),(1002,'projectbuild','linkStory',265,',open,biz,max,ipd,',',rnd,','1',5),(1003,'projectbuild','unlinkStory',265,',open,biz,max,ipd,',',rnd,','1',6),(1004,'projectbuild','batchUnlinkStory',265,',open,biz,max,ipd,',',rnd,','1',7),(1005,'projectbuild','linkBug',265,',open,biz,max,ipd,',',rnd,','1',8),(1006,'projectbuild','unlinkBug',265,',open,biz,max,ipd,',',rnd,','1',9),(1007,'projectbuild','batchUnlinkBug',265,',open,biz,max,ipd,',',rnd,','1',10),(1008,'projectrelease','browse',181,',open,biz,max,ipd,',',rnd,','1',0),(1009,'projectrelease','create',303,',open,biz,max,ipd,',',rnd,','1',2),(1010,'projectrelease','edit',303,',open,biz,max,ipd,',',rnd,','1',3),(1011,'projectrelease','delete',304,',open,biz,max,ipd,',',rnd,','1',4),(1012,'projectrelease','view',181,',open,biz,max,ipd,',',rnd,','1',1),(1013,'projectrelease','export',305,',open,biz,max,ipd,',',rnd,','1',12),(1014,'projectrelease','linkStory',303,',open,biz,max,ipd,',',rnd,','1',5),(1015,'projectrelease','unlinkStory',303,',open,biz,max,ipd,',',rnd,','1',6),(1016,'projectrelease','batchUnlinkStory',303,',open,biz,max,ipd,',',rnd,','1',7),(1017,'projectrelease','linkBug',303,',open,biz,max,ipd,',',rnd,','1',8),(1018,'projectrelease','unlinkBug',303,',open,biz,max,ipd,',',rnd,','1',9),(1019,'projectrelease','batchUnlinkBug',303,',open,biz,max,ipd,',',rnd,','1',10),(1020,'projectrelease','changeStatus',303,',open,biz,max,ipd,',',rnd,','1',11),(1021,'projectrelease','notify',306,',open,biz,max,ipd,',',rnd,','1',13),(1022,'stakeholder','browse',264,',open,biz,max,ipd,',',rnd,','1',0),(1023,'stakeholder','create',264,',open,biz,max,ipd,',',rnd,','1',2),(1024,'stakeholder','batchCreate',264,',open,biz,max,ipd,',',rnd,','1',3),(1025,'stakeholder','edit',264,',open,biz,max,ipd,',',rnd,','1',4),(1027,'stakeholder','delete',264,',open,biz,max,ipd,',',rnd,','1',5),(1028,'stakeholder','view',264,',open,biz,max,ipd,',',rnd,','1',1),(1031,'stakeholder','communicate',264,',open,biz,max,ipd,',',rnd,','1',6),(1032,'stakeholder','expect',264,',open,biz,max,ipd,',',rnd,','1',7),(1038,'stakeholder','userIssue',264,',open,biz,max,ipd,',',rnd,','1',8),(1039,'branch','manage',24,',open,biz,max,ipd,',',rnd,or,','1',0),(1040,'branch','create',24,',open,biz,max,ipd,',',rnd,or,','1',1),(1041,'branch','edit',24,',open,biz,max,ipd,',',rnd,or,','1',2),(1042,'branch','close',24,',open,biz,max,ipd,',',rnd,or,','1',7),(1043,'branch','activate',24,',open,biz,max,ipd,',',rnd,or,','1',4),(1044,'branch','sort',24,',open,biz,max,ipd,',',rnd,or,','1',5),(1045,'branch','batchEdit',24,',open,biz,max,ipd,',',rnd,or,','1',3),(1046,'branch','mergeBranch',24,',open,biz,max,ipd,',',rnd,or,','1',6),(1047,'repo','create',239,',open,biz,max,ipd,',',rnd,','1',2),(1048,'repo','edit',239,',open,biz,max,ipd,',',rnd,','1',4),(1049,'repo','delete',239,',open,biz,max,ipd,',',rnd,','1',5),(1050,'repo','showSyncCommit',224,',open,biz,max,ipd,',',rnd,','1',0),(1051,'repo','maintain',239,',open,biz,max,ipd,',',rnd,','1',0),(1052,'repo','browse',239,',open,biz,max,ipd,',',rnd,','1',1),(1053,'repo','view',224,',open,biz,max,ipd,',',rnd,','1',1),(1054,'repo','diff',227,',open,biz,max,ipd,',',rnd,','1',0),(1055,'repo','log',224,',open,biz,max,ipd,',',rnd,','1',3),(1056,'repo','revision',224,',open,biz,max,ipd,',',rnd,','1',4),(1057,'repo','blame',224,',open,biz,max,ipd,',',rnd,','1',2),(1058,'repo','download',225,',open,biz,max,ipd,',',rnd,','1',1),(1059,'repo','setRules',245,',open,biz,max,ipd,',',rnd,','1',5),(1060,'repo','apiGetRepoByUrl',239,',open,biz,max,ipd,',',rnd,','1',6),(1061,'repo','downloadCode',225,',open,biz,max,ipd,',',rnd,','1',0),(1062,'repo','linkStory',224,',open,biz,max,ipd,',',rnd,','1',5),(1063,'repo','linkBug',224,',open,biz,max,ipd,',',rnd,','1',6),(1064,'repo','linkTask',224,',open,biz,max,ipd,',',rnd,','1',7),(1065,'repo','unlink',224,',open,biz,max,ipd,',',rnd,','1',8),(1066,'repo','review',227,',biz,max,ipd,',',rnd,','1',1),(1067,'repo','addBug',227,',biz,max,ipd,',',rnd,','1',2),(1068,'repo','editBug',227,',biz,max,ipd,',',rnd,','1',3),(1069,'repo','deleteBug',227,',biz,max,ipd,',',rnd,','1',4),(1070,'repo','addComment',227,',biz,max,ipd,',',rnd,','1',5),(1071,'repo','editComment',227,',biz,max,ipd,',',rnd,','1',6),(1072,'repo','deleteComment',227,',biz,max,ipd,',',rnd,','1',7),(1073,'ci','commitResult',298,',open,biz,max,ipd,',',rnd,','1',5),(1074,'ci','checkCompileStatus',298,',open,biz,max,ipd,',',rnd,','1',10),(1075,'compile','browse',246,',open,biz,max,ipd,',',rnd,','1',5),(1076,'compile','logs',246,',open,biz,max,ipd,',',rnd,','1',7),(1077,'compile','syncCompile',246,',open,biz,max,ipd,',',rnd,','1',8),(1078,'jenkins','browse',255,',open,biz,max,ipd,',',rnd,','1',5),(1079,'jenkins','create',255,',open,biz,max,ipd,',',rnd,','1',10),(1080,'jenkins','edit',255,',open,biz,max,ipd,',',rnd,','1',15),(1081,'jenkins','delete',255,',open,biz,max,ipd,',',rnd,','1',20),(1082,'job','browse',246,',open,biz,max,ipd,',',rnd,','1',0),(1083,'job','create',246,',open,biz,max,ipd,',',rnd,','1',1),(1084,'job','edit',246,',open,biz,max,ipd,',',rnd,','1',2),(1085,'job','delete',246,',open,biz,max,ipd,',',rnd,','1',3),(1086,'job','exec',246,',open,biz,max,ipd,',',rnd,','1',4),(1087,'job','view',246,',open,biz,max,ipd,',',rnd,','1',6),(1088,'datatable','setGlobal',296,',open,biz,max,ipd,',',rnd,lite,','1',5),(1089,'gitlab','browse',240,',open,biz,max,ipd,',',rnd,','1',0),(1090,'gitlab','create',240,',open,biz,max,ipd,',',rnd,','1',2),(1091,'gitlab','edit',240,',open,biz,max,ipd,',',rnd,','1',3),(1092,'gitlab','view',240,',open,biz,max,ipd,',',rnd,','1',1),(1093,'gitlab','importIssue',240,',open,biz,max,ipd,',',rnd,','1',7),(1094,'gitlab','delete',240,',open,biz,max,ipd,',',rnd,','1',4),(1095,'gitlab','bindUser',240,',open,biz,max,ipd,',',rnd,','1',6),(1096,'gitlab','browseProject',240,',open,biz,max,ipd,',',rnd,','1',9),(1097,'gitlab','createProject',240,',open,biz,max,ipd,',',rnd,','1',10),(1098,'gitlab','editProject',240,',open,biz,max,ipd,',',rnd,','1',11),(1099,'gitlab','deleteProject',240,',open,biz,max,ipd,',',rnd,','1',12),(1100,'gitlab','browseGroup',240,',open,biz,max,ipd,',',rnd,','1',14),(1101,'gitlab','createGroup',240,',open,biz,max,ipd,',',rnd,','1',15),(1102,'gitlab','editGroup',240,',open,biz,max,ipd,',',rnd,','1',16),(1103,'gitlab','deleteGroup',240,',open,biz,max,ipd,',',rnd,','1',17),(1104,'gitlab','manageGroupMembers',240,',open,biz,max,ipd,',',rnd,','1',18),(1105,'gitlab','browseUser',240,',open,biz,max,ipd,',',rnd,','1',19),(1106,'gitlab','createUser',240,',open,biz,max,ipd,',',rnd,','1',20),(1107,'gitlab','editUser',240,',open,biz,max,ipd,',',rnd,','1',21),(1108,'gitlab','deleteUser',240,',open,biz,max,ipd,',',rnd,','1',22),(1109,'gitlab','createBranch',240,',open,biz,max,ipd,',',rnd,','1',28),(1110,'gitlab','browseBranch',240,',open,biz,max,ipd,',',rnd,','1',27),(1111,'gitlab','webhook',240,',open,biz,max,ipd,',',rnd,','1',30),(1112,'gitlab','createWebhook',240,',open,biz,max,ipd,',',rnd,','1',8),(1113,'gitlab','manageProjectMembers',240,',open,biz,max,ipd,',',rnd,','1',13),(1114,'gitlab','manageBranchPriv',240,',open,biz,max,ipd,',',rnd,','1',29),(1115,'gitlab','manageTagPriv',240,',open,biz,max,ipd,',',rnd,','1',26),(1116,'gitlab','browseTag',240,',open,biz,max,ipd,',',rnd,','1',23),(1117,'gitlab','createTag',240,',open,biz,max,ipd,',',rnd,','1',24),(1118,'gitlab','deleteTag',240,',open,biz,max,ipd,',',rnd,','1',25),(1120,'gogs','browse',242,',open,biz,max,ipd,',',rnd,','1',0),(1121,'gogs','create',242,',open,biz,max,ipd,',',rnd,','1',2),(1122,'gogs','edit',242,',open,biz,max,ipd,',',rnd,','1',3),(1123,'gogs','view',242,',open,biz,max,ipd,',',rnd,','1',1),(1124,'gogs','delete',242,',open,biz,max,ipd,',',rnd,','1',4),(1125,'gogs','bindUser',242,',open,biz,max,ipd,',',rnd,','1',5),(1126,'gitea','browse',243,',open,biz,max,ipd,',',rnd,','1',0),(1127,'gitea','create',243,',open,biz,max,ipd,',',rnd,','1',2),(1128,'gitea','edit',243,',open,biz,max,ipd,',',rnd,','1',3),(1129,'gitea','view',243,',open,biz,max,ipd,',',rnd,','1',1),(1130,'gitea','delete',243,',open,biz,max,ipd,',',rnd,','1',4),(1131,'gitea','bindUser',243,',open,biz,max,ipd,',',rnd,','1',5),(1132,'sonarqube','browse',244,',open,biz,max,ipd,',',rnd,','1',0),(1133,'sonarqube','create',244,',open,biz,max,ipd,',',rnd,','1',1),(1134,'sonarqube','edit',244,',open,biz,max,ipd,',',rnd,','1',2),(1135,'sonarqube','delete',244,',open,biz,max,ipd,',',rnd,','1',3),(1136,'sonarqube','browseProject',244,',open,biz,max,ipd,',',rnd,','1',4),(1137,'sonarqube','createProject',244,',open,biz,max,ipd,',',rnd,','1',5),(1138,'sonarqube','deleteProject',244,',open,biz,max,ipd,',',rnd,','1',6),(1139,'sonarqube','execJob',244,',open,biz,max,ipd,',',rnd,','1',7),(1140,'sonarqube','reportView',244,',open,biz,max,ipd,',',rnd,','1',8),(1141,'sonarqube','browseIssue',244,',open,biz,max,ipd,',',rnd,','1',9),(1142,'app','serverlink',229,',open,biz,max,ipd,',',rnd,','1',5),(1143,'webhook','browse',238,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(1144,'webhook','create',238,',open,biz,max,ipd,',',lite,rnd,or,','1',10),(1145,'webhook','edit',238,',open,biz,max,ipd,',',lite,rnd,or,','1',15),(1146,'webhook','delete',238,',open,biz,max,ipd,',',lite,rnd,or,','1',20),(1147,'webhook','log',238,',open,biz,max,ipd,',',lite,rnd,or,','1',25),(1148,'webhook','bind',238,',open,biz,max,ipd,',',lite,rnd,or,','1',30),(1149,'webhook','chooseDept',238,',open,biz,max,ipd,',',lite,rnd,or,','1',35),(1150,'message','index',236,',open,biz,max,ipd,',',lite,rnd,or,','1',5),(1151,'message','browser',236,',open,biz,max,ipd,',',lite,rnd,or,','1',10),(1152,'message','setting',236,',open,biz,max,ipd,',',lite,rnd,or,','1',15),(1153,'effort','calendar',291,',biz,max,ipd,',',rnd,lite,or,','1',0),(1154,'effort','batchCreate',291,',biz,max,ipd,',',rnd,lite,or,','1',3),(1155,'effort','createForObject',261,',biz,max,ipd,',',rnd,lite,or,','1',3),(1156,'effort','edit',291,',biz,max,ipd,',',rnd,lite,or,','1',4),(1157,'effort','batchEdit',291,',biz,max,ipd,',',rnd,lite,or,','1',5),(1158,'effort','view',291,',biz,max,ipd,',',rnd,lite,or,','1',2),(1159,'effort','delete',291,',biz,max,ipd,',',rnd,lite,or,','1',6),(1160,'effort','export',291,',biz,max,ipd,',',rnd,lite,or,','1',7),(1162,'ldap','set',253,',biz,max,ipd,',',rnd,','1',10),(1163,'sqlbuilder','browseSQLView',281,',max,ipd,',',rnd,','1',5),(1164,'sqlbuilder','createSQLView',281,',max,ipd,',',rnd,','1',10),(1165,'sqlbuilder','editSQLView',281,',max,ipd,',',rnd,','1',15),(1166,'sqlbuilder','deleteSQLView',281,',max,ipd,',',rnd,','1',20),(1168,'feedback','create',113,',biz,max,ipd,',',rnd,lite,','1',0),(1169,'feedback','edit',113,',biz,max,ipd,',',rnd,lite,','1',1),(1170,'feedback','editOthers',115,',biz,max,ipd,',',rnd,','1',10),(1171,'feedback','adminView',112,',biz,max,ipd,',',rnd,','1',25),(1172,'feedback','admin',112,',biz,max,ipd,',',rnd,','1',30),(1173,'feedback','assignTo',113,',biz,max,ipd,',',rnd,lite,','1',4),(1174,'feedback','toTask',115,',biz,max,ipd,',',rnd,','1',5),(1175,'feedback','toTodo',115,',biz,max,ipd,',',rnd,','1',7),(1176,'feedback','toBug',115,',biz,max,ipd,',',rnd,','1',6),(1177,'feedback','toStory',115,',biz,max,ipd,',',rnd,','1',3),(1178,'feedback','toTicket',115,',biz,max,ipd,',',rnd,','1',8),(1179,'feedback','toUserStory',115,',biz,max,ipd,',',rnd,','1',4),(1180,'feedback','review',115,',biz,max,ipd,',',rnd,','1',0),(1181,'feedback','comment',113,',biz,max,ipd,',',rnd,lite,','1',5),(1182,'feedback','reply',115,',biz,max,ipd,',',rnd,','1',2),(1183,'feedback','ask',113,',biz,max,ipd,',',rnd,','1',6),(1184,'feedback','close',113,',biz,max,ipd,',',rnd,lite,','1',8),(1185,'feedback','delete',121,',biz,max,ipd,',',rnd,lite,','1',95),(1186,'feedback','activate',113,',biz,max,ipd,',',rnd,','1',3),(1187,'feedback','export',114,',biz,max,ipd,',',rnd,lite,','1',0),(1188,'feedback','batchEdit',113,',biz,max,ipd,',',rnd,','1',2),(1189,'feedback','batchClose',113,',biz,max,ipd,',',rnd,','1',9),(1190,'feedback','batchReview',115,',biz,max,ipd,',',rnd,','1',1),(1191,'feedback','batchAssignTo',113,',biz,max,ipd,',',rnd,','1',7),(1193,'feedback','products',123,',biz,max,ipd,',',rnd,','1',135),(1194,'feedback','manageProduct',123,',biz,max,ipd,',',rnd,','1',140),(1195,'feedback','import',114,',biz,max,ipd,',',rnd,','1',2),(1196,'feedback','exportTemplate',114,',biz,max,ipd,',',rnd,','1',1),(1197,'feedback','syncProduct',115,',biz,max,ipd,',',rnd,','1',9),(1198,'feedback','productSetting',123,',biz,max,ipd,',',rnd,','1',160),(1199,'faq','browse',116,',biz,max,ipd,',',rnd,lite,','1',5),(1200,'faq','create',116,',biz,max,ipd,',',rnd,','1',10),(1201,'faq','edit',116,',biz,max,ipd,',',rnd,','1',15),(1202,'faq','delete',116,',biz,max,ipd,',',rnd,','1',20),(1204,'ticket','create',118,',biz,max,ipd,',',rnd,lite,','1',0),(1205,'ticket','edit',118,',biz,max,ipd,',',rnd,lite,','1',1),(1206,'ticket','view',117,',biz,max,ipd,',',rnd,lite,','1',20),(1207,'ticket','browse',117,',biz,max,ipd,',',rnd,lite,','1',25),(1208,'ticket','assignTo',118,',biz,max,ipd,',',rnd,lite,','1',3),(1209,'ticket','createBug',118,',biz,max,ipd,',',rnd,','1',5),(1210,'ticket','createStory',118,',biz,max,ipd,',',rnd,','1',6),(1211,'ticket','start',118,',biz,max,ipd,',',rnd,','1',7),(1212,'ticket','finish',118,',biz,max,ipd,',',rnd,','1',8),(1213,'ticket','close',118,',biz,max,ipd,',',rnd,lite,','1',10),(1214,'ticket','activate',118,',biz,max,ipd,',',rnd,lite,','1',12),(1215,'ticket','delete',122,',biz,max,ipd,',',rnd,lite,','1',65),(1216,'ticket','exportTemplate',119,',biz,max,ipd,',',rnd,lite,','1',1),(1217,'ticket','import',119,',biz,max,ipd,',',rnd,lite,','1',2),(1218,'ticket','export',119,',biz,max,ipd,',',rnd,lite,','1',0),(1219,'ticket','batchEdit',118,',biz,max,ipd,',',rnd,','1',2),(1220,'ticket','batchClose',118,',biz,max,ipd,',',rnd,','1',11),(1221,'ticket','batchActivate',118,',biz,max,ipd,',',rnd,','1',13),(1222,'ticket','batchFinish',118,',biz,max,ipd,',',rnd,','1',9),(1223,'ticket','batchAssignTo',118,',biz,max,ipd,',',rnd,','1',4),(1224,'ticket','syncProduct',118,',biz,max,ipd,',',rnd,','1',14),(1225,'attend','department',105,',biz,max,ipd,',',rnd,lite,','1',25),(1226,'attend','company',105,',biz,max,ipd,',',rnd,lite,','1',30),(1227,'attend','browseReview',103,',biz,max,ipd,',',rnd,lite,','1',5),(1228,'attend','review',102,',biz,max,ipd,',',rnd,lite,','1',3),(1229,'attend','export',111,',biz,max,ipd,',',rnd,lite,','1',0),(1230,'attend','stat',105,',biz,max,ipd,',',rnd,lite,','1',35),(1231,'attend','saveStat',105,',biz,max,ipd,',',rnd,lite,','1',40),(1232,'attend','exportStat',111,',biz,max,ipd,',',rnd,lite,','1',2),(1233,'attend','detail',103,',biz,max,ipd,',',rnd,lite,','1',4),(1234,'attend','exportDetail',111,',biz,max,ipd,',',rnd,lite,','1',1),(1235,'attend','settings',104,',biz,max,ipd,',',rnd,lite,','1',0),(1236,'attend','personalSettings',104,',biz,max,ipd,',',rnd,lite,','1',1),(1237,'attend','setManager',104,',biz,max,ipd,',',rnd,lite,','1',2),(1238,'attend','personal',103,',biz,max,ipd,',',rnd,lite,','1',0),(1239,'attend','edit',103,',biz,max,ipd,',',rnd,lite,','1',1),(1240,'leave','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',0),(1241,'leave','company',105,',biz,max,ipd,',',rnd,lite,','1',0),(1242,'leave','review',102,',biz,max,ipd,',',rnd,lite,','1',1),(1243,'leave','export',111,',biz,max,ipd,',',rnd,lite,','1',3),(1244,'leave','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',3),(1245,'leave','personalAnnual',104,',biz,max,ipd,',',rnd,lite,','1',4),(1246,'leave','personal',106,',biz,max,ipd,',',rnd,lite,','1',0),(1247,'leave','create',106,',biz,max,ipd,',',rnd,lite,','1',2),(1248,'leave','edit',106,',biz,max,ipd,',',rnd,lite,','1',3),(1249,'leave','delete',106,',biz,max,ipd,',',rnd,lite,','1',4),(1250,'leave','view',106,',biz,max,ipd,',',rnd,lite,','1',1),(1251,'leave','switchstatus',106,',biz,max,ipd,',',rnd,lite,','1',5),(1252,'leave','back',102,',biz,max,ipd,',',rnd,lite,','1',2),(1253,'makeup','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',4),(1254,'makeup','company',105,',biz,max,ipd,',',rnd,lite,','1',1),(1255,'makeup','review',102,',biz,max,ipd,',',rnd,lite,','1',5),(1256,'makeup','export',111,',biz,max,ipd,',',rnd,lite,','1',5),(1257,'makeup','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',5),(1258,'makeup','personal',107,',biz,max,ipd,',',rnd,lite,','1',30),(1259,'makeup','create',107,',biz,max,ipd,',',rnd,lite,','1',35),(1260,'makeup','edit',107,',biz,max,ipd,',',rnd,lite,','1',40),(1261,'makeup','view',107,',biz,max,ipd,',',rnd,lite,','1',45),(1262,'makeup','delete',107,',biz,max,ipd,',',rnd,lite,','1',50),(1263,'makeup','switchstatus',107,',biz,max,ipd,',',rnd,lite,','1',55),(1264,'overtime','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',6),(1265,'overtime','company',105,',biz,max,ipd,',',rnd,lite,','1',2),(1266,'overtime','review',102,',biz,max,ipd,',',rnd,lite,','1',7),(1267,'overtime','export',111,',biz,max,ipd,',',rnd,lite,','1',4),(1268,'overtime','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',6),(1269,'overtime','personal',108,',biz,max,ipd,',',rnd,lite,','1',30),(1270,'overtime','create',108,',biz,max,ipd,',',rnd,lite,','1',35),(1271,'overtime','edit',108,',biz,max,ipd,',',rnd,lite,','1',40),(1272,'overtime','view',108,',biz,max,ipd,',',rnd,lite,','1',45),(1273,'overtime','delete',108,',biz,max,ipd,',',rnd,lite,','1',50),(1274,'overtime','switchstatus',108,',biz,max,ipd,',',rnd,lite,','1',55),(1275,'lieu','company',105,',biz,max,ipd,',',rnd,lite,','1',3),(1276,'lieu','browseReview',102,',biz,max,ipd,',',rnd,lite,','1',8),(1277,'lieu','review',102,',biz,max,ipd,',',rnd,lite,','1',9),(1278,'lieu','setReviewer',104,',biz,max,ipd,',',rnd,lite,','1',7),(1279,'lieu','personal',109,',biz,max,ipd,',',rnd,lite,','1',25),(1280,'lieu','create',109,',biz,max,ipd,',',rnd,lite,','1',30),(1281,'lieu','edit',109,',biz,max,ipd,',',rnd,lite,','1',35),(1282,'lieu','delete',109,',biz,max,ipd,',',rnd,lite,','1',40),(1283,'lieu','view',109,',biz,max,ipd,',',rnd,lite,','1',45),(1284,'lieu','switchstatus',109,',biz,max,ipd,',',rnd,lite,','1',50),(1285,'ops','index',126,',biz,max,ipd,',',rnd,','1',5),(1286,'ops','setting',126,',biz,max,ipd,',',rnd,','1',10),(1287,'host','browse',127,',biz,max,ipd,',',rnd,','1',5),(1288,'host','create',127,',biz,max,ipd,',',rnd,','1',10),(1289,'host','edit',127,',biz,max,ipd,',',rnd,','1',15),(1290,'host','view',127,',biz,max,ipd,',',rnd,','1',20),(1291,'host','delete',127,',biz,max,ipd,',',rnd,','1',25),(1292,'host','changeStatus',127,',biz,max,ipd,',',rnd,','1',30),(1293,'host','treemap',127,',biz,max,ipd,',',rnd,','1',35),(1294,'serverroom','browse',128,',biz,max,ipd,',',rnd,','1',0),(1295,'serverroom','create',128,',biz,max,ipd,',',rnd,','1',2),(1296,'serverroom','edit',128,',biz,max,ipd,',',rnd,','1',3),(1297,'serverroom','view',128,',biz,max,ipd,',',rnd,','1',1),(1298,'serverroom','delete',128,',biz,max,ipd,',',rnd,','1',4),(1299,'account','browse',129,',biz,max,ipd,',',rnd,','1',0),(1300,'account','create',129,',biz,max,ipd,',',rnd,','1',2),(1301,'account','edit',129,',biz,max,ipd,',',rnd,','1',3),(1302,'account','view',129,',biz,max,ipd,',',rnd,','1',1),(1303,'account','delete',129,',biz,max,ipd,',',rnd,','1',4),(1304,'domain','browse',130,',biz,max,ipd,',',rnd,','1',0),(1305,'domain','create',130,',biz,max,ipd,',',rnd,','1',2),(1306,'domain','edit',130,',biz,max,ipd,',',rnd,','1',3),(1307,'domain','view',130,',biz,max,ipd,',',rnd,','1',1),(1308,'domain','delete',130,',biz,max,ipd,',',rnd,','1',4),(1309,'service','browse',131,',biz,max,ipd,',',rnd,','1',0),(1310,'service','create',131,',biz,max,ipd,',',rnd,','1',2),(1311,'service','edit',131,',biz,max,ipd,',',rnd,','1',3),(1312,'service','delete',131,',biz,max,ipd,',',rnd,','1',5),(1313,'service','view',131,',biz,max,ipd,',',rnd,','1',1),(1315,'service','manage',131,',biz,max,ipd,',',rnd,','1',4),(1316,'deploy','browse',132,',biz,max,ipd,',',rnd,','1',0),(1317,'deploy','create',132,',biz,max,ipd,',',rnd,','1',2),(1318,'deploy','edit',132,',biz,max,ipd,',',rnd,','1',3),(1319,'deploy','delete',132,',biz,max,ipd,',',rnd,','1',6),(1320,'deploy','activate',132,',biz,max,ipd,',',rnd,','1',4),(1321,'deploy','finish',132,',biz,max,ipd,',',rnd,','1',5),(1322,'deploy','scope',133,',biz,max,ipd,',',rnd,','1',35),(1323,'deploy','manageScope',133,',biz,max,ipd,',',rnd,','1',40),(1324,'deploy','view',132,',biz,max,ipd,',',rnd,','1',1),(1325,'deploy','cases',135,',biz,max,ipd,',',rnd,','1',50),(1326,'deploy','linkCases',135,',biz,max,ipd,',',rnd,','1',55),(1327,'deploy','unlinkCase',135,',biz,max,ipd,',',rnd,','1',60),(1328,'deploy','batchUnlinkCases',135,',biz,max,ipd,',',rnd,','1',65),(1329,'deploy','steps',134,',biz,max,ipd,',',rnd,','1',0),(1330,'deploy','manageStep',134,',biz,max,ipd,',',rnd,','1',2),(1331,'deploy','finishStep',134,',biz,max,ipd,',',rnd,','1',5),(1332,'deploy','assignTo',134,',biz,max,ipd,',',rnd,','1',4),(1333,'deploy','viewStep',134,',biz,max,ipd,',',rnd,','1',1),(1334,'deploy','editStep',134,',biz,max,ipd,',',rnd,','1',3),(1335,'deploy','deleteStep',134,',biz,max,ipd,',',rnd,','1',8),(1336,'conference','admin',254,',biz,max,ipd,',',rnd,','1',3),(1337,'traincourse','browse',124,',biz,max,ipd,',',rnd,','1',5),(1338,'traincourse','admin',125,',biz,max,ipd,',',rnd,','1',0),(1339,'traincourse','deleteCourse',125,',biz,max,ipd,',',rnd,','1',1),(1340,'traincourse','changeStatus',125,',biz,max,ipd,',',rnd,','1',2),(1341,'traincourse','uploadCourse',125,',biz,max,ipd,',',rnd,','1',3),(1342,'traincourse','viewCourse',124,',biz,max,ipd,',',rnd,','1',30),(1343,'traincourse','viewChapter',124,',biz,max,ipd,',',rnd,','1',35),(1344,'chart','browse',327,',biz,max,ipd,',',rnd,','1',5),(1345,'chart','create',327,',biz,max,ipd,',',rnd,','1',10),(1346,'chart','edit',327,',biz,max,ipd,',',rnd,','1',15),(1347,'chart','design',327,',biz,max,ipd,',',rnd,','1',20),(1348,'chart','delete',327,',biz,max,ipd,',',rnd,','1',25),(1360,'pssp','browse',204,',max,ipd,',',rnd,','1',5),(1361,'pssp','update',204,',max,ipd,',',rnd,','1',10),(1362,'baseline','templateType',262,',max,ipd,',',rnd,','1',0),(1363,'baseline','template',262,',max,ipd,',',rnd,','1',1),(1364,'baseline','createTemplate',262,',max,ipd,',',rnd,','1',3),(1365,'baseline','view',262,',max,ipd,',',rnd,','1',2),(1366,'baseline','editTemplate',262,',max,ipd,',',rnd,','1',4),(1367,'baseline','editBook',262,',max,ipd,',',rnd,','1',5),(1369,'baseline','manageBook',262,',max,ipd,',',rnd,','1',7),(1370,'baseline','delete',262,',max,ipd,',',rnd,','1',6),(1371,'classify','browse',269,',max,ipd,',',rnd,','1',5),(1372,'cm','create',180,',max,ipd,',',rnd,','1',2),(1373,'cm','delete',180,',max,ipd,',',rnd,','1',4),(1374,'cm','edit',180,',max,ipd,',',rnd,','1',3),(1375,'cm','browse',180,',max,ipd,',',rnd,','1',0),(1376,'cm','view',180,',max,ipd,',',rnd,','1',1),(1377,'cm','report',180,',max,ipd,',',rnd,','1',5),(1378,'cmcl','batchCreate',270,',max,ipd,',',rnd,','1',3),(1379,'cmcl','delete',270,',max,ipd,',',rnd,','1',5),(1380,'cmcl','edit',270,',max,ipd,',',rnd,','1',4),(1381,'cmcl','browse',270,',max,ipd,',',rnd,','1',0),(1382,'cmcl','view',270,',max,ipd,',',rnd,','1',2),(1383,'cmcl','waterfallplusBrowse',270,',max,ipd,',',rnd,','1',1),(1384,'auditcl','batchCreate',271,',max,ipd,',',rnd,','1',5),(1385,'auditcl','batchEdit',271,',max,ipd,',',rnd,','1',7),(1386,'auditcl','delete',271,',max,ipd,',',rnd,','1',8),(1387,'auditcl','edit',271,',max,ipd,',',rnd,','1',6),(1389,'auditcl','scrumBrowse',271,',max,ipd,',',rnd,','1',0),(1390,'auditcl','browse',271,',max,ipd,',',rnd,','1',1),(1391,'auditcl','agilePlusBrowse',271,',max,ipd,',',rnd,','1',2),(1392,'auditcl','waterfallplusBrowse',271,',max,ipd,',',rnd,','1',3),(1393,'reviewcl','browse',272,',max,ipd,',',rnd,','1',0),(1394,'reviewcl','create',272,',max,ipd,',',rnd,','1',5),(1395,'reviewcl','batchCreate',272,',max,ipd,',',rnd,','1',6),(1396,'reviewcl','delete',272,',max,ipd,',',rnd,','1',8),(1397,'reviewcl','edit',272,',max,ipd,',',rnd,','1',7),(1398,'reviewcl','view',272,',max,ipd,',',rnd,','1',4),(1399,'reviewcl','waterfallplusBrowse',272,',max,ipd,',',rnd,','1',1),(1400,'process','create',273,',max,ipd,',',rnd,','1',5),(1401,'process','batchCreate',273,',max,ipd,',',rnd,','1',6),(1402,'process','delete',273,',max,ipd,',',rnd,','1',8),(1403,'process','edit',273,',max,ipd,',',rnd,','1',7),(1404,'process','view',273,',max,ipd,',',rnd,','1',4),(1405,'process','updateOrder',273,',max,ipd,',',rnd,','1',9),(1406,'process','activityList',273,',max,ipd,',',rnd,','1',10),(1407,'process','scrumBrowse',273,',max,ipd,',',rnd,','1',0),(1408,'process','browse',273,',max,ipd,',',rnd,','1',1),(1409,'process','agilePlusBrowse',273,',max,ipd,',',rnd,','1',2),(1410,'process','waterfallPlusBrowse',273,',max,ipd,',',rnd,','1',3),(1411,'activity','browse',274,',max,ipd,',',rnd,','1',0),(1412,'activity','create',274,',max,ipd,',',rnd,','1',2),(1413,'activity','batchCreate',274,',max,ipd,',',rnd,','1',3),(1414,'activity','delete',274,',max,ipd,',',rnd,','1',4),(1415,'activity','edit',274,',max,ipd,',',rnd,','1',5),(1416,'activity','view',274,',max,ipd,',',rnd,','1',1),(1417,'activity','assignTo',274,',max,ipd,',',rnd,','1',6),(1418,'activity','outputList',274,',max,ipd,',',rnd,','1',8),(1419,'activity','updateOrder',274,',max,ipd,',',rnd,','1',7),(1420,'zoutput','browse',275,',max,ipd,',',rnd,','1',0),(1421,'zoutput','create',275,',max,ipd,',',rnd,','1',2),(1422,'zoutput','edit',275,',max,ipd,',',rnd,','1',4),(1423,'zoutput','batchCreate',275,',max,ipd,',',rnd,','1',3),(1424,'zoutput','batchEdit',275,',max,ipd,',',rnd,','1',5),(1425,'zoutput','delete',275,',max,ipd,',',rnd,','1',6),(1426,'zoutput','view',275,',max,ipd,',',rnd,','1',1),(1427,'zoutput','updateOrder',275,',max,ipd,',',rnd,','1',7),(1428,'auditplan','browse',206,',max,ipd,',',rnd,','1',0),(1429,'auditplan','create',206,',max,ipd,',',rnd,','1',1),(1430,'auditplan','edit',206,',max,ipd,',',rnd,','1',3),(1431,'auditplan','batchCreate',206,',max,ipd,',',rnd,','1',2),(1432,'auditplan','batchEdit',206,',max,ipd,',',rnd,','1',4),(1433,'auditplan','batchCheck',314,',max,ipd,',',rnd,','1',6),(1434,'auditplan','check',314,',max,ipd,',',rnd,','1',5),(1435,'auditplan','nc',206,',max,ipd,',',rnd,','1',8),(1436,'auditplan','result',206,',max,ipd,',',rnd,','1',7),(1437,'auditplan','delete',206,',max,ipd,',',rnd,','1',10),(1438,'auditplan','assignTo',206,',max,ipd,',',rnd,','1',9),(1439,'subject','browse',267,',max,ipd,',',rnd,','1',35),(1440,'approvalflow','browse',277,',max,ipd,',',rnd,','1',4),(1441,'approvalflow','create',277,',max,ipd,',',rnd,','1',6),(1442,'approvalflow','edit',277,',max,ipd,',',rnd,','1',7),(1443,'approvalflow','view',277,',max,ipd,',',rnd,','1',5),(1444,'approvalflow','design',277,',max,ipd,',',rnd,','1',8),(1445,'approvalflow','delete',277,',max,ipd,',',rnd,','1',9),(1446,'approvalflow','role',277,',max,ipd,',',rnd,','1',0),(1447,'approvalflow','createRole',277,',max,ipd,',',rnd,','1',1),(1448,'approvalflow','editRole',277,',max,ipd,',',rnd,','1',2),(1449,'approvalflow','deleteRole',277,',max,ipd,',',rnd,','1',3),(1450,'reviewissue','issue',179,',max,ipd,',',rnd,','1',0),(1451,'reviewissue','updateStatus',179,',max,ipd,',',rnd,','1',5),(1452,'reviewissue','resolved',179,',max,ipd,',',rnd,','1',3),(1453,'reviewissue','create',179,',max,ipd,',',rnd,','1',2),(1454,'reviewissue','edit',179,',max,ipd,',',rnd,','1',4),(1455,'reviewissue','view',179,',max,ipd,',',rnd,','1',1),(1456,'reviewissue','delete',179,',max,ipd,',',rnd,','1',6),(1457,'reviewsetting','version',272,',max,ipd,',',rnd,','1',2),(1459,'reviewsetting','waterfallplusVersion',272,',max,ipd,',',rnd,','1',3),(1460,'review','browse',178,',max,ipd,',',rnd,','1',0),(1461,'review','assess',315,',max,ipd,',',rnd,','1',4),(1462,'review','create',178,',max,ipd,',',rnd,','1',2),(1463,'review','edit',178,',max,ipd,',',rnd,','1',5),(1464,'review','view',178,',max,ipd,',',rnd,','1',1),(1465,'review','submit',178,',max,ipd,',',rnd,','1',3),(1466,'review','recall',178,',max,ipd,',',rnd,','1',6),(1467,'review','report',178,',max,ipd,',',rnd,','1',7),(1468,'review','toAudit',178,',max,ipd,',',rnd,','1',8),(1469,'review','audit',316,',max,ipd,',',rnd,','1',9),(1470,'review','delete',178,',max,ipd,',',rnd,','1',10),(1471,'measurement','settips',278,',max,ipd,',',rnd,','1',0),(1472,'measurement','setSQL',278,',max,ipd,',',rnd,','1',3),(1473,'measurement','browse',278,',max,ipd,',',rnd,','1',1),(1474,'measurement','createBasic',278,',max,ipd,',',rnd,','1',2),(1475,'measurement','delete',278,',max,ipd,',',rnd,','1',6),(1477,'measurement','editBasic',278,',max,ipd,',',rnd,','1',4),(1478,'measurement','searchMeas',278,',max,ipd,',',rnd,','1',14),(1479,'measurement','template',278,',max,ipd,',',rnd,','1',7),(1480,'measurement','createTemplate',278,',max,ipd,',',rnd,','1',23),(1481,'measurement','editTemplate',278,',max,ipd,',',rnd,','1',9),(1482,'measurement','viewTemplate',278,',max,ipd,',',rnd,','1',8),(1488,'measurement','batchEdit',278,',max,ipd,',',rnd,','1',5),(1489,'measurement','saveReport',278,',max,ipd,',',rnd,','1',24),(1490,'measrecord','browse',205,',max,ipd,',',rnd,','1',0),(1491,'assetlib','caselib',98,',max,ipd,',',rnd,','1',0),(1492,'assetlib','storylib',74,',max,ipd,',',rnd,','1',0),(1493,'assetlib','createStorylib',75,',max,ipd,',',rnd,','1',0),(1494,'assetlib','editStorylib',75,',max,ipd,',',rnd,','1',1),(1495,'assetlib','deleteStorylib',76,',max,ipd,',',rnd,','1',25),(1496,'assetlib','storyLibView',74,',max,ipd,',',rnd,','1',1),(1497,'assetlib','story',74,',max,ipd,',',rnd,','1',2),(1498,'assetlib','importStory',75,',max,ipd,',',rnd,','1',3),(1499,'assetlib','assignToStory',75,',max,ipd,',',rnd,','1',6),(1500,'assetlib','batchAssignToStory',75,',max,ipd,',',rnd,','1',7),(1501,'assetlib','approveStory',77,',max,ipd,',',rnd,','1',55),(1502,'assetlib','batchApproveStory',77,',max,ipd,',',rnd,','1',60),(1503,'assetlib','editStory',75,',max,ipd,',',rnd,','1',5),(1504,'assetlib','removeStory',75,',max,ipd,',',rnd,','1',8),(1505,'assetlib','batchRemoveStory',75,',max,ipd,',',rnd,','1',9),(1506,'assetlib','storyView',74,',max,ipd,',',rnd,','1',3),(1507,'assetlib','issuelib',78,',max,ipd,',',rnd,','1',0),(1508,'assetlib','createIssuelib',79,',max,ipd,',',rnd,','1',0),(1509,'assetlib','editIssuelib',79,',max,ipd,',',rnd,','1',1),(1510,'assetlib','deleteIssuelib',80,',max,ipd,',',rnd,','1',100),(1511,'assetlib','issueLibView',78,',max,ipd,',',rnd,','1',2),(1512,'assetlib','issue',78,',max,ipd,',',rnd,','1',1),(1513,'assetlib','importIssue',79,',max,ipd,',',rnd,','1',3),(1514,'assetlib','assignToIssue',79,',max,ipd,',',rnd,','1',5),(1515,'assetlib','batchAssignToIssue',79,',max,ipd,',',rnd,','1',6),(1516,'assetlib','approveIssue',81,',max,ipd,',',rnd,','1',130),(1517,'assetlib','batchApproveIssue',81,',max,ipd,',',rnd,','1',135),(1518,'assetlib','editIssue',79,',max,ipd,',',rnd,','1',4),(1519,'assetlib','removeIssue',79,',max,ipd,',',rnd,','1',7),(1520,'assetlib','batchRemoveIssue',79,',max,ipd,',',rnd,','1',8),(1521,'assetlib','issueView',78,',max,ipd,',',rnd,','1',3),(1522,'assetlib','risklib',82,',max,ipd,',',rnd,','1',160),(1523,'assetlib','createRisklib',83,',max,ipd,',',rnd,','1',0),(1524,'assetlib','editRisklib',83,',max,ipd,',',rnd,','1',1),(1525,'assetlib','deleteRisklib',84,',max,ipd,',',rnd,','1',175),(1526,'assetlib','riskLibView',82,',max,ipd,',',rnd,','1',180),(1527,'assetlib','risk',82,',max,ipd,',',rnd,','1',185),(1528,'assetlib','importRisk',83,',max,ipd,',',rnd,','1',3),(1529,'assetlib','assignToRisk',83,',max,ipd,',',rnd,','1',5),(1530,'assetlib','batchAssignToRisk',83,',max,ipd,',',rnd,','1',6),(1531,'assetlib','approveRisk',85,',max,ipd,',',rnd,','1',205),(1532,'assetlib','batchApproveRisk',85,',max,ipd,',',rnd,','1',210),(1533,'assetlib','editRisk',83,',max,ipd,',',rnd,','1',4),(1534,'assetlib','removeRisk',83,',max,ipd,',',rnd,','1',7),(1535,'assetlib','batchRemoveRisk',83,',max,ipd,',',rnd,','1',8),(1536,'assetlib','riskView',82,',max,ipd,',',rnd,','1',230),(1537,'assetlib','opportunitylib',86,',max,ipd,',',rnd,','1',235),(1538,'assetlib','createOpportunitylib',87,',max,ipd,',',rnd,','1',0),(1539,'assetlib','editOpportunitylib',87,',max,ipd,',',rnd,','1',1),(1540,'assetlib','deleteOpportunitylib',88,',max,ipd,',',rnd,','1',250),(1541,'assetlib','opportunityLibView',86,',max,ipd,',',rnd,','1',255),(1542,'assetlib','opportunity',86,',max,ipd,',',rnd,','1',255),(1543,'assetlib','importOpportunity',87,',max,ipd,',',rnd,','1',3),(1544,'assetlib','assignToOpportunity',87,',max,ipd,',',rnd,','1',5),(1545,'assetlib','batchAssignToOpportunity',87,',max,ipd,',',rnd,','1',6),(1546,'assetlib','approveOpportunity',89,',max,ipd,',',rnd,','1',255),(1547,'assetlib','batchApproveOpportunity',89,',max,ipd,',',rnd,','1',255),(1548,'assetlib','editOpportunity',87,',max,ipd,',',rnd,','1',4),(1549,'assetlib','removeOpportunity',87,',max,ipd,',',rnd,','1',7),(1550,'assetlib','batchRemoveOpportunity',87,',max,ipd,',',rnd,','1',8),(1551,'assetlib','opportunityView',86,',max,ipd,',',rnd,','1',255),(1552,'assetlib','practicelib',90,',max,ipd,',',rnd,','1',255),(1553,'assetlib','createPracticelib',91,',max,ipd,',',rnd,','1',0),(1554,'assetlib','editPracticelib',91,',max,ipd,',',rnd,','1',1),(1555,'assetlib','deletePracticelib',92,',max,ipd,',',rnd,','1',255),(1556,'assetlib','practiceLibView',90,',max,ipd,',',rnd,','1',255),(1557,'assetlib','practice',90,',max,ipd,',',rnd,','1',255),(1558,'assetlib','importPractice',91,',max,ipd,',',rnd,','1',3),(1559,'assetlib','assignToPractice',91,',max,ipd,',',rnd,','1',5),(1560,'assetlib','batchAssignToPractice',91,',max,ipd,',',rnd,','1',6),(1561,'assetlib','approvePractice',93,',max,ipd,',',rnd,','1',255),(1562,'assetlib','batchApprovePractice',93,',max,ipd,',',rnd,','1',255),(1563,'assetlib','editPractice',91,',max,ipd,',',rnd,','1',4),(1564,'assetlib','removePractice',91,',max,ipd,',',rnd,','1',7),(1565,'assetlib','batchRemovePractice',91,',max,ipd,',',rnd,','1',8),(1566,'assetlib','practiceView',90,',max,ipd,',',rnd,','1',255),(1567,'assetlib','componentlib',94,',max,ipd,',',rnd,','1',255),(1568,'assetlib','createComponentlib',95,',max,ipd,',',rnd,','1',0),(1569,'assetlib','editComponentlib',95,',max,ipd,',',rnd,','1',1),(1570,'assetlib','deleteComponentlib',96,',max,ipd,',',rnd,','1',255),(1571,'assetlib','componentLibView',94,',max,ipd,',',rnd,','1',255),(1572,'assetlib','component',94,',max,ipd,',',rnd,','1',255),(1573,'assetlib','importComponent',95,',max,ipd,',',rnd,','1',3),(1574,'assetlib','assignToComponent',95,',max,ipd,',',rnd,','1',5),(1575,'assetlib','batchAssignToComponent',95,',max,ipd,',',rnd,','1',6),(1576,'assetlib','approveComponent',97,',max,ipd,',',rnd,','1',255),(1577,'assetlib','batchApproveComponent',97,',max,ipd,',',rnd,','1',255),(1578,'assetlib','editComponent',95,',max,ipd,',',rnd,','1',4),(1579,'assetlib','removeComponent',95,',max,ipd,',',rnd,','1',7),(1580,'assetlib','batchRemoveComponent',95,',max,ipd,',',rnd,','1',8),(1581,'assetlib','componentView',94,',max,ipd,',',rnd,','1',255),(1583,'assetlib','storylibSort',75,',max,ipd,',',rnd,','1',2),(1584,'assetlib','caselibSort',99,',max,ipd,',',rnd,','1',2),(1585,'assetlib','issuelibSort',79,',max,ipd,',',rnd,','1',2),(1586,'assetlib','risklibSort',83,',max,ipd,',',rnd,','1',2),(1587,'assetlib','opportunitylibSort',87,',max,ipd,',',rnd,','1',2),(1588,'assetlib','practicelibSort',91,',max,ipd,',',rnd,','1',2),(1589,'assetlib','componentlibSort',95,',max,ipd,',',rnd,','1',2),(1590,'setting','xuanxuan',254,',open,biz,max,ipd,',',rnd,lite,','1',0),(1596,'im','downloadXxdPackage',254,',open,biz,max,ipd,',',rnd,lite,','1',2),(1597,'im','debug',254,',open,biz,max,ipd,',',rnd,lite,','1',1),(1598,'client','browse',254,',open,biz,max,ipd,',',rnd,lite,','1',4),(1599,'client','create',254,',open,biz,max,ipd,',',rnd,lite,','1',5),(1600,'client','edit',254,',open,biz,max,ipd,',',rnd,lite,','1',6),(1601,'client','delete',254,',open,biz,max,ipd,',',rnd,lite,','1',7),(1615,'screen','create',319,',biz,max,ipd,',',rnd,','1',5),(1616,'screen','edit',319,',biz,max,ipd,',',rnd,','1',10),(1617,'screen','design',319,',biz,max,ipd,',',rnd,','1',15),(1618,'screen','publish',319,',biz,max,ipd,',',rnd,','1',20),(1619,'screen','delete',320,',biz,max,ipd,',',rnd,','1',25),(1620,'screen','annualData',318,',open,biz,max,ipd,',',rnd,','1',30),(1621,'screen','allAnnualData',321,',open,biz,max,ipd,',',rnd,','1',35),(1622,'pivot','browse',323,',biz,max,ipd,',',rnd,','1',5),(1623,'pivot','preview',322,',open,biz,max,ipd,',',rnd,','1',0),(1624,'pivot','create',323,',biz,max,ipd,',',rnd,','1',15),(1625,'pivot','edit',323,',biz,max,ipd,',',rnd,','1',20),(1626,'pivot','design',323,',biz,max,ipd,',',rnd,','1',25),(1627,'pivot','delete',323,',biz,max,ipd,',',rnd,','1',30),(1628,'pivot','export',324,',biz,max,ipd,',',rnd,','1',35),(1629,'pivot','showProduct',325,',biz,max,ipd,',',rnd,','1',40),(1630,'pivot','showProject',325,',biz,max,ipd,',',rnd,','1',45),(1631,'pivot','projectDeviation',322,',open,biz,max,ipd,',',rnd,','1',4),(1632,'pivot','productSummary',322,',open,biz,max,ipd,',',rnd,','1',1),(1633,'pivot','bugCreate',322,',open,biz,max,ipd,',',rnd,','1',5),(1634,'pivot','bugAssign',322,',open,biz,max,ipd,',',rnd,','1',6),(1635,'pivot','workload',322,',open,biz,max,ipd,',',rnd,','1',11),(1636,'pivot','casesrun',322,',biz,max,ipd,',',rnd,','1',8),(1637,'pivot','storyLinkedBug',322,',biz,max,ipd,',',rnd,','1',10),(1638,'pivot','testcase',322,',biz,max,ipd,',',rnd,','1',7),(1639,'pivot','build',322,',biz,max,ipd,',',rnd,','1',9),(1640,'pivot','workSummary',322,',biz,max,ipd,',',rnd,','1',12),(1641,'pivot','roadmap',322,',max,ipd,',',rnd,','1',2),(1642,'pivot','productInvest',322,',biz,max,ipd,',',rnd,','1',3),(1643,'pivot','bugSummary',322,',biz,max,ipd,',',rnd,','1',14),(1644,'pivot','bugAssignSummary',322,',biz,max,ipd,',',rnd,','1',15),(1645,'pivot','workAssignSummary',322,',biz,max,ipd,',',rnd,','1',13),(1646,'chart','preview',326,',open,biz,max,ipd,',',rnd,','1',5),(1648,'dataview','browse',329,',biz,max,ipd,',',rnd,','1',5),(1649,'dataview','create',330,',biz,max,ipd,',',rnd,','1',10),(1650,'dataview','edit',330,',biz,max,ipd,',',rnd,','1',15),(1651,'dataview','query',330,',biz,max,ipd,',',rnd,','1',20),(1652,'dataview','delete',331,',biz,max,ipd,',',rnd,','1',25),(1653,'dimension','browse',317,',biz,max,ipd,',',rnd,','1',5),(1654,'dimension','create',317,',biz,max,ipd,',',rnd,','1',10),(1655,'dimension','edit',317,',biz,max,ipd,',',rnd,','1',15),(1656,'dimension','delete',317,',biz,max,ipd,',',rnd,','1',20),(1664,'custom','limitTaskDate',276,',open,biz,max,ipd,',',rnd,','1',10),(1665,'tree','browsegroup',259,',biz,max,ipd,',',rnd,','1',2),(1673,'testcase','createScene',344,',open,biz,max,ipd,',',rnd,','1',5),(1674,'testcase','editScene',344,',open,biz,max,ipd,',',rnd,','1',10),(1675,'testcase','deleteScene',344,',open,biz,max,ipd,',',rnd,','1',15),(1676,'testcase','changeScene',344,',open,biz,max,ipd,',',rnd,','1',20),(1677,'testcase','batchChangeScene',344,',open,biz,max,ipd,',',rnd,','1',25),(1678,'testcase','updateOrder',142,',open,biz,max,ipd,',',rnd,','1',30),(1679,'testcase','importXmind',143,',open,biz,max,ipd,',',rnd,','1',6),(1682,'testcase','exportXmind',143,',open,biz,max,ipd,',',rnd,','1',2),(1694,'repo','import',239,',open,biz,max,ipd,',',rnd,','1',3),(1695,'chart','export',328,',biz,max,ipd,',',rnd,','1',5),(1701,'doc','index',333,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(1702,'doc','mySpace',333,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(1703,'doc','myView',333,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(1704,'doc','myCollection',333,',open,biz,max,ipd,',',rnd,lite,or,','1',7),(1705,'doc','myCreation',333,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(1706,'doc','createLib',334,',open,biz,max,ipd,',',rnd,lite,or,','1',0),(1707,'doc','editLib',334,',open,biz,max,ipd,',',rnd,lite,or,','1',1),(1708,'doc','deleteLib',335,',open,biz,max,ipd,',',rnd,lite,or,','1',40),(1709,'doc','create',334,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(1710,'doc','edit',334,',open,biz,max,ipd,',',rnd,lite,or,','1',4),(1711,'doc','view',333,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(1712,'doc','delete',335,',open,biz,max,ipd,',',rnd,lite,or,','1',60),(1713,'doc','deleteFile',335,',open,biz,max,ipd,',',rnd,lite,or,','1',65),(1714,'doc','collect',334,',open,biz,max,ipd,',',rnd,lite,or,','1',8),(1715,'doc','productSpace',333,',open,biz,max,ipd,',',rnd,or,','1',2),(1716,'doc','projectSpace',333,',open,biz,max,ipd,',',rnd,lite,or,','1',3),(1717,'doc','teamSpace',333,',open,biz,max,ipd,',',rnd,or,','1',4),(1718,'doc','showFiles',334,',open,biz,max,ipd,',',rnd,lite,or,','1',2),(1719,'doc','addCatalog',334,',open,biz,max,ipd,',',rnd,lite,or,','1',5),(1720,'doc','editCatalog',334,',open,biz,max,ipd,',',rnd,lite,or,','1',6),(1721,'doc','sortCatalog',334,',open,biz,max,ipd,',',rnd,or,','1',7),(1722,'doc','deleteCatalog',335,',open,biz,max,ipd,',',rnd,lite,or,','1',110),(1723,'doc','displaySetting',333,',open,biz,max,ipd,',',rnd,lite,or,','1',10),(1724,'doc','diff',333,',biz,max,ipd,',',rnd,lite,','1',11),(1725,'doc','mine2export',336,',biz,max,ipd,',',rnd,lite,','1',125),(1726,'doc','product2export',336,',biz,max,ipd,',',rnd,lite,','1',130),(1727,'doc','project2export',336,',biz,max,ipd,',',rnd,lite,','1',135),(1728,'doc','custom2export',336,',biz,max,ipd,',',rnd,lite,','1',140),(1729,'doc','execution2export',56,',biz,max,ipd,',',rnd,lite,','1',145),(1730,'doc','importToPracticeLib',48,',max,ipd,',',rnd,','1',150),(1731,'doc','importToComponentLib',48,',max,ipd,',',rnd,','1',155),(1732,'report','show',205,',max,ipd,',',rnd,','1',3),(1733,'report','custom',278,',max,ipd,',',rnd,','1',17),(1734,'report','editReport',278,',max,ipd,',',rnd,','1',18),(1735,'report','useReport',278,',max,ipd,',',rnd,','1',19),(1736,'report','deleteReport',278,',max,ipd,',',rnd,','1',20),(1737,'report','saveReport',278,',max,ipd,',',rnd,','1',21),(1738,'report','crystalExport',278,',max,ipd,',',rnd,','1',22),(1739,'report','customeredReport',205,',max,ipd,',',rnd,','1',4),(1740,'report','viewReport',205,',max,ipd,',',rnd,','1',5),(1741,'report','projectSummary',205,',max,ipd,',',rnd,','1',1),(1742,'report','projectWorkload',205,',max,ipd,',',rnd,','1',2),(1743,'report','export',278,',biz,max,ipd,',',rnd,','1',25),(1744,'api','index',338,',open,biz,max,ipd,',',rnd,','1',5),(1745,'api','createLib',339,',open,biz,max,ipd,',',rnd,','1',0),(1746,'api','editLib',339,',open,biz,max,ipd,',',rnd,','1',1),(1747,'api','deleteLib',341,',open,biz,max,ipd,',',rnd,','1',0),(1748,'api','createRelease',339,',open,biz,max,ipd,',',rnd,','1',4),(1749,'api','releases',339,',open,biz,max,ipd,',',rnd,','1',5),(1750,'api','deleteRelease',341,',open,biz,max,ipd,',',rnd,','1',3),(1751,'api','struct',339,',open,biz,max,ipd,',',rnd,','1',8),(1752,'api','createStruct',339,',open,biz,max,ipd,',',rnd,','1',6),(1753,'api','editStruct',339,',open,biz,max,ipd,',',rnd,','1',7),(1754,'api','deleteStruct',341,',open,biz,max,ipd,',',rnd,','1',2),(1755,'api','create',339,',open,biz,max,ipd,',',rnd,','1',2),(1756,'api','edit',339,',open,biz,max,ipd,',',rnd,','1',3),(1757,'api','delete',341,',open,biz,max,ipd,',',rnd,','1',1),(1758,'api','addCatalog',339,',open,biz,max,ipd,',',rnd,','1',9),(1759,'api','editCatalog',339,',open,biz,max,ipd,',',rnd,','1',10),(1760,'api','sortCatalog',339,',open,biz,max,ipd,',',rnd,','1',60),(1761,'api','deleteCatalog',341,',open,biz,max,ipd,',',rnd,','1',4),(1762,'api','getModel',342,',open,biz,max,ipd,',',rnd,','1',5),(1763,'api','debug',228,',open,biz,max,ipd,',',rnd,','1',35),(1764,'api','sql',342,',open,biz,max,ipd,',',rnd,','1',105),(1765,'api','export',340,',biz,max,ipd,',',rnd,','1',110),(1766,'doc','myEdited',333,',open,biz,max,ipd,',',rnd,or,','1',9),(1767,'traincourse','batchImport',125,',biz,max,ipd,',',rnd,','1',4),(2060,'product','activate',21,',ipd,',',or,rnd,','1',10),(2061,'charter','browse',636,',ipd,',',or,','1',10),(2062,'charter','create',638,',ipd,',',or,','1',20),(2063,'charter','edit',638,',ipd,',',or,','1',30),(2064,'charter','view',636,',ipd,',',or,','1',40),(2065,'charter','delete',638,',ipd,',',or,','1',50),(2066,'charter','review',639,',ipd,',',or,','1',60),(2067,'charter','loadRoadmapStories',636,',ipd,',',or,','1',70),(2068,'demandpool','browse',635,',ipd,',',or,','1',10),(2069,'demandpool','create',637,',ipd,',',or,','1',20),(2070,'demandpool','edit',637,',ipd,',',or,','1',30),(2071,'demandpool','view',635,',ipd,',',or,','1',40),(2072,'demandpool','close',637,',ipd,',',or,','1',50),(2073,'demandpool','activate',637,',ipd,',',or,','1',60),(2074,'demandpool','delete',649,',ipd,',',or,','1',70),(2075,'demand','browse',640,',ipd,',',or,','1',10),(2076,'demand','create',641,',ipd,',',or,','1',20),(2077,'demand','batchCreate',641,',ipd,',',or,','1',30),(2078,'demand','edit',641,',ipd,',',or,','1',40),(2079,'demand','view',640,',ipd,',',or,','1',50),(2080,'demand','assignTo',641,',ipd,',',or,','1',60),(2081,'demand','change',641,',ipd,',',or,','1',70),(2082,'demand','review',642,',ipd,',',or,','1',80),(2083,'demand','submitReview',642,',ipd,',',or,','1',90),(2084,'demand','recall',642,',ipd,',',or,','1',100),(2085,'demand','track',640,',ipd,',',or,','1',110),(2086,'demand','manageTree',641,',ipd,',',or,','1',120),(2091,'demand','delete',644,',ipd,',',or,','1',170),(2092,'demand','close',641,',ipd,',',or,','1',180),(2093,'demand','activate',641,',ipd,',',or,','1',190),(2094,'demand','distribute',641,',ipd,',',or,','1',200),(2095,'roadmap','browse',646,',ipd,',',or,rnd,','1',10),(2096,'roadmap','view',646,',ipd,',',or,rnd,','1',20),(2097,'roadmap','linkUR',647,',ipd,',',or,','1',30),(2098,'roadmap','create',647,',ipd,',',or,','1',40),(2099,'roadmap','edit',647,',ipd,',',or,','1',50),(2100,'roadmap','close',647,',ipd,',',or,','1',60),(2101,'roadmap','delete',648,',ipd,',',or,','1',70),(2102,'roadmap','activate',647,',ipd,',',or,','1',80),(2103,'roadmap','unlinkUR',647,',ipd,',',or,','1',90),(2104,'roadmap','batchUnlinkUR',647,',ipd,',',or,','1',100),(2105,'my','story',351,',ipd,',',lite,','1',10),(2106,'my','task',351,',ipd,',',lite,','1',20),(2107,'traincourse','cloudImport',125,',biz,max,ipd,',',rnd,','1',10),(2108,'dataview','export',650,',biz,max,ipd,',',rnd,','1',30),(2109,'demand','export',643,',ipd,',',or,','1',210),(2110,'demand','exportTemplate',643,',ipd,',',or,','1',220),(2111,'demand','import',643,',ipd,',',or,','1',230),(2112,'requirement','batchChangeRoadmap',32,',ipd,',',or,','1',125),(2113,'charter','close',638,',ipd,',',or,','1',80),(2114,'charter','activate',638,',ipd,',',or,','1',90),(2115,'requirement', 'relation', '32', ',max,ipd,', ',rnd,', '1', '130'),(2116, 'file', 'preview', '260', ',open,biz,max,ipd,', ',rnd,lite,or,', '1', '26'),(2117, 'ai', 'models', 653, ',open,biz,max,', ',rnd,', '1', 5),(2118, 'ai', 'editModel', 653, ',open,biz,max,', ',rnd,', '1', 10),(2119, 'ai', 'testConnection', 653, ',open,biz,max,', ',rnd,', '1', 15),(2120, 'ai', 'createPrompt', 655, ',biz,max,', ',rnd,', '1', 20),(2121, 'ai', 'promptEdit', 655, ',biz,max,', ',rnd,', '1', 25),(2122, 'ai', 'promptDelete', 657, ',biz,max,', ',rnd,', '1', 30),(2123, 'ai', 'promptAssignRole', 655, ',biz,max,', ',rnd,', '1', 35),(2124, 'ai', 'promptSelectDataSource', 655, ',biz,max,', ',rnd,', '1', 40),(2125, 'ai', 'promptSetPurpose', 655, ',biz,max,', ',rnd,', '1', 45),(2126, 'ai', 'promptSetTargetForm', 655, ',biz,max,', ',rnd,', '1', 50),(2127, 'ai', 'promptFinalize', 655, ',biz,max,', ',rnd,', '1', 55),(2128, 'ai', 'promptAudit', 655, ',biz,max,', ',rnd,', '1', 60),(2129, 'ai', 'promptPublish', 656, ',open,biz,max,', ',rnd,', '1', 65),(2130, 'ai', 'promptUnpublish', 656, ',open,biz,max,', ',rnd,', '1', 70),(2131, 'ai', 'prompts', 654, ',open,biz,max,', ',rnd,', '1', 75),(2132, 'ai', 'promptView', 654, ',open,biz,max,', ',rnd,', '1', 80),(2133, 'ai', 'promptExecute', 652, ',open,biz,max,', ',rnd,', '1', 85),(2134, 'ai', 'roleTemplates', 655, ',biz,max,', ',rnd,', '1', 90),(2135, 'ai', 'promptExecutionReset', 652, ',open,biz,max,', ',rnd,', '1', 95); +REPLACE INTO `zt_privmanager` (`id`, `parent`, `code`, `type`, `edition`, `vision`, `order`) VALUES (4,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(5,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(6,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(7,352,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(8,353,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(9,354,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(10,354,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(11,357,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(12,357,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(13,357,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(14,358,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(15,358,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(16,358,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(17,359,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(18,351,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(19,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(20,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(21,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(22,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(23,367,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(24,367,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(25,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(26,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(27,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(28,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(29,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(30,361,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(31,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(32,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(33,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(34,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(35,363,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(36,364,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(37,364,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(38,364,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(39,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(40,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(41,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(42,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(43,365,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(44,370,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(45,371,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(46,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(47,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(48,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(50,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(51,369,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(52,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(53,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(54,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(55,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(56,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(57,416,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(58,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(60,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(61,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(62,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(63,407,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(64,416,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(65,411,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(66,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(67,412,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(68,413,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(69,414,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(71,406,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(72,408,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(73,408,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(74,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(75,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(76,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(77,432,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(78,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(79,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(80,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(81,433,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(82,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(83,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(84,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(85,434,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(86,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(87,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(88,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(89,435,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(90,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(91,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(92,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(93,436,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(94,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(95,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(96,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(97,437,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(98,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(99,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(100,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(101,430,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(102,552,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(103,547,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(104,553,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(105,554,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(106,548,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(107,549,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(108,550,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(109,551,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(110,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(111,555,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(112,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(113,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(114,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(115,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(116,543,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(117,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(118,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(119,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(121,542,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(122,544,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(123,545,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(124,566,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(125,566,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(126,557,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(127,558,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(128,559,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(129,560,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(130,561,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(131,562,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(132,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(133,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(134,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(135,563,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(136,421,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(137,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(138,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(139,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(140,422,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(141,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(142,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(143,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(144,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(145,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(146,424,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(147,424,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(148,424,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(149,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',40),(150,425,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(151,425,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(152,425,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(153,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(154,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(155,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(156,426,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(157,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(158,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(159,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(160,427,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(161,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(162,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(163,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(164,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(165,451,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(166,452,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(167,453,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(168,454,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(169,455,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(170,456,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(171,372,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(175,373,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(176,373,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(177,373,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(178,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(179,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(180,396,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(181,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(182,401,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(183,401,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(184,402,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(185,402,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(186,378,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(187,378,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(188,378,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(189,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(190,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(191,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(192,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(193,375,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(194,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(195,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(196,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(197,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(198,376,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(199,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(200,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(201,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(202,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(203,381,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(204,395,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(205,400,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(206,403,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(207,403,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(208,387,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(209,404,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(210,404,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(211,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(212,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(213,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(214,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(215,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(216,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(217,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',40),(218,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',45),(220,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',50),(221,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',55),(222,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',60),(223,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(224,506,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(225,506,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(226,470,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(227,506,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(228,470,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(229,470,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(230,505,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(231,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(232,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(233,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(234,479,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(235,463,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(236,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(237,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(238,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(239,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(240,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(241,483,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(242,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(243,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(244,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(245,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(246,516,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(247,516,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(248,505,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(249,461,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(250,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(251,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(252,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(253,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(254,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(255,517,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(256,478,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(257,518,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(258,537,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(259,519,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(260,520,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(261,540,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(262,482,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(263,362,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(264,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(265,388,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(266,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(267,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(268,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(269,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(270,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',50),(271,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(272,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',45),(273,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(274,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',35),(275,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',40),(276,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(277,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(278,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(279,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(280,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(281,481,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(282,480,'','package',',open,biz,max,ipd,',',rnd,lite,or,',55),(283,419,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(284,419,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(285,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(286,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(287,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(288,428,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(289,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',45),(290,415,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(291,355,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(292,394,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(293,393,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(295,524,'','package',',open,biz,max,ipd,',',rnd,lite,or,',65),(296,539,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(297,536,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(298,507,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(299,504,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(300,503,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(301,538,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(302,391,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(303,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(304,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(305,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(306,389,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(307,372,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(308,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(309,408,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(311,414,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(312,418,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(313,371,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(314,403,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(315,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(316,392,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(317,446,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(318,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(319,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(320,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(321,442,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(322,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(323,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(324,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(325,443,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(326,444,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(327,444,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(328,444,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(329,445,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(330,445,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(331,445,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(333,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(334,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(335,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(336,439,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(338,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(339,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',10),(340,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',15),(341,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(342,440,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(344,423,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(345,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',20),(346,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',25),(347,409,'','package',',open,biz,max,ipd,',',rnd,lite,or,',30),(348,0,'index','view',',open,biz,max,',',rnd,',10),(349,348,'index','module',',open,biz,max,ipd,',',rnd,lite,or,',10),(350,0,'my','view',',open,biz,max,ipd,',',rnd,lite,or,',5),(351,350,'my','module',',open,biz,max,ipd,',',rnd,lite,or,',20),(352,350,'todo','module',',open,biz,max,ipd,',',rnd,lite,or,',30),(353,350,'contact','module',',open,biz,max,ipd,',',rnd,lite,or,',40),(354,350,'personalsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',50),(355,350,'effort','module',',biz,max,ipd,',',rnd,lite,or,',60),(356,0,'program','view',',open,biz,max,ipd,',',rnd,',30),(357,356,'program','module',',open,biz,max,ipd,',',rnd,',70),(358,356,'personnel','module',',open,biz,max,ipd,',',rnd,lite,',80),(359,356,'programstakeholder','module',',open,biz,max,ipd,',',rnd,lite,or,',90),(360,0,'product','view',',open,biz,max,ipd,',',rnd,or,',15),(361,360,'product','module',',open,biz,max,ipd,',',rnd,or,',100),(362,360,'story','module',',open,biz,max,ipd,',',rnd,lite,',110),(363,360,'requirement','module',',open,biz,max,ipd,',',rnd,or,',120),(364,360,'productplan','module',',open,biz,max,ipd,',',rnd,',130),(365,360,'release','module',',open,biz,max,ipd,',',rnd,',140),(366,360,'branch','module',',open,biz,max,ipd,',',rnd,or,',150),(367,360,'productsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',160),(368,0,'project','view',',open,biz,max,ipd,',',rnd,lite,',50),(369,368,'project','module',',open,biz,max,ipd,',',rnd,lite,',170),(370,368,'projectplan','module',',open,biz,max,ipd,',',rnd,',180),(371,368,'projectstory','module',',open,biz,max,ipd,',',rnd,lite,',190),(372,368,'programplan','module',',open,biz,max,ipd,',',rnd,',200),(373,368,'design','module',',open,biz,max,ipd,',',rnd,',210),(374,368,'milestone','module',',max,ipd,',',rnd,',220),(375,368,'issue','module',',max,ipd,',',rnd,',230),(376,368,'risk','module',',max,ipd,',',rnd,',240),(377,368,'budget','module',',max,ipd,',',rnd,',250),(378,368,'workestimation','module',',open,biz,max,ipd,',',rnd,lite,or,',260),(379,368,'durationestimation','module',',max,ipd,',',rnd,',270),(380,368,'weekly','module',',max,ipd,',',rnd,',280),(381,368,'opportunity','module',',max,ipd,',',rnd,',290),(382,368,'trainplan','module',',max,ipd,',',rnd,',300),(383,368,'nc','module',',max,ipd,',',rnd,',310),(384,368,'gapanalysis','module',',open,biz,max,ipd,',',rnd,lite,or,',320),(385,368,'researchplan','module',',open,biz,max,ipd,',',rnd,lite,or,',330),(386,368,'researchreport','module',',max,ipd,',',rnd,',340),(387,368,'meeting','module',',max,ipd,',',rnd,',350),(388,368,'projectbuild','module',',open,biz,max,ipd,',',rnd,',360),(389,368,'projectrelease','module',',open,biz,max,ipd,',',rnd,',370),(390,368,'stakeholder','module',',open,biz,max,ipd,',',rnd,',380),(391,368,'projectsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',390),(392,368,'projectreview','module',',open,biz,max,ipd,',',rnd,lite,or,',400),(393,368,'projecttrack','module',',open,biz,max,ipd,',',rnd,lite,or,',410),(394,368,'projectqa','module',',open,biz,max,ipd,',',rnd,lite,or,',420),(395,368,'pssp','module',',max,ipd,',',rnd,',430),(396,368,'cm','module',',max,ipd,',',rnd,',440),(397,368,'auditplan','module',',max,ipd,',',rnd,',450),(398,368,'reviewissue','module',',max,ipd,',',rnd,',460),(399,368,'review','module',',max,ipd,',',rnd,',470),(400,368,'measrecord','module',',max,ipd,',',rnd,',480),(401,368,'projectreport','module',',max,ipd,',',rnd,',490),(402,368,'projectresearch','module',',max,ipd,',',rnd,',500),(403,368,'projectauditplan','module',',max,ipd,',',rnd,',510),(404,368,'projectgapanalysis','module',',max,ipd,',',rnd,',520),(405,0,'execution','view',',open,biz,max,ipd,',',rnd,lite,',60),(406,405,'execution','module',',open,biz,max,ipd,',',rnd,lite,',530),(407,405,'task','module',',open,biz,max,ipd,',',rnd,lite,',540),(408,405,'build','module',',open,biz,max,ipd,',',rnd,',550),(409,405,'executionview','module',',open,biz,max,ipd,',',rnd,lite,or,',560),(410,405,'executiongantt','module',',open,biz,max,ipd,',',rnd,lite,or,',570),(411,405,'executionkanban','module',',open,biz,max,ipd,',',rnd,lite,or,',580),(412,405,'executionburn','module',',open,biz,max,ipd,',',rnd,lite,or,',590),(413,405,'executioncfd','module',',open,biz,max,ipd,',',rnd,lite,or,',600),(414,405,'executionstory','module',',open,biz,max,ipd,',',rnd,lite,or,',610),(415,405,'executionqa','module',',open,biz,max,ipd,',',rnd,lite,or,',620),(416,405,'executionsettings','module',',open,biz,max,ipd,',',rnd,lite,or,',630),(417,0,'kanban','view',',open,biz,max,ipd,',',rnd,lite,',70),(418,417,'kanban','module',',open,biz,max,ipd,',',rnd,lite,',640),(419,417,'managespace','module',',open,biz,max,ipd,',',rnd,lite,or,',650),(420,0,'qa','view',',open,biz,max,ipd,',',rnd,',80),(421,420,'qa','module',',open,biz,max,ipd,',',rnd,',660),(422,420,'bug','module',',open,biz,max,ipd,',',rnd,',670),(423,420,'testcase','module',',open,biz,max,ipd,',',rnd,',680),(424,420,'testtask','module',',open,biz,max,ipd,',',rnd,',690),(425,420,'testsuite','module',',open,biz,max,ipd,',',rnd,',700),(426,420,'testreport','module',',open,biz,max,ipd,',',rnd,',710),(427,420,'zahost','module',',open,biz,max,ipd,',',rnd,',720),(428,420,'zanode','module',',open,biz,max,ipd,',',rnd,',730),(429,0,'assetlib','view',',max,ipd,',',rnd,',90),(430,429,'caselib','module',',open,biz,max,ipd,',',rnd,',740),(431,429,'assetlib','module',',max,ipd,',',rnd,',750),(432,429,'storylib','module',',max,ipd,',',rnd,',760),(433,429,'issuelib','module',',max,ipd,',',rnd,',770),(434,429,'risklib','module',',max,ipd,',',rnd,',780),(435,429,'opportunitylib','module',',max,ipd,',',rnd,',790),(436,429,'practicelib','module',',max,ipd,',',rnd,',800),(437,429,'componentlib','module',',max,ipd,',',rnd,',810),(438,0,'doc','view',',open,biz,max,ipd,',',rnd,lite,or,',25),(439,438,'doc','module',',open,biz,max,ipd,',',rnd,lite,or,',820),(440,438,'api','module',',open,biz,max,ipd,',',rnd,',830),(441,0,'bi','view',',open,biz,max,ipd,',',rnd,',110),(442,441,'screen','module',',open,biz,max,ipd,',',rnd,',840),(443,441,'pivot','module',',open,biz,max,ipd,',',rnd,',850),(444,441,'chart','module',',open,biz,max,ipd,',',rnd,',860),(445,441,'dataview','module',',biz,max,ipd,',',rnd,',870),(446,441,'dimension','module',',biz,max,ipd,',',rnd,',880),(447,441,'report','module',',open,biz,max,ipd,',',rnd,',890),(448,441,'bidesign','module',',open,biz,max,ipd,',',rnd,lite,or,',900),(449,0,'system','view',',open,biz,max,ipd,',',rnd,lite,',120),(450,449,'company','module',',open,biz,max,ipd,',',rnd,lite,or,',910),(451,449,'systemteam','module',',open,biz,max,ipd,',',rnd,lite,or,',920),(452,449,'systemschedule','module',',open,biz,max,ipd,',',rnd,lite,or,',930),(453,449,'systemeffort','module',',open,biz,max,ipd,',',rnd,lite,or,',940),(454,449,'systemdynamic','module',',open,biz,max,ipd,',',rnd,lite,or,',950),(455,449,'systemcompany','module',',open,biz,max,ipd,',',rnd,lite,or,',960),(456,449,'dataaccess','module',',open,biz,max,ipd,',',rnd,lite,or,',970),(457,0,'admin','view',',open,biz,max,ipd,',',rnd,lite,or,',30),(458,457,'dept','module',',open,biz,max,ipd,',',rnd,lite,or,',980),(459,457,'group','module',',open,biz,max,ipd,',',rnd,lite,or,',990),(460,457,'user','module',',open,biz,max,ipd,',',rnd,lite,or,',1000),(461,457,'admin','module',',open,biz,max,ipd,',',rnd,lite,or,',1010),(462,457,'stage','module',',open,biz,max,ipd,',',rnd,',1020),(463,457,'extension','module',',open,biz,max,ipd,',',rnd,lite,',1030),(464,457,'custom','module',',open,biz,max,ipd,',',rnd,lite,or,',1040),(465,457,'action','module',',open,biz,max,ipd,',',rnd,lite,or,',1050),(466,457,'mail','module',',open,biz,max,ipd,',',lite,rnd,or,',1060),(467,457,'sms','module',',biz,max,ipd,',',lite,rnd,or,',1070),(468,457,'backup','module',',open,biz,max,ipd,',',lite,rnd,or,',1080),(469,457,'cron','module',',open,biz,max,ipd,',',rnd,lite,',1090),(470,457,'dev','module',',open,biz,max,ipd,',',rnd,',1100),(471,457,'editor','module',',open,biz,max,ipd,',',rnd,',1110),(472,457,'holiday','module',',open,biz,max,ipd,',',rnd,',1120),(473,457,'meetingroom','module',',max,ipd,',',rnd,',1130),(474,457,'webhook','module',',open,biz,max,ipd,',',lite,rnd,or,',1140),(475,457,'message','module',',open,biz,max,ipd,',',lite,rnd,or,',1150),(476,457,'featureswitch','module',',open,biz,max,ipd,',',rnd,lite,or,',1160),(477,457,'importdata','module',',open,biz,max,ipd,',',rnd,lite,or,',1170),(478,457,'systemsetting','module',',open,biz,max,ipd,',',rnd,lite,or,',1180),(479,457,'staffmanage','module',',open,biz,max,ipd,',',rnd,lite,or,',1190),(480,457,'modelconfig','module',',open,biz,max,ipd,',',rnd,lite,or,',1200),(481,457,'featureconfig','module',',open,biz,max,ipd,',',rnd,lite,or,',1210),(482,457,'doctemplate','module',',open,biz,max,ipd,',',rnd,lite,or,',1220),(483,457,'notifysetting','module',',open,biz,max,ipd,',',rnd,lite,or,',1230),(484,457,'ldap','module',',biz,max,ipd,',',rnd,',1240),(485,457,'sqlbuilder','module',',max,ipd,',',rnd,',1250),(486,457,'holidayseason','module',',open,biz,max,',',rnd,',1260),(487,457,'baseline','module',',max,ipd,',',rnd,',1270),(488,457,'classify','module',',max,ipd,',',rnd,',1280),(489,457,'cmcl','module',',max,ipd,',',rnd,',1290),(490,457,'auditcl','module',',max,ipd,',',rnd,',1300),(491,457,'reviewcl','module',',max,ipd,',',rnd,',1310),(492,457,'process','module',',max,ipd,',',rnd,',1320),(493,457,'activity','module',',max,ipd,',',rnd,',1330),(494,457,'zoutput','module',',max,ipd,',',rnd,',1340),(495,457,'subject','module',',max,ipd,',',rnd,',1350),(496,457,'approvalflow','module',',max,ipd,',',rnd,',1360),(497,457,'reviewsetting','module',',max,ipd,',',rnd,',1370),(498,457,'measurement','module',',max,ipd,',',rnd,',1380),(499,457,'setting','module',',open,biz,max,ipd,',',rnd,lite,',1390),(500,457,'im','module',',open,biz,max,ipd,',',rnd,lite,',1400),(501,457,'client','module',',open,biz,max,ipd,',',rnd,lite,',1410),(502,0,'devops','view',',open,biz,max,ipd,',',rnd,',140),(503,502,'svn','module',',open,biz,max,ipd,',',rnd,',1420),(504,502,'git','module',',open,biz,max,ipd,',',rnd,',1430),(505,502,'mr','module',',open,biz,max,ipd,',',rnd,',1440),(506,502,'repo','module',',open,biz,max,ipd,',',rnd,',1450),(507,502,'ci','module',',open,biz,max,ipd,',',rnd,',1460),(508,502,'compile','module',',open,biz,max,ipd,',',rnd,',1470),(509,502,'jenkins','module',',open,biz,max,ipd,',',rnd,',1480),(510,502,'job','module',',open,biz,max,ipd,',',rnd,',1490),(511,502,'gitlab','module',',open,biz,max,ipd,',',rnd,',1500),(512,502,'gogs','module',',open,biz,max,ipd,',',rnd,',1510),(513,502,'gitea','module',',open,biz,max,ipd,',',rnd,',1520),(514,502,'sonarqube','module',',open,biz,max,ipd,',',rnd,',1530),(515,502,'app','module',',open,biz,max,ipd,',',rnd,',1540),(516,502,'pipeline','module',',open,biz,max,ipd,',',rnd,lite,or,',1550),(517,502,'devopssetting','module',',open,biz,max,ipd,',',rnd,lite,or,',1560),(518,0,'search','module',',open,biz,max,ipd,',',rnd,lite,or,',1570),(519,0,'tree','module',',open,biz,max,ipd,',',rnd,lite,or,',1580),(520,0,'file','module',',open,biz,max,ipd,',',rnd,lite,or,',1590),(521,0,'misc','module',',open,biz,max,ipd,',',rnd,lite,',1600),(522,0,'approval','module',',max,ipd,',',rnd,',1610),(523,0,'workflow','view',',biz,max,ipd,',',rnd,lite,',150),(524,523,'workflow','module',',biz,max,ipd,',',rnd,lite,',1620),(525,523,'workflowfield','module',',biz,max,ipd,',',rnd,lite,',1630),(526,523,'workflowaction','module',',biz,max,ipd,',',rnd,lite,',1640),(527,523,'workflowlayout','module',',biz,max,ipd,',',rnd,lite,',1650),(528,523,'workflowcondition','module',',biz,max,ipd,',',rnd,lite,',1660),(529,523,'workflowlinkage','module',',biz,max,ipd,',',rnd,lite,',1670),(530,523,'workflowhook','module',',biz,max,ipd,',',rnd,lite,',1680),(531,523,'workflowlabel','module',',biz,max,ipd,',',rnd,lite,',1690),(532,523,'workflowrelation','module',',biz,max,ipd,',',rnd,lite,',1700),(533,523,'workflowreport','module',',biz,max,ipd,',',rnd,lite,',1710),(534,523,'workflowdatasource','module',',biz,max,ipd,',',rnd,lite,',1720),(535,523,'workflowrule','module',',biz,max,ipd,',',rnd,lite,',1730),(536,0,'datatable','module',',open,biz,max,ipd,',',rnd,lite,',1740),(537,0,'generalcomment','module',',open,biz,max,ipd,',',rnd,lite,or,',1750),(538,0,'generalping','module',',open,biz,max,ipd,',',rnd,lite,or,',1760),(539,0,'generaltemplate','module',',open,biz,max,ipd,',',rnd,lite,or,',1770),(540,0,'generaleffort','module',',open,biz,max,ipd,',',rnd,lite,or,',1780),(541,0,'feedback','view',',biz,max,ipd,',',rnd,lite,',160),(542,541,'feedback','module',',biz,max,ipd,',',rnd,lite,',1790),(543,541,'faq','module',',biz,max,ipd,',',rnd,lite,',1800),(544,541,'ticket','module',',biz,max,ipd,',',rnd,lite,',1810),(545,541,'feedbackpriv','module',',biz,max,ipd,',',rnd,',1820),(546,0,'oa','view',',biz,max,ipd,',',rnd,lite,',170),(547,546,'attend','module',',biz,max,ipd,',',rnd,lite,',1830),(548,546,'leave','module',',biz,max,ipd,',',rnd,lite,',1840),(549,546,'makeup','module',',biz,max,ipd,',',rnd,lite,',1850),(550,546,'overtime','module',',biz,max,ipd,',',rnd,lite,',1860),(551,546,'lieu','module',',biz,max,ipd,',',rnd,lite,',1870),(552,546,'officeapproval','module',',biz,max,ipd,',',rnd,',1880),(553,546,'officesetting','module',',biz,max,ipd,',',rnd,',1890),(554,546,'datapermission','module',',biz,max,ipd,',',rnd,',1900),(555,546,'officeexport','module',',biz,max,ipd,',',rnd,',1910),(556,0,'ops','view',',biz,max,ipd,',',rnd,',180),(557,556,'ops','module',',biz,max,ipd,',',rnd,',1920),(558,556,'host','module',',biz,max,ipd,',',rnd,',1930),(559,556,'serverroom','module',',biz,max,ipd,',',rnd,',1940),(560,556,'account','module',',biz,max,ipd,',',rnd,',1950),(561,556,'domain','module',',biz,max,ipd,',',rnd,',1960),(562,556,'service','module',',biz,max,ipd,',',rnd,',1970),(563,556,'deploy','module',',biz,max,ipd,',',rnd,',1980),(564,0,'conference','module',',biz,max,ipd,',',rnd,',1990),(565,0,'traincourse','view',',biz,max,ipd,',',rnd,',190),(566,565,'traincourse','module',',biz,max,ipd,',',rnd,',2000),(607,0,'demandpool','view',',ipd,',',or,',10),(608,0,'charter','view',',ipd,',',or,',20),(609,608,'charter','module',',ipd,',',or,',165),(610,607,'demandpool','module',',ipd,',',or,',55),(611,607,'demand','module',',ipd,',',or,',56),(612,360,'roadmap','module',',ipd,',',or,rnd,',125),(635,610,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(636,609,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(637,610,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(638,609,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(639,609,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(640,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(641,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(642,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(643,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(644,611,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(645,461,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(646,612,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(647,612,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(648,612,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(649,610,'','package',',open,biz,max,ipd,',',rnd,lite,or,',5),(650,445,'','package',',biz,max,ipd,',',rnd,',20),(651,457,'ai','module',',open,biz,max,',',rnd,',2020),(652,651,'','package',',open,biz,max,',',rnd,',2040),(653,651,'','package',',open,biz,max,',',rnd,',2060),(654,651,'','package',',open,biz,max,',',rnd,',2080),(655,651,'','package',',biz,max,',',rnd,',2100),(656,651,'','package',',open,biz,max,',',rnd,',2120),(657,651,'','package',',biz,max,',',rnd,',2140) ; +REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (1,'priv','de','index-index','',''),(1,'priv','en','index-index','',''),(1,'priv','fr','index-index','',''),(1,'priv','zh-cn','index-index','',''),(1,'priv','zh-tw','index-index','',''),(2,'priv','de','my-indexAction','',''),(2,'priv','en','my-indexAction','',''),(2,'priv','fr','my-indexAction','',''),(2,'priv','zh-cn','my-indexAction','',''),(2,'priv','zh-tw','my-indexAction','',''),(3,'priv','de','my-todoAction','',''),(3,'priv','en','my-todoAction','',''),(3,'priv','fr','my-todoAction','',''),(3,'priv','zh-cn','my-todoAction','',''),(3,'priv','zh-tw','my-todoAction','',''),(4,'priv','de','my-workAction','',''),(4,'priv','en','my-workAction','',''),(4,'priv','fr','my-workAction','',''),(4,'priv','zh-cn','my-workAction','',''),(4,'priv','zh-tw','my-workAction','',''),(4,'manager','zh-cn','','浏览待办',''),(5,'priv','de','my-contributeAction','',''),(5,'priv','en','my-contributeAction','',''),(5,'priv','fr','my-contributeAction','',''),(5,'priv','zh-cn','my-contributeAction','',''),(5,'priv','zh-tw','my-contributeAction','',''),(5,'manager','zh-cn','','创建维护待办',''),(6,'priv','de','my-project','',''),(6,'priv','en','my-project','',''),(6,'priv','fr','my-project','',''),(6,'priv','zh-cn','my-project','',''),(6,'priv','zh-tw','my-project','',''),(6,'manager','zh-cn','','删除待办',''),(7,'priv','de','my-profileAction','',''),(7,'priv','en','my-profileAction','',''),(7,'priv','fr','my-profileAction','',''),(7,'priv','zh-cn','my-profileAction','',''),(7,'priv','zh-tw','my-profileAction','',''),(7,'manager','zh-cn','','导入导出待办',''),(8,'priv','de','my-uploadAvatar','',''),(8,'priv','en','my-uploadAvatar','',''),(8,'priv','fr','my-uploadAvatar','',''),(8,'priv','zh-cn','my-uploadAvatar','',''),(8,'priv','zh-tw','my-uploadAvatar','',''),(8,'manager','zh-cn','','维护联系人',''),(9,'priv','de','my-preference','',''),(9,'priv','en','my-preference','',''),(9,'priv','fr','my-preference','',''),(9,'priv','zh-cn','my-preference','',''),(9,'priv','zh-tw','my-preference','',''),(9,'manager','zh-cn','','个人档案',''),(10,'priv','de','my-dynamicAction','',''),(10,'priv','en','my-dynamicAction','',''),(10,'priv','fr','my-dynamicAction','',''),(10,'priv','zh-cn','my-dynamicAction','',''),(10,'priv','zh-tw','my-dynamicAction','',''),(10,'manager','zh-cn','','个性化设置',''),(11,'priv','de','my-editProfile','',''),(11,'priv','en','my-editProfile','',''),(11,'priv','fr','my-editProfile','',''),(11,'priv','zh-cn','my-editProfile','',''),(11,'priv','zh-tw','my-editProfile','',''),(11,'manager','zh-cn','','浏览项目集',''),(12,'priv','de','my-changePassword','',''),(12,'priv','en','my-changePassword','',''),(12,'priv','fr','my-changePassword','',''),(12,'priv','zh-cn','my-changePassword','',''),(12,'priv','zh-tw','my-changePassword','',''),(12,'manager','zh-cn','','创建维护项目集',''),(13,'priv','de','my-manageContacts','',''),(13,'priv','en','my-manageContacts','',''),(13,'priv','fr','my-manageContacts','',''),(13,'priv','zh-cn','my-manageContacts','',''),(13,'priv','zh-tw','my-manageContacts','',''),(13,'manager','zh-cn','','删除项目集',''),(14,'priv','de','my-deleteContacts','',''),(14,'priv','en','my-deleteContacts','',''),(14,'priv','fr','my-deleteContacts','',''),(14,'priv','zh-cn','my-deleteContacts','',''),(14,'priv','zh-tw','my-deleteContacts','',''),(14,'manager','zh-cn','','投入人员',''),(15,'priv','de','my-score','',''),(15,'priv','en','my-score','',''),(15,'priv','fr','my-score','',''),(15,'priv','zh-cn','my-score','',''),(15,'priv','zh-tw','my-score','',''),(15,'manager','zh-cn','','可访问人员',''),(16,'priv','de','my-team','',''),(16,'priv','en','my-team','',''),(16,'priv','fr','my-team','',''),(16,'priv','zh-cn','my-team','',''),(16,'priv','zh-tw','my-team','',''),(16,'manager','zh-cn','','维护白名单',''),(17,'priv','de','my-execution','',''),(17,'priv','en','my-execution','',''),(17,'priv','fr','my-execution','',''),(17,'priv','zh-cn','my-execution','',''),(17,'priv','zh-tw','my-execution','',''),(17,'manager','zh-cn','','维护干系人',''),(18,'priv','de','my-doc','',''),(18,'priv','en','my-doc','',''),(18,'priv','fr','my-doc','',''),(18,'priv','zh-cn','my-doc','',''),(18,'priv','zh-tw','my-doc','',''),(18,'manager','zh-cn','','浏览地盘',''),(19,'priv','de','my-audit','',''),(19,'priv','en','my-audit','',''),(19,'priv','fr','my-audit','',''),(19,'priv','zh-cn','my-audit','',''),(19,'priv','zh-tw','my-audit','',''),(19,'manager','zh-cn','','浏览产品',''),(20,'priv','de','my-meeting','',''),(20,'priv','en','my-meeting','',''),(20,'priv','fr','my-meeting','',''),(20,'priv','zh-cn','my-meeting','',''),(20,'priv','zh-tw','my-meeting','',''),(20,'manager','zh-cn','','创建维护产品线',''),(21,'priv','de','my-calendarAction','',''),(21,'priv','en','my-calendarAction','',''),(21,'priv','fr','my-calendarAction','',''),(21,'priv','zh-cn','my-calendarAction','',''),(21,'priv','zh-tw','my-calendarAction','',''),(21,'manager','zh-cn','','创建维护产品',''),(22,'priv','de','my-effortAction','',''),(22,'priv','en','my-effortAction','',''),(22,'priv','fr','my-effortAction','',''),(22,'priv','zh-cn','my-effortAction','',''),(22,'priv','zh-tw','my-effortAction','',''),(22,'manager','zh-cn','','导入导出产品',''),(23,'priv','de','my-review','',''),(23,'priv','en','my-review','',''),(23,'priv','fr','my-review','',''),(23,'priv','zh-cn','my-review','',''),(23,'priv','zh-tw','my-review','',''),(23,'manager','zh-cn','','白名单管理',''),(24,'priv','de','todo-create','',''),(24,'priv','en','todo-create','',''),(24,'priv','fr','todo-create','',''),(24,'priv','zh-cn','todo-create','',''),(24,'priv','zh-tw','todo-create','',''),(24,'manager','zh-cn','','分支管理',''),(25,'priv','de','todo-createCycle','',''),(25,'priv','en','todo-createCycle','',''),(25,'priv','fr','todo-createCycle','',''),(25,'priv','zh-cn','todo-createCycle','',''),(25,'priv','zh-tw','todo-createCycle','',''),(25,'manager','zh-cn','','浏览研发需求',''),(26,'priv','de','todo-batchCreate','',''),(26,'priv','en','todo-batchCreate','',''),(26,'priv','fr','todo-batchCreate','',''),(26,'priv','zh-cn','todo-batchCreate','',''),(26,'priv','zh-tw','todo-batchCreate','',''),(26,'manager','zh-cn','','创建维护研发需求',''),(27,'priv','de','todo-edit','',''),(27,'priv','en','todo-edit','',''),(27,'priv','fr','todo-edit','',''),(27,'priv','zh-cn','todo-edit','',''),(27,'priv','zh-tw','todo-edit','',''),(27,'manager','zh-cn','','导入导出研发需求',''),(28,'priv','de','todo-batchEdit','',''),(28,'priv','en','todo-batchEdit','',''),(28,'priv','fr','todo-batchEdit','',''),(28,'priv','zh-cn','todo-batchEdit','',''),(28,'priv','zh-tw','todo-batchEdit','',''),(28,'manager','zh-cn','','删除研发需求',''),(29,'priv','de','todo-view','',''),(29,'priv','en','todo-view','',''),(29,'priv','fr','todo-view','',''),(29,'priv','zh-cn','todo-view','',''),(29,'priv','zh-tw','todo-view','',''),(29,'manager','zh-cn','','评审研发需求',''),(30,'priv','de','todo-delete','',''),(30,'priv','en','todo-delete','',''),(30,'priv','fr','todo-delete','',''),(30,'priv','zh-cn','todo-delete','',''),(30,'priv','zh-tw','todo-delete','',''),(30,'manager','zh-cn','','删除产品',''),(31,'priv','de','todo-export','',''),(31,'priv','en','todo-export','',''),(31,'priv','fr','todo-export','',''),(31,'priv','zh-cn','todo-export','',''),(31,'priv','zh-tw','todo-export','',''),(31,'manager','zh-cn','','浏览用户需求',''),(32,'priv','de','todo-start','',''),(32,'priv','en','todo-start','',''),(32,'priv','fr','todo-start','',''),(32,'priv','zh-cn','todo-start','',''),(32,'priv','zh-tw','todo-start','',''),(32,'manager','zh-cn','','创建维护用户需求',''),(33,'priv','de','todo-finish','',''),(33,'priv','en','todo-finish','',''),(33,'priv','fr','todo-finish','',''),(33,'priv','zh-cn','todo-finish','',''),(33,'priv','zh-tw','todo-finish','',''),(33,'manager','zh-cn','','导入导出用户需求',''),(34,'priv','de','todo-batchFinish','',''),(34,'priv','en','todo-batchFinish','',''),(34,'priv','fr','todo-batchFinish','',''),(34,'priv','zh-cn','todo-batchFinish','',''),(34,'priv','zh-tw','todo-batchFinish','',''),(34,'manager','zh-cn','','删除用户需求',''),(35,'priv','de','todo-import2Today','',''),(35,'priv','en','todo-import2Today','',''),(35,'priv','fr','todo-import2Today','',''),(35,'priv','zh-cn','todo-import2Today','',''),(35,'priv','zh-tw','todo-import2Today','',''),(35,'manager','zh-cn','','评审用户需求',''),(36,'priv','de','todo-assignAction','',''),(36,'priv','en','todo-assignAction','',''),(36,'priv','fr','todo-assignAction','',''),(36,'priv','zh-cn','todo-assignAction','',''),(36,'priv','zh-tw','todo-assignAction','',''),(36,'manager','zh-cn','','浏览产品计划',''),(37,'priv','de','todo-activate','',''),(37,'priv','en','todo-activate','',''),(37,'priv','fr','todo-activate','',''),(37,'priv','zh-cn','todo-activate','',''),(37,'priv','zh-tw','todo-activate','',''),(37,'manager','zh-cn','','创建维护产品计划',''),(38,'priv','de','todo-close','',''),(38,'priv','en','todo-close','',''),(38,'priv','fr','todo-close','',''),(38,'priv','zh-cn','todo-close','',''),(38,'priv','zh-tw','todo-close','',''),(38,'manager','zh-cn','','删除产品计划',''),(39,'priv','de','todo-batchClose','',''),(39,'priv','en','todo-batchClose','',''),(39,'priv','fr','todo-batchClose','',''),(39,'priv','zh-cn','todo-batchClose','',''),(39,'priv','zh-tw','todo-batchClose','',''),(39,'manager','zh-cn','','浏览发布',''),(40,'priv','de','todo-calendar','',''),(40,'priv','en','todo-calendar','',''),(40,'priv','fr','todo-calendar','',''),(40,'priv','zh-cn','todo-calendar','',''),(40,'priv','zh-tw','todo-calendar','',''),(40,'manager','zh-cn','','创建维护发布',''),(41,'priv','de','program-browse','',''),(41,'priv','en','program-browse','',''),(41,'priv','fr','program-browse','',''),(41,'priv','zh-cn','program-browse','',''),(41,'priv','zh-tw','program-browse','',''),(41,'manager','zh-cn','','导入导出发布',''),(42,'priv','de','program-kanbanAction','',''),(42,'priv','en','program-kanbanAction','',''),(42,'priv','fr','program-kanbanAction','',''),(42,'priv','zh-cn','program-kanbanAction','',''),(42,'priv','zh-tw','program-kanbanAction','',''),(42,'manager','zh-cn','','删除发布',''),(43,'priv','de','program-view','',''),(43,'priv','en','program-view','',''),(43,'priv','fr','program-view','',''),(43,'priv','zh-cn','program-view','',''),(43,'priv','zh-tw','program-view','',''),(43,'manager','zh-cn','','发布通知',''),(44,'priv','de','program-product','',''),(44,'priv','en','program-product','',''),(44,'priv','fr','program-product','',''),(44,'priv','zh-cn','program-product','',''),(44,'priv','zh-tw','program-product','',''),(44,'manager','zh-cn','','项目计划',''),(45,'priv','de','program-create','',''),(45,'priv','en','program-create','',''),(45,'priv','fr','program-create','',''),(45,'priv','zh-cn','program-create','',''),(45,'priv','zh-tw','program-create','',''),(45,'manager','zh-cn','','维护研发需求',''),(46,'priv','de','program-edit','',''),(46,'priv','en','program-edit','',''),(46,'priv','fr','program-edit','',''),(46,'priv','zh-cn','program-edit','',''),(46,'priv','zh-tw','program-edit','',''),(46,'manager','zh-cn','','浏览项目',''),(47,'priv','de','program-start','',''),(47,'priv','en','program-start','',''),(47,'priv','fr','program-start','',''),(47,'priv','zh-cn','program-start','',''),(47,'priv','zh-tw','program-start','',''),(47,'manager','zh-cn','','创建维护项目',''),(48,'priv','de','program-suspend','',''),(48,'priv','en','program-suspend','',''),(48,'priv','fr','program-suspend','',''),(48,'priv','zh-cn','program-suspend','',''),(48,'priv','zh-tw','program-suspend','',''),(48,'manager','zh-cn','','导入导出项目',''),(49,'priv','de','program-activate','',''),(49,'priv','en','program-activate','',''),(49,'priv','fr','program-activate','',''),(49,'priv','zh-cn','program-activate','',''),(49,'priv','zh-tw','program-activate','',''),(50,'priv','de','program-close','',''),(50,'priv','en','program-close','',''),(50,'priv','fr','program-close','',''),(50,'priv','zh-cn','program-close','',''),(50,'priv','zh-tw','program-close','',''),(50,'manager','zh-cn','','团队权限',''),(51,'priv','de','program-delete','',''),(51,'priv','en','program-delete','',''),(51,'priv','fr','program-delete','',''),(51,'priv','zh-cn','program-delete','',''),(51,'priv','zh-tw','program-delete','',''),(51,'manager','zh-cn','','删除项目',''),(52,'priv','de','program-project','',''),(52,'priv','en','program-project','',''),(52,'priv','fr','program-project','',''),(52,'priv','zh-cn','program-project','',''),(52,'priv','zh-tw','program-project','',''),(52,'manager','zh-cn','','项目白名单',''),(53,'priv','de','program-stakeholder','',''),(53,'priv','en','program-stakeholder','',''),(53,'priv','fr','program-stakeholder','',''),(53,'priv','zh-cn','program-stakeholder','',''),(53,'priv','zh-tw','program-stakeholder','',''),(53,'manager','zh-cn','','浏览执行',''),(54,'priv','de','program-createStakeholder','',''),(54,'priv','en','program-createStakeholder','',''),(54,'priv','fr','program-createStakeholder','',''),(54,'priv','zh-cn','program-createStakeholder','',''),(54,'priv','zh-tw','program-createStakeholder','',''),(54,'manager','zh-cn','','创建维护执行',''),(55,'priv','de','program-unlinkStakeholder','',''),(55,'priv','en','program-unlinkStakeholder','',''),(55,'priv','fr','program-unlinkStakeholder','',''),(55,'priv','zh-cn','program-unlinkStakeholder','',''),(55,'priv','zh-tw','program-unlinkStakeholder','',''),(55,'manager','zh-cn','','删除执行',''),(56,'priv','de','program-batchUnlinkStakeholders','',''),(56,'priv','en','program-batchUnlinkStakeholders','',''),(56,'priv','fr','program-batchUnlinkStakeholders','',''),(56,'priv','zh-cn','program-batchUnlinkStakeholders','',''),(56,'priv','zh-tw','program-batchUnlinkStakeholders','',''),(56,'manager','zh-cn','','导入导出执行',''),(57,'priv','de','program-unbindWhitelist','',''),(57,'priv','en','program-unbindWhitelist','',''),(57,'priv','fr','program-unbindWhitelist','',''),(57,'priv','zh-cn','program-unbindWhitelist','',''),(57,'priv','zh-tw','program-unbindWhitelist','',''),(57,'manager','zh-cn','','执行白名单',''),(58,'priv','de','program-updateOrder','',''),(58,'priv','en','program-updateOrder','',''),(58,'priv','fr','program-updateOrder','',''),(58,'priv','zh-cn','program-updateOrder','',''),(58,'priv','zh-tw','program-updateOrder','',''),(58,'manager','zh-cn','','甘特图',''),(59,'priv','de','personnel-accessible','',''),(59,'priv','en','personnel-accessible','',''),(59,'priv','fr','personnel-accessible','',''),(59,'priv','zh-cn','personnel-accessible','',''),(59,'priv','zh-tw','personnel-accessible','',''),(60,'priv','de','personnel-invest','',''),(60,'priv','en','personnel-invest','',''),(60,'priv','fr','personnel-invest','',''),(60,'priv','zh-cn','personnel-invest','',''),(60,'priv','zh-tw','personnel-invest','',''),(60,'manager','zh-cn','','浏览任务',''),(61,'priv','de','personnel-whitelist','',''),(61,'priv','en','personnel-whitelist','',''),(61,'priv','fr','personnel-whitelist','',''),(61,'priv','zh-cn','personnel-whitelist','',''),(61,'priv','zh-tw','personnel-whitelist','',''),(61,'manager','zh-cn','','创建维护任务',''),(62,'priv','de','personnel-addWhitelist','',''),(62,'priv','en','personnel-addWhitelist','',''),(62,'priv','fr','personnel-addWhitelist','',''),(62,'priv','zh-cn','personnel-addWhitelist','',''),(62,'priv','zh-tw','personnel-addWhitelist','',''),(62,'manager','zh-cn','','删除任务',''),(63,'priv','de','product-indexAction','',''),(63,'priv','en','product-indexAction','',''),(63,'priv','fr','product-indexAction','',''),(63,'priv','zh-cn','product-indexAction','',''),(63,'priv','zh-tw','product-indexAction','',''),(63,'manager','zh-cn','','导入导出任务',''),(64,'priv','de','product-browse','',''),(64,'priv','en','product-browse','',''),(64,'priv','fr','product-browse','',''),(64,'priv','zh-cn','product-browse','',''),(64,'priv','zh-tw','product-browse','',''),(64,'manager','zh-cn','','执行团队',''),(65,'priv','de','product-requirement','',''),(65,'priv','en','product-requirement','',''),(65,'priv','fr','product-requirement','',''),(65,'priv','zh-cn','product-requirement','',''),(65,'priv','zh-tw','product-requirement','',''),(65,'manager','zh-cn','','看板',''),(66,'priv','de','product-create','',''),(66,'priv','en','product-create','',''),(66,'priv','fr','product-create','',''),(66,'priv','zh-cn','product-create','',''),(66,'priv','zh-tw','product-create','',''),(66,'manager','zh-cn','','分组视图',''),(67,'priv','de','product-view','',''),(67,'priv','en','product-view','',''),(67,'priv','fr','product-view','',''),(67,'priv','zh-cn','product-view','',''),(67,'priv','zh-tw','product-view','',''),(67,'manager','zh-cn','','燃尽图',''),(68,'priv','de','product-edit','',''),(68,'priv','en','product-edit','',''),(68,'priv','fr','product-edit','',''),(68,'priv','zh-cn','product-edit','',''),(68,'priv','zh-tw','product-edit','',''),(68,'manager','zh-cn','','累积流图',''),(69,'priv','de','product-batchEdit','',''),(69,'priv','en','product-batchEdit','',''),(69,'priv','fr','product-batchEdit','',''),(69,'priv','zh-cn','product-batchEdit','',''),(69,'priv','zh-tw','product-batchEdit','',''),(69,'manager','zh-cn','','维护研发需求',''),(70,'priv','de','product-delete','',''),(70,'priv','en','product-delete','',''),(70,'priv','fr','product-delete','',''),(70,'priv','zh-cn','product-delete','',''),(70,'priv','zh-tw','product-delete','',''),(71,'priv','de','product-roadmap','',''),(71,'priv','en','product-roadmap','',''),(71,'priv','fr','product-roadmap','',''),(71,'priv','zh-cn','product-roadmap','',''),(71,'priv','zh-tw','product-roadmap','',''),(71,'manager','zh-cn','','维护日志',''),(72,'priv','de','product-track','',''),(72,'priv','en','product-track','',''),(72,'priv','fr','product-track','',''),(72,'priv','zh-cn','product-track','',''),(72,'priv','zh-tw','product-track','',''),(72,'manager','zh-cn','','创建维护版本',''),(73,'priv','de','product-dynamic','',''),(73,'priv','en','product-dynamic','',''),(73,'priv','fr','product-dynamic','',''),(73,'priv','zh-cn','product-dynamic','',''),(73,'priv','zh-tw','product-dynamic','',''),(73,'manager','zh-cn','','删除版本',''),(74,'priv','de','product-project','',''),(74,'priv','en','product-project','',''),(74,'priv','fr','product-project','',''),(74,'priv','zh-cn','product-project','',''),(74,'priv','zh-tw','product-project','',''),(74,'manager','zh-cn','','浏览需求库',''),(75,'priv','de','product-dashboard','',''),(75,'priv','en','product-dashboard','',''),(75,'priv','fr','product-dashboard','',''),(75,'priv','zh-cn','product-dashboard','',''),(75,'priv','zh-tw','product-dashboard','',''),(75,'manager','zh-cn','','创建维护需求库',''),(76,'priv','de','product-closeAction','',''),(76,'priv','en','product-closeAction','',''),(76,'priv','fr','product-closeAction','',''),(76,'priv','zh-cn','product-closeAction','',''),(76,'priv','zh-tw','product-closeAction','',''),(76,'manager','zh-cn','','删除需求库',''),(77,'priv','de','product-orderAction','',''),(77,'priv','en','product-orderAction','',''),(77,'priv','fr','product-orderAction','',''),(77,'priv','zh-cn','product-orderAction','',''),(77,'priv','zh-tw','product-orderAction','',''),(77,'manager','zh-cn','','审批需求',''),(78,'priv','de','product-list','',''),(78,'priv','en','product-list','',''),(78,'priv','fr','product-list','',''),(78,'priv','zh-cn','product-list','',''),(78,'priv','zh-tw','product-list','',''),(78,'manager','zh-cn','','浏览问题库',''),(79,'priv','de','product-kanban','',''),(79,'priv','en','product-kanban','',''),(79,'priv','fr','product-kanban','',''),(79,'priv','zh-cn','product-kanban','',''),(79,'priv','zh-tw','product-kanban','',''),(79,'manager','zh-cn','','创建编辑问题库',''),(80,'priv','de','product-manageLine','',''),(80,'priv','en','product-manageLine','',''),(80,'priv','fr','product-manageLine','',''),(80,'priv','zh-cn','product-manageLine','',''),(80,'priv','zh-tw','product-manageLine','',''),(80,'manager','zh-cn','','删除问题库',''),(81,'manager','zh-cn','','审批问题',''),(82,'priv','de','product-exportAction','',''),(82,'priv','en','product-exportAction','',''),(82,'priv','fr','product-exportAction','',''),(82,'priv','zh-cn','product-exportAction','',''),(82,'priv','zh-tw','product-exportAction','',''),(82,'manager','zh-cn','','浏览风险库',''),(83,'priv','de','product-whitelist','',''),(83,'priv','en','product-whitelist','',''),(83,'priv','fr','product-whitelist','',''),(83,'priv','zh-cn','product-whitelist','',''),(83,'priv','zh-tw','product-whitelist','',''),(83,'manager','zh-cn','','创建维护风险库',''),(84,'priv','de','product-addWhitelist','',''),(84,'priv','en','product-addWhitelist','',''),(84,'priv','fr','product-addWhitelist','',''),(84,'priv','zh-cn','product-addWhitelist','',''),(84,'priv','zh-tw','product-addWhitelist','',''),(84,'manager','zh-cn','','删除风险库',''),(85,'priv','de','product-unbindWhitelist','',''),(85,'priv','en','product-unbindWhitelist','',''),(85,'priv','fr','product-unbindWhitelist','',''),(85,'priv','zh-cn','product-unbindWhitelist','',''),(85,'priv','zh-tw','product-unbindWhitelist','',''),(85,'manager','zh-cn','','审批风险',''),(86,'priv','de','story-create','',''),(86,'priv','en','story-create','',''),(86,'priv','fr','story-create','',''),(86,'priv','zh-cn','story-create','',''),(86,'priv','zh-tw','story-create','',''),(86,'manager','zh-cn','','浏览机会库',''),(87,'priv','de','story-batchCreate','',''),(87,'priv','en','story-batchCreate','',''),(87,'priv','fr','story-batchCreate','',''),(87,'priv','zh-cn','story-batchCreate','',''),(87,'priv','zh-tw','story-batchCreate','',''),(87,'manager','zh-cn','','创建维护机会库',''),(88,'priv','de','story-editAction','',''),(88,'priv','en','story-editAction','',''),(88,'priv','fr','story-editAction','',''),(88,'priv','zh-cn','story-editAction','',''),(88,'priv','zh-tw','story-editAction','',''),(88,'manager','zh-cn','','删除机会库',''),(89,'priv','de','story-exportAction','',''),(89,'priv','en','story-exportAction','',''),(89,'priv','fr','story-exportAction','',''),(89,'priv','zh-cn','story-exportAction','',''),(89,'priv','zh-tw','story-exportAction','',''),(89,'manager','zh-cn','','审批机会',''),(90,'priv','de','story-deleteAction','',''),(90,'priv','en','story-deleteAction','',''),(90,'priv','fr','story-deleteAction','',''),(90,'priv','zh-cn','story-deleteAction','',''),(90,'priv','zh-tw','story-deleteAction','',''),(90,'manager','zh-cn','','浏览最佳实践库',''),(91,'priv','de','story-view','',''),(91,'priv','en','story-view','',''),(91,'priv','fr','story-view','',''),(91,'priv','zh-cn','story-view','',''),(91,'priv','zh-tw','story-view','',''),(91,'manager','zh-cn','','创建维护最佳实践库',''),(92,'priv','de','story-changeAction','',''),(92,'priv','en','story-changeAction','',''),(92,'priv','fr','story-changeAction','',''),(92,'priv','zh-cn','story-changeAction','',''),(92,'priv','zh-tw','story-changeAction','',''),(92,'manager','zh-cn','','删除最佳实践库',''),(93,'priv','de','story-reviewAction','',''),(93,'priv','en','story-reviewAction','',''),(93,'priv','fr','story-reviewAction','',''),(93,'priv','zh-cn','story-reviewAction','',''),(93,'priv','zh-tw','story-reviewAction','',''),(93,'manager','zh-cn','','审批最佳实践',''),(94,'priv','de','story-submitReview','',''),(94,'priv','en','story-submitReview','',''),(94,'priv','fr','story-submitReview','',''),(94,'priv','zh-cn','story-submitReview','',''),(94,'priv','zh-tw','story-submitReview','',''),(94,'manager','zh-cn','','浏览组件库',''),(95,'priv','de','story-batchReview','',''),(95,'priv','en','story-batchReview','',''),(95,'priv','fr','story-batchReview','',''),(95,'priv','zh-cn','story-batchReview','',''),(95,'priv','zh-tw','story-batchReview','',''),(95,'manager','zh-cn','','创建维护组件库',''),(96,'priv','de','story-recallAction','',''),(96,'priv','en','story-recallAction','',''),(96,'priv','fr','story-recallAction','',''),(96,'priv','zh-cn','story-recallAction','',''),(96,'priv','zh-tw','story-recallAction','',''),(96,'manager','zh-cn','','删除组件库',''),(97,'priv','de','story-closeAction','',''),(97,'priv','en','story-closeAction','',''),(97,'priv','fr','story-closeAction','',''),(97,'priv','zh-cn','story-closeAction','',''),(97,'priv','zh-tw','story-closeAction','',''),(97,'manager','zh-cn','','审批组件',''),(98,'priv','de','story-batchClose','',''),(98,'priv','en','story-batchClose','',''),(98,'priv','fr','story-batchClose','',''),(98,'priv','zh-cn','story-batchClose','',''),(98,'priv','zh-tw','story-batchClose','',''),(98,'manager','zh-cn','','浏览用例库',''),(99,'priv','de','story-batchChangePlan','',''),(99,'priv','en','story-batchChangePlan','',''),(99,'priv','fr','story-batchChangePlan','',''),(99,'priv','zh-cn','story-batchChangePlan','',''),(99,'priv','zh-tw','story-batchChangePlan','',''),(99,'manager','zh-cn','','创建维护用例库',''),(100,'priv','de','story-batchChangeStage','',''),(100,'priv','en','story-batchChangeStage','',''),(100,'priv','fr','story-batchChangeStage','',''),(100,'priv','zh-cn','story-batchChangeStage','',''),(100,'priv','zh-tw','story-batchChangeStage','',''),(100,'manager','zh-cn','','删除用例库',''),(101,'priv','de','story-assignAction','',''),(101,'priv','en','story-assignAction','',''),(101,'priv','fr','story-assignAction','',''),(101,'priv','zh-cn','story-assignAction','',''),(101,'priv','zh-tw','story-assignAction','',''),(101,'manager','zh-cn','','导入导出用例库',''),(102,'priv','de','story-batchAssignTo','',''),(102,'priv','en','story-batchAssignTo','',''),(102,'priv','fr','story-batchAssignTo','',''),(102,'priv','zh-cn','story-batchAssignTo','',''),(102,'priv','zh-tw','story-batchAssignTo','',''),(102,'manager','zh-cn','','办公审批',''),(103,'priv','de','story-activateAction','',''),(103,'priv','en','story-activateAction','',''),(103,'priv','fr','story-activateAction','',''),(103,'priv','zh-cn','story-activateAction','',''),(103,'priv','zh-tw','story-activateAction','',''),(103,'manager','zh-cn','','个人考勤',''),(104,'priv','de','story-tasks','',''),(104,'priv','en','story-tasks','',''),(104,'priv','fr','story-tasks','',''),(104,'priv','zh-cn','story-tasks','',''),(104,'priv','zh-tw','story-tasks','',''),(104,'manager','zh-cn','','办公设置',''),(105,'priv','de','story-bugs','',''),(105,'priv','en','story-bugs','',''),(105,'priv','fr','story-bugs','',''),(105,'priv','zh-cn','story-bugs','',''),(105,'priv','zh-tw','story-bugs','',''),(105,'manager','zh-cn','','数据权限',''),(106,'priv','de','story-cases','',''),(106,'priv','en','story-cases','',''),(106,'priv','fr','story-cases','',''),(106,'priv','zh-cn','story-cases','',''),(106,'priv','zh-tw','story-cases','',''),(106,'manager','zh-cn','','个人请假',''),(107,'priv','de','story-reportAction','',''),(107,'priv','en','story-reportAction','',''),(107,'priv','fr','story-reportAction','',''),(107,'priv','zh-cn','story-reportAction','',''),(107,'priv','zh-tw','story-reportAction','',''),(107,'manager','zh-cn','','个人补班',''),(108,'priv','de','story-linkStory','',''),(108,'priv','en','story-linkStory','',''),(108,'priv','fr','story-linkStory','',''),(108,'priv','zh-cn','story-linkStory','',''),(108,'priv','zh-tw','story-linkStory','',''),(108,'manager','zh-cn','','个人加班',''),(109,'priv','de','story-batchChangeBranch','',''),(109,'priv','en','story-batchChangeBranch','',''),(109,'priv','fr','story-batchChangeBranch','',''),(109,'priv','zh-cn','story-batchChangeBranch','',''),(109,'priv','zh-tw','story-batchChangeBranch','',''),(109,'manager','zh-cn','','个人调休',''),(110,'priv','de','story-batchChangeModule','',''),(110,'priv','en','story-batchChangeModule','',''),(110,'priv','fr','story-batchChangeModule','',''),(110,'priv','zh-cn','story-batchChangeModule','',''),(110,'priv','zh-tw','story-batchChangeModule','',''),(110,'manager','zh-cn','','节假日',''),(111,'priv','de','story-batchToTask','',''),(111,'priv','en','story-batchToTask','',''),(111,'priv','fr','story-batchToTask','',''),(111,'priv','zh-cn','story-batchToTask','',''),(111,'priv','zh-tw','story-batchToTask','',''),(111,'manager','zh-cn','','办公导出',''),(112,'priv','de','story-processStoryChange','',''),(112,'priv','en','story-processStoryChange','',''),(112,'priv','fr','story-processStoryChange','',''),(112,'priv','zh-cn','story-processStoryChange','',''),(112,'priv','zh-tw','story-processStoryChange','',''),(112,'manager','zh-cn','','浏览反馈',''),(113,'priv','de','story-linkStoriesAB','',''),(113,'priv','en','story-linkStoriesAB','',''),(113,'priv','fr','story-linkStoriesAB','',''),(113,'priv','zh-cn','story-linkStoriesAB','',''),(113,'priv','zh-tw','story-linkStoriesAB','',''),(113,'manager','zh-cn','','创建维护反馈',''),(114,'priv','de','story-relievedTwins','',''),(114,'priv','en','story-relievedTwins','',''),(114,'priv','fr','story-relievedTwins','',''),(114,'priv','zh-cn','story-relievedTwins','',''),(114,'priv','zh-tw','story-relievedTwins','',''),(114,'manager','zh-cn','','导入导出反馈',''),(115,'priv','de','story-batchEdit','',''),(115,'priv','en','story-batchEdit','',''),(115,'priv','fr','story-batchEdit','',''),(115,'priv','zh-cn','story-batchEdit','',''),(115,'priv','zh-tw','story-batchEdit','',''),(115,'manager','zh-cn','','处理反馈',''),(116,'priv','de','story-importCase','',''),(116,'priv','en','story-importCase','',''),(116,'priv','fr','story-importCase','',''),(116,'priv','zh-cn','story-importCase','',''),(116,'priv','zh-tw','story-importCase','',''),(116,'manager','zh-cn','','FAQ',''),(117,'priv','de','story-exportTemplate','',''),(117,'priv','en','story-exportTemplate','',''),(117,'priv','fr','story-exportTemplate','',''),(117,'priv','zh-cn','story-exportTemplate','',''),(117,'priv','zh-tw','story-exportTemplate','',''),(117,'manager','zh-cn','','浏览工单',''),(118,'priv','de','story-importToLib','',''),(118,'priv','en','story-importToLib','',''),(118,'priv','fr','story-importToLib','',''),(118,'priv','zh-cn','story-importToLib','',''),(118,'priv','zh-tw','story-importToLib','',''),(118,'manager','zh-cn','','创建维护工单',''),(119,'priv','de','story-batchImportToLib','',''),(119,'priv','en','story-batchImportToLib','',''),(119,'priv','fr','story-batchImportToLib','',''),(119,'priv','zh-cn','story-batchImportToLib','',''),(119,'priv','zh-tw','story-batchImportToLib','',''),(119,'manager','zh-cn','','导入导出工单',''),(120,'priv','de','story-relation','',''),(120,'priv','en','story-relation','',''),(120,'priv','fr','story-relation','',''),(120,'priv','zh-cn','story-relation','',''),(120,'priv','zh-tw','story-relation','',''),(121,'priv','de','requirement-create','',''),(121,'priv','en','requirement-create','',''),(121,'priv','fr','requirement-create','',''),(121,'priv','zh-cn','requirement-create','',''),(121,'priv','zh-tw','requirement-create','',''),(121,'manager','zh-cn','','删除反馈',''),(122,'priv','de','requirement-batchCreate','',''),(122,'priv','en','requirement-batchCreate','',''),(122,'priv','fr','requirement-batchCreate','',''),(122,'priv','zh-cn','requirement-batchCreate','',''),(122,'priv','zh-tw','requirement-batchCreate','',''),(122,'manager','zh-cn','','删除工单',''),(123,'priv','de','requirement-editAction','',''),(123,'priv','en','requirement-editAction','',''),(123,'priv','fr','requirement-editAction','',''),(123,'priv','zh-cn','requirement-editAction','',''),(123,'priv','zh-tw','requirement-editAction','',''),(123,'manager','zh-cn','','设置反馈权限',''),(124,'priv','de','requirement-exportAction','',''),(124,'priv','en','requirement-exportAction','',''),(124,'priv','fr','requirement-exportAction','',''),(124,'priv','zh-cn','requirement-exportAction','',''),(124,'priv','zh-tw','requirement-exportAction','',''),(124,'manager','zh-cn','','课程',''),(125,'priv','de','requirement-deleteAction','',''),(125,'priv','en','requirement-deleteAction','',''),(125,'priv','fr','requirement-deleteAction','',''),(125,'priv','zh-cn','requirement-deleteAction','',''),(125,'priv','zh-tw','requirement-deleteAction','',''),(125,'manager','zh-cn','','后台管理',''),(126,'priv','de','requirement-view','',''),(126,'priv','en','requirement-view','',''),(126,'priv','fr','requirement-view','',''),(126,'priv','zh-cn','requirement-view','',''),(126,'priv','zh-tw','requirement-view','',''),(126,'manager','zh-cn','','运维管理',''),(127,'priv','de','requirement-changeAction','',''),(127,'priv','en','requirement-changeAction','',''),(127,'priv','fr','requirement-changeAction','',''),(127,'priv','zh-cn','requirement-changeAction','',''),(127,'priv','zh-tw','requirement-changeAction','',''),(127,'manager','zh-cn','','主机管理',''),(128,'priv','de','requirement-reviewAction','',''),(128,'priv','en','requirement-reviewAction','',''),(128,'priv','fr','requirement-reviewAction','',''),(128,'priv','zh-cn','requirement-reviewAction','',''),(128,'priv','zh-tw','requirement-reviewAction','',''),(128,'manager','zh-cn','','机房管理',''),(129,'priv','de','requirement-submitReview','',''),(129,'priv','en','requirement-submitReview','',''),(129,'priv','fr','requirement-submitReview','',''),(129,'priv','zh-cn','requirement-submitReview','',''),(129,'priv','zh-tw','requirement-submitReview','',''),(129,'manager','zh-cn','','运维账号管理',''),(130,'priv','de','requirement-batchReview','',''),(130,'priv','en','requirement-batchReview','',''),(130,'priv','fr','requirement-batchReview','',''),(130,'priv','zh-cn','requirement-batchReview','',''),(130,'priv','zh-tw','requirement-batchReview','',''),(130,'manager','zh-cn','','域名管理',''),(131,'priv','de','requirement-recall','',''),(131,'priv','en','requirement-recall','',''),(131,'priv','fr','requirement-recall','',''),(131,'priv','zh-cn','requirement-recall','',''),(131,'priv','zh-tw','requirement-recall','',''),(131,'manager','zh-cn','','服务管理',''),(132,'priv','de','requirement-closeAction','',''),(132,'priv','en','requirement-closeAction','',''),(132,'priv','fr','requirement-closeAction','',''),(132,'priv','zh-cn','requirement-closeAction','',''),(132,'priv','zh-tw','requirement-closeAction','',''),(132,'manager','zh-cn','','运维计划',''),(133,'priv','de','requirement-batchClose','',''),(133,'priv','en','requirement-batchClose','',''),(133,'priv','fr','requirement-batchClose','',''),(133,'priv','zh-cn','requirement-batchClose','',''),(133,'priv','zh-tw','requirement-batchClose','',''),(133,'manager','zh-cn','','上线范围',''),(134,'priv','de','requirement-assignAction','',''),(134,'priv','en','requirement-assignAction','',''),(134,'priv','fr','requirement-assignAction','',''),(134,'priv','zh-cn','requirement-assignAction','',''),(134,'priv','zh-tw','requirement-assignAction','',''),(134,'manager','zh-cn','','上线步骤',''),(135,'priv','de','requirement-batchAssignTo','',''),(135,'priv','en','requirement-batchAssignTo','',''),(135,'priv','fr','requirement-batchAssignTo','',''),(135,'priv','zh-cn','requirement-batchAssignTo','',''),(135,'priv','zh-tw','requirement-batchAssignTo','',''),(135,'manager','zh-cn','','上线用例',''),(136,'priv','de','requirement-activateAction','',''),(136,'priv','en','requirement-activateAction','',''),(136,'priv','fr','requirement-activateAction','',''),(136,'priv','zh-cn','requirement-activateAction','',''),(136,'priv','zh-tw','requirement-activateAction','',''),(136,'manager','zh-cn','','测试仪表盘',''),(137,'priv','de','requirement-reportAction','',''),(137,'priv','en','requirement-reportAction','',''),(137,'priv','fr','requirement-reportAction','',''),(137,'priv','zh-cn','requirement-reportAction','',''),(137,'priv','zh-tw','requirement-reportAction','',''),(137,'manager','zh-cn','','浏览Bug',''),(138,'priv','de','requirement-linkStory','',''),(138,'priv','en','requirement-linkStory','',''),(138,'priv','fr','requirement-linkStory','',''),(138,'priv','zh-cn','requirement-linkStory','',''),(138,'priv','zh-tw','requirement-linkStory','',''),(138,'manager','zh-cn','','创建维护Bug',''),(139,'priv','de','requirement-batchChangeBranch','',''),(139,'priv','en','requirement-batchChangeBranch','',''),(139,'priv','fr','requirement-batchChangeBranch','',''),(139,'priv','zh-cn','requirement-batchChangeBranch','',''),(139,'priv','zh-tw','requirement-batchChangeBranch','',''),(139,'manager','zh-cn','','删除Bug',''),(140,'priv','de','requirement-batchChangeModule','',''),(140,'priv','en','requirement-batchChangeModule','',''),(140,'priv','fr','requirement-batchChangeModule','',''),(140,'priv','zh-cn','requirement-batchChangeModule','',''),(140,'priv','zh-tw','requirement-batchChangeModule','',''),(140,'manager','zh-cn','','导入导出Bug',''),(141,'priv','de','requirement-linkRequirementsAB','',''),(141,'priv','en','requirement-linkRequirementsAB','',''),(141,'priv','fr','requirement-linkRequirementsAB','',''),(141,'priv','zh-cn','requirement-linkRequirementsAB','',''),(141,'priv','zh-tw','requirement-linkRequirementsAB','',''),(141,'manager','zh-cn','','浏览用例',''),(142,'priv','de','requirement-batchEdit','',''),(142,'priv','en','requirement-batchEdit','',''),(142,'priv','fr','requirement-batchEdit','',''),(142,'priv','zh-cn','requirement-batchEdit','',''),(142,'priv','zh-tw','requirement-batchEdit','',''),(142,'manager','zh-cn','','创建维护用例',''),(143,'priv','de','requirement-importCase','',''),(143,'priv','en','requirement-importCase','',''),(143,'priv','fr','requirement-importCase','',''),(143,'priv','zh-cn','requirement-importCase','',''),(143,'priv','zh-tw','requirement-importCase','',''),(143,'manager','zh-cn','','导入导出用例',''),(144,'priv','de','requirement-exportTemplate','',''),(144,'priv','en','requirement-exportTemplate','',''),(144,'priv','fr','requirement-exportTemplate','',''),(144,'priv','zh-cn','requirement-exportTemplate','',''),(144,'priv','zh-tw','requirement-exportTemplate','',''),(144,'manager','zh-cn','','删除用例',''),(145,'priv','de','productplan-browse','',''),(145,'priv','en','productplan-browse','',''),(145,'priv','fr','productplan-browse','',''),(145,'priv','zh-cn','productplan-browse','',''),(145,'priv','zh-tw','productplan-browse','',''),(145,'manager','zh-cn','','评审用例',''),(146,'priv','de','productplan-create','',''),(146,'priv','en','productplan-create','',''),(146,'priv','fr','productplan-create','',''),(146,'priv','zh-cn','productplan-create','',''),(146,'priv','zh-tw','productplan-create','',''),(146,'manager','zh-cn','','浏览测试单',''),(147,'priv','de','productplan-edit','',''),(147,'priv','en','productplan-edit','',''),(147,'priv','fr','productplan-edit','',''),(147,'priv','zh-cn','productplan-edit','',''),(147,'priv','zh-tw','productplan-edit','',''),(147,'manager','zh-cn','','创建维护测试单',''),(148,'priv','de','productplan-delete','',''),(148,'priv','en','productplan-delete','',''),(148,'priv','fr','productplan-delete','',''),(148,'priv','zh-cn','productplan-delete','',''),(148,'priv','zh-tw','productplan-delete','',''),(148,'manager','zh-cn','','删除测试单',''),(149,'priv','de','productplan-view','',''),(149,'priv','en','productplan-view','',''),(149,'priv','fr','productplan-view','',''),(149,'priv','zh-cn','productplan-view','',''),(149,'priv','zh-tw','productplan-view','',''),(149,'manager','zh-cn','','单元测试',''),(150,'priv','de','productplan-linkStory','',''),(150,'priv','en','productplan-linkStory','',''),(150,'priv','fr','productplan-linkStory','',''),(150,'priv','zh-cn','productplan-linkStory','',''),(150,'priv','zh-tw','productplan-linkStory','',''),(150,'manager','zh-cn','','浏览套件',''),(151,'priv','de','productplan-unlinkStory','',''),(151,'priv','en','productplan-unlinkStory','',''),(151,'priv','fr','productplan-unlinkStory','',''),(151,'priv','zh-cn','productplan-unlinkStory','',''),(151,'priv','zh-tw','productplan-unlinkStory','',''),(151,'manager','zh-cn','','创建维护套件',''),(152,'priv','de','productplan-batchUnlinkStory','',''),(152,'priv','en','productplan-batchUnlinkStory','',''),(152,'priv','fr','productplan-batchUnlinkStory','',''),(152,'priv','zh-cn','productplan-batchUnlinkStory','',''),(152,'priv','zh-tw','productplan-batchUnlinkStory','',''),(152,'manager','zh-cn','','删除套件',''),(153,'priv','de','productplan-linkBug','',''),(153,'priv','en','productplan-linkBug','',''),(153,'priv','fr','productplan-linkBug','',''),(153,'priv','zh-cn','productplan-linkBug','',''),(153,'priv','zh-tw','productplan-linkBug','',''),(153,'manager','zh-cn','','浏览测试报告',''),(154,'priv','de','productplan-unlinkBug','',''),(154,'priv','en','productplan-unlinkBug','',''),(154,'priv','fr','productplan-unlinkBug','',''),(154,'priv','zh-cn','productplan-unlinkBug','',''),(154,'priv','zh-tw','productplan-unlinkBug','',''),(154,'manager','zh-cn','','创建维护测试报告',''),(155,'priv','de','productplan-batchUnlinkBug','',''),(155,'priv','en','productplan-batchUnlinkBug','',''),(155,'priv','fr','productplan-batchUnlinkBug','',''),(155,'priv','zh-cn','productplan-batchUnlinkBug','',''),(155,'priv','zh-tw','productplan-batchUnlinkBug','',''),(155,'manager','zh-cn','','删除测试报告',''),(156,'priv','de','productplan-batchEdit','',''),(156,'priv','en','productplan-batchEdit','',''),(156,'priv','fr','productplan-batchEdit','',''),(156,'priv','zh-cn','productplan-batchEdit','',''),(156,'priv','zh-tw','productplan-batchEdit','',''),(156,'manager','zh-cn','','导入导出测试报告',''),(157,'priv','de','productplan-start','',''),(157,'priv','en','productplan-start','',''),(157,'priv','fr','productplan-start','',''),(157,'priv','zh-cn','productplan-start','',''),(157,'priv','zh-tw','productplan-start','',''),(157,'manager','zh-cn','','浏览宿主机',''),(158,'priv','de','productplan-finish','',''),(158,'priv','en','productplan-finish','',''),(158,'priv','fr','productplan-finish','',''),(158,'priv','zh-cn','productplan-finish','',''),(158,'priv','zh-tw','productplan-finish','',''),(158,'manager','zh-cn','','创建维护宿主机',''),(159,'priv','de','productplan-close','',''),(159,'priv','en','productplan-close','',''),(159,'priv','fr','productplan-close','',''),(159,'priv','zh-cn','productplan-close','',''),(159,'priv','zh-tw','productplan-close','',''),(159,'manager','zh-cn','','删除宿主机',''),(160,'priv','de','productplan-activate','',''),(160,'priv','en','productplan-activate','',''),(160,'priv','fr','productplan-activate','',''),(160,'priv','zh-cn','productplan-activate','',''),(160,'priv','zh-tw','productplan-activate','',''),(160,'manager','zh-cn','','镜像',''),(161,'priv','de','productplan-batchChangeStatus','',''),(161,'priv','en','productplan-batchChangeStatus','',''),(161,'priv','fr','productplan-batchChangeStatus','',''),(161,'priv','zh-cn','productplan-batchChangeStatus','',''),(161,'priv','zh-tw','productplan-batchChangeStatus','',''),(161,'manager','zh-cn','','浏览执行节点',''),(162,'priv','de','release-browse','',''),(162,'priv','en','release-browse','',''),(162,'priv','fr','release-browse','',''),(162,'priv','zh-cn','release-browse','',''),(162,'priv','zh-tw','release-browse','',''),(162,'manager','zh-cn','','创建维护执行节点',''),(163,'priv','de','release-create','',''),(163,'priv','en','release-create','',''),(163,'priv','fr','release-create','',''),(163,'priv','zh-cn','release-create','',''),(163,'priv','zh-tw','release-create','',''),(163,'manager','zh-cn','','导入导出执行节点',''),(164,'priv','de','release-edit','',''),(164,'priv','en','release-edit','',''),(164,'priv','fr','release-edit','',''),(164,'priv','zh-cn','release-edit','',''),(164,'priv','zh-tw','release-edit','',''),(164,'manager','zh-cn','',' 快照',''),(165,'priv','de','release-delete','',''),(165,'priv','en','release-delete','',''),(165,'priv','fr','release-delete','',''),(165,'priv','zh-cn','release-delete','',''),(165,'priv','zh-tw','release-delete','',''),(165,'manager','zh-cn','','浏览组织团队',''),(166,'priv','de','release-view','',''),(166,'priv','en','release-view','',''),(166,'priv','fr','release-view','',''),(166,'priv','zh-cn','release-view','',''),(166,'priv','zh-tw','release-view','',''),(166,'manager','zh-cn','','浏览组织日程',''),(167,'priv','de','release-export','',''),(167,'priv','en','release-export','',''),(167,'priv','fr','release-export','',''),(167,'priv','zh-cn','release-export','',''),(167,'priv','zh-tw','release-export','',''),(167,'manager','zh-cn','','浏览组织日志',''),(168,'priv','de','release-linkStory','',''),(168,'priv','en','release-linkStory','',''),(168,'priv','fr','release-linkStory','',''),(168,'priv','zh-cn','release-linkStory','',''),(168,'priv','zh-tw','release-linkStory','',''),(168,'manager','zh-cn','','浏览组织动态',''),(169,'priv','de','release-unlinkStory','',''),(169,'priv','en','release-unlinkStory','',''),(169,'priv','fr','release-unlinkStory','',''),(169,'priv','zh-cn','release-unlinkStory','',''),(169,'priv','zh-tw','release-unlinkStory','',''),(169,'manager','zh-cn','','维护公司信息',''),(170,'priv','de','release-batchUnlinkStory','',''),(170,'priv','en','release-batchUnlinkStory','',''),(170,'priv','fr','release-batchUnlinkStory','',''),(170,'priv','zh-cn','release-batchUnlinkStory','',''),(170,'priv','zh-tw','release-batchUnlinkStory','',''),(170,'manager','zh-cn','','部门数据权限',''),(171,'priv','de','release-linkBug','',''),(171,'priv','en','release-linkBug','',''),(171,'priv','fr','release-linkBug','',''),(171,'priv','zh-cn','release-linkBug','',''),(171,'priv','zh-tw','release-linkBug','',''),(171,'manager','zh-cn','','项目阶段',''),(172,'priv','de','release-unlinkBug','',''),(172,'priv','en','release-unlinkBug','',''),(172,'priv','fr','release-unlinkBug','',''),(172,'priv','zh-cn','release-unlinkBug','',''),(172,'priv','zh-tw','release-unlinkBug','',''),(173,'priv','de','release-batchUnlinkBug','',''),(173,'priv','en','release-batchUnlinkBug','',''),(173,'priv','fr','release-batchUnlinkBug','',''),(173,'priv','zh-cn','release-batchUnlinkBug','',''),(173,'priv','zh-tw','release-batchUnlinkBug','',''),(174,'priv','de','release-changeStatus','',''),(174,'priv','en','release-changeStatus','',''),(174,'priv','fr','release-changeStatus','',''),(174,'priv','zh-cn','release-changeStatus','',''),(174,'priv','zh-tw','release-changeStatus','',''),(175,'priv','de','release-notify','',''),(175,'priv','en','release-notify','',''),(175,'priv','fr','release-notify','',''),(175,'priv','zh-cn','release-notify','',''),(175,'priv','zh-tw','release-notify','',''),(175,'manager','zh-cn','','浏览设计',''),(176,'priv','de','project-index','',''),(176,'priv','en','project-index','',''),(176,'priv','fr','project-index','',''),(176,'priv','zh-cn','project-index','',''),(176,'priv','zh-tw','project-index','',''),(176,'manager','zh-cn','','创建维护设计',''),(177,'priv','de','project-browse','',''),(177,'priv','en','project-browse','',''),(177,'priv','fr','project-browse','',''),(177,'priv','zh-cn','project-browse','',''),(177,'priv','zh-tw','project-browse','',''),(177,'manager','zh-cn','','删除设计',''),(178,'priv','de','project-kanban','',''),(178,'priv','en','project-kanban','',''),(178,'priv','fr','project-kanban','',''),(178,'priv','zh-cn','project-kanban','',''),(178,'priv','zh-tw','project-kanban','',''),(178,'manager','zh-cn','','维护基线评审',''),(179,'priv','de','project-create','',''),(179,'priv','en','project-create','',''),(179,'priv','fr','project-create','',''),(179,'priv','zh-cn','project-create','',''),(179,'priv','zh-tw','project-create','',''),(179,'manager','zh-cn','','维护问题',''),(180,'priv','de','project-edit','',''),(180,'priv','en','project-edit','',''),(180,'priv','fr','project-edit','',''),(180,'priv','zh-cn','project-edit','',''),(180,'priv','zh-tw','project-edit','',''),(180,'manager','zh-cn','','项目配置',''),(181,'priv','de','project-batchEdit','',''),(181,'priv','en','project-batchEdit','',''),(181,'priv','fr','project-batchEdit','',''),(181,'priv','zh-cn','project-batchEdit','',''),(181,'priv','zh-tw','project-batchEdit','',''),(181,'manager','zh-cn','','浏览项目发布',''),(182,'priv','de','project-group','',''),(182,'priv','en','project-group','',''),(182,'priv','fr','project-group','',''),(182,'priv','zh-cn','project-group','',''),(182,'priv','zh-tw','project-group','',''),(182,'manager','zh-cn','','项目周报',''),(183,'priv','de','project-createGroup','',''),(183,'priv','en','project-createGroup','',''),(183,'priv','fr','project-createGroup','',''),(183,'priv','zh-cn','project-createGroup','',''),(183,'priv','zh-tw','project-createGroup','',''),(183,'manager','zh-cn','','项目里程碑报告',''),(184,'priv','de','project-managePriv','',''),(184,'priv','en','project-managePriv','',''),(184,'priv','fr','project-managePriv','',''),(184,'priv','zh-cn','project-managePriv','',''),(184,'priv','zh-tw','project-managePriv','',''),(184,'manager','zh-cn','','调研计划',''),(185,'priv','de','project-manageMembers','',''),(185,'priv','en','project-manageMembers','',''),(185,'priv','fr','project-manageMembers','',''),(185,'priv','zh-cn','project-manageMembers','',''),(185,'priv','zh-tw','project-manageMembers','',''),(185,'manager','zh-cn','','调研报告',''),(186,'priv','de','project-manageGroupMember','',''),(186,'priv','en','project-manageGroupMember','',''),(186,'priv','fr','project-manageGroupMember','',''),(186,'priv','zh-cn','project-manageGroupMember','',''),(186,'priv','zh-tw','project-manageGroupMember','',''),(186,'manager','zh-cn','','费用估算',''),(187,'priv','de','project-copyGroup','',''),(187,'priv','en','project-copyGroup','',''),(187,'priv','fr','project-copyGroup','',''),(187,'priv','zh-cn','project-copyGroup','',''),(187,'priv','zh-tw','project-copyGroup','',''),(187,'manager','zh-cn','','工作量估算',''),(188,'priv','de','project-editGroup','',''),(188,'priv','en','project-editGroup','',''),(188,'priv','fr','project-editGroup','',''),(188,'priv','zh-cn','project-editGroup','',''),(188,'priv','zh-tw','project-editGroup','',''),(188,'manager','zh-cn','','项目工期估算',''),(189,'priv','de','project-start','',''),(189,'priv','en','project-start','',''),(189,'priv','fr','project-start','',''),(189,'priv','zh-cn','project-start','',''),(189,'priv','zh-tw','project-start','',''),(189,'manager','zh-cn','','浏览问题',''),(190,'priv','de','project-suspend','',''),(190,'priv','en','project-suspend','',''),(190,'priv','fr','project-suspend','',''),(190,'priv','zh-cn','project-suspend','',''),(190,'priv','zh-tw','project-suspend','',''),(190,'manager','zh-cn','','创建维护问题',''),(191,'priv','de','project-close','',''),(191,'priv','en','project-close','',''),(191,'priv','fr','project-close','',''),(191,'priv','zh-cn','project-close','',''),(191,'priv','zh-tw','project-close','',''),(191,'manager','zh-cn','','导入导出问题',''),(192,'priv','de','project-activate','',''),(192,'priv','en','project-activate','',''),(192,'priv','fr','project-activate','',''),(192,'priv','zh-cn','project-activate','',''),(192,'priv','zh-tw','project-activate','',''),(192,'manager','zh-cn','','删除问题',''),(193,'priv','de','project-updateOrder','',''),(193,'priv','en','project-updateOrder','',''),(193,'priv','fr','project-updateOrder','',''),(193,'priv','zh-cn','project-updateOrder','',''),(193,'priv','zh-tw','project-updateOrder','',''),(193,'manager','zh-cn','','导入问题库',''),(194,'priv','de','project-delete','',''),(194,'priv','en','project-delete','',''),(194,'priv','fr','project-delete','',''),(194,'priv','zh-cn','project-delete','',''),(194,'priv','zh-tw','project-delete','',''),(194,'manager','zh-cn','','浏览风险',''),(195,'priv','de','project-view','',''),(195,'priv','en','project-view','',''),(195,'priv','fr','project-view','',''),(195,'priv','zh-cn','project-view','',''),(195,'priv','zh-tw','project-view','',''),(195,'manager','zh-cn','','创建维护风险',''),(196,'priv','de','project-whitelist','',''),(196,'priv','en','project-whitelist','',''),(196,'priv','fr','project-whitelist','',''),(196,'priv','zh-cn','project-whitelist','',''),(196,'priv','zh-tw','project-whitelist','',''),(196,'manager','zh-cn','','导入导出风险',''),(197,'priv','de','project-addWhitelist','',''),(197,'priv','en','project-addWhitelist','',''),(197,'priv','fr','project-addWhitelist','',''),(197,'priv','zh-cn','project-addWhitelist','',''),(197,'priv','zh-tw','project-addWhitelist','',''),(197,'manager','zh-cn','','删除问题',''),(198,'priv','de','project-unbindWhitelist','',''),(198,'priv','en','project-unbindWhitelist','',''),(198,'priv','fr','project-unbindWhitelist','',''),(198,'priv','zh-cn','project-unbindWhitelist','',''),(198,'priv','zh-tw','project-unbindWhitelist','',''),(198,'manager','zh-cn','','导入风险库',''),(199,'priv','de','project-manageProducts','',''),(199,'priv','en','project-manageProducts','',''),(199,'priv','fr','project-manageProducts','',''),(199,'priv','zh-cn','project-manageProducts','',''),(199,'priv','zh-tw','project-manageProducts','',''),(199,'manager','zh-cn','','浏览机会',''),(200,'priv','de','project-dynamic','',''),(200,'priv','en','project-dynamic','',''),(200,'priv','fr','project-dynamic','',''),(200,'priv','zh-cn','project-dynamic','',''),(200,'priv','zh-tw','project-dynamic','',''),(200,'manager','zh-cn','','创建维护机会',''),(201,'manager','zh-cn','','删除机会',''),(202,'manager','zh-cn','','导入机会库',''),(203,'priv','de','project-bug','',''),(203,'priv','en','project-bug','',''),(203,'priv','fr','project-bug','',''),(203,'priv','zh-cn','project-bug','',''),(203,'priv','zh-tw','project-bug','',''),(203,'manager','zh-cn','','导入导出机会',''),(204,'priv','de','project-testcase','',''),(204,'priv','en','project-testcase','',''),(204,'priv','fr','project-testcase','',''),(204,'priv','zh-cn','project-testcase','',''),(204,'priv','zh-tw','project-testcase','',''),(204,'manager','zh-cn','','项目过程',''),(205,'priv','de','project-testtask','',''),(205,'priv','en','project-testtask','',''),(205,'priv','fr','project-testtask','',''),(205,'priv','zh-cn','project-testtask','',''),(205,'priv','zh-tw','project-testtask','',''),(205,'manager','zh-cn','','项目度量',''),(206,'priv','de','project-testreport','',''),(206,'priv','en','project-testreport','',''),(206,'priv','fr','project-testreport','',''),(206,'priv','zh-cn','project-testreport','',''),(206,'priv','zh-tw','project-testreport','',''),(206,'manager','zh-cn','','维护质量保证计划',''),(207,'priv','de','project-execution','',''),(207,'priv','en','project-execution','',''),(207,'priv','fr','project-execution','',''),(207,'priv','zh-cn','project-execution','',''),(207,'priv','zh-tw','project-execution','',''),(207,'manager','zh-cn','','不符合项',''),(208,'priv','de','project-export','',''),(208,'priv','en','project-export','',''),(208,'priv','fr','project-export','',''),(208,'priv','zh-cn','project-export','',''),(208,'priv','zh-tw','project-export','',''),(208,'manager','zh-cn','','会议',''),(209,'priv','de','project-teamAction','',''),(209,'priv','en','project-teamAction','',''),(209,'priv','fr','project-teamAction','',''),(209,'priv','zh-cn','project-teamAction','',''),(209,'priv','zh-tw','project-teamAction','',''),(209,'manager','zh-cn','','培训计划',''),(210,'priv','de','project-unlinkMemberAction','',''),(210,'priv','en','project-unlinkMemberAction','',''),(210,'priv','fr','project-unlinkMemberAction','',''),(210,'priv','zh-cn','project-unlinkMemberAction','',''),(210,'priv','zh-tw','project-unlinkMemberAction','',''),(210,'manager','zh-cn','','能力差距分析',''),(211,'manager','zh-cn','','工作流字段',''),(212,'priv','de','project-moduleOpenAction','',''),(212,'priv','en','project-moduleOpenAction','',''),(212,'priv','fr','project-moduleOpenAction','',''),(212,'priv','zh-cn','project-moduleOpenAction','',''),(212,'priv','zh-tw','project-moduleOpenAction','',''),(212,'manager','zh-cn','','工作流动作',''),(213,'priv','de','project-approval','',''),(213,'priv','en','project-approval','',''),(213,'priv','fr','project-approval','',''),(213,'priv','zh-cn','project-approval','',''),(213,'priv','zh-tw','project-approval','',''),(213,'manager','zh-cn','','工作流界面',''),(214,'priv','de','projectplan-browse','',''),(214,'priv','en','projectplan-browse','',''),(214,'priv','fr','projectplan-browse','',''),(214,'priv','zh-cn','projectplan-browse','',''),(214,'priv','zh-tw','projectplan-browse','',''),(214,'manager','zh-cn','','工作流触发条件',''),(215,'priv','de','projectplan-create','',''),(215,'priv','en','projectplan-create','',''),(215,'priv','fr','projectplan-create','',''),(215,'priv','zh-cn','projectplan-create','',''),(215,'priv','zh-tw','projectplan-create','',''),(215,'manager','zh-cn','','工作流界面联动',''),(216,'priv','de','projectplan-edit','',''),(216,'priv','en','projectplan-edit','',''),(216,'priv','fr','projectplan-edit','',''),(216,'priv','zh-cn','projectplan-edit','',''),(216,'priv','zh-tw','projectplan-edit','',''),(216,'manager','zh-cn','','工作流扩展动作',''),(217,'priv','de','projectplan-view','',''),(217,'priv','en','projectplan-view','',''),(217,'priv','fr','projectplan-view','',''),(217,'priv','zh-cn','projectplan-view','',''),(217,'priv','zh-tw','projectplan-view','',''),(217,'manager','zh-cn','','工作流标签',''),(218,'priv','de','projectstory-story','',''),(218,'priv','en','projectstory-story','',''),(218,'priv','fr','projectstory-story','',''),(218,'priv','zh-cn','projectstory-story','',''),(218,'priv','zh-tw','projectstory-story','',''),(218,'manager','zh-cn','','工作流跨流程设置',''),(219,'priv','de','projectstory-trackAction','',''),(219,'priv','en','projectstory-trackAction','',''),(219,'priv','fr','projectstory-trackAction','',''),(219,'priv','zh-cn','projectstory-trackAction','',''),(219,'priv','zh-tw','projectstory-trackAction','',''),(220,'priv','de','projectstory-view','',''),(220,'priv','en','projectstory-view','',''),(220,'priv','fr','projectstory-view','',''),(220,'priv','zh-cn','projectstory-view','',''),(220,'priv','zh-tw','projectstory-view','',''),(220,'manager','zh-cn','','工作流报表',''),(221,'priv','de','projectstory-linkStory','',''),(221,'priv','en','projectstory-linkStory','',''),(221,'priv','fr','projectstory-linkStory','',''),(221,'priv','zh-cn','projectstory-linkStory','',''),(221,'priv','zh-tw','projectstory-linkStory','',''),(221,'manager','zh-cn','','工作流数据源',''),(222,'priv','de','projectstory-importplanstories','',''),(222,'priv','en','projectstory-importplanstories','',''),(222,'priv','fr','projectstory-importplanstories','',''),(222,'priv','zh-cn','projectstory-importplanstories','',''),(222,'priv','zh-tw','projectstory-importplanstories','',''),(222,'manager','zh-cn','','工作流验证规则',''),(223,'priv','de','projectstory-unlinkStory','',''),(223,'priv','en','projectstory-unlinkStory','',''),(223,'priv','fr','projectstory-unlinkStory','',''),(223,'priv','zh-cn','projectstory-unlinkStory','',''),(223,'priv','zh-tw','projectstory-unlinkStory','',''),(223,'manager','zh-cn','','工作流',''),(224,'priv','de','projectstory-batchUnlinkStory','',''),(224,'priv','en','projectstory-batchUnlinkStory','',''),(224,'priv','fr','projectstory-batchUnlinkStory','',''),(224,'priv','zh-cn','projectstory-batchUnlinkStory','',''),(224,'priv','zh-tw','projectstory-batchUnlinkStory','',''),(224,'manager','zh-cn','','代码',''),(225,'priv','de','projectstory-importFromLib','',''),(225,'priv','en','projectstory-importFromLib','',''),(225,'priv','fr','projectstory-importFromLib','',''),(225,'priv','zh-cn','projectstory-importFromLib','',''),(225,'priv','zh-tw','projectstory-importFromLib','',''),(225,'manager','zh-cn','','下载代码',''),(226,'priv','de','execution-view','',''),(226,'priv','en','execution-view','',''),(226,'priv','fr','execution-view','',''),(226,'priv','zh-cn','execution-view','',''),(226,'priv','zh-tw','execution-view','',''),(226,'manager','zh-cn','','二次开发',''),(227,'manager','zh-cn','','评审代码',''),(228,'priv','de','execution-createExec','',''),(228,'priv','en','execution-createExec','',''),(228,'priv','fr','execution-createExec','',''),(228,'priv','zh-cn','execution-createExec','',''),(228,'priv','zh-tw','execution-createExec','',''),(228,'manager','zh-cn','','编辑器',''),(229,'priv','de','execution-editAction','',''),(229,'priv','en','execution-editAction','',''),(229,'priv','fr','execution-editAction','',''),(229,'priv','zh-cn','execution-editAction','',''),(229,'priv','zh-tw','execution-editAction','',''),(229,'manager','zh-cn','','接入禅道',''),(230,'priv','de','execution-batchEditAction','',''),(230,'priv','en','execution-batchEditAction','',''),(230,'priv','fr','execution-batchEditAction','',''),(230,'priv','zh-cn','execution-batchEditAction','',''),(230,'priv','zh-tw','execution-batchEditAction','',''),(230,'manager','zh-cn','','合并请求',''),(231,'priv','de','execution-batchChangeStatus','',''),(231,'priv','en','execution-batchChangeStatus','',''),(231,'priv','fr','execution-batchChangeStatus','',''),(231,'priv','zh-cn','execution-batchChangeStatus','',''),(231,'priv','zh-tw','execution-batchChangeStatus','',''),(231,'manager','zh-cn','','权限后台设置',''),(232,'priv','de','execution-startAction','',''),(232,'priv','en','execution-startAction','',''),(232,'priv','fr','execution-startAction','',''),(232,'priv','zh-cn','execution-startAction','',''),(232,'priv','zh-tw','execution-startAction','',''),(232,'manager','zh-cn','','部门结构',''),(233,'priv','de','execution-activateAction','',''),(233,'priv','en','execution-activateAction','',''),(233,'priv','fr','execution-activateAction','',''),(233,'priv','zh-cn','execution-activateAction','',''),(233,'priv','zh-tw','execution-activateAction','',''),(233,'manager','zh-cn','','权限分组',''),(234,'priv','de','execution-delayAction','',''),(234,'priv','en','execution-delayAction','',''),(234,'priv','fr','execution-delayAction','',''),(234,'priv','zh-cn','execution-delayAction','',''),(234,'priv','zh-tw','execution-delayAction','',''),(234,'manager','zh-cn','','维护用户',''),(235,'priv','de','execution-suspendAction','',''),(235,'priv','en','execution-suspendAction','',''),(235,'priv','fr','execution-suspendAction','',''),(235,'priv','zh-cn','execution-suspendAction','',''),(235,'priv','zh-tw','execution-suspendAction','',''),(235,'manager','zh-cn','','插件管理',''),(236,'priv','de','execution-closeAction','',''),(236,'priv','en','execution-closeAction','',''),(236,'priv','fr','execution-closeAction','',''),(236,'priv','zh-cn','execution-closeAction','',''),(236,'priv','zh-tw','execution-closeAction','',''),(236,'manager','zh-cn','','通知设置',''),(237,'priv','de','execution-deleteAB','',''),(237,'priv','en','execution-deleteAB','',''),(237,'priv','fr','execution-deleteAB','',''),(237,'priv','zh-cn','execution-deleteAB','',''),(237,'priv','zh-tw','execution-deleteAB','',''),(237,'manager','zh-cn','','邮件配置',''),(238,'priv','de','execution-task','',''),(238,'priv','en','execution-task','',''),(238,'priv','fr','execution-task','',''),(238,'priv','zh-cn','execution-task','',''),(238,'priv','zh-tw','execution-task','',''),(238,'manager','zh-cn','','Webhook',''),(239,'priv','de','execution-groupTask','',''),(239,'priv','en','execution-groupTask','',''),(239,'priv','fr','execution-groupTask','',''),(239,'priv','zh-cn','execution-groupTask','',''),(239,'priv','zh-tw','execution-groupTask','',''),(239,'manager','zh-cn','','代码库',''),(240,'priv','de','execution-importTask','',''),(240,'priv','en','execution-importTask','',''),(240,'priv','fr','execution-importTask','',''),(240,'priv','zh-cn','execution-importTask','',''),(240,'priv','zh-tw','execution-importTask','',''),(240,'manager','zh-cn','','GitLab',''),(241,'priv','de','execution-importPlanStories','',''),(241,'priv','en','execution-importPlanStories','',''),(241,'priv','fr','execution-importPlanStories','',''),(241,'priv','zh-cn','execution-importPlanStories','',''),(241,'priv','zh-tw','execution-importPlanStories','',''),(241,'manager','zh-cn','','短信配置',''),(242,'priv','de','execution-importBug','',''),(242,'priv','en','execution-importBug','',''),(242,'priv','fr','execution-importBug','',''),(242,'priv','zh-cn','execution-importBug','',''),(242,'priv','zh-tw','execution-importBug','',''),(242,'manager','zh-cn','','Gogs',''),(243,'priv','de','execution-story','',''),(243,'priv','en','execution-story','',''),(243,'priv','fr','execution-story','',''),(243,'priv','zh-cn','execution-story','',''),(243,'priv','zh-tw','execution-story','',''),(243,'manager','zh-cn','','Gitea',''),(244,'priv','de','execution-build','',''),(244,'priv','en','execution-build','',''),(244,'priv','fr','execution-build','',''),(244,'priv','zh-cn','execution-build','',''),(244,'priv','zh-tw','execution-build','',''),(244,'manager','zh-cn','','SonarQube',''),(245,'priv','de','execution-testcase','',''),(245,'priv','en','execution-testcase','',''),(245,'priv','fr','execution-testcase','',''),(245,'priv','zh-cn','execution-testcase','',''),(245,'priv','zh-tw','execution-testcase','',''),(245,'manager','zh-cn','','指令',''),(246,'priv','de','execution-bug','',''),(246,'priv','en','execution-bug','',''),(246,'priv','fr','execution-bug','',''),(246,'priv','zh-cn','execution-bug','',''),(246,'priv','zh-tw','execution-bug','',''),(246,'manager','zh-cn','','流水线',''),(247,'priv','de','execution-testtask','',''),(247,'priv','en','execution-testtask','',''),(247,'priv','fr','execution-testtask','',''),(247,'priv','zh-cn','execution-testtask','',''),(247,'priv','zh-tw','execution-testtask','',''),(247,'manager','zh-cn','','流水线列表',''),(248,'priv','de','execution-testreport','',''),(248,'priv','en','execution-testreport','',''),(248,'priv','fr','execution-testreport','',''),(248,'priv','zh-cn','execution-testreport','',''),(248,'priv','zh-tw','execution-testreport','',''),(248,'manager','zh-cn','','合并请求',''),(249,'priv','de','execution-burn','',''),(249,'priv','en','execution-burn','',''),(249,'priv','fr','execution-burn','',''),(249,'priv','zh-cn','execution-burn','',''),(249,'priv','zh-tw','execution-burn','',''),(249,'manager','zh-cn','','系统备份',''),(250,'priv','de','execution-computeBurnAction','',''),(250,'priv','en','execution-computeBurnAction','',''),(250,'priv','fr','execution-computeBurnAction','',''),(250,'priv','zh-cn','execution-computeBurnAction','',''),(250,'priv','zh-tw','execution-computeBurnAction','',''),(250,'manager','zh-cn','','回收站',''),(251,'priv','de','execution-CFD','',''),(251,'priv','en','execution-CFD','',''),(251,'priv','fr','execution-CFD','',''),(251,'priv','zh-cn','execution-CFD','',''),(251,'priv','zh-tw','execution-CFD','',''),(251,'manager','zh-cn','','安全',''),(252,'priv','de','execution-computeCFD','',''),(252,'priv','en','execution-computeCFD','',''),(252,'priv','fr','execution-computeCFD','',''),(252,'priv','zh-cn','execution-computeCFD','',''),(252,'priv','zh-tw','execution-computeCFD','',''),(252,'manager','zh-cn','','定时',''),(253,'priv','de','execution-fixFirst','',''),(253,'priv','en','execution-fixFirst','',''),(253,'priv','fr','execution-fixFirst','',''),(253,'priv','zh-cn','execution-fixFirst','',''),(253,'priv','zh-tw','execution-fixFirst','',''),(253,'manager','zh-cn','','LDAP',''),(254,'manager','zh-cn','','聊天',''),(255,'priv','de','execution-teamAction','',''),(255,'priv','en','execution-teamAction','',''),(255,'priv','fr','execution-teamAction','',''),(255,'priv','zh-cn','execution-teamAction','',''),(255,'priv','zh-tw','execution-teamAction','',''),(255,'manager','zh-cn','','jenkins',''),(256,'priv','de','execution-dynamic','',''),(256,'priv','en','execution-dynamic','',''),(256,'priv','fr','execution-dynamic','',''),(256,'priv','zh-cn','execution-dynamic','',''),(256,'priv','zh-tw','execution-dynamic','',''),(256,'manager','zh-cn','','系统设置',''),(257,'priv','de','execution-manageProducts','',''),(257,'priv','en','execution-manageProducts','',''),(257,'priv','fr','execution-manageProducts','',''),(257,'priv','zh-cn','execution-manageProducts','',''),(257,'priv','zh-tw','execution-manageProducts','',''),(257,'manager','zh-cn','','搜索',''),(258,'priv','de','execution-manageMembers','',''),(258,'priv','en','execution-manageMembers','',''),(258,'priv','fr','execution-manageMembers','',''),(258,'priv','zh-cn','execution-manageMembers','',''),(258,'priv','zh-tw','execution-manageMembers','',''),(258,'manager','zh-cn','','备注',''),(259,'priv','de','execution-unlinkMember','',''),(259,'priv','en','execution-unlinkMember','',''),(259,'priv','fr','execution-unlinkMember','',''),(259,'priv','zh-cn','execution-unlinkMember','',''),(259,'priv','zh-tw','execution-unlinkMember','',''),(259,'manager','zh-cn','','模块维护',''),(260,'priv','de','execution-linkStory','',''),(260,'priv','en','execution-linkStory','',''),(260,'priv','fr','execution-linkStory','',''),(260,'priv','zh-cn','execution-linkStory','',''),(260,'priv','zh-tw','execution-linkStory','',''),(260,'manager','zh-cn','','附件',''),(261,'priv','de','execution-unlinkStory','',''),(261,'priv','en','execution-unlinkStory','',''),(261,'priv','fr','execution-unlinkStory','',''),(261,'priv','zh-cn','execution-unlinkStory','',''),(261,'priv','zh-tw','execution-unlinkStory','',''),(261,'manager','zh-cn','','通用日志',''),(262,'priv','de','execution-batchUnlinkStory','',''),(262,'priv','en','execution-batchUnlinkStory','',''),(262,'priv','fr','execution-batchUnlinkStory','',''),(262,'priv','zh-cn','execution-batchUnlinkStory','',''),(262,'priv','zh-tw','execution-batchUnlinkStory','',''),(262,'manager','zh-cn','','文档模板',''),(263,'priv','de','execution-updateOrder','',''),(263,'priv','en','execution-updateOrder','',''),(263,'priv','fr','execution-updateOrder','',''),(263,'priv','zh-cn','execution-updateOrder','',''),(263,'priv','zh-tw','execution-updateOrder','',''),(263,'manager','zh-cn','','导入需求库',''),(264,'priv','de','execution-taskKanban','',''),(264,'priv','en','execution-taskKanban','',''),(264,'priv','fr','execution-taskKanban','',''),(264,'priv','zh-cn','execution-taskKanban','',''),(264,'priv','zh-tw','execution-taskKanban','',''),(264,'manager','zh-cn','','项目干系人',''),(265,'priv','de','execution-printKanbanAction','',''),(265,'priv','en','execution-printKanbanAction','',''),(265,'priv','fr','execution-printKanbanAction','',''),(265,'priv','zh-cn','execution-printKanbanAction','',''),(265,'priv','zh-tw','execution-printKanbanAction','',''),(265,'manager','zh-cn','','项目版本',''),(266,'priv','de','execution-treeAction','',''),(266,'priv','en','execution-treeAction','',''),(266,'priv','fr','execution-treeAction','',''),(266,'priv','zh-cn','execution-treeAction','',''),(266,'priv','zh-tw','execution-treeAction','',''),(266,'manager','zh-cn','','导入用例库',''),(267,'priv','de','execution-treeViewTask','',''),(267,'priv','en','execution-treeViewTask','',''),(267,'priv','fr','execution-treeViewTask','',''),(267,'priv','zh-cn','execution-treeViewTask','',''),(267,'priv','zh-tw','execution-treeViewTask','',''),(267,'manager','zh-cn','','通用配置',''),(268,'priv','de','execution-treeViewStory','',''),(268,'priv','en','execution-treeViewStory','',''),(268,'priv','fr','execution-treeViewStory','',''),(268,'priv','zh-cn','execution-treeViewStory','',''),(268,'priv','zh-tw','execution-treeViewStory','',''),(268,'manager','zh-cn','','阶段列表设置',''),(269,'priv','de','execution-allExecutionAB','',''),(269,'priv','en','execution-allExecutionAB','',''),(269,'priv','fr','execution-allExecutionAB','',''),(269,'priv','zh-cn','execution-allExecutionAB','',''),(269,'priv','zh-tw','execution-allExecutionAB','',''),(269,'manager','zh-cn','','分类项设置',''),(270,'priv','de','execution-exportAction','',''),(270,'priv','en','execution-exportAction','',''),(270,'priv','fr','execution-exportAction','',''),(270,'priv','zh-cn','execution-exportAction','',''),(270,'priv','zh-tw','execution-exportAction','',''),(270,'manager','zh-cn','','审计设置',''),(271,'priv','de','execution-storyKanban','',''),(271,'priv','en','execution-storyKanban','',''),(271,'priv','fr','execution-storyKanban','',''),(271,'priv','zh-cn','execution-storyKanban','',''),(271,'priv','zh-tw','execution-storyKanban','',''),(271,'manager','zh-cn','','QA检查项设置',''),(272,'priv','de','execution-storySort','',''),(272,'priv','en','execution-storySort','',''),(272,'priv','fr','execution-storySort','',''),(272,'priv','zh-cn','execution-storySort','',''),(272,'priv','zh-tw','execution-storySort','',''),(272,'manager','zh-cn','','评审设置',''),(273,'priv','de','execution-whitelist','',''),(273,'priv','en','execution-whitelist','',''),(273,'priv','fr','execution-whitelist','',''),(273,'priv','zh-cn','execution-whitelist','',''),(273,'priv','zh-tw','execution-whitelist','',''),(273,'manager','zh-cn','','过程设置',''),(274,'priv','de','execution-addWhitelist','',''),(274,'priv','en','execution-addWhitelist','',''),(274,'priv','fr','execution-addWhitelist','',''),(274,'priv','zh-cn','execution-addWhitelist','',''),(274,'priv','zh-tw','execution-addWhitelist','',''),(274,'manager','zh-cn','','活动设置',''),(275,'priv','de','execution-unbindWhitelist','',''),(275,'priv','en','execution-unbindWhitelist','',''),(275,'priv','fr','execution-unbindWhitelist','',''),(275,'priv','zh-cn','execution-unbindWhitelist','',''),(275,'priv','zh-tw','execution-unbindWhitelist','',''),(275,'manager','zh-cn','','文档设置',''),(276,'priv','de','execution-storyEstimate','',''),(276,'priv','en','execution-storyEstimate','',''),(276,'priv','fr','execution-storyEstimate','',''),(276,'priv','zh-cn','execution-storyEstimate','',''),(276,'priv','zh-tw','execution-storyEstimate','',''),(276,'manager','zh-cn','','自定义配置',''),(277,'priv','de','execution-kanbanAction','',''),(277,'priv','en','execution-kanbanAction','',''),(277,'priv','fr','execution-kanbanAction','',''),(277,'priv','zh-cn','execution-kanbanAction','',''),(277,'priv','zh-tw','execution-kanbanAction','',''),(277,'manager','zh-cn','','审批设置',''),(278,'priv','de','execution-RDKanban','',''),(278,'priv','en','execution-RDKanban','',''),(278,'priv','fr','execution-RDKanban','',''),(278,'priv','zh-cn','execution-RDKanban','',''),(278,'priv','zh-tw','execution-RDKanban','',''),(278,'manager','zh-cn','','度量设置',''),(279,'priv','de','execution-setKanban','',''),(279,'priv','en','execution-setKanban','',''),(279,'priv','fr','execution-setKanban','',''),(279,'priv','zh-cn','execution-setKanban','',''),(279,'priv','zh-tw','execution-setKanban','',''),(279,'manager','zh-cn','','用户设置',''),(280,'priv','de','execution-doc','',''),(280,'priv','en','execution-doc','',''),(280,'priv','fr','execution-doc','',''),(280,'priv','zh-cn','execution-doc','',''),(280,'priv','zh-tw','execution-doc','',''),(280,'manager','zh-cn','','会议室设置',''),(281,'priv','de','execution-storyView','',''),(281,'priv','en','execution-storyView','',''),(281,'priv','fr','execution-storyView','',''),(281,'priv','zh-cn','execution-storyView','',''),(281,'priv','zh-tw','execution-storyView','',''),(281,'manager','zh-cn','','sql构建器',''),(282,'priv','de','execution-calendar','',''),(282,'priv','en','execution-calendar','',''),(282,'priv','fr','execution-calendar','',''),(282,'priv','zh-cn','execution-calendar','',''),(282,'priv','zh-tw','execution-calendar','',''),(282,'manager','zh-cn','','设计设置',''),(283,'priv','de','execution-effortCalendar','',''),(283,'priv','en','execution-effortCalendar','',''),(283,'priv','fr','execution-effortCalendar','',''),(283,'priv','zh-cn','execution-effortCalendar','',''),(283,'priv','zh-tw','execution-effortCalendar','',''),(283,'manager','zh-cn','','维护空间',''),(284,'priv','de','execution-effortAction','',''),(284,'priv','en','execution-effortAction','',''),(284,'priv','fr','execution-effortAction','',''),(284,'priv','zh-cn','execution-effortAction','',''),(284,'priv','zh-tw','execution-effortAction','',''),(284,'manager','zh-cn','','删除空间',''),(285,'priv','de','execution-taskEffort','',''),(285,'priv','en','execution-taskEffort','',''),(285,'priv','fr','execution-taskEffort','',''),(285,'priv','zh-cn','execution-taskEffort','',''),(285,'priv','zh-tw','execution-taskEffort','',''),(285,'manager','zh-cn','','浏览看板',''),(286,'priv','de','execution-computeTaskEffort','',''),(286,'priv','en','execution-computeTaskEffort','',''),(286,'priv','fr','execution-computeTaskEffort','',''),(286,'priv','zh-cn','execution-computeTaskEffort','',''),(286,'priv','zh-tw','execution-computeTaskEffort','',''),(286,'manager','zh-cn','','创建维护看板',''),(287,'priv','de','execution-deleterelation','',''),(287,'priv','en','execution-deleterelation','',''),(287,'priv','fr','execution-deleterelation','',''),(287,'priv','zh-cn','execution-deleterelation','',''),(287,'priv','zh-tw','execution-deleterelation','',''),(287,'manager','zh-cn','','删除看板',''),(288,'priv','de','execution-editrelation','',''),(288,'priv','en','execution-editrelation','',''),(288,'priv','fr','execution-editrelation','',''),(288,'priv','zh-cn','execution-editrelation','',''),(288,'priv','zh-tw','execution-editrelation','',''),(288,'manager','zh-cn','','删除执行节点',''),(289,'priv','de','execution-viewrelation','',''),(289,'priv','en','execution-viewrelation','',''),(289,'priv','fr','execution-viewrelation','',''),(289,'priv','zh-cn','execution-viewrelation','',''),(289,'priv','zh-tw','execution-viewrelation','',''),(289,'manager','zh-cn','','自动化测试',''),(290,'priv','de','execution-ganttchart','',''),(290,'priv','en','execution-ganttchart','',''),(290,'priv','fr','execution-ganttchart','',''),(290,'priv','zh-cn','execution-ganttchart','',''),(290,'priv','zh-tw','execution-ganttchart','',''),(290,'manager','zh-cn','','测试',''),(291,'priv','de','execution-ganttSetting','',''),(291,'priv','en','execution-ganttSetting','',''),(291,'priv','fr','execution-ganttSetting','',''),(291,'priv','zh-cn','execution-ganttSetting','',''),(291,'priv','zh-tw','execution-ganttSetting','',''),(291,'manager','zh-cn','','维护日志',''),(292,'priv','de','execution-ganttEdit','',''),(292,'priv','en','execution-ganttEdit','',''),(292,'priv','fr','execution-ganttEdit','',''),(292,'priv','zh-cn','execution-ganttEdit','',''),(292,'priv','zh-tw','execution-ganttEdit','',''),(292,'manager','zh-cn','','测试',''),(293,'priv','de','kanban-spaceCommon','',''),(293,'priv','en','kanban-spaceCommon','',''),(293,'priv','fr','kanban-spaceCommon','',''),(293,'priv','zh-cn','kanban-spaceCommon','',''),(293,'priv','zh-tw','kanban-spaceCommon','',''),(293,'manager','zh-cn','','矩阵',''),(294,'priv','de','kanban-createSpace','',''),(294,'priv','en','kanban-createSpace','',''),(294,'priv','fr','kanban-createSpace','',''),(294,'priv','zh-cn','kanban-createSpace','',''),(294,'priv','zh-tw','kanban-createSpace','',''),(294,'manager','zh-cn','','后台',''),(295,'priv','de','kanban-editSpace','',''),(295,'priv','en','kanban-editSpace','',''),(295,'priv','fr','kanban-editSpace','',''),(295,'priv','zh-cn','kanban-editSpace','',''),(295,'priv','zh-tw','kanban-editSpace','',''),(295,'manager','zh-cn','','工作流跨流程设置',''),(296,'priv','de','kanban-closeSpace','',''),(296,'priv','en','kanban-closeSpace','',''),(296,'priv','fr','kanban-closeSpace','',''),(296,'priv','zh-cn','kanban-closeSpace','',''),(296,'priv','zh-tw','kanban-closeSpace','',''),(296,'manager','zh-cn','','模板',''),(297,'priv','de','kanban-deleteSpace','',''),(297,'priv','en','kanban-deleteSpace','',''),(297,'priv','fr','kanban-deleteSpace','',''),(297,'priv','zh-cn','kanban-deleteSpace','',''),(297,'priv','zh-tw','kanban-deleteSpace','',''),(297,'manager','zh-cn','','数据表格',''),(298,'manager','zh-cn','','自动化测试',''),(299,'priv','de','kanban-create','',''),(299,'priv','en','kanban-create','',''),(299,'priv','fr','kanban-create','',''),(299,'priv','zh-cn','kanban-create','',''),(299,'priv','zh-tw','kanban-create','',''),(299,'manager','zh-cn','','Git',''),(300,'priv','de','kanban-edit','',''),(300,'priv','en','kanban-edit','',''),(300,'priv','fr','kanban-edit','',''),(300,'priv','zh-cn','kanban-edit','',''),(300,'priv','zh-tw','kanban-edit','',''),(300,'manager','zh-cn','','Subversion',''),(301,'priv','de','kanban-view','',''),(301,'priv','en','kanban-view','',''),(301,'priv','fr','kanban-view','',''),(301,'priv','zh-cn','kanban-view','',''),(301,'priv','zh-tw','kanban-view','',''),(301,'manager','zh-cn','','防超时',''),(302,'priv','de','kanban-close','',''),(302,'priv','en','kanban-close','',''),(302,'priv','fr','kanban-close','',''),(302,'priv','zh-cn','kanban-close','',''),(302,'priv','zh-tw','kanban-close','',''),(302,'manager','zh-cn','','审批',''),(303,'priv','de','kanban-delete','',''),(303,'priv','en','kanban-delete','',''),(303,'priv','fr','kanban-delete','',''),(303,'priv','zh-cn','kanban-delete','',''),(303,'priv','zh-tw','kanban-delete','',''),(303,'manager','zh-cn','','创建维护项目发布',''),(304,'priv','de','kanban-createRegion','',''),(304,'priv','en','kanban-createRegion','',''),(304,'priv','fr','kanban-createRegion','',''),(304,'priv','zh-cn','kanban-createRegion','',''),(304,'priv','zh-tw','kanban-createRegion','',''),(304,'manager','zh-cn','','删除项目发布',''),(305,'priv','de','kanban-editRegion','',''),(305,'priv','en','kanban-editRegion','',''),(305,'priv','fr','kanban-editRegion','',''),(305,'priv','zh-cn','kanban-editRegion','',''),(305,'priv','zh-tw','kanban-editRegion','',''),(305,'manager','zh-cn','','导入导出项目发布',''),(306,'priv','de','kanban-sortRegion','',''),(306,'priv','en','kanban-sortRegion','',''),(306,'priv','fr','kanban-sortRegion','',''),(306,'priv','zh-cn','kanban-sortRegion','',''),(306,'priv','zh-tw','kanban-sortRegion','',''),(306,'manager','zh-cn','','发布通知',''),(307,'priv','de','kanban-sortGroup','',''),(307,'priv','en','kanban-sortGroup','',''),(307,'priv','fr','kanban-sortGroup','',''),(307,'priv','zh-cn','kanban-sortGroup','',''),(307,'priv','zh-tw','kanban-sortGroup','',''),(307,'manager','zh-cn','','甘特图',''),(308,'priv','de','kanban-deleteRegion','',''),(308,'priv','en','kanban-deleteRegion','',''),(308,'priv','fr','kanban-deleteRegion','',''),(308,'priv','zh-cn','kanban-deleteRegion','',''),(308,'priv','zh-tw','kanban-deleteRegion','',''),(308,'manager','zh-cn','','维护任务关系',''),(309,'priv','de','kanban-createLane','',''),(309,'priv','en','kanban-createLane','',''),(309,'priv','fr','kanban-createLane','',''),(309,'priv','zh-cn','kanban-createLane','',''),(309,'priv','zh-tw','kanban-createLane','',''),(309,'manager','zh-cn','','浏览版本',''),(310,'priv','de','kanban-sortLane','',''),(310,'priv','en','kanban-sortLane','',''),(310,'priv','fr','kanban-sortLane','',''),(310,'priv','zh-cn','kanban-sortLane','',''),(310,'priv','zh-tw','kanban-sortLane','',''),(311,'priv','de','kanban-deleteLane','',''),(311,'priv','en','kanban-deleteLane','',''),(311,'priv','fr','kanban-deleteLane','',''),(311,'priv','zh-cn','kanban-deleteLane','',''),(311,'priv','zh-tw','kanban-deleteLane','',''),(311,'manager','zh-cn','','浏览研发需求',''),(312,'priv','de','kanban-createColumn','',''),(312,'priv','en','kanban-createColumn','',''),(312,'priv','fr','kanban-createColumn','',''),(312,'priv','zh-cn','kanban-createColumn','',''),(312,'priv','zh-tw','kanban-createColumn','',''),(312,'manager','zh-cn','','维护卡片',''),(313,'priv','de','kanban-editColumn','',''),(313,'priv','en','kanban-editColumn','',''),(313,'priv','fr','kanban-editColumn','',''),(313,'priv','zh-cn','kanban-editColumn','',''),(313,'priv','zh-tw','kanban-editColumn','',''),(313,'manager','zh-cn','','浏览研发需求',''),(314,'priv','de','kanban-setWIP','',''),(314,'priv','en','kanban-setWIP','',''),(314,'priv','fr','kanban-setWIP','',''),(314,'priv','zh-cn','kanban-setWIP','',''),(314,'priv','zh-tw','kanban-setWIP','',''),(314,'manager','zh-cn','','检查质量保证计划',''),(315,'priv','de','kanban-sortColumn','',''),(315,'priv','en','kanban-sortColumn','',''),(315,'priv','fr','kanban-sortColumn','',''),(315,'priv','zh-cn','kanban-sortColumn','',''),(315,'priv','zh-tw','kanban-sortColumn','',''),(315,'manager','zh-cn','','评审基线评审',''),(316,'priv','de','kanban-deleteColumn','',''),(316,'priv','en','kanban-deleteColumn','',''),(316,'priv','fr','kanban-deleteColumn','',''),(316,'priv','zh-cn','kanban-deleteColumn','',''),(316,'priv','zh-tw','kanban-deleteColumn','',''),(316,'manager','zh-cn','','审计基线评审',''),(317,'priv','de','kanban-createCard','',''),(317,'priv','en','kanban-createCard','',''),(317,'priv','fr','kanban-createCard','',''),(317,'priv','zh-cn','kanban-createCard','',''),(317,'priv','zh-tw','kanban-createCard','',''),(317,'manager','zh-cn','','管理维度',''),(318,'priv','de','kanban-editCard','',''),(318,'priv','en','kanban-editCard','',''),(318,'priv','fr','kanban-editCard','',''),(318,'priv','zh-cn','kanban-editCard','',''),(318,'priv','zh-tw','kanban-editCard','',''),(318,'manager','zh-cn','','浏览大屏',''),(319,'priv','de','kanban-viewCard','',''),(319,'priv','en','kanban-viewCard','',''),(319,'priv','fr','kanban-viewCard','',''),(319,'priv','zh-cn','kanban-viewCard','',''),(319,'priv','zh-tw','kanban-viewCard','',''),(319,'manager','zh-cn','','创建维护大屏',''),(320,'priv','de','kanban-sortCard','',''),(320,'priv','en','kanban-sortCard','',''),(320,'priv','fr','kanban-sortCard','',''),(320,'priv','zh-cn','kanban-sortCard','',''),(320,'priv','zh-tw','kanban-sortCard','',''),(320,'manager','zh-cn','','删除大屏',''),(321,'priv','de','kanban-deleteCard','',''),(321,'priv','en','kanban-deleteCard','',''),(321,'priv','fr','kanban-deleteCard','',''),(321,'priv','zh-cn','kanban-deleteCard','',''),(321,'priv','zh-tw','kanban-deleteCard','',''),(321,'manager','zh-cn','','数据权限',''),(322,'priv','de','kanban-assigntoCard','',''),(322,'priv','en','kanban-assigntoCard','',''),(322,'priv','fr','kanban-assigntoCard','',''),(322,'priv','zh-cn','kanban-assigntoCard','',''),(322,'priv','zh-tw','kanban-assigntoCard','',''),(322,'manager','zh-cn','','浏览透视表',''),(323,'priv','de','kanban-moveCard','',''),(323,'priv','en','kanban-moveCard','',''),(323,'priv','fr','kanban-moveCard','',''),(323,'priv','zh-cn','kanban-moveCard','',''),(323,'priv','zh-tw','kanban-moveCard','',''),(323,'manager','zh-cn','','设计透视表',''),(324,'priv','de','kanban-setCardColor','',''),(324,'priv','en','kanban-setCardColor','',''),(324,'priv','fr','kanban-setCardColor','',''),(324,'priv','zh-cn','kanban-setCardColor','',''),(324,'priv','zh-tw','kanban-setCardColor','',''),(324,'manager','zh-cn','','导出透视表',''),(325,'manager','zh-cn','','数据权限',''),(326,'priv','de','kanban-viewArchivedColumn','',''),(326,'priv','en','kanban-viewArchivedColumn','',''),(326,'priv','fr','kanban-viewArchivedColumn','',''),(326,'priv','zh-cn','kanban-viewArchivedColumn','',''),(326,'priv','zh-tw','kanban-viewArchivedColumn','',''),(326,'manager','zh-cn','','浏览图表',''),(327,'priv','de','kanban-batchCreateCard','',''),(327,'priv','en','kanban-batchCreateCard','',''),(327,'priv','fr','kanban-batchCreateCard','',''),(327,'priv','zh-cn','kanban-batchCreateCard','',''),(327,'priv','zh-tw','kanban-batchCreateCard','',''),(327,'manager','zh-cn','','设计图表',''),(328,'priv','de','kanban-activateSpace','',''),(328,'priv','en','kanban-activateSpace','',''),(328,'priv','fr','kanban-activateSpace','',''),(328,'priv','zh-cn','kanban-activateSpace','',''),(328,'priv','zh-tw','kanban-activateSpace','',''),(328,'manager','zh-cn','','导出图表',''),(329,'priv','de','kanban-setting','',''),(329,'priv','en','kanban-setting','',''),(329,'priv','fr','kanban-setting','',''),(329,'priv','zh-cn','kanban-setting','',''),(329,'priv','zh-tw','kanban-setting','',''),(329,'manager','zh-cn','','浏览数据表',''),(330,'priv','de','kanban-activate','',''),(330,'priv','en','kanban-activate','',''),(330,'priv','fr','kanban-activate','',''),(330,'priv','zh-cn','kanban-activate','',''),(330,'priv','zh-tw','kanban-activate','',''),(330,'manager','zh-cn','','创建维护数据表',''),(331,'priv','de','kanban-editLaneColor','',''),(331,'priv','en','kanban-editLaneColor','',''),(331,'priv','fr','kanban-editLaneColor','',''),(331,'priv','zh-cn','kanban-editLaneColor','',''),(331,'priv','zh-tw','kanban-editLaneColor','',''),(331,'manager','zh-cn','','删除数据表',''),(332,'priv','de','kanban-editLaneName','',''),(332,'priv','en','kanban-editLaneName','',''),(332,'priv','fr','kanban-editLaneName','',''),(332,'priv','zh-cn','kanban-editLaneName','',''),(332,'priv','zh-tw','kanban-editLaneName','',''),(333,'priv','de','kanban-splitColumn','',''),(333,'priv','en','kanban-splitColumn','',''),(333,'priv','fr','kanban-splitColumn','',''),(333,'priv','zh-cn','kanban-splitColumn','',''),(333,'priv','zh-tw','kanban-splitColumn','',''),(333,'manager','zh-cn','','浏览文档',''),(334,'priv','de','kanban-archiveColumn','',''),(334,'priv','en','kanban-archiveColumn','',''),(334,'priv','fr','kanban-archiveColumn','',''),(334,'priv','zh-cn','kanban-archiveColumn','',''),(334,'priv','zh-tw','kanban-archiveColumn','',''),(334,'manager','zh-cn','','创建与维护文档',''),(335,'priv','de','kanban-restoreColumn','',''),(335,'priv','en','kanban-restoreColumn','',''),(335,'priv','fr','kanban-restoreColumn','',''),(335,'priv','zh-cn','kanban-restoreColumn','',''),(335,'priv','zh-tw','kanban-restoreColumn','',''),(335,'manager','zh-cn','','删除文档',''),(336,'priv','de','kanban-archiveCard','',''),(336,'priv','en','kanban-archiveCard','',''),(336,'priv','fr','kanban-archiveCard','',''),(336,'priv','zh-cn','kanban-archiveCard','',''),(336,'priv','zh-tw','kanban-archiveCard','',''),(336,'manager','zh-cn','','导出文档',''),(337,'priv','de','kanban-viewArchivedCard','',''),(337,'priv','en','kanban-viewArchivedCard','',''),(337,'priv','fr','kanban-viewArchivedCard','',''),(337,'priv','zh-cn','kanban-viewArchivedCard','',''),(337,'priv','zh-tw','kanban-viewArchivedCard','',''),(338,'priv','de','kanban-restoreCard','',''),(338,'priv','en','kanban-restoreCard','',''),(338,'priv','fr','kanban-restoreCard','',''),(338,'priv','zh-cn','kanban-restoreCard','',''),(338,'priv','zh-tw','kanban-restoreCard','',''),(338,'manager','zh-cn','','浏览接口空间',''),(339,'priv','de','programplan-create','',''),(339,'priv','en','programplan-create','',''),(339,'priv','fr','programplan-create','',''),(339,'priv','zh-cn','programplan-create','',''),(339,'priv','zh-tw','programplan-create','',''),(339,'manager','zh-cn','','创建维护接口',''),(340,'priv','de','programplan-edit','',''),(340,'priv','en','programplan-edit','',''),(340,'priv','fr','programplan-edit','',''),(340,'priv','zh-cn','programplan-edit','',''),(340,'priv','zh-tw','programplan-edit','',''),(340,'manager','zh-cn','','导出接口',''),(341,'priv','de','programplan-gantt','',''),(341,'priv','en','programplan-gantt','',''),(341,'priv','fr','programplan-gantt','',''),(341,'priv','zh-cn','programplan-gantt','',''),(341,'priv','zh-tw','programplan-gantt','',''),(341,'manager','zh-cn','','删除接口',''),(342,'priv','de','programplan-ganttEdit','',''),(342,'priv','en','programplan-ganttEdit','',''),(342,'priv','fr','programplan-ganttEdit','',''),(342,'priv','zh-cn','programplan-ganttEdit','',''),(342,'priv','zh-tw','programplan-ganttEdit','',''),(342,'manager','zh-cn','','接口调用',''),(343,'priv','de','task-create','',''),(343,'priv','en','task-create','',''),(343,'priv','fr','task-create','',''),(343,'priv','zh-cn','task-create','',''),(343,'priv','zh-tw','task-create','',''),(344,'priv','de','task-batchCreate','',''),(344,'priv','en','task-batchCreate','',''),(344,'priv','fr','task-batchCreate','',''),(344,'priv','zh-cn','task-batchCreate','',''),(344,'priv','zh-tw','task-batchCreate','',''),(344,'manager','zh-cn','','维护场景',''),(345,'priv','de','task-batchEdit','',''),(345,'priv','en','task-batchEdit','',''),(345,'priv','fr','task-batchEdit','',''),(345,'priv','zh-cn','task-batchEdit','',''),(345,'priv','zh-tw','task-batchEdit','',''),(345,'manager','zh-cn','','树状图',''),(346,'priv','de','task-edit','',''),(346,'priv','en','task-edit','',''),(346,'priv','fr','task-edit','',''),(346,'priv','zh-cn','task-edit','',''),(346,'priv','zh-tw','task-edit','',''),(346,'manager','zh-cn','','工时明细表',''),(347,'priv','de','task-assignAction','',''),(347,'priv','en','task-assignAction','',''),(347,'priv','fr','task-assignAction','',''),(347,'priv','zh-cn','task-assignAction','',''),(347,'priv','zh-tw','task-assignAction','',''),(347,'manager','zh-cn','','任务日历',''),(348,'priv','de','task-batchAssignTo','',''),(348,'priv','en','task-batchAssignTo','',''),(348,'priv','fr','task-batchAssignTo','',''),(348,'priv','zh-cn','task-batchAssignTo','',''),(348,'priv','zh-tw','task-batchAssignTo','',''),(348,'manager','de','index','',''),(348,'manager','en','index','',''),(348,'manager','fr','index','',''),(348,'manager','zh-cn','index','',''),(348,'manager','zh-tw','index','',''),(349,'priv','de','task-startAction','',''),(349,'priv','en','task-startAction','',''),(349,'priv','fr','task-startAction','',''),(349,'priv','zh-cn','task-startAction','',''),(349,'priv','zh-tw','task-startAction','',''),(349,'manager','de','index','',''),(349,'manager','en','index','',''),(349,'manager','fr','index','',''),(349,'manager','zh-cn','index','',''),(349,'manager','zh-tw','index','',''),(350,'priv','de','task-pauseAction','',''),(350,'priv','en','task-pauseAction','',''),(350,'priv','fr','task-pauseAction','',''),(350,'priv','zh-cn','task-pauseAction','',''),(350,'priv','zh-tw','task-pauseAction','',''),(350,'manager','de','my','',''),(350,'manager','en','my','',''),(350,'manager','fr','my','',''),(350,'manager','zh-cn','my','',''),(350,'manager','zh-tw','my','',''),(351,'priv','de','task-restartAction','',''),(351,'priv','en','task-restartAction','',''),(351,'priv','fr','task-restartAction','',''),(351,'priv','zh-cn','task-restartAction','',''),(351,'priv','zh-tw','task-restartAction','',''),(351,'manager','de','my','',''),(351,'manager','en','my','',''),(351,'manager','fr','my','',''),(351,'manager','zh-cn','my','',''),(351,'manager','zh-tw','my','',''),(352,'priv','de','task-finishAction','',''),(352,'priv','en','task-finishAction','',''),(352,'priv','fr','task-finishAction','',''),(352,'priv','zh-cn','task-finishAction','',''),(352,'priv','zh-tw','task-finishAction','',''),(352,'manager','de','todo','',''),(352,'manager','en','todo','',''),(352,'manager','fr','todo','',''),(352,'manager','zh-cn','todo','',''),(352,'manager','zh-tw','todo','',''),(353,'priv','de','task-cancelAction','',''),(353,'priv','en','task-cancelAction','',''),(353,'priv','fr','task-cancelAction','',''),(353,'priv','zh-cn','task-cancelAction','',''),(353,'priv','zh-tw','task-cancelAction','',''),(353,'manager','de','contact','',''),(353,'manager','en','contact','',''),(353,'manager','fr','contact','',''),(353,'manager','zh-cn','contact','',''),(353,'manager','zh-tw','contact','',''),(354,'priv','de','task-closeAction','',''),(354,'priv','en','task-closeAction','',''),(354,'priv','fr','task-closeAction','',''),(354,'priv','zh-cn','task-closeAction','',''),(354,'priv','zh-tw','task-closeAction','',''),(354,'manager','de','personalsettings','',''),(354,'manager','en','personalsettings','',''),(354,'manager','fr','personalsettings','',''),(354,'manager','zh-cn','personalsettings','',''),(354,'manager','zh-tw','personalsettings','',''),(355,'priv','de','task-batchClose','',''),(355,'priv','en','task-batchClose','',''),(355,'priv','fr','task-batchClose','',''),(355,'priv','zh-cn','task-batchClose','',''),(355,'priv','zh-tw','task-batchClose','',''),(355,'manager','de','effort','',''),(355,'manager','en','effort','',''),(355,'manager','fr','effort','',''),(355,'manager','zh-cn','effort','',''),(355,'manager','zh-tw','effort','',''),(356,'priv','de','task-activateAction','',''),(356,'priv','en','task-activateAction','',''),(356,'priv','fr','task-activateAction','',''),(356,'priv','zh-cn','task-activateAction','',''),(356,'priv','zh-tw','task-activateAction','',''),(356,'manager','de','program','',''),(356,'manager','en','program','',''),(356,'manager','fr','program','',''),(356,'manager','zh-cn','program','',''),(356,'manager','zh-tw','program','',''),(357,'priv','de','task-deleteAction','',''),(357,'priv','en','task-deleteAction','',''),(357,'priv','fr','task-deleteAction','',''),(357,'priv','zh-cn','task-deleteAction','',''),(357,'priv','zh-tw','task-deleteAction','',''),(357,'manager','de','program','',''),(357,'manager','en','program','',''),(357,'manager','fr','program','',''),(357,'manager','zh-cn','program','',''),(357,'manager','zh-tw','program','',''),(358,'priv','de','task-view','',''),(358,'priv','en','task-view','',''),(358,'priv','fr','task-view','',''),(358,'priv','zh-cn','task-view','',''),(358,'priv','zh-tw','task-view','',''),(358,'manager','de','personnel','',''),(358,'manager','en','personnel','',''),(358,'manager','fr','personnel','',''),(358,'manager','zh-cn','personnel','',''),(358,'manager','zh-tw','personnel','',''),(359,'priv','de','task-exportAction','',''),(359,'priv','en','task-exportAction','',''),(359,'priv','fr','task-exportAction','',''),(359,'priv','zh-cn','task-exportAction','',''),(359,'priv','zh-tw','task-exportAction','',''),(359,'manager','de','programstakeholder','',''),(359,'manager','en','programstakeholder','',''),(359,'manager','fr','programstakeholder','',''),(359,'manager','zh-cn','programstakeholder','',''),(359,'manager','zh-tw','programstakeholder','',''),(360,'priv','de','task-confirmStoryChange','',''),(360,'priv','en','task-confirmStoryChange','',''),(360,'priv','fr','task-confirmStoryChange','',''),(360,'priv','zh-cn','task-confirmStoryChange','',''),(360,'priv','zh-tw','task-confirmStoryChange','',''),(360,'manager','de','product','',''),(360,'manager','en','product','',''),(360,'manager','fr','product','',''),(360,'manager','zh-cn','product','',''),(360,'manager','zh-tw','product','',''),(361,'priv','de','task-recordEstimateAction','',''),(361,'priv','en','task-recordEstimateAction','',''),(361,'priv','fr','task-recordEstimateAction','',''),(361,'priv','zh-cn','task-recordEstimateAction','',''),(361,'priv','zh-tw','task-recordEstimateAction','',''),(361,'manager','de','product','',''),(361,'manager','en','product','',''),(361,'manager','fr','product','',''),(361,'manager','zh-cn','product','',''),(361,'manager','zh-tw','product','',''),(362,'priv','de','task-editEstimate','',''),(362,'priv','en','task-editEstimate','',''),(362,'priv','fr','task-editEstimate','',''),(362,'priv','zh-cn','task-editEstimate','',''),(362,'priv','zh-tw','task-editEstimate','',''),(362,'manager','de','story','',''),(362,'manager','en','story','',''),(362,'manager','fr','story','',''),(362,'manager','zh-cn','story','',''),(362,'manager','zh-tw','story','',''),(363,'priv','de','task-deleteEstimate','',''),(363,'priv','en','task-deleteEstimate','',''),(363,'priv','fr','task-deleteEstimate','',''),(363,'priv','zh-cn','task-deleteEstimate','',''),(363,'priv','zh-tw','task-deleteEstimate','',''),(363,'manager','de','requirement','',''),(363,'manager','en','requirement','',''),(363,'manager','fr','requirement','',''),(363,'manager','zh-cn','requirement','',''),(363,'manager','zh-tw','requirement','',''),(364,'priv','de','task-reportChart','',''),(364,'priv','en','task-reportChart','',''),(364,'priv','fr','task-reportChart','',''),(364,'priv','zh-cn','task-reportChart','',''),(364,'priv','zh-tw','task-reportChart','',''),(364,'manager','de','productplan','',''),(364,'manager','en','productplan','',''),(364,'manager','fr','productplan','',''),(364,'manager','zh-cn','productplan','',''),(364,'manager','zh-tw','productplan','',''),(365,'priv','de','task-batchChangeModule','',''),(365,'priv','en','task-batchChangeModule','',''),(365,'priv','fr','task-batchChangeModule','',''),(365,'priv','zh-cn','task-batchChangeModule','',''),(365,'priv','zh-tw','task-batchChangeModule','',''),(365,'manager','de','release','',''),(365,'manager','en','release','',''),(365,'manager','fr','release','',''),(365,'manager','zh-cn','release','',''),(365,'manager','zh-tw','release','',''),(366,'priv','de','task-batchCancel','',''),(366,'priv','en','task-batchCancel','',''),(366,'priv','fr','task-batchCancel','',''),(366,'priv','zh-cn','task-batchCancel','',''),(366,'priv','zh-tw','task-batchCancel','',''),(366,'manager','de','branch','',''),(366,'manager','en','branch','',''),(366,'manager','fr','branch','',''),(366,'manager','zh-cn','branch','',''),(366,'manager','zh-tw','branch','',''),(367,'priv','de','task-import','',''),(367,'priv','en','task-import','',''),(367,'priv','fr','task-import','',''),(367,'priv','zh-cn','task-import','',''),(367,'priv','zh-tw','task-import','',''),(367,'manager','de','productsettings','',''),(367,'manager','en','productsettings','',''),(367,'manager','fr','productsettings','',''),(367,'manager','zh-cn','productsettings','',''),(367,'manager','zh-tw','productsettings','',''),(368,'priv','de','task-exportTemplate','',''),(368,'priv','en','task-exportTemplate','',''),(368,'priv','fr','task-exportTemplate','',''),(368,'priv','zh-cn','task-exportTemplate','',''),(368,'priv','zh-tw','task-exportTemplate','',''),(368,'manager','de','project','',''),(368,'manager','en','project','',''),(368,'manager','fr','project','',''),(368,'manager','zh-cn','project','',''),(368,'manager','zh-tw','project','',''),(369,'priv','de','task-confirmDesignChange','',''),(369,'priv','en','task-confirmDesignChange','',''),(369,'priv','fr','task-confirmDesignChange','',''),(369,'priv','zh-cn','task-confirmDesignChange','',''),(369,'priv','zh-tw','task-confirmDesignChange','',''),(369,'manager','de','project','',''),(369,'manager','en','project','',''),(369,'manager','fr','project','',''),(369,'manager','zh-cn','project','',''),(369,'manager','zh-tw','project','',''),(370,'priv','de','build-create','',''),(370,'priv','en','build-create','',''),(370,'priv','fr','build-create','',''),(370,'priv','zh-cn','build-create','',''),(370,'priv','zh-tw','build-create','',''),(370,'manager','de','projectplan','',''),(370,'manager','en','projectplan','',''),(370,'manager','fr','projectplan','',''),(370,'manager','zh-cn','projectplan','',''),(370,'manager','zh-tw','projectplan','',''),(371,'priv','de','build-edit','',''),(371,'priv','en','build-edit','',''),(371,'priv','fr','build-edit','',''),(371,'priv','zh-cn','build-edit','',''),(371,'priv','zh-tw','build-edit','',''),(371,'manager','de','projectstory','',''),(371,'manager','en','projectstory','',''),(371,'manager','fr','projectstory','',''),(371,'manager','zh-cn','projectstory','',''),(371,'manager','zh-tw','projectstory','',''),(372,'priv','de','build-delete','',''),(372,'priv','en','build-delete','',''),(372,'priv','fr','build-delete','',''),(372,'priv','zh-cn','build-delete','',''),(372,'priv','zh-tw','build-delete','',''),(372,'manager','de','programplan','',''),(372,'manager','en','programplan','',''),(372,'manager','fr','programplan','',''),(372,'manager','zh-cn','programplan','',''),(372,'manager','zh-tw','programplan','',''),(373,'priv','de','build-view','',''),(373,'priv','en','build-view','',''),(373,'priv','fr','build-view','',''),(373,'priv','zh-cn','build-view','',''),(373,'priv','zh-tw','build-view','',''),(373,'manager','de','design','',''),(373,'manager','en','design','',''),(373,'manager','fr','design','',''),(373,'manager','zh-cn','design','',''),(373,'manager','zh-tw','design','',''),(374,'priv','de','build-linkStory','',''),(374,'priv','en','build-linkStory','',''),(374,'priv','fr','build-linkStory','',''),(374,'priv','zh-cn','build-linkStory','',''),(374,'priv','zh-tw','build-linkStory','',''),(374,'manager','de','milestone','',''),(374,'manager','en','milestone','',''),(374,'manager','fr','milestone','',''),(374,'manager','zh-cn','milestone','',''),(374,'manager','zh-tw','milestone','',''),(375,'priv','de','build-unlinkStory','',''),(375,'priv','en','build-unlinkStory','',''),(375,'priv','fr','build-unlinkStory','',''),(375,'priv','zh-cn','build-unlinkStory','',''),(375,'priv','zh-tw','build-unlinkStory','',''),(375,'manager','de','issue','',''),(375,'manager','en','issue','',''),(375,'manager','fr','issue','',''),(375,'manager','zh-cn','issue','',''),(375,'manager','zh-tw','issue','',''),(376,'priv','de','build-batchUnlinkStory','',''),(376,'priv','en','build-batchUnlinkStory','',''),(376,'priv','fr','build-batchUnlinkStory','',''),(376,'priv','zh-cn','build-batchUnlinkStory','',''),(376,'priv','zh-tw','build-batchUnlinkStory','',''),(376,'manager','de','risk','',''),(376,'manager','en','risk','',''),(376,'manager','fr','risk','',''),(376,'manager','zh-cn','risk','',''),(376,'manager','zh-tw','risk','',''),(377,'priv','de','build-linkBug','',''),(377,'priv','en','build-linkBug','',''),(377,'priv','fr','build-linkBug','',''),(377,'priv','zh-cn','build-linkBug','',''),(377,'priv','zh-tw','build-linkBug','',''),(377,'manager','de','budget','',''),(377,'manager','en','budget','',''),(377,'manager','fr','budget','',''),(377,'manager','zh-cn','budget','',''),(377,'manager','zh-tw','budget','',''),(378,'priv','de','build-unlinkBug','',''),(378,'priv','en','build-unlinkBug','',''),(378,'priv','fr','build-unlinkBug','',''),(378,'priv','zh-cn','build-unlinkBug','',''),(378,'priv','zh-tw','build-unlinkBug','',''),(378,'manager','de','workestimation','',''),(378,'manager','en','workestimation','',''),(378,'manager','fr','workestimation','',''),(378,'manager','zh-cn','workestimation','',''),(378,'manager','zh-tw','workestimation','',''),(379,'priv','de','build-batchUnlinkBug','',''),(379,'priv','en','build-batchUnlinkBug','',''),(379,'priv','fr','build-batchUnlinkBug','',''),(379,'priv','zh-cn','build-batchUnlinkBug','',''),(379,'priv','zh-tw','build-batchUnlinkBug','',''),(379,'manager','de','durationestimation','',''),(379,'manager','en','durationestimation','',''),(379,'manager','fr','durationestimation','',''),(379,'manager','zh-cn','durationestimation','',''),(379,'manager','zh-tw','durationestimation','',''),(380,'priv','de','design-browse','',''),(380,'priv','en','design-browse','',''),(380,'priv','fr','design-browse','',''),(380,'priv','zh-cn','design-browse','',''),(380,'priv','zh-tw','design-browse','',''),(380,'manager','de','weekly','',''),(380,'manager','en','weekly','',''),(380,'manager','fr','weekly','',''),(380,'manager','zh-cn','weekly','',''),(380,'manager','zh-tw','weekly','',''),(381,'priv','de','design-view','',''),(381,'priv','en','design-view','',''),(381,'priv','fr','design-view','',''),(381,'priv','zh-cn','design-view','',''),(381,'priv','zh-tw','design-view','',''),(381,'manager','de','opportunity','',''),(381,'manager','en','opportunity','',''),(381,'manager','fr','opportunity','',''),(381,'manager','zh-cn','opportunity','',''),(381,'manager','zh-tw','opportunity','',''),(382,'priv','de','design-create','',''),(382,'priv','en','design-create','',''),(382,'priv','fr','design-create','',''),(382,'priv','zh-cn','design-create','',''),(382,'priv','zh-tw','design-create','',''),(382,'manager','de','trainplan','',''),(382,'manager','en','trainplan','',''),(382,'manager','fr','trainplan','',''),(382,'manager','zh-cn','trainplan','',''),(382,'manager','zh-tw','trainplan','',''),(383,'priv','de','design-batchCreate','',''),(383,'priv','en','design-batchCreate','',''),(383,'priv','fr','design-batchCreate','',''),(383,'priv','zh-cn','design-batchCreate','',''),(383,'priv','zh-tw','design-batchCreate','',''),(383,'manager','de','nc','',''),(383,'manager','en','nc','',''),(383,'manager','fr','nc','',''),(383,'manager','zh-cn','nc','',''),(383,'manager','zh-tw','nc','',''),(384,'priv','de','design-edit','',''),(384,'priv','en','design-edit','',''),(384,'priv','fr','design-edit','',''),(384,'priv','zh-cn','design-edit','',''),(384,'priv','zh-tw','design-edit','',''),(384,'manager','de','gapanalysis','',''),(384,'manager','en','gapanalysis','',''),(384,'manager','fr','gapanalysis','',''),(384,'manager','zh-cn','gapanalysis','',''),(384,'manager','zh-tw','gapanalysis','',''),(385,'priv','de','design-assignTo','',''),(385,'priv','en','design-assignTo','',''),(385,'priv','fr','design-assignTo','',''),(385,'priv','zh-cn','design-assignTo','',''),(385,'priv','zh-tw','design-assignTo','',''),(385,'manager','de','researchplan','',''),(385,'manager','en','researchplan','',''),(385,'manager','fr','researchplan','',''),(385,'manager','zh-cn','researchplan','',''),(385,'manager','zh-tw','researchplan','',''),(386,'priv','de','design-delete','',''),(386,'priv','en','design-delete','',''),(386,'priv','fr','design-delete','',''),(386,'priv','zh-cn','design-delete','',''),(386,'priv','zh-tw','design-delete','',''),(386,'manager','de','researchreport','',''),(386,'manager','en','researchreport','',''),(386,'manager','fr','researchreport','',''),(386,'manager','zh-cn','researchreport','',''),(386,'manager','zh-tw','researchreport','',''),(387,'priv','de','design-linkCommit','',''),(387,'priv','en','design-linkCommit','',''),(387,'priv','fr','design-linkCommit','',''),(387,'priv','zh-cn','design-linkCommit','',''),(387,'priv','zh-tw','design-linkCommit','',''),(387,'manager','de','meeting','',''),(387,'manager','en','meeting','',''),(387,'manager','fr','meeting','',''),(387,'manager','zh-cn','meeting','',''),(387,'manager','zh-tw','meeting','',''),(388,'priv','de','design-viewCommit','',''),(388,'priv','en','design-viewCommit','',''),(388,'priv','fr','design-viewCommit','',''),(388,'priv','zh-cn','design-viewCommit','',''),(388,'priv','zh-tw','design-viewCommit','',''),(388,'manager','de','projectbuild','',''),(388,'manager','en','projectbuild','',''),(388,'manager','fr','projectbuild','',''),(388,'manager','zh-cn','projectbuild','',''),(388,'manager','zh-tw','projectbuild','',''),(389,'priv','de','design-unlinkCommit','',''),(389,'priv','en','design-unlinkCommit','',''),(389,'priv','fr','design-unlinkCommit','',''),(389,'priv','zh-cn','design-unlinkCommit','',''),(389,'priv','zh-tw','design-unlinkCommit','',''),(389,'manager','de','projectrelease','',''),(389,'manager','en','projectrelease','',''),(389,'manager','fr','projectrelease','',''),(389,'manager','zh-cn','projectrelease','',''),(389,'manager','zh-tw','projectrelease','',''),(390,'priv','de','design-revision','',''),(390,'priv','en','design-revision','',''),(390,'priv','fr','design-revision','',''),(390,'priv','zh-cn','design-revision','',''),(390,'priv','zh-tw','design-revision','',''),(390,'manager','de','stakeholder','',''),(390,'manager','en','stakeholder','',''),(390,'manager','fr','stakeholder','',''),(390,'manager','zh-cn','stakeholder','',''),(390,'manager','zh-tw','stakeholder','',''),(391,'priv','de','design-submit','',''),(391,'priv','en','design-submit','',''),(391,'priv','fr','design-submit','',''),(391,'priv','zh-cn','design-submit','',''),(391,'priv','zh-tw','design-submit','',''),(391,'manager','de','projectsettings','',''),(391,'manager','en','projectsettings','',''),(391,'manager','fr','projectsettings','',''),(391,'manager','zh-cn','projectsettings','',''),(391,'manager','zh-tw','projectsettings','',''),(392,'priv','de','design-setType','',''),(392,'priv','en','design-setType','',''),(392,'priv','fr','design-setType','',''),(392,'priv','zh-cn','design-setType','',''),(392,'priv','zh-tw','design-setType','',''),(392,'manager','de','projectreview','',''),(392,'manager','en','projectreview','',''),(392,'manager','fr','projectreview','',''),(392,'manager','zh-cn','projectreview','',''),(392,'manager','zh-tw','projectreview','',''),(393,'priv','de','design-setPlusType','',''),(393,'priv','en','design-setPlusType','',''),(393,'priv','fr','design-setPlusType','',''),(393,'priv','zh-cn','design-setPlusType','',''),(393,'priv','zh-tw','design-setPlusType','',''),(393,'manager','de','projecttrack','',''),(393,'manager','en','projecttrack','',''),(393,'manager','fr','projecttrack','',''),(393,'manager','zh-cn','projecttrack','',''),(393,'manager','zh-tw','projecttrack','',''),(394,'priv','de','qa-indexAction','',''),(394,'priv','en','qa-indexAction','',''),(394,'priv','fr','qa-indexAction','',''),(394,'priv','zh-cn','qa-indexAction','',''),(394,'priv','zh-tw','qa-indexAction','',''),(394,'manager','de','projectqa','',''),(394,'manager','en','projectqa','',''),(394,'manager','fr','projectqa','',''),(394,'manager','zh-cn','projectqa','',''),(394,'manager','zh-tw','projectqa','',''),(395,'priv','de','bug-browse','',''),(395,'priv','en','bug-browse','',''),(395,'priv','fr','bug-browse','',''),(395,'priv','zh-cn','bug-browse','',''),(395,'priv','zh-tw','bug-browse','',''),(395,'manager','de','pssp','',''),(395,'manager','en','pssp','',''),(395,'manager','fr','pssp','',''),(395,'manager','zh-cn','pssp','',''),(395,'manager','zh-tw','pssp','',''),(396,'priv','de','bug-create','',''),(396,'priv','en','bug-create','',''),(396,'priv','fr','bug-create','',''),(396,'priv','zh-cn','bug-create','',''),(396,'priv','zh-tw','bug-create','',''),(396,'manager','de','cm','',''),(396,'manager','en','cm','',''),(396,'manager','fr','cm','',''),(396,'manager','zh-cn','cm','',''),(396,'manager','zh-tw','cm','',''),(397,'priv','de','bug-batchCreate','',''),(397,'priv','en','bug-batchCreate','',''),(397,'priv','fr','bug-batchCreate','',''),(397,'priv','zh-cn','bug-batchCreate','',''),(397,'priv','zh-tw','bug-batchCreate','',''),(397,'manager','de','auditplan','',''),(397,'manager','en','auditplan','',''),(397,'manager','fr','auditplan','',''),(397,'manager','zh-cn','auditplan','',''),(397,'manager','zh-tw','auditplan','',''),(398,'priv','de','bug-batchEdit','',''),(398,'priv','en','bug-batchEdit','',''),(398,'priv','fr','bug-batchEdit','',''),(398,'priv','zh-cn','bug-batchEdit','',''),(398,'priv','zh-tw','bug-batchEdit','',''),(398,'manager','de','reviewissue','',''),(398,'manager','en','reviewissue','',''),(398,'manager','fr','reviewissue','',''),(398,'manager','zh-cn','reviewissue','',''),(398,'manager','zh-tw','reviewissue','',''),(399,'priv','de','bug-confirmAction','',''),(399,'priv','en','bug-confirmAction','',''),(399,'priv','fr','bug-confirmAction','',''),(399,'priv','zh-cn','bug-confirmAction','',''),(399,'priv','zh-tw','bug-confirmAction','',''),(399,'manager','de','review','',''),(399,'manager','en','review','',''),(399,'manager','fr','review','',''),(399,'manager','zh-cn','review','',''),(399,'manager','zh-tw','review','',''),(400,'priv','de','bug-batchConfirm','',''),(400,'priv','en','bug-batchConfirm','',''),(400,'priv','fr','bug-batchConfirm','',''),(400,'priv','zh-cn','bug-batchConfirm','',''),(400,'priv','zh-tw','bug-batchConfirm','',''),(400,'manager','de','measrecord','',''),(400,'manager','en','measrecord','',''),(400,'manager','fr','measrecord','',''),(400,'manager','zh-cn','measrecord','',''),(400,'manager','zh-tw','measrecord','',''),(401,'priv','de','bug-view','',''),(401,'priv','en','bug-view','',''),(401,'priv','fr','bug-view','',''),(401,'priv','zh-cn','bug-view','',''),(401,'priv','zh-tw','bug-view','',''),(401,'manager','de','projectreport','',''),(401,'manager','en','projectreport','',''),(401,'manager','fr','projectreport','',''),(401,'manager','zh-cn','projectreport','',''),(401,'manager','zh-tw','projectreport','',''),(402,'priv','de','bug-edit','',''),(402,'priv','en','bug-edit','',''),(402,'priv','fr','bug-edit','',''),(402,'priv','zh-cn','bug-edit','',''),(402,'priv','zh-tw','bug-edit','',''),(402,'manager','de','projectresearch','',''),(402,'manager','en','projectresearch','',''),(402,'manager','fr','projectresearch','',''),(402,'manager','zh-cn','projectresearch','',''),(402,'manager','zh-tw','projectresearch','',''),(403,'priv','de','bug-assignAction','',''),(403,'priv','en','bug-assignAction','',''),(403,'priv','fr','bug-assignAction','',''),(403,'priv','zh-cn','bug-assignAction','',''),(403,'priv','zh-tw','bug-assignAction','',''),(403,'manager','de','projectauditplan','',''),(403,'manager','en','projectauditplan','',''),(403,'manager','fr','projectauditplan','',''),(403,'manager','zh-cn','projectauditplan','',''),(403,'manager','zh-tw','projectauditplan','',''),(404,'priv','de','bug-batchAssignTo','',''),(404,'priv','en','bug-batchAssignTo','',''),(404,'priv','fr','bug-batchAssignTo','',''),(404,'priv','zh-cn','bug-batchAssignTo','',''),(404,'priv','zh-tw','bug-batchAssignTo','',''),(404,'manager','de','projectgapanalysis','',''),(404,'manager','en','projectgapanalysis','',''),(404,'manager','fr','projectgapanalysis','',''),(404,'manager','zh-cn','projectgapanalysis','',''),(404,'manager','zh-tw','projectgapanalysis','',''),(405,'priv','de','bug-resolveAction','',''),(405,'priv','en','bug-resolveAction','',''),(405,'priv','fr','bug-resolveAction','',''),(405,'priv','zh-cn','bug-resolveAction','',''),(405,'priv','zh-tw','bug-resolveAction','',''),(405,'manager','de','execution','',''),(405,'manager','en','execution','',''),(405,'manager','fr','execution','',''),(405,'manager','zh-cn','execution','',''),(405,'manager','zh-tw','execution','',''),(406,'priv','de','bug-batchResolve','',''),(406,'priv','en','bug-batchResolve','',''),(406,'priv','fr','bug-batchResolve','',''),(406,'priv','zh-cn','bug-batchResolve','',''),(406,'priv','zh-tw','bug-batchResolve','',''),(406,'manager','de','execution','',''),(406,'manager','en','execution','',''),(406,'manager','fr','execution','',''),(406,'manager','zh-cn','execution','',''),(406,'manager','zh-tw','execution','',''),(407,'priv','de','bug-batchClose','',''),(407,'priv','en','bug-batchClose','',''),(407,'priv','fr','bug-batchClose','',''),(407,'priv','zh-cn','bug-batchClose','',''),(407,'priv','zh-tw','bug-batchClose','',''),(407,'manager','de','task','',''),(407,'manager','en','task','',''),(407,'manager','fr','task','',''),(407,'manager','zh-cn','task','',''),(407,'manager','zh-tw','task','',''),(408,'priv','de','bug-batchActivate','',''),(408,'priv','en','bug-batchActivate','',''),(408,'priv','fr','bug-batchActivate','',''),(408,'priv','zh-cn','bug-batchActivate','',''),(408,'priv','zh-tw','bug-batchActivate','',''),(408,'manager','de','build','',''),(408,'manager','en','build','',''),(408,'manager','fr','build','',''),(408,'manager','zh-cn','build','',''),(408,'manager','zh-tw','build','',''),(409,'priv','de','bug-activateAction','',''),(409,'priv','en','bug-activateAction','',''),(409,'priv','fr','bug-activateAction','',''),(409,'priv','zh-cn','bug-activateAction','',''),(409,'priv','zh-tw','bug-activateAction','',''),(409,'manager','de','executionview','',''),(409,'manager','en','executionview','',''),(409,'manager','fr','executionview','',''),(409,'manager','zh-cn','executionview','',''),(409,'manager','zh-tw','executionview','',''),(410,'priv','de','bug-closeAction','',''),(410,'priv','en','bug-closeAction','',''),(410,'priv','fr','bug-closeAction','',''),(410,'priv','zh-cn','bug-closeAction','',''),(410,'priv','zh-tw','bug-closeAction','',''),(410,'manager','de','executiongantt','',''),(410,'manager','en','executiongantt','',''),(410,'manager','fr','executiongantt','',''),(410,'manager','zh-cn','executiongantt','',''),(410,'manager','zh-tw','executiongantt','',''),(411,'priv','de','bug-reportAction','',''),(411,'priv','en','bug-reportAction','',''),(411,'priv','fr','bug-reportAction','',''),(411,'priv','zh-cn','bug-reportAction','',''),(411,'priv','zh-tw','bug-reportAction','',''),(411,'manager','de','executionkanban','',''),(411,'manager','en','executionkanban','',''),(411,'manager','fr','executionkanban','',''),(411,'manager','zh-cn','executionkanban','',''),(411,'manager','zh-tw','executionkanban','',''),(412,'priv','de','bug-exportAction','',''),(412,'priv','en','bug-exportAction','',''),(412,'priv','fr','bug-exportAction','',''),(412,'priv','zh-cn','bug-exportAction','',''),(412,'priv','zh-tw','bug-exportAction','',''),(412,'manager','de','executionburn','',''),(412,'manager','en','executionburn','',''),(412,'manager','fr','executionburn','',''),(412,'manager','zh-cn','executionburn','',''),(412,'manager','zh-tw','executionburn','',''),(413,'priv','de','bug-confirmStoryChange','',''),(413,'priv','en','bug-confirmStoryChange','',''),(413,'priv','fr','bug-confirmStoryChange','',''),(413,'priv','zh-cn','bug-confirmStoryChange','',''),(413,'priv','zh-tw','bug-confirmStoryChange','',''),(413,'manager','de','executioncfd','',''),(413,'manager','en','executioncfd','',''),(413,'manager','fr','executioncfd','',''),(413,'manager','zh-cn','executioncfd','',''),(413,'manager','zh-tw','executioncfd','',''),(414,'priv','de','bug-deleteAction','',''),(414,'priv','en','bug-deleteAction','',''),(414,'priv','fr','bug-deleteAction','',''),(414,'priv','zh-cn','bug-deleteAction','',''),(414,'priv','zh-tw','bug-deleteAction','',''),(414,'manager','de','executionstory','',''),(414,'manager','en','executionstory','',''),(414,'manager','fr','executionstory','',''),(414,'manager','zh-cn','executionstory','',''),(414,'manager','zh-tw','executionstory','',''),(415,'priv','de','bug-linkBugs','',''),(415,'priv','en','bug-linkBugs','',''),(415,'priv','fr','bug-linkBugs','',''),(415,'priv','zh-cn','bug-linkBugs','',''),(415,'priv','zh-tw','bug-linkBugs','',''),(415,'manager','de','executionqa','',''),(415,'manager','en','executionqa','',''),(415,'manager','fr','executionqa','',''),(415,'manager','zh-cn','executionqa','',''),(415,'manager','zh-tw','executionqa','',''),(416,'priv','de','bug-batchChangeModule','',''),(416,'priv','en','bug-batchChangeModule','',''),(416,'priv','fr','bug-batchChangeModule','',''),(416,'priv','zh-cn','bug-batchChangeModule','',''),(416,'priv','zh-tw','bug-batchChangeModule','',''),(416,'manager','de','executionsettings','',''),(416,'manager','en','executionsettings','',''),(416,'manager','fr','executionsettings','',''),(416,'manager','zh-cn','executionsettings','',''),(416,'manager','zh-tw','executionsettings','',''),(417,'priv','de','bug-batchChangeBranch','',''),(417,'priv','en','bug-batchChangeBranch','',''),(417,'priv','fr','bug-batchChangeBranch','',''),(417,'priv','zh-cn','bug-batchChangeBranch','',''),(417,'priv','zh-tw','bug-batchChangeBranch','',''),(417,'manager','de','kanban','',''),(417,'manager','en','kanban','',''),(417,'manager','fr','kanban','',''),(417,'manager','zh-cn','kanban','',''),(417,'manager','zh-tw','kanban','',''),(418,'priv','de','bug-batchChangePlan','',''),(418,'priv','en','bug-batchChangePlan','',''),(418,'priv','fr','bug-batchChangePlan','',''),(418,'priv','zh-cn','bug-batchChangePlan','',''),(418,'priv','zh-tw','bug-batchChangePlan','',''),(418,'manager','de','kanban','',''),(418,'manager','en','kanban','',''),(418,'manager','fr','kanban','',''),(418,'manager','zh-cn','kanban','',''),(418,'manager','zh-tw','kanban','',''),(419,'priv','de','bug-importCase','',''),(419,'priv','en','bug-importCase','',''),(419,'priv','fr','bug-importCase','',''),(419,'priv','zh-cn','bug-importCase','',''),(419,'priv','zh-tw','bug-importCase','',''),(419,'manager','de','managespace','',''),(419,'manager','en','managespace','',''),(419,'manager','fr','managespace','',''),(419,'manager','zh-cn','managespace','',''),(419,'manager','zh-tw','managespace','',''),(420,'priv','de','bug-exportTemplate','',''),(420,'priv','en','bug-exportTemplate','',''),(420,'priv','fr','bug-exportTemplate','',''),(420,'priv','zh-cn','bug-exportTemplate','',''),(420,'priv','zh-tw','bug-exportTemplate','',''),(420,'manager','de','qa','',''),(420,'manager','en','qa','',''),(420,'manager','fr','qa','',''),(420,'manager','zh-cn','qa','',''),(420,'manager','zh-tw','qa','',''),(421,'priv','de','testcase-browse','',''),(421,'priv','en','testcase-browse','',''),(421,'priv','fr','testcase-browse','',''),(421,'priv','zh-cn','testcase-browse','',''),(421,'priv','zh-tw','testcase-browse','',''),(421,'manager','de','qa','',''),(421,'manager','en','qa','',''),(421,'manager','fr','qa','',''),(421,'manager','zh-cn','qa','',''),(421,'manager','zh-tw','qa','',''),(422,'priv','de','testcase-groupCase','',''),(422,'priv','en','testcase-groupCase','',''),(422,'priv','fr','testcase-groupCase','',''),(422,'priv','zh-cn','testcase-groupCase','',''),(422,'priv','zh-tw','testcase-groupCase','',''),(422,'manager','de','bug','',''),(422,'manager','en','bug','',''),(422,'manager','fr','bug','',''),(422,'manager','zh-cn','bug','',''),(422,'manager','zh-tw','bug','',''),(423,'priv','de','testcase-zeroCase','',''),(423,'priv','en','testcase-zeroCase','',''),(423,'priv','fr','testcase-zeroCase','',''),(423,'priv','zh-cn','testcase-zeroCase','',''),(423,'priv','zh-tw','testcase-zeroCase','',''),(423,'manager','de','testcase','',''),(423,'manager','en','testcase','',''),(423,'manager','fr','testcase','',''),(423,'manager','zh-cn','testcase','',''),(423,'manager','zh-tw','testcase','',''),(424,'priv','de','testcase-create','',''),(424,'priv','en','testcase-create','',''),(424,'priv','fr','testcase-create','',''),(424,'priv','zh-cn','testcase-create','',''),(424,'priv','zh-tw','testcase-create','',''),(424,'manager','de','testtask','',''),(424,'manager','en','testtask','',''),(424,'manager','fr','testtask','',''),(424,'manager','zh-cn','testtask','',''),(424,'manager','zh-tw','testtask','',''),(425,'priv','de','testcase-batchCreate','',''),(425,'priv','en','testcase-batchCreate','',''),(425,'priv','fr','testcase-batchCreate','',''),(425,'priv','zh-cn','testcase-batchCreate','',''),(425,'priv','zh-tw','testcase-batchCreate','',''),(425,'manager','de','testsuite','',''),(425,'manager','en','testsuite','',''),(425,'manager','fr','testsuite','',''),(425,'manager','zh-cn','testsuite','',''),(425,'manager','zh-tw','testsuite','',''),(426,'priv','de','testcase-createBug','',''),(426,'priv','en','testcase-createBug','',''),(426,'priv','fr','testcase-createBug','',''),(426,'priv','zh-cn','testcase-createBug','',''),(426,'priv','zh-tw','testcase-createBug','',''),(426,'manager','de','testreport','',''),(426,'manager','en','testreport','',''),(426,'manager','fr','testreport','',''),(426,'manager','zh-cn','testreport','',''),(426,'manager','zh-tw','testreport','',''),(427,'priv','de','testcase-view','',''),(427,'priv','en','testcase-view','',''),(427,'priv','fr','testcase-view','',''),(427,'priv','zh-cn','testcase-view','',''),(427,'priv','zh-tw','testcase-view','',''),(427,'manager','de','zahost','',''),(427,'manager','en','zahost','',''),(427,'manager','fr','zahost','',''),(427,'manager','zh-cn','zahost','',''),(427,'manager','zh-tw','zahost','',''),(428,'priv','de','testcase-edit','',''),(428,'priv','en','testcase-edit','',''),(428,'priv','fr','testcase-edit','',''),(428,'priv','zh-cn','testcase-edit','',''),(428,'priv','zh-tw','testcase-edit','',''),(428,'manager','de','zanode','',''),(428,'manager','en','zanode','',''),(428,'manager','fr','zanode','',''),(428,'manager','zh-cn','zanode','',''),(428,'manager','zh-tw','zanode','',''),(429,'priv','de','testcase-deleteAction','',''),(429,'priv','en','testcase-deleteAction','',''),(429,'priv','fr','testcase-deleteAction','',''),(429,'priv','zh-cn','testcase-deleteAction','',''),(429,'priv','zh-tw','testcase-deleteAction','',''),(429,'manager','de','assetlib','',''),(429,'manager','en','assetlib','',''),(429,'manager','fr','assetlib','',''),(429,'manager','zh-cn','assetlib','',''),(429,'manager','zh-tw','assetlib','',''),(430,'priv','de','testcase-exportAction','',''),(430,'priv','en','testcase-exportAction','',''),(430,'priv','fr','testcase-exportAction','',''),(430,'priv','zh-cn','testcase-exportAction','',''),(430,'priv','zh-tw','testcase-exportAction','',''),(430,'manager','de','caselib','',''),(430,'manager','en','caselib','',''),(430,'manager','fr','caselib','',''),(430,'manager','zh-cn','caselib','',''),(430,'manager','zh-tw','caselib','',''),(431,'priv','de','testcase-confirmChange','',''),(431,'priv','en','testcase-confirmChange','',''),(431,'priv','fr','testcase-confirmChange','',''),(431,'priv','zh-cn','testcase-confirmChange','',''),(431,'priv','zh-tw','testcase-confirmChange','',''),(431,'manager','de','assetlib','',''),(431,'manager','en','assetlib','',''),(431,'manager','fr','assetlib','',''),(431,'manager','zh-cn','assetlib','',''),(431,'manager','zh-tw','assetlib','',''),(432,'priv','de','testcase-confirmStoryChange','',''),(432,'priv','en','testcase-confirmStoryChange','',''),(432,'priv','fr','testcase-confirmStoryChange','',''),(432,'priv','zh-cn','testcase-confirmStoryChange','',''),(432,'priv','zh-tw','testcase-confirmStoryChange','',''),(432,'manager','de','storylib','',''),(432,'manager','en','storylib','',''),(432,'manager','fr','storylib','',''),(432,'manager','zh-cn','storylib','',''),(432,'manager','zh-tw','storylib','',''),(433,'priv','de','testcase-batchEdit','',''),(433,'priv','en','testcase-batchEdit','',''),(433,'priv','fr','testcase-batchEdit','',''),(433,'priv','zh-cn','testcase-batchEdit','',''),(433,'priv','zh-tw','testcase-batchEdit','',''),(433,'manager','de','issuelib','',''),(433,'manager','en','issuelib','',''),(433,'manager','fr','issuelib','',''),(433,'manager','zh-cn','issuelib','',''),(433,'manager','zh-tw','issuelib','',''),(434,'priv','de','testcase-batchDelete','',''),(434,'priv','en','testcase-batchDelete','',''),(434,'priv','fr','testcase-batchDelete','',''),(434,'priv','zh-cn','testcase-batchDelete','',''),(434,'priv','zh-tw','testcase-batchDelete','',''),(434,'manager','de','risklib','',''),(434,'manager','en','risklib','',''),(434,'manager','fr','risklib','',''),(434,'manager','zh-cn','risklib','',''),(434,'manager','zh-tw','risklib','',''),(435,'priv','de','testcase-batchChangeModule','',''),(435,'priv','en','testcase-batchChangeModule','',''),(435,'priv','fr','testcase-batchChangeModule','',''),(435,'priv','zh-cn','testcase-batchChangeModule','',''),(435,'priv','zh-tw','testcase-batchChangeModule','',''),(435,'manager','de','opportunitylib','',''),(435,'manager','en','opportunitylib','',''),(435,'manager','fr','opportunitylib','',''),(435,'manager','zh-cn','opportunitylib','',''),(435,'manager','zh-tw','opportunitylib','',''),(436,'priv','de','testcase-batchChangeBranch','',''),(436,'priv','en','testcase-batchChangeBranch','',''),(436,'priv','fr','testcase-batchChangeBranch','',''),(436,'priv','zh-cn','testcase-batchChangeBranch','',''),(436,'priv','zh-tw','testcase-batchChangeBranch','',''),(436,'manager','de','practicelib','',''),(436,'manager','en','practicelib','',''),(436,'manager','fr','practicelib','',''),(436,'manager','zh-cn','practicelib','',''),(436,'manager','zh-tw','practicelib','',''),(437,'priv','de','testcase-linkCases','',''),(437,'priv','en','testcase-linkCases','',''),(437,'priv','fr','testcase-linkCases','',''),(437,'priv','zh-cn','testcase-linkCases','',''),(437,'priv','zh-tw','testcase-linkCases','',''),(437,'manager','de','componentlib','',''),(437,'manager','en','componentlib','',''),(437,'manager','fr','componentlib','',''),(437,'manager','zh-cn','componentlib','',''),(437,'manager','zh-tw','componentlib','',''),(438,'priv','de','testcase-linkBugs','',''),(438,'priv','en','testcase-linkBugs','',''),(438,'priv','fr','testcase-linkBugs','',''),(438,'priv','zh-cn','testcase-linkBugs','',''),(438,'priv','zh-tw','testcase-linkBugs','',''),(438,'manager','de','doc','',''),(438,'manager','en','doc','',''),(438,'manager','fr','doc','',''),(438,'manager','zh-cn','doc','',''),(438,'manager','zh-tw','doc','',''),(439,'priv','de','testcase-bugs','',''),(439,'priv','en','testcase-bugs','',''),(439,'priv','fr','testcase-bugs','',''),(439,'priv','zh-cn','testcase-bugs','',''),(439,'priv','zh-tw','testcase-bugs','',''),(439,'manager','de','doc','',''),(439,'manager','en','doc','',''),(439,'manager','fr','doc','',''),(439,'manager','zh-cn','doc','',''),(439,'manager','zh-tw','doc','',''),(440,'priv','de','testcase-review','',''),(440,'priv','en','testcase-review','',''),(440,'priv','fr','testcase-review','',''),(440,'priv','zh-cn','testcase-review','',''),(440,'priv','zh-tw','testcase-review','',''),(440,'manager','de','api','',''),(440,'manager','en','api','',''),(440,'manager','fr','api','',''),(440,'manager','zh-cn','api','',''),(440,'manager','zh-tw','api','',''),(441,'priv','de','testcase-batchReview','',''),(441,'priv','en','testcase-batchReview','',''),(441,'priv','fr','testcase-batchReview','',''),(441,'priv','zh-cn','testcase-batchReview','',''),(441,'priv','zh-tw','testcase-batchReview','',''),(441,'manager','de','bi','',''),(441,'manager','en','bi','',''),(441,'manager','fr','bi','',''),(441,'manager','zh-cn','bi','',''),(441,'manager','zh-tw','bi','',''),(442,'priv','de','testcase-batchConfirmStoryChange','',''),(442,'priv','en','testcase-batchConfirmStoryChange','',''),(442,'priv','fr','testcase-batchConfirmStoryChange','',''),(442,'priv','zh-cn','testcase-batchConfirmStoryChange','',''),(442,'priv','zh-tw','testcase-batchConfirmStoryChange','',''),(442,'manager','de','screen','',''),(442,'manager','en','screen','',''),(442,'manager','fr','screen','',''),(442,'manager','zh-cn','screen','',''),(442,'manager','zh-tw','screen','',''),(443,'priv','de','testcase-importFromLib','',''),(443,'priv','en','testcase-importFromLib','',''),(443,'priv','fr','testcase-importFromLib','',''),(443,'priv','zh-cn','testcase-importFromLib','',''),(443,'priv','zh-tw','testcase-importFromLib','',''),(443,'manager','de','pivot','',''),(443,'manager','en','pivot','',''),(443,'manager','fr','pivot','',''),(443,'manager','zh-cn','pivot','',''),(443,'manager','zh-tw','pivot','',''),(444,'priv','de','testcase-batchCaseTypeChange','',''),(444,'priv','en','testcase-batchCaseTypeChange','',''),(444,'priv','fr','testcase-batchCaseTypeChange','',''),(444,'priv','zh-cn','testcase-batchCaseTypeChange','',''),(444,'priv','zh-tw','testcase-batchCaseTypeChange','',''),(444,'manager','de','chart','',''),(444,'manager','en','chart','',''),(444,'manager','fr','chart','',''),(444,'manager','zh-cn','chart','',''),(444,'manager','zh-tw','chart','',''),(445,'priv','de','testcase-confirmLibcaseChange','',''),(445,'priv','en','testcase-confirmLibcaseChange','',''),(445,'priv','fr','testcase-confirmLibcaseChange','',''),(445,'priv','zh-cn','testcase-confirmLibcaseChange','',''),(445,'priv','zh-tw','testcase-confirmLibcaseChange','',''),(445,'manager','de','dataview','',''),(445,'manager','en','dataview','',''),(445,'manager','fr','dataview','',''),(445,'manager','zh-cn','dataview','',''),(445,'manager','zh-tw','dataview','',''),(446,'priv','de','testcase-ignoreLibcaseChange','',''),(446,'priv','en','testcase-ignoreLibcaseChange','',''),(446,'priv','fr','testcase-ignoreLibcaseChange','',''),(446,'priv','zh-cn','testcase-ignoreLibcaseChange','',''),(446,'priv','zh-tw','testcase-ignoreLibcaseChange','',''),(446,'manager','de','dimension','',''),(446,'manager','en','dimension','',''),(446,'manager','fr','dimension','',''),(446,'manager','zh-cn','dimension','',''),(446,'manager','zh-tw','dimension','',''),(447,'priv','de','testcase-importToLib','',''),(447,'priv','en','testcase-importToLib','',''),(447,'priv','fr','testcase-importToLib','',''),(447,'priv','zh-cn','testcase-importToLib','',''),(447,'priv','zh-tw','testcase-importToLib','',''),(447,'manager','de','report','',''),(447,'manager','en','report','',''),(447,'manager','fr','report','',''),(447,'manager','zh-cn','report','',''),(447,'manager','zh-tw','report','',''),(448,'priv','de','testcase-automation','',''),(448,'priv','en','testcase-automation','',''),(448,'priv','fr','testcase-automation','',''),(448,'priv','zh-cn','testcase-automation','',''),(448,'priv','zh-tw','testcase-automation','',''),(448,'manager','de','bidesign','',''),(448,'manager','en','bidesign','',''),(448,'manager','fr','bidesign','',''),(448,'manager','zh-cn','bidesign','',''),(448,'manager','zh-tw','bidesign','',''),(449,'priv','de','testcase-showScript','',''),(449,'priv','en','testcase-showScript','',''),(449,'priv','fr','testcase-showScript','',''),(449,'priv','zh-cn','testcase-showScript','',''),(449,'priv','zh-tw','testcase-showScript','',''),(449,'manager','de','system','',''),(449,'manager','en','system','',''),(449,'manager','fr','system','',''),(449,'manager','zh-cn','system','',''),(449,'manager','zh-tw','system','',''),(450,'priv','de','testcase-exportTemplate','',''),(450,'priv','en','testcase-exportTemplate','',''),(450,'priv','fr','testcase-exportTemplate','',''),(450,'priv','zh-cn','testcase-exportTemplate','',''),(450,'priv','zh-tw','testcase-exportTemplate','',''),(450,'manager','de','company','',''),(450,'manager','en','company','',''),(450,'manager','fr','company','',''),(450,'manager','zh-cn','company','',''),(450,'manager','zh-tw','company','',''),(451,'priv','de','testcase-importCaseAction','',''),(451,'priv','en','testcase-importCaseAction','',''),(451,'priv','fr','testcase-importCaseAction','',''),(451,'priv','zh-cn','testcase-importCaseAction','',''),(451,'priv','zh-tw','testcase-importCaseAction','',''),(451,'manager','de','systemteam','',''),(451,'manager','en','systemteam','',''),(451,'manager','fr','systemteam','',''),(451,'manager','zh-cn','systemteam','',''),(451,'manager','zh-tw','systemteam','',''),(452,'manager','de','systemschedule','',''),(452,'manager','en','systemschedule','',''),(452,'manager','fr','systemschedule','',''),(452,'manager','zh-cn','systemschedule','',''),(452,'manager','zh-tw','systemschedule','',''),(453,'priv','de','testcase-submit','',''),(453,'priv','en','testcase-submit','',''),(453,'priv','fr','testcase-submit','',''),(453,'priv','zh-cn','testcase-submit','',''),(453,'priv','zh-tw','testcase-submit','',''),(453,'manager','de','systemeffort','',''),(453,'manager','en','systemeffort','',''),(453,'manager','fr','systemeffort','',''),(453,'manager','zh-cn','systemeffort','',''),(453,'manager','zh-tw','systemeffort','',''),(454,'priv','de','testtask-create','',''),(454,'priv','en','testtask-create','',''),(454,'priv','fr','testtask-create','',''),(454,'priv','zh-cn','testtask-create','',''),(454,'priv','zh-tw','testtask-create','',''),(454,'manager','de','systemdynamic','',''),(454,'manager','en','systemdynamic','',''),(454,'manager','fr','systemdynamic','',''),(454,'manager','zh-cn','systemdynamic','',''),(454,'manager','zh-tw','systemdynamic','',''),(455,'priv','de','testtask-browse','',''),(455,'priv','en','testtask-browse','',''),(455,'priv','fr','testtask-browse','',''),(455,'priv','zh-cn','testtask-browse','',''),(455,'priv','zh-tw','testtask-browse','',''),(455,'manager','de','systemcompany','',''),(455,'manager','en','systemcompany','',''),(455,'manager','fr','systemcompany','',''),(455,'manager','zh-cn','systemcompany','',''),(455,'manager','zh-tw','systemcompany','',''),(456,'priv','de','testtask-viewAction','',''),(456,'priv','en','testtask-viewAction','',''),(456,'priv','fr','testtask-viewAction','',''),(456,'priv','zh-cn','testtask-viewAction','',''),(456,'priv','zh-tw','testtask-viewAction','',''),(456,'manager','de','dataaccess','',''),(456,'manager','en','dataaccess','',''),(456,'manager','fr','dataaccess','',''),(456,'manager','zh-cn','dataaccess','',''),(456,'manager','zh-tw','dataaccess','',''),(457,'priv','de','testtask-casesAction','',''),(457,'priv','en','testtask-casesAction','',''),(457,'priv','fr','testtask-casesAction','',''),(457,'priv','zh-cn','testtask-casesAction','',''),(457,'priv','zh-tw','testtask-casesAction','',''),(457,'manager','de','admin','',''),(457,'manager','en','admin','',''),(457,'manager','fr','admin','',''),(457,'manager','zh-cn','admin','',''),(457,'manager','zh-tw','admin','',''),(458,'priv','de','testtask-groupCase','',''),(458,'priv','en','testtask-groupCase','',''),(458,'priv','fr','testtask-groupCase','',''),(458,'priv','zh-cn','testtask-groupCase','',''),(458,'priv','zh-tw','testtask-groupCase','',''),(458,'manager','de','dept','',''),(458,'manager','en','dept','',''),(458,'manager','fr','dept','',''),(458,'manager','zh-cn','dept','',''),(458,'manager','zh-tw','dept','',''),(459,'priv','de','testtask-edit','',''),(459,'priv','en','testtask-edit','',''),(459,'priv','fr','testtask-edit','',''),(459,'priv','zh-cn','testtask-edit','',''),(459,'priv','zh-tw','testtask-edit','',''),(459,'manager','de','group','',''),(459,'manager','en','group','',''),(459,'manager','fr','group','',''),(459,'manager','zh-cn','group','',''),(459,'manager','zh-tw','group','',''),(460,'priv','de','testtask-startAction','',''),(460,'priv','en','testtask-startAction','',''),(460,'priv','fr','testtask-startAction','',''),(460,'priv','zh-cn','testtask-startAction','',''),(460,'priv','zh-tw','testtask-startAction','',''),(460,'manager','de','user','',''),(460,'manager','en','user','',''),(460,'manager','fr','user','',''),(460,'manager','zh-cn','user','',''),(460,'manager','zh-tw','user','',''),(461,'priv','de','testtask-activateAction','',''),(461,'priv','en','testtask-activateAction','',''),(461,'priv','fr','testtask-activateAction','',''),(461,'priv','zh-cn','testtask-activateAction','',''),(461,'priv','zh-tw','testtask-activateAction','',''),(461,'manager','de','admin','',''),(461,'manager','en','admin','',''),(461,'manager','fr','admin','',''),(461,'manager','zh-cn','admin','',''),(461,'manager','zh-tw','admin','',''),(462,'priv','de','testtask-blockAction','',''),(462,'priv','en','testtask-blockAction','',''),(462,'priv','fr','testtask-blockAction','',''),(462,'priv','zh-cn','testtask-blockAction','',''),(462,'priv','zh-tw','testtask-blockAction','',''),(462,'manager','de','stage','',''),(462,'manager','en','stage','',''),(462,'manager','fr','stage','',''),(462,'manager','zh-cn','stage','',''),(462,'manager','zh-tw','stage','',''),(463,'priv','de','testtask-closeAction','',''),(463,'priv','en','testtask-closeAction','',''),(463,'priv','fr','testtask-closeAction','',''),(463,'priv','zh-cn','testtask-closeAction','',''),(463,'priv','zh-tw','testtask-closeAction','',''),(463,'manager','de','extension','',''),(463,'manager','en','extension','',''),(463,'manager','fr','extension','',''),(463,'manager','zh-cn','extension','',''),(463,'manager','zh-tw','extension','',''),(464,'priv','de','testtask-delete','',''),(464,'priv','en','testtask-delete','',''),(464,'priv','fr','testtask-delete','',''),(464,'priv','zh-cn','testtask-delete','',''),(464,'priv','zh-tw','testtask-delete','',''),(464,'manager','de','custom','',''),(464,'manager','en','custom','',''),(464,'manager','fr','custom','',''),(464,'manager','zh-cn','custom','',''),(464,'manager','zh-tw','custom','',''),(465,'priv','de','testtask-batchAssign','',''),(465,'priv','en','testtask-batchAssign','',''),(465,'priv','fr','testtask-batchAssign','',''),(465,'priv','zh-cn','testtask-batchAssign','',''),(465,'priv','zh-tw','testtask-batchAssign','',''),(465,'manager','de','action','',''),(465,'manager','en','action','',''),(465,'manager','fr','action','',''),(465,'manager','zh-cn','action','',''),(465,'manager','zh-tw','action','',''),(466,'priv','de','testtask-linkCase','',''),(466,'priv','en','testtask-linkCase','',''),(466,'priv','fr','testtask-linkCase','',''),(466,'priv','zh-cn','testtask-linkCase','',''),(466,'priv','zh-tw','testtask-linkCase','',''),(466,'manager','de','mail','',''),(466,'manager','en','mail','',''),(466,'manager','fr','mail','',''),(466,'manager','zh-cn','mail','',''),(466,'manager','zh-tw','mail','',''),(467,'priv','de','testtask-lblUnlinkCase','',''),(467,'priv','en','testtask-lblUnlinkCase','',''),(467,'priv','fr','testtask-lblUnlinkCase','',''),(467,'priv','zh-cn','testtask-lblUnlinkCase','',''),(467,'priv','zh-tw','testtask-lblUnlinkCase','',''),(467,'manager','de','sms','',''),(467,'manager','en','sms','',''),(467,'manager','fr','sms','',''),(467,'manager','zh-cn','sms','',''),(467,'manager','zh-tw','sms','',''),(468,'priv','de','testtask-lblRunCase','',''),(468,'priv','en','testtask-lblRunCase','',''),(468,'priv','fr','testtask-lblRunCase','',''),(468,'priv','zh-cn','testtask-lblRunCase','',''),(468,'priv','zh-tw','testtask-lblRunCase','',''),(468,'manager','de','backup','',''),(468,'manager','en','backup','',''),(468,'manager','fr','backup','',''),(468,'manager','zh-cn','backup','',''),(468,'manager','zh-tw','backup','',''),(469,'priv','de','testtask-resultsAction','',''),(469,'priv','en','testtask-resultsAction','',''),(469,'priv','fr','testtask-resultsAction','',''),(469,'priv','zh-cn','testtask-resultsAction','',''),(469,'priv','zh-tw','testtask-resultsAction','',''),(469,'manager','de','cron','',''),(469,'manager','en','cron','',''),(469,'manager','fr','cron','',''),(469,'manager','zh-cn','cron','',''),(469,'manager','zh-tw','cron','',''),(470,'priv','de','testtask-batchUnlinkCases','',''),(470,'priv','en','testtask-batchUnlinkCases','',''),(470,'priv','fr','testtask-batchUnlinkCases','',''),(470,'priv','zh-cn','testtask-batchUnlinkCases','',''),(470,'priv','zh-tw','testtask-batchUnlinkCases','',''),(470,'manager','de','dev','',''),(470,'manager','en','dev','',''),(470,'manager','fr','dev','',''),(470,'manager','zh-cn','dev','',''),(470,'manager','zh-tw','dev','',''),(471,'priv','de','testtask-reportAction','',''),(471,'priv','en','testtask-reportAction','',''),(471,'priv','fr','testtask-reportAction','',''),(471,'priv','zh-cn','testtask-reportAction','',''),(471,'priv','zh-tw','testtask-reportAction','',''),(471,'manager','de','editor','',''),(471,'manager','en','editor','',''),(471,'manager','fr','editor','',''),(471,'manager','zh-cn','editor','',''),(471,'manager','zh-tw','editor','',''),(472,'priv','de','testtask-browseUnits','',''),(472,'priv','en','testtask-browseUnits','',''),(472,'priv','fr','testtask-browseUnits','',''),(472,'priv','zh-cn','testtask-browseUnits','',''),(472,'priv','zh-tw','testtask-browseUnits','',''),(472,'manager','de','holiday','',''),(472,'manager','en','holiday','',''),(472,'manager','fr','holiday','',''),(472,'manager','zh-cn','holiday','',''),(472,'manager','zh-tw','holiday','',''),(473,'priv','de','testtask-unitCases','',''),(473,'priv','en','testtask-unitCases','',''),(473,'priv','fr','testtask-unitCases','',''),(473,'priv','zh-cn','testtask-unitCases','',''),(473,'priv','zh-tw','testtask-unitCases','',''),(473,'manager','de','meetingroom','',''),(473,'manager','en','meetingroom','',''),(473,'manager','fr','meetingroom','',''),(473,'manager','zh-cn','meetingroom','',''),(473,'manager','zh-tw','meetingroom','',''),(474,'priv','de','testtask-importUnitResult','',''),(474,'priv','en','testtask-importUnitResult','',''),(474,'priv','fr','testtask-importUnitResult','',''),(474,'priv','zh-cn','testtask-importUnitResult','',''),(474,'priv','zh-tw','testtask-importUnitResult','',''),(474,'manager','de','webhook','',''),(474,'manager','en','webhook','',''),(474,'manager','fr','webhook','',''),(474,'manager','zh-cn','webhook','',''),(474,'manager','zh-tw','webhook','',''),(475,'priv','de','testtask-batchRun','',''),(475,'priv','en','testtask-batchRun','',''),(475,'priv','fr','testtask-batchRun','',''),(475,'priv','zh-cn','testtask-batchRun','',''),(475,'priv','zh-tw','testtask-batchRun','',''),(475,'manager','de','message','',''),(475,'manager','en','message','',''),(475,'manager','fr','message','',''),(475,'manager','zh-cn','message','',''),(475,'manager','zh-tw','message','',''),(476,'priv','de','testtask-runDeployCase','',''),(476,'priv','en','testtask-runDeployCase','',''),(476,'priv','fr','testtask-runDeployCase','',''),(476,'priv','zh-cn','testtask-runDeployCase','',''),(476,'priv','zh-tw','testtask-runDeployCase','',''),(476,'manager','de','featureswitch','',''),(476,'manager','en','featureswitch','',''),(476,'manager','fr','featureswitch','',''),(476,'manager','zh-cn','featureswitch','',''),(476,'manager','zh-tw','featureswitch','',''),(477,'priv','de','testtask-deployCaseResults','',''),(477,'priv','en','testtask-deployCaseResults','',''),(477,'priv','fr','testtask-deployCaseResults','',''),(477,'priv','zh-cn','testtask-deployCaseResults','',''),(477,'priv','zh-tw','testtask-deployCaseResults','',''),(477,'manager','de','importdata','',''),(477,'manager','en','importdata','',''),(477,'manager','fr','importdata','',''),(477,'manager','zh-cn','importdata','',''),(477,'manager','zh-tw','importdata','',''),(478,'manager','de','systemsetting','',''),(478,'manager','en','systemsetting','',''),(478,'manager','fr','systemsetting','',''),(478,'manager','zh-cn','systemsetting','',''),(478,'manager','zh-tw','systemsetting','',''),(479,'priv','de','testsuite-browse','',''),(479,'priv','en','testsuite-browse','',''),(479,'priv','fr','testsuite-browse','',''),(479,'priv','zh-cn','testsuite-browse','',''),(479,'priv','zh-tw','testsuite-browse','',''),(479,'manager','de','staffmanage','',''),(479,'manager','en','staffmanage','',''),(479,'manager','fr','staffmanage','',''),(479,'manager','zh-cn','staffmanage','',''),(479,'manager','zh-tw','staffmanage','',''),(480,'priv','de','testsuite-create','',''),(480,'priv','en','testsuite-create','',''),(480,'priv','fr','testsuite-create','',''),(480,'priv','zh-cn','testsuite-create','',''),(480,'priv','zh-tw','testsuite-create','',''),(480,'manager','de','modelconfig','',''),(480,'manager','en','modelconfig','',''),(480,'manager','fr','modelconfig','',''),(480,'manager','zh-cn','modelconfig','',''),(480,'manager','zh-tw','modelconfig','',''),(481,'priv','de','testsuite-view','',''),(481,'priv','en','testsuite-view','',''),(481,'priv','fr','testsuite-view','',''),(481,'priv','zh-cn','testsuite-view','',''),(481,'priv','zh-tw','testsuite-view','',''),(481,'manager','de','featureconfig','',''),(481,'manager','en','featureconfig','',''),(481,'manager','fr','featureconfig','',''),(481,'manager','zh-cn','featureconfig','',''),(481,'manager','zh-tw','featureconfig','',''),(482,'priv','de','testsuite-edit','',''),(482,'priv','en','testsuite-edit','',''),(482,'priv','fr','testsuite-edit','',''),(482,'priv','zh-cn','testsuite-edit','',''),(482,'priv','zh-tw','testsuite-edit','',''),(482,'manager','de','doctemplate','',''),(482,'manager','en','doctemplate','',''),(482,'manager','fr','doctemplate','',''),(482,'manager','zh-cn','doctemplate','',''),(482,'manager','zh-tw','doctemplate','',''),(483,'priv','de','testsuite-delete','',''),(483,'priv','en','testsuite-delete','',''),(483,'priv','fr','testsuite-delete','',''),(483,'priv','zh-cn','testsuite-delete','',''),(483,'priv','zh-tw','testsuite-delete','',''),(483,'manager','de','notifysetting','',''),(483,'manager','en','notifysetting','',''),(483,'manager','fr','notifysetting','',''),(483,'manager','zh-cn','notifysetting','',''),(483,'manager','zh-tw','notifysetting','',''),(484,'priv','de','testsuite-linkCase','',''),(484,'priv','en','testsuite-linkCase','',''),(484,'priv','fr','testsuite-linkCase','',''),(484,'priv','zh-cn','testsuite-linkCase','',''),(484,'priv','zh-tw','testsuite-linkCase','',''),(484,'manager','de','ldap','',''),(484,'manager','en','ldap','',''),(484,'manager','fr','ldap','',''),(484,'manager','zh-cn','ldap','',''),(484,'manager','zh-tw','ldap','',''),(485,'priv','de','testsuite-unlinkCaseAction','',''),(485,'priv','en','testsuite-unlinkCaseAction','',''),(485,'priv','fr','testsuite-unlinkCaseAction','',''),(485,'priv','zh-cn','testsuite-unlinkCaseAction','',''),(485,'priv','zh-tw','testsuite-unlinkCaseAction','',''),(485,'manager','de','sqlbuilder','',''),(485,'manager','en','sqlbuilder','',''),(485,'manager','fr','sqlbuilder','',''),(485,'manager','zh-cn','sqlbuilder','',''),(485,'manager','zh-tw','sqlbuilder','',''),(486,'priv','de','testsuite-batchUnlinkCases','',''),(486,'priv','en','testsuite-batchUnlinkCases','',''),(486,'priv','fr','testsuite-batchUnlinkCases','',''),(486,'priv','zh-cn','testsuite-batchUnlinkCases','',''),(486,'priv','zh-tw','testsuite-batchUnlinkCases','',''),(486,'manager','de','holidayseason','',''),(486,'manager','en','holidayseason','',''),(486,'manager','fr','holidayseason','',''),(486,'manager','zh-cn','holidayseason','',''),(486,'manager','zh-tw','holidayseason','',''),(487,'priv','de','testreport-browse','',''),(487,'priv','en','testreport-browse','',''),(487,'priv','fr','testreport-browse','',''),(487,'priv','zh-cn','testreport-browse','',''),(487,'priv','zh-tw','testreport-browse','',''),(487,'manager','de','baseline','',''),(487,'manager','en','baseline','',''),(487,'manager','fr','baseline','',''),(487,'manager','zh-cn','baseline','',''),(487,'manager','zh-tw','baseline','',''),(488,'priv','de','testreport-create','',''),(488,'priv','en','testreport-create','',''),(488,'priv','fr','testreport-create','',''),(488,'priv','zh-cn','testreport-create','',''),(488,'priv','zh-tw','testreport-create','',''),(488,'manager','de','classify','',''),(488,'manager','en','classify','',''),(488,'manager','fr','classify','',''),(488,'manager','zh-cn','classify','',''),(488,'manager','zh-tw','classify','',''),(489,'priv','de','testreport-view','',''),(489,'priv','en','testreport-view','',''),(489,'priv','fr','testreport-view','',''),(489,'priv','zh-cn','testreport-view','',''),(489,'priv','zh-tw','testreport-view','',''),(489,'manager','de','cmcl','',''),(489,'manager','en','cmcl','',''),(489,'manager','fr','cmcl','',''),(489,'manager','zh-cn','cmcl','',''),(489,'manager','zh-tw','cmcl','',''),(490,'priv','de','testreport-delete','',''),(490,'priv','en','testreport-delete','',''),(490,'priv','fr','testreport-delete','',''),(490,'priv','zh-cn','testreport-delete','',''),(490,'priv','zh-tw','testreport-delete','',''),(490,'manager','de','auditcl','',''),(490,'manager','en','auditcl','',''),(490,'manager','fr','auditcl','',''),(490,'manager','zh-cn','auditcl','',''),(490,'manager','zh-tw','auditcl','',''),(491,'priv','de','testreport-edit','',''),(491,'priv','en','testreport-edit','',''),(491,'priv','fr','testreport-edit','',''),(491,'priv','zh-cn','testreport-edit','',''),(491,'priv','zh-tw','testreport-edit','',''),(491,'manager','de','reviewcl','',''),(491,'manager','en','reviewcl','',''),(491,'manager','fr','reviewcl','',''),(491,'manager','zh-cn','reviewcl','',''),(491,'manager','zh-tw','reviewcl','',''),(492,'priv','de','testreport-exportAction','',''),(492,'priv','en','testreport-exportAction','',''),(492,'priv','fr','testreport-exportAction','',''),(492,'priv','zh-cn','testreport-exportAction','',''),(492,'priv','zh-tw','testreport-exportAction','',''),(492,'manager','de','process','',''),(492,'manager','en','process','',''),(492,'manager','fr','process','',''),(492,'manager','zh-cn','process','',''),(492,'manager','zh-tw','process','',''),(493,'priv','de','milestone-indexAction','',''),(493,'priv','en','milestone-indexAction','',''),(493,'priv','fr','milestone-indexAction','',''),(493,'priv','zh-cn','milestone-indexAction','',''),(493,'priv','zh-tw','milestone-indexAction','',''),(493,'manager','de','activity','',''),(493,'manager','en','activity','',''),(493,'manager','fr','activity','',''),(493,'manager','zh-cn','activity','',''),(493,'manager','zh-tw','activity','',''),(494,'priv','de','milestone-saveOtherProblem','',''),(494,'priv','en','milestone-saveOtherProblem','',''),(494,'priv','fr','milestone-saveOtherProblem','',''),(494,'priv','zh-cn','milestone-saveOtherProblem','',''),(494,'priv','zh-tw','milestone-saveOtherProblem','',''),(494,'manager','de','zoutput','',''),(494,'manager','en','zoutput','',''),(494,'manager','fr','zoutput','',''),(494,'manager','zh-cn','zoutput','',''),(494,'manager','zh-tw','zoutput','',''),(495,'manager','de','subject','',''),(495,'manager','en','subject','',''),(495,'manager','fr','subject','',''),(495,'manager','zh-cn','subject','',''),(495,'manager','zh-tw','subject','',''),(496,'priv','de','caselib-browseAction','',''),(496,'priv','en','caselib-browseAction','',''),(496,'priv','fr','caselib-browseAction','',''),(496,'priv','zh-cn','caselib-browseAction','',''),(496,'priv','zh-tw','caselib-browseAction','',''),(496,'manager','de','approvalflow','',''),(496,'manager','en','approvalflow','',''),(496,'manager','fr','approvalflow','',''),(496,'manager','zh-cn','approvalflow','',''),(496,'manager','zh-tw','approvalflow','',''),(497,'priv','de','caselib-create','',''),(497,'priv','en','caselib-create','',''),(497,'priv','fr','caselib-create','',''),(497,'priv','zh-cn','caselib-create','',''),(497,'priv','zh-tw','caselib-create','',''),(497,'manager','de','reviewsetting','',''),(497,'manager','en','reviewsetting','',''),(497,'manager','fr','reviewsetting','',''),(497,'manager','zh-cn','reviewsetting','',''),(497,'manager','zh-tw','reviewsetting','',''),(498,'priv','de','caselib-edit','',''),(498,'priv','en','caselib-edit','',''),(498,'priv','fr','caselib-edit','',''),(498,'priv','zh-cn','caselib-edit','',''),(498,'priv','zh-tw','caselib-edit','',''),(498,'manager','de','measurement','',''),(498,'manager','en','measurement','',''),(498,'manager','fr','measurement','',''),(498,'manager','zh-cn','measurement','',''),(498,'manager','zh-tw','measurement','',''),(499,'priv','de','caselib-deleteAction','',''),(499,'priv','en','caselib-deleteAction','',''),(499,'priv','fr','caselib-deleteAction','',''),(499,'priv','zh-cn','caselib-deleteAction','',''),(499,'priv','zh-tw','caselib-deleteAction','',''),(499,'manager','de','setting','',''),(499,'manager','en','setting','',''),(499,'manager','fr','setting','',''),(499,'manager','zh-cn','setting','',''),(499,'manager','zh-tw','setting','',''),(500,'priv','de','caselib-view','',''),(500,'priv','en','caselib-view','',''),(500,'priv','fr','caselib-view','',''),(500,'priv','zh-cn','caselib-view','',''),(500,'priv','zh-tw','caselib-view','',''),(500,'manager','de','im','',''),(500,'manager','en','im','',''),(500,'manager','fr','im','',''),(500,'manager','zh-cn','im','',''),(500,'manager','zh-tw','im','',''),(501,'priv','de','caselib-createCase','',''),(501,'priv','en','caselib-createCase','',''),(501,'priv','fr','caselib-createCase','',''),(501,'priv','zh-cn','caselib-createCase','',''),(501,'priv','zh-tw','caselib-createCase','',''),(501,'manager','de','client','',''),(501,'manager','en','client','',''),(501,'manager','fr','client','',''),(501,'manager','zh-cn','client','',''),(501,'manager','zh-tw','client','',''),(502,'priv','de','caselib-batchCreateCase','',''),(502,'priv','en','caselib-batchCreateCase','',''),(502,'priv','fr','caselib-batchCreateCase','',''),(502,'priv','zh-cn','caselib-batchCreateCase','',''),(502,'priv','zh-tw','caselib-batchCreateCase','',''),(502,'manager','de','devops','',''),(502,'manager','en','devops','',''),(502,'manager','fr','devops','',''),(502,'manager','zh-cn','devops','',''),(502,'manager','zh-tw','devops','',''),(503,'priv','de','caselib-exportTemplate','',''),(503,'priv','en','caselib-exportTemplate','',''),(503,'priv','fr','caselib-exportTemplate','',''),(503,'priv','zh-cn','caselib-exportTemplate','',''),(503,'priv','zh-tw','caselib-exportTemplate','',''),(503,'manager','de','svn','',''),(503,'manager','en','svn','',''),(503,'manager','fr','svn','',''),(503,'manager','zh-cn','svn','',''),(503,'manager','zh-tw','svn','',''),(504,'priv','de','caselib-importAction','',''),(504,'priv','en','caselib-importAction','',''),(504,'priv','fr','caselib-importAction','',''),(504,'priv','zh-cn','caselib-importAction','',''),(504,'priv','zh-tw','caselib-importAction','',''),(504,'manager','de','git','',''),(504,'manager','en','git','',''),(504,'manager','fr','git','',''),(504,'manager','zh-cn','git','',''),(504,'manager','zh-tw','git','',''),(505,'priv','de','caselib-showImport','',''),(505,'priv','en','caselib-showImport','',''),(505,'priv','fr','caselib-showImport','',''),(505,'priv','zh-cn','caselib-showImport','',''),(505,'priv','zh-tw','caselib-showImport','',''),(505,'manager','de','mr','',''),(505,'manager','en','mr','',''),(505,'manager','fr','mr','',''),(505,'manager','zh-cn','mr','',''),(505,'manager','zh-tw','mr','',''),(506,'priv','de','zahost-browse','',''),(506,'priv','en','zahost-browse','',''),(506,'priv','fr','zahost-browse','',''),(506,'priv','zh-cn','zahost-browse','',''),(506,'priv','zh-tw','zahost-browse','',''),(506,'manager','de','repo','',''),(506,'manager','en','repo','',''),(506,'manager','fr','repo','',''),(506,'manager','zh-cn','repo','',''),(506,'manager','zh-tw','repo','',''),(507,'priv','de','zahost-create','',''),(507,'priv','en','zahost-create','',''),(507,'priv','fr','zahost-create','',''),(507,'priv','zh-cn','zahost-create','',''),(507,'priv','zh-tw','zahost-create','',''),(507,'manager','de','ci','',''),(507,'manager','en','ci','',''),(507,'manager','fr','ci','',''),(507,'manager','zh-cn','ci','',''),(507,'manager','zh-tw','ci','',''),(508,'priv','de','zahost-editAction','',''),(508,'priv','en','zahost-editAction','',''),(508,'priv','fr','zahost-editAction','',''),(508,'priv','zh-cn','zahost-editAction','',''),(508,'priv','zh-tw','zahost-editAction','',''),(508,'manager','de','compile','',''),(508,'manager','en','compile','',''),(508,'manager','fr','compile','',''),(508,'manager','zh-cn','compile','',''),(508,'manager','zh-tw','compile','',''),(509,'priv','de','zahost-deleteAction','',''),(509,'priv','en','zahost-deleteAction','',''),(509,'priv','fr','zahost-deleteAction','',''),(509,'priv','zh-cn','zahost-deleteAction','',''),(509,'priv','zh-tw','zahost-deleteAction','',''),(509,'manager','de','jenkins','',''),(509,'manager','en','jenkins','',''),(509,'manager','fr','jenkins','',''),(509,'manager','zh-cn','jenkins','',''),(509,'manager','zh-tw','jenkins','',''),(510,'priv','de','zahost-view','',''),(510,'priv','en','zahost-view','',''),(510,'priv','fr','zahost-view','',''),(510,'priv','zh-cn','zahost-view','',''),(510,'priv','zh-tw','zahost-view','',''),(510,'manager','de','job','',''),(510,'manager','en','job','',''),(510,'manager','fr','job','',''),(510,'manager','zh-cn','job','',''),(510,'manager','zh-tw','job','',''),(511,'priv','de','zahost-browseImage','',''),(511,'priv','en','zahost-browseImage','',''),(511,'priv','fr','zahost-browseImage','',''),(511,'priv','zh-cn','zahost-browseImage','',''),(511,'priv','zh-tw','zahost-browseImage','',''),(511,'manager','de','gitlab','',''),(511,'manager','en','gitlab','',''),(511,'manager','fr','gitlab','',''),(511,'manager','zh-cn','gitlab','',''),(511,'manager','zh-tw','gitlab','',''),(512,'priv','de','zahost-downloadImage','',''),(512,'priv','en','zahost-downloadImage','',''),(512,'priv','fr','zahost-downloadImage','',''),(512,'priv','zh-cn','zahost-downloadImage','',''),(512,'priv','zh-tw','zahost-downloadImage','',''),(512,'manager','de','gogs','',''),(512,'manager','en','gogs','',''),(512,'manager','fr','gogs','',''),(512,'manager','zh-cn','gogs','',''),(512,'manager','zh-tw','gogs','',''),(513,'priv','de','zahost-cancel','',''),(513,'priv','en','zahost-cancel','',''),(513,'priv','fr','zahost-cancel','',''),(513,'priv','zh-cn','zahost-cancel','',''),(513,'priv','zh-tw','zahost-cancel','',''),(513,'manager','de','gitea','',''),(513,'manager','en','gitea','',''),(513,'manager','fr','gitea','',''),(513,'manager','zh-cn','gitea','',''),(513,'manager','zh-tw','gitea','',''),(514,'priv','de','zanode-browse','',''),(514,'priv','en','zanode-browse','',''),(514,'priv','fr','zanode-browse','',''),(514,'priv','zh-cn','zanode-browse','',''),(514,'priv','zh-tw','zanode-browse','',''),(514,'manager','de','sonarqube','',''),(514,'manager','en','sonarqube','',''),(514,'manager','fr','sonarqube','',''),(514,'manager','zh-cn','sonarqube','',''),(514,'manager','zh-tw','sonarqube','',''),(515,'priv','de','zanode-create','',''),(515,'priv','en','zanode-create','',''),(515,'priv','fr','zanode-create','',''),(515,'priv','zh-cn','zanode-create','',''),(515,'priv','zh-tw','zanode-create','',''),(515,'manager','de','app','',''),(515,'manager','en','app','',''),(515,'manager','fr','app','',''),(515,'manager','zh-cn','app','',''),(515,'manager','zh-tw','app','',''),(516,'priv','de','zanode-edit','',''),(516,'priv','en','zanode-edit','',''),(516,'priv','fr','zanode-edit','',''),(516,'priv','zh-cn','zanode-edit','',''),(516,'priv','zh-tw','zanode-edit','',''),(516,'manager','de','pipeline','',''),(516,'manager','en','pipeline','',''),(516,'manager','fr','pipeline','',''),(516,'manager','zh-cn','pipeline','',''),(516,'manager','zh-tw','pipeline','',''),(517,'priv','de','zanode-destroy','',''),(517,'priv','en','zanode-destroy','',''),(517,'priv','fr','zanode-destroy','',''),(517,'priv','zh-cn','zanode-destroy','',''),(517,'priv','zh-tw','zanode-destroy','',''),(517,'manager','de','devopssetting','',''),(517,'manager','en','devopssetting','',''),(517,'manager','fr','devopssetting','',''),(517,'manager','zh-cn','devopssetting','',''),(517,'manager','zh-tw','devopssetting','',''),(518,'priv','de','zanode-reboot','',''),(518,'priv','en','zanode-reboot','',''),(518,'priv','fr','zanode-reboot','',''),(518,'priv','zh-cn','zanode-reboot','',''),(518,'priv','zh-tw','zanode-reboot','',''),(518,'manager','de','search','',''),(518,'manager','en','search','',''),(518,'manager','fr','search','',''),(518,'manager','zh-cn','search','',''),(518,'manager','zh-tw','search','',''),(519,'priv','de','zanode-resume','',''),(519,'priv','en','zanode-resume','',''),(519,'priv','fr','zanode-resume','',''),(519,'priv','zh-cn','zanode-resume','',''),(519,'priv','zh-tw','zanode-resume','',''),(519,'manager','de','tree','',''),(519,'manager','en','tree','',''),(519,'manager','fr','tree','',''),(519,'manager','zh-cn','tree','',''),(519,'manager','zh-tw','tree','',''),(520,'priv','de','zanode-getVNC','',''),(520,'priv','en','zanode-getVNC','',''),(520,'priv','fr','zanode-getVNC','',''),(520,'priv','zh-cn','zanode-getVNC','',''),(520,'priv','zh-tw','zanode-getVNC','',''),(520,'manager','de','file','',''),(520,'manager','en','file','',''),(520,'manager','fr','file','',''),(520,'manager','zh-cn','file','',''),(520,'manager','zh-tw','file','',''),(521,'priv','de','zanode-boot','',''),(521,'priv','en','zanode-boot','',''),(521,'priv','fr','zanode-boot','',''),(521,'priv','zh-cn','zanode-boot','',''),(521,'priv','zh-tw','zanode-boot','',''),(521,'manager','de','misc','',''),(521,'manager','en','misc','',''),(521,'manager','fr','misc','',''),(521,'manager','zh-cn','misc','',''),(521,'manager','zh-tw','misc','',''),(522,'priv','de','zanode-shutdown','',''),(522,'priv','en','zanode-shutdown','',''),(522,'priv','fr','zanode-shutdown','',''),(522,'priv','zh-cn','zanode-shutdown','',''),(522,'priv','zh-tw','zanode-shutdown','',''),(522,'manager','de','approval','',''),(522,'manager','en','approval','',''),(522,'manager','fr','approval','',''),(522,'manager','zh-cn','approval','',''),(522,'manager','zh-tw','approval','',''),(523,'priv','de','zanode-view','',''),(523,'priv','en','zanode-view','',''),(523,'priv','fr','zanode-view','',''),(523,'priv','zh-cn','zanode-view','',''),(523,'priv','zh-tw','zanode-view','',''),(523,'manager','de','workflow','',''),(523,'manager','en','workflow','',''),(523,'manager','fr','workflow','',''),(523,'manager','zh-cn','workflow','',''),(523,'manager','zh-tw','workflow','',''),(524,'priv','de','zanode-createImage','',''),(524,'priv','en','zanode-createImage','',''),(524,'priv','fr','zanode-createImage','',''),(524,'priv','zh-cn','zanode-createImage','',''),(524,'priv','zh-tw','zanode-createImage','',''),(524,'manager','de','workflow','',''),(524,'manager','en','workflow','',''),(524,'manager','fr','workflow','',''),(524,'manager','zh-cn','workflow','',''),(524,'manager','zh-tw','workflow','',''),(525,'priv','de','zanode-browseSnapshot','',''),(525,'priv','en','zanode-browseSnapshot','',''),(525,'priv','fr','zanode-browseSnapshot','',''),(525,'priv','zh-cn','zanode-browseSnapshot','',''),(525,'priv','zh-tw','zanode-browseSnapshot','',''),(525,'manager','de','workflowfield','',''),(525,'manager','en','workflowfield','',''),(525,'manager','fr','workflowfield','',''),(525,'manager','zh-cn','workflowfield','',''),(525,'manager','zh-tw','workflowfield','',''),(526,'priv','de','zanode-createSnapshot','',''),(526,'priv','en','zanode-createSnapshot','',''),(526,'priv','fr','zanode-createSnapshot','',''),(526,'priv','zh-cn','zanode-createSnapshot','',''),(526,'priv','zh-tw','zanode-createSnapshot','',''),(526,'manager','de','workflowaction','',''),(526,'manager','en','workflowaction','',''),(526,'manager','fr','workflowaction','',''),(526,'manager','zh-cn','workflowaction','',''),(526,'manager','zh-tw','workflowaction','',''),(527,'priv','de','zanode-editSnapshot','',''),(527,'priv','en','zanode-editSnapshot','',''),(527,'priv','fr','zanode-editSnapshot','',''),(527,'priv','zh-cn','zanode-editSnapshot','',''),(527,'priv','zh-tw','zanode-editSnapshot','',''),(527,'manager','de','workflowlayout','',''),(527,'manager','en','workflowlayout','',''),(527,'manager','fr','workflowlayout','',''),(527,'manager','zh-cn','workflowlayout','',''),(527,'manager','zh-tw','workflowlayout','',''),(528,'priv','de','zanode-restoreSnapshot','',''),(528,'priv','en','zanode-restoreSnapshot','',''),(528,'priv','fr','zanode-restoreSnapshot','',''),(528,'priv','zh-cn','zanode-restoreSnapshot','',''),(528,'priv','zh-tw','zanode-restoreSnapshot','',''),(528,'manager','de','workflowcondition','',''),(528,'manager','en','workflowcondition','',''),(528,'manager','fr','workflowcondition','',''),(528,'manager','zh-cn','workflowcondition','',''),(528,'manager','zh-tw','workflowcondition','',''),(529,'priv','de','zanode-deleteSnapshot','',''),(529,'priv','en','zanode-deleteSnapshot','',''),(529,'priv','fr','zanode-deleteSnapshot','',''),(529,'priv','zh-cn','zanode-deleteSnapshot','',''),(529,'priv','zh-tw','zanode-deleteSnapshot','',''),(529,'manager','de','workflowlinkage','',''),(529,'manager','en','workflowlinkage','',''),(529,'manager','fr','workflowlinkage','',''),(529,'manager','zh-cn','workflowlinkage','',''),(529,'manager','zh-tw','workflowlinkage','',''),(530,'priv','de','zanode-suspend','',''),(530,'priv','en','zanode-suspend','',''),(530,'priv','fr','zanode-suspend','',''),(530,'priv','zh-cn','zanode-suspend','',''),(530,'priv','zh-tw','zanode-suspend','',''),(530,'manager','de','workflowhook','',''),(530,'manager','en','workflowhook','',''),(530,'manager','fr','workflowhook','',''),(530,'manager','zh-cn','workflowhook','',''),(530,'manager','zh-tw','workflowhook','',''),(531,'manager','de','workflowlabel','',''),(531,'manager','en','workflowlabel','',''),(531,'manager','fr','workflowlabel','',''),(531,'manager','zh-cn','workflowlabel','',''),(531,'manager','zh-tw','workflowlabel','',''),(532,'manager','de','workflowrelation','',''),(532,'manager','en','workflowrelation','',''),(532,'manager','fr','workflowrelation','',''),(532,'manager','zh-cn','workflowrelation','',''),(532,'manager','zh-tw','workflowrelation','',''),(533,'manager','de','workflowreport','',''),(533,'manager','en','workflowreport','',''),(533,'manager','fr','workflowreport','',''),(533,'manager','zh-cn','workflowreport','',''),(533,'manager','zh-tw','workflowreport','',''),(534,'manager','de','workflowdatasource','',''),(534,'manager','en','workflowdatasource','',''),(534,'manager','fr','workflowdatasource','',''),(534,'manager','zh-cn','workflowdatasource','',''),(534,'manager','zh-tw','workflowdatasource','',''),(535,'manager','de','workflowrule','',''),(535,'manager','en','workflowrule','',''),(535,'manager','fr','workflowrule','',''),(535,'manager','zh-cn','workflowrule','',''),(535,'manager','zh-tw','workflowrule','',''),(536,'manager','de','datatable','',''),(536,'manager','en','datatable','',''),(536,'manager','fr','datatable','',''),(536,'manager','zh-cn','datatable','',''),(536,'manager','zh-tw','datatable','',''),(537,'manager','de','generalcomment','',''),(537,'manager','en','generalcomment','',''),(537,'manager','fr','generalcomment','',''),(537,'manager','zh-cn','generalcomment','',''),(537,'manager','zh-tw','generalcomment','',''),(538,'manager','de','generalping','',''),(538,'manager','en','generalping','',''),(538,'manager','fr','generalping','',''),(538,'manager','zh-cn','generalping','',''),(538,'manager','zh-tw','generalping','',''),(539,'manager','de','generaltemplate','',''),(539,'manager','en','generaltemplate','',''),(539,'manager','fr','generaltemplate','',''),(539,'manager','zh-cn','generaltemplate','',''),(539,'manager','zh-tw','generaltemplate','',''),(540,'manager','de','generaleffort','',''),(540,'manager','en','generaleffort','',''),(540,'manager','fr','generaleffort','',''),(540,'manager','zh-cn','generaleffort','',''),(540,'manager','zh-tw','generaleffort','',''),(541,'manager','de','feedback','',''),(541,'manager','en','feedback','',''),(541,'manager','fr','feedback','',''),(541,'manager','zh-cn','feedback','',''),(541,'manager','zh-tw','feedback','',''),(542,'manager','de','feedback','',''),(542,'manager','en','feedback','',''),(542,'manager','fr','feedback','',''),(542,'manager','zh-cn','feedback','',''),(542,'manager','zh-tw','feedback','',''),(543,'manager','de','faq','',''),(543,'manager','en','faq','',''),(543,'manager','fr','faq','',''),(543,'manager','zh-cn','faq','',''),(543,'manager','zh-tw','faq','',''),(544,'manager','de','ticket','',''),(544,'manager','en','ticket','',''),(544,'manager','fr','ticket','',''),(544,'manager','zh-cn','ticket','',''),(544,'manager','zh-tw','ticket','',''),(545,'manager','de','feedbackpriv','',''),(545,'manager','en','feedbackpriv','',''),(545,'manager','fr','feedbackpriv','',''),(545,'manager','zh-cn','feedbackpriv','',''),(545,'manager','zh-tw','feedbackpriv','',''),(546,'manager','de','oa','',''),(546,'manager','en','oa','',''),(546,'manager','fr','oa','',''),(546,'manager','zh-cn','oa','',''),(546,'manager','zh-tw','oa','',''),(547,'manager','de','attend','',''),(547,'manager','en','attend','',''),(547,'manager','fr','attend','',''),(547,'manager','zh-cn','attend','',''),(547,'manager','zh-tw','attend','',''),(548,'manager','de','leave','',''),(548,'manager','en','leave','',''),(548,'manager','fr','leave','',''),(548,'manager','zh-cn','leave','',''),(548,'manager','zh-tw','leave','',''),(549,'manager','de','makeup','',''),(549,'manager','en','makeup','',''),(549,'manager','fr','makeup','',''),(549,'manager','zh-cn','makeup','',''),(549,'manager','zh-tw','makeup','',''),(550,'manager','de','overtime','',''),(550,'manager','en','overtime','',''),(550,'manager','fr','overtime','',''),(550,'manager','zh-cn','overtime','',''),(550,'manager','zh-tw','overtime','',''),(551,'manager','de','lieu','',''),(551,'manager','en','lieu','',''),(551,'manager','fr','lieu','',''),(551,'manager','zh-cn','lieu','',''),(551,'manager','zh-tw','lieu','',''),(552,'manager','de','officeapproval','',''),(552,'manager','en','officeapproval','',''),(552,'manager','fr','officeapproval','',''),(552,'manager','zh-cn','officeapproval','',''),(552,'manager','zh-tw','officeapproval','',''),(553,'manager','de','officesetting','',''),(553,'manager','en','officesetting','',''),(553,'manager','fr','officesetting','',''),(553,'manager','zh-cn','officesetting','',''),(553,'manager','zh-tw','officesetting','',''),(554,'manager','de','datapermission','',''),(554,'manager','en','datapermission','',''),(554,'manager','fr','datapermission','',''),(554,'manager','zh-cn','datapermission','',''),(554,'manager','zh-tw','datapermission','',''),(555,'manager','de','officeexport','',''),(555,'manager','en','officeexport','',''),(555,'manager','fr','officeexport','',''),(555,'manager','zh-cn','officeexport','',''),(555,'manager','zh-tw','officeexport','',''),(556,'manager','de','ops','',''),(556,'manager','en','ops','',''),(556,'manager','fr','ops','',''),(556,'manager','zh-cn','ops','',''),(556,'manager','zh-tw','ops','',''),(557,'manager','de','ops','',''),(557,'manager','en','ops','',''),(557,'manager','fr','ops','',''),(557,'manager','zh-cn','ops','',''),(557,'manager','zh-tw','ops','',''),(558,'priv','de','screen-browse','',''),(558,'priv','en','screen-browse','',''),(558,'priv','fr','screen-browse','',''),(558,'priv','zh-cn','screen-browse','',''),(558,'priv','zh-tw','screen-browse','',''),(558,'manager','de','host','',''),(558,'manager','en','host','',''),(558,'manager','fr','host','',''),(558,'manager','zh-cn','host','',''),(558,'manager','zh-tw','host','',''),(559,'priv','de','screen-view','',''),(559,'priv','en','screen-view','',''),(559,'priv','fr','screen-view','',''),(559,'priv','zh-cn','screen-view','',''),(559,'priv','zh-tw','screen-view','',''),(559,'manager','de','serverroom','',''),(559,'manager','en','serverroom','',''),(559,'manager','fr','serverroom','',''),(559,'manager','zh-cn','serverroom','',''),(559,'manager','zh-tw','serverroom','',''),(560,'manager','de','account','',''),(560,'manager','en','account','',''),(560,'manager','fr','account','',''),(560,'manager','zh-cn','account','',''),(560,'manager','zh-tw','account','',''),(561,'manager','de','domain','',''),(561,'manager','en','domain','',''),(561,'manager','fr','domain','',''),(561,'manager','zh-cn','domain','',''),(561,'manager','zh-tw','domain','',''),(562,'manager','de','service','',''),(562,'manager','en','service','',''),(562,'manager','fr','service','',''),(562,'manager','zh-cn','service','',''),(562,'manager','zh-tw','service','',''),(563,'manager','de','deploy','',''),(563,'manager','en','deploy','',''),(563,'manager','fr','deploy','',''),(563,'manager','zh-cn','deploy','',''),(563,'manager','zh-tw','deploy','',''),(564,'manager','de','conference','',''),(564,'manager','en','conference','',''),(564,'manager','fr','conference','',''),(564,'manager','zh-cn','conference','',''),(564,'manager','zh-tw','conference','',''),(565,'manager','de','traincourse','',''),(565,'manager','en','traincourse','',''),(565,'manager','fr','traincourse','',''),(565,'manager','zh-cn','traincourse','',''),(565,'manager','zh-tw','traincourse','',''),(566,'manager','de','traincourse','',''),(566,'manager','en','traincourse','',''),(566,'manager','fr','traincourse','',''),(566,'manager','zh-cn','traincourse','',''),(566,'manager','zh-tw','traincourse','',''),(595,'priv','de','company-browse','',''),(595,'priv','en','company-browse','',''),(595,'priv','fr','company-browse','',''),(595,'priv','zh-cn','company-browse','',''),(595,'priv','zh-tw','company-browse','',''),(596,'priv','de','company-edit','',''),(596,'priv','en','company-edit','',''),(596,'priv','fr','company-edit','',''),(596,'priv','zh-cn','company-edit','',''),(596,'priv','zh-tw','company-edit','',''),(597,'priv','de','company-dynamic','',''),(597,'priv','en','company-dynamic','',''),(597,'priv','fr','company-dynamic','',''),(597,'priv','zh-cn','company-dynamic','',''),(597,'priv','zh-tw','company-dynamic','',''),(598,'priv','de','company-view','',''),(598,'priv','en','company-view','',''),(598,'priv','fr','company-view','',''),(598,'priv','zh-cn','company-view','',''),(598,'priv','zh-tw','company-view','',''),(599,'priv','de','company-companyTodo','',''),(599,'priv','en','company-companyTodo','',''),(599,'priv','fr','company-companyTodo','',''),(599,'priv','zh-cn','company-companyTodo','',''),(599,'priv','zh-tw','company-companyTodo','',''),(600,'priv','de','company-effortCalendar','',''),(600,'priv','en','company-effortCalendar','',''),(600,'priv','fr','company-effortCalendar','',''),(600,'priv','zh-cn','company-effortCalendar','',''),(600,'priv','zh-tw','company-effortCalendar','',''),(601,'priv','de','company-allTodo','',''),(601,'priv','en','company-allTodo','',''),(601,'priv','fr','company-allTodo','',''),(601,'priv','zh-cn','company-allTodo','',''),(601,'priv','zh-tw','company-allTodo','',''),(602,'priv','de','company-companyEffort','',''),(602,'priv','en','company-companyEffort','',''),(602,'priv','fr','company-companyEffort','',''),(602,'priv','zh-cn','company-companyEffort','',''),(602,'priv','zh-tw','company-companyEffort','',''),(603,'priv','de','company-allEffort','',''),(603,'priv','en','company-allEffort','',''),(603,'priv','fr','company-allEffort','',''),(603,'priv','zh-cn','company-allEffort','',''),(603,'priv','zh-tw','company-allEffort','',''),(604,'priv','de','dept-browse','',''),(604,'priv','en','dept-browse','',''),(604,'priv','fr','dept-browse','',''),(604,'priv','zh-cn','dept-browse','',''),(604,'priv','zh-tw','dept-browse','',''),(605,'priv','de','dept-updateOrder','',''),(605,'priv','en','dept-updateOrder','',''),(605,'priv','fr','dept-updateOrder','',''),(605,'priv','zh-cn','dept-updateOrder','',''),(605,'priv','zh-tw','dept-updateOrder','',''),(606,'priv','de','dept-manageChildAction','',''),(606,'priv','en','dept-manageChildAction','',''),(606,'priv','fr','dept-manageChildAction','',''),(606,'priv','zh-cn','dept-manageChildAction','',''),(606,'priv','zh-tw','dept-manageChildAction','',''),(607,'priv','de','dept-edit','',''),(607,'priv','en','dept-edit','',''),(607,'priv','fr','dept-edit','',''),(607,'priv','zh-cn','dept-edit','',''),(607,'priv','zh-tw','dept-edit','',''),(607,'manager','de','demandpool','',''),(607,'manager','en','demandpool','',''),(607,'manager','fr','demandpool','',''),(607,'manager','zh-cn','demandpool','',''),(607,'manager','zh-tw','demandpool','',''),(608,'priv','de','dept-delete','',''),(608,'priv','en','dept-delete','',''),(608,'priv','fr','dept-delete','',''),(608,'priv','zh-cn','dept-delete','',''),(608,'priv','zh-tw','dept-delete','',''),(608,'manager','de','charter','',''),(608,'manager','en','charter','',''),(608,'manager','fr','charter','',''),(608,'manager','zh-cn','charter','',''),(608,'manager','zh-tw','charter','',''),(609,'priv','de','group-browseAction','',''),(609,'priv','en','group-browseAction','',''),(609,'priv','fr','group-browseAction','',''),(609,'priv','zh-cn','group-browseAction','',''),(609,'priv','zh-tw','group-browseAction','',''),(609,'manager','de','charter','',''),(609,'manager','en','charter','',''),(609,'manager','fr','charter','',''),(609,'manager','zh-cn','charter','',''),(609,'manager','zh-tw','charter','',''),(610,'priv','de','group-create','',''),(610,'priv','en','group-create','',''),(610,'priv','fr','group-create','',''),(610,'priv','zh-cn','group-create','',''),(610,'priv','zh-tw','group-create','',''),(610,'manager','de','demandpool','',''),(610,'manager','en','demandpool','',''),(610,'manager','fr','demandpool','',''),(610,'manager','zh-cn','demandpool','',''),(610,'manager','zh-tw','demandpool','',''),(611,'priv','de','group-edit','',''),(611,'priv','en','group-edit','',''),(611,'priv','fr','group-edit','',''),(611,'priv','zh-cn','group-edit','',''),(611,'priv','zh-tw','group-edit','',''),(611,'manager','de','demand','',''),(611,'manager','en','demand','',''),(611,'manager','fr','demand','',''),(611,'manager','zh-cn','demand','',''),(611,'manager','zh-tw','demand','',''),(612,'priv','de','group-copy','',''),(612,'priv','en','group-copy','',''),(612,'priv','fr','group-copy','',''),(612,'priv','zh-cn','group-copy','',''),(612,'priv','zh-tw','group-copy','',''),(612,'manager','de','roadmap','',''),(612,'manager','en','roadmap','',''),(612,'manager','fr','roadmap','',''),(612,'manager','zh-cn','roadmap','',''),(612,'manager','zh-tw','roadmap','',''),(613,'priv','de','group-delete','',''),(613,'priv','en','group-delete','',''),(613,'priv','fr','group-delete','',''),(613,'priv','zh-cn','group-delete','',''),(613,'priv','zh-tw','group-delete','',''),(614,'priv','de','group-managePriv','',''),(614,'priv','en','group-managePriv','',''),(614,'priv','fr','group-managePriv','',''),(614,'priv','zh-cn','group-managePriv','',''),(614,'priv','zh-tw','group-managePriv','',''),(615,'priv','de','group-manageMember','',''),(615,'priv','en','group-manageMember','',''),(615,'priv','fr','group-manageMember','',''),(615,'priv','zh-cn','group-manageMember','',''),(615,'priv','zh-tw','group-manageMember','',''),(616,'priv','de','group-manageProjectAdmin','',''),(616,'priv','en','group-manageProjectAdmin','',''),(616,'priv','fr','group-manageProjectAdmin','',''),(616,'priv','zh-cn','group-manageProjectAdmin','',''),(616,'priv','zh-tw','group-manageProjectAdmin','',''),(618,'priv','de','group-manageView','',''),(618,'priv','en','group-manageView','',''),(618,'priv','fr','group-manageView','',''),(618,'priv','zh-cn','group-manageView','',''),(618,'priv','zh-tw','group-manageView','',''),(624,'priv','de','user-create','',''),(624,'priv','en','user-create','',''),(624,'priv','fr','user-create','',''),(624,'priv','zh-cn','user-create','',''),(624,'priv','zh-tw','user-create','',''),(625,'priv','de','user-batchCreate','',''),(625,'priv','en','user-batchCreate','',''),(625,'priv','fr','user-batchCreate','',''),(625,'priv','zh-cn','user-batchCreate','',''),(625,'priv','zh-tw','user-batchCreate','',''),(626,'priv','de','user-view','',''),(626,'priv','en','user-view','',''),(626,'priv','fr','user-view','',''),(626,'priv','zh-cn','user-view','',''),(626,'priv','zh-tw','user-view','',''),(627,'priv','de','user-edit','',''),(627,'priv','en','user-edit','',''),(627,'priv','fr','user-edit','',''),(627,'priv','zh-cn','user-edit','',''),(627,'priv','zh-tw','user-edit','',''),(628,'priv','de','user-unlock','',''),(628,'priv','en','user-unlock','',''),(628,'priv','fr','user-unlock','',''),(628,'priv','zh-cn','user-unlock','',''),(628,'priv','zh-tw','user-unlock','',''),(629,'priv','de','user-delete','',''),(629,'priv','en','user-delete','',''),(629,'priv','fr','user-delete','',''),(629,'priv','zh-cn','user-delete','',''),(629,'priv','zh-tw','user-delete','',''),(630,'priv','de','user-todo','',''),(630,'priv','en','user-todo','',''),(630,'priv','fr','user-todo','',''),(630,'priv','zh-cn','user-todo','',''),(630,'priv','zh-tw','user-todo','',''),(631,'priv','de','user-task','',''),(631,'priv','en','user-task','',''),(631,'priv','fr','user-task','',''),(631,'priv','zh-cn','user-task','',''),(631,'priv','zh-tw','user-task','',''),(632,'priv','de','user-bug','',''),(632,'priv','en','user-bug','',''),(632,'priv','fr','user-bug','',''),(632,'priv','zh-cn','user-bug','',''),(632,'priv','zh-tw','user-bug','',''),(633,'priv','de','user-dynamic','',''),(633,'priv','en','user-dynamic','',''),(633,'priv','fr','user-dynamic','',''),(633,'priv','zh-cn','user-dynamic','',''),(633,'priv','zh-tw','user-dynamic','',''),(635,'priv','de','user-profile','',''),(635,'priv','en','user-profile','',''),(635,'priv','fr','user-profile','',''),(635,'priv','zh-cn','user-profile','',''),(635,'priv','zh-tw','user-profile','',''),(635,'manager','zh-cn','','浏览需求池',''),(636,'priv','de','user-batchEdit','',''),(636,'priv','en','user-batchEdit','',''),(636,'priv','fr','user-batchEdit','',''),(636,'priv','zh-cn','user-batchEdit','',''),(636,'priv','zh-tw','user-batchEdit','',''),(636,'manager','zh-cn','','浏览立项',''),(637,'priv','de','user-unbind','',''),(637,'priv','en','user-unbind','',''),(637,'priv','fr','user-unbind','',''),(637,'priv','zh-cn','user-unbind','',''),(637,'priv','zh-tw','user-unbind','',''),(637,'manager','zh-cn','','创建维护需求池',''),(638,'priv','de','user-setPublicTemplate','',''),(638,'priv','en','user-setPublicTemplate','',''),(638,'priv','fr','user-setPublicTemplate','',''),(638,'priv','zh-cn','user-setPublicTemplate','',''),(638,'priv','zh-tw','user-setPublicTemplate','',''),(638,'manager','zh-cn','','创建维护立项',''),(639,'priv','de','user-export','',''),(639,'priv','en','user-export','',''),(639,'priv','fr','user-export','',''),(639,'priv','zh-cn','user-export','',''),(639,'priv','zh-tw','user-export','',''),(639,'manager','zh-cn','','立项审批',''),(640,'priv','de','user-exportTemplate','',''),(640,'priv','en','user-exportTemplate','',''),(640,'priv','fr','user-exportTemplate','',''),(640,'priv','zh-cn','user-exportTemplate','',''),(640,'priv','zh-tw','user-exportTemplate','',''),(640,'manager','zh-cn','','浏览需求',''),(641,'priv','de','user-story','',''),(641,'priv','en','user-story','',''),(641,'priv','fr','user-story','',''),(641,'priv','zh-cn','user-story','',''),(641,'priv','zh-tw','user-story','',''),(641,'manager','zh-cn','','创建维护需求',''),(642,'priv','de','user-testTask','',''),(642,'priv','en','user-testTask','',''),(642,'priv','fr','user-testTask','',''),(642,'priv','zh-cn','user-testTask','',''),(642,'priv','zh-tw','user-testTask','',''),(642,'manager','zh-cn','','评审需求',''),(643,'priv','de','user-testCase','',''),(643,'priv','en','user-testCase','',''),(643,'priv','fr','user-testCase','',''),(643,'priv','zh-cn','user-testCase','',''),(643,'priv','zh-tw','user-testCase','',''),(643,'manager','zh-cn','','导入导出需求',''),(644,'priv','de','user-execution','',''),(644,'priv','en','user-execution','',''),(644,'priv','fr','user-execution','',''),(644,'priv','zh-cn','user-execution','',''),(644,'priv','zh-tw','user-execution','',''),(644,'manager','zh-cn','','删除需求',''),(645,'priv','de','user-effortcalendar','',''),(645,'priv','en','user-effortcalendar','',''),(645,'priv','fr','user-effortcalendar','',''),(645,'priv','zh-cn','user-effortcalendar','',''),(645,'priv','zh-tw','user-effortcalendar','',''),(645,'manager','zh-cn','','后台',''),(646,'priv','de','user-todocalendar','',''),(646,'priv','en','user-todocalendar','',''),(646,'priv','fr','user-todocalendar','',''),(646,'priv','zh-cn','user-todocalendar','',''),(646,'priv','zh-tw','user-todocalendar','',''),(646,'manager','zh-cn','','浏览产品路标',''),(647,'priv','de','user-effort','',''),(647,'priv','en','user-effort','',''),(647,'priv','fr','user-effort','',''),(647,'priv','zh-cn','user-effort','',''),(647,'priv','zh-tw','user-effort','',''),(647,'manager','zh-cn','','创建维护产品路标',''),(648,'priv','de','user-import','',''),(648,'priv','en','user-import','',''),(648,'priv','fr','user-import','',''),(648,'priv','zh-cn','user-import','',''),(648,'priv','zh-tw','user-import','',''),(648,'manager','zh-cn','','删除产品路标',''),(649,'priv','de','user-importLDAP','',''),(649,'priv','en','user-importLDAP','',''),(649,'priv','fr','user-importLDAP','',''),(649,'priv','zh-cn','user-importLDAP','',''),(649,'priv','zh-tw','user-importLDAP','',''),(649,'manager','zh-cn','','删除需求池',''),(650,'priv','de','user-issue','',''),(650,'priv','en','user-issue','',''),(650,'priv','fr','user-issue','',''),(650,'priv','zh-cn','user-issue','',''),(650,'priv','zh-tw','user-issue','',''),(650,'manager','zh-cn','','导出数据表',''),(651,'priv','de','user-risk','',''),(651,'priv','en','user-risk','',''),(651,'priv','fr','user-risk','',''),(651,'priv','zh-cn','user-risk','',''),(651,'priv','zh-tw','user-risk','',''),(652,'priv','de','admin-index','',''),(652,'priv','en','admin-index','',''),(652,'priv','fr','admin-index','',''),(652,'priv','zh-cn','admin-index','',''),(652,'priv','zh-tw','admin-index','',''),(654,'priv','de','admin-checkWeak','',''),(654,'priv','en','admin-checkWeak','',''),(654,'priv','fr','admin-checkWeak','',''),(654,'priv','zh-cn','admin-checkWeak','',''),(654,'priv','zh-tw','admin-checkWeak','',''),(655,'priv','de','admin-ssoAction','',''),(655,'priv','en','admin-ssoAction','',''),(655,'priv','fr','admin-ssoAction','',''),(655,'priv','zh-cn','admin-ssoAction','',''),(655,'priv','zh-tw','admin-ssoAction','',''),(656,'priv','de','admin-register','',''),(656,'priv','en','admin-register','',''),(656,'priv','fr','admin-register','',''),(656,'priv','zh-cn','admin-register','',''),(656,'priv','zh-tw','admin-register','',''),(657,'priv','de','admin-xuanxuan','',''),(657,'priv','en','admin-xuanxuan','',''),(657,'priv','fr','admin-xuanxuan','',''),(657,'priv','zh-cn','admin-xuanxuan','',''),(657,'priv','zh-tw','admin-xuanxuan','',''),(659,'priv','de','admin-resetPWDSetting','',''),(659,'priv','en','admin-resetPWDSetting','',''),(659,'priv','fr','admin-resetPWDSetting','',''),(659,'priv','zh-cn','admin-resetPWDSetting','',''),(659,'priv','zh-tw','admin-resetPWDSetting','',''),(660,'priv','de','admin-tableEngine','',''),(660,'priv','en','admin-tableEngine','',''),(660,'priv','fr','admin-tableEngine','',''),(660,'priv','zh-cn','admin-tableEngine','',''),(660,'priv','zh-tw','admin-tableEngine','',''),(661,'priv','de','admin-safeIndex','',''),(661,'priv','en','admin-safeIndex','',''),(661,'priv','fr','admin-safeIndex','',''),(661,'priv','zh-cn','admin-safeIndex','',''),(661,'priv','zh-tw','admin-safeIndex','',''),(662,'priv','de','stage-browse','',''),(662,'priv','en','stage-browse','',''),(662,'priv','fr','stage-browse','',''),(662,'priv','zh-cn','stage-browse','',''),(662,'priv','zh-tw','stage-browse','',''),(663,'priv','de','stage-create','',''),(663,'priv','en','stage-create','',''),(663,'priv','fr','stage-create','',''),(663,'priv','zh-cn','stage-create','',''),(663,'priv','zh-tw','stage-create','',''),(664,'priv','de','stage-batchCreate','',''),(664,'priv','en','stage-batchCreate','',''),(664,'priv','fr','stage-batchCreate','',''),(664,'priv','zh-cn','stage-batchCreate','',''),(664,'priv','zh-tw','stage-batchCreate','',''),(665,'priv','de','stage-edit','',''),(665,'priv','en','stage-edit','',''),(665,'priv','fr','stage-edit','',''),(665,'priv','zh-cn','stage-edit','',''),(665,'priv','zh-tw','stage-edit','',''),(666,'priv','de','stage-setType','',''),(666,'priv','en','stage-setType','',''),(666,'priv','fr','stage-setType','',''),(666,'priv','zh-cn','stage-setType','',''),(666,'priv','zh-tw','stage-setType','',''),(667,'priv','de','stage-delete','',''),(667,'priv','en','stage-delete','',''),(667,'priv','fr','stage-delete','',''),(667,'priv','zh-cn','stage-delete','',''),(667,'priv','zh-tw','stage-delete','',''),(668,'priv','de','stage-plusBrowse','',''),(668,'priv','en','stage-plusBrowse','',''),(668,'priv','fr','stage-plusBrowse','',''),(668,'priv','zh-cn','stage-plusBrowse','',''),(668,'priv','zh-tw','stage-plusBrowse','',''),(669,'priv','de','extension-browseAction','',''),(669,'priv','en','extension-browseAction','',''),(669,'priv','fr','extension-browseAction','',''),(669,'priv','zh-cn','extension-browseAction','',''),(669,'priv','zh-tw','extension-browseAction','',''),(670,'priv','de','extension-obtain','',''),(670,'priv','en','extension-obtain','',''),(670,'priv','fr','extension-obtain','',''),(670,'priv','zh-cn','extension-obtain','',''),(670,'priv','zh-tw','extension-obtain','',''),(671,'priv','de','extension-structureAction','',''),(671,'priv','en','extension-structureAction','',''),(671,'priv','fr','extension-structureAction','',''),(671,'priv','zh-cn','extension-structureAction','',''),(671,'priv','zh-tw','extension-structureAction','',''),(672,'priv','de','extension-install','',''),(672,'priv','en','extension-install','',''),(672,'priv','fr','extension-install','',''),(672,'priv','zh-cn','extension-install','',''),(672,'priv','zh-tw','extension-install','',''),(673,'priv','de','extension-uninstallAction','',''),(673,'priv','en','extension-uninstallAction','',''),(673,'priv','fr','extension-uninstallAction','',''),(673,'priv','zh-cn','extension-uninstallAction','',''),(673,'priv','zh-tw','extension-uninstallAction','',''),(674,'priv','de','extension-activateAction','',''),(674,'priv','en','extension-activateAction','',''),(674,'priv','fr','extension-activateAction','',''),(674,'priv','zh-cn','extension-activateAction','',''),(674,'priv','zh-tw','extension-activateAction','',''),(675,'priv','de','extension-deactivateAction','',''),(675,'priv','en','extension-deactivateAction','',''),(675,'priv','fr','extension-deactivateAction','',''),(675,'priv','zh-cn','extension-deactivateAction','',''),(675,'priv','zh-tw','extension-deactivateAction','',''),(676,'priv','de','extension-upload','',''),(676,'priv','en','extension-upload','',''),(676,'priv','fr','extension-upload','',''),(676,'priv','zh-cn','extension-upload','',''),(676,'priv','zh-tw','extension-upload','',''),(677,'priv','de','extension-eraseAction','',''),(677,'priv','en','extension-eraseAction','',''),(677,'priv','fr','extension-eraseAction','',''),(677,'priv','zh-cn','extension-eraseAction','',''),(677,'priv','zh-tw','extension-eraseAction','',''),(678,'priv','de','extension-upgrade','',''),(678,'priv','en','extension-upgrade','',''),(678,'priv','fr','extension-upgrade','',''),(678,'priv','zh-cn','extension-upgrade','',''),(678,'priv','zh-tw','extension-upgrade','',''),(680,'priv','de','custom-set','',''),(680,'priv','en','custom-set','',''),(680,'priv','fr','custom-set','',''),(680,'priv','zh-cn','custom-set','',''),(680,'priv','zh-tw','custom-set','',''),(681,'priv','de','custom-productName','',''),(681,'priv','en','custom-productName','',''),(681,'priv','fr','custom-productName','',''),(681,'priv','zh-cn','custom-productName','',''),(681,'priv','zh-tw','custom-productName','',''),(682,'priv','de','custom-executionCommon','',''),(682,'priv','en','custom-executionCommon','',''),(682,'priv','fr','custom-executionCommon','',''),(682,'priv','zh-cn','custom-executionCommon','',''),(682,'priv','zh-tw','custom-executionCommon','',''),(683,'priv','de','custom-required','',''),(683,'priv','en','custom-required','',''),(683,'priv','fr','custom-required','',''),(683,'priv','zh-cn','custom-required','',''),(683,'priv','zh-tw','custom-required','',''),(684,'priv','de','custom-restore','',''),(684,'priv','en','custom-restore','',''),(684,'priv','fr','custom-restore','',''),(684,'priv','zh-cn','custom-restore','',''),(684,'priv','zh-tw','custom-restore','',''),(685,'priv','de','custom-flow','',''),(685,'priv','en','custom-flow','',''),(685,'priv','fr','custom-flow','',''),(685,'priv','zh-cn','custom-flow','',''),(685,'priv','zh-tw','custom-flow','',''),(687,'priv','de','custom-timezone','',''),(687,'priv','en','custom-timezone','',''),(687,'priv','fr','custom-timezone','',''),(687,'priv','zh-cn','custom-timezone','',''),(687,'priv','zh-tw','custom-timezone','',''),(688,'priv','de','custom-estimate','',''),(688,'priv','en','custom-estimate','',''),(688,'priv','fr','custom-estimate','',''),(688,'priv','zh-cn','custom-estimate','',''),(688,'priv','zh-tw','custom-estimate','',''),(689,'priv','de','custom-editStoryConcept','',''),(689,'priv','en','custom-editStoryConcept','',''),(689,'priv','fr','custom-editStoryConcept','',''),(689,'priv','zh-cn','custom-editStoryConcept','',''),(689,'priv','zh-tw','custom-editStoryConcept','',''),(690,'priv','de','custom-browseStoryConcept','',''),(690,'priv','en','custom-browseStoryConcept','',''),(690,'priv','fr','custom-browseStoryConcept','',''),(690,'priv','zh-cn','custom-browseStoryConcept','',''),(690,'priv','zh-tw','custom-browseStoryConcept','',''),(691,'priv','de','custom-setDefaultConcept','',''),(691,'priv','en','custom-setDefaultConcept','',''),(691,'priv','fr','custom-setDefaultConcept','',''),(691,'priv','zh-cn','custom-setDefaultConcept','',''),(691,'priv','zh-tw','custom-setDefaultConcept','',''),(692,'priv','de','custom-deleteStoryConcept','',''),(692,'priv','en','custom-deleteStoryConcept','',''),(692,'priv','fr','custom-deleteStoryConcept','',''),(692,'priv','zh-cn','custom-deleteStoryConcept','',''),(692,'priv','zh-tw','custom-deleteStoryConcept','',''),(693,'priv','de','custom-kanban','',''),(693,'priv','en','custom-kanban','',''),(693,'priv','fr','custom-kanban','',''),(693,'priv','zh-cn','custom-kanban','',''),(693,'priv','zh-tw','custom-kanban','',''),(694,'priv','de','custom-code','',''),(694,'priv','en','custom-code','',''),(694,'priv','fr','custom-code','',''),(694,'priv','zh-cn','custom-code','',''),(694,'priv','zh-tw','custom-code','',''),(695,'priv','de','custom-hours','',''),(695,'priv','en','custom-hours','',''),(695,'priv','fr','custom-hours','',''),(695,'priv','zh-cn','custom-hours','',''),(695,'priv','zh-tw','custom-hours','',''),(696,'priv','de','custom-percent','',''),(696,'priv','en','custom-percent','',''),(696,'priv','fr','custom-percent','',''),(696,'priv','zh-cn','custom-percent','',''),(696,'priv','zh-tw','custom-percent','',''),(697,'priv','de','custom-setStoryConcept','',''),(697,'priv','en','custom-setStoryConcept','',''),(697,'priv','fr','custom-setStoryConcept','',''),(697,'priv','zh-cn','custom-setStoryConcept','',''),(697,'priv','zh-tw','custom-setStoryConcept','',''),(698,'priv','de','custom-libreOffice','',''),(698,'priv','en','custom-libreOffice','',''),(698,'priv','fr','custom-libreOffice','',''),(698,'priv','zh-cn','custom-libreOffice','',''),(698,'priv','zh-tw','custom-libreOffice','',''),(699,'priv','de','action-trashAction','',''),(699,'priv','en','action-trashAction','',''),(699,'priv','fr','action-trashAction','',''),(699,'priv','zh-cn','action-trashAction','',''),(699,'priv','zh-tw','action-trashAction','',''),(700,'priv','de','action-undeleteAction','',''),(700,'priv','en','action-undeleteAction','',''),(700,'priv','fr','action-undeleteAction','',''),(700,'priv','zh-cn','action-undeleteAction','',''),(700,'priv','zh-tw','action-undeleteAction','',''),(701,'priv','de','action-hideOneAction','',''),(701,'priv','en','action-hideOneAction','',''),(701,'priv','fr','action-hideOneAction','',''),(701,'priv','zh-cn','action-hideOneAction','',''),(701,'priv','zh-tw','action-hideOneAction','',''),(702,'priv','de','action-hideAll','',''),(702,'priv','en','action-hideAll','',''),(702,'priv','fr','action-hideAll','',''),(702,'priv','zh-cn','action-hideAll','',''),(702,'priv','zh-tw','action-hideAll','',''),(703,'priv','de','action-comment','',''),(703,'priv','en','action-comment','',''),(703,'priv','fr','action-comment','',''),(703,'priv','zh-cn','action-comment','',''),(703,'priv','zh-tw','action-comment','',''),(704,'priv','de','action-editComment','',''),(704,'priv','en','action-editComment','',''),(704,'priv','fr','action-editComment','',''),(704,'priv','zh-cn','action-editComment','',''),(704,'priv','zh-tw','action-editComment','',''),(705,'priv','de','mail-index','',''),(705,'priv','en','mail-index','',''),(705,'priv','fr','mail-index','',''),(705,'priv','zh-cn','mail-index','',''),(705,'priv','zh-tw','mail-index','',''),(706,'priv','de','mail-detectAction','',''),(706,'priv','en','mail-detectAction','',''),(706,'priv','fr','mail-detectAction','',''),(706,'priv','zh-cn','mail-detectAction','',''),(706,'priv','zh-tw','mail-detectAction','',''),(707,'priv','de','mail-edit','',''),(707,'priv','en','mail-edit','',''),(707,'priv','fr','mail-edit','',''),(707,'priv','zh-cn','mail-edit','',''),(707,'priv','zh-tw','mail-edit','',''),(708,'priv','de','mail-saveAction','',''),(708,'priv','en','mail-saveAction','',''),(708,'priv','fr','mail-saveAction','',''),(708,'priv','zh-cn','mail-saveAction','',''),(708,'priv','zh-tw','mail-saveAction','',''),(709,'priv','de','mail-test','',''),(709,'priv','en','mail-test','',''),(709,'priv','fr','mail-test','',''),(709,'priv','zh-cn','mail-test','',''),(709,'priv','zh-tw','mail-test','',''),(710,'priv','de','mail-resetAction','',''),(710,'priv','en','mail-resetAction','',''),(710,'priv','fr','mail-resetAction','',''),(710,'priv','zh-cn','mail-resetAction','',''),(710,'priv','zh-tw','mail-resetAction','',''),(711,'priv','de','mail-browse','',''),(711,'priv','en','mail-browse','',''),(711,'priv','fr','mail-browse','',''),(711,'priv','zh-cn','mail-browse','',''),(711,'priv','zh-tw','mail-browse','',''),(712,'priv','de','mail-delete','',''),(712,'priv','en','mail-delete','',''),(712,'priv','fr','mail-delete','',''),(712,'priv','zh-cn','mail-delete','',''),(712,'priv','zh-tw','mail-delete','',''),(713,'priv','de','mail-batchDelete','',''),(713,'priv','en','mail-batchDelete','',''),(713,'priv','fr','mail-batchDelete','',''),(713,'priv','zh-cn','mail-batchDelete','',''),(713,'priv','zh-tw','mail-batchDelete','',''),(714,'priv','de','mail-resendAction','',''),(714,'priv','en','mail-resendAction','',''),(714,'priv','fr','mail-resendAction','',''),(714,'priv','zh-cn','mail-resendAction','',''),(714,'priv','zh-tw','mail-resendAction','',''),(715,'priv','de','sms-index','',''),(715,'priv','en','sms-index','',''),(715,'priv','fr','sms-index','',''),(715,'priv','zh-cn','sms-index','',''),(715,'priv','zh-tw','sms-index','',''),(716,'priv','de','sms-test','',''),(716,'priv','en','sms-test','',''),(716,'priv','fr','sms-test','',''),(716,'priv','zh-cn','sms-test','',''),(716,'priv','zh-tw','sms-test','',''),(717,'priv','de','sms-reset','',''),(717,'priv','en','sms-reset','',''),(717,'priv','fr','sms-reset','',''),(717,'priv','zh-cn','sms-reset','',''),(717,'priv','zh-tw','sms-reset','',''),(718,'priv','de','svn-diff','',''),(718,'priv','en','svn-diff','',''),(718,'priv','fr','svn-diff','',''),(718,'priv','zh-cn','svn-diff','',''),(718,'priv','zh-tw','svn-diff','',''),(719,'priv','de','svn-cat','',''),(719,'priv','en','svn-cat','',''),(719,'priv','fr','svn-cat','',''),(719,'priv','zh-cn','svn-cat','',''),(719,'priv','zh-tw','svn-cat','',''),(720,'priv','de','svn-apiSync','',''),(720,'priv','en','svn-apiSync','',''),(720,'priv','fr','svn-apiSync','',''),(720,'priv','zh-cn','svn-apiSync','',''),(720,'priv','zh-tw','svn-apiSync','',''),(721,'priv','de','git-diff','',''),(721,'priv','en','git-diff','',''),(721,'priv','fr','git-diff','',''),(721,'priv','zh-cn','git-diff','',''),(721,'priv','zh-tw','git-diff','',''),(722,'priv','de','git-cat','',''),(722,'priv','en','git-cat','',''),(722,'priv','fr','git-cat','',''),(722,'priv','zh-cn','git-cat','',''),(722,'priv','zh-tw','git-cat','',''),(723,'priv','de','git-apiSync','',''),(723,'priv','en','git-apiSync','',''),(723,'priv','fr','git-apiSync','',''),(723,'priv','zh-cn','git-apiSync','',''),(723,'priv','zh-tw','git-apiSync','',''),(724,'priv','de','search-buildForm','',''),(724,'priv','en','search-buildForm','',''),(724,'priv','fr','search-buildForm','',''),(724,'priv','zh-cn','search-buildForm','',''),(724,'priv','zh-tw','search-buildForm','',''),(725,'priv','de','search-buildQuery','',''),(725,'priv','en','search-buildQuery','',''),(725,'priv','fr','search-buildQuery','',''),(725,'priv','zh-cn','search-buildQuery','',''),(725,'priv','zh-tw','search-buildQuery','',''),(726,'priv','de','search-saveQuery','',''),(726,'priv','en','search-saveQuery','',''),(726,'priv','fr','search-saveQuery','',''),(726,'priv','zh-cn','search-saveQuery','',''),(726,'priv','zh-tw','search-saveQuery','',''),(727,'priv','de','search-deleteQuery','',''),(727,'priv','en','search-deleteQuery','',''),(727,'priv','fr','search-deleteQuery','',''),(727,'priv','zh-cn','search-deleteQuery','',''),(727,'priv','zh-tw','search-deleteQuery','',''),(728,'priv','de','search-select','',''),(728,'priv','en','search-select','',''),(728,'priv','fr','search-select','',''),(728,'priv','zh-cn','search-select','',''),(728,'priv','zh-tw','search-select','',''),(729,'priv','de','search-index','',''),(729,'priv','en','search-index','',''),(729,'priv','fr','search-index','',''),(729,'priv','zh-cn','search-index','',''),(729,'priv','zh-tw','search-index','',''),(730,'priv','de','search-buildIndex','',''),(730,'priv','en','search-buildIndex','',''),(730,'priv','fr','search-buildIndex','',''),(730,'priv','zh-cn','search-buildIndex','',''),(730,'priv','zh-tw','search-buildIndex','',''),(731,'priv','de','tree-browse','',''),(731,'priv','en','tree-browse','',''),(731,'priv','fr','tree-browse','',''),(731,'priv','zh-cn','tree-browse','',''),(731,'priv','zh-tw','tree-browse','',''),(732,'priv','de','tree-browseTask','',''),(732,'priv','en','tree-browseTask','',''),(732,'priv','fr','tree-browseTask','',''),(732,'priv','zh-cn','tree-browseTask','',''),(732,'priv','zh-tw','tree-browseTask','',''),(733,'priv','de','tree-updateOrder','',''),(733,'priv','en','tree-updateOrder','',''),(733,'priv','fr','tree-updateOrder','',''),(733,'priv','zh-cn','tree-updateOrder','',''),(733,'priv','zh-tw','tree-updateOrder','',''),(734,'priv','de','tree-manageChild','',''),(734,'priv','en','tree-manageChild','',''),(734,'priv','fr','tree-manageChild','',''),(734,'priv','zh-cn','tree-manageChild','',''),(734,'priv','zh-tw','tree-manageChild','',''),(735,'priv','de','tree-edit','',''),(735,'priv','en','tree-edit','',''),(735,'priv','fr','tree-edit','',''),(735,'priv','zh-cn','tree-edit','',''),(735,'priv','zh-tw','tree-edit','',''),(736,'priv','de','tree-delete','',''),(736,'priv','en','tree-delete','',''),(736,'priv','fr','tree-delete','',''),(736,'priv','zh-cn','tree-delete','',''),(736,'priv','zh-tw','tree-delete','',''),(737,'priv','de','tree-editHost','',''),(737,'priv','en','tree-editHost','',''),(737,'priv','fr','tree-editHost','',''),(737,'priv','zh-cn','tree-editHost','',''),(737,'priv','zh-tw','tree-editHost','',''),(738,'priv','de','tree-fix','',''),(738,'priv','en','tree-fix','',''),(738,'priv','fr','tree-fix','',''),(738,'priv','zh-cn','tree-fix','',''),(738,'priv','zh-tw','tree-fix','',''),(739,'priv','de','tree-groupMaintenance','',''),(739,'priv','en','tree-groupMaintenance','',''),(739,'priv','fr','tree-groupMaintenance','',''),(739,'priv','zh-cn','tree-groupMaintenance','',''),(739,'priv','zh-tw','tree-groupMaintenance','',''),(758,'priv','de','file-download','',''),(758,'priv','en','file-download','',''),(758,'priv','fr','file-download','',''),(758,'priv','zh-cn','file-download','',''),(758,'priv','zh-tw','file-download','',''),(759,'priv','de','file-edit','',''),(759,'priv','en','file-edit','',''),(759,'priv','fr','file-edit','',''),(759,'priv','zh-cn','file-edit','',''),(759,'priv','zh-tw','file-edit','',''),(760,'priv','de','file-delete','',''),(760,'priv','en','file-delete','',''),(760,'priv','fr','file-delete','',''),(760,'priv','zh-cn','file-delete','',''),(760,'priv','zh-tw','file-delete','',''),(761,'priv','de','file-uploadImages','',''),(761,'priv','en','file-uploadImages','',''),(761,'priv','fr','file-uploadImages','',''),(761,'priv','zh-cn','file-uploadImages','',''),(761,'priv','zh-tw','file-uploadImages','',''),(762,'priv','de','file-setPublic','',''),(762,'priv','en','file-setPublic','',''),(762,'priv','fr','file-setPublic','',''),(762,'priv','zh-cn','file-setPublic','',''),(762,'priv','zh-tw','file-setPublic','',''),(763,'priv','de','misc-ping','',''),(763,'priv','en','misc-ping','',''),(763,'priv','fr','misc-ping','',''),(763,'priv','zh-cn','misc-ping','',''),(763,'priv','zh-tw','misc-ping','',''),(764,'priv','de','backup-index','',''),(764,'priv','en','backup-index','',''),(764,'priv','fr','backup-index','',''),(764,'priv','zh-cn','backup-index','',''),(764,'priv','zh-tw','backup-index','',''),(765,'priv','de','backup-backup','',''),(765,'priv','en','backup-backup','',''),(765,'priv','fr','backup-backup','',''),(765,'priv','zh-cn','backup-backup','',''),(765,'priv','zh-tw','backup-backup','',''),(766,'priv','de','backup-restoreAction','',''),(766,'priv','en','backup-restoreAction','',''),(766,'priv','fr','backup-restoreAction','',''),(766,'priv','zh-cn','backup-restoreAction','',''),(766,'priv','zh-tw','backup-restoreAction','',''),(767,'priv','de','backup-delete','',''),(767,'priv','en','backup-delete','',''),(767,'priv','fr','backup-delete','',''),(767,'priv','zh-cn','backup-delete','',''),(767,'priv','zh-tw','backup-delete','',''),(768,'priv','de','backup-settingAction','',''),(768,'priv','en','backup-settingAction','',''),(768,'priv','fr','backup-settingAction','',''),(768,'priv','zh-cn','backup-settingAction','',''),(768,'priv','zh-tw','backup-settingAction','',''),(769,'priv','de','backup-rmPHPHeader','',''),(769,'priv','en','backup-rmPHPHeader','',''),(769,'priv','fr','backup-rmPHPHeader','',''),(769,'priv','zh-cn','backup-rmPHPHeader','',''),(769,'priv','zh-tw','backup-rmPHPHeader','',''),(770,'priv','de','backup-change','',''),(770,'priv','en','backup-change','',''),(770,'priv','fr','backup-change','',''),(770,'priv','zh-cn','backup-change','',''),(770,'priv','zh-tw','backup-change','',''),(771,'priv','de','cron-index','',''),(771,'priv','en','cron-index','',''),(771,'priv','fr','cron-index','',''),(771,'priv','zh-cn','cron-index','',''),(771,'priv','zh-tw','cron-index','',''),(772,'priv','de','cron-turnon','',''),(772,'priv','en','cron-turnon','',''),(772,'priv','fr','cron-turnon','',''),(772,'priv','zh-cn','cron-turnon','',''),(772,'priv','zh-tw','cron-turnon','',''),(773,'priv','de','cron-createAction','',''),(773,'priv','en','cron-createAction','',''),(773,'priv','fr','cron-createAction','',''),(773,'priv','zh-cn','cron-createAction','',''),(773,'priv','zh-tw','cron-createAction','',''),(774,'priv','de','cron-edit','',''),(774,'priv','en','cron-edit','',''),(774,'priv','fr','cron-edit','',''),(774,'priv','zh-cn','cron-edit','',''),(774,'priv','zh-tw','cron-edit','',''),(775,'priv','de','cron-toggle','',''),(775,'priv','en','cron-toggle','',''),(775,'priv','fr','cron-toggle','',''),(775,'priv','zh-cn','cron-toggle','',''),(775,'priv','zh-tw','cron-toggle','',''),(776,'priv','de','cron-delete','',''),(776,'priv','en','cron-delete','',''),(776,'priv','fr','cron-delete','',''),(776,'priv','zh-cn','cron-delete','',''),(776,'priv','zh-tw','cron-delete','',''),(777,'priv','de','cron-restart','',''),(777,'priv','en','cron-restart','',''),(777,'priv','fr','cron-restart','',''),(777,'priv','zh-cn','cron-restart','',''),(777,'priv','zh-tw','cron-restart','',''),(778,'priv','de','dev-api','',''),(778,'priv','en','dev-api','',''),(778,'priv','fr','dev-api','',''),(778,'priv','zh-cn','dev-api','',''),(778,'priv','zh-tw','dev-api','',''),(779,'priv','de','dev-db','',''),(779,'priv','en','dev-db','',''),(779,'priv','fr','dev-db','',''),(779,'priv','zh-cn','dev-db','',''),(779,'priv','zh-tw','dev-db','',''),(781,'priv','de','editor-index','',''),(781,'priv','en','editor-index','',''),(781,'priv','fr','editor-index','',''),(781,'priv','zh-cn','editor-index','',''),(781,'priv','zh-tw','editor-index','',''),(782,'priv','de','editor-extend','',''),(782,'priv','en','editor-extend','',''),(782,'priv','fr','editor-extend','',''),(782,'priv','zh-cn','editor-extend','',''),(782,'priv','zh-tw','editor-extend','',''),(783,'priv','de','editor-edit','',''),(783,'priv','en','editor-edit','',''),(783,'priv','fr','editor-edit','',''),(783,'priv','zh-cn','editor-edit','',''),(783,'priv','zh-tw','editor-edit','',''),(784,'priv','de','editor-newPage','',''),(784,'priv','en','editor-newPage','',''),(784,'priv','fr','editor-newPage','',''),(784,'priv','zh-cn','editor-newPage','',''),(784,'priv','zh-tw','editor-newPage','',''),(785,'priv','de','editor-save','',''),(785,'priv','en','editor-save','',''),(785,'priv','fr','editor-save','',''),(785,'priv','zh-cn','editor-save','',''),(785,'priv','zh-tw','editor-save','',''),(786,'priv','de','editor-delete','',''),(786,'priv','en','editor-delete','',''),(786,'priv','fr','editor-delete','',''),(786,'priv','zh-cn','editor-delete','',''),(786,'priv','zh-tw','editor-delete','',''),(787,'priv','de','issue-browse','',''),(787,'priv','en','issue-browse','',''),(787,'priv','fr','issue-browse','',''),(787,'priv','zh-cn','issue-browse','',''),(787,'priv','zh-tw','issue-browse','',''),(788,'priv','de','issue-create','',''),(788,'priv','en','issue-create','',''),(788,'priv','fr','issue-create','',''),(788,'priv','zh-cn','issue-create','',''),(788,'priv','zh-tw','issue-create','',''),(789,'priv','de','issue-batchCreate','',''),(789,'priv','en','issue-batchCreate','',''),(789,'priv','fr','issue-batchCreate','',''),(789,'priv','zh-cn','issue-batchCreate','',''),(789,'priv','zh-tw','issue-batchCreate','',''),(790,'priv','de','issue-deleteAction','',''),(790,'priv','en','issue-deleteAction','',''),(790,'priv','fr','issue-deleteAction','',''),(790,'priv','zh-cn','issue-deleteAction','',''),(790,'priv','zh-tw','issue-deleteAction','',''),(791,'priv','de','issue-editAction','',''),(791,'priv','en','issue-editAction','',''),(791,'priv','fr','issue-editAction','',''),(791,'priv','zh-cn','issue-editAction','',''),(791,'priv','zh-tw','issue-editAction','',''),(792,'priv','de','issue-confirmAction','',''),(792,'priv','en','issue-confirmAction','',''),(792,'priv','fr','issue-confirmAction','',''),(792,'priv','zh-cn','issue-confirmAction','',''),(792,'priv','zh-tw','issue-confirmAction','',''),(793,'priv','de','issue-assignToAction','',''),(793,'priv','en','issue-assignToAction','',''),(793,'priv','fr','issue-assignToAction','',''),(793,'priv','zh-cn','issue-assignToAction','',''),(793,'priv','zh-tw','issue-assignToAction','',''),(794,'priv','de','issue-closeAction','',''),(794,'priv','en','issue-closeAction','',''),(794,'priv','fr','issue-closeAction','',''),(794,'priv','zh-cn','issue-closeAction','',''),(794,'priv','zh-tw','issue-closeAction','',''),(795,'priv','de','issue-cancelAction','',''),(795,'priv','en','issue-cancelAction','',''),(795,'priv','fr','issue-cancelAction','',''),(795,'priv','zh-cn','issue-cancelAction','',''),(795,'priv','zh-tw','issue-cancelAction','',''),(796,'priv','de','issue-activateAction','',''),(796,'priv','en','issue-activateAction','',''),(796,'priv','fr','issue-activateAction','',''),(796,'priv','zh-cn','issue-activateAction','',''),(796,'priv','zh-tw','issue-activateAction','',''),(797,'priv','de','issue-resolveAction','',''),(797,'priv','en','issue-resolveAction','',''),(797,'priv','fr','issue-resolveAction','',''),(797,'priv','zh-cn','issue-resolveAction','',''),(797,'priv','zh-tw','issue-resolveAction','',''),(798,'priv','de','issue-view','',''),(798,'priv','en','issue-view','',''),(798,'priv','fr','issue-view','',''),(798,'priv','zh-cn','issue-view','',''),(798,'priv','zh-tw','issue-view','',''),(799,'priv','de','issue-exportAction','',''),(799,'priv','en','issue-exportAction','',''),(799,'priv','fr','issue-exportAction','',''),(799,'priv','zh-cn','issue-exportAction','',''),(799,'priv','zh-tw','issue-exportAction','',''),(800,'priv','de','issue-importToLib','',''),(800,'priv','en','issue-importToLib','',''),(800,'priv','fr','issue-importToLib','',''),(800,'priv','zh-cn','issue-importToLib','',''),(800,'priv','zh-tw','issue-importToLib','',''),(801,'priv','de','issue-batchImportToLib','',''),(801,'priv','en','issue-batchImportToLib','',''),(801,'priv','fr','issue-batchImportToLib','',''),(801,'priv','zh-cn','issue-batchImportToLib','',''),(801,'priv','zh-tw','issue-batchImportToLib','',''),(802,'priv','de','issue-importFromLib','',''),(802,'priv','en','issue-importFromLib','',''),(802,'priv','fr','issue-importFromLib','',''),(802,'priv','zh-cn','issue-importFromLib','',''),(802,'priv','zh-tw','issue-importFromLib','',''),(803,'priv','de','risk-browse','',''),(803,'priv','en','risk-browse','',''),(803,'priv','fr','risk-browse','',''),(803,'priv','zh-cn','risk-browse','',''),(803,'priv','zh-tw','risk-browse','',''),(804,'priv','de','risk-create','',''),(804,'priv','en','risk-create','',''),(804,'priv','fr','risk-create','',''),(804,'priv','zh-cn','risk-create','',''),(804,'priv','zh-tw','risk-create','',''),(805,'priv','de','risk-edit','',''),(805,'priv','en','risk-edit','',''),(805,'priv','fr','risk-edit','',''),(805,'priv','zh-cn','risk-edit','',''),(805,'priv','zh-tw','risk-edit','',''),(806,'priv','de','risk-deleteAction','',''),(806,'priv','en','risk-deleteAction','',''),(806,'priv','fr','risk-deleteAction','',''),(806,'priv','zh-cn','risk-deleteAction','',''),(806,'priv','zh-tw','risk-deleteAction','',''),(807,'priv','de','risk-activateAction','',''),(807,'priv','en','risk-activateAction','',''),(807,'priv','fr','risk-activateAction','',''),(807,'priv','zh-cn','risk-activateAction','',''),(807,'priv','zh-tw','risk-activateAction','',''),(808,'priv','de','risk-closeAction','',''),(808,'priv','en','risk-closeAction','',''),(808,'priv','fr','risk-closeAction','',''),(808,'priv','zh-cn','risk-closeAction','',''),(808,'priv','zh-tw','risk-closeAction','',''),(809,'priv','de','risk-hangupAction','',''),(809,'priv','en','risk-hangupAction','',''),(809,'priv','fr','risk-hangupAction','',''),(809,'priv','zh-cn','risk-hangupAction','',''),(809,'priv','zh-tw','risk-hangupAction','',''),(810,'priv','de','risk-batchCreate','',''),(810,'priv','en','risk-batchCreate','',''),(810,'priv','fr','risk-batchCreate','',''),(810,'priv','zh-cn','risk-batchCreate','',''),(810,'priv','zh-tw','risk-batchCreate','',''),(811,'priv','de','risk-cancelAction','',''),(811,'priv','en','risk-cancelAction','',''),(811,'priv','fr','risk-cancelAction','',''),(811,'priv','zh-cn','risk-cancelAction','',''),(811,'priv','zh-tw','risk-cancelAction','',''),(812,'priv','de','risk-trackAction','',''),(812,'priv','en','risk-trackAction','',''),(812,'priv','fr','risk-trackAction','',''),(812,'priv','zh-cn','risk-trackAction','',''),(812,'priv','zh-tw','risk-trackAction','',''),(813,'priv','de','risk-view','',''),(813,'priv','en','risk-view','',''),(813,'priv','fr','risk-view','',''),(813,'priv','zh-cn','risk-view','',''),(813,'priv','zh-tw','risk-view','',''),(814,'priv','de','risk-assignToAction','',''),(814,'priv','en','risk-assignToAction','',''),(814,'priv','fr','risk-assignToAction','',''),(814,'priv','zh-cn','risk-assignToAction','',''),(814,'priv','zh-tw','risk-assignToAction','',''),(815,'priv','de','risk-importToLib','',''),(815,'priv','en','risk-importToLib','',''),(815,'priv','fr','risk-importToLib','',''),(815,'priv','zh-cn','risk-importToLib','',''),(815,'priv','zh-tw','risk-importToLib','',''),(816,'priv','de','risk-batchImportToLib','',''),(816,'priv','en','risk-batchImportToLib','',''),(816,'priv','fr','risk-batchImportToLib','',''),(816,'priv','zh-cn','risk-batchImportToLib','',''),(816,'priv','zh-tw','risk-batchImportToLib','',''),(817,'priv','de','risk-importFromLib','',''),(817,'priv','en','risk-importFromLib','',''),(817,'priv','fr','risk-importFromLib','',''),(817,'priv','zh-cn','risk-importFromLib','',''),(817,'priv','zh-tw','risk-importFromLib','',''),(818,'priv','de','risk-exportAction','',''),(818,'priv','en','risk-exportAction','',''),(818,'priv','fr','risk-exportAction','',''),(818,'priv','zh-cn','risk-exportAction','',''),(818,'priv','zh-tw','risk-exportAction','',''),(819,'priv','de','mr-create','',''),(819,'priv','en','mr-create','',''),(819,'priv','fr','mr-create','',''),(819,'priv','zh-cn','mr-create','',''),(819,'priv','zh-tw','mr-create','',''),(820,'priv','de','mr-browseAction','',''),(820,'priv','en','mr-browseAction','',''),(820,'priv','fr','mr-browseAction','',''),(820,'priv','zh-cn','mr-browseAction','',''),(820,'priv','zh-tw','mr-browseAction','',''),(821,'priv','de','mr-edit','',''),(821,'priv','en','mr-edit','',''),(821,'priv','fr','mr-edit','',''),(821,'priv','zh-cn','mr-edit','',''),(821,'priv','zh-tw','mr-edit','',''),(822,'priv','de','mr-delete','',''),(822,'priv','en','mr-delete','',''),(822,'priv','fr','mr-delete','',''),(822,'priv','zh-cn','mr-delete','',''),(822,'priv','zh-tw','mr-delete','',''),(823,'priv','de','mr-viewAction','',''),(823,'priv','en','mr-viewAction','',''),(823,'priv','fr','mr-viewAction','',''),(823,'priv','zh-cn','mr-viewAction','',''),(823,'priv','zh-tw','mr-viewAction','',''),(824,'priv','de','mr-accept','',''),(824,'priv','en','mr-accept','',''),(824,'priv','fr','mr-accept','',''),(824,'priv','zh-cn','mr-accept','',''),(824,'priv','zh-tw','mr-accept','',''),(825,'priv','de','mr-viewDiff','',''),(825,'priv','en','mr-viewDiff','',''),(825,'priv','fr','mr-viewDiff','',''),(825,'priv','zh-cn','mr-viewDiff','',''),(825,'priv','zh-tw','mr-viewDiff','',''),(826,'priv','de','mr-linkList','',''),(826,'priv','en','mr-linkList','',''),(826,'priv','fr','mr-linkList','',''),(826,'priv','zh-cn','mr-linkList','',''),(826,'priv','zh-tw','mr-linkList','',''),(827,'priv','de','mr-linkStory','',''),(827,'priv','en','mr-linkStory','',''),(827,'priv','fr','mr-linkStory','',''),(827,'priv','zh-cn','mr-linkStory','',''),(827,'priv','zh-tw','mr-linkStory','',''),(828,'priv','de','mr-linkBug','',''),(828,'priv','en','mr-linkBug','',''),(828,'priv','fr','mr-linkBug','',''),(828,'priv','zh-cn','mr-linkBug','',''),(828,'priv','zh-tw','mr-linkBug','',''),(829,'priv','de','mr-linkTask','',''),(829,'priv','en','mr-linkTask','',''),(829,'priv','fr','mr-linkTask','',''),(829,'priv','zh-cn','mr-linkTask','',''),(829,'priv','zh-tw','mr-linkTask','',''),(830,'priv','de','mr-unlink','',''),(830,'priv','en','mr-unlink','',''),(830,'priv','fr','mr-unlink','',''),(830,'priv','zh-cn','mr-unlink','',''),(830,'priv','zh-tw','mr-unlink','',''),(831,'priv','de','mr-approval','',''),(831,'priv','en','mr-approval','',''),(831,'priv','fr','mr-approval','',''),(831,'priv','zh-cn','mr-approval','',''),(831,'priv','zh-tw','mr-approval','',''),(832,'priv','de','mr-close','',''),(832,'priv','en','mr-close','',''),(832,'priv','fr','mr-close','',''),(832,'priv','zh-cn','mr-close','',''),(832,'priv','zh-tw','mr-close','',''),(833,'priv','de','mr-reopen','',''),(833,'priv','en','mr-reopen','',''),(833,'priv','fr','mr-reopen','',''),(833,'priv','zh-cn','mr-reopen','',''),(833,'priv','zh-tw','mr-reopen','',''),(834,'priv','de','mr-addReview','',''),(834,'priv','en','mr-addReview','',''),(834,'priv','fr','mr-addReview','',''),(834,'priv','zh-cn','mr-addReview','',''),(834,'priv','zh-tw','mr-addReview','',''),(835,'priv','de','budget-browseAction','',''),(835,'priv','en','budget-browseAction','',''),(835,'priv','fr','budget-browseAction','',''),(835,'priv','zh-cn','budget-browseAction','',''),(835,'priv','zh-tw','budget-browseAction','',''),(836,'priv','de','budget-summaryAction','',''),(836,'priv','en','budget-summaryAction','',''),(836,'priv','fr','budget-summaryAction','',''),(836,'priv','zh-cn','budget-summaryAction','',''),(836,'priv','zh-tw','budget-summaryAction','',''),(837,'priv','de','budget-createAction','',''),(837,'priv','en','budget-createAction','',''),(837,'priv','fr','budget-createAction','',''),(837,'priv','zh-cn','budget-createAction','',''),(837,'priv','zh-tw','budget-createAction','',''),(838,'priv','de','budget-batchCreate','',''),(838,'priv','en','budget-batchCreate','',''),(838,'priv','fr','budget-batchCreate','',''),(838,'priv','zh-cn','budget-batchCreate','',''),(838,'priv','zh-tw','budget-batchCreate','',''),(839,'priv','de','budget-editAction','',''),(839,'priv','en','budget-editAction','',''),(839,'priv','fr','budget-editAction','',''),(839,'priv','zh-cn','budget-editAction','',''),(839,'priv','zh-tw','budget-editAction','',''),(840,'priv','de','budget-viewAction','',''),(840,'priv','en','budget-viewAction','',''),(840,'priv','fr','budget-viewAction','',''),(840,'priv','zh-cn','budget-viewAction','',''),(840,'priv','zh-tw','budget-viewAction','',''),(841,'priv','de','budget-deleteAction','',''),(841,'priv','en','budget-deleteAction','',''),(841,'priv','fr','budget-deleteAction','',''),(841,'priv','zh-cn','budget-deleteAction','',''),(841,'priv','zh-tw','budget-deleteAction','',''),(842,'priv','de','workestimation-index','',''),(842,'priv','en','workestimation-index','',''),(842,'priv','fr','workestimation-index','',''),(842,'priv','zh-cn','workestimation-index','',''),(842,'priv','zh-tw','workestimation-index','',''),(843,'priv','de','durationestimation-indexAction','',''),(843,'priv','en','durationestimation-indexAction','',''),(843,'priv','fr','durationestimation-indexAction','',''),(843,'priv','zh-cn','durationestimation-indexAction','',''),(843,'priv','zh-tw','durationestimation-indexAction','',''),(844,'priv','de','durationestimation-create','',''),(844,'priv','en','durationestimation-create','',''),(844,'priv','fr','durationestimation-create','',''),(844,'priv','zh-cn','durationestimation-create','',''),(844,'priv','zh-tw','durationestimation-create','',''),(845,'priv','de','holiday-browse','',''),(845,'priv','en','holiday-browse','',''),(845,'priv','fr','holiday-browse','',''),(845,'priv','zh-cn','holiday-browse','',''),(845,'priv','zh-tw','holiday-browse','',''),(846,'priv','de','holiday-createAction','',''),(846,'priv','en','holiday-createAction','',''),(846,'priv','fr','holiday-createAction','',''),(846,'priv','zh-cn','holiday-createAction','',''),(846,'priv','zh-tw','holiday-createAction','',''),(847,'priv','de','holiday-editAction','',''),(847,'priv','en','holiday-editAction','',''),(847,'priv','fr','holiday-editAction','',''),(847,'priv','zh-cn','holiday-editAction','',''),(847,'priv','zh-tw','holiday-editAction','',''),(848,'priv','de','holiday-deleteAction','',''),(848,'priv','en','holiday-deleteAction','',''),(848,'priv','fr','holiday-deleteAction','',''),(848,'priv','zh-cn','holiday-deleteAction','',''),(848,'priv','zh-tw','holiday-deleteAction','',''),(849,'priv','de','holiday-importAction','',''),(849,'priv','en','holiday-importAction','',''),(849,'priv','fr','holiday-importAction','',''),(849,'priv','zh-cn','holiday-importAction','',''),(849,'priv','zh-tw','holiday-importAction','',''),(850,'priv','de','weekly-index','',''),(850,'priv','en','weekly-index','',''),(850,'priv','fr','weekly-index','',''),(850,'priv','zh-cn','weekly-index','',''),(850,'priv','zh-tw','weekly-index','',''),(851,'priv','de','weekly-exportWeeklyReport','',''),(851,'priv','en','weekly-exportWeeklyReport','',''),(851,'priv','fr','weekly-exportWeeklyReport','',''),(851,'priv','zh-cn','weekly-exportWeeklyReport','',''),(851,'priv','zh-tw','weekly-exportWeeklyReport','',''),(852,'priv','de','opportunity-browse','',''),(852,'priv','en','opportunity-browse','',''),(852,'priv','fr','opportunity-browse','',''),(852,'priv','zh-cn','opportunity-browse','',''),(852,'priv','zh-tw','opportunity-browse','',''),(853,'priv','de','opportunity-create','',''),(853,'priv','en','opportunity-create','',''),(853,'priv','fr','opportunity-create','',''),(853,'priv','zh-cn','opportunity-create','',''),(853,'priv','zh-tw','opportunity-create','',''),(854,'priv','de','opportunity-edit','',''),(854,'priv','en','opportunity-edit','',''),(854,'priv','fr','opportunity-edit','',''),(854,'priv','zh-cn','opportunity-edit','',''),(854,'priv','zh-tw','opportunity-edit','',''),(855,'priv','de','opportunity-deleteAction','',''),(855,'priv','en','opportunity-deleteAction','',''),(855,'priv','fr','opportunity-deleteAction','',''),(855,'priv','zh-cn','opportunity-deleteAction','',''),(855,'priv','zh-tw','opportunity-deleteAction','',''),(856,'priv','de','opportunity-activateAction','',''),(856,'priv','en','opportunity-activateAction','',''),(856,'priv','fr','opportunity-activateAction','',''),(856,'priv','zh-cn','opportunity-activateAction','',''),(856,'priv','zh-tw','opportunity-activateAction','',''),(857,'priv','de','opportunity-closeAction','',''),(857,'priv','en','opportunity-closeAction','',''),(857,'priv','fr','opportunity-closeAction','',''),(857,'priv','zh-cn','opportunity-closeAction','',''),(857,'priv','zh-tw','opportunity-closeAction','',''),(858,'priv','de','opportunity-hangupAction','',''),(858,'priv','en','opportunity-hangupAction','',''),(858,'priv','fr','opportunity-hangupAction','',''),(858,'priv','zh-cn','opportunity-hangupAction','',''),(858,'priv','zh-tw','opportunity-hangupAction','',''),(859,'priv','de','opportunity-cancelAction','',''),(859,'priv','en','opportunity-cancelAction','',''),(859,'priv','fr','opportunity-cancelAction','',''),(859,'priv','zh-cn','opportunity-cancelAction','',''),(859,'priv','zh-tw','opportunity-cancelAction','',''),(860,'priv','de','opportunity-trackAction','',''),(860,'priv','en','opportunity-trackAction','',''),(860,'priv','fr','opportunity-trackAction','',''),(860,'priv','zh-cn','opportunity-trackAction','',''),(860,'priv','zh-tw','opportunity-trackAction','',''),(861,'priv','de','opportunity-view','',''),(861,'priv','en','opportunity-view','',''),(861,'priv','fr','opportunity-view','',''),(861,'priv','zh-cn','opportunity-view','',''),(861,'priv','zh-tw','opportunity-view','',''),(862,'priv','de','opportunity-assignToAction','',''),(862,'priv','en','opportunity-assignToAction','',''),(862,'priv','fr','opportunity-assignToAction','',''),(862,'priv','zh-cn','opportunity-assignToAction','',''),(862,'priv','zh-tw','opportunity-assignToAction','',''),(863,'priv','de','opportunity-batchCreate','',''),(863,'priv','en','opportunity-batchCreate','',''),(863,'priv','fr','opportunity-batchCreate','',''),(863,'priv','zh-cn','opportunity-batchCreate','',''),(863,'priv','zh-tw','opportunity-batchCreate','',''),(864,'priv','de','opportunity-batchEdit','',''),(864,'priv','en','opportunity-batchEdit','',''),(864,'priv','fr','opportunity-batchEdit','',''),(864,'priv','zh-cn','opportunity-batchEdit','',''),(864,'priv','zh-tw','opportunity-batchEdit','',''),(865,'priv','de','opportunity-batchAssignTo','',''),(865,'priv','en','opportunity-batchAssignTo','',''),(865,'priv','fr','opportunity-batchAssignTo','',''),(865,'priv','zh-cn','opportunity-batchAssignTo','',''),(865,'priv','zh-tw','opportunity-batchAssignTo','',''),(866,'priv','de','opportunity-batchClose','',''),(866,'priv','en','opportunity-batchClose','',''),(866,'priv','fr','opportunity-batchClose','',''),(866,'priv','zh-cn','opportunity-batchClose','',''),(866,'priv','zh-tw','opportunity-batchClose','',''),(867,'priv','de','opportunity-batchCancel','',''),(867,'priv','en','opportunity-batchCancel','',''),(867,'priv','fr','opportunity-batchCancel','',''),(867,'priv','zh-cn','opportunity-batchCancel','',''),(867,'priv','zh-tw','opportunity-batchCancel','',''),(868,'priv','de','opportunity-batchHangup','',''),(868,'priv','en','opportunity-batchHangup','',''),(868,'priv','fr','opportunity-batchHangup','',''),(868,'priv','zh-cn','opportunity-batchHangup','',''),(868,'priv','zh-tw','opportunity-batchHangup','',''),(869,'priv','de','opportunity-batchActivate','',''),(869,'priv','en','opportunity-batchActivate','',''),(869,'priv','fr','opportunity-batchActivate','',''),(869,'priv','zh-cn','opportunity-batchActivate','',''),(869,'priv','zh-tw','opportunity-batchActivate','',''),(870,'priv','de','opportunity-importToLib','',''),(870,'priv','en','opportunity-importToLib','',''),(870,'priv','fr','opportunity-importToLib','',''),(870,'priv','zh-cn','opportunity-importToLib','',''),(870,'priv','zh-tw','opportunity-importToLib','',''),(871,'priv','de','opportunity-batchImportToLib','',''),(871,'priv','en','opportunity-batchImportToLib','',''),(871,'priv','fr','opportunity-batchImportToLib','',''),(871,'priv','zh-cn','opportunity-batchImportToLib','',''),(871,'priv','zh-tw','opportunity-batchImportToLib','',''),(872,'priv','de','opportunity-importFromLib','',''),(872,'priv','en','opportunity-importFromLib','',''),(872,'priv','fr','opportunity-importFromLib','',''),(872,'priv','zh-cn','opportunity-importFromLib','',''),(872,'priv','zh-tw','opportunity-importFromLib','',''),(873,'priv','de','opportunity-exportAction','',''),(873,'priv','en','opportunity-exportAction','',''),(873,'priv','fr','opportunity-exportAction','',''),(873,'priv','zh-cn','opportunity-exportAction','',''),(873,'priv','zh-tw','opportunity-exportAction','',''),(874,'priv','de','trainplan-browse','',''),(874,'priv','en','trainplan-browse','',''),(874,'priv','fr','trainplan-browse','',''),(874,'priv','zh-cn','trainplan-browse','',''),(874,'priv','zh-tw','trainplan-browse','',''),(875,'priv','de','trainplan-create','',''),(875,'priv','en','trainplan-create','',''),(875,'priv','fr','trainplan-create','',''),(875,'priv','zh-cn','trainplan-create','',''),(875,'priv','zh-tw','trainplan-create','',''),(876,'priv','de','trainplan-edit','',''),(876,'priv','en','trainplan-edit','',''),(876,'priv','fr','trainplan-edit','',''),(876,'priv','zh-cn','trainplan-edit','',''),(876,'priv','zh-tw','trainplan-edit','',''),(877,'priv','de','trainplan-batchCreate','',''),(877,'priv','en','trainplan-batchCreate','',''),(877,'priv','fr','trainplan-batchCreate','',''),(877,'priv','zh-cn','trainplan-batchCreate','',''),(877,'priv','zh-tw','trainplan-batchCreate','',''),(878,'priv','de','trainplan-batchEdit','',''),(878,'priv','en','trainplan-batchEdit','',''),(878,'priv','fr','trainplan-batchEdit','',''),(878,'priv','zh-cn','trainplan-batchEdit','',''),(878,'priv','zh-tw','trainplan-batchEdit','',''),(879,'priv','de','trainplan-batchFinish','',''),(879,'priv','en','trainplan-batchFinish','',''),(879,'priv','fr','trainplan-batchFinish','',''),(879,'priv','zh-cn','trainplan-batchFinish','',''),(879,'priv','zh-tw','trainplan-batchFinish','',''),(880,'priv','de','trainplan-delete','',''),(880,'priv','en','trainplan-delete','',''),(880,'priv','fr','trainplan-delete','',''),(880,'priv','zh-cn','trainplan-delete','',''),(880,'priv','zh-tw','trainplan-delete','',''),(881,'priv','de','trainplan-finishAction','',''),(881,'priv','en','trainplan-finishAction','',''),(881,'priv','fr','trainplan-finishAction','',''),(881,'priv','zh-cn','trainplan-finishAction','',''),(881,'priv','zh-tw','trainplan-finishAction','',''),(882,'priv','de','trainplan-summaryAction','',''),(882,'priv','en','trainplan-summaryAction','',''),(882,'priv','fr','trainplan-summaryAction','',''),(882,'priv','zh-cn','trainplan-summaryAction','',''),(882,'priv','zh-tw','trainplan-summaryAction','',''),(883,'priv','de','trainplan-view','',''),(883,'priv','en','trainplan-view','',''),(883,'priv','fr','trainplan-view','',''),(883,'priv','zh-cn','trainplan-view','',''),(883,'priv','zh-tw','trainplan-view','',''),(884,'priv','de','nc-browse','',''),(884,'priv','en','nc-browse','',''),(884,'priv','fr','nc-browse','',''),(884,'priv','zh-cn','nc-browse','',''),(884,'priv','zh-tw','nc-browse','',''),(885,'priv','de','nc-create','',''),(885,'priv','en','nc-create','',''),(885,'priv','fr','nc-create','',''),(885,'priv','zh-cn','nc-create','',''),(885,'priv','zh-tw','nc-create','',''),(886,'priv','de','nc-edit','',''),(886,'priv','en','nc-edit','',''),(886,'priv','fr','nc-edit','',''),(886,'priv','zh-cn','nc-edit','',''),(886,'priv','zh-tw','nc-edit','',''),(887,'priv','de','nc-resolve','',''),(887,'priv','en','nc-resolve','',''),(887,'priv','fr','nc-resolve','',''),(887,'priv','zh-cn','nc-resolve','',''),(887,'priv','zh-tw','nc-resolve','',''),(888,'priv','de','nc-view','',''),(888,'priv','en','nc-view','',''),(888,'priv','fr','nc-view','',''),(888,'priv','zh-cn','nc-view','',''),(888,'priv','zh-tw','nc-view','',''),(889,'priv','de','nc-close','',''),(889,'priv','en','nc-close','',''),(889,'priv','fr','nc-close','',''),(889,'priv','zh-cn','nc-close','',''),(889,'priv','zh-tw','nc-close','',''),(890,'priv','de','nc-delete','',''),(890,'priv','en','nc-delete','',''),(890,'priv','fr','nc-delete','',''),(890,'priv','zh-cn','nc-delete','',''),(890,'priv','zh-tw','nc-delete','',''),(891,'priv','de','nc-assignTo','',''),(891,'priv','en','nc-assignTo','',''),(891,'priv','fr','nc-assignTo','',''),(891,'priv','zh-cn','nc-assignTo','',''),(891,'priv','zh-tw','nc-assignTo','',''),(892,'priv','de','nc-activate','',''),(892,'priv','en','nc-activate','',''),(892,'priv','fr','nc-activate','',''),(892,'priv','zh-cn','nc-activate','',''),(892,'priv','zh-tw','nc-activate','',''),(893,'priv','de','nc-exportAction','',''),(893,'priv','en','nc-exportAction','',''),(893,'priv','fr','nc-exportAction','',''),(893,'priv','zh-cn','nc-exportAction','',''),(893,'priv','zh-tw','nc-exportAction','',''),(894,'priv','de','gapanalysis-browse','',''),(894,'priv','en','gapanalysis-browse','',''),(894,'priv','fr','gapanalysis-browse','',''),(894,'priv','zh-cn','gapanalysis-browse','',''),(894,'priv','zh-tw','gapanalysis-browse','',''),(895,'priv','de','gapanalysis-create','',''),(895,'priv','en','gapanalysis-create','',''),(895,'priv','fr','gapanalysis-create','',''),(895,'priv','zh-cn','gapanalysis-create','',''),(895,'priv','zh-tw','gapanalysis-create','',''),(896,'priv','de','gapanalysis-edit','',''),(896,'priv','en','gapanalysis-edit','',''),(896,'priv','fr','gapanalysis-edit','',''),(896,'priv','zh-cn','gapanalysis-edit','',''),(896,'priv','zh-tw','gapanalysis-edit','',''),(897,'priv','de','gapanalysis-batchCreate','',''),(897,'priv','en','gapanalysis-batchCreate','',''),(897,'priv','fr','gapanalysis-batchCreate','',''),(897,'priv','zh-cn','gapanalysis-batchCreate','',''),(897,'priv','zh-tw','gapanalysis-batchCreate','',''),(898,'priv','de','gapanalysis-batchEdit','',''),(898,'priv','en','gapanalysis-batchEdit','',''),(898,'priv','fr','gapanalysis-batchEdit','',''),(898,'priv','zh-cn','gapanalysis-batchEdit','',''),(898,'priv','zh-tw','gapanalysis-batchEdit','',''),(899,'priv','de','gapanalysis-delete','',''),(899,'priv','en','gapanalysis-delete','',''),(899,'priv','fr','gapanalysis-delete','',''),(899,'priv','zh-cn','gapanalysis-delete','',''),(899,'priv','zh-tw','gapanalysis-delete','',''),(900,'priv','de','gapanalysis-view','',''),(900,'priv','en','gapanalysis-view','',''),(900,'priv','fr','gapanalysis-view','',''),(900,'priv','zh-cn','gapanalysis-view','',''),(900,'priv','zh-tw','gapanalysis-view','',''),(901,'priv','de','researchplan-browse','',''),(901,'priv','en','researchplan-browse','',''),(901,'priv','fr','researchplan-browse','',''),(901,'priv','zh-cn','researchplan-browse','',''),(901,'priv','zh-tw','researchplan-browse','',''),(902,'priv','de','researchplan-create','',''),(902,'priv','en','researchplan-create','',''),(902,'priv','fr','researchplan-create','',''),(902,'priv','zh-cn','researchplan-create','',''),(902,'priv','zh-tw','researchplan-create','',''),(903,'priv','de','researchplan-edit','',''),(903,'priv','en','researchplan-edit','',''),(903,'priv','fr','researchplan-edit','',''),(903,'priv','zh-cn','researchplan-edit','',''),(903,'priv','zh-tw','researchplan-edit','',''),(904,'priv','de','researchplan-delete','',''),(904,'priv','en','researchplan-delete','',''),(904,'priv','fr','researchplan-delete','',''),(904,'priv','zh-cn','researchplan-delete','',''),(904,'priv','zh-tw','researchplan-delete','',''),(905,'priv','de','researchplan-view','',''),(905,'priv','en','researchplan-view','',''),(905,'priv','fr','researchplan-view','',''),(905,'priv','zh-cn','researchplan-view','',''),(905,'priv','zh-tw','researchplan-view','',''),(906,'priv','de','researchreport-browse','',''),(906,'priv','en','researchreport-browse','',''),(906,'priv','fr','researchreport-browse','',''),(906,'priv','zh-cn','researchreport-browse','',''),(906,'priv','zh-tw','researchreport-browse','',''),(907,'priv','de','researchreport-create','',''),(907,'priv','en','researchreport-create','',''),(907,'priv','fr','researchreport-create','',''),(907,'priv','zh-cn','researchreport-create','',''),(907,'priv','zh-tw','researchreport-create','',''),(908,'priv','de','researchreport-edit','',''),(908,'priv','en','researchreport-edit','',''),(908,'priv','fr','researchreport-edit','',''),(908,'priv','zh-cn','researchreport-edit','',''),(908,'priv','zh-tw','researchreport-edit','',''),(909,'priv','de','researchreport-delete','',''),(909,'priv','en','researchreport-delete','',''),(909,'priv','fr','researchreport-delete','',''),(909,'priv','zh-cn','researchreport-delete','',''),(909,'priv','zh-tw','researchreport-delete','',''),(910,'priv','de','researchreport-view','',''),(910,'priv','en','researchreport-view','',''),(910,'priv','fr','researchreport-view','',''),(910,'priv','zh-cn','researchreport-view','',''),(910,'priv','zh-tw','researchreport-view','',''),(911,'priv','de','meeting-browse','',''),(911,'priv','en','meeting-browse','',''),(911,'priv','fr','meeting-browse','',''),(911,'priv','zh-cn','meeting-browse','',''),(911,'priv','zh-tw','meeting-browse','',''),(912,'priv','de','meeting-create','',''),(912,'priv','en','meeting-create','',''),(912,'priv','fr','meeting-create','',''),(912,'priv','zh-cn','meeting-create','',''),(912,'priv','zh-tw','meeting-create','',''),(913,'priv','de','meeting-edit','',''),(913,'priv','en','meeting-edit','',''),(913,'priv','fr','meeting-edit','',''),(913,'priv','zh-cn','meeting-edit','',''),(913,'priv','zh-tw','meeting-edit','',''),(914,'priv','de','meeting-deleteAction','',''),(914,'priv','en','meeting-deleteAction','',''),(914,'priv','fr','meeting-deleteAction','',''),(914,'priv','zh-cn','meeting-deleteAction','',''),(914,'priv','zh-tw','meeting-deleteAction','',''),(915,'priv','de','meeting-view','',''),(915,'priv','en','meeting-view','',''),(915,'priv','fr','meeting-view','',''),(915,'priv','zh-cn','meeting-view','',''),(915,'priv','zh-tw','meeting-view','',''),(916,'priv','de','meeting-minutes','',''),(916,'priv','en','meeting-minutes','',''),(916,'priv','fr','meeting-minutes','',''),(916,'priv','zh-cn','meeting-minutes','',''),(916,'priv','zh-tw','meeting-minutes','',''),(917,'priv','de','meetingroom-browse','',''),(917,'priv','en','meetingroom-browse','',''),(917,'priv','fr','meetingroom-browse','',''),(917,'priv','zh-cn','meetingroom-browse','',''),(917,'priv','zh-tw','meetingroom-browse','',''),(918,'priv','de','meetingroom-create','',''),(918,'priv','en','meetingroom-create','',''),(918,'priv','fr','meetingroom-create','',''),(918,'priv','zh-cn','meetingroom-create','',''),(918,'priv','zh-tw','meetingroom-create','',''),(919,'priv','de','meetingroom-edit','',''),(919,'priv','en','meetingroom-edit','',''),(919,'priv','fr','meetingroom-edit','',''),(919,'priv','zh-cn','meetingroom-edit','',''),(919,'priv','zh-tw','meetingroom-edit','',''),(920,'priv','de','meetingroom-deleteAction','',''),(920,'priv','en','meetingroom-deleteAction','',''),(920,'priv','fr','meetingroom-deleteAction','',''),(920,'priv','zh-cn','meetingroom-deleteAction','',''),(920,'priv','zh-tw','meetingroom-deleteAction','',''),(921,'priv','de','meetingroom-view','',''),(921,'priv','en','meetingroom-view','',''),(921,'priv','fr','meetingroom-view','',''),(921,'priv','zh-cn','meetingroom-view','',''),(921,'priv','zh-tw','meetingroom-view','',''),(922,'priv','de','meetingroom-batchCreate','',''),(922,'priv','en','meetingroom-batchCreate','',''),(922,'priv','fr','meetingroom-batchCreate','',''),(922,'priv','zh-cn','meetingroom-batchCreate','',''),(922,'priv','zh-tw','meetingroom-batchCreate','',''),(923,'priv','de','meetingroom-batchEdit','',''),(923,'priv','en','meetingroom-batchEdit','',''),(923,'priv','fr','meetingroom-batchEdit','',''),(923,'priv','zh-cn','meetingroom-batchEdit','',''),(923,'priv','zh-tw','meetingroom-batchEdit','',''),(924,'priv','de','approval-progress','',''),(924,'priv','en','approval-progress','',''),(924,'priv','fr','approval-progress','',''),(924,'priv','zh-cn','approval-progress','',''),(924,'priv','zh-tw','approval-progress','',''),(925,'priv','de','workflow-browseFlow','',''),(925,'priv','en','workflow-browseFlow','',''),(925,'priv','fr','workflow-browseFlow','',''),(925,'priv','zh-cn','workflow-browseFlow','',''),(925,'priv','zh-tw','workflow-browseFlow','',''),(926,'priv','de','workflow-browseDB','',''),(926,'priv','en','workflow-browseDB','',''),(926,'priv','fr','workflow-browseDB','',''),(926,'priv','zh-cn','workflow-browseDB','',''),(926,'priv','zh-tw','workflow-browseDB','',''),(927,'priv','de','workflow-create','',''),(927,'priv','en','workflow-create','',''),(927,'priv','fr','workflow-create','',''),(927,'priv','zh-cn','workflow-create','',''),(927,'priv','zh-tw','workflow-create','',''),(928,'priv','de','workflow-copy','',''),(928,'priv','en','workflow-copy','',''),(928,'priv','fr','workflow-copy','',''),(928,'priv','zh-cn','workflow-copy','',''),(928,'priv','zh-tw','workflow-copy','',''),(929,'priv','de','workflow-edit','',''),(929,'priv','en','workflow-edit','',''),(929,'priv','fr','workflow-edit','',''),(929,'priv','zh-cn','workflow-edit','',''),(929,'priv','zh-tw','workflow-edit','',''),(930,'priv','de','workflow-backup','',''),(930,'priv','en','workflow-backup','',''),(930,'priv','fr','workflow-backup','',''),(930,'priv','zh-cn','workflow-backup','',''),(930,'priv','zh-tw','workflow-backup','',''),(931,'priv','de','workflow-upgradeAction','',''),(931,'priv','en','workflow-upgradeAction','',''),(931,'priv','fr','workflow-upgradeAction','',''),(931,'priv','zh-cn','workflow-upgradeAction','',''),(931,'priv','zh-tw','workflow-upgradeAction','',''),(932,'priv','de','workflow-view','',''),(932,'priv','en','workflow-view','',''),(932,'priv','fr','workflow-view','',''),(932,'priv','zh-cn','workflow-view','',''),(932,'priv','zh-tw','workflow-view','',''),(933,'priv','de','workflow-delete','',''),(933,'priv','en','workflow-delete','',''),(933,'priv','fr','workflow-delete','',''),(933,'priv','zh-cn','workflow-delete','',''),(933,'priv','zh-tw','workflow-delete','',''),(934,'priv','de','workflow-flowchart','',''),(934,'priv','en','workflow-flowchart','',''),(934,'priv','fr','workflow-flowchart','',''),(934,'priv','zh-cn','workflow-flowchart','',''),(934,'priv','zh-tw','workflow-flowchart','',''),(935,'priv','de','workflow-ui','',''),(935,'priv','en','workflow-ui','',''),(935,'priv','fr','workflow-ui','',''),(935,'priv','zh-cn','workflow-ui','',''),(935,'priv','zh-tw','workflow-ui','',''),(936,'priv','de','workflow-release','',''),(936,'priv','en','workflow-release','',''),(936,'priv','fr','workflow-release','',''),(936,'priv','zh-cn','workflow-release','',''),(936,'priv','zh-tw','workflow-release','',''),(937,'priv','de','workflow-deactivate','',''),(937,'priv','en','workflow-deactivate','',''),(937,'priv','fr','workflow-deactivate','',''),(937,'priv','zh-cn','workflow-deactivate','',''),(937,'priv','zh-tw','workflow-deactivate','',''),(938,'priv','de','workflow-activate','',''),(938,'priv','en','workflow-activate','',''),(938,'priv','fr','workflow-activate','',''),(938,'priv','zh-cn','workflow-activate','',''),(938,'priv','zh-tw','workflow-activate','',''),(939,'priv','de','workflow-setApproval','',''),(939,'priv','en','workflow-setApproval','',''),(939,'priv','fr','workflow-setApproval','',''),(939,'priv','zh-cn','workflow-setApproval','',''),(939,'priv','zh-tw','workflow-setApproval','',''),(940,'priv','de','workflow-setJS','',''),(940,'priv','en','workflow-setJS','',''),(940,'priv','fr','workflow-setJS','',''),(940,'priv','zh-cn','workflow-setJS','',''),(940,'priv','zh-tw','workflow-setJS','',''),(941,'priv','de','workflow-setCSS','',''),(941,'priv','en','workflow-setCSS','',''),(941,'priv','fr','workflow-setCSS','',''),(941,'priv','zh-cn','workflow-setCSS','',''),(941,'priv','zh-tw','workflow-setCSS','',''),(942,'priv','de','workflowfield-browse','',''),(942,'priv','en','workflowfield-browse','',''),(942,'priv','fr','workflowfield-browse','',''),(942,'priv','zh-cn','workflowfield-browse','',''),(942,'priv','zh-tw','workflowfield-browse','',''),(943,'priv','de','workflowfield-create','',''),(943,'priv','en','workflowfield-create','',''),(943,'priv','fr','workflowfield-create','',''),(943,'priv','zh-cn','workflowfield-create','',''),(943,'priv','zh-tw','workflowfield-create','',''),(944,'priv','de','workflowfield-edit','',''),(944,'priv','en','workflowfield-edit','',''),(944,'priv','fr','workflowfield-edit','',''),(944,'priv','zh-cn','workflowfield-edit','',''),(944,'priv','zh-tw','workflowfield-edit','',''),(945,'priv','de','workflowfield-delete','',''),(945,'priv','en','workflowfield-delete','',''),(945,'priv','fr','workflowfield-delete','',''),(945,'priv','zh-cn','workflowfield-delete','',''),(945,'priv','zh-tw','workflowfield-delete','',''),(946,'priv','de','workflowfield-sort','',''),(946,'priv','en','workflowfield-sort','',''),(946,'priv','fr','workflowfield-sort','',''),(946,'priv','zh-cn','workflowfield-sort','',''),(946,'priv','zh-tw','workflowfield-sort','',''),(947,'priv','de','workflowfield-import','',''),(947,'priv','en','workflowfield-import','',''),(947,'priv','fr','workflowfield-import','',''),(947,'priv','zh-cn','workflowfield-import','',''),(947,'priv','zh-tw','workflowfield-import','',''),(948,'priv','de','workflowfield-showImport','',''),(948,'priv','en','workflowfield-showImport','',''),(948,'priv','fr','workflowfield-showImport','',''),(948,'priv','zh-cn','workflowfield-showImport','',''),(948,'priv','zh-tw','workflowfield-showImport','',''),(949,'priv','de','workflowfield-exportTemplate','',''),(949,'priv','en','workflowfield-exportTemplate','',''),(949,'priv','fr','workflowfield-exportTemplate','',''),(949,'priv','zh-cn','workflowfield-exportTemplate','',''),(949,'priv','zh-tw','workflowfield-exportTemplate','',''),(950,'priv','de','workflowfield-setValue','',''),(950,'priv','en','workflowfield-setValue','',''),(950,'priv','fr','workflowfield-setValue','',''),(950,'priv','zh-cn','workflowfield-setValue','',''),(950,'priv','zh-tw','workflowfield-setValue','',''),(951,'priv','de','workflowfield-setExport','',''),(951,'priv','en','workflowfield-setExport','',''),(951,'priv','fr','workflowfield-setExport','',''),(951,'priv','zh-cn','workflowfield-setExport','',''),(951,'priv','zh-tw','workflowfield-setExport','',''),(952,'priv','de','workflowfield-setSearch','',''),(952,'priv','en','workflowfield-setSearch','',''),(952,'priv','fr','workflowfield-setSearch','',''),(952,'priv','zh-cn','workflowfield-setSearch','',''),(952,'priv','zh-tw','workflowfield-setSearch','',''),(953,'priv','de','workflowaction-browse','',''),(953,'priv','en','workflowaction-browse','',''),(953,'priv','fr','workflowaction-browse','',''),(953,'priv','zh-cn','workflowaction-browse','',''),(953,'priv','zh-tw','workflowaction-browse','',''),(954,'priv','de','workflowaction-create','',''),(954,'priv','en','workflowaction-create','',''),(954,'priv','fr','workflowaction-create','',''),(954,'priv','zh-cn','workflowaction-create','',''),(954,'priv','zh-tw','workflowaction-create','',''),(955,'priv','de','workflowaction-edit','',''),(955,'priv','en','workflowaction-edit','',''),(955,'priv','fr','workflowaction-edit','',''),(955,'priv','zh-cn','workflowaction-edit','',''),(955,'priv','zh-tw','workflowaction-edit','',''),(956,'priv','de','workflowaction-view','',''),(956,'priv','en','workflowaction-view','',''),(956,'priv','fr','workflowaction-view','',''),(956,'priv','zh-cn','workflowaction-view','',''),(956,'priv','zh-tw','workflowaction-view','',''),(957,'priv','de','workflowaction-delete','',''),(957,'priv','en','workflowaction-delete','',''),(957,'priv','fr','workflowaction-delete','',''),(957,'priv','zh-cn','workflowaction-delete','',''),(957,'priv','zh-tw','workflowaction-delete','',''),(958,'priv','de','workflowaction-sort','',''),(958,'priv','en','workflowaction-sort','',''),(958,'priv','fr','workflowaction-sort','',''),(958,'priv','zh-cn','workflowaction-sort','',''),(958,'priv','zh-tw','workflowaction-sort','',''),(959,'priv','de','workflowaction-setVerification','',''),(959,'priv','en','workflowaction-setVerification','',''),(959,'priv','fr','workflowaction-setVerification','',''),(959,'priv','zh-cn','workflowaction-setVerification','',''),(959,'priv','zh-tw','workflowaction-setVerification','',''),(960,'priv','de','workflowaction-setNotice','',''),(960,'priv','en','workflowaction-setNotice','',''),(960,'priv','fr','workflowaction-setNotice','',''),(960,'priv','zh-cn','workflowaction-setNotice','',''),(960,'priv','zh-tw','workflowaction-setNotice','',''),(961,'priv','de','workflowaction-setJS','',''),(961,'priv','en','workflowaction-setJS','',''),(961,'priv','fr','workflowaction-setJS','',''),(961,'priv','zh-cn','workflowaction-setJS','',''),(961,'priv','zh-tw','workflowaction-setJS','',''),(962,'priv','de','workflowaction-setCSS','',''),(962,'priv','en','workflowaction-setCSS','',''),(962,'priv','fr','workflowaction-setCSS','',''),(962,'priv','zh-cn','workflowaction-setCSS','',''),(962,'priv','zh-tw','workflowaction-setCSS','',''),(963,'priv','de','workflowlayout-admin','',''),(963,'priv','en','workflowlayout-admin','',''),(963,'priv','fr','workflowlayout-admin','',''),(963,'priv','zh-cn','workflowlayout-admin','',''),(963,'priv','zh-tw','workflowlayout-admin','',''),(964,'priv','de','workflowlayout-block','',''),(964,'priv','en','workflowlayout-block','',''),(964,'priv','fr','workflowlayout-block','',''),(964,'priv','zh-cn','workflowlayout-block','',''),(964,'priv','zh-tw','workflowlayout-block','',''),(965,'priv','de','workflowcondition-browse','',''),(965,'priv','en','workflowcondition-browse','',''),(965,'priv','fr','workflowcondition-browse','',''),(965,'priv','zh-cn','workflowcondition-browse','',''),(965,'priv','zh-tw','workflowcondition-browse','',''),(966,'priv','de','workflowcondition-create','',''),(966,'priv','en','workflowcondition-create','',''),(966,'priv','fr','workflowcondition-create','',''),(966,'priv','zh-cn','workflowcondition-create','',''),(966,'priv','zh-tw','workflowcondition-create','',''),(967,'priv','de','workflowcondition-edit','',''),(967,'priv','en','workflowcondition-edit','',''),(967,'priv','fr','workflowcondition-edit','',''),(967,'priv','zh-cn','workflowcondition-edit','',''),(967,'priv','zh-tw','workflowcondition-edit','',''),(968,'priv','de','workflowcondition-delete','',''),(968,'priv','en','workflowcondition-delete','',''),(968,'priv','fr','workflowcondition-delete','',''),(968,'priv','zh-cn','workflowcondition-delete','',''),(968,'priv','zh-tw','workflowcondition-delete','',''),(969,'priv','de','workflowlinkage-browse','',''),(969,'priv','en','workflowlinkage-browse','',''),(969,'priv','fr','workflowlinkage-browse','',''),(969,'priv','zh-cn','workflowlinkage-browse','',''),(969,'priv','zh-tw','workflowlinkage-browse','',''),(970,'priv','de','workflowlinkage-create','',''),(970,'priv','en','workflowlinkage-create','',''),(970,'priv','fr','workflowlinkage-create','',''),(970,'priv','zh-cn','workflowlinkage-create','',''),(970,'priv','zh-tw','workflowlinkage-create','',''),(971,'priv','de','workflowlinkage-edit','',''),(971,'priv','en','workflowlinkage-edit','',''),(971,'priv','fr','workflowlinkage-edit','',''),(971,'priv','zh-cn','workflowlinkage-edit','',''),(971,'priv','zh-tw','workflowlinkage-edit','',''),(972,'priv','de','workflowlinkage-delete','',''),(972,'priv','en','workflowlinkage-delete','',''),(972,'priv','fr','workflowlinkage-delete','',''),(972,'priv','zh-cn','workflowlinkage-delete','',''),(972,'priv','zh-tw','workflowlinkage-delete','',''),(973,'priv','de','workflowhook-browse','',''),(973,'priv','en','workflowhook-browse','',''),(973,'priv','fr','workflowhook-browse','',''),(973,'priv','zh-cn','workflowhook-browse','',''),(973,'priv','zh-tw','workflowhook-browse','',''),(974,'priv','de','workflowhook-create','',''),(974,'priv','en','workflowhook-create','',''),(974,'priv','fr','workflowhook-create','',''),(974,'priv','zh-cn','workflowhook-create','',''),(974,'priv','zh-tw','workflowhook-create','',''),(975,'priv','de','workflowhook-edit','',''),(975,'priv','en','workflowhook-edit','',''),(975,'priv','fr','workflowhook-edit','',''),(975,'priv','zh-cn','workflowhook-edit','',''),(975,'priv','zh-tw','workflowhook-edit','',''),(976,'priv','de','workflowhook-delete','',''),(976,'priv','en','workflowhook-delete','',''),(976,'priv','fr','workflowhook-delete','',''),(976,'priv','zh-cn','workflowhook-delete','',''),(976,'priv','zh-tw','workflowhook-delete','',''),(977,'priv','de','workflowlabel-browse','',''),(977,'priv','en','workflowlabel-browse','',''),(977,'priv','fr','workflowlabel-browse','',''),(977,'priv','zh-cn','workflowlabel-browse','',''),(977,'priv','zh-tw','workflowlabel-browse','',''),(978,'priv','de','workflowlabel-create','',''),(978,'priv','en','workflowlabel-create','',''),(978,'priv','fr','workflowlabel-create','',''),(978,'priv','zh-cn','workflowlabel-create','',''),(978,'priv','zh-tw','workflowlabel-create','',''),(979,'priv','de','workflowlabel-edit','',''),(979,'priv','en','workflowlabel-edit','',''),(979,'priv','fr','workflowlabel-edit','',''),(979,'priv','zh-cn','workflowlabel-edit','',''),(979,'priv','zh-tw','workflowlabel-edit','',''),(980,'priv','de','workflowlabel-delete','',''),(980,'priv','en','workflowlabel-delete','',''),(980,'priv','fr','workflowlabel-delete','',''),(980,'priv','zh-cn','workflowlabel-delete','',''),(980,'priv','zh-tw','workflowlabel-delete','',''),(981,'priv','de','workflowlabel-sort','',''),(981,'priv','en','workflowlabel-sort','',''),(981,'priv','fr','workflowlabel-sort','',''),(981,'priv','zh-cn','workflowlabel-sort','',''),(981,'priv','zh-tw','workflowlabel-sort','',''),(982,'priv','de','workflowrelation-admin','',''),(982,'priv','en','workflowrelation-admin','',''),(982,'priv','fr','workflowrelation-admin','',''),(982,'priv','zh-cn','workflowrelation-admin','',''),(982,'priv','zh-tw','workflowrelation-admin','',''),(983,'priv','de','workflowreport-brow','',''),(983,'priv','en','workflowreport-brow','',''),(983,'priv','fr','workflowreport-brow','',''),(983,'priv','zh-cn','workflowreport-brow','',''),(983,'priv','zh-tw','workflowreport-brow','',''),(984,'priv','de','workflowreport-create','',''),(984,'priv','en','workflowreport-create','',''),(984,'priv','fr','workflowreport-create','',''),(984,'priv','zh-cn','workflowreport-create','',''),(984,'priv','zh-tw','workflowreport-create','',''),(985,'priv','de','workflowreport-edit','',''),(985,'priv','en','workflowreport-edit','',''),(985,'priv','fr','workflowreport-edit','',''),(985,'priv','zh-cn','workflowreport-edit','',''),(985,'priv','zh-tw','workflowreport-edit','',''),(986,'priv','de','workflowreport-delete','',''),(986,'priv','en','workflowreport-delete','',''),(986,'priv','fr','workflowreport-delete','',''),(986,'priv','zh-cn','workflowreport-delete','',''),(986,'priv','zh-tw','workflowreport-delete','',''),(987,'priv','de','workflowreport-sort','',''),(987,'priv','en','workflowreport-sort','',''),(987,'priv','fr','workflowreport-sort','',''),(987,'priv','zh-cn','workflowreport-sort','',''),(987,'priv','zh-tw','workflowreport-sort','',''),(988,'priv','de','workflowdatasource-browse','',''),(988,'priv','en','workflowdatasource-browse','',''),(988,'priv','fr','workflowdatasource-browse','',''),(988,'priv','zh-cn','workflowdatasource-browse','',''),(988,'priv','zh-tw','workflowdatasource-browse','',''),(989,'priv','de','workflowdatasource-create','',''),(989,'priv','en','workflowdatasource-create','',''),(989,'priv','fr','workflowdatasource-create','',''),(989,'priv','zh-cn','workflowdatasource-create','',''),(989,'priv','zh-tw','workflowdatasource-create','',''),(990,'priv','de','workflowdatasource-edit','',''),(990,'priv','en','workflowdatasource-edit','',''),(990,'priv','fr','workflowdatasource-edit','',''),(990,'priv','zh-cn','workflowdatasource-edit','',''),(990,'priv','zh-tw','workflowdatasource-edit','',''),(991,'priv','de','workflowdatasource-delete','',''),(991,'priv','en','workflowdatasource-delete','',''),(991,'priv','fr','workflowdatasource-delete','',''),(991,'priv','zh-cn','workflowdatasource-delete','',''),(991,'priv','zh-tw','workflowdatasource-delete','',''),(992,'priv','de','workflowrule-browse','',''),(992,'priv','en','workflowrule-browse','',''),(992,'priv','fr','workflowrule-browse','',''),(992,'priv','zh-cn','workflowrule-browse','',''),(992,'priv','zh-tw','workflowrule-browse','',''),(993,'priv','de','workflowrule-create','',''),(993,'priv','en','workflowrule-create','',''),(993,'priv','fr','workflowrule-create','',''),(993,'priv','zh-cn','workflowrule-create','',''),(993,'priv','zh-tw','workflowrule-create','',''),(994,'priv','de','workflowrule-edit','',''),(994,'priv','en','workflowrule-edit','',''),(994,'priv','fr','workflowrule-edit','',''),(994,'priv','zh-cn','workflowrule-edit','',''),(994,'priv','zh-tw','workflowrule-edit','',''),(995,'priv','de','workflowrule-view','',''),(995,'priv','en','workflowrule-view','',''),(995,'priv','fr','workflowrule-view','',''),(995,'priv','zh-cn','workflowrule-view','',''),(995,'priv','zh-tw','workflowrule-view','',''),(996,'priv','de','workflowrule-delete','',''),(996,'priv','en','workflowrule-delete','',''),(996,'priv','fr','workflowrule-delete','',''),(996,'priv','zh-cn','workflowrule-delete','',''),(996,'priv','zh-tw','workflowrule-delete','',''),(997,'priv','de','projectbuild-browse','',''),(997,'priv','en','projectbuild-browse','',''),(997,'priv','fr','projectbuild-browse','',''),(997,'priv','zh-cn','projectbuild-browse','',''),(997,'priv','zh-tw','projectbuild-browse','',''),(998,'priv','de','projectbuild-create','',''),(998,'priv','en','projectbuild-create','',''),(998,'priv','fr','projectbuild-create','',''),(998,'priv','zh-cn','projectbuild-create','',''),(998,'priv','zh-tw','projectbuild-create','',''),(999,'priv','de','projectbuild-edit','',''),(999,'priv','en','projectbuild-edit','',''),(999,'priv','fr','projectbuild-edit','',''),(999,'priv','zh-cn','projectbuild-edit','',''),(999,'priv','zh-tw','projectbuild-edit','',''),(1000,'priv','de','projectbuild-view','',''),(1000,'priv','en','projectbuild-view','',''),(1000,'priv','fr','projectbuild-view','',''),(1000,'priv','zh-cn','projectbuild-view','',''),(1000,'priv','zh-tw','projectbuild-view','',''),(1001,'priv','de','projectbuild-delete','',''),(1001,'priv','en','projectbuild-delete','',''),(1001,'priv','fr','projectbuild-delete','',''),(1001,'priv','zh-cn','projectbuild-delete','',''),(1001,'priv','zh-tw','projectbuild-delete','',''),(1002,'priv','de','projectbuild-linkStory','',''),(1002,'priv','en','projectbuild-linkStory','',''),(1002,'priv','fr','projectbuild-linkStory','',''),(1002,'priv','zh-cn','projectbuild-linkStory','',''),(1002,'priv','zh-tw','projectbuild-linkStory','',''),(1003,'priv','de','projectbuild-unlinkStory','',''),(1003,'priv','en','projectbuild-unlinkStory','',''),(1003,'priv','fr','projectbuild-unlinkStory','',''),(1003,'priv','zh-cn','projectbuild-unlinkStory','',''),(1003,'priv','zh-tw','projectbuild-unlinkStory','',''),(1004,'priv','de','projectbuild-batchUnlinkStory','',''),(1004,'priv','en','projectbuild-batchUnlinkStory','',''),(1004,'priv','fr','projectbuild-batchUnlinkStory','',''),(1004,'priv','zh-cn','projectbuild-batchUnlinkStory','',''),(1004,'priv','zh-tw','projectbuild-batchUnlinkStory','',''),(1005,'priv','de','projectbuild-linkBug','',''),(1005,'priv','en','projectbuild-linkBug','',''),(1005,'priv','fr','projectbuild-linkBug','',''),(1005,'priv','zh-cn','projectbuild-linkBug','',''),(1005,'priv','zh-tw','projectbuild-linkBug','',''),(1006,'priv','de','projectbuild-unlinkBug','',''),(1006,'priv','en','projectbuild-unlinkBug','',''),(1006,'priv','fr','projectbuild-unlinkBug','',''),(1006,'priv','zh-cn','projectbuild-unlinkBug','',''),(1006,'priv','zh-tw','projectbuild-unlinkBug','',''),(1007,'priv','de','projectbuild-batchUnlinkBug','',''),(1007,'priv','en','projectbuild-batchUnlinkBug','',''),(1007,'priv','fr','projectbuild-batchUnlinkBug','',''),(1007,'priv','zh-cn','projectbuild-batchUnlinkBug','',''),(1007,'priv','zh-tw','projectbuild-batchUnlinkBug','',''),(1008,'priv','de','projectrelease-browseAction','',''),(1008,'priv','en','projectrelease-browseAction','',''),(1008,'priv','fr','projectrelease-browseAction','',''),(1008,'priv','zh-cn','projectrelease-browseAction','',''),(1008,'priv','zh-tw','projectrelease-browseAction','',''),(1009,'priv','de','projectrelease-create','',''),(1009,'priv','en','projectrelease-create','',''),(1009,'priv','fr','projectrelease-create','',''),(1009,'priv','zh-cn','projectrelease-create','',''),(1009,'priv','zh-tw','projectrelease-create','',''),(1010,'priv','de','projectrelease-edit','',''),(1010,'priv','en','projectrelease-edit','',''),(1010,'priv','fr','projectrelease-edit','',''),(1010,'priv','zh-cn','projectrelease-edit','',''),(1010,'priv','zh-tw','projectrelease-edit','',''),(1011,'priv','de','projectrelease-delete','',''),(1011,'priv','en','projectrelease-delete','',''),(1011,'priv','fr','projectrelease-delete','',''),(1011,'priv','zh-cn','projectrelease-delete','',''),(1011,'priv','zh-tw','projectrelease-delete','',''),(1012,'priv','de','projectrelease-view','',''),(1012,'priv','en','projectrelease-view','',''),(1012,'priv','fr','projectrelease-view','',''),(1012,'priv','zh-cn','projectrelease-view','',''),(1012,'priv','zh-tw','projectrelease-view','',''),(1013,'priv','de','projectrelease-export','',''),(1013,'priv','en','projectrelease-export','',''),(1013,'priv','fr','projectrelease-export','',''),(1013,'priv','zh-cn','projectrelease-export','',''),(1013,'priv','zh-tw','projectrelease-export','',''),(1014,'priv','de','projectrelease-linkStory','',''),(1014,'priv','en','projectrelease-linkStory','',''),(1014,'priv','fr','projectrelease-linkStory','',''),(1014,'priv','zh-cn','projectrelease-linkStory','',''),(1014,'priv','zh-tw','projectrelease-linkStory','',''),(1015,'priv','de','projectrelease-unlinkStory','',''),(1015,'priv','en','projectrelease-unlinkStory','',''),(1015,'priv','fr','projectrelease-unlinkStory','',''),(1015,'priv','zh-cn','projectrelease-unlinkStory','',''),(1015,'priv','zh-tw','projectrelease-unlinkStory','',''),(1016,'priv','de','projectrelease-batchUnlinkStory','',''),(1016,'priv','en','projectrelease-batchUnlinkStory','',''),(1016,'priv','fr','projectrelease-batchUnlinkStory','',''),(1016,'priv','zh-cn','projectrelease-batchUnlinkStory','',''),(1016,'priv','zh-tw','projectrelease-batchUnlinkStory','',''),(1017,'priv','de','projectrelease-linkBug','',''),(1017,'priv','en','projectrelease-linkBug','',''),(1017,'priv','fr','projectrelease-linkBug','',''),(1017,'priv','zh-cn','projectrelease-linkBug','',''),(1017,'priv','zh-tw','projectrelease-linkBug','',''),(1018,'priv','de','projectrelease-unlinkBug','',''),(1018,'priv','en','projectrelease-unlinkBug','',''),(1018,'priv','fr','projectrelease-unlinkBug','',''),(1018,'priv','zh-cn','projectrelease-unlinkBug','',''),(1018,'priv','zh-tw','projectrelease-unlinkBug','',''),(1019,'priv','de','projectrelease-batchUnlinkBug','',''),(1019,'priv','en','projectrelease-batchUnlinkBug','',''),(1019,'priv','fr','projectrelease-batchUnlinkBug','',''),(1019,'priv','zh-cn','projectrelease-batchUnlinkBug','',''),(1019,'priv','zh-tw','projectrelease-batchUnlinkBug','',''),(1020,'priv','de','projectrelease-changeStatus','',''),(1020,'priv','en','projectrelease-changeStatus','',''),(1020,'priv','fr','projectrelease-changeStatus','',''),(1020,'priv','zh-cn','projectrelease-changeStatus','',''),(1020,'priv','zh-tw','projectrelease-changeStatus','',''),(1021,'priv','de','projectrelease-notify','',''),(1021,'priv','en','projectrelease-notify','',''),(1021,'priv','fr','projectrelease-notify','',''),(1021,'priv','zh-cn','projectrelease-notify','',''),(1021,'priv','zh-tw','projectrelease-notify','',''),(1022,'priv','de','stakeholder-browse','',''),(1022,'priv','en','stakeholder-browse','',''),(1022,'priv','fr','stakeholder-browse','',''),(1022,'priv','zh-cn','stakeholder-browse','',''),(1022,'priv','zh-tw','stakeholder-browse','',''),(1023,'priv','de','stakeholder-create','',''),(1023,'priv','en','stakeholder-create','',''),(1023,'priv','fr','stakeholder-create','',''),(1023,'priv','zh-cn','stakeholder-create','',''),(1023,'priv','zh-tw','stakeholder-create','',''),(1024,'priv','de','stakeholder-batchCreate','',''),(1024,'priv','en','stakeholder-batchCreate','',''),(1024,'priv','fr','stakeholder-batchCreate','',''),(1024,'priv','zh-cn','stakeholder-batchCreate','',''),(1024,'priv','zh-tw','stakeholder-batchCreate','',''),(1025,'priv','de','stakeholder-edit','',''),(1025,'priv','en','stakeholder-edit','',''),(1025,'priv','fr','stakeholder-edit','',''),(1025,'priv','zh-cn','stakeholder-edit','',''),(1025,'priv','zh-tw','stakeholder-edit','',''),(1027,'priv','de','stakeholder-delete','',''),(1027,'priv','en','stakeholder-delete','',''),(1027,'priv','fr','stakeholder-delete','',''),(1027,'priv','zh-cn','stakeholder-delete','',''),(1027,'priv','zh-tw','stakeholder-delete','',''),(1028,'priv','de','stakeholder-viewAction','',''),(1028,'priv','en','stakeholder-viewAction','',''),(1028,'priv','fr','stakeholder-viewAction','',''),(1028,'priv','zh-cn','stakeholder-viewAction','',''),(1028,'priv','zh-tw','stakeholder-viewAction','',''),(1031,'priv','de','stakeholder-communicate','',''),(1031,'priv','en','stakeholder-communicate','',''),(1031,'priv','fr','stakeholder-communicate','',''),(1031,'priv','zh-cn','stakeholder-communicate','',''),(1031,'priv','zh-tw','stakeholder-communicate','',''),(1032,'priv','de','stakeholder-expect','',''),(1032,'priv','en','stakeholder-expect','',''),(1032,'priv','fr','stakeholder-expect','',''),(1032,'priv','zh-cn','stakeholder-expect','',''),(1032,'priv','zh-tw','stakeholder-expect','',''),(1038,'priv','de','stakeholder-userIssue','',''),(1038,'priv','en','stakeholder-userIssue','',''),(1038,'priv','fr','stakeholder-userIssue','',''),(1038,'priv','zh-cn','stakeholder-userIssue','',''),(1038,'priv','zh-tw','stakeholder-userIssue','',''),(1039,'priv','de','branch-manage','',''),(1039,'priv','en','branch-manage','',''),(1039,'priv','fr','branch-manage','',''),(1039,'priv','zh-cn','branch-manage','',''),(1039,'priv','zh-tw','branch-manage','',''),(1040,'priv','de','branch-createAction','',''),(1040,'priv','en','branch-createAction','',''),(1040,'priv','fr','branch-createAction','',''),(1040,'priv','zh-cn','branch-createAction','',''),(1040,'priv','zh-tw','branch-createAction','',''),(1041,'priv','de','branch-editAction','',''),(1041,'priv','en','branch-editAction','',''),(1041,'priv','fr','branch-editAction','',''),(1041,'priv','zh-cn','branch-editAction','',''),(1041,'priv','zh-tw','branch-editAction','',''),(1042,'priv','de','branch-closeAction','',''),(1042,'priv','en','branch-closeAction','',''),(1042,'priv','fr','branch-closeAction','',''),(1042,'priv','zh-cn','branch-closeAction','',''),(1042,'priv','zh-tw','branch-closeAction','',''),(1043,'priv','de','branch-activateAction','',''),(1043,'priv','en','branch-activateAction','',''),(1043,'priv','fr','branch-activateAction','',''),(1043,'priv','zh-cn','branch-activateAction','',''),(1043,'priv','zh-tw','branch-activateAction','',''),(1044,'priv','de','branch-sort','',''),(1044,'priv','en','branch-sort','',''),(1044,'priv','fr','branch-sort','',''),(1044,'priv','zh-cn','branch-sort','',''),(1044,'priv','zh-tw','branch-sort','',''),(1045,'priv','de','branch-batchEdit','',''),(1045,'priv','en','branch-batchEdit','',''),(1045,'priv','fr','branch-batchEdit','',''),(1045,'priv','zh-cn','branch-batchEdit','',''),(1045,'priv','zh-tw','branch-batchEdit','',''),(1046,'priv','de','branch-mergeBranchAction','',''),(1046,'priv','en','branch-mergeBranchAction','',''),(1046,'priv','fr','branch-mergeBranchAction','',''),(1046,'priv','zh-cn','branch-mergeBranchAction','',''),(1046,'priv','zh-tw','branch-mergeBranchAction','',''),(1047,'priv','de','repo-createAction','',''),(1047,'priv','en','repo-createAction','',''),(1047,'priv','fr','repo-createAction','',''),(1047,'priv','zh-cn','repo-createAction','',''),(1047,'priv','zh-tw','repo-createAction','',''),(1048,'priv','de','repo-editAction','',''),(1048,'priv','en','repo-editAction','',''),(1048,'priv','fr','repo-editAction','',''),(1048,'priv','zh-cn','repo-editAction','',''),(1048,'priv','zh-tw','repo-editAction','',''),(1049,'priv','de','repo-delete','',''),(1049,'priv','en','repo-delete','',''),(1049,'priv','fr','repo-delete','',''),(1049,'priv','zh-cn','repo-delete','',''),(1049,'priv','zh-tw','repo-delete','',''),(1050,'priv','de','repo-showSyncCommit','',''),(1050,'priv','en','repo-showSyncCommit','',''),(1050,'priv','fr','repo-showSyncCommit','',''),(1050,'priv','zh-cn','repo-showSyncCommit','',''),(1050,'priv','zh-tw','repo-showSyncCommit','',''),(1051,'priv','de','repo-maintain','',''),(1051,'priv','en','repo-maintain','',''),(1051,'priv','fr','repo-maintain','',''),(1051,'priv','zh-cn','repo-maintain','',''),(1051,'priv','zh-tw','repo-maintain','',''),(1052,'priv','de','repo-browseAction','',''),(1052,'priv','en','repo-browseAction','',''),(1052,'priv','fr','repo-browseAction','',''),(1052,'priv','zh-cn','repo-browseAction','',''),(1052,'priv','zh-tw','repo-browseAction','',''),(1053,'priv','de','repo-view','',''),(1053,'priv','en','repo-view','',''),(1053,'priv','fr','repo-view','',''),(1053,'priv','zh-cn','repo-view','',''),(1053,'priv','zh-tw','repo-view','',''),(1054,'priv','de','repo-diffAction','',''),(1054,'priv','en','repo-diffAction','',''),(1054,'priv','fr','repo-diffAction','',''),(1054,'priv','zh-cn','repo-diffAction','',''),(1054,'priv','zh-tw','repo-diffAction','',''),(1055,'priv','de','repo-log','',''),(1055,'priv','en','repo-log','',''),(1055,'priv','fr','repo-log','',''),(1055,'priv','zh-cn','repo-log','',''),(1055,'priv','zh-tw','repo-log','',''),(1056,'priv','de','repo-revisionAction','',''),(1056,'priv','en','repo-revisionAction','',''),(1056,'priv','fr','repo-revisionAction','',''),(1056,'priv','zh-cn','repo-revisionAction','',''),(1056,'priv','zh-tw','repo-revisionAction','',''),(1057,'priv','de','repo-blameAction','',''),(1057,'priv','en','repo-blameAction','',''),(1057,'priv','fr','repo-blameAction','',''),(1057,'priv','zh-cn','repo-blameAction','',''),(1057,'priv','zh-tw','repo-blameAction','',''),(1058,'priv','de','repo-downloadAction','',''),(1058,'priv','en','repo-downloadAction','',''),(1058,'priv','fr','repo-downloadAction','',''),(1058,'priv','zh-cn','repo-downloadAction','',''),(1058,'priv','zh-tw','repo-downloadAction','',''),(1059,'priv','de','repo-setRules','',''),(1059,'priv','en','repo-setRules','',''),(1059,'priv','fr','repo-setRules','',''),(1059,'priv','zh-cn','repo-setRules','',''),(1059,'priv','zh-tw','repo-setRules','',''),(1060,'priv','de','repo-apiGetRepoByUrl','',''),(1060,'priv','en','repo-apiGetRepoByUrl','',''),(1060,'priv','fr','repo-apiGetRepoByUrl','',''),(1060,'priv','zh-cn','repo-apiGetRepoByUrl','',''),(1060,'priv','zh-tw','repo-apiGetRepoByUrl','',''),(1061,'priv','de','repo-downloadCode','',''),(1061,'priv','en','repo-downloadCode','',''),(1061,'priv','fr','repo-downloadCode','',''),(1061,'priv','zh-cn','repo-downloadCode','',''),(1061,'priv','zh-tw','repo-downloadCode','',''),(1062,'priv','de','repo-linkStory','',''),(1062,'priv','en','repo-linkStory','',''),(1062,'priv','fr','repo-linkStory','',''),(1062,'priv','zh-cn','repo-linkStory','',''),(1062,'priv','zh-tw','repo-linkStory','',''),(1063,'priv','de','repo-linkBug','',''),(1063,'priv','en','repo-linkBug','',''),(1063,'priv','fr','repo-linkBug','',''),(1063,'priv','zh-cn','repo-linkBug','',''),(1063,'priv','zh-tw','repo-linkBug','',''),(1064,'priv','de','repo-linkTask','',''),(1064,'priv','en','repo-linkTask','',''),(1064,'priv','fr','repo-linkTask','',''),(1064,'priv','zh-cn','repo-linkTask','',''),(1064,'priv','zh-tw','repo-linkTask','',''),(1065,'priv','de','repo-unlink','',''),(1065,'priv','en','repo-unlink','',''),(1065,'priv','fr','repo-unlink','',''),(1065,'priv','zh-cn','repo-unlink','',''),(1065,'priv','zh-tw','repo-unlink','',''),(1066,'priv','de','repo-reviewAction','',''),(1066,'priv','en','repo-reviewAction','',''),(1066,'priv','fr','repo-reviewAction','',''),(1066,'priv','zh-cn','repo-reviewAction','',''),(1066,'priv','zh-tw','repo-reviewAction','',''),(1067,'priv','de','repo-addBug','',''),(1067,'priv','en','repo-addBug','',''),(1067,'priv','fr','repo-addBug','',''),(1067,'priv','zh-cn','repo-addBug','',''),(1067,'priv','zh-tw','repo-addBug','',''),(1068,'priv','de','repo-editBug','',''),(1068,'priv','en','repo-editBug','',''),(1068,'priv','fr','repo-editBug','',''),(1068,'priv','zh-cn','repo-editBug','',''),(1068,'priv','zh-tw','repo-editBug','',''),(1069,'priv','de','repo-deleteBug','',''),(1069,'priv','en','repo-deleteBug','',''),(1069,'priv','fr','repo-deleteBug','',''),(1069,'priv','zh-cn','repo-deleteBug','',''),(1069,'priv','zh-tw','repo-deleteBug','',''),(1070,'priv','de','repo-addComment','',''),(1070,'priv','en','repo-addComment','',''),(1070,'priv','fr','repo-addComment','',''),(1070,'priv','zh-cn','repo-addComment','',''),(1070,'priv','zh-tw','repo-addComment','',''),(1071,'priv','de','repo-editComment','',''),(1071,'priv','en','repo-editComment','',''),(1071,'priv','fr','repo-editComment','',''),(1071,'priv','zh-cn','repo-editComment','',''),(1071,'priv','zh-tw','repo-editComment','',''),(1072,'priv','de','repo-deleteComment','',''),(1072,'priv','en','repo-deleteComment','',''),(1072,'priv','fr','repo-deleteComment','',''),(1072,'priv','zh-cn','repo-deleteComment','',''),(1072,'priv','zh-tw','repo-deleteComment','',''),(1073,'priv','de','ci-commitResult','',''),(1073,'priv','en','ci-commitResult','',''),(1073,'priv','fr','ci-commitResult','',''),(1073,'priv','zh-cn','ci-commitResult','',''),(1073,'priv','zh-tw','ci-commitResult','',''),(1074,'priv','de','ci-checkCompileStatus','',''),(1074,'priv','en','ci-checkCompileStatus','',''),(1074,'priv','fr','ci-checkCompileStatus','',''),(1074,'priv','zh-cn','ci-checkCompileStatus','',''),(1074,'priv','zh-tw','ci-checkCompileStatus','',''),(1075,'priv','de','compile-browse','',''),(1075,'priv','en','compile-browse','',''),(1075,'priv','fr','compile-browse','',''),(1075,'priv','zh-cn','compile-browse','',''),(1075,'priv','zh-tw','compile-browse','',''),(1076,'priv','de','compile-logs','',''),(1076,'priv','en','compile-logs','',''),(1076,'priv','fr','compile-logs','',''),(1076,'priv','zh-cn','compile-logs','',''),(1076,'priv','zh-tw','compile-logs','',''),(1077,'priv','de','compile-syncCompile','',''),(1077,'priv','en','compile-syncCompile','',''),(1077,'priv','fr','compile-syncCompile','',''),(1077,'priv','zh-cn','compile-syncCompile','',''),(1077,'priv','zh-tw','compile-syncCompile','',''),(1078,'priv','de','jenkins-browseAction','',''),(1078,'priv','en','jenkins-browseAction','',''),(1078,'priv','fr','jenkins-browseAction','',''),(1078,'priv','zh-cn','jenkins-browseAction','',''),(1078,'priv','zh-tw','jenkins-browseAction','',''),(1079,'priv','de','jenkins-create','',''),(1079,'priv','en','jenkins-create','',''),(1079,'priv','fr','jenkins-create','',''),(1079,'priv','zh-cn','jenkins-create','',''),(1079,'priv','zh-tw','jenkins-create','',''),(1080,'priv','de','jenkins-edit','',''),(1080,'priv','en','jenkins-edit','',''),(1080,'priv','fr','jenkins-edit','',''),(1080,'priv','zh-cn','jenkins-edit','',''),(1080,'priv','zh-tw','jenkins-edit','',''),(1081,'priv','de','jenkins-deleteAction','',''),(1081,'priv','en','jenkins-deleteAction','',''),(1081,'priv','fr','jenkins-deleteAction','',''),(1081,'priv','zh-cn','jenkins-deleteAction','',''),(1081,'priv','zh-tw','jenkins-deleteAction','',''),(1082,'priv','de','job-browseAction','',''),(1082,'priv','en','job-browseAction','',''),(1082,'priv','fr','job-browseAction','',''),(1082,'priv','zh-cn','job-browseAction','',''),(1082,'priv','zh-tw','job-browseAction','',''),(1083,'priv','de','job-create','',''),(1083,'priv','en','job-create','',''),(1083,'priv','fr','job-create','',''),(1083,'priv','zh-cn','job-create','',''),(1083,'priv','zh-tw','job-create','',''),(1084,'priv','de','job-edit','',''),(1084,'priv','en','job-edit','',''),(1084,'priv','fr','job-edit','',''),(1084,'priv','zh-cn','job-edit','',''),(1084,'priv','zh-tw','job-edit','',''),(1085,'priv','de','job-delete','',''),(1085,'priv','en','job-delete','',''),(1085,'priv','fr','job-delete','',''),(1085,'priv','zh-cn','job-delete','',''),(1085,'priv','zh-tw','job-delete','',''),(1086,'priv','de','job-exec','',''),(1086,'priv','en','job-exec','',''),(1086,'priv','fr','job-exec','',''),(1086,'priv','zh-cn','job-exec','',''),(1086,'priv','zh-tw','job-exec','',''),(1087,'priv','de','job-view','',''),(1087,'priv','en','job-view','',''),(1087,'priv','fr','job-view','',''),(1087,'priv','zh-cn','job-view','',''),(1087,'priv','zh-tw','job-view','',''),(1088,'priv','de','datatable-setGlobal','',''),(1088,'priv','en','datatable-setGlobal','',''),(1088,'priv','fr','datatable-setGlobal','',''),(1088,'priv','zh-cn','datatable-setGlobal','',''),(1088,'priv','zh-tw','datatable-setGlobal','',''),(1089,'priv','de','gitlab-browseAction','',''),(1089,'priv','en','gitlab-browseAction','',''),(1089,'priv','fr','gitlab-browseAction','',''),(1089,'priv','zh-cn','gitlab-browseAction','',''),(1089,'priv','zh-tw','gitlab-browseAction','',''),(1090,'priv','de','gitlab-create','',''),(1090,'priv','en','gitlab-create','',''),(1090,'priv','fr','gitlab-create','',''),(1090,'priv','zh-cn','gitlab-create','',''),(1090,'priv','zh-tw','gitlab-create','',''),(1091,'priv','de','gitlab-edit','',''),(1091,'priv','en','gitlab-edit','',''),(1091,'priv','fr','gitlab-edit','',''),(1091,'priv','zh-cn','gitlab-edit','',''),(1091,'priv','zh-tw','gitlab-edit','',''),(1092,'priv','de','gitlab-view','',''),(1092,'priv','en','gitlab-view','',''),(1092,'priv','fr','gitlab-view','',''),(1092,'priv','zh-cn','gitlab-view','',''),(1092,'priv','zh-tw','gitlab-view','',''),(1093,'priv','de','gitlab-importIssue','',''),(1093,'priv','en','gitlab-importIssue','',''),(1093,'priv','fr','gitlab-importIssue','',''),(1093,'priv','zh-cn','gitlab-importIssue','',''),(1093,'priv','zh-tw','gitlab-importIssue','',''),(1094,'priv','de','gitlab-delete','',''),(1094,'priv','en','gitlab-delete','',''),(1094,'priv','fr','gitlab-delete','',''),(1094,'priv','zh-cn','gitlab-delete','',''),(1094,'priv','zh-tw','gitlab-delete','',''),(1095,'priv','de','gitlab-bindUser','',''),(1095,'priv','en','gitlab-bindUser','',''),(1095,'priv','fr','gitlab-bindUser','',''),(1095,'priv','zh-cn','gitlab-bindUser','',''),(1095,'priv','zh-tw','gitlab-bindUser','',''),(1096,'priv','de','gitlab-browseProject','',''),(1096,'priv','en','gitlab-browseProject','',''),(1096,'priv','fr','gitlab-browseProject','',''),(1096,'priv','zh-cn','gitlab-browseProject','',''),(1096,'priv','zh-tw','gitlab-browseProject','',''),(1097,'priv','de','gitlab-createProject','',''),(1097,'priv','en','gitlab-createProject','',''),(1097,'priv','fr','gitlab-createProject','',''),(1097,'priv','zh-cn','gitlab-createProject','',''),(1097,'priv','zh-tw','gitlab-createProject','',''),(1098,'priv','de','gitlab-editProject','',''),(1098,'priv','en','gitlab-editProject','',''),(1098,'priv','fr','gitlab-editProject','',''),(1098,'priv','zh-cn','gitlab-editProject','',''),(1098,'priv','zh-tw','gitlab-editProject','',''),(1099,'priv','de','gitlab-deleteProject','',''),(1099,'priv','en','gitlab-deleteProject','',''),(1099,'priv','fr','gitlab-deleteProject','',''),(1099,'priv','zh-cn','gitlab-deleteProject','',''),(1099,'priv','zh-tw','gitlab-deleteProject','',''),(1100,'priv','de','gitlab-browseGroup','',''),(1100,'priv','en','gitlab-browseGroup','',''),(1100,'priv','fr','gitlab-browseGroup','',''),(1100,'priv','zh-cn','gitlab-browseGroup','',''),(1100,'priv','zh-tw','gitlab-browseGroup','',''),(1101,'priv','de','gitlab-createGroup','',''),(1101,'priv','en','gitlab-createGroup','',''),(1101,'priv','fr','gitlab-createGroup','',''),(1101,'priv','zh-cn','gitlab-createGroup','',''),(1101,'priv','zh-tw','gitlab-createGroup','',''),(1102,'priv','de','gitlab-editGroup','',''),(1102,'priv','en','gitlab-editGroup','',''),(1102,'priv','fr','gitlab-editGroup','',''),(1102,'priv','zh-cn','gitlab-editGroup','',''),(1102,'priv','zh-tw','gitlab-editGroup','',''),(1103,'priv','de','gitlab-deleteGroup','',''),(1103,'priv','en','gitlab-deleteGroup','',''),(1103,'priv','fr','gitlab-deleteGroup','',''),(1103,'priv','zh-cn','gitlab-deleteGroup','',''),(1103,'priv','zh-tw','gitlab-deleteGroup','',''),(1104,'priv','de','gitlab-manageGroupMembers','',''),(1104,'priv','en','gitlab-manageGroupMembers','',''),(1104,'priv','fr','gitlab-manageGroupMembers','',''),(1104,'priv','zh-cn','gitlab-manageGroupMembers','',''),(1104,'priv','zh-tw','gitlab-manageGroupMembers','',''),(1105,'priv','de','gitlab-browseUser','',''),(1105,'priv','en','gitlab-browseUser','',''),(1105,'priv','fr','gitlab-browseUser','',''),(1105,'priv','zh-cn','gitlab-browseUser','',''),(1105,'priv','zh-tw','gitlab-browseUser','',''),(1106,'priv','de','gitlab-createUser','',''),(1106,'priv','en','gitlab-createUser','',''),(1106,'priv','fr','gitlab-createUser','',''),(1106,'priv','zh-cn','gitlab-createUser','',''),(1106,'priv','zh-tw','gitlab-createUser','',''),(1107,'priv','de','gitlab-editUser','',''),(1107,'priv','en','gitlab-editUser','',''),(1107,'priv','fr','gitlab-editUser','',''),(1107,'priv','zh-cn','gitlab-editUser','',''),(1107,'priv','zh-tw','gitlab-editUser','',''),(1108,'priv','de','gitlab-deleteUser','',''),(1108,'priv','en','gitlab-deleteUser','',''),(1108,'priv','fr','gitlab-deleteUser','',''),(1108,'priv','zh-cn','gitlab-deleteUser','',''),(1108,'priv','zh-tw','gitlab-deleteUser','',''),(1109,'priv','de','gitlab-createBranch','',''),(1109,'priv','en','gitlab-createBranch','',''),(1109,'priv','fr','gitlab-createBranch','',''),(1109,'priv','zh-cn','gitlab-createBranch','',''),(1109,'priv','zh-tw','gitlab-createBranch','',''),(1110,'priv','de','gitlab-browseBranch','',''),(1110,'priv','en','gitlab-browseBranch','',''),(1110,'priv','fr','gitlab-browseBranch','',''),(1110,'priv','zh-cn','gitlab-browseBranch','',''),(1110,'priv','zh-tw','gitlab-browseBranch','',''),(1111,'priv','de','gitlab-webhook','',''),(1111,'priv','en','gitlab-webhook','',''),(1111,'priv','fr','gitlab-webhook','',''),(1111,'priv','zh-cn','gitlab-webhook','',''),(1111,'priv','zh-tw','gitlab-webhook','',''),(1112,'priv','de','gitlab-createWebhook','',''),(1112,'priv','en','gitlab-createWebhook','',''),(1112,'priv','fr','gitlab-createWebhook','',''),(1112,'priv','zh-cn','gitlab-createWebhook','',''),(1112,'priv','zh-tw','gitlab-createWebhook','',''),(1113,'priv','de','gitlab-manageProjectMembers','',''),(1113,'priv','en','gitlab-manageProjectMembers','',''),(1113,'priv','fr','gitlab-manageProjectMembers','',''),(1113,'priv','zh-cn','gitlab-manageProjectMembers','',''),(1113,'priv','zh-tw','gitlab-manageProjectMembers','',''),(1114,'priv','de','gitlab-browseBranchPriv','',''),(1114,'priv','en','gitlab-browseBranchPriv','',''),(1114,'priv','fr','gitlab-browseBranchPriv','',''),(1114,'priv','zh-cn','gitlab-browseBranchPriv','',''),(1114,'priv','zh-tw','gitlab-browseBranchPriv','',''),(1115,'priv','de','gitlab-browseTagPriv','',''),(1115,'priv','en','gitlab-browseTagPriv','',''),(1115,'priv','fr','gitlab-browseTagPriv','',''),(1115,'priv','zh-cn','gitlab-browseTagPriv','',''),(1115,'priv','zh-tw','gitlab-browseTagPriv','',''),(1116,'priv','de','gitlab-browseTag','',''),(1116,'priv','en','gitlab-browseTag','',''),(1116,'priv','fr','gitlab-browseTag','',''),(1116,'priv','zh-cn','gitlab-browseTag','',''),(1116,'priv','zh-tw','gitlab-browseTag','',''),(1117,'priv','de','gitlab-createTag','',''),(1117,'priv','en','gitlab-createTag','',''),(1117,'priv','fr','gitlab-createTag','',''),(1117,'priv','zh-cn','gitlab-createTag','',''),(1117,'priv','zh-tw','gitlab-createTag','',''),(1118,'priv','de','gitlab-deleteTag','',''),(1118,'priv','en','gitlab-deleteTag','',''),(1118,'priv','fr','gitlab-deleteTag','',''),(1118,'priv','zh-cn','gitlab-deleteTag','',''),(1118,'priv','zh-tw','gitlab-deleteTag','',''),(1120,'priv','de','gogs-browseAction','',''),(1120,'priv','en','gogs-browseAction','',''),(1120,'priv','fr','gogs-browseAction','',''),(1120,'priv','zh-cn','gogs-browseAction','',''),(1120,'priv','zh-tw','gogs-browseAction','',''),(1121,'priv','de','gogs-create','',''),(1121,'priv','en','gogs-create','',''),(1121,'priv','fr','gogs-create','',''),(1121,'priv','zh-cn','gogs-create','',''),(1121,'priv','zh-tw','gogs-create','',''),(1122,'priv','de','gogs-edit','',''),(1122,'priv','en','gogs-edit','',''),(1122,'priv','fr','gogs-edit','',''),(1122,'priv','zh-cn','gogs-edit','',''),(1122,'priv','zh-tw','gogs-edit','',''),(1123,'priv','de','gogs-view','',''),(1123,'priv','en','gogs-view','',''),(1123,'priv','fr','gogs-view','',''),(1123,'priv','zh-cn','gogs-view','',''),(1123,'priv','zh-tw','gogs-view','',''),(1124,'priv','de','gogs-delete','',''),(1124,'priv','en','gogs-delete','',''),(1124,'priv','fr','gogs-delete','',''),(1124,'priv','zh-cn','gogs-delete','',''),(1124,'priv','zh-tw','gogs-delete','',''),(1125,'priv','de','gogs-bindUser','',''),(1125,'priv','en','gogs-bindUser','',''),(1125,'priv','fr','gogs-bindUser','',''),(1125,'priv','zh-cn','gogs-bindUser','',''),(1125,'priv','zh-tw','gogs-bindUser','',''),(1126,'priv','de','gitea-browseAction','',''),(1126,'priv','en','gitea-browseAction','',''),(1126,'priv','fr','gitea-browseAction','',''),(1126,'priv','zh-cn','gitea-browseAction','',''),(1126,'priv','zh-tw','gitea-browseAction','',''),(1127,'priv','de','gitea-create','',''),(1127,'priv','en','gitea-create','',''),(1127,'priv','fr','gitea-create','',''),(1127,'priv','zh-cn','gitea-create','',''),(1127,'priv','zh-tw','gitea-create','',''),(1128,'priv','de','gitea-edit','',''),(1128,'priv','en','gitea-edit','',''),(1128,'priv','fr','gitea-edit','',''),(1128,'priv','zh-cn','gitea-edit','',''),(1128,'priv','zh-tw','gitea-edit','',''),(1129,'priv','de','gitea-view','',''),(1129,'priv','en','gitea-view','',''),(1129,'priv','fr','gitea-view','',''),(1129,'priv','zh-cn','gitea-view','',''),(1129,'priv','zh-tw','gitea-view','',''),(1130,'priv','de','gitea-delete','',''),(1130,'priv','en','gitea-delete','',''),(1130,'priv','fr','gitea-delete','',''),(1130,'priv','zh-cn','gitea-delete','',''),(1130,'priv','zh-tw','gitea-delete','',''),(1131,'priv','de','gitea-bindUser','',''),(1131,'priv','en','gitea-bindUser','',''),(1131,'priv','fr','gitea-bindUser','',''),(1131,'priv','zh-cn','gitea-bindUser','',''),(1131,'priv','zh-tw','gitea-bindUser','',''),(1132,'priv','de','sonarqube-browse','',''),(1132,'priv','en','sonarqube-browse','',''),(1132,'priv','fr','sonarqube-browse','',''),(1132,'priv','zh-cn','sonarqube-browse','',''),(1132,'priv','zh-tw','sonarqube-browse','',''),(1133,'priv','de','sonarqube-create','',''),(1133,'priv','en','sonarqube-create','',''),(1133,'priv','fr','sonarqube-create','',''),(1133,'priv','zh-cn','sonarqube-create','',''),(1133,'priv','zh-tw','sonarqube-create','',''),(1134,'priv','de','sonarqube-edit','',''),(1134,'priv','en','sonarqube-edit','',''),(1134,'priv','fr','sonarqube-edit','',''),(1134,'priv','zh-cn','sonarqube-edit','',''),(1134,'priv','zh-tw','sonarqube-edit','',''),(1135,'priv','de','sonarqube-delete','',''),(1135,'priv','en','sonarqube-delete','',''),(1135,'priv','fr','sonarqube-delete','',''),(1135,'priv','zh-cn','sonarqube-delete','',''),(1135,'priv','zh-tw','sonarqube-delete','',''),(1136,'priv','de','sonarqube-browseProject','',''),(1136,'priv','en','sonarqube-browseProject','',''),(1136,'priv','fr','sonarqube-browseProject','',''),(1136,'priv','zh-cn','sonarqube-browseProject','',''),(1136,'priv','zh-tw','sonarqube-browseProject','',''),(1137,'priv','de','sonarqube-createProject','',''),(1137,'priv','en','sonarqube-createProject','',''),(1137,'priv','fr','sonarqube-createProject','',''),(1137,'priv','zh-cn','sonarqube-createProject','',''),(1137,'priv','zh-tw','sonarqube-createProject','',''),(1138,'priv','de','sonarqube-deleteProject','',''),(1138,'priv','en','sonarqube-deleteProject','',''),(1138,'priv','fr','sonarqube-deleteProject','',''),(1138,'priv','zh-cn','sonarqube-deleteProject','',''),(1138,'priv','zh-tw','sonarqube-deleteProject','',''),(1139,'priv','de','sonarqube-execJob','',''),(1139,'priv','en','sonarqube-execJob','',''),(1139,'priv','fr','sonarqube-execJob','',''),(1139,'priv','zh-cn','sonarqube-execJob','',''),(1139,'priv','zh-tw','sonarqube-execJob','',''),(1140,'priv','de','sonarqube-reportView','',''),(1140,'priv','en','sonarqube-reportView','',''),(1140,'priv','fr','sonarqube-reportView','',''),(1140,'priv','zh-cn','sonarqube-reportView','',''),(1140,'priv','zh-tw','sonarqube-reportView','',''),(1141,'priv','de','sonarqube-browseIssue','',''),(1141,'priv','en','sonarqube-browseIssue','',''),(1141,'priv','fr','sonarqube-browseIssue','',''),(1141,'priv','zh-cn','sonarqube-browseIssue','',''),(1141,'priv','zh-tw','sonarqube-browseIssue','',''),(1142,'priv','de','app-serverLink','',''),(1142,'priv','en','app-serverLink','',''),(1142,'priv','fr','app-serverLink','',''),(1142,'priv','zh-cn','app-serverLink','',''),(1142,'priv','zh-tw','app-serverLink','',''),(1143,'priv','de','webhook-list','',''),(1143,'priv','en','webhook-list','',''),(1143,'priv','fr','webhook-list','',''),(1143,'priv','zh-cn','webhook-list','',''),(1143,'priv','zh-tw','webhook-list','',''),(1144,'priv','de','webhook-create','',''),(1144,'priv','en','webhook-create','',''),(1144,'priv','fr','webhook-create','',''),(1144,'priv','zh-cn','webhook-create','',''),(1144,'priv','zh-tw','webhook-create','',''),(1145,'priv','de','webhook-edit','',''),(1145,'priv','en','webhook-edit','',''),(1145,'priv','fr','webhook-edit','',''),(1145,'priv','zh-cn','webhook-edit','',''),(1145,'priv','zh-tw','webhook-edit','',''),(1146,'priv','de','webhook-delete','',''),(1146,'priv','en','webhook-delete','',''),(1146,'priv','fr','webhook-delete','',''),(1146,'priv','zh-cn','webhook-delete','',''),(1146,'priv','zh-tw','webhook-delete','',''),(1147,'priv','de','webhook-logAction','',''),(1147,'priv','en','webhook-logAction','',''),(1147,'priv','fr','webhook-logAction','',''),(1147,'priv','zh-cn','webhook-logAction','',''),(1147,'priv','zh-tw','webhook-logAction','',''),(1148,'priv','de','webhook-bind','',''),(1148,'priv','en','webhook-bind','',''),(1148,'priv','fr','webhook-bind','',''),(1148,'priv','zh-cn','webhook-bind','',''),(1148,'priv','zh-tw','webhook-bind','',''),(1149,'priv','de','webhook-chooseDept','',''),(1149,'priv','en','webhook-chooseDept','',''),(1149,'priv','fr','webhook-chooseDept','',''),(1149,'priv','zh-cn','webhook-chooseDept','',''),(1149,'priv','zh-tw','webhook-chooseDept','',''),(1150,'priv','de','message-index','',''),(1150,'priv','en','message-index','',''),(1150,'priv','fr','message-index','',''),(1150,'priv','zh-cn','message-index','',''),(1150,'priv','zh-tw','message-index','',''),(1151,'priv','de','message-browser','',''),(1151,'priv','en','message-browser','',''),(1151,'priv','fr','message-browser','',''),(1151,'priv','zh-cn','message-browser','',''),(1151,'priv','zh-tw','message-browser','',''),(1152,'priv','de','message-setting','',''),(1152,'priv','en','message-setting','',''),(1152,'priv','fr','message-setting','',''),(1152,'priv','zh-cn','message-setting','',''),(1152,'priv','zh-tw','message-setting','',''),(1153,'priv','de','effort-calendarAction','',''),(1153,'priv','en','effort-calendarAction','',''),(1153,'priv','fr','effort-calendarAction','',''),(1153,'priv','zh-cn','effort-calendarAction','',''),(1153,'priv','zh-tw','effort-calendarAction','',''),(1154,'priv','de','effort-batchCreate','',''),(1154,'priv','en','effort-batchCreate','',''),(1154,'priv','fr','effort-batchCreate','',''),(1154,'priv','zh-cn','effort-batchCreate','',''),(1154,'priv','zh-tw','effort-batchCreate','',''),(1155,'priv','de','effort-createForObject','',''),(1155,'priv','en','effort-createForObject','',''),(1155,'priv','fr','effort-createForObject','',''),(1155,'priv','zh-cn','effort-createForObject','',''),(1155,'priv','zh-tw','effort-createForObject','',''),(1156,'priv','de','effort-edit','',''),(1156,'priv','en','effort-edit','',''),(1156,'priv','fr','effort-edit','',''),(1156,'priv','zh-cn','effort-edit','',''),(1156,'priv','zh-tw','effort-edit','',''),(1157,'priv','de','effort-batchEdit','',''),(1157,'priv','en','effort-batchEdit','',''),(1157,'priv','fr','effort-batchEdit','',''),(1157,'priv','zh-cn','effort-batchEdit','',''),(1157,'priv','zh-tw','effort-batchEdit','',''),(1158,'priv','de','effort-view','',''),(1158,'priv','en','effort-view','',''),(1158,'priv','fr','effort-view','',''),(1158,'priv','zh-cn','effort-view','',''),(1158,'priv','zh-tw','effort-view','',''),(1159,'priv','de','effort-delete','',''),(1159,'priv','en','effort-delete','',''),(1159,'priv','fr','effort-delete','',''),(1159,'priv','zh-cn','effort-delete','',''),(1159,'priv','zh-tw','effort-delete','',''),(1160,'priv','de','effort-exportAction','',''),(1160,'priv','en','effort-exportAction','',''),(1160,'priv','fr','effort-exportAction','',''),(1160,'priv','zh-cn','effort-exportAction','',''),(1160,'priv','zh-tw','effort-exportAction','',''),(1162,'priv','de','ldap-common','',''),(1162,'priv','en','ldap-common','',''),(1162,'priv','fr','ldap-common','',''),(1162,'priv','zh-cn','ldap-common','',''),(1162,'priv','zh-tw','ldap-common','',''),(1163,'priv','de','sqlbuilder-browseSQLView','',''),(1163,'priv','en','sqlbuilder-browseSQLView','',''),(1163,'priv','fr','sqlbuilder-browseSQLView','',''),(1163,'priv','zh-cn','sqlbuilder-browseSQLView','',''),(1163,'priv','zh-tw','sqlbuilder-browseSQLView','',''),(1164,'priv','de','sqlbuilder-createSQLView','',''),(1164,'priv','en','sqlbuilder-createSQLView','',''),(1164,'priv','fr','sqlbuilder-createSQLView','',''),(1164,'priv','zh-cn','sqlbuilder-createSQLView','',''),(1164,'priv','zh-tw','sqlbuilder-createSQLView','',''),(1165,'priv','de','sqlbuilder-editSQLView','',''),(1165,'priv','en','sqlbuilder-editSQLView','',''),(1165,'priv','fr','sqlbuilder-editSQLView','',''),(1165,'priv','zh-cn','sqlbuilder-editSQLView','',''),(1165,'priv','zh-tw','sqlbuilder-editSQLView','',''),(1166,'priv','de','sqlbuilder-deleteSQLView','',''),(1166,'priv','en','sqlbuilder-deleteSQLView','',''),(1166,'priv','fr','sqlbuilder-deleteSQLView','',''),(1166,'priv','zh-cn','sqlbuilder-deleteSQLView','',''),(1166,'priv','zh-tw','sqlbuilder-deleteSQLView','',''),(1168,'priv','de','feedback-create','',''),(1168,'priv','en','feedback-create','',''),(1168,'priv','fr','feedback-create','',''),(1168,'priv','zh-cn','feedback-create','',''),(1168,'priv','zh-tw','feedback-create','',''),(1169,'priv','de','feedback-edit','',''),(1169,'priv','en','feedback-edit','',''),(1169,'priv','fr','feedback-edit','',''),(1169,'priv','zh-cn','feedback-edit','',''),(1169,'priv','zh-tw','feedback-edit','',''),(1170,'priv','de','feedback-editOthers','',''),(1170,'priv','en','feedback-editOthers','',''),(1170,'priv','fr','feedback-editOthers','',''),(1170,'priv','zh-cn','feedback-editOthers','',''),(1170,'priv','zh-tw','feedback-editOthers','',''),(1171,'priv','de','feedback-adminView','',''),(1171,'priv','en','feedback-adminView','',''),(1171,'priv','fr','feedback-adminView','',''),(1171,'priv','zh-cn','feedback-adminView','',''),(1171,'priv','zh-tw','feedback-adminView','',''),(1172,'priv','de','feedback-admin','',''),(1172,'priv','en','feedback-admin','',''),(1172,'priv','fr','feedback-admin','',''),(1172,'priv','zh-cn','feedback-admin','',''),(1172,'priv','zh-tw','feedback-admin','',''),(1173,'priv','de','feedback-assignAction','',''),(1173,'priv','en','feedback-assignAction','',''),(1173,'priv','fr','feedback-assignAction','',''),(1173,'priv','zh-cn','feedback-assignAction','',''),(1173,'priv','zh-tw','feedback-assignAction','',''),(1174,'priv','de','feedback-toTask','',''),(1174,'priv','en','feedback-toTask','',''),(1174,'priv','fr','feedback-toTask','',''),(1174,'priv','zh-cn','feedback-toTask','',''),(1174,'priv','zh-tw','feedback-toTask','',''),(1175,'priv','de','feedback-toTodo','',''),(1175,'priv','en','feedback-toTodo','',''),(1175,'priv','fr','feedback-toTodo','',''),(1175,'priv','zh-cn','feedback-toTodo','',''),(1175,'priv','zh-tw','feedback-toTodo','',''),(1176,'priv','de','feedback-toBug','',''),(1176,'priv','en','feedback-toBug','',''),(1176,'priv','fr','feedback-toBug','',''),(1176,'priv','zh-cn','feedback-toBug','',''),(1176,'priv','zh-tw','feedback-toBug','',''),(1177,'priv','de','feedback-toStory','',''),(1177,'priv','en','feedback-toStory','',''),(1177,'priv','fr','feedback-toStory','',''),(1177,'priv','zh-cn','feedback-toStory','',''),(1177,'priv','zh-tw','feedback-toStory','',''),(1178,'priv','de','feedback-toTicket','',''),(1178,'priv','en','feedback-toTicket','',''),(1178,'priv','fr','feedback-toTicket','',''),(1178,'priv','zh-cn','feedback-toTicket','',''),(1178,'priv','zh-tw','feedback-toTicket','',''),(1179,'priv','de','feedback-toUserStory','',''),(1179,'priv','en','feedback-toUserStory','',''),(1179,'priv','fr','feedback-toUserStory','',''),(1179,'priv','zh-cn','feedback-toUserStory','',''),(1179,'priv','zh-tw','feedback-toUserStory','',''),(1180,'priv','de','feedback-reviewAction','',''),(1180,'priv','en','feedback-reviewAction','',''),(1180,'priv','fr','feedback-reviewAction','',''),(1180,'priv','zh-cn','feedback-reviewAction','',''),(1180,'priv','zh-tw','feedback-reviewAction','',''),(1181,'priv','de','feedback-comment','',''),(1181,'priv','en','feedback-comment','',''),(1181,'priv','fr','feedback-comment','',''),(1181,'priv','zh-cn','feedback-comment','',''),(1181,'priv','zh-tw','feedback-comment','',''),(1182,'priv','de','feedback-reply','',''),(1182,'priv','en','feedback-reply','',''),(1182,'priv','fr','feedback-reply','',''),(1182,'priv','zh-cn','feedback-reply','',''),(1182,'priv','zh-tw','feedback-reply','',''),(1183,'priv','de','feedback-ask','',''),(1183,'priv','en','feedback-ask','',''),(1183,'priv','fr','feedback-ask','',''),(1183,'priv','zh-cn','feedback-ask','',''),(1183,'priv','zh-tw','feedback-ask','',''),(1184,'priv','de','feedback-closeAction','',''),(1184,'priv','en','feedback-closeAction','',''),(1184,'priv','fr','feedback-closeAction','',''),(1184,'priv','zh-cn','feedback-closeAction','',''),(1184,'priv','zh-tw','feedback-closeAction','',''),(1185,'priv','de','feedback-delete','',''),(1185,'priv','en','feedback-delete','',''),(1185,'priv','fr','feedback-delete','',''),(1185,'priv','zh-cn','feedback-delete','',''),(1185,'priv','zh-tw','feedback-delete','',''),(1186,'priv','de','feedback-activate','',''),(1186,'priv','en','feedback-activate','',''),(1186,'priv','fr','feedback-activate','',''),(1186,'priv','zh-cn','feedback-activate','',''),(1186,'priv','zh-tw','feedback-activate','',''),(1187,'priv','de','feedback-exportAction','',''),(1187,'priv','en','feedback-exportAction','',''),(1187,'priv','fr','feedback-exportAction','',''),(1187,'priv','zh-cn','feedback-exportAction','',''),(1187,'priv','zh-tw','feedback-exportAction','',''),(1188,'priv','de','feedback-batchEdit','',''),(1188,'priv','en','feedback-batchEdit','',''),(1188,'priv','fr','feedback-batchEdit','',''),(1188,'priv','zh-cn','feedback-batchEdit','',''),(1188,'priv','zh-tw','feedback-batchEdit','',''),(1189,'priv','de','feedback-batchClose','',''),(1189,'priv','en','feedback-batchClose','',''),(1189,'priv','fr','feedback-batchClose','',''),(1189,'priv','zh-cn','feedback-batchClose','',''),(1189,'priv','zh-tw','feedback-batchClose','',''),(1190,'priv','de','feedback-batchReview','',''),(1190,'priv','en','feedback-batchReview','',''),(1190,'priv','fr','feedback-batchReview','',''),(1190,'priv','zh-cn','feedback-batchReview','',''),(1190,'priv','zh-tw','feedback-batchReview','',''),(1191,'priv','de','feedback-batchAssignTo','',''),(1191,'priv','en','feedback-batchAssignTo','',''),(1191,'priv','fr','feedback-batchAssignTo','',''),(1191,'priv','zh-cn','feedback-batchAssignTo','',''),(1191,'priv','zh-tw','feedback-batchAssignTo','',''),(1193,'priv','de','feedback-products','',''),(1193,'priv','en','feedback-products','',''),(1193,'priv','fr','feedback-products','',''),(1193,'priv','zh-cn','feedback-products','',''),(1193,'priv','zh-tw','feedback-products','',''),(1194,'priv','de','feedback-manageProduct','',''),(1194,'priv','en','feedback-manageProduct','',''),(1194,'priv','fr','feedback-manageProduct','',''),(1194,'priv','zh-cn','feedback-manageProduct','',''),(1194,'priv','zh-tw','feedback-manageProduct','',''),(1195,'priv','de','feedback-import','',''),(1195,'priv','en','feedback-import','',''),(1195,'priv','fr','feedback-import','',''),(1195,'priv','zh-cn','feedback-import','',''),(1195,'priv','zh-tw','feedback-import','',''),(1196,'priv','de','feedback-exportTemplate','',''),(1196,'priv','en','feedback-exportTemplate','',''),(1196,'priv','fr','feedback-exportTemplate','',''),(1196,'priv','zh-cn','feedback-exportTemplate','',''),(1196,'priv','zh-tw','feedback-exportTemplate','',''),(1197,'priv','de','feedback-syncProduct','',''),(1197,'priv','en','feedback-syncProduct','',''),(1197,'priv','fr','feedback-syncProduct','',''),(1197,'priv','zh-cn','feedback-syncProduct','',''),(1197,'priv','zh-tw','feedback-syncProduct','',''),(1198,'priv','de','feedback-productSetting','',''),(1198,'priv','en','feedback-productSetting','',''),(1198,'priv','fr','feedback-productSetting','',''),(1198,'priv','zh-cn','feedback-productSetting','',''),(1198,'priv','zh-tw','feedback-productSetting','',''),(1199,'priv','de','faq-browse','',''),(1199,'priv','en','faq-browse','',''),(1199,'priv','fr','faq-browse','',''),(1199,'priv','zh-cn','faq-browse','',''),(1199,'priv','zh-tw','faq-browse','',''),(1200,'priv','de','faq-create','',''),(1200,'priv','en','faq-create','',''),(1200,'priv','fr','faq-create','',''),(1200,'priv','zh-cn','faq-create','',''),(1200,'priv','zh-tw','faq-create','',''),(1201,'priv','de','faq-edit','',''),(1201,'priv','en','faq-edit','',''),(1201,'priv','fr','faq-edit','',''),(1201,'priv','zh-cn','faq-edit','',''),(1201,'priv','zh-tw','faq-edit','',''),(1202,'priv','de','faq-delete','',''),(1202,'priv','en','faq-delete','',''),(1202,'priv','fr','faq-delete','',''),(1202,'priv','zh-cn','faq-delete','',''),(1202,'priv','zh-tw','faq-delete','',''),(1204,'priv','de','ticket-create','',''),(1204,'priv','en','ticket-create','',''),(1204,'priv','fr','ticket-create','',''),(1204,'priv','zh-cn','ticket-create','',''),(1204,'priv','zh-tw','ticket-create','',''),(1205,'priv','de','ticket-edit','',''),(1205,'priv','en','ticket-edit','',''),(1205,'priv','fr','ticket-edit','',''),(1205,'priv','zh-cn','ticket-edit','',''),(1205,'priv','zh-tw','ticket-edit','',''),(1206,'priv','de','ticket-view','',''),(1206,'priv','en','ticket-view','',''),(1206,'priv','fr','ticket-view','',''),(1206,'priv','zh-cn','ticket-view','',''),(1206,'priv','zh-tw','ticket-view','',''),(1207,'priv','de','ticket-browse','',''),(1207,'priv','en','ticket-browse','',''),(1207,'priv','fr','ticket-browse','',''),(1207,'priv','zh-cn','ticket-browse','',''),(1207,'priv','zh-tw','ticket-browse','',''),(1208,'priv','de','ticket-assign','',''),(1208,'priv','en','ticket-assign','',''),(1208,'priv','fr','ticket-assign','',''),(1208,'priv','zh-cn','ticket-assign','',''),(1208,'priv','zh-tw','ticket-assign','',''),(1209,'priv','de','ticket-createBug','',''),(1209,'priv','en','ticket-createBug','',''),(1209,'priv','fr','ticket-createBug','',''),(1209,'priv','zh-cn','ticket-createBug','',''),(1209,'priv','zh-tw','ticket-createBug','',''),(1210,'priv','de','ticket-createStory','',''),(1210,'priv','en','ticket-createStory','',''),(1210,'priv','fr','ticket-createStory','',''),(1210,'priv','zh-cn','ticket-createStory','',''),(1210,'priv','zh-tw','ticket-createStory','',''),(1211,'priv','de','ticket-start','',''),(1211,'priv','en','ticket-start','',''),(1211,'priv','fr','ticket-start','',''),(1211,'priv','zh-cn','ticket-start','',''),(1211,'priv','zh-tw','ticket-start','',''),(1212,'priv','de','ticket-finish','',''),(1212,'priv','en','ticket-finish','',''),(1212,'priv','fr','ticket-finish','',''),(1212,'priv','zh-cn','ticket-finish','',''),(1212,'priv','zh-tw','ticket-finish','',''),(1213,'priv','de','ticket-close','',''),(1213,'priv','en','ticket-close','',''),(1213,'priv','fr','ticket-close','',''),(1213,'priv','zh-cn','ticket-close','',''),(1213,'priv','zh-tw','ticket-close','',''),(1214,'priv','de','ticket-activate','',''),(1214,'priv','en','ticket-activate','',''),(1214,'priv','fr','ticket-activate','',''),(1214,'priv','zh-cn','ticket-activate','',''),(1214,'priv','zh-tw','ticket-activate','',''),(1215,'priv','de','ticket-delete','',''),(1215,'priv','en','ticket-delete','',''),(1215,'priv','fr','ticket-delete','',''),(1215,'priv','zh-cn','ticket-delete','',''),(1215,'priv','zh-tw','ticket-delete','',''),(1216,'priv','de','ticket-exportTemplate','',''),(1216,'priv','en','ticket-exportTemplate','',''),(1216,'priv','fr','ticket-exportTemplate','',''),(1216,'priv','zh-cn','ticket-exportTemplate','',''),(1216,'priv','zh-tw','ticket-exportTemplate','',''),(1217,'priv','de','ticket-import','',''),(1217,'priv','en','ticket-import','',''),(1217,'priv','fr','ticket-import','',''),(1217,'priv','zh-cn','ticket-import','',''),(1217,'priv','zh-tw','ticket-import','',''),(1218,'priv','de','ticket-exportAction','',''),(1218,'priv','en','ticket-exportAction','',''),(1218,'priv','fr','ticket-exportAction','',''),(1218,'priv','zh-cn','ticket-exportAction','',''),(1218,'priv','zh-tw','ticket-exportAction','',''),(1219,'priv','de','ticket-batchEdit','',''),(1219,'priv','en','ticket-batchEdit','',''),(1219,'priv','fr','ticket-batchEdit','',''),(1219,'priv','zh-cn','ticket-batchEdit','',''),(1219,'priv','zh-tw','ticket-batchEdit','',''),(1220,'priv','de','ticket-batchClose','',''),(1220,'priv','en','ticket-batchClose','',''),(1220,'priv','fr','ticket-batchClose','',''),(1220,'priv','zh-cn','ticket-batchClose','',''),(1220,'priv','zh-tw','ticket-batchClose','',''),(1221,'priv','de','ticket-batchActivate','',''),(1221,'priv','en','ticket-batchActivate','',''),(1221,'priv','fr','ticket-batchActivate','',''),(1221,'priv','zh-cn','ticket-batchActivate','',''),(1221,'priv','zh-tw','ticket-batchActivate','',''),(1222,'priv','de','ticket-batchFinish','',''),(1222,'priv','en','ticket-batchFinish','',''),(1222,'priv','fr','ticket-batchFinish','',''),(1222,'priv','zh-cn','ticket-batchFinish','',''),(1222,'priv','zh-tw','ticket-batchFinish','',''),(1223,'priv','de','ticket-batchAssignTo','',''),(1223,'priv','en','ticket-batchAssignTo','',''),(1223,'priv','fr','ticket-batchAssignTo','',''),(1223,'priv','zh-cn','ticket-batchAssignTo','',''),(1223,'priv','zh-tw','ticket-batchAssignTo','',''),(1224,'priv','de','ticket-syncProduct','',''),(1224,'priv','en','ticket-syncProduct','',''),(1224,'priv','fr','ticket-syncProduct','',''),(1224,'priv','zh-cn','ticket-syncProduct','',''),(1224,'priv','zh-tw','ticket-syncProduct','',''),(1225,'priv','de','attend-department','',''),(1225,'priv','en','attend-department','',''),(1225,'priv','fr','attend-department','',''),(1225,'priv','zh-cn','attend-department','',''),(1225,'priv','zh-tw','attend-department','',''),(1226,'priv','de','attend-company','',''),(1226,'priv','en','attend-company','',''),(1226,'priv','fr','attend-company','',''),(1226,'priv','zh-cn','attend-company','',''),(1226,'priv','zh-tw','attend-company','',''),(1227,'priv','de','attend-browseReview','',''),(1227,'priv','en','attend-browseReview','',''),(1227,'priv','fr','attend-browseReview','',''),(1227,'priv','zh-cn','attend-browseReview','',''),(1227,'priv','zh-tw','attend-browseReview','',''),(1228,'priv','de','attend-review','',''),(1228,'priv','en','attend-review','',''),(1228,'priv','fr','attend-review','',''),(1228,'priv','zh-cn','attend-review','',''),(1228,'priv','zh-tw','attend-review','',''),(1229,'priv','de','attend-exportAction','',''),(1229,'priv','en','attend-exportAction','',''),(1229,'priv','fr','attend-exportAction','',''),(1229,'priv','zh-cn','attend-exportAction','',''),(1229,'priv','zh-tw','attend-exportAction','',''),(1230,'priv','de','attend-reportAction','',''),(1230,'priv','en','attend-reportAction','',''),(1230,'priv','fr','attend-reportAction','',''),(1230,'priv','zh-cn','attend-reportAction','',''),(1230,'priv','zh-tw','attend-reportAction','',''),(1231,'priv','de','attend-saveStatAction','',''),(1231,'priv','en','attend-saveStatAction','',''),(1231,'priv','fr','attend-saveStatAction','',''),(1231,'priv','zh-cn','attend-saveStatAction','',''),(1231,'priv','zh-tw','attend-saveStatAction','',''),(1232,'priv','de','attend-exportStat','',''),(1232,'priv','en','attend-exportStat','',''),(1232,'priv','fr','attend-exportStat','',''),(1232,'priv','zh-cn','attend-exportStat','',''),(1232,'priv','zh-tw','attend-exportStat','',''),(1233,'priv','de','attend-detailAction','',''),(1233,'priv','en','attend-detailAction','',''),(1233,'priv','fr','attend-detailAction','',''),(1233,'priv','zh-cn','attend-detailAction','',''),(1233,'priv','zh-tw','attend-detailAction','',''),(1234,'priv','de','attend-exportDetail','',''),(1234,'priv','en','attend-exportDetail','',''),(1234,'priv','fr','attend-exportDetail','',''),(1234,'priv','zh-cn','attend-exportDetail','',''),(1234,'priv','zh-tw','attend-exportDetail','',''),(1235,'priv','de','attend-settings','',''),(1235,'priv','en','attend-settings','',''),(1235,'priv','fr','attend-settings','',''),(1235,'priv','zh-cn','attend-settings','',''),(1235,'priv','zh-tw','attend-settings','',''),(1236,'priv','de','attend-personalSettings','',''),(1236,'priv','en','attend-personalSettings','',''),(1236,'priv','fr','attend-personalSettings','',''),(1236,'priv','zh-cn','attend-personalSettings','',''),(1236,'priv','zh-tw','attend-personalSettings','',''),(1237,'priv','de','attend-setManager','',''),(1237,'priv','en','attend-setManager','',''),(1237,'priv','fr','attend-setManager','',''),(1237,'priv','zh-cn','attend-setManager','',''),(1237,'priv','zh-tw','attend-setManager','',''),(1238,'priv','de','attend-personal','',''),(1238,'priv','en','attend-personal','',''),(1238,'priv','fr','attend-personal','',''),(1238,'priv','zh-cn','attend-personal','',''),(1238,'priv','zh-tw','attend-personal','',''),(1239,'priv','de','attend-editAction','',''),(1239,'priv','en','attend-editAction','',''),(1239,'priv','fr','attend-editAction','',''),(1239,'priv','zh-cn','attend-editAction','',''),(1239,'priv','zh-tw','attend-editAction','',''),(1240,'priv','de','leave-browseReview','',''),(1240,'priv','en','leave-browseReview','',''),(1240,'priv','fr','leave-browseReview','',''),(1240,'priv','zh-cn','leave-browseReview','',''),(1240,'priv','zh-tw','leave-browseReview','',''),(1241,'priv','de','leave-companyAction','',''),(1241,'priv','en','leave-companyAction','',''),(1241,'priv','fr','leave-companyAction','',''),(1241,'priv','zh-cn','leave-companyAction','',''),(1241,'priv','zh-tw','leave-companyAction','',''),(1242,'priv','de','leave-reviewAction','',''),(1242,'priv','en','leave-reviewAction','',''),(1242,'priv','fr','leave-reviewAction','',''),(1242,'priv','zh-cn','leave-reviewAction','',''),(1242,'priv','zh-tw','leave-reviewAction','',''),(1243,'priv','de','leave-exportAction','',''),(1243,'priv','en','leave-exportAction','',''),(1243,'priv','fr','leave-exportAction','',''),(1243,'priv','zh-cn','leave-exportAction','',''),(1243,'priv','zh-tw','leave-exportAction','',''),(1244,'priv','de','leave-setReviewerAction','',''),(1244,'priv','en','leave-setReviewerAction','',''),(1244,'priv','fr','leave-setReviewerAction','',''),(1244,'priv','zh-cn','leave-setReviewerAction','',''),(1244,'priv','zh-tw','leave-setReviewerAction','',''),(1245,'priv','de','leave-personalAnnual','',''),(1245,'priv','en','leave-personalAnnual','',''),(1245,'priv','fr','leave-personalAnnual','',''),(1245,'priv','zh-cn','leave-personalAnnual','',''),(1245,'priv','zh-tw','leave-personalAnnual','',''),(1246,'priv','de','leave-personal','',''),(1246,'priv','en','leave-personal','',''),(1246,'priv','fr','leave-personal','',''),(1246,'priv','zh-cn','leave-personal','',''),(1246,'priv','zh-tw','leave-personal','',''),(1247,'priv','de','leave-createAction','',''),(1247,'priv','en','leave-createAction','',''),(1247,'priv','fr','leave-createAction','',''),(1247,'priv','zh-cn','leave-createAction','',''),(1247,'priv','zh-tw','leave-createAction','',''),(1248,'priv','de','leave-editAction','',''),(1248,'priv','en','leave-editAction','',''),(1248,'priv','fr','leave-editAction','',''),(1248,'priv','zh-cn','leave-editAction','',''),(1248,'priv','zh-tw','leave-editAction','',''),(1249,'priv','de','leave-deleteAction','',''),(1249,'priv','en','leave-deleteAction','',''),(1249,'priv','fr','leave-deleteAction','',''),(1249,'priv','zh-cn','leave-deleteAction','',''),(1249,'priv','zh-tw','leave-deleteAction','',''),(1250,'priv','de','leave-viewAction','',''),(1250,'priv','en','leave-viewAction','',''),(1250,'priv','fr','leave-viewAction','',''),(1250,'priv','zh-cn','leave-viewAction','',''),(1250,'priv','zh-tw','leave-viewAction','',''),(1251,'priv','de','leave-switchstatus','',''),(1251,'priv','en','leave-switchstatus','',''),(1251,'priv','fr','leave-switchstatus','',''),(1251,'priv','zh-cn','leave-switchstatus','',''),(1251,'priv','zh-tw','leave-switchstatus','',''),(1252,'priv','de','leave-backAction','',''),(1252,'priv','en','leave-backAction','',''),(1252,'priv','fr','leave-backAction','',''),(1252,'priv','zh-cn','leave-backAction','',''),(1252,'priv','zh-tw','leave-backAction','',''),(1253,'priv','de','makeup-browseReview','',''),(1253,'priv','en','makeup-browseReview','',''),(1253,'priv','fr','makeup-browseReview','',''),(1253,'priv','zh-cn','makeup-browseReview','',''),(1253,'priv','zh-tw','makeup-browseReview','',''),(1254,'priv','de','makeup-companyAction','',''),(1254,'priv','en','makeup-companyAction','',''),(1254,'priv','fr','makeup-companyAction','',''),(1254,'priv','zh-cn','makeup-companyAction','',''),(1254,'priv','zh-tw','makeup-companyAction','',''),(1255,'priv','de','makeup-reviewAction','',''),(1255,'priv','en','makeup-reviewAction','',''),(1255,'priv','fr','makeup-reviewAction','',''),(1255,'priv','zh-cn','makeup-reviewAction','',''),(1255,'priv','zh-tw','makeup-reviewAction','',''),(1256,'priv','de','makeup-exportAction','',''),(1256,'priv','en','makeup-exportAction','',''),(1256,'priv','fr','makeup-exportAction','',''),(1256,'priv','zh-cn','makeup-exportAction','',''),(1256,'priv','zh-tw','makeup-exportAction','',''),(1257,'priv','de','makeup-setReviewerAction','',''),(1257,'priv','en','makeup-setReviewerAction','',''),(1257,'priv','fr','makeup-setReviewerAction','',''),(1257,'priv','zh-cn','makeup-setReviewerAction','',''),(1257,'priv','zh-tw','makeup-setReviewerAction','',''),(1258,'priv','de','makeup-personal','',''),(1258,'priv','en','makeup-personal','',''),(1258,'priv','fr','makeup-personal','',''),(1258,'priv','zh-cn','makeup-personal','',''),(1258,'priv','zh-tw','makeup-personal','',''),(1259,'priv','de','makeup-createAction','',''),(1259,'priv','en','makeup-createAction','',''),(1259,'priv','fr','makeup-createAction','',''),(1259,'priv','zh-cn','makeup-createAction','',''),(1259,'priv','zh-tw','makeup-createAction','',''),(1260,'priv','de','makeup-editAction','',''),(1260,'priv','en','makeup-editAction','',''),(1260,'priv','fr','makeup-editAction','',''),(1260,'priv','zh-cn','makeup-editAction','',''),(1260,'priv','zh-tw','makeup-editAction','',''),(1261,'priv','de','makeup-viewAction','',''),(1261,'priv','en','makeup-viewAction','',''),(1261,'priv','fr','makeup-viewAction','',''),(1261,'priv','zh-cn','makeup-viewAction','',''),(1261,'priv','zh-tw','makeup-viewAction','',''),(1262,'priv','de','makeup-deleteAction','',''),(1262,'priv','en','makeup-deleteAction','',''),(1262,'priv','fr','makeup-deleteAction','',''),(1262,'priv','zh-cn','makeup-deleteAction','',''),(1262,'priv','zh-tw','makeup-deleteAction','',''),(1263,'priv','de','makeup-switchstatus','',''),(1263,'priv','en','makeup-switchstatus','',''),(1263,'priv','fr','makeup-switchstatus','',''),(1263,'priv','zh-cn','makeup-switchstatus','',''),(1263,'priv','zh-tw','makeup-switchstatus','',''),(1264,'priv','de','overtime-browseReview','',''),(1264,'priv','en','overtime-browseReview','',''),(1264,'priv','fr','overtime-browseReview','',''),(1264,'priv','zh-cn','overtime-browseReview','',''),(1264,'priv','zh-tw','overtime-browseReview','',''),(1265,'priv','de','overtime-companyAction','',''),(1265,'priv','en','overtime-companyAction','',''),(1265,'priv','fr','overtime-companyAction','',''),(1265,'priv','zh-cn','overtime-companyAction','',''),(1265,'priv','zh-tw','overtime-companyAction','',''),(1266,'priv','de','overtime-reviewAction','',''),(1266,'priv','en','overtime-reviewAction','',''),(1266,'priv','fr','overtime-reviewAction','',''),(1266,'priv','zh-cn','overtime-reviewAction','',''),(1266,'priv','zh-tw','overtime-reviewAction','',''),(1267,'priv','de','overtime-exportAction','',''),(1267,'priv','en','overtime-exportAction','',''),(1267,'priv','fr','overtime-exportAction','',''),(1267,'priv','zh-cn','overtime-exportAction','',''),(1267,'priv','zh-tw','overtime-exportAction','',''),(1268,'priv','de','overtime-setReviewerAction','',''),(1268,'priv','en','overtime-setReviewerAction','',''),(1268,'priv','fr','overtime-setReviewerAction','',''),(1268,'priv','zh-cn','overtime-setReviewerAction','',''),(1268,'priv','zh-tw','overtime-setReviewerAction','',''),(1269,'priv','de','overtime-personal','',''),(1269,'priv','en','overtime-personal','',''),(1269,'priv','fr','overtime-personal','',''),(1269,'priv','zh-cn','overtime-personal','',''),(1269,'priv','zh-tw','overtime-personal','',''),(1270,'priv','de','overtime-createAction','',''),(1270,'priv','en','overtime-createAction','',''),(1270,'priv','fr','overtime-createAction','',''),(1270,'priv','zh-cn','overtime-createAction','',''),(1270,'priv','zh-tw','overtime-createAction','',''),(1271,'priv','de','overtime-editAction','',''),(1271,'priv','en','overtime-editAction','',''),(1271,'priv','fr','overtime-editAction','',''),(1271,'priv','zh-cn','overtime-editAction','',''),(1271,'priv','zh-tw','overtime-editAction','',''),(1272,'priv','de','overtime-viewAction','',''),(1272,'priv','en','overtime-viewAction','',''),(1272,'priv','fr','overtime-viewAction','',''),(1272,'priv','zh-cn','overtime-viewAction','',''),(1272,'priv','zh-tw','overtime-viewAction','',''),(1273,'priv','de','overtime-deleteAction','',''),(1273,'priv','en','overtime-deleteAction','',''),(1273,'priv','fr','overtime-deleteAction','',''),(1273,'priv','zh-cn','overtime-deleteAction','',''),(1273,'priv','zh-tw','overtime-deleteAction','',''),(1274,'priv','de','overtime-switchstatus','',''),(1274,'priv','en','overtime-switchstatus','',''),(1274,'priv','fr','overtime-switchstatus','',''),(1274,'priv','zh-cn','overtime-switchstatus','',''),(1274,'priv','zh-tw','overtime-switchstatus','',''),(1275,'priv','de','lieu-companyAction','',''),(1275,'priv','en','lieu-companyAction','',''),(1275,'priv','fr','lieu-companyAction','',''),(1275,'priv','zh-cn','lieu-companyAction','',''),(1275,'priv','zh-tw','lieu-companyAction','',''),(1276,'priv','de','lieu-browseReviewAction','',''),(1276,'priv','en','lieu-browseReviewAction','',''),(1276,'priv','fr','lieu-browseReviewAction','',''),(1276,'priv','zh-cn','lieu-browseReviewAction','',''),(1276,'priv','zh-tw','lieu-browseReviewAction','',''),(1277,'priv','de','lieu-reviewAction','',''),(1277,'priv','en','lieu-reviewAction','',''),(1277,'priv','fr','lieu-reviewAction','',''),(1277,'priv','zh-cn','lieu-reviewAction','',''),(1277,'priv','zh-tw','lieu-reviewAction','',''),(1278,'priv','de','lieu-setReviewerAction','',''),(1278,'priv','en','lieu-setReviewerAction','',''),(1278,'priv','fr','lieu-setReviewerAction','',''),(1278,'priv','zh-cn','lieu-setReviewerAction','',''),(1278,'priv','zh-tw','lieu-setReviewerAction','',''),(1279,'priv','de','lieu-personal','',''),(1279,'priv','en','lieu-personal','',''),(1279,'priv','fr','lieu-personal','',''),(1279,'priv','zh-cn','lieu-personal','',''),(1279,'priv','zh-tw','lieu-personal','',''),(1280,'priv','de','lieu-createAction','',''),(1280,'priv','en','lieu-createAction','',''),(1280,'priv','fr','lieu-createAction','',''),(1280,'priv','zh-cn','lieu-createAction','',''),(1280,'priv','zh-tw','lieu-createAction','',''),(1281,'priv','de','lieu-editAction','',''),(1281,'priv','en','lieu-editAction','',''),(1281,'priv','fr','lieu-editAction','',''),(1281,'priv','zh-cn','lieu-editAction','',''),(1281,'priv','zh-tw','lieu-editAction','',''),(1282,'priv','de','lieu-deleteAction','',''),(1282,'priv','en','lieu-deleteAction','',''),(1282,'priv','fr','lieu-deleteAction','',''),(1282,'priv','zh-cn','lieu-deleteAction','',''),(1282,'priv','zh-tw','lieu-deleteAction','',''),(1283,'priv','de','lieu-viewAction','',''),(1283,'priv','en','lieu-viewAction','',''),(1283,'priv','fr','lieu-viewAction','',''),(1283,'priv','zh-cn','lieu-viewAction','',''),(1283,'priv','zh-tw','lieu-viewAction','',''),(1284,'priv','de','lieu-switchstatus','',''),(1284,'priv','en','lieu-switchstatus','',''),(1284,'priv','fr','lieu-switchstatus','',''),(1284,'priv','zh-cn','lieu-switchstatus','',''),(1284,'priv','zh-tw','lieu-switchstatus','',''),(1285,'priv','de','ops-index','',''),(1285,'priv','en','ops-index','',''),(1285,'priv','fr','ops-index','',''),(1285,'priv','zh-cn','ops-index','',''),(1285,'priv','zh-tw','ops-index','',''),(1286,'priv','de','ops-setting','',''),(1286,'priv','en','ops-setting','',''),(1286,'priv','fr','ops-setting','',''),(1286,'priv','zh-cn','ops-setting','',''),(1286,'priv','zh-tw','ops-setting','',''),(1287,'priv','de','host-browse','',''),(1287,'priv','en','host-browse','',''),(1287,'priv','fr','host-browse','',''),(1287,'priv','zh-cn','host-browse','',''),(1287,'priv','zh-tw','host-browse','',''),(1288,'priv','de','host-create','',''),(1288,'priv','en','host-create','',''),(1288,'priv','fr','host-create','',''),(1288,'priv','zh-cn','host-create','',''),(1288,'priv','zh-tw','host-create','',''),(1289,'priv','de','host-editAction','',''),(1289,'priv','en','host-editAction','',''),(1289,'priv','fr','host-editAction','',''),(1289,'priv','zh-cn','host-editAction','',''),(1289,'priv','zh-tw','host-editAction','',''),(1290,'priv','de','host-view','',''),(1290,'priv','en','host-view','',''),(1290,'priv','fr','host-view','',''),(1290,'priv','zh-cn','host-view','',''),(1290,'priv','zh-tw','host-view','',''),(1291,'priv','de','host-deleteAction','',''),(1291,'priv','en','host-deleteAction','',''),(1291,'priv','fr','host-deleteAction','',''),(1291,'priv','zh-cn','host-deleteAction','',''),(1291,'priv','zh-tw','host-deleteAction','',''),(1292,'priv','de','host-changeStatus','',''),(1292,'priv','en','host-changeStatus','',''),(1292,'priv','fr','host-changeStatus','',''),(1292,'priv','zh-cn','host-changeStatus','',''),(1292,'priv','zh-tw','host-changeStatus','',''),(1293,'priv','de','host-treemap','',''),(1293,'priv','en','host-treemap','',''),(1293,'priv','fr','host-treemap','',''),(1293,'priv','zh-cn','host-treemap','',''),(1293,'priv','zh-tw','host-treemap','',''),(1294,'priv','de','serverroom-browse','',''),(1294,'priv','en','serverroom-browse','',''),(1294,'priv','fr','serverroom-browse','',''),(1294,'priv','zh-cn','serverroom-browse','',''),(1294,'priv','zh-tw','serverroom-browse','',''),(1295,'priv','de','serverroom-create','',''),(1295,'priv','en','serverroom-create','',''),(1295,'priv','fr','serverroom-create','',''),(1295,'priv','zh-cn','serverroom-create','',''),(1295,'priv','zh-tw','serverroom-create','',''),(1296,'priv','de','serverroom-editAction','',''),(1296,'priv','en','serverroom-editAction','',''),(1296,'priv','fr','serverroom-editAction','',''),(1296,'priv','zh-cn','serverroom-editAction','',''),(1296,'priv','zh-tw','serverroom-editAction','',''),(1297,'priv','de','serverroom-view','',''),(1297,'priv','en','serverroom-view','',''),(1297,'priv','fr','serverroom-view','',''),(1297,'priv','zh-cn','serverroom-view','',''),(1297,'priv','zh-tw','serverroom-view','',''),(1298,'priv','de','serverroom-delete','',''),(1298,'priv','en','serverroom-delete','',''),(1298,'priv','fr','serverroom-delete','',''),(1298,'priv','zh-cn','serverroom-delete','',''),(1298,'priv','zh-tw','serverroom-delete','',''),(1299,'priv','de','account-browse','',''),(1299,'priv','en','account-browse','',''),(1299,'priv','fr','account-browse','',''),(1299,'priv','zh-cn','account-browse','',''),(1299,'priv','zh-tw','account-browse','',''),(1300,'priv','de','account-create','',''),(1300,'priv','en','account-create','',''),(1300,'priv','fr','account-create','',''),(1300,'priv','zh-cn','account-create','',''),(1300,'priv','zh-tw','account-create','',''),(1301,'priv','de','account-editAction','',''),(1301,'priv','en','account-editAction','',''),(1301,'priv','fr','account-editAction','',''),(1301,'priv','zh-cn','account-editAction','',''),(1301,'priv','zh-tw','account-editAction','',''),(1302,'priv','de','account-view','',''),(1302,'priv','en','account-view','',''),(1302,'priv','fr','account-view','',''),(1302,'priv','zh-cn','account-view','',''),(1302,'priv','zh-tw','account-view','',''),(1303,'priv','de','account-deleteAction','',''),(1303,'priv','en','account-deleteAction','',''),(1303,'priv','fr','account-deleteAction','',''),(1303,'priv','zh-cn','account-deleteAction','',''),(1303,'priv','zh-tw','account-deleteAction','',''),(1304,'priv','de','domain-browse','',''),(1304,'priv','en','domain-browse','',''),(1304,'priv','fr','domain-browse','',''),(1304,'priv','zh-cn','domain-browse','',''),(1304,'priv','zh-tw','domain-browse','',''),(1305,'priv','de','domain-create','',''),(1305,'priv','en','domain-create','',''),(1305,'priv','fr','domain-create','',''),(1305,'priv','zh-cn','domain-create','',''),(1305,'priv','zh-tw','domain-create','',''),(1306,'priv','de','domain-editAction','',''),(1306,'priv','en','domain-editAction','',''),(1306,'priv','fr','domain-editAction','',''),(1306,'priv','zh-cn','domain-editAction','',''),(1306,'priv','zh-tw','domain-editAction','',''),(1307,'priv','de','domain-view','',''),(1307,'priv','en','domain-view','',''),(1307,'priv','fr','domain-view','',''),(1307,'priv','zh-cn','domain-view','',''),(1307,'priv','zh-tw','domain-view','',''),(1308,'priv','de','domain-deleteAction','',''),(1308,'priv','en','domain-deleteAction','',''),(1308,'priv','fr','domain-deleteAction','',''),(1308,'priv','zh-cn','domain-deleteAction','',''),(1308,'priv','zh-tw','domain-deleteAction','',''),(1309,'priv','de','service-browseAction','',''),(1309,'priv','en','service-browseAction','',''),(1309,'priv','fr','service-browseAction','',''),(1309,'priv','zh-cn','service-browseAction','',''),(1309,'priv','zh-tw','service-browseAction','',''),(1310,'priv','de','service-create','',''),(1310,'priv','en','service-create','',''),(1310,'priv','fr','service-create','',''),(1310,'priv','zh-cn','service-create','',''),(1310,'priv','zh-tw','service-create','',''),(1311,'priv','de','service-edit','',''),(1311,'priv','en','service-edit','',''),(1311,'priv','fr','service-edit','',''),(1311,'priv','zh-cn','service-edit','',''),(1311,'priv','zh-tw','service-edit','',''),(1312,'priv','de','service-delete','',''),(1312,'priv','en','service-delete','',''),(1312,'priv','fr','service-delete','',''),(1312,'priv','zh-cn','service-delete','',''),(1312,'priv','zh-tw','service-delete','',''),(1313,'priv','de','service-view','',''),(1313,'priv','en','service-view','',''),(1313,'priv','fr','service-view','',''),(1313,'priv','zh-cn','service-view','',''),(1313,'priv','zh-tw','service-view','',''),(1315,'priv','de','service-manage','',''),(1315,'priv','en','service-manage','',''),(1315,'priv','fr','service-manage','',''),(1315,'priv','zh-cn','service-manage','',''),(1315,'priv','zh-tw','service-manage','',''),(1316,'priv','de','deploy-browseAction','',''),(1316,'priv','en','deploy-browseAction','',''),(1316,'priv','fr','deploy-browseAction','',''),(1316,'priv','zh-cn','deploy-browseAction','',''),(1316,'priv','zh-tw','deploy-browseAction','',''),(1317,'priv','de','deploy-create','',''),(1317,'priv','en','deploy-create','',''),(1317,'priv','fr','deploy-create','',''),(1317,'priv','zh-cn','deploy-create','',''),(1317,'priv','zh-tw','deploy-create','',''),(1318,'priv','de','deploy-editAction','',''),(1318,'priv','en','deploy-editAction','',''),(1318,'priv','fr','deploy-editAction','',''),(1318,'priv','zh-cn','deploy-editAction','',''),(1318,'priv','zh-tw','deploy-editAction','',''),(1319,'priv','de','deploy-deleteAction','',''),(1319,'priv','en','deploy-deleteAction','',''),(1319,'priv','fr','deploy-deleteAction','',''),(1319,'priv','zh-cn','deploy-deleteAction','',''),(1319,'priv','zh-tw','deploy-deleteAction','',''),(1320,'priv','de','deploy-activateAction','',''),(1320,'priv','en','deploy-activateAction','',''),(1320,'priv','fr','deploy-activateAction','',''),(1320,'priv','zh-cn','deploy-activateAction','',''),(1320,'priv','zh-tw','deploy-activateAction','',''),(1321,'priv','de','deploy-finishAction','',''),(1321,'priv','en','deploy-finishAction','',''),(1321,'priv','fr','deploy-finishAction','',''),(1321,'priv','zh-cn','deploy-finishAction','',''),(1321,'priv','zh-tw','deploy-finishAction','',''),(1322,'priv','de','deploy-scope','',''),(1322,'priv','en','deploy-scope','',''),(1322,'priv','fr','deploy-scope','',''),(1322,'priv','zh-cn','deploy-scope','',''),(1322,'priv','zh-tw','deploy-scope','',''),(1323,'priv','de','deploy-manageScope','',''),(1323,'priv','en','deploy-manageScope','',''),(1323,'priv','fr','deploy-manageScope','',''),(1323,'priv','zh-cn','deploy-manageScope','',''),(1323,'priv','zh-tw','deploy-manageScope','',''),(1324,'priv','de','deploy-view','',''),(1324,'priv','en','deploy-view','',''),(1324,'priv','fr','deploy-view','',''),(1324,'priv','zh-cn','deploy-view','',''),(1324,'priv','zh-tw','deploy-view','',''),(1325,'priv','de','deploy-casesAction','',''),(1325,'priv','en','deploy-casesAction','',''),(1325,'priv','fr','deploy-casesAction','',''),(1325,'priv','zh-cn','deploy-casesAction','',''),(1325,'priv','zh-tw','deploy-casesAction','',''),(1326,'priv','de','deploy-linkCases','',''),(1326,'priv','en','deploy-linkCases','',''),(1326,'priv','fr','deploy-linkCases','',''),(1326,'priv','zh-cn','deploy-linkCases','',''),(1326,'priv','zh-tw','deploy-linkCases','',''),(1327,'priv','de','deploy-unlinkCase','',''),(1327,'priv','en','deploy-unlinkCase','',''),(1327,'priv','fr','deploy-unlinkCase','',''),(1327,'priv','zh-cn','deploy-unlinkCase','',''),(1327,'priv','zh-tw','deploy-unlinkCase','',''),(1328,'priv','de','deploy-batchUnlinkCases','',''),(1328,'priv','en','deploy-batchUnlinkCases','',''),(1328,'priv','fr','deploy-batchUnlinkCases','',''),(1328,'priv','zh-cn','deploy-batchUnlinkCases','',''),(1328,'priv','zh-tw','deploy-batchUnlinkCases','',''),(1329,'priv','de','deploy-steps','',''),(1329,'priv','en','deploy-steps','',''),(1329,'priv','fr','deploy-steps','',''),(1329,'priv','zh-cn','deploy-steps','',''),(1329,'priv','zh-tw','deploy-steps','',''),(1330,'priv','de','deploy-manageStep','',''),(1330,'priv','en','deploy-manageStep','',''),(1330,'priv','fr','deploy-manageStep','',''),(1330,'priv','zh-cn','deploy-manageStep','',''),(1330,'priv','zh-tw','deploy-manageStep','',''),(1331,'priv','de','deploy-finishStep','',''),(1331,'priv','en','deploy-finishStep','',''),(1331,'priv','fr','deploy-finishStep','',''),(1331,'priv','zh-cn','deploy-finishStep','',''),(1331,'priv','zh-tw','deploy-finishStep','',''),(1332,'priv','de','deploy-assignAction','',''),(1332,'priv','en','deploy-assignAction','',''),(1332,'priv','fr','deploy-assignAction','',''),(1332,'priv','zh-cn','deploy-assignAction','',''),(1332,'priv','zh-tw','deploy-assignAction','',''),(1333,'priv','de','deploy-viewStep','',''),(1333,'priv','en','deploy-viewStep','',''),(1333,'priv','fr','deploy-viewStep','',''),(1333,'priv','zh-cn','deploy-viewStep','',''),(1333,'priv','zh-tw','deploy-viewStep','',''),(1334,'priv','de','deploy-editStep','',''),(1334,'priv','en','deploy-editStep','',''),(1334,'priv','fr','deploy-editStep','',''),(1334,'priv','zh-cn','deploy-editStep','',''),(1334,'priv','zh-tw','deploy-editStep','',''),(1335,'priv','de','deploy-deleteStep','',''),(1335,'priv','en','deploy-deleteStep','',''),(1335,'priv','fr','deploy-deleteStep','',''),(1335,'priv','zh-cn','deploy-deleteStep','',''),(1335,'priv','zh-tw','deploy-deleteStep','',''),(1336,'priv','de','conference-admin','',''),(1336,'priv','en','conference-admin','',''),(1336,'priv','fr','conference-admin','',''),(1336,'priv','zh-cn','conference-admin','',''),(1336,'priv','zh-tw','conference-admin','',''),(1337,'priv','de','traincourse-browseAction','',''),(1337,'priv','en','traincourse-browseAction','',''),(1337,'priv','fr','traincourse-browseAction','',''),(1337,'priv','zh-cn','traincourse-browseAction','',''),(1337,'priv','zh-tw','traincourse-browseAction','',''),(1338,'priv','de','traincourse-adminAction','',''),(1338,'priv','en','traincourse-adminAction','',''),(1338,'priv','fr','traincourse-adminAction','',''),(1338,'priv','zh-cn','traincourse-adminAction','',''),(1338,'priv','zh-tw','traincourse-adminAction','',''),(1339,'priv','de','traincourse-deleteCourse','',''),(1339,'priv','en','traincourse-deleteCourse','',''),(1339,'priv','fr','traincourse-deleteCourse','',''),(1339,'priv','zh-cn','traincourse-deleteCourse','',''),(1339,'priv','zh-tw','traincourse-deleteCourse','',''),(1340,'priv','de','traincourse-changeStatus','',''),(1340,'priv','en','traincourse-changeStatus','',''),(1340,'priv','fr','traincourse-changeStatus','',''),(1340,'priv','zh-cn','traincourse-changeStatus','',''),(1340,'priv','zh-tw','traincourse-changeStatus','',''),(1341,'priv','de','traincourse-uploadCourse','',''),(1341,'priv','en','traincourse-uploadCourse','',''),(1341,'priv','fr','traincourse-uploadCourse','',''),(1341,'priv','zh-cn','traincourse-uploadCourse','',''),(1341,'priv','zh-tw','traincourse-uploadCourse','',''),(1342,'priv','de','traincourse-viewCourse','',''),(1342,'priv','en','traincourse-viewCourse','',''),(1342,'priv','fr','traincourse-viewCourse','',''),(1342,'priv','zh-cn','traincourse-viewCourse','',''),(1342,'priv','zh-tw','traincourse-viewCourse','',''),(1343,'priv','de','traincourse-viewChapter','',''),(1343,'priv','en','traincourse-viewChapter','',''),(1343,'priv','fr','traincourse-viewChapter','',''),(1343,'priv','zh-cn','traincourse-viewChapter','',''),(1343,'priv','zh-tw','traincourse-viewChapter','',''),(1344,'priv','de','chart-browseAction','',''),(1344,'priv','en','chart-browseAction','',''),(1344,'priv','fr','chart-browseAction','',''),(1344,'priv','zh-cn','chart-browseAction','',''),(1344,'priv','zh-tw','chart-browseAction','',''),(1345,'priv','de','chart-create','',''),(1345,'priv','en','chart-create','',''),(1345,'priv','fr','chart-create','',''),(1345,'priv','zh-cn','chart-create','',''),(1345,'priv','zh-tw','chart-create','',''),(1346,'priv','de','chart-edit','',''),(1346,'priv','en','chart-edit','',''),(1346,'priv','fr','chart-edit','',''),(1346,'priv','zh-cn','chart-edit','',''),(1346,'priv','zh-tw','chart-edit','',''),(1347,'priv','de','chart-design','',''),(1347,'priv','en','chart-design','',''),(1347,'priv','fr','chart-design','',''),(1347,'priv','zh-cn','chart-design','',''),(1347,'priv','zh-tw','chart-design','',''),(1348,'priv','de','chart-delete','',''),(1348,'priv','en','chart-delete','',''),(1348,'priv','fr','chart-delete','',''),(1348,'priv','zh-cn','chart-delete','',''),(1348,'priv','zh-tw','chart-delete','',''),(1360,'priv','de','pssp-browse','',''),(1360,'priv','en','pssp-browse','',''),(1360,'priv','fr','pssp-browse','',''),(1360,'priv','zh-cn','pssp-browse','',''),(1360,'priv','zh-tw','pssp-browse','',''),(1361,'priv','de','pssp-update','',''),(1361,'priv','en','pssp-update','',''),(1361,'priv','fr','pssp-update','',''),(1361,'priv','zh-cn','pssp-update','',''),(1361,'priv','zh-tw','pssp-update','',''),(1362,'priv','de','baseline-templateType','',''),(1362,'priv','en','baseline-templateType','',''),(1362,'priv','fr','baseline-templateType','',''),(1362,'priv','zh-cn','baseline-templateType','',''),(1362,'priv','zh-tw','baseline-templateType','',''),(1363,'priv','de','baseline-template','',''),(1363,'priv','en','baseline-template','',''),(1363,'priv','fr','baseline-template','',''),(1363,'priv','zh-cn','baseline-template','',''),(1363,'priv','zh-tw','baseline-template','',''),(1364,'priv','de','baseline-createTemplate','',''),(1364,'priv','en','baseline-createTemplate','',''),(1364,'priv','fr','baseline-createTemplate','',''),(1364,'priv','zh-cn','baseline-createTemplate','',''),(1364,'priv','zh-tw','baseline-createTemplate','',''),(1365,'priv','de','baseline-view','',''),(1365,'priv','en','baseline-view','',''),(1365,'priv','fr','baseline-view','',''),(1365,'priv','zh-cn','baseline-view','',''),(1365,'priv','zh-tw','baseline-view','',''),(1366,'priv','de','baseline-editTemplate','',''),(1366,'priv','en','baseline-editTemplate','',''),(1366,'priv','fr','baseline-editTemplate','',''),(1366,'priv','zh-cn','baseline-editTemplate','',''),(1366,'priv','zh-tw','baseline-editTemplate','',''),(1367,'priv','de','baseline-editBook','',''),(1367,'priv','en','baseline-editBook','',''),(1367,'priv','fr','baseline-editBook','',''),(1367,'priv','zh-cn','baseline-editBook','',''),(1367,'priv','zh-tw','baseline-editBook','',''),(1369,'priv','de','baseline-manageBook','',''),(1369,'priv','en','baseline-manageBook','',''),(1369,'priv','fr','baseline-manageBook','',''),(1369,'priv','zh-cn','baseline-manageBook','',''),(1369,'priv','zh-tw','baseline-manageBook','',''),(1370,'priv','de','baseline-delete','',''),(1370,'priv','en','baseline-delete','',''),(1370,'priv','fr','baseline-delete','',''),(1370,'priv','zh-cn','baseline-delete','',''),(1370,'priv','zh-tw','baseline-delete','',''),(1371,'priv','de','classify-browse','',''),(1371,'priv','en','classify-browse','',''),(1371,'priv','fr','classify-browse','',''),(1371,'priv','zh-cn','classify-browse','',''),(1371,'priv','zh-tw','classify-browse','',''),(1372,'priv','de','cm-create','',''),(1372,'priv','en','cm-create','',''),(1372,'priv','fr','cm-create','',''),(1372,'priv','zh-cn','cm-create','',''),(1372,'priv','zh-tw','cm-create','',''),(1373,'priv','de','cm-delete','',''),(1373,'priv','en','cm-delete','',''),(1373,'priv','fr','cm-delete','',''),(1373,'priv','zh-cn','cm-delete','',''),(1373,'priv','zh-tw','cm-delete','',''),(1374,'priv','de','cm-edit','',''),(1374,'priv','en','cm-edit','',''),(1374,'priv','fr','cm-edit','',''),(1374,'priv','zh-cn','cm-edit','',''),(1374,'priv','zh-tw','cm-edit','',''),(1375,'priv','de','cm-browse','',''),(1375,'priv','en','cm-browse','',''),(1375,'priv','fr','cm-browse','',''),(1375,'priv','zh-cn','cm-browse','',''),(1375,'priv','zh-tw','cm-browse','',''),(1376,'priv','de','cm-view','',''),(1376,'priv','en','cm-view','',''),(1376,'priv','fr','cm-view','',''),(1376,'priv','zh-cn','cm-view','',''),(1376,'priv','zh-tw','cm-view','',''),(1377,'priv','de','cm-report','',''),(1377,'priv','en','cm-report','',''),(1377,'priv','fr','cm-report','',''),(1377,'priv','zh-cn','cm-report','',''),(1377,'priv','zh-tw','cm-report','',''),(1378,'priv','de','cmcl-batchCreate','',''),(1378,'priv','en','cmcl-batchCreate','',''),(1378,'priv','fr','cmcl-batchCreate','',''),(1378,'priv','zh-cn','cmcl-batchCreate','',''),(1378,'priv','zh-tw','cmcl-batchCreate','',''),(1379,'priv','de','cmcl-delete','',''),(1379,'priv','en','cmcl-delete','',''),(1379,'priv','fr','cmcl-delete','',''),(1379,'priv','zh-cn','cmcl-delete','',''),(1379,'priv','zh-tw','cmcl-delete','',''),(1380,'priv','de','cmcl-edit','',''),(1380,'priv','en','cmcl-edit','',''),(1380,'priv','fr','cmcl-edit','',''),(1380,'priv','zh-cn','cmcl-edit','',''),(1380,'priv','zh-tw','cmcl-edit','',''),(1381,'priv','de','cmcl-browse','',''),(1381,'priv','en','cmcl-browse','',''),(1381,'priv','fr','cmcl-browse','',''),(1381,'priv','zh-cn','cmcl-browse','',''),(1381,'priv','zh-tw','cmcl-browse','',''),(1382,'priv','de','cmcl-view','',''),(1382,'priv','en','cmcl-view','',''),(1382,'priv','fr','cmcl-view','',''),(1382,'priv','zh-cn','cmcl-view','',''),(1382,'priv','zh-tw','cmcl-view','',''),(1383,'priv','de','cmcl-waterfallplusBrowse','',''),(1383,'priv','en','cmcl-waterfallplusBrowse','',''),(1383,'priv','fr','cmcl-waterfallplusBrowse','',''),(1383,'priv','zh-cn','cmcl-waterfallplusBrowse','',''),(1383,'priv','zh-tw','cmcl-waterfallplusBrowse','',''),(1384,'priv','de','auditcl-batchCreate','',''),(1384,'priv','en','auditcl-batchCreate','',''),(1384,'priv','fr','auditcl-batchCreate','',''),(1384,'priv','zh-cn','auditcl-batchCreate','',''),(1384,'priv','zh-tw','auditcl-batchCreate','',''),(1385,'priv','de','auditcl-batchEdit','',''),(1385,'priv','en','auditcl-batchEdit','',''),(1385,'priv','fr','auditcl-batchEdit','',''),(1385,'priv','zh-cn','auditcl-batchEdit','',''),(1385,'priv','zh-tw','auditcl-batchEdit','',''),(1386,'priv','de','auditcl-delete','',''),(1386,'priv','en','auditcl-delete','',''),(1386,'priv','fr','auditcl-delete','',''),(1386,'priv','zh-cn','auditcl-delete','',''),(1386,'priv','zh-tw','auditcl-delete','',''),(1387,'priv','de','auditcl-edit','',''),(1387,'priv','en','auditcl-edit','',''),(1387,'priv','fr','auditcl-edit','',''),(1387,'priv','zh-cn','auditcl-edit','',''),(1387,'priv','zh-tw','auditcl-edit','',''),(1389,'priv','de','auditcl-scrumBrowse','',''),(1389,'priv','en','auditcl-scrumBrowse','',''),(1389,'priv','fr','auditcl-scrumBrowse','',''),(1389,'priv','zh-cn','auditcl-scrumBrowse','',''),(1389,'priv','zh-tw','auditcl-scrumBrowse','',''),(1390,'priv','de','auditcl-browse','',''),(1390,'priv','en','auditcl-browse','',''),(1390,'priv','fr','auditcl-browse','',''),(1390,'priv','zh-cn','auditcl-browse','',''),(1390,'priv','zh-tw','auditcl-browse','',''),(1391,'priv','de','auditcl-agilePlusBrowse','',''),(1391,'priv','en','auditcl-agilePlusBrowse','',''),(1391,'priv','fr','auditcl-agilePlusBrowse','',''),(1391,'priv','zh-cn','auditcl-agilePlusBrowse','',''),(1391,'priv','zh-tw','auditcl-agilePlusBrowse','',''),(1392,'priv','de','auditcl-waterfallplusBrowse','',''),(1392,'priv','en','auditcl-waterfallplusBrowse','',''),(1392,'priv','fr','auditcl-waterfallplusBrowse','',''),(1392,'priv','zh-cn','auditcl-waterfallplusBrowse','',''),(1392,'priv','zh-tw','auditcl-waterfallplusBrowse','',''),(1393,'priv','de','reviewcl-browse','',''),(1393,'priv','en','reviewcl-browse','',''),(1393,'priv','fr','reviewcl-browse','',''),(1393,'priv','zh-cn','reviewcl-browse','',''),(1393,'priv','zh-tw','reviewcl-browse','',''),(1394,'priv','de','reviewcl-create','',''),(1394,'priv','en','reviewcl-create','',''),(1394,'priv','fr','reviewcl-create','',''),(1394,'priv','zh-cn','reviewcl-create','',''),(1394,'priv','zh-tw','reviewcl-create','',''),(1395,'priv','de','reviewcl-batchCreate','',''),(1395,'priv','en','reviewcl-batchCreate','',''),(1395,'priv','fr','reviewcl-batchCreate','',''),(1395,'priv','zh-cn','reviewcl-batchCreate','',''),(1395,'priv','zh-tw','reviewcl-batchCreate','',''),(1396,'priv','de','reviewcl-delete','',''),(1396,'priv','en','reviewcl-delete','',''),(1396,'priv','fr','reviewcl-delete','',''),(1396,'priv','zh-cn','reviewcl-delete','',''),(1396,'priv','zh-tw','reviewcl-delete','',''),(1397,'priv','de','reviewcl-edit','',''),(1397,'priv','en','reviewcl-edit','',''),(1397,'priv','fr','reviewcl-edit','',''),(1397,'priv','zh-cn','reviewcl-edit','',''),(1397,'priv','zh-tw','reviewcl-edit','',''),(1398,'priv','de','reviewcl-view','',''),(1398,'priv','en','reviewcl-view','',''),(1398,'priv','fr','reviewcl-view','',''),(1398,'priv','zh-cn','reviewcl-view','',''),(1398,'priv','zh-tw','reviewcl-view','',''),(1399,'priv','de','reviewcl-waterfallplusBrowse','',''),(1399,'priv','en','reviewcl-waterfallplusBrowse','',''),(1399,'priv','fr','reviewcl-waterfallplusBrowse','',''),(1399,'priv','zh-cn','reviewcl-waterfallplusBrowse','',''),(1399,'priv','zh-tw','reviewcl-waterfallplusBrowse','',''),(1400,'priv','de','process-create','',''),(1400,'priv','en','process-create','',''),(1400,'priv','fr','process-create','',''),(1400,'priv','zh-cn','process-create','',''),(1400,'priv','zh-tw','process-create','',''),(1401,'priv','de','process-batchCreate','',''),(1401,'priv','en','process-batchCreate','',''),(1401,'priv','fr','process-batchCreate','',''),(1401,'priv','zh-cn','process-batchCreate','',''),(1401,'priv','zh-tw','process-batchCreate','',''),(1402,'priv','de','process-delete','',''),(1402,'priv','en','process-delete','',''),(1402,'priv','fr','process-delete','',''),(1402,'priv','zh-cn','process-delete','',''),(1402,'priv','zh-tw','process-delete','',''),(1403,'priv','de','process-edit','',''),(1403,'priv','en','process-edit','',''),(1403,'priv','fr','process-edit','',''),(1403,'priv','zh-cn','process-edit','',''),(1403,'priv','zh-tw','process-edit','',''),(1404,'priv','de','process-view','',''),(1404,'priv','en','process-view','',''),(1404,'priv','fr','process-view','',''),(1404,'priv','zh-cn','process-view','',''),(1404,'priv','zh-tw','process-view','',''),(1405,'priv','de','process-updateOrder','',''),(1405,'priv','en','process-updateOrder','',''),(1405,'priv','fr','process-updateOrder','',''),(1405,'priv','zh-cn','process-updateOrder','',''),(1405,'priv','zh-tw','process-updateOrder','',''),(1406,'priv','de','process-activityList','',''),(1406,'priv','en','process-activityList','',''),(1406,'priv','fr','process-activityList','',''),(1406,'priv','zh-cn','process-activityList','',''),(1406,'priv','zh-tw','process-activityList','',''),(1407,'priv','de','process-scrumBrowse','',''),(1407,'priv','en','process-scrumBrowse','',''),(1407,'priv','fr','process-scrumBrowse','',''),(1407,'priv','zh-cn','process-scrumBrowse','',''),(1407,'priv','zh-tw','process-scrumBrowse','',''),(1408,'priv','de','process-browse','',''),(1408,'priv','en','process-browse','',''),(1408,'priv','fr','process-browse','',''),(1408,'priv','zh-cn','process-browse','',''),(1408,'priv','zh-tw','process-browse','',''),(1409,'priv','de','process-agilePlusBrowse','',''),(1409,'priv','en','process-agilePlusBrowse','',''),(1409,'priv','fr','process-agilePlusBrowse','',''),(1409,'priv','zh-cn','process-agilePlusBrowse','',''),(1409,'priv','zh-tw','process-agilePlusBrowse','',''),(1410,'priv','de','process-waterfallPlusBrowse','',''),(1410,'priv','en','process-waterfallPlusBrowse','',''),(1410,'priv','fr','process-waterfallPlusBrowse','',''),(1410,'priv','zh-cn','process-waterfallPlusBrowse','',''),(1410,'priv','zh-tw','process-waterfallPlusBrowse','',''),(1411,'priv','de','activity-browse','',''),(1411,'priv','en','activity-browse','',''),(1411,'priv','fr','activity-browse','',''),(1411,'priv','zh-cn','activity-browse','',''),(1411,'priv','zh-tw','activity-browse','',''),(1412,'priv','de','activity-create','',''),(1412,'priv','en','activity-create','',''),(1412,'priv','fr','activity-create','',''),(1412,'priv','zh-cn','activity-create','',''),(1412,'priv','zh-tw','activity-create','',''),(1413,'priv','de','activity-batchCreate','',''),(1413,'priv','en','activity-batchCreate','',''),(1413,'priv','fr','activity-batchCreate','',''),(1413,'priv','zh-cn','activity-batchCreate','',''),(1413,'priv','zh-tw','activity-batchCreate','',''),(1414,'priv','de','activity-delete','',''),(1414,'priv','en','activity-delete','',''),(1414,'priv','fr','activity-delete','',''),(1414,'priv','zh-cn','activity-delete','',''),(1414,'priv','zh-tw','activity-delete','',''),(1415,'priv','de','activity-edit','',''),(1415,'priv','en','activity-edit','',''),(1415,'priv','fr','activity-edit','',''),(1415,'priv','zh-cn','activity-edit','',''),(1415,'priv','zh-tw','activity-edit','',''),(1416,'priv','de','activity-view','',''),(1416,'priv','en','activity-view','',''),(1416,'priv','fr','activity-view','',''),(1416,'priv','zh-cn','activity-view','',''),(1416,'priv','zh-tw','activity-view','',''),(1417,'priv','de','activity-assignTo','',''),(1417,'priv','en','activity-assignTo','',''),(1417,'priv','fr','activity-assignTo','',''),(1417,'priv','zh-cn','activity-assignTo','',''),(1417,'priv','zh-tw','activity-assignTo','',''),(1418,'priv','de','activity-outputList','',''),(1418,'priv','en','activity-outputList','',''),(1418,'priv','fr','activity-outputList','',''),(1418,'priv','zh-cn','activity-outputList','',''),(1418,'priv','zh-tw','activity-outputList','',''),(1419,'priv','de','activity-updateOrder','',''),(1419,'priv','en','activity-updateOrder','',''),(1419,'priv','fr','activity-updateOrder','',''),(1419,'priv','zh-cn','activity-updateOrder','',''),(1419,'priv','zh-tw','activity-updateOrder','',''),(1420,'priv','de','zoutput-browse','',''),(1420,'priv','en','zoutput-browse','',''),(1420,'priv','fr','zoutput-browse','',''),(1420,'priv','zh-cn','zoutput-browse','',''),(1420,'priv','zh-tw','zoutput-browse','',''),(1421,'priv','de','zoutput-create','',''),(1421,'priv','en','zoutput-create','',''),(1421,'priv','fr','zoutput-create','',''),(1421,'priv','zh-cn','zoutput-create','',''),(1421,'priv','zh-tw','zoutput-create','',''),(1422,'priv','de','zoutput-edit','',''),(1422,'priv','en','zoutput-edit','',''),(1422,'priv','fr','zoutput-edit','',''),(1422,'priv','zh-cn','zoutput-edit','',''),(1422,'priv','zh-tw','zoutput-edit','',''),(1423,'priv','de','zoutput-batchCreate','',''),(1423,'priv','en','zoutput-batchCreate','',''),(1423,'priv','fr','zoutput-batchCreate','',''),(1423,'priv','zh-cn','zoutput-batchCreate','',''),(1423,'priv','zh-tw','zoutput-batchCreate','',''),(1424,'priv','de','zoutput-batchEdit','',''),(1424,'priv','en','zoutput-batchEdit','',''),(1424,'priv','fr','zoutput-batchEdit','',''),(1424,'priv','zh-cn','zoutput-batchEdit','',''),(1424,'priv','zh-tw','zoutput-batchEdit','',''),(1425,'priv','de','zoutput-delete','',''),(1425,'priv','en','zoutput-delete','',''),(1425,'priv','fr','zoutput-delete','',''),(1425,'priv','zh-cn','zoutput-delete','',''),(1425,'priv','zh-tw','zoutput-delete','',''),(1426,'priv','de','zoutput-view','',''),(1426,'priv','en','zoutput-view','',''),(1426,'priv','fr','zoutput-view','',''),(1426,'priv','zh-cn','zoutput-view','',''),(1426,'priv','zh-tw','zoutput-view','',''),(1427,'priv','de','zoutput-updateOrder','',''),(1427,'priv','en','zoutput-updateOrder','',''),(1427,'priv','fr','zoutput-updateOrder','',''),(1427,'priv','zh-cn','zoutput-updateOrder','',''),(1427,'priv','zh-tw','zoutput-updateOrder','',''),(1428,'priv','de','auditplan-browseAction','',''),(1428,'priv','en','auditplan-browseAction','',''),(1428,'priv','fr','auditplan-browseAction','',''),(1428,'priv','zh-cn','auditplan-browseAction','',''),(1428,'priv','zh-tw','auditplan-browseAction','',''),(1429,'priv','de','auditplan-create','',''),(1429,'priv','en','auditplan-create','',''),(1429,'priv','fr','auditplan-create','',''),(1429,'priv','zh-cn','auditplan-create','',''),(1429,'priv','zh-tw','auditplan-create','',''),(1430,'priv','de','auditplan-editAction','',''),(1430,'priv','en','auditplan-editAction','',''),(1430,'priv','fr','auditplan-editAction','',''),(1430,'priv','zh-cn','auditplan-editAction','',''),(1430,'priv','zh-tw','auditplan-editAction','',''),(1431,'priv','de','auditplan-batchCreate','',''),(1431,'priv','en','auditplan-batchCreate','',''),(1431,'priv','fr','auditplan-batchCreate','',''),(1431,'priv','zh-cn','auditplan-batchCreate','',''),(1431,'priv','zh-tw','auditplan-batchCreate','',''),(1432,'priv','de','auditplan-batchEdit','',''),(1432,'priv','en','auditplan-batchEdit','',''),(1432,'priv','fr','auditplan-batchEdit','',''),(1432,'priv','zh-cn','auditplan-batchEdit','',''),(1432,'priv','zh-tw','auditplan-batchEdit','',''),(1433,'priv','de','auditplan-batchCheck','',''),(1433,'priv','en','auditplan-batchCheck','',''),(1433,'priv','fr','auditplan-batchCheck','',''),(1433,'priv','zh-cn','auditplan-batchCheck','',''),(1433,'priv','zh-tw','auditplan-batchCheck','',''),(1434,'priv','de','auditplan-check','',''),(1434,'priv','en','auditplan-check','',''),(1434,'priv','fr','auditplan-check','',''),(1434,'priv','zh-cn','auditplan-check','',''),(1434,'priv','zh-tw','auditplan-check','',''),(1435,'priv','de','auditplan-nc','',''),(1435,'priv','en','auditplan-nc','',''),(1435,'priv','fr','auditplan-nc','',''),(1435,'priv','zh-cn','auditplan-nc','',''),(1435,'priv','zh-tw','auditplan-nc','',''),(1436,'priv','de','auditplan-result','',''),(1436,'priv','en','auditplan-result','',''),(1436,'priv','fr','auditplan-result','',''),(1436,'priv','zh-cn','auditplan-result','',''),(1436,'priv','zh-tw','auditplan-result','',''),(1437,'priv','de','auditplan-delete','',''),(1437,'priv','en','auditplan-delete','',''),(1437,'priv','fr','auditplan-delete','',''),(1437,'priv','zh-cn','auditplan-delete','',''),(1437,'priv','zh-tw','auditplan-delete','',''),(1438,'priv','de','auditplan-assignTo','',''),(1438,'priv','en','auditplan-assignTo','',''),(1438,'priv','fr','auditplan-assignTo','',''),(1438,'priv','zh-cn','auditplan-assignTo','',''),(1438,'priv','zh-tw','auditplan-assignTo','',''),(1439,'priv','de','subject-common','',''),(1439,'priv','en','subject-common','',''),(1439,'priv','fr','subject-common','',''),(1439,'priv','zh-cn','subject-common','',''),(1439,'priv','zh-tw','subject-common','',''),(1440,'priv','de','approvalflow-browse','',''),(1440,'priv','en','approvalflow-browse','',''),(1440,'priv','fr','approvalflow-browse','',''),(1440,'priv','zh-cn','approvalflow-browse','',''),(1440,'priv','zh-tw','approvalflow-browse','',''),(1441,'priv','de','approvalflow-create','',''),(1441,'priv','en','approvalflow-create','',''),(1441,'priv','fr','approvalflow-create','',''),(1441,'priv','zh-cn','approvalflow-create','',''),(1441,'priv','zh-tw','approvalflow-create','',''),(1442,'priv','de','approvalflow-edit','',''),(1442,'priv','en','approvalflow-edit','',''),(1442,'priv','fr','approvalflow-edit','',''),(1442,'priv','zh-cn','approvalflow-edit','',''),(1442,'priv','zh-tw','approvalflow-edit','',''),(1443,'priv','de','approvalflow-view','',''),(1443,'priv','en','approvalflow-view','',''),(1443,'priv','fr','approvalflow-view','',''),(1443,'priv','zh-cn','approvalflow-view','',''),(1443,'priv','zh-tw','approvalflow-view','',''),(1444,'priv','de','approvalflow-design','',''),(1444,'priv','en','approvalflow-design','',''),(1444,'priv','fr','approvalflow-design','',''),(1444,'priv','zh-cn','approvalflow-design','',''),(1444,'priv','zh-tw','approvalflow-design','',''),(1445,'priv','de','approvalflow-delete','',''),(1445,'priv','en','approvalflow-delete','',''),(1445,'priv','fr','approvalflow-delete','',''),(1445,'priv','zh-cn','approvalflow-delete','',''),(1445,'priv','zh-tw','approvalflow-delete','',''),(1446,'priv','de','approvalflow-roleList','',''),(1446,'priv','en','approvalflow-roleList','',''),(1446,'priv','fr','approvalflow-roleList','',''),(1446,'priv','zh-cn','approvalflow-roleList','',''),(1446,'priv','zh-tw','approvalflow-roleList','',''),(1447,'priv','de','approvalflow-createRole','',''),(1447,'priv','en','approvalflow-createRole','',''),(1447,'priv','fr','approvalflow-createRole','',''),(1447,'priv','zh-cn','approvalflow-createRole','',''),(1447,'priv','zh-tw','approvalflow-createRole','',''),(1448,'priv','de','approvalflow-editRole','',''),(1448,'priv','en','approvalflow-editRole','',''),(1448,'priv','fr','approvalflow-editRole','',''),(1448,'priv','zh-cn','approvalflow-editRole','',''),(1448,'priv','zh-tw','approvalflow-editRole','',''),(1449,'priv','de','approvalflow-deleteRole','',''),(1449,'priv','en','approvalflow-deleteRole','',''),(1449,'priv','fr','approvalflow-deleteRole','',''),(1449,'priv','zh-cn','approvalflow-deleteRole','',''),(1449,'priv','zh-tw','approvalflow-deleteRole','',''),(1450,'priv','de','reviewissue-issue','',''),(1450,'priv','en','reviewissue-issue','',''),(1450,'priv','fr','reviewissue-issue','',''),(1450,'priv','zh-cn','reviewissue-issue','',''),(1450,'priv','zh-tw','reviewissue-issue','',''),(1451,'priv','de','reviewissue-updateStatus','',''),(1451,'priv','en','reviewissue-updateStatus','',''),(1451,'priv','fr','reviewissue-updateStatus','',''),(1451,'priv','zh-cn','reviewissue-updateStatus','',''),(1451,'priv','zh-tw','reviewissue-updateStatus','',''),(1452,'priv','de','reviewissue-resolved','',''),(1452,'priv','en','reviewissue-resolved','',''),(1452,'priv','fr','reviewissue-resolved','',''),(1452,'priv','zh-cn','reviewissue-resolved','',''),(1452,'priv','zh-tw','reviewissue-resolved','',''),(1453,'priv','de','reviewissue-create','',''),(1453,'priv','en','reviewissue-create','',''),(1453,'priv','fr','reviewissue-create','',''),(1453,'priv','zh-cn','reviewissue-create','',''),(1453,'priv','zh-tw','reviewissue-create','',''),(1454,'priv','de','reviewissue-edit','',''),(1454,'priv','en','reviewissue-edit','',''),(1454,'priv','fr','reviewissue-edit','',''),(1454,'priv','zh-cn','reviewissue-edit','',''),(1454,'priv','zh-tw','reviewissue-edit','',''),(1455,'priv','de','reviewissue-view','',''),(1455,'priv','en','reviewissue-view','',''),(1455,'priv','fr','reviewissue-view','',''),(1455,'priv','zh-cn','reviewissue-view','',''),(1455,'priv','zh-tw','reviewissue-view','',''),(1456,'priv','de','reviewissue-delete','',''),(1456,'priv','en','reviewissue-delete','',''),(1456,'priv','fr','reviewissue-delete','',''),(1456,'priv','zh-cn','reviewissue-delete','',''),(1456,'priv','zh-tw','reviewissue-delete','',''),(1457,'priv','de','reviewsetting-version','',''),(1457,'priv','en','reviewsetting-version','',''),(1457,'priv','fr','reviewsetting-version','',''),(1457,'priv','zh-cn','reviewsetting-version','',''),(1457,'priv','zh-tw','reviewsetting-version','',''),(1459,'priv','de','reviewsetting-waterfallplusVersion','',''),(1459,'priv','en','reviewsetting-waterfallplusVersion','',''),(1459,'priv','fr','reviewsetting-waterfallplusVersion','',''),(1459,'priv','zh-cn','reviewsetting-waterfallplusVersion','',''),(1459,'priv','zh-tw','reviewsetting-waterfallplusVersion','',''),(1460,'priv','de','review-browseAction','',''),(1460,'priv','en','review-browseAction','',''),(1460,'priv','fr','review-browseAction','',''),(1460,'priv','zh-cn','review-browseAction','',''),(1460,'priv','zh-tw','review-browseAction','',''),(1461,'priv','de','review-assess','',''),(1461,'priv','en','review-assess','',''),(1461,'priv','fr','review-assess','',''),(1461,'priv','zh-cn','review-assess','',''),(1461,'priv','zh-tw','review-assess','',''),(1462,'priv','de','review-create','',''),(1462,'priv','en','review-create','',''),(1462,'priv','fr','review-create','',''),(1462,'priv','zh-cn','review-create','',''),(1462,'priv','zh-tw','review-create','',''),(1463,'priv','de','review-edit','',''),(1463,'priv','en','review-edit','',''),(1463,'priv','fr','review-edit','',''),(1463,'priv','zh-cn','review-edit','',''),(1463,'priv','zh-tw','review-edit','',''),(1464,'priv','de','review-view','',''),(1464,'priv','en','review-view','',''),(1464,'priv','fr','review-view','',''),(1464,'priv','zh-cn','review-view','',''),(1464,'priv','zh-tw','review-view','',''),(1465,'priv','de','review-submit','',''),(1465,'priv','en','review-submit','',''),(1465,'priv','fr','review-submit','',''),(1465,'priv','zh-cn','review-submit','',''),(1465,'priv','zh-tw','review-submit','',''),(1466,'priv','de','review-recall','',''),(1466,'priv','en','review-recall','',''),(1466,'priv','fr','review-recall','',''),(1466,'priv','zh-cn','review-recall','',''),(1466,'priv','zh-tw','review-recall','',''),(1467,'priv','de','review-reviewReport','',''),(1467,'priv','en','review-reviewReport','',''),(1467,'priv','fr','review-reviewReport','',''),(1467,'priv','zh-cn','review-reviewReport','',''),(1467,'priv','zh-tw','review-reviewReport','',''),(1468,'priv','de','review-toAudit','',''),(1468,'priv','en','review-toAudit','',''),(1468,'priv','fr','review-toAudit','',''),(1468,'priv','zh-cn','review-toAudit','',''),(1468,'priv','zh-tw','review-toAudit','',''),(1469,'priv','de','review-audit','',''),(1469,'priv','en','review-audit','',''),(1469,'priv','fr','review-audit','',''),(1469,'priv','zh-cn','review-audit','',''),(1469,'priv','zh-tw','review-audit','',''),(1470,'priv','de','review-delete','',''),(1470,'priv','en','review-delete','',''),(1470,'priv','fr','review-delete','',''),(1470,'priv','zh-cn','review-delete','',''),(1470,'priv','zh-tw','review-delete','',''),(1471,'priv','de','measurement-setTips','',''),(1471,'priv','en','measurement-setTips','',''),(1471,'priv','fr','measurement-setTips','',''),(1471,'priv','zh-cn','measurement-setTips','',''),(1471,'priv','zh-tw','measurement-setTips','',''),(1472,'priv','de','measurement-setSQL','',''),(1472,'priv','en','measurement-setSQL','',''),(1472,'priv','fr','measurement-setSQL','',''),(1472,'priv','zh-cn','measurement-setSQL','',''),(1472,'priv','zh-tw','measurement-setSQL','',''),(1473,'priv','de','measurement-browseAction','',''),(1473,'priv','en','measurement-browseAction','',''),(1473,'priv','fr','measurement-browseAction','',''),(1473,'priv','zh-cn','measurement-browseAction','',''),(1473,'priv','zh-tw','measurement-browseAction','',''),(1474,'priv','de','measurement-createBasic','',''),(1474,'priv','en','measurement-createBasic','',''),(1474,'priv','fr','measurement-createBasic','',''),(1474,'priv','zh-cn','measurement-createBasic','',''),(1474,'priv','zh-tw','measurement-createBasic','',''),(1475,'priv','de','measurement-deleteAction','',''),(1475,'priv','en','measurement-deleteAction','',''),(1475,'priv','fr','measurement-deleteAction','',''),(1475,'priv','zh-cn','measurement-deleteAction','',''),(1475,'priv','zh-tw','measurement-deleteAction','',''),(1477,'priv','de','measurement-editBasic','',''),(1477,'priv','en','measurement-editBasic','',''),(1477,'priv','fr','measurement-editBasic','',''),(1477,'priv','zh-cn','measurement-editBasic','',''),(1477,'priv','zh-tw','measurement-editBasic','',''),(1478,'priv','de','measurement-searchMeas','',''),(1478,'priv','en','measurement-searchMeas','',''),(1478,'priv','fr','measurement-searchMeas','',''),(1478,'priv','zh-cn','measurement-searchMeas','',''),(1478,'priv','zh-tw','measurement-searchMeas','',''),(1479,'priv','de','measurement-template','',''),(1479,'priv','en','measurement-template','',''),(1479,'priv','fr','measurement-template','',''),(1479,'priv','zh-cn','measurement-template','',''),(1479,'priv','zh-tw','measurement-template','',''),(1480,'priv','de','measurement-createTemplate','',''),(1480,'priv','en','measurement-createTemplate','',''),(1480,'priv','fr','measurement-createTemplate','',''),(1480,'priv','zh-cn','measurement-createTemplate','',''),(1480,'priv','zh-tw','measurement-createTemplate','',''),(1481,'priv','de','measurement-editTemplate','',''),(1481,'priv','en','measurement-editTemplate','',''),(1481,'priv','fr','measurement-editTemplate','',''),(1481,'priv','zh-cn','measurement-editTemplate','',''),(1481,'priv','zh-tw','measurement-editTemplate','',''),(1482,'priv','de','measurement-viewTemplate','',''),(1482,'priv','en','measurement-viewTemplate','',''),(1482,'priv','fr','measurement-viewTemplate','',''),(1482,'priv','zh-cn','measurement-viewTemplate','',''),(1482,'priv','zh-tw','measurement-viewTemplate','',''),(1488,'priv','de','measurement-batchEditAction','',''),(1488,'priv','en','measurement-batchEditAction','',''),(1488,'priv','fr','measurement-batchEditAction','',''),(1488,'priv','zh-cn','measurement-batchEditAction','',''),(1488,'priv','zh-tw','measurement-batchEditAction','',''),(1489,'priv','de','measurement-saveReportAB','',''),(1489,'priv','en','measurement-saveReportAB','',''),(1489,'priv','fr','measurement-saveReportAB','',''),(1489,'priv','zh-cn','measurement-saveReportAB','',''),(1489,'priv','zh-tw','measurement-saveReportAB','',''),(1490,'priv','de','measrecord-browse','',''),(1490,'priv','en','measrecord-browse','',''),(1490,'priv','fr','measrecord-browse','',''),(1490,'priv','zh-cn','measrecord-browse','',''),(1490,'priv','zh-tw','measrecord-browse','',''),(1491,'priv','de','assetlib-caseLib','',''),(1491,'priv','en','assetlib-caseLib','',''),(1491,'priv','fr','assetlib-caseLib','',''),(1491,'priv','zh-cn','assetlib-caseLib','',''),(1491,'priv','zh-tw','assetlib-caseLib','',''),(1492,'priv','de','assetlib-storyLib','',''),(1492,'priv','en','assetlib-storyLib','',''),(1492,'priv','fr','assetlib-storyLib','',''),(1492,'priv','zh-cn','assetlib-storyLib','',''),(1492,'priv','zh-tw','assetlib-storyLib','',''),(1493,'priv','de','assetlib-createStoryLib','',''),(1493,'priv','en','assetlib-createStoryLib','',''),(1493,'priv','fr','assetlib-createStoryLib','',''),(1493,'priv','zh-cn','assetlib-createStoryLib','',''),(1493,'priv','zh-tw','assetlib-createStoryLib','',''),(1494,'priv','de','assetlib-editStoryLib','',''),(1494,'priv','en','assetlib-editStoryLib','',''),(1494,'priv','fr','assetlib-editStoryLib','',''),(1494,'priv','zh-cn','assetlib-editStoryLib','',''),(1494,'priv','zh-tw','assetlib-editStoryLib','',''),(1495,'priv','de','assetlib-deleteStoryLib','',''),(1495,'priv','en','assetlib-deleteStoryLib','',''),(1495,'priv','fr','assetlib-deleteStoryLib','',''),(1495,'priv','zh-cn','assetlib-deleteStoryLib','',''),(1495,'priv','zh-tw','assetlib-deleteStoryLib','',''),(1496,'priv','de','assetlib-storyLibView','',''),(1496,'priv','en','assetlib-storyLibView','',''),(1496,'priv','fr','assetlib-storyLibView','',''),(1496,'priv','zh-cn','assetlib-storyLibView','',''),(1496,'priv','zh-tw','assetlib-storyLibView','',''),(1497,'priv','de','assetlib-story','',''),(1497,'priv','en','assetlib-story','',''),(1497,'priv','fr','assetlib-story','',''),(1497,'priv','zh-cn','assetlib-story','',''),(1497,'priv','zh-tw','assetlib-story','',''),(1498,'priv','de','assetlib-importStory','',''),(1498,'priv','en','assetlib-importStory','',''),(1498,'priv','fr','assetlib-importStory','',''),(1498,'priv','zh-cn','assetlib-importStory','',''),(1498,'priv','zh-tw','assetlib-importStory','',''),(1499,'priv','de','assetlib-assignToStory','',''),(1499,'priv','en','assetlib-assignToStory','',''),(1499,'priv','fr','assetlib-assignToStory','',''),(1499,'priv','zh-cn','assetlib-assignToStory','',''),(1499,'priv','zh-tw','assetlib-assignToStory','',''),(1500,'priv','de','assetlib-batchAssignToStory','',''),(1500,'priv','en','assetlib-batchAssignToStory','',''),(1500,'priv','fr','assetlib-batchAssignToStory','',''),(1500,'priv','zh-cn','assetlib-batchAssignToStory','',''),(1500,'priv','zh-tw','assetlib-batchAssignToStory','',''),(1501,'priv','de','assetlib-approveStory','',''),(1501,'priv','en','assetlib-approveStory','',''),(1501,'priv','fr','assetlib-approveStory','',''),(1501,'priv','zh-cn','assetlib-approveStory','',''),(1501,'priv','zh-tw','assetlib-approveStory','',''),(1502,'priv','de','assetlib-batchApproveStory','',''),(1502,'priv','en','assetlib-batchApproveStory','',''),(1502,'priv','fr','assetlib-batchApproveStory','',''),(1502,'priv','zh-cn','assetlib-batchApproveStory','',''),(1502,'priv','zh-tw','assetlib-batchApproveStory','',''),(1503,'priv','de','assetlib-editStory','',''),(1503,'priv','en','assetlib-editStory','',''),(1503,'priv','fr','assetlib-editStory','',''),(1503,'priv','zh-cn','assetlib-editStory','',''),(1503,'priv','zh-tw','assetlib-editStory','',''),(1504,'priv','de','assetlib-removeStory','',''),(1504,'priv','en','assetlib-removeStory','',''),(1504,'priv','fr','assetlib-removeStory','',''),(1504,'priv','zh-cn','assetlib-removeStory','',''),(1504,'priv','zh-tw','assetlib-removeStory','',''),(1505,'priv','de','assetlib-batchRemoveStory','',''),(1505,'priv','en','assetlib-batchRemoveStory','',''),(1505,'priv','fr','assetlib-batchRemoveStory','',''),(1505,'priv','zh-cn','assetlib-batchRemoveStory','',''),(1505,'priv','zh-tw','assetlib-batchRemoveStory','',''),(1506,'priv','de','assetlib-storyView','',''),(1506,'priv','en','assetlib-storyView','',''),(1506,'priv','fr','assetlib-storyView','',''),(1506,'priv','zh-cn','assetlib-storyView','',''),(1506,'priv','zh-tw','assetlib-storyView','',''),(1507,'priv','de','assetlib-issueLib','',''),(1507,'priv','en','assetlib-issueLib','',''),(1507,'priv','fr','assetlib-issueLib','',''),(1507,'priv','zh-cn','assetlib-issueLib','',''),(1507,'priv','zh-tw','assetlib-issueLib','',''),(1508,'priv','de','assetlib-createIssueLib','',''),(1508,'priv','en','assetlib-createIssueLib','',''),(1508,'priv','fr','assetlib-createIssueLib','',''),(1508,'priv','zh-cn','assetlib-createIssueLib','',''),(1508,'priv','zh-tw','assetlib-createIssueLib','',''),(1509,'priv','de','assetlib-editIssueLib','',''),(1509,'priv','en','assetlib-editIssueLib','',''),(1509,'priv','fr','assetlib-editIssueLib','',''),(1509,'priv','zh-cn','assetlib-editIssueLib','',''),(1509,'priv','zh-tw','assetlib-editIssueLib','',''),(1510,'priv','de','assetlib-deleteIssueLib','',''),(1510,'priv','en','assetlib-deleteIssueLib','',''),(1510,'priv','fr','assetlib-deleteIssueLib','',''),(1510,'priv','zh-cn','assetlib-deleteIssueLib','',''),(1510,'priv','zh-tw','assetlib-deleteIssueLib','',''),(1511,'priv','de','assetlib-issueLibView','',''),(1511,'priv','en','assetlib-issueLibView','',''),(1511,'priv','fr','assetlib-issueLibView','',''),(1511,'priv','zh-cn','assetlib-issueLibView','',''),(1511,'priv','zh-tw','assetlib-issueLibView','',''),(1512,'priv','de','assetlib-issue','',''),(1512,'priv','en','assetlib-issue','',''),(1512,'priv','fr','assetlib-issue','',''),(1512,'priv','zh-cn','assetlib-issue','',''),(1512,'priv','zh-tw','assetlib-issue','',''),(1513,'priv','de','assetlib-importIssue','',''),(1513,'priv','en','assetlib-importIssue','',''),(1513,'priv','fr','assetlib-importIssue','',''),(1513,'priv','zh-cn','assetlib-importIssue','',''),(1513,'priv','zh-tw','assetlib-importIssue','',''),(1514,'priv','de','assetlib-assignToIssue','',''),(1514,'priv','en','assetlib-assignToIssue','',''),(1514,'priv','fr','assetlib-assignToIssue','',''),(1514,'priv','zh-cn','assetlib-assignToIssue','',''),(1514,'priv','zh-tw','assetlib-assignToIssue','',''),(1515,'priv','de','assetlib-batchAssignToIssue','',''),(1515,'priv','en','assetlib-batchAssignToIssue','',''),(1515,'priv','fr','assetlib-batchAssignToIssue','',''),(1515,'priv','zh-cn','assetlib-batchAssignToIssue','',''),(1515,'priv','zh-tw','assetlib-batchAssignToIssue','',''),(1516,'priv','de','assetlib-approveIssue','',''),(1516,'priv','en','assetlib-approveIssue','',''),(1516,'priv','fr','assetlib-approveIssue','',''),(1516,'priv','zh-cn','assetlib-approveIssue','',''),(1516,'priv','zh-tw','assetlib-approveIssue','',''),(1517,'priv','de','assetlib-batchApproveIssue','',''),(1517,'priv','en','assetlib-batchApproveIssue','',''),(1517,'priv','fr','assetlib-batchApproveIssue','',''),(1517,'priv','zh-cn','assetlib-batchApproveIssue','',''),(1517,'priv','zh-tw','assetlib-batchApproveIssue','',''),(1518,'priv','de','assetlib-editIssue','',''),(1518,'priv','en','assetlib-editIssue','',''),(1518,'priv','fr','assetlib-editIssue','',''),(1518,'priv','zh-cn','assetlib-editIssue','',''),(1518,'priv','zh-tw','assetlib-editIssue','',''),(1519,'priv','de','assetlib-removeIssue','',''),(1519,'priv','en','assetlib-removeIssue','',''),(1519,'priv','fr','assetlib-removeIssue','',''),(1519,'priv','zh-cn','assetlib-removeIssue','',''),(1519,'priv','zh-tw','assetlib-removeIssue','',''),(1520,'priv','de','assetlib-batchRemoveIssue','',''),(1520,'priv','en','assetlib-batchRemoveIssue','',''),(1520,'priv','fr','assetlib-batchRemoveIssue','',''),(1520,'priv','zh-cn','assetlib-batchRemoveIssue','',''),(1520,'priv','zh-tw','assetlib-batchRemoveIssue','',''),(1521,'priv','de','assetlib-issueView','',''),(1521,'priv','en','assetlib-issueView','',''),(1521,'priv','fr','assetlib-issueView','',''),(1521,'priv','zh-cn','assetlib-issueView','',''),(1521,'priv','zh-tw','assetlib-issueView','',''),(1522,'priv','de','assetlib-riskLib','',''),(1522,'priv','en','assetlib-riskLib','',''),(1522,'priv','fr','assetlib-riskLib','',''),(1522,'priv','zh-cn','assetlib-riskLib','',''),(1522,'priv','zh-tw','assetlib-riskLib','',''),(1523,'priv','de','assetlib-createRiskLib','',''),(1523,'priv','en','assetlib-createRiskLib','',''),(1523,'priv','fr','assetlib-createRiskLib','',''),(1523,'priv','zh-cn','assetlib-createRiskLib','',''),(1523,'priv','zh-tw','assetlib-createRiskLib','',''),(1524,'priv','de','assetlib-editRiskLib','',''),(1524,'priv','en','assetlib-editRiskLib','',''),(1524,'priv','fr','assetlib-editRiskLib','',''),(1524,'priv','zh-cn','assetlib-editRiskLib','',''),(1524,'priv','zh-tw','assetlib-editRiskLib','',''),(1525,'priv','de','assetlib-deleteRiskLib','',''),(1525,'priv','en','assetlib-deleteRiskLib','',''),(1525,'priv','fr','assetlib-deleteRiskLib','',''),(1525,'priv','zh-cn','assetlib-deleteRiskLib','',''),(1525,'priv','zh-tw','assetlib-deleteRiskLib','',''),(1526,'priv','de','assetlib-riskLibView','',''),(1526,'priv','en','assetlib-riskLibView','',''),(1526,'priv','fr','assetlib-riskLibView','',''),(1526,'priv','zh-cn','assetlib-riskLibView','',''),(1526,'priv','zh-tw','assetlib-riskLibView','',''),(1527,'priv','de','assetlib-risk','',''),(1527,'priv','en','assetlib-risk','',''),(1527,'priv','fr','assetlib-risk','',''),(1527,'priv','zh-cn','assetlib-risk','',''),(1527,'priv','zh-tw','assetlib-risk','',''),(1528,'priv','de','assetlib-importRisk','',''),(1528,'priv','en','assetlib-importRisk','',''),(1528,'priv','fr','assetlib-importRisk','',''),(1528,'priv','zh-cn','assetlib-importRisk','',''),(1528,'priv','zh-tw','assetlib-importRisk','',''),(1529,'priv','de','assetlib-assignToRisk','',''),(1529,'priv','en','assetlib-assignToRisk','',''),(1529,'priv','fr','assetlib-assignToRisk','',''),(1529,'priv','zh-cn','assetlib-assignToRisk','',''),(1529,'priv','zh-tw','assetlib-assignToRisk','',''),(1530,'priv','de','assetlib-batchAssignToRisk','',''),(1530,'priv','en','assetlib-batchAssignToRisk','',''),(1530,'priv','fr','assetlib-batchAssignToRisk','',''),(1530,'priv','zh-cn','assetlib-batchAssignToRisk','',''),(1530,'priv','zh-tw','assetlib-batchAssignToRisk','',''),(1531,'priv','de','assetlib-approveRisk','',''),(1531,'priv','en','assetlib-approveRisk','',''),(1531,'priv','fr','assetlib-approveRisk','',''),(1531,'priv','zh-cn','assetlib-approveRisk','',''),(1531,'priv','zh-tw','assetlib-approveRisk','',''),(1532,'priv','de','assetlib-batchApproveRisk','',''),(1532,'priv','en','assetlib-batchApproveRisk','',''),(1532,'priv','fr','assetlib-batchApproveRisk','',''),(1532,'priv','zh-cn','assetlib-batchApproveRisk','',''),(1532,'priv','zh-tw','assetlib-batchApproveRisk','',''),(1533,'priv','de','assetlib-editRisk','',''),(1533,'priv','en','assetlib-editRisk','',''),(1533,'priv','fr','assetlib-editRisk','',''),(1533,'priv','zh-cn','assetlib-editRisk','',''),(1533,'priv','zh-tw','assetlib-editRisk','',''),(1534,'priv','de','assetlib-removeRisk','',''),(1534,'priv','en','assetlib-removeRisk','',''),(1534,'priv','fr','assetlib-removeRisk','',''),(1534,'priv','zh-cn','assetlib-removeRisk','',''),(1534,'priv','zh-tw','assetlib-removeRisk','',''),(1535,'priv','de','assetlib-batchRemoveRisk','',''),(1535,'priv','en','assetlib-batchRemoveRisk','',''),(1535,'priv','fr','assetlib-batchRemoveRisk','',''),(1535,'priv','zh-cn','assetlib-batchRemoveRisk','',''),(1535,'priv','zh-tw','assetlib-batchRemoveRisk','',''),(1536,'priv','de','assetlib-riskView','',''),(1536,'priv','en','assetlib-riskView','',''),(1536,'priv','fr','assetlib-riskView','',''),(1536,'priv','zh-cn','assetlib-riskView','',''),(1536,'priv','zh-tw','assetlib-riskView','',''),(1537,'priv','de','assetlib-opportunityLib','',''),(1537,'priv','en','assetlib-opportunityLib','',''),(1537,'priv','fr','assetlib-opportunityLib','',''),(1537,'priv','zh-cn','assetlib-opportunityLib','',''),(1537,'priv','zh-tw','assetlib-opportunityLib','',''),(1538,'priv','de','assetlib-createOpportunityLib','',''),(1538,'priv','en','assetlib-createOpportunityLib','',''),(1538,'priv','fr','assetlib-createOpportunityLib','',''),(1538,'priv','zh-cn','assetlib-createOpportunityLib','',''),(1538,'priv','zh-tw','assetlib-createOpportunityLib','',''),(1539,'priv','de','assetlib-editOpportunityLib','',''),(1539,'priv','en','assetlib-editOpportunityLib','',''),(1539,'priv','fr','assetlib-editOpportunityLib','',''),(1539,'priv','zh-cn','assetlib-editOpportunityLib','',''),(1539,'priv','zh-tw','assetlib-editOpportunityLib','',''),(1540,'priv','de','assetlib-deleteOpportunityLib','',''),(1540,'priv','en','assetlib-deleteOpportunityLib','',''),(1540,'priv','fr','assetlib-deleteOpportunityLib','',''),(1540,'priv','zh-cn','assetlib-deleteOpportunityLib','',''),(1540,'priv','zh-tw','assetlib-deleteOpportunityLib','',''),(1541,'priv','de','assetlib-opportunityLibView','',''),(1541,'priv','en','assetlib-opportunityLibView','',''),(1541,'priv','fr','assetlib-opportunityLibView','',''),(1541,'priv','zh-cn','assetlib-opportunityLibView','',''),(1541,'priv','zh-tw','assetlib-opportunityLibView','',''),(1542,'priv','de','assetlib-opportunity','',''),(1542,'priv','en','assetlib-opportunity','',''),(1542,'priv','fr','assetlib-opportunity','',''),(1542,'priv','zh-cn','assetlib-opportunity','',''),(1542,'priv','zh-tw','assetlib-opportunity','',''),(1543,'priv','de','assetlib-importOpportunity','',''),(1543,'priv','en','assetlib-importOpportunity','',''),(1543,'priv','fr','assetlib-importOpportunity','',''),(1543,'priv','zh-cn','assetlib-importOpportunity','',''),(1543,'priv','zh-tw','assetlib-importOpportunity','',''),(1544,'priv','de','assetlib-assignToOpportunity','',''),(1544,'priv','en','assetlib-assignToOpportunity','',''),(1544,'priv','fr','assetlib-assignToOpportunity','',''),(1544,'priv','zh-cn','assetlib-assignToOpportunity','',''),(1544,'priv','zh-tw','assetlib-assignToOpportunity','',''),(1545,'priv','de','assetlib-batchAssignToOpportunity','',''),(1545,'priv','en','assetlib-batchAssignToOpportunity','',''),(1545,'priv','fr','assetlib-batchAssignToOpportunity','',''),(1545,'priv','zh-cn','assetlib-batchAssignToOpportunity','',''),(1545,'priv','zh-tw','assetlib-batchAssignToOpportunity','',''),(1546,'priv','de','assetlib-approveOpportunity','',''),(1546,'priv','en','assetlib-approveOpportunity','',''),(1546,'priv','fr','assetlib-approveOpportunity','',''),(1546,'priv','zh-cn','assetlib-approveOpportunity','',''),(1546,'priv','zh-tw','assetlib-approveOpportunity','',''),(1547,'priv','de','assetlib-batchApproveOpportunity','',''),(1547,'priv','en','assetlib-batchApproveOpportunity','',''),(1547,'priv','fr','assetlib-batchApproveOpportunity','',''),(1547,'priv','zh-cn','assetlib-batchApproveOpportunity','',''),(1547,'priv','zh-tw','assetlib-batchApproveOpportunity','',''),(1548,'priv','de','assetlib-editOpportunity','',''),(1548,'priv','en','assetlib-editOpportunity','',''),(1548,'priv','fr','assetlib-editOpportunity','',''),(1548,'priv','zh-cn','assetlib-editOpportunity','',''),(1548,'priv','zh-tw','assetlib-editOpportunity','',''),(1549,'priv','de','assetlib-removeOpportunity','',''),(1549,'priv','en','assetlib-removeOpportunity','',''),(1549,'priv','fr','assetlib-removeOpportunity','',''),(1549,'priv','zh-cn','assetlib-removeOpportunity','',''),(1549,'priv','zh-tw','assetlib-removeOpportunity','',''),(1550,'priv','de','assetlib-batchRemoveOpportunity','',''),(1550,'priv','en','assetlib-batchRemoveOpportunity','',''),(1550,'priv','fr','assetlib-batchRemoveOpportunity','',''),(1550,'priv','zh-cn','assetlib-batchRemoveOpportunity','',''),(1550,'priv','zh-tw','assetlib-batchRemoveOpportunity','',''),(1551,'priv','de','assetlib-opportunityView','',''),(1551,'priv','en','assetlib-opportunityView','',''),(1551,'priv','fr','assetlib-opportunityView','',''),(1551,'priv','zh-cn','assetlib-opportunityView','',''),(1551,'priv','zh-tw','assetlib-opportunityView','',''),(1552,'priv','de','assetlib-practiceLib','',''),(1552,'priv','en','assetlib-practiceLib','',''),(1552,'priv','fr','assetlib-practiceLib','',''),(1552,'priv','zh-cn','assetlib-practiceLib','',''),(1552,'priv','zh-tw','assetlib-practiceLib','',''),(1553,'priv','de','assetlib-createPracticeLib','',''),(1553,'priv','en','assetlib-createPracticeLib','',''),(1553,'priv','fr','assetlib-createPracticeLib','',''),(1553,'priv','zh-cn','assetlib-createPracticeLib','',''),(1553,'priv','zh-tw','assetlib-createPracticeLib','',''),(1554,'priv','de','assetlib-editPracticeLib','',''),(1554,'priv','en','assetlib-editPracticeLib','',''),(1554,'priv','fr','assetlib-editPracticeLib','',''),(1554,'priv','zh-cn','assetlib-editPracticeLib','',''),(1554,'priv','zh-tw','assetlib-editPracticeLib','',''),(1555,'priv','de','assetlib-deletePracticeLib','',''),(1555,'priv','en','assetlib-deletePracticeLib','',''),(1555,'priv','fr','assetlib-deletePracticeLib','',''),(1555,'priv','zh-cn','assetlib-deletePracticeLib','',''),(1555,'priv','zh-tw','assetlib-deletePracticeLib','',''),(1556,'priv','de','assetlib-practiceLibView','',''),(1556,'priv','en','assetlib-practiceLibView','',''),(1556,'priv','fr','assetlib-practiceLibView','',''),(1556,'priv','zh-cn','assetlib-practiceLibView','',''),(1556,'priv','zh-tw','assetlib-practiceLibView','',''),(1557,'priv','de','assetlib-practice','',''),(1557,'priv','en','assetlib-practice','',''),(1557,'priv','fr','assetlib-practice','',''),(1557,'priv','zh-cn','assetlib-practice','',''),(1557,'priv','zh-tw','assetlib-practice','',''),(1558,'priv','de','assetlib-importPractice','',''),(1558,'priv','en','assetlib-importPractice','',''),(1558,'priv','fr','assetlib-importPractice','',''),(1558,'priv','zh-cn','assetlib-importPractice','',''),(1558,'priv','zh-tw','assetlib-importPractice','',''),(1559,'priv','de','assetlib-assignToPractice','',''),(1559,'priv','en','assetlib-assignToPractice','',''),(1559,'priv','fr','assetlib-assignToPractice','',''),(1559,'priv','zh-cn','assetlib-assignToPractice','',''),(1559,'priv','zh-tw','assetlib-assignToPractice','',''),(1560,'priv','de','assetlib-batchAssignToPractice','',''),(1560,'priv','en','assetlib-batchAssignToPractice','',''),(1560,'priv','fr','assetlib-batchAssignToPractice','',''),(1560,'priv','zh-cn','assetlib-batchAssignToPractice','',''),(1560,'priv','zh-tw','assetlib-batchAssignToPractice','',''),(1561,'priv','de','assetlib-approvePractice','',''),(1561,'priv','en','assetlib-approvePractice','',''),(1561,'priv','fr','assetlib-approvePractice','',''),(1561,'priv','zh-cn','assetlib-approvePractice','',''),(1561,'priv','zh-tw','assetlib-approvePractice','',''),(1562,'priv','de','assetlib-batchApprovePractice','',''),(1562,'priv','en','assetlib-batchApprovePractice','',''),(1562,'priv','fr','assetlib-batchApprovePractice','',''),(1562,'priv','zh-cn','assetlib-batchApprovePractice','',''),(1562,'priv','zh-tw','assetlib-batchApprovePractice','',''),(1563,'priv','de','assetlib-editPractice','',''),(1563,'priv','en','assetlib-editPractice','',''),(1563,'priv','fr','assetlib-editPractice','',''),(1563,'priv','zh-cn','assetlib-editPractice','',''),(1563,'priv','zh-tw','assetlib-editPractice','',''),(1564,'priv','de','assetlib-removePractice','',''),(1564,'priv','en','assetlib-removePractice','',''),(1564,'priv','fr','assetlib-removePractice','',''),(1564,'priv','zh-cn','assetlib-removePractice','',''),(1564,'priv','zh-tw','assetlib-removePractice','',''),(1565,'priv','de','assetlib-batchRemovePractice','',''),(1565,'priv','en','assetlib-batchRemovePractice','',''),(1565,'priv','fr','assetlib-batchRemovePractice','',''),(1565,'priv','zh-cn','assetlib-batchRemovePractice','',''),(1565,'priv','zh-tw','assetlib-batchRemovePractice','',''),(1566,'priv','de','assetlib-practiceView','',''),(1566,'priv','en','assetlib-practiceView','',''),(1566,'priv','fr','assetlib-practiceView','',''),(1566,'priv','zh-cn','assetlib-practiceView','',''),(1566,'priv','zh-tw','assetlib-practiceView','',''),(1567,'priv','de','assetlib-componentLib','',''),(1567,'priv','en','assetlib-componentLib','',''),(1567,'priv','fr','assetlib-componentLib','',''),(1567,'priv','zh-cn','assetlib-componentLib','',''),(1567,'priv','zh-tw','assetlib-componentLib','',''),(1568,'priv','de','assetlib-createComponentLib','',''),(1568,'priv','en','assetlib-createComponentLib','',''),(1568,'priv','fr','assetlib-createComponentLib','',''),(1568,'priv','zh-cn','assetlib-createComponentLib','',''),(1568,'priv','zh-tw','assetlib-createComponentLib','',''),(1569,'priv','de','assetlib-editComponentLib','',''),(1569,'priv','en','assetlib-editComponentLib','',''),(1569,'priv','fr','assetlib-editComponentLib','',''),(1569,'priv','zh-cn','assetlib-editComponentLib','',''),(1569,'priv','zh-tw','assetlib-editComponentLib','',''),(1570,'priv','de','assetlib-deleteComponentLib','',''),(1570,'priv','en','assetlib-deleteComponentLib','',''),(1570,'priv','fr','assetlib-deleteComponentLib','',''),(1570,'priv','zh-cn','assetlib-deleteComponentLib','',''),(1570,'priv','zh-tw','assetlib-deleteComponentLib','',''),(1571,'priv','de','assetlib-componentLibView','',''),(1571,'priv','en','assetlib-componentLibView','',''),(1571,'priv','fr','assetlib-componentLibView','',''),(1571,'priv','zh-cn','assetlib-componentLibView','',''),(1571,'priv','zh-tw','assetlib-componentLibView','',''),(1572,'priv','de','assetlib-component','',''),(1572,'priv','en','assetlib-component','',''),(1572,'priv','fr','assetlib-component','',''),(1572,'priv','zh-cn','assetlib-component','',''),(1572,'priv','zh-tw','assetlib-component','',''),(1573,'priv','de','assetlib-importComponent','',''),(1573,'priv','en','assetlib-importComponent','',''),(1573,'priv','fr','assetlib-importComponent','',''),(1573,'priv','zh-cn','assetlib-importComponent','',''),(1573,'priv','zh-tw','assetlib-importComponent','',''),(1574,'priv','de','assetlib-assignToComponent','',''),(1574,'priv','en','assetlib-assignToComponent','',''),(1574,'priv','fr','assetlib-assignToComponent','',''),(1574,'priv','zh-cn','assetlib-assignToComponent','',''),(1574,'priv','zh-tw','assetlib-assignToComponent','',''),(1575,'priv','de','assetlib-batchAssignToComponent','',''),(1575,'priv','en','assetlib-batchAssignToComponent','',''),(1575,'priv','fr','assetlib-batchAssignToComponent','',''),(1575,'priv','zh-cn','assetlib-batchAssignToComponent','',''),(1575,'priv','zh-tw','assetlib-batchAssignToComponent','',''),(1576,'priv','de','assetlib-approveComponent','',''),(1576,'priv','en','assetlib-approveComponent','',''),(1576,'priv','fr','assetlib-approveComponent','',''),(1576,'priv','zh-cn','assetlib-approveComponent','',''),(1576,'priv','zh-tw','assetlib-approveComponent','',''),(1577,'priv','de','assetlib-batchApproveComponent','',''),(1577,'priv','en','assetlib-batchApproveComponent','',''),(1577,'priv','fr','assetlib-batchApproveComponent','',''),(1577,'priv','zh-cn','assetlib-batchApproveComponent','',''),(1577,'priv','zh-tw','assetlib-batchApproveComponent','',''),(1578,'priv','de','assetlib-editComponent','',''),(1578,'priv','en','assetlib-editComponent','',''),(1578,'priv','fr','assetlib-editComponent','',''),(1578,'priv','zh-cn','assetlib-editComponent','',''),(1578,'priv','zh-tw','assetlib-editComponent','',''),(1579,'priv','de','assetlib-removeComponent','',''),(1579,'priv','en','assetlib-removeComponent','',''),(1579,'priv','fr','assetlib-removeComponent','',''),(1579,'priv','zh-cn','assetlib-removeComponent','',''),(1579,'priv','zh-tw','assetlib-removeComponent','',''),(1580,'priv','de','assetlib-batchRemoveComponent','',''),(1580,'priv','en','assetlib-batchRemoveComponent','',''),(1580,'priv','fr','assetlib-batchRemoveComponent','',''),(1580,'priv','zh-cn','assetlib-batchRemoveComponent','',''),(1580,'priv','zh-tw','assetlib-batchRemoveComponent','',''),(1581,'priv','de','assetlib-componentView','',''),(1581,'priv','en','assetlib-componentView','',''),(1581,'priv','fr','assetlib-componentView','',''),(1581,'priv','zh-cn','assetlib-componentView','',''),(1581,'priv','zh-tw','assetlib-componentView','',''),(1583,'priv','de','assetlib-storylibSort','',''),(1583,'priv','en','assetlib-storylibSort','',''),(1583,'priv','fr','assetlib-storylibSort','',''),(1583,'priv','zh-cn','assetlib-storylibSort','',''),(1583,'priv','zh-tw','assetlib-storylibSort','',''),(1584,'priv','de','assetlib-caselibSort','',''),(1584,'priv','en','assetlib-caselibSort','',''),(1584,'priv','fr','assetlib-caselibSort','',''),(1584,'priv','zh-cn','assetlib-caselibSort','',''),(1584,'priv','zh-tw','assetlib-caselibSort','',''),(1585,'priv','de','assetlib-issuelibSort','',''),(1585,'priv','en','assetlib-issuelibSort','',''),(1585,'priv','fr','assetlib-issuelibSort','',''),(1585,'priv','zh-cn','assetlib-issuelibSort','',''),(1585,'priv','zh-tw','assetlib-issuelibSort','',''),(1586,'priv','de','assetlib-risklibSort','',''),(1586,'priv','en','assetlib-risklibSort','',''),(1586,'priv','fr','assetlib-risklibSort','',''),(1586,'priv','zh-cn','assetlib-risklibSort','',''),(1586,'priv','zh-tw','assetlib-risklibSort','',''),(1587,'priv','de','assetlib-opportunitylibSort','',''),(1587,'priv','en','assetlib-opportunitylibSort','',''),(1587,'priv','fr','assetlib-opportunitylibSort','',''),(1587,'priv','zh-cn','assetlib-opportunitylibSort','',''),(1587,'priv','zh-tw','assetlib-opportunitylibSort','',''),(1588,'priv','de','assetlib-practicelibSort','',''),(1588,'priv','en','assetlib-practicelibSort','',''),(1588,'priv','fr','assetlib-practicelibSort','',''),(1588,'priv','zh-cn','assetlib-practicelibSort','',''),(1588,'priv','zh-tw','assetlib-practicelibSort','',''),(1589,'priv','de','assetlib-componentlibSort','',''),(1589,'priv','en','assetlib-componentlibSort','',''),(1589,'priv','fr','assetlib-componentlibSort','',''),(1589,'priv','zh-cn','assetlib-componentlibSort','',''),(1589,'priv','zh-tw','assetlib-componentlibSort','',''),(1590,'priv','de','setting-xuanxuan','',''),(1590,'priv','en','setting-xuanxuan','',''),(1590,'priv','fr','setting-xuanxuan','',''),(1590,'priv','zh-cn','setting-xuanxuan','',''),(1590,'priv','zh-tw','setting-xuanxuan','',''),(1596,'priv','de','im-downloadXXD','',''),(1596,'priv','en','im-downloadXXD','',''),(1596,'priv','fr','im-downloadXXD','',''),(1596,'priv','zh-cn','im-downloadXXD','',''),(1596,'priv','zh-tw','im-downloadXXD','',''),(1597,'priv','de','im-debug','',''),(1597,'priv','en','im-debug','',''),(1597,'priv','fr','im-debug','',''),(1597,'priv','zh-cn','im-debug','',''),(1597,'priv','zh-tw','im-debug','',''),(1598,'priv','de','client-browse','',''),(1598,'priv','en','client-browse','',''),(1598,'priv','fr','client-browse','',''),(1598,'priv','zh-cn','client-browse','',''),(1598,'priv','zh-tw','client-browse','',''),(1599,'priv','de','client-create','',''),(1599,'priv','en','client-create','',''),(1599,'priv','fr','client-create','',''),(1599,'priv','zh-cn','client-create','',''),(1599,'priv','zh-tw','client-create','',''),(1600,'priv','de','client-edit','',''),(1600,'priv','en','client-edit','',''),(1600,'priv','fr','client-edit','',''),(1600,'priv','zh-cn','client-edit','',''),(1600,'priv','zh-tw','client-edit','',''),(1601,'priv','de','client-delete','',''),(1601,'priv','en','client-delete','',''),(1601,'priv','fr','client-delete','',''),(1601,'priv','zh-cn','client-delete','',''),(1601,'priv','zh-tw','client-delete','',''),(1615,'priv','de','screen-create','',''),(1615,'priv','en','screen-create','',''),(1615,'priv','fr','screen-create','',''),(1615,'priv','zh-cn','screen-create','',''),(1615,'priv','zh-tw','screen-create','',''),(1616,'priv','de','screen-editScreen','',''),(1616,'priv','en','screen-editScreen','',''),(1616,'priv','fr','screen-editScreen','',''),(1616,'priv','zh-cn','screen-editScreen','',''),(1616,'priv','zh-tw','screen-editScreen','',''),(1617,'priv','de','screen-designScreen','',''),(1617,'priv','en','screen-designScreen','',''),(1617,'priv','fr','screen-designScreen','',''),(1617,'priv','zh-cn','screen-designScreen','',''),(1617,'priv','zh-tw','screen-designScreen','',''),(1618,'priv','de','screen-publishScreen','',''),(1618,'priv','en','screen-publishScreen','',''),(1618,'priv','fr','screen-publishScreen','',''),(1618,'priv','zh-cn','screen-publishScreen','',''),(1618,'priv','zh-tw','screen-publishScreen','',''),(1619,'priv','de','screen-deleteScreen','',''),(1619,'priv','en','screen-deleteScreen','',''),(1619,'priv','fr','screen-deleteScreen','',''),(1619,'priv','zh-cn','screen-deleteScreen','',''),(1619,'priv','zh-tw','screen-deleteScreen','',''),(1620,'priv','de','screen-annualData','',''),(1620,'priv','en','screen-annualData','',''),(1620,'priv','fr','screen-annualData','',''),(1620,'priv','zh-cn','screen-annualData','',''),(1620,'priv','zh-tw','screen-annualData','',''),(1621,'priv','de','screen-allAnnualData','',''),(1621,'priv','en','screen-allAnnualData','',''),(1621,'priv','fr','screen-allAnnualData','',''),(1621,'priv','zh-cn','screen-allAnnualData','',''),(1621,'priv','zh-tw','screen-allAnnualData','',''),(1622,'priv','de','pivot-browseAction','',''),(1622,'priv','en','pivot-browseAction','',''),(1622,'priv','fr','pivot-browseAction','',''),(1622,'priv','zh-cn','pivot-browseAction','',''),(1622,'priv','zh-tw','pivot-browseAction','',''),(1623,'priv','de','pivot-preview','',''),(1623,'priv','en','pivot-preview','',''),(1623,'priv','fr','pivot-preview','',''),(1623,'priv','zh-cn','pivot-preview','',''),(1623,'priv','zh-tw','pivot-preview','',''),(1624,'priv','de','pivot-create','',''),(1624,'priv','en','pivot-create','',''),(1624,'priv','fr','pivot-create','',''),(1624,'priv','zh-cn','pivot-create','',''),(1624,'priv','zh-tw','pivot-create','',''),(1625,'priv','de','pivot-edit','',''),(1625,'priv','en','pivot-edit','',''),(1625,'priv','fr','pivot-edit','',''),(1625,'priv','zh-cn','pivot-edit','',''),(1625,'priv','zh-tw','pivot-edit','',''),(1626,'priv','de','pivot-design','',''),(1626,'priv','en','pivot-design','',''),(1626,'priv','fr','pivot-design','',''),(1626,'priv','zh-cn','pivot-design','',''),(1626,'priv','zh-tw','pivot-design','',''),(1627,'priv','de','pivot-delete','',''),(1627,'priv','en','pivot-delete','',''),(1627,'priv','fr','pivot-delete','',''),(1627,'priv','zh-cn','pivot-delete','',''),(1627,'priv','zh-tw','pivot-delete','',''),(1628,'priv','de','pivot-export','',''),(1628,'priv','en','pivot-export','',''),(1628,'priv','fr','pivot-export','',''),(1628,'priv','zh-cn','pivot-export','',''),(1628,'priv','zh-tw','pivot-export','',''),(1629,'priv','de','pivot-showProduct','',''),(1629,'priv','en','pivot-showProduct','',''),(1629,'priv','fr','pivot-showProduct','',''),(1629,'priv','zh-cn','pivot-showProduct','',''),(1629,'priv','zh-tw','pivot-showProduct','',''),(1630,'priv','de','pivot-showProject','',''),(1630,'priv','en','pivot-showProject','',''),(1630,'priv','fr','pivot-showProject','',''),(1630,'priv','zh-cn','pivot-showProject','',''),(1630,'priv','zh-tw','pivot-showProject','',''),(1631,'priv','de','pivot-projectDeviation','',''),(1631,'priv','en','pivot-projectDeviation','',''),(1631,'priv','fr','pivot-projectDeviation','',''),(1631,'priv','zh-cn','pivot-projectDeviation','',''),(1631,'priv','zh-tw','pivot-projectDeviation','',''),(1632,'priv','de','pivot-productSummary','',''),(1632,'priv','en','pivot-productSummary','',''),(1632,'priv','fr','pivot-productSummary','',''),(1632,'priv','zh-cn','pivot-productSummary','',''),(1632,'priv','zh-tw','pivot-productSummary','',''),(1633,'priv','de','pivot-bugCreate','',''),(1633,'priv','en','pivot-bugCreate','',''),(1633,'priv','fr','pivot-bugCreate','',''),(1633,'priv','zh-cn','pivot-bugCreate','',''),(1633,'priv','zh-tw','pivot-bugCreate','',''),(1634,'priv','de','pivot-bugAssign','',''),(1634,'priv','en','pivot-bugAssign','',''),(1634,'priv','fr','pivot-bugAssign','',''),(1634,'priv','zh-cn','pivot-bugAssign','',''),(1634,'priv','zh-tw','pivot-bugAssign','',''),(1635,'priv','de','pivot-workload','',''),(1635,'priv','en','pivot-workload','',''),(1635,'priv','fr','pivot-workload','',''),(1635,'priv','zh-cn','pivot-workload','',''),(1635,'priv','zh-tw','pivot-workload','',''),(1636,'priv','de','pivot-casesrun','',''),(1636,'priv','en','pivot-casesrun','',''),(1636,'priv','fr','pivot-casesrun','',''),(1636,'priv','zh-cn','pivot-casesrun','',''),(1636,'priv','zh-tw','pivot-casesrun','',''),(1637,'priv','de','pivot-storyLinkedBug','',''),(1637,'priv','en','pivot-storyLinkedBug','',''),(1637,'priv','fr','pivot-storyLinkedBug','',''),(1637,'priv','zh-cn','pivot-storyLinkedBug','',''),(1637,'priv','zh-tw','pivot-storyLinkedBug','',''),(1638,'priv','de','pivot-testcase','',''),(1638,'priv','en','pivot-testcase','',''),(1638,'priv','fr','pivot-testcase','',''),(1638,'priv','zh-cn','pivot-testcase','',''),(1638,'priv','zh-tw','pivot-testcase','',''),(1639,'priv','de','pivot-build','',''),(1639,'priv','en','pivot-build','',''),(1639,'priv','fr','pivot-build','',''),(1639,'priv','zh-cn','pivot-build','',''),(1639,'priv','zh-tw','pivot-build','',''),(1640,'priv','de','pivot-workSummary','',''),(1640,'priv','en','pivot-workSummary','',''),(1640,'priv','fr','pivot-workSummary','',''),(1640,'priv','zh-cn','pivot-workSummary','',''),(1640,'priv','zh-tw','pivot-workSummary','',''),(1641,'priv','de','pivot-roadmap','',''),(1641,'priv','en','pivot-roadmap','',''),(1641,'priv','fr','pivot-roadmap','',''),(1641,'priv','zh-cn','pivot-roadmap','',''),(1641,'priv','zh-tw','pivot-roadmap','',''),(1642,'priv','de','pivot-productInvest','',''),(1642,'priv','en','pivot-productInvest','',''),(1642,'priv','fr','pivot-productInvest','',''),(1642,'priv','zh-cn','pivot-productInvest','',''),(1642,'priv','zh-tw','pivot-productInvest','',''),(1643,'priv','de','pivot-bugSummary','',''),(1643,'priv','en','pivot-bugSummary','',''),(1643,'priv','fr','pivot-bugSummary','',''),(1643,'priv','zh-cn','pivot-bugSummary','',''),(1643,'priv','zh-tw','pivot-bugSummary','',''),(1644,'priv','de','pivot-bugAssignSummary','',''),(1644,'priv','en','pivot-bugAssignSummary','',''),(1644,'priv','fr','pivot-bugAssignSummary','',''),(1644,'priv','zh-cn','pivot-bugAssignSummary','',''),(1644,'priv','zh-tw','pivot-bugAssignSummary','',''),(1645,'priv','de','pivot-workAssignSummary','',''),(1645,'priv','en','pivot-workAssignSummary','',''),(1645,'priv','fr','pivot-workAssignSummary','',''),(1645,'priv','zh-cn','pivot-workAssignSummary','',''),(1645,'priv','zh-tw','pivot-workAssignSummary','',''),(1646,'priv','de','chart-preview','',''),(1646,'priv','en','chart-preview','',''),(1646,'priv','fr','chart-preview','',''),(1646,'priv','zh-cn','chart-preview','',''),(1646,'priv','zh-tw','chart-preview','',''),(1648,'priv','de','dataview-browse','',''),(1648,'priv','en','dataview-browse','',''),(1648,'priv','fr','dataview-browse','',''),(1648,'priv','zh-cn','dataview-browse','',''),(1648,'priv','zh-tw','dataview-browse','',''),(1649,'priv','de','dataview-create','',''),(1649,'priv','en','dataview-create','',''),(1649,'priv','fr','dataview-create','',''),(1649,'priv','zh-cn','dataview-create','',''),(1649,'priv','zh-tw','dataview-create','',''),(1650,'priv','de','dataview-edit','',''),(1650,'priv','en','dataview-edit','',''),(1650,'priv','fr','dataview-edit','',''),(1650,'priv','zh-cn','dataview-edit','',''),(1650,'priv','zh-tw','dataview-edit','',''),(1651,'priv','de','dataview-design','',''),(1651,'priv','en','dataview-design','',''),(1651,'priv','fr','dataview-design','',''),(1651,'priv','zh-cn','dataview-design','',''),(1651,'priv','zh-tw','dataview-design','',''),(1652,'priv','de','dataview-delete','',''),(1652,'priv','en','dataview-delete','',''),(1652,'priv','fr','dataview-delete','',''),(1652,'priv','zh-cn','dataview-delete','',''),(1652,'priv','zh-tw','dataview-delete','',''),(1653,'priv','de','dimension-browse','',''),(1653,'priv','en','dimension-browse','',''),(1653,'priv','fr','dimension-browse','',''),(1653,'priv','zh-cn','dimension-browse','',''),(1653,'priv','zh-tw','dimension-browse','',''),(1654,'priv','de','dimension-create','',''),(1654,'priv','en','dimension-create','',''),(1654,'priv','fr','dimension-create','',''),(1654,'priv','zh-cn','dimension-create','',''),(1654,'priv','zh-tw','dimension-create','',''),(1655,'priv','de','dimension-edit','',''),(1655,'priv','en','dimension-edit','',''),(1655,'priv','fr','dimension-edit','',''),(1655,'priv','zh-cn','dimension-edit','',''),(1655,'priv','zh-tw','dimension-edit','',''),(1656,'priv','de','dimension-delete','',''),(1656,'priv','en','dimension-delete','',''),(1656,'priv','fr','dimension-delete','',''),(1656,'priv','zh-cn','dimension-delete','',''),(1656,'priv','zh-tw','dimension-delete','',''),(1664,'priv','de','custom-limitTaskDateAction','',''),(1664,'priv','en','custom-limitTaskDateAction','',''),(1664,'priv','fr','custom-limitTaskDateAction','',''),(1664,'priv','zh-cn','custom-limitTaskDateAction','',''),(1664,'priv','zh-tw','custom-limitTaskDateAction','',''),(1665,'priv','de','tree-browsegroup','',''),(1665,'priv','en','tree-browsegroup','',''),(1665,'priv','fr','tree-browsegroup','',''),(1665,'priv','zh-cn','tree-browsegroup','',''),(1665,'priv','zh-tw','tree-browsegroup','',''),(1673,'priv','de','testcase-createScene','',''),(1673,'priv','en','testcase-createScene','',''),(1673,'priv','fr','testcase-createScene','',''),(1673,'priv','zh-cn','testcase-createScene','',''),(1673,'priv','zh-tw','testcase-createScene','',''),(1674,'priv','de','testcase-editScene','',''),(1674,'priv','en','testcase-editScene','',''),(1674,'priv','fr','testcase-editScene','',''),(1674,'priv','zh-cn','testcase-editScene','',''),(1674,'priv','zh-tw','testcase-editScene','',''),(1675,'priv','de','testcase-deleteScene','',''),(1675,'priv','en','testcase-deleteScene','',''),(1675,'priv','fr','testcase-deleteScene','',''),(1675,'priv','zh-cn','testcase-deleteScene','',''),(1675,'priv','zh-tw','testcase-deleteScene','',''),(1676,'priv','de','testcase-changeScene','',''),(1676,'priv','en','testcase-changeScene','',''),(1676,'priv','fr','testcase-changeScene','',''),(1676,'priv','zh-cn','testcase-changeScene','',''),(1676,'priv','zh-tw','testcase-changeScene','',''),(1677,'priv','de','testcase-batchChangeScene','',''),(1677,'priv','en','testcase-batchChangeScene','',''),(1677,'priv','fr','testcase-batchChangeScene','',''),(1677,'priv','zh-cn','testcase-batchChangeScene','',''),(1677,'priv','zh-tw','testcase-batchChangeScene','',''),(1678,'priv','de','testcase-updateOrder','',''),(1678,'priv','en','testcase-updateOrder','',''),(1678,'priv','fr','testcase-updateOrder','',''),(1678,'priv','zh-cn','testcase-updateOrder','',''),(1678,'priv','zh-tw','testcase-updateOrder','',''),(1679,'priv','de','testcase-importXmind','',''),(1679,'priv','en','testcase-importXmind','',''),(1679,'priv','fr','testcase-importXmind','',''),(1679,'priv','zh-cn','testcase-importXmind','',''),(1679,'priv','zh-tw','testcase-importXmind','',''),(1682,'priv','de','testcase-exportXmind','',''),(1682,'priv','en','testcase-exportXmind','',''),(1682,'priv','fr','testcase-exportXmind','',''),(1682,'priv','zh-cn','testcase-exportXmind','',''),(1682,'priv','zh-tw','testcase-exportXmind','',''),(1694,'priv','de','repo-importAction','',''),(1694,'priv','en','repo-importAction','',''),(1694,'priv','fr','repo-importAction','',''),(1694,'priv','zh-cn','repo-importAction','',''),(1694,'priv','zh-tw','repo-importAction','',''),(1695,'priv','de','chart-export','',''),(1695,'priv','en','chart-export','',''),(1695,'priv','fr','chart-export','',''),(1695,'priv','zh-cn','chart-export','',''),(1695,'priv','zh-tw','chart-export','',''),(1701,'priv','de','doc-index','',''),(1701,'priv','en','doc-index','',''),(1701,'priv','fr','doc-index','',''),(1701,'priv','zh-cn','doc-index','',''),(1701,'priv','zh-tw','doc-index','',''),(1702,'priv','de','doc-mySpace','',''),(1702,'priv','en','doc-mySpace','',''),(1702,'priv','fr','doc-mySpace','',''),(1702,'priv','zh-cn','doc-mySpace','',''),(1702,'priv','zh-tw','doc-mySpace','',''),(1703,'priv','de','doc-myView','',''),(1703,'priv','en','doc-myView','',''),(1703,'priv','fr','doc-myView','',''),(1703,'priv','zh-cn','doc-myView','',''),(1703,'priv','zh-tw','doc-myView','',''),(1704,'priv','de','doc-myCollection','',''),(1704,'priv','en','doc-myCollection','',''),(1704,'priv','fr','doc-myCollection','',''),(1704,'priv','zh-cn','doc-myCollection','',''),(1704,'priv','zh-tw','doc-myCollection','',''),(1705,'priv','de','doc-myCreation','',''),(1705,'priv','en','doc-myCreation','',''),(1705,'priv','fr','doc-myCreation','',''),(1705,'priv','zh-cn','doc-myCreation','',''),(1705,'priv','zh-tw','doc-myCreation','',''),(1706,'priv','de','doc-createLib','',''),(1706,'priv','en','doc-createLib','',''),(1706,'priv','fr','doc-createLib','',''),(1706,'priv','zh-cn','doc-createLib','',''),(1706,'priv','zh-tw','doc-createLib','',''),(1707,'priv','de','doc-editLib','',''),(1707,'priv','en','doc-editLib','',''),(1707,'priv','fr','doc-editLib','',''),(1707,'priv','zh-cn','doc-editLib','',''),(1707,'priv','zh-tw','doc-editLib','',''),(1708,'priv','de','doc-deleteLib','',''),(1708,'priv','en','doc-deleteLib','',''),(1708,'priv','fr','doc-deleteLib','',''),(1708,'priv','zh-cn','doc-deleteLib','',''),(1708,'priv','zh-tw','doc-deleteLib','',''),(1709,'priv','de','doc-create','',''),(1709,'priv','en','doc-create','',''),(1709,'priv','fr','doc-create','',''),(1709,'priv','zh-cn','doc-create','',''),(1709,'priv','zh-tw','doc-create','',''),(1710,'priv','de','doc-edit','',''),(1710,'priv','en','doc-edit','',''),(1710,'priv','fr','doc-edit','',''),(1710,'priv','zh-cn','doc-edit','',''),(1710,'priv','zh-tw','doc-edit','',''),(1711,'priv','de','doc-view','',''),(1711,'priv','en','doc-view','',''),(1711,'priv','fr','doc-view','',''),(1711,'priv','zh-cn','doc-view','',''),(1711,'priv','zh-tw','doc-view','',''),(1712,'priv','de','doc-delete','',''),(1712,'priv','en','doc-delete','',''),(1712,'priv','fr','doc-delete','',''),(1712,'priv','zh-cn','doc-delete','',''),(1712,'priv','zh-tw','doc-delete','',''),(1713,'priv','de','doc-deleteFile','',''),(1713,'priv','en','doc-deleteFile','',''),(1713,'priv','fr','doc-deleteFile','',''),(1713,'priv','zh-cn','doc-deleteFile','',''),(1713,'priv','zh-tw','doc-deleteFile','',''),(1714,'priv','de','doc-collectAction','',''),(1714,'priv','en','doc-collectAction','',''),(1714,'priv','fr','doc-collectAction','',''),(1714,'priv','zh-cn','doc-collectAction','',''),(1714,'priv','zh-tw','doc-collectAction','',''),(1715,'priv','de','doc-productSpace','',''),(1715,'priv','en','doc-productSpace','',''),(1715,'priv','fr','doc-productSpace','',''),(1715,'priv','zh-cn','doc-productSpace','',''),(1715,'priv','zh-tw','doc-productSpace','',''),(1716,'priv','de','doc-projectSpace','',''),(1716,'priv','en','doc-projectSpace','',''),(1716,'priv','fr','doc-projectSpace','',''),(1716,'priv','zh-cn','doc-projectSpace','',''),(1716,'priv','zh-tw','doc-projectSpace','',''),(1717,'priv','de','doc-teamSpace','',''),(1717,'priv','en','doc-teamSpace','',''),(1717,'priv','fr','doc-teamSpace','',''),(1717,'priv','zh-cn','doc-teamSpace','',''),(1717,'priv','zh-tw','doc-teamSpace','',''),(1718,'priv','de','doc-showFiles','',''),(1718,'priv','en','doc-showFiles','',''),(1718,'priv','fr','doc-showFiles','',''),(1718,'priv','zh-cn','doc-showFiles','',''),(1718,'priv','zh-tw','doc-showFiles','',''),(1719,'priv','de','doc-addCatalog','',''),(1719,'priv','en','doc-addCatalog','',''),(1719,'priv','fr','doc-addCatalog','',''),(1719,'priv','zh-cn','doc-addCatalog','',''),(1719,'priv','zh-tw','doc-addCatalog','',''),(1720,'priv','de','doc-editCatalog','',''),(1720,'priv','en','doc-editCatalog','',''),(1720,'priv','fr','doc-editCatalog','',''),(1720,'priv','zh-cn','doc-editCatalog','',''),(1720,'priv','zh-tw','doc-editCatalog','',''),(1721,'priv','de','doc-sortCatalog','',''),(1721,'priv','en','doc-sortCatalog','',''),(1721,'priv','fr','doc-sortCatalog','',''),(1721,'priv','zh-cn','doc-sortCatalog','',''),(1721,'priv','zh-tw','doc-sortCatalog','',''),(1722,'priv','de','doc-deleteCatalog','',''),(1722,'priv','en','doc-deleteCatalog','',''),(1722,'priv','fr','doc-deleteCatalog','',''),(1722,'priv','zh-cn','doc-deleteCatalog','',''),(1722,'priv','zh-tw','doc-deleteCatalog','',''),(1723,'priv','de','doc-displaySetting','',''),(1723,'priv','en','doc-displaySetting','',''),(1723,'priv','fr','doc-displaySetting','',''),(1723,'priv','zh-cn','doc-displaySetting','',''),(1723,'priv','zh-tw','doc-displaySetting','',''),(1724,'priv','de','doc-diffAction','',''),(1724,'priv','en','doc-diffAction','',''),(1724,'priv','fr','doc-diffAction','',''),(1724,'priv','zh-cn','doc-diffAction','',''),(1724,'priv','zh-tw','doc-diffAction','',''),(1725,'priv','de','doc-mine2export','',''),(1725,'priv','en','doc-mine2export','',''),(1725,'priv','fr','doc-mine2export','',''),(1725,'priv','zh-cn','doc-mine2export','',''),(1725,'priv','zh-tw','doc-mine2export','',''),(1726,'priv','de','doc-product2export','',''),(1726,'priv','en','doc-product2export','',''),(1726,'priv','fr','doc-product2export','',''),(1726,'priv','zh-cn','doc-product2export','',''),(1726,'priv','zh-tw','doc-product2export','',''),(1727,'priv','de','doc-project2export','',''),(1727,'priv','en','doc-project2export','',''),(1727,'priv','fr','doc-project2export','',''),(1727,'priv','zh-cn','doc-project2export','',''),(1727,'priv','zh-tw','doc-project2export','',''),(1728,'priv','de','doc-custom2export','',''),(1728,'priv','en','doc-custom2export','',''),(1728,'priv','fr','doc-custom2export','',''),(1728,'priv','zh-cn','doc-custom2export','',''),(1728,'priv','zh-tw','doc-custom2export','',''),(1729,'priv','de','doc-execution2export','',''),(1729,'priv','en','doc-execution2export','',''),(1729,'priv','fr','doc-execution2export','',''),(1729,'priv','zh-cn','doc-execution2export','',''),(1729,'priv','zh-tw','doc-execution2export','',''),(1730,'priv','de','doc-importToPracticeLib','',''),(1730,'priv','en','doc-importToPracticeLib','',''),(1730,'priv','fr','doc-importToPracticeLib','',''),(1730,'priv','zh-cn','doc-importToPracticeLib','',''),(1730,'priv','zh-tw','doc-importToPracticeLib','',''),(1731,'priv','de','doc-importToComponentLib','',''),(1731,'priv','en','doc-importToComponentLib','',''),(1731,'priv','fr','doc-importToComponentLib','',''),(1731,'priv','zh-cn','doc-importToComponentLib','',''),(1731,'priv','zh-tw','doc-importToComponentLib','',''),(1732,'priv','de','report-show','',''),(1732,'priv','en','report-show','',''),(1732,'priv','fr','report-show','',''),(1732,'priv','zh-cn','report-show','',''),(1732,'priv','zh-tw','report-show','',''),(1733,'priv','de','report-custom','',''),(1733,'priv','en','report-custom','',''),(1733,'priv','fr','report-custom','',''),(1733,'priv','zh-cn','report-custom','',''),(1733,'priv','zh-tw','report-custom','',''),(1734,'priv','de','report-editReportAction','',''),(1734,'priv','en','report-editReportAction','',''),(1734,'priv','fr','report-editReportAction','',''),(1734,'priv','zh-cn','report-editReportAction','',''),(1734,'priv','zh-tw','report-editReportAction','',''),(1735,'priv','de','report-useReportAction','',''),(1735,'priv','en','report-useReportAction','',''),(1735,'priv','fr','report-useReportAction','',''),(1735,'priv','zh-cn','report-useReportAction','',''),(1735,'priv','zh-tw','report-useReportAction','',''),(1736,'priv','de','report-deleteReport','',''),(1736,'priv','en','report-deleteReport','',''),(1736,'priv','fr','report-deleteReport','',''),(1736,'priv','zh-cn','report-deleteReport','',''),(1736,'priv','zh-tw','report-deleteReport','',''),(1737,'priv','de','report-saveReport','',''),(1737,'priv','en','report-saveReport','',''),(1737,'priv','fr','report-saveReport','',''),(1737,'priv','zh-cn','report-saveReport','',''),(1737,'priv','zh-tw','report-saveReport','',''),(1738,'priv','de','report-crystalExport','',''),(1738,'priv','en','report-crystalExport','',''),(1738,'priv','fr','report-crystalExport','',''),(1738,'priv','zh-cn','report-crystalExport','',''),(1738,'priv','zh-tw','report-crystalExport','',''),(1739,'priv','de','report-customeredReport','',''),(1739,'priv','en','report-customeredReport','',''),(1739,'priv','fr','report-customeredReport','',''),(1739,'priv','zh-cn','report-customeredReport','',''),(1739,'priv','zh-tw','report-customeredReport','',''),(1740,'priv','de','report-viewReport','',''),(1740,'priv','en','report-viewReport','',''),(1740,'priv','fr','report-viewReport','',''),(1740,'priv','zh-cn','report-viewReport','',''),(1740,'priv','zh-tw','report-viewReport','',''),(1741,'priv','de','report-projectSummary','',''),(1741,'priv','en','report-projectSummary','',''),(1741,'priv','fr','report-projectSummary','',''),(1741,'priv','zh-cn','report-projectSummary','',''),(1741,'priv','zh-tw','report-projectSummary','',''),(1742,'priv','de','report-projectWorkload','',''),(1742,'priv','en','report-projectWorkload','',''),(1742,'priv','fr','report-projectWorkload','',''),(1742,'priv','zh-cn','report-projectWorkload','',''),(1742,'priv','zh-tw','report-projectWorkload','',''),(1743,'priv','de','report-export','',''),(1743,'priv','en','report-export','',''),(1743,'priv','fr','report-export','',''),(1743,'priv','zh-cn','report-export','',''),(1743,'priv','zh-tw','report-export','',''),(1744,'priv','de','api-index','',''),(1744,'priv','en','api-index','',''),(1744,'priv','fr','api-index','',''),(1744,'priv','zh-cn','api-index','',''),(1744,'priv','zh-tw','api-index','',''),(1745,'priv','de','api-createLib','',''),(1745,'priv','en','api-createLib','',''),(1745,'priv','fr','api-createLib','',''),(1745,'priv','zh-cn','api-createLib','',''),(1745,'priv','zh-tw','api-createLib','',''),(1746,'priv','de','api-editLib','',''),(1746,'priv','en','api-editLib','',''),(1746,'priv','fr','api-editLib','',''),(1746,'priv','zh-cn','api-editLib','',''),(1746,'priv','zh-tw','api-editLib','',''),(1747,'priv','de','api-deleteLib','',''),(1747,'priv','en','api-deleteLib','',''),(1747,'priv','fr','api-deleteLib','',''),(1747,'priv','zh-cn','api-deleteLib','',''),(1747,'priv','zh-tw','api-deleteLib','',''),(1748,'priv','de','api-createRelease','',''),(1748,'priv','en','api-createRelease','',''),(1748,'priv','fr','api-createRelease','',''),(1748,'priv','zh-cn','api-createRelease','',''),(1748,'priv','zh-tw','api-createRelease','',''),(1749,'priv','de','api-releases','',''),(1749,'priv','en','api-releases','',''),(1749,'priv','fr','api-releases','',''),(1749,'priv','zh-cn','api-releases','',''),(1749,'priv','zh-tw','api-releases','',''),(1750,'priv','de','api-deleteRelease','',''),(1750,'priv','en','api-deleteRelease','',''),(1750,'priv','fr','api-deleteRelease','',''),(1750,'priv','zh-cn','api-deleteRelease','',''),(1750,'priv','zh-tw','api-deleteRelease','',''),(1751,'priv','de','api-struct','',''),(1751,'priv','en','api-struct','',''),(1751,'priv','fr','api-struct','',''),(1751,'priv','zh-cn','api-struct','',''),(1751,'priv','zh-tw','api-struct','',''),(1752,'priv','de','api-createStruct','',''),(1752,'priv','en','api-createStruct','',''),(1752,'priv','fr','api-createStruct','',''),(1752,'priv','zh-cn','api-createStruct','',''),(1752,'priv','zh-tw','api-createStruct','',''),(1753,'priv','de','api-editStruct','',''),(1753,'priv','en','api-editStruct','',''),(1753,'priv','fr','api-editStruct','',''),(1753,'priv','zh-cn','api-editStruct','',''),(1753,'priv','zh-tw','api-editStruct','',''),(1754,'priv','de','api-deleteStruct','',''),(1754,'priv','en','api-deleteStruct','',''),(1754,'priv','fr','api-deleteStruct','',''),(1754,'priv','zh-cn','api-deleteStruct','',''),(1754,'priv','zh-tw','api-deleteStruct','',''),(1755,'priv','de','api-create','',''),(1755,'priv','en','api-create','',''),(1755,'priv','fr','api-create','',''),(1755,'priv','zh-cn','api-create','',''),(1755,'priv','zh-tw','api-create','',''),(1756,'priv','de','api-edit','',''),(1756,'priv','en','api-edit','',''),(1756,'priv','fr','api-edit','',''),(1756,'priv','zh-cn','api-edit','',''),(1756,'priv','zh-tw','api-edit','',''),(1757,'priv','de','api-delete','',''),(1757,'priv','en','api-delete','',''),(1757,'priv','fr','api-delete','',''),(1757,'priv','zh-cn','api-delete','',''),(1757,'priv','zh-tw','api-delete','',''),(1758,'priv','de','api-addCatalog','',''),(1758,'priv','en','api-addCatalog','',''),(1758,'priv','fr','api-addCatalog','',''),(1758,'priv','zh-cn','api-addCatalog','',''),(1758,'priv','zh-tw','api-addCatalog','',''),(1759,'priv','de','api-editCatalog','',''),(1759,'priv','en','api-editCatalog','',''),(1759,'priv','fr','api-editCatalog','',''),(1759,'priv','zh-cn','api-editCatalog','',''),(1759,'priv','zh-tw','api-editCatalog','',''),(1760,'priv','de','api-sortCatalog','',''),(1760,'priv','en','api-sortCatalog','',''),(1760,'priv','fr','api-sortCatalog','',''),(1760,'priv','zh-cn','api-sortCatalog','',''),(1760,'priv','zh-tw','api-sortCatalog','',''),(1761,'priv','de','api-deleteCatalog','',''),(1761,'priv','en','api-deleteCatalog','',''),(1761,'priv','fr','api-deleteCatalog','',''),(1761,'priv','zh-cn','api-deleteCatalog','',''),(1761,'priv','zh-tw','api-deleteCatalog','',''),(1762,'priv','de','api-getModel','',''),(1762,'priv','en','api-getModel','',''),(1762,'priv','fr','api-getModel','',''),(1762,'priv','zh-cn','api-getModel','',''),(1762,'priv','zh-tw','api-getModel','',''),(1763,'priv','de','api-debug','',''),(1763,'priv','en','api-debug','',''),(1763,'priv','fr','api-debug','',''),(1763,'priv','zh-cn','api-debug','',''),(1763,'priv','zh-tw','api-debug','',''),(1764,'priv','de','api-sql','',''),(1764,'priv','en','api-sql','',''),(1764,'priv','fr','api-sql','',''),(1764,'priv','zh-cn','api-sql','',''),(1764,'priv','zh-tw','api-sql','',''),(1765,'priv','de','api-export','',''),(1765,'priv','en','api-export','',''),(1765,'priv','fr','api-export','',''),(1765,'priv','zh-cn','api-export','',''),(1765,'priv','zh-tw','api-export','',''),(1766,'priv','de','doc-myEdited','',''),(1766,'priv','en','doc-myEdited','',''),(1766,'priv','fr','doc-myEdited','',''),(1766,'priv','zh-cn','doc-myEdited','',''),(1766,'priv','zh-tw','doc-myEdited','',''),(1767,'priv','de','traincourse-batchImport','',''),(1767,'priv','en','traincourse-batchImport','',''),(1767,'priv','fr','traincourse-batchImport','',''),(1767,'priv','zh-cn','traincourse-batchImport','',''),(1767,'priv','zh-tw','traincourse-batchImport','',''),(2060,'priv','de','product-activateAction','',''),(2060,'priv','en','product-activateAction','',''),(2060,'priv','fr','product-activateAction','',''),(2060,'priv','zh-cn','product-activateAction','',''),(2060,'priv','zh-tw','product-activateAction','',''),(2061,'priv','de','charter-browse','',''),(2061,'priv','en','charter-browse','',''),(2061,'priv','fr','charter-browse','',''),(2061,'priv','zh-cn','charter-browse','',''),(2061,'priv','zh-tw','charter-browse','',''),(2062,'priv','de','charter-create','',''),(2062,'priv','en','charter-create','',''),(2062,'priv','fr','charter-create','',''),(2062,'priv','zh-cn','charter-create','',''),(2062,'priv','zh-tw','charter-create','',''),(2063,'priv','de','charter-edit','',''),(2063,'priv','en','charter-edit','',''),(2063,'priv','fr','charter-edit','',''),(2063,'priv','zh-cn','charter-edit','',''),(2063,'priv','zh-tw','charter-edit','',''),(2064,'priv','de','charter-view','',''),(2064,'priv','en','charter-view','',''),(2064,'priv','fr','charter-view','',''),(2064,'priv','zh-cn','charter-view','',''),(2064,'priv','zh-tw','charter-view','',''),(2065,'priv','de','charter-delete','',''),(2065,'priv','en','charter-delete','',''),(2065,'priv','fr','charter-delete','',''),(2065,'priv','zh-cn','charter-delete','',''),(2065,'priv','zh-tw','charter-delete','',''),(2066,'priv','de','charter-review','',''),(2066,'priv','en','charter-review','',''),(2066,'priv','fr','charter-review','',''),(2066,'priv','zh-cn','charter-review','',''),(2066,'priv','zh-tw','charter-review','',''),(2067,'priv','de','charter-loadStories','',''),(2067,'priv','en','charter-loadStories','',''),(2067,'priv','fr','charter-loadStories','',''),(2067,'priv','zh-cn','charter-loadStories','',''),(2067,'priv','zh-tw','charter-loadStories','',''),(2068,'priv','de','demandpool-browse','',''),(2068,'priv','en','demandpool-browse','',''),(2068,'priv','fr','demandpool-browse','',''),(2068,'priv','zh-cn','demandpool-browse','',''),(2068,'priv','zh-tw','demandpool-browse','',''),(2069,'priv','de','demandpool-create','',''),(2069,'priv','en','demandpool-create','',''),(2069,'priv','fr','demandpool-create','',''),(2069,'priv','zh-cn','demandpool-create','',''),(2069,'priv','zh-tw','demandpool-create','',''),(2070,'priv','de','demandpool-edit','',''),(2070,'priv','en','demandpool-edit','',''),(2070,'priv','fr','demandpool-edit','',''),(2070,'priv','zh-cn','demandpool-edit','',''),(2070,'priv','zh-tw','demandpool-edit','',''),(2071,'priv','de','demandpool-view','',''),(2071,'priv','en','demandpool-view','',''),(2071,'priv','fr','demandpool-view','',''),(2071,'priv','zh-cn','demandpool-view','',''),(2071,'priv','zh-tw','demandpool-view','',''),(2072,'priv','de','demandpool-close','',''),(2072,'priv','en','demandpool-close','',''),(2072,'priv','fr','demandpool-close','',''),(2072,'priv','zh-cn','demandpool-close','',''),(2072,'priv','zh-tw','demandpool-close','',''),(2073,'priv','de','demandpool-activate','',''),(2073,'priv','en','demandpool-activate','',''),(2073,'priv','fr','demandpool-activate','',''),(2073,'priv','zh-cn','demandpool-activate','',''),(2073,'priv','zh-tw','demandpool-activate','',''),(2074,'priv','de','demandpool-delete','',''),(2074,'priv','en','demandpool-delete','',''),(2074,'priv','fr','demandpool-delete','',''),(2074,'priv','zh-cn','demandpool-delete','',''),(2074,'priv','zh-tw','demandpool-delete','',''),(2075,'priv','de','demand-browse','',''),(2075,'priv','en','demand-browse','',''),(2075,'priv','fr','demand-browse','',''),(2075,'priv','zh-cn','demand-browse','',''),(2075,'priv','zh-tw','demand-browse','',''),(2076,'priv','de','demand-create','',''),(2076,'priv','en','demand-create','',''),(2076,'priv','fr','demand-create','',''),(2076,'priv','zh-cn','demand-create','',''),(2076,'priv','zh-tw','demand-create','',''),(2077,'priv','de','demand-batchCreate','',''),(2077,'priv','en','demand-batchCreate','',''),(2077,'priv','fr','demand-batchCreate','',''),(2077,'priv','zh-cn','demand-batchCreate','',''),(2077,'priv','zh-tw','demand-batchCreate','',''),(2078,'priv','de','demand-edit','',''),(2078,'priv','en','demand-edit','',''),(2078,'priv','fr','demand-edit','',''),(2078,'priv','zh-cn','demand-edit','',''),(2078,'priv','zh-tw','demand-edit','',''),(2079,'priv','de','demand-view','',''),(2079,'priv','en','demand-view','',''),(2079,'priv','fr','demand-view','',''),(2079,'priv','zh-cn','demand-view','',''),(2079,'priv','zh-tw','demand-view','',''),(2080,'priv','de','demand-assignedTo','',''),(2080,'priv','en','demand-assignedTo','',''),(2080,'priv','fr','demand-assignedTo','',''),(2080,'priv','zh-cn','demand-assignedTo','',''),(2080,'priv','zh-tw','demand-assignedTo','',''),(2081,'priv','de','demand-change','',''),(2081,'priv','en','demand-change','',''),(2081,'priv','fr','demand-change','',''),(2081,'priv','zh-cn','demand-change','',''),(2081,'priv','zh-tw','demand-change','',''),(2082,'priv','de','demand-review','',''),(2082,'priv','en','demand-review','',''),(2082,'priv','fr','demand-review','',''),(2082,'priv','zh-cn','demand-review','',''),(2082,'priv','zh-tw','demand-review','',''),(2083,'priv','de','demand-submitReview','',''),(2083,'priv','en','demand-submitReview','',''),(2083,'priv','fr','demand-submitReview','',''),(2083,'priv','zh-cn','demand-submitReview','',''),(2083,'priv','zh-tw','demand-submitReview','',''),(2084,'priv','de','demand-recall','',''),(2084,'priv','en','demand-recall','',''),(2084,'priv','fr','demand-recall','',''),(2084,'priv','zh-cn','demand-recall','',''),(2084,'priv','zh-tw','demand-recall','',''),(2085,'priv','de','demand-track','',''),(2085,'priv','en','demand-track','',''),(2085,'priv','fr','demand-track','',''),(2085,'priv','zh-cn','demand-track','',''),(2085,'priv','zh-tw','demand-track','',''),(2086,'priv','de','demand-manageTree','',''),(2086,'priv','en','demand-manageTree','',''),(2086,'priv','fr','demand-manageTree','',''),(2086,'priv','zh-cn','demand-manageTree','',''),(2086,'priv','zh-tw','demand-manageTree','',''),(2087,'priv','de','demand-export','',''),(2087,'priv','en','demand-export','',''),(2087,'priv','fr','demand-export','',''),(2087,'priv','zh-cn','demand-export','',''),(2087,'priv','zh-tw','demand-export','',''),(2088,'priv','de','demand-exportTemplate','',''),(2088,'priv','en','demand-exportTemplate','',''),(2088,'priv','fr','demand-exportTemplate','',''),(2088,'priv','zh-cn','demand-exportTemplate','',''),(2088,'priv','zh-tw','demand-exportTemplate','',''),(2089,'priv','de','demand-import','',''),(2089,'priv','en','demand-import','',''),(2089,'priv','fr','demand-import','',''),(2089,'priv','zh-cn','demand-import','',''),(2089,'priv','zh-tw','demand-import','',''),(2090,'priv','de','demand-showImport','',''),(2090,'priv','en','demand-showImport','',''),(2090,'priv','fr','demand-showImport','',''),(2090,'priv','zh-cn','demand-showImport','',''),(2090,'priv','zh-tw','demand-showImport','',''),(2091,'priv','de','demand-delete','',''),(2091,'priv','en','demand-delete','',''),(2091,'priv','fr','demand-delete','',''),(2091,'priv','zh-cn','demand-delete','',''),(2091,'priv','zh-tw','demand-delete','',''),(2092,'priv','de','demand-close','',''),(2092,'priv','en','demand-close','',''),(2092,'priv','fr','demand-close','',''),(2092,'priv','zh-cn','demand-close','',''),(2092,'priv','zh-tw','demand-close','',''),(2093,'priv','de','demand-activate','',''),(2093,'priv','en','demand-activate','',''),(2093,'priv','fr','demand-activate','',''),(2093,'priv','zh-cn','demand-activate','',''),(2093,'priv','zh-tw','demand-activate','',''),(2094,'priv','de','demand-distribute','',''),(2094,'priv','en','demand-distribute','',''),(2094,'priv','fr','demand-distribute','',''),(2094,'priv','zh-cn','demand-distribute','',''),(2094,'priv','zh-tw','demand-distribute','',''),(2095,'priv','de','roadmap-browse','',''),(2095,'priv','en','roadmap-browse','',''),(2095,'priv','fr','roadmap-browse','',''),(2095,'priv','zh-cn','roadmap-browse','',''),(2095,'priv','zh-tw','roadmap-browse','',''),(2096,'priv','de','roadmap-view','',''),(2096,'priv','en','roadmap-view','',''),(2096,'priv','fr','roadmap-view','',''),(2096,'priv','zh-cn','roadmap-view','',''),(2096,'priv','zh-tw','roadmap-view','',''),(2097,'priv','de','roadmap-linkUR','',''),(2097,'priv','en','roadmap-linkUR','',''),(2097,'priv','fr','roadmap-linkUR','',''),(2097,'priv','zh-cn','roadmap-linkUR','',''),(2097,'priv','zh-tw','roadmap-linkUR','',''),(2098,'priv','de','roadmap-create','',''),(2098,'priv','en','roadmap-create','',''),(2098,'priv','fr','roadmap-create','',''),(2098,'priv','zh-cn','roadmap-create','',''),(2098,'priv','zh-tw','roadmap-create','',''),(2099,'priv','de','roadmap-edit','',''),(2099,'priv','en','roadmap-edit','',''),(2099,'priv','fr','roadmap-edit','',''),(2099,'priv','zh-cn','roadmap-edit','',''),(2099,'priv','zh-tw','roadmap-edit','',''),(2100,'priv','de','roadmap-close','',''),(2100,'priv','en','roadmap-close','',''),(2100,'priv','fr','roadmap-close','',''),(2100,'priv','zh-cn','roadmap-close','',''),(2100,'priv','zh-tw','roadmap-close','',''),(2101,'priv','de','roadmap-delete','',''),(2101,'priv','en','roadmap-delete','',''),(2101,'priv','fr','roadmap-delete','',''),(2101,'priv','zh-cn','roadmap-delete','',''),(2101,'priv','zh-tw','roadmap-delete','',''),(2102,'priv','de','roadmap-activate','',''),(2102,'priv','en','roadmap-activate','',''),(2102,'priv','fr','roadmap-activate','',''),(2102,'priv','zh-cn','roadmap-activate','',''),(2102,'priv','zh-tw','roadmap-activate','',''),(2103,'priv','de','roadmap-unlinkUR','',''),(2103,'priv','en','roadmap-unlinkUR','',''),(2103,'priv','fr','roadmap-unlinkUR','',''),(2103,'priv','zh-cn','roadmap-unlinkUR','',''),(2103,'priv','zh-tw','roadmap-unlinkUR','',''),(2104,'priv','de','roadmap-batchUnlinkUR','',''),(2104,'priv','en','roadmap-batchUnlinkUR','',''),(2104,'priv','fr','roadmap-batchUnlinkUR','',''),(2104,'priv','zh-cn','roadmap-batchUnlinkUR','',''),(2104,'priv','zh-tw','roadmap-batchUnlinkUR','',''),(2105,'priv','de','my-story','',''),(2105,'priv','en','my-story','',''),(2105,'priv','fr','my-story','',''),(2105,'priv','zh-cn','my-story','',''),(2105,'priv','zh-tw','my-story','',''),(2106,'priv','de','my-task','',''),(2106,'priv','en','my-task','',''),(2106,'priv','fr','my-task','',''),(2106,'priv','zh-cn','my-task','',''),(2106,'priv','zh-tw','my-task','',''),(2107,'priv','de','traincourse-cloudImport','',''),(2107,'priv','en','traincourse-cloudImport','',''),(2107,'priv','fr','traincourse-cloudImport','',''),(2107,'priv','zh-cn','traincourse-cloudImport','',''),(2107,'priv','zh-tw','traincourse-cloudImport','',''),(2108,'priv','de','dataview-export','',''),(2108,'priv','en','dataview-export','',''),(2108,'priv','fr','dataview-export','',''),(2108,'priv','zh-cn','dataview-export','',''),(2108,'priv','zh-tw','dataview-export','',''),(2109,'priv','de','demand-export','',''),(2109,'priv','en','demand-export','',''),(2109,'priv','fr','demand-export','',''),(2109,'priv','zh-cn','demand-export','',''),(2109,'priv','zh-tw','demand-export','',''),(2110,'priv','de','demand-exportTemplate','',''),(2110,'priv','en','demand-exportTemplate','',''),(2110,'priv','fr','demand-exportTemplate','',''),(2110,'priv','zh-cn','demand-exportTemplate','',''),(2110,'priv','zh-tw','demand-exportTemplate','',''),(2111,'priv','de','demand-import','',''),(2111,'priv','en','demand-import','',''),(2111,'priv','fr','demand-import','',''),(2111,'priv','zh-cn','demand-import','',''),(2111,'priv','zh-tw','demand-import','',''),(2112,'priv','de','requirement-batchChangeRoadmap','',''),(2112,'priv','en','requirement-batchChangeRoadmap','',''),(2112,'priv','fr','requirement-batchChangeRoadmap','',''),(2112,'priv','zh-cn','requirement-batchChangeRoadmap','',''),(2112,'priv','zh-tw','requirement-batchChangeRoadmap','',''),(2113,'priv','de','charter-close','',''),(2113,'priv','en','charter-close','',''),(2113,'priv','fr','charter-close','',''),(2113,'priv','zh-cn','charter-close','',''),(2113,'priv','zh-tw','charter-close','',''),(2114,'priv','de','charter-activate','',''),(2114,'priv','en','charter-activate','',''),(2114,'priv','fr','charter-activate','',''),(2114,'priv','zh-cn','charter-activate','',''),(2114,'priv','zh-tw','charter-activate','',''),(2115,'priv','de','requirement-relation','',''),(2115,'priv','en','requirement-relation','',''),(2115,'priv','fr','requirement-relation','',''),(2115,'priv','zh-cn','requirement-relation','',''),(2115,'priv','zh-tw','requirement-relation','',''),(2116,'priv','de','file-previewFile','',''),(2116,'priv','en','file-previewFile','',''),(2116,'priv','fr','file-previewFile','',''),(2116,'priv','zh-cn','file-previewFile','',''),(2116,'priv','zh-tw','file-previewFile','',''),(651, 'manager', 'zh-cn', '', 'AI', ''),(652, 'manager', 'zh-cn', '', '执行提词', ''),(653, 'manager', 'zh-cn', '', '语言模型管理', ''),(654, 'manager', 'zh-cn', '', '浏览提词', ''),(655, 'manager', 'zh-cn', '', '维护和设计提词', ''),(656, 'manager', 'zh-cn', '', '提词上下架', ''),(657, 'manager', 'zh-cn', '', '删除提词', ''),(651, 'manager', 'zh-tw', '', 'AI', ''),(652, 'manager', 'zh-tw', '', '執行提詞', ''),(653, 'manager', 'zh-tw', '', '語言模型管理', ''),(654, 'manager', 'zh-tw', '', '瀏覽提詞', ''),(655, 'manager', 'zh-tw', '', '維護和設計提詞', ''),(656, 'manager', 'zh-tw', '', '提詞上下架', ''),(657, 'manager', 'zh-tw', '', '刪除提詞', ''),(651, 'manager', 'en', '', 'AI', ''),(652, 'manager', 'en', '', 'Execute Prompts', ''),(653, 'manager', 'en', '', 'Manage Models', ''),(654, 'manager', 'en', '', 'Browse Prompts', ''),(655, 'manager', 'en', '', 'Manage and Design Prompts', ''),(656, 'manager', 'en', '', 'Publish and Unpublish Prompts', ''),(657, 'manager', 'en', '', 'Delete Prompts', ''),(651, 'manager', 'de', '', 'AI', ''),(652, 'manager', 'de', '', 'Execute Prompts', ''),(653, 'manager', 'de', '', 'Manage Models', ''),(654, 'manager', 'de', '', 'Browse Prompts', ''),(655, 'manager', 'de', '', 'Manage and Design Prompts', ''),(656, 'manager', 'de', '', 'Publish and Unpublish Prompts', ''),(657, 'manager', 'de', '', 'Delete Prompts', ''),(651, 'manager', 'fr', '', 'AI', ''),(652, 'manager', 'fr', '', 'Execute Prompts', ''),(653, 'manager', 'fr', '', 'Manage Models', ''),(654, 'manager', 'fr', '', 'Browse Prompts', ''),(655, 'manager', 'fr', '', 'Manage and Design Prompts', ''),(656, 'manager', 'fr', '', 'Publish and Unpublish Prompts', ''),(657, 'manager', 'fr', '', 'Delete Prompts', ''),(2117, 'priv', 'zh-cn', 'ai-modelBrowse', '', ''),(2118, 'priv', 'zh-cn', 'ai-modelEdit', '', ''),(2119, 'priv', 'zh-cn', 'ai-modelTestConnection', '', ''),(2120, 'priv', 'zh-cn', 'ai-promptCreate', '', ''),(2121, 'priv', 'zh-cn', 'ai-promptEdit', '', ''),(2122, 'priv', 'zh-cn', 'ai-promptDelete', '', ''),(2123, 'priv', 'zh-cn', 'ai-promptAssignRole', '', ''),(2124, 'priv', 'zh-cn', 'ai-promptSelectDataSource', '', ''),(2125, 'priv', 'zh-cn', 'ai-promptSetPurpose', '', ''),(2126, 'priv', 'zh-cn', 'ai-promptSetTargetForm', '', ''),(2127, 'priv', 'zh-cn', 'ai-promptFinalize', '', ''),(2128, 'priv', 'zh-cn', 'ai-promptAudit', '', ''),(2129, 'priv', 'zh-cn', 'ai-promptPublish', '', ''),(2130, 'priv', 'zh-cn', 'ai-promptUnpublish', '', ''),(2131, 'priv', 'zh-cn', 'ai-promptBrowse', '', ''),(2132, 'priv', 'zh-cn', 'ai-promptView', '', ''),(2133, 'priv', 'zh-cn', 'ai-promptExecute', '', ''),(2134, 'priv', 'zh-cn', 'ai-roleTemplates', '', ''),(2135, 'priv', 'zh-cn', 'ai-promptExecutionReset', '', ''),(2117, 'priv', 'zh-tw', 'ai-modelBrowse', '', ''),(2118, 'priv', 'zh-tw', 'ai-modelEdit', '', ''),(2119, 'priv', 'zh-tw', 'ai-modelTestConnection', '', ''),(2120, 'priv', 'zh-tw', 'ai-promptCreate', '', ''),(2121, 'priv', 'zh-tw', 'ai-promptEdit', '', ''),(2122, 'priv', 'zh-tw', 'ai-promptDelete', '', ''),(2123, 'priv', 'zh-tw', 'ai-promptAssignRole', '', ''),(2124, 'priv', 'zh-tw', 'ai-promptSelectDataSource', '', ''),(2125, 'priv', 'zh-tw', 'ai-promptSetPurpose', '', ''),(2126, 'priv', 'zh-tw', 'ai-promptSetTargetForm', '', ''),(2127, 'priv', 'zh-tw', 'ai-promptFinalize', '', ''),(2128, 'priv', 'zh-tw', 'ai-promptAudit', '', ''),(2129, 'priv', 'zh-tw', 'ai-promptPublish', '', ''),(2130, 'priv', 'zh-tw', 'ai-promptUnpublish', '', ''),(2131, 'priv', 'zh-tw', 'ai-promptBrowse', '', ''),(2132, 'priv', 'zh-tw', 'ai-promptView', '', ''),(2133, 'priv', 'zh-tw', 'ai-promptExecute', '', ''),(2134, 'priv', 'zh-tw', 'ai-roleTemplates', '', ''),(2135, 'priv', 'zh-tw', 'ai-promptExecutionReset', '', ''),(2117, 'priv', 'en', 'ai-modelBrowse', '', ''),(2118, 'priv', 'en', 'ai-modelEdit', '', ''),(2119, 'priv', 'en', 'ai-modelTestConnection', '', ''),(2120, 'priv', 'en', 'ai-promptCreate', '', ''),(2121, 'priv', 'en', 'ai-promptEdit', '', ''),(2122, 'priv', 'en', 'ai-promptDelete', '', ''),(2123, 'priv', 'en', 'ai-promptAssignRole', '', ''),(2124, 'priv', 'en', 'ai-promptSelectDataSource', '', ''),(2125, 'priv', 'en', 'ai-promptSetPurpose', '', ''),(2126, 'priv', 'en', 'ai-promptSetTargetForm', '', ''),(2127, 'priv', 'en', 'ai-promptFinalize', '', ''),(2128, 'priv', 'en', 'ai-promptAudit', '', ''),(2129, 'priv', 'en', 'ai-promptPublish', '', ''),(2130, 'priv', 'en', 'ai-promptUnpublish', '', ''),(2131, 'priv', 'en', 'ai-promptBrowse', '', ''),(2132, 'priv', 'en', 'ai-promptView', '', ''),(2133, 'priv', 'en', 'ai-promptExecute', '', ''),(2134, 'priv', 'en', 'ai-roleTemplates', '', ''),(2135, 'priv', 'en', 'ai-promptExecutionReset', '', ''),(2117, 'priv', 'de', 'ai-modelBrowse', '', ''),(2118, 'priv', 'de', 'ai-modelEdit', '', ''),(2119, 'priv', 'de', 'ai-modelTestConnection', '', ''),(2120, 'priv', 'de', 'ai-promptCreate', '', ''),(2121, 'priv', 'de', 'ai-promptEdit', '', ''),(2122, 'priv', 'de', 'ai-promptDelete', '', ''),(2123, 'priv', 'de', 'ai-promptAssignRole', '', ''),(2124, 'priv', 'de', 'ai-promptSelectDataSource', '', ''),(2125, 'priv', 'de', 'ai-promptSetPurpose', '', ''),(2126, 'priv', 'de', 'ai-promptSetTargetForm', '', ''),(2127, 'priv', 'de', 'ai-promptFinalize', '', ''),(2128, 'priv', 'de', 'ai-promptAudit', '', ''),(2129, 'priv', 'de', 'ai-promptPublish', '', ''),(2130, 'priv', 'de', 'ai-promptUnpublish', '', ''),(2131, 'priv', 'de', 'ai-promptBrowse', '', ''),(2132, 'priv', 'de', 'ai-promptView', '', ''),(2133, 'priv', 'de', 'ai-promptExecute', '', ''),(2134, 'priv', 'de', 'ai-roleTemplates', '', ''),(2135, 'priv', 'de', 'ai-promptExecutionReset', '', ''),(2117, 'priv', 'fr', 'ai-modelBrowse', '', ''),(2118, 'priv', 'fr', 'ai-modelEdit', '', ''),(2119, 'priv', 'fr', 'ai-modelTestConnection', '', ''),(2120, 'priv', 'fr', 'ai-promptCreate', '', ''),(2121, 'priv', 'fr', 'ai-promptEdit', '', ''),(2122, 'priv', 'fr', 'ai-promptDelete', '', ''),(2123, 'priv', 'fr', 'ai-promptAssignRole', '', ''),(2124, 'priv', 'fr', 'ai-promptSelectDataSource', '', ''),(2125, 'priv', 'fr', 'ai-promptSetPurpose', '', ''),(2126, 'priv', 'fr', 'ai-promptSetTargetForm', '', ''),(2127, 'priv', 'fr', 'ai-promptFinalize', '', ''),(2128, 'priv', 'fr', 'ai-promptAudit', '', ''),(2129, 'priv', 'fr', 'ai-promptPublish', '', ''),(2130, 'priv', 'fr', 'ai-promptUnpublish', '', ''),(2131, 'priv', 'fr', 'ai-promptBrowse', '', ''),(2132, 'priv', 'fr', 'ai-promptView', '', ''),(2133, 'priv', 'fr', 'ai-promptExecute', '', ''),(2134, 'priv', 'fr', 'ai-roleTemplates', '', ''),(2135, 'priv', 'zh-cn', 'ai-promptExecutionReset', '', ''); +REPLACE INTO `zt_privrelation` (`priv`, `type`, `relationPriv`) VALUES ('account-browse','depend','ops-index'),('account-browse','recommend','account-create'),('account-browse','recommend','account-edit'),('account-browse','recommend','account-view'),('account-create','depend','account-browse'),('account-create','depend','ops-index'),('account-create','recommend','account-edit'),('account-delete','depend','account-browse'),('account-delete','depend','ops-index'),('account-delete','recommend','account-create'),('account-delete','recommend','account-edit'),('account-edit','depend','account-browse'),('account-edit','depend','ops-index'),('account-edit','recommend','account-create'),('account-view','depend','account-browse'),('account-view','depend','ops-index'),('account-view','recommend','account-create'),('account-view','recommend','account-edit'),('action-editComment','depend','action-comment'),('action-hideAll','depend','action-trash'),('action-hideAll','recommend','action-hideOne'),('action-hideOne','depend','action-trash'),('action-hideOne','recommend','action-hideAll'),('action-undelete','depend','action-trash'),('activity-assignTo','depend','activity-browse'),('activity-assignTo','recommend','activity-create'),('activity-assignTo','recommend','activity-edit'),('activity-batchCreate','depend','activity-browse'),('activity-batchCreate','recommend','activity-create'),('activity-create','depend','activity-browse'),('activity-create','recommend','activity-assignTo'),('activity-create','recommend','activity-batchCreate'),('activity-create','recommend','activity-delete'),('activity-create','recommend','activity-edit'),('activity-create','recommend','activity-outputList'),('activity-create','recommend','activity-updateOrder'),('activity-create','recommend','activity-view'),('activity-delete','depend','activity-browse'),('activity-delete','recommend','activity-create'),('activity-edit','depend','activity-browse'),('activity-edit','recommend','activity-assignTo'),('activity-edit','recommend','activity-batchCreate'),('activity-edit','recommend','activity-create'),('activity-edit','recommend','activity-delete'),('activity-edit','recommend','activity-outputList'),('activity-edit','recommend','activity-updateOrder'),('activity-edit','recommend','activity-view'),('activity-outputList','depend','activity-browse'),('activity-outputList','recommend','activity-create'),('activity-outputList','recommend','activity-edit'),('activity-outputList','recommend','activity-view'),('activity-updateOrder','depend','activity-browse'),('activity-updateOrder','recommend','activity-create'),('activity-updateOrder','recommend','activity-edit'),('activity-view','depend','activity-browse'),('activity-view','recommend','activity-outputList'),('admin-checkWeak','depend','admin-index'),('admin-resetPWDSetting','depend','admin-index'),('admin-safe','depend','admin-index'),('admin-sso','depend','admin-index'),('admin-sso','depend','admin-register'),('admin-tableEngine','depend','admin-index'),('api-addCatalog','depend','api-index'),('api-addCatalog','recommend','api-editCatalog'),('api-create','depend','api-index'),('api-create','recommend','api-createRelease'),('api-create','recommend','api-edit'),('api-create','recommend','api-releases'),('api-createLib','depend','api-index'),('api-createLib','recommend','api-editLib'),('api-createRelease','depend','api-index'),('api-createRelease','recommend','api-create'),('api-createRelease','recommend','api-edit'),('api-createRelease','recommend','api-releases'),('api-createStruct','depend','api-index'),('api-createStruct','recommend','api-editStruct'),('api-createStruct','recommend','api-struct'),('api-delete','depend','api-index'),('api-deleteCatalog','depend','api-index'),('api-deleteLib','depend','api-index'),('api-deleteRelease','depend','api-index'),('api-deleteStruct','depend','api-index'),('api-edit','depend','api-index'),('api-edit','recommend','api-create'),('api-edit','recommend','api-createRelease'),('api-edit','recommend','api-releases'),('api-editCatalog','depend','api-index'),('api-editCatalog','recommend','api-addCatalog'),('api-editLib','depend','api-index'),('api-editLib','recommend','api-createLib'),('api-editStruct','depend','api-index'),('api-editStruct','recommend','api-createStruct'),('api-editStruct','recommend','api-struct'),('api-export','depend','api-index'),('api-releases','depend','api-index'),('api-releases','recommend','api-create'),('api-releases','recommend','api-createRelease'),('api-releases','recommend','api-edit'),('api-sortCatalog','depend','api-index'),('api-struct','depend','api-index'),('api-struct','recommend','api-createStruct'),('api-struct','recommend','api-editStruct'),('approvalflow-create','depend','approvalflow-browse'),('approvalflow-create','recommend','approvalflow-delete'),('approvalflow-create','recommend','approvalflow-design'),('approvalflow-create','recommend','approvalflow-edit'),('approvalflow-create','recommend','approvalflow-view'),('approvalflow-createRole','depend','approvalflow-role'),('approvalflow-createRole','recommend','approvalflow-deleteRole'),('approvalflow-createRole','recommend','approvalflow-editRole'),('approvalflow-delete','depend','approvalflow-browse'),('approvalflow-delete','recommend','approvalflow-create'),('approvalflow-delete','recommend','approvalflow-design'),('approvalflow-delete','recommend','approvalflow-edit'),('approvalflow-delete','recommend','approvalflow-view'),('approvalflow-deleteRole','depend','approvalflow-role'),('approvalflow-deleteRole','recommend','approvalflow-createRole'),('approvalflow-deleteRole','recommend','approvalflow-editRole'),('approvalflow-design','depend','approvalflow-browse'),('approvalflow-design','recommend','approvalflow-create'),('approvalflow-design','recommend','approvalflow-delete'),('approvalflow-design','recommend','approvalflow-edit'),('approvalflow-design','recommend','approvalflow-view'),('approvalflow-edit','depend','approvalflow-browse'),('approvalflow-edit','recommend','approvalflow-create'),('approvalflow-edit','recommend','approvalflow-delete'),('approvalflow-edit','recommend','approvalflow-design'),('approvalflow-edit','recommend','approvalflow-view'),('approvalflow-editRole','depend','approvalflow-role'),('approvalflow-editRole','recommend','approvalflow-createRole'),('approvalflow-editRole','recommend','approvalflow-deleteRole'),('approvalflow-view','depend','approvalflow-browse'),('assetlib-approveComponent','depend','assetlib-component'),('assetlib-approveComponent','depend','assetlib-componentlib'),('assetlib-approveComponent','recommend','assetlib-batchApproveComponent'),('assetlib-approveIssue','depend','assetlib-issue'),('assetlib-approveIssue','depend','assetlib-issuelib'),('assetlib-approveIssue','recommend','assetlib-batchApproveIssue'),('assetlib-approveOpportunity','depend','assetlib-opportunity'),('assetlib-approveOpportunity','depend','assetlib-opportunitylib'),('assetlib-approveOpportunity','recommend','assetlib-batchApproveOpportunity'),('assetlib-approvePractice','depend','assetlib-practice'),('assetlib-approvePractice','depend','assetlib-practicelib'),('assetlib-approvePractice','recommend','assetlib-batchApprovePractice'),('assetlib-approveRisk','depend','assetlib-risk'),('assetlib-approveRisk','depend','assetlib-risklib'),('assetlib-approveRisk','recommend','assetlib-batchApproveRisk'),('assetlib-approveStory','depend','assetlib-story'),('assetlib-approveStory','depend','assetlib-storylib'),('assetlib-approveStory','recommend','assetlib-batchApproveStory'),('assetlib-assignToComponent','depend','assetlib-component'),('assetlib-assignToComponent','depend','assetlib-componentlib'),('assetlib-assignToComponent','recommend','assetlib-batchAssignToComponent'),('assetlib-assignToComponent','recommend','assetlib-editComponent'),('assetlib-assignToComponent','recommend','assetlib-importComponent'),('assetlib-assignToComponent','recommend','assetlib-removeComponent'),('assetlib-assignToIssue','depend','assetlib-issue'),('assetlib-assignToIssue','depend','assetlib-issuelib'),('assetlib-assignToIssue','recommend','assetlib-batchAssignToIssue'),('assetlib-assignToIssue','recommend','assetlib-editIssue'),('assetlib-assignToIssue','recommend','assetlib-importIssue'),('assetlib-assignToIssue','recommend','assetlib-removeIssue'),('assetlib-assignToOpportunity','depend','assetlib-opportunity'),('assetlib-assignToOpportunity','depend','assetlib-opportunitylib'),('assetlib-assignToOpportunity','recommend','assetlib-batchAssignToOpportunity'),('assetlib-assignToOpportunity','recommend','assetlib-editOpportunity'),('assetlib-assignToOpportunity','recommend','assetlib-importOpportunity'),('assetlib-assignToOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-assignToPractice','depend','assetlib-practice'),('assetlib-assignToPractice','depend','assetlib-practicelib'),('assetlib-assignToPractice','recommend','assetlib-batchAssignToPractice'),('assetlib-assignToPractice','recommend','assetlib-editPractice'),('assetlib-assignToPractice','recommend','assetlib-importPractice'),('assetlib-assignToPractice','recommend','assetlib-removePractice'),('assetlib-assignToRisk','depend','assetlib-risk'),('assetlib-assignToRisk','depend','assetlib-risklib'),('assetlib-assignToRisk','recommend','assetlib-batchAssignToRisk'),('assetlib-assignToRisk','recommend','assetlib-editRisk'),('assetlib-assignToRisk','recommend','assetlib-importRisk'),('assetlib-assignToRisk','recommend','assetlib-removeRisk'),('assetlib-assignToStory','depend','assetlib-story'),('assetlib-assignToStory','depend','assetlib-storylib'),('assetlib-assignToStory','recommend','assetlib-batchAssignToStory'),('assetlib-assignToStory','recommend','assetlib-editStory'),('assetlib-assignToStory','recommend','assetlib-importStory'),('assetlib-assignToStory','recommend','assetlib-removeStory'),('assetlib-batchApproveComponent','depend','assetlib-component'),('assetlib-batchApproveComponent','depend','assetlib-componentlib'),('assetlib-batchApproveComponent','recommend','assetlib-approveComponent'),('assetlib-batchApproveIssue','depend','assetlib-issue'),('assetlib-batchApproveIssue','depend','assetlib-issuelib'),('assetlib-batchApproveIssue','recommend','assetlib-approveIssue'),('assetlib-batchApproveOpportunity','depend','assetlib-opportunity'),('assetlib-batchApproveOpportunity','depend','assetlib-opportunitylib'),('assetlib-batchApproveOpportunity','recommend','assetlib-approveOpportunity'),('assetlib-batchApprovePractice','depend','assetlib-practice'),('assetlib-batchApprovePractice','depend','assetlib-practicelib'),('assetlib-batchApprovePractice','recommend','assetlib-approvePractice'),('assetlib-batchApproveRisk','depend','assetlib-risk'),('assetlib-batchApproveRisk','depend','assetlib-risklib'),('assetlib-batchApproveRisk','recommend','assetlib-approveRisk'),('assetlib-batchApproveStory','depend','assetlib-story'),('assetlib-batchApproveStory','depend','assetlib-storylib'),('assetlib-batchApproveStory','recommend','assetlib-approveStory'),('assetlib-batchAssignToComponent','depend','assetlib-component'),('assetlib-batchAssignToComponent','depend','assetlib-componentlib'),('assetlib-batchAssignToComponent','recommend','assetlib-assignToComponent'),('assetlib-batchAssignToIssue','depend','assetlib-issue'),('assetlib-batchAssignToIssue','depend','assetlib-issuelib'),('assetlib-batchAssignToIssue','recommend','assetlib-assignToIssue'),('assetlib-batchAssignToOpportunity','depend','assetlib-opportunity'),('assetlib-batchAssignToOpportunity','depend','assetlib-opportunitylib'),('assetlib-batchAssignToOpportunity','recommend','assetlib-assignToOpportunity'),('assetlib-batchAssignToPractice','depend','assetlib-practice'),('assetlib-batchAssignToPractice','depend','assetlib-practicelib'),('assetlib-batchAssignToPractice','recommend','assetlib-assignToPractice'),('assetlib-batchAssignToRisk','depend','assetlib-risk'),('assetlib-batchAssignToRisk','depend','assetlib-risklib'),('assetlib-batchAssignToRisk','recommend','assetlib-assignToRisk'),('assetlib-batchAssignToStory','depend','assetlib-story'),('assetlib-batchAssignToStory','depend','assetlib-storylib'),('assetlib-batchAssignToStory','recommend','assetlib-assignToStory'),('assetlib-batchRemoveComponent','depend','assetlib-component'),('assetlib-batchRemoveComponent','depend','assetlib-componentlib'),('assetlib-batchRemoveComponent','recommend','assetlib-removeComponent'),('assetlib-batchRemoveIssue','depend','assetlib-issue'),('assetlib-batchRemoveIssue','depend','assetlib-issuelib'),('assetlib-batchRemoveIssue','recommend','assetlib-removeIssue'),('assetlib-batchRemoveOpportunity','depend','assetlib-opportunity'),('assetlib-batchRemoveOpportunity','depend','assetlib-opportunitylib'),('assetlib-batchRemoveOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-batchRemovePractice','depend','assetlib-practice'),('assetlib-batchRemovePractice','depend','assetlib-practicelib'),('assetlib-batchRemovePractice','recommend','assetlib-removePractice'),('assetlib-batchRemoveRisk','depend','assetlib-risk'),('assetlib-batchRemoveRisk','depend','assetlib-risklib'),('assetlib-batchRemoveRisk','recommend','assetlib-removeRisk'),('assetlib-batchRemoveStory','depend','assetlib-story'),('assetlib-batchRemoveStory','depend','assetlib-storylib'),('assetlib-batchRemoveStory','recommend','assetlib-removeStory'),('assetlib-caselib','recommend','assetlib-caselibSort'),('assetlib-caselib','recommend','caselib-browse'),('assetlib-caselib','recommend','caselib-view'),('assetlib-caselibSort','depend','assetlib-caselib'),('assetlib-caselibSort','recommend','caselib-create'),('assetlib-caselibSort','recommend','caselib-edit'),('assetlib-component','depend','assetlib-componentlib'),('assetlib-component','recommend','assetlib-assignToComponent'),('assetlib-component','recommend','assetlib-editComponent'),('assetlib-component','recommend','assetlib-importComponent'),('assetlib-component','recommend','assetlib-removeComponent'),('assetlib-componentlib','recommend','assetlib-componentlibSort'),('assetlib-componentlib','recommend','assetlib-createComponentlib'),('assetlib-componentlib','recommend','assetlib-editComponentlib'),('assetlib-componentlibSort','depend','assetlib-componentlib'),('assetlib-componentlibSort','recommend','assetlib-createComponentlib'),('assetlib-componentlibSort','recommend','assetlib-editComponentlib'),('assetlib-componentLibView','depend','assetlib-componentlib'),('assetlib-componentLibView','recommend','assetlib-createComponentlib'),('assetlib-componentLibView','recommend','assetlib-editComponentlib'),('assetlib-componentView','depend','assetlib-component'),('assetlib-componentView','depend','assetlib-componentlib'),('assetlib-componentView','recommend','assetlib-editComponent'),('assetlib-createComponentlib','depend','assetlib-componentlib'),('assetlib-createComponentlib','recommend','assetlib-componentlibSort'),('assetlib-createComponentlib','recommend','assetlib-editComponentlib'),('assetlib-createIssuelib','depend','assetlib-issuelib'),('assetlib-createIssuelib','recommend','assetlib-editIssuelib'),('assetlib-createIssuelib','recommend','assetlib-issuelibSort'),('assetlib-createOpportunitylib','depend','assetlib-opportunitylib'),('assetlib-createOpportunitylib','recommend','assetlib-editOpportunitylib'),('assetlib-createOpportunitylib','recommend','assetlib-opportunitylibSort'),('assetlib-createPracticelib','depend','assetlib-practicelib'),('assetlib-createPracticelib','recommend','assetlib-editPracticelib'),('assetlib-createPracticelib','recommend','assetlib-practicelibSort'),('assetlib-createRisklib','depend','assetlib-risklib'),('assetlib-createRisklib','recommend','assetlib-editRisklib'),('assetlib-createRisklib','recommend','assetlib-risklibSort'),('assetlib-createStorylib','depend','assetlib-storylib'),('assetlib-createStorylib','recommend','assetlib-editStorylib'),('assetlib-createStorylib','recommend','assetlib-storylibSort'),('assetlib-deleteComponentlib','depend','assetlib-componentlib'),('assetlib-deleteComponentlib','recommend','assetlib-createComponentlib'),('assetlib-deleteComponentlib','recommend','assetlib-editComponentlib'),('assetlib-deleteIssuelib','depend','assetlib-issuelib'),('assetlib-deleteIssuelib','recommend','assetlib-createIssuelib'),('assetlib-deleteIssuelib','recommend','assetlib-editIssuelib'),('assetlib-deleteOpportunitylib','depend','assetlib-opportunitylib'),('assetlib-deleteOpportunitylib','recommend','assetlib-editOpportunity'),('assetlib-deleteOpportunitylib','recommend','assetlib-importOpportunity'),('assetlib-deletePracticelib','depend','assetlib-practicelib'),('assetlib-deletePracticelib','recommend','assetlib-createPracticelib'),('assetlib-deletePracticelib','recommend','assetlib-editPracticelib'),('assetlib-deleteRisklib','depend','assetlib-risklib'),('assetlib-deleteRisklib','recommend','assetlib-createRisklib'),('assetlib-deleteRisklib','recommend','assetlib-editRisklib'),('assetlib-deleteStorylib','depend','assetlib-storylib'),('assetlib-deleteStorylib','recommend','assetlib-createStorylib'),('assetlib-deleteStorylib','recommend','assetlib-editStorylib'),('assetlib-editComponent','depend','assetlib-component'),('assetlib-editComponent','depend','assetlib-componentlib'),('assetlib-editComponent','recommend','assetlib-assignToComponent'),('assetlib-editComponent','recommend','assetlib-importComponent'),('assetlib-editComponent','recommend','assetlib-removeComponent'),('assetlib-editComponentlib','depend','assetlib-componentlib'),('assetlib-editComponentlib','recommend','assetlib-componentlibSort'),('assetlib-editComponentlib','recommend','assetlib-createComponentlib'),('assetlib-editIssue','depend','assetlib-issue'),('assetlib-editIssue','depend','assetlib-issuelib'),('assetlib-editIssue','recommend','assetlib-assignToIssue'),('assetlib-editIssue','recommend','assetlib-importIssue'),('assetlib-editIssue','recommend','assetlib-removeIssue'),('assetlib-editIssuelib','depend','assetlib-issuelib'),('assetlib-editIssuelib','recommend','assetlib-createIssuelib'),('assetlib-editIssuelib','recommend','assetlib-issuelibSort'),('assetlib-editOpportunity','depend','assetlib-opportunity'),('assetlib-editOpportunity','depend','assetlib-opportunitylib'),('assetlib-editOpportunity','recommend','assetlib-assignToOpportunity'),('assetlib-editOpportunity','recommend','assetlib-importOpportunity'),('assetlib-editOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-editOpportunitylib','depend','assetlib-opportunitylib'),('assetlib-editOpportunitylib','recommend','assetlib-createOpportunitylib'),('assetlib-editOpportunitylib','recommend','assetlib-opportunitylibSort'),('assetlib-editPractice','depend','assetlib-practice'),('assetlib-editPractice','depend','assetlib-practicelib'),('assetlib-editPractice','recommend','assetlib-assignToPractice'),('assetlib-editPractice','recommend','assetlib-importPractice'),('assetlib-editPractice','recommend','assetlib-removePractice'),('assetlib-editPracticelib','depend','assetlib-practicelib'),('assetlib-editPracticelib','recommend','assetlib-createPracticelib'),('assetlib-editPracticelib','recommend','assetlib-practicelibSort'),('assetlib-editRisk','depend','assetlib-risk'),('assetlib-editRisk','depend','assetlib-risklib'),('assetlib-editRisk','recommend','assetlib-assignToRisk'),('assetlib-editRisk','recommend','assetlib-importRisk'),('assetlib-editRisk','recommend','assetlib-removeRisk'),('assetlib-editRisklib','depend','assetlib-risklib'),('assetlib-editRisklib','recommend','assetlib-createRisklib'),('assetlib-editRisklib','recommend','assetlib-risklibSort'),('assetlib-editStory','depend','assetlib-story'),('assetlib-editStory','depend','assetlib-storylib'),('assetlib-editStory','recommend','assetlib-assignToStory'),('assetlib-editStory','recommend','assetlib-importStory'),('assetlib-editStory','recommend','assetlib-removeStory'),('assetlib-editStorylib','depend','assetlib-storylib'),('assetlib-editStorylib','recommend','assetlib-createStorylib'),('assetlib-editStorylib','recommend','assetlib-storylibSort'),('assetlib-importComponent','depend','assetlib-component'),('assetlib-importComponent','depend','assetlib-componentlib'),('assetlib-importComponent','recommend','assetlib-assignToComponent'),('assetlib-importComponent','recommend','assetlib-editComponent'),('assetlib-importComponent','recommend','assetlib-removeComponent'),('assetlib-importIssue','depend','assetlib-issue'),('assetlib-importIssue','depend','assetlib-issuelib'),('assetlib-importIssue','recommend','assetlib-assignToIssue'),('assetlib-importIssue','recommend','assetlib-editIssue'),('assetlib-importIssue','recommend','assetlib-removeIssue'),('assetlib-importOpportunity','depend','assetlib-opportunity'),('assetlib-importOpportunity','depend','assetlib-opportunitylib'),('assetlib-importOpportunity','recommend','assetlib-assignToOpportunity'),('assetlib-importOpportunity','recommend','assetlib-editOpportunity'),('assetlib-importOpportunity','recommend','assetlib-removeOpportunity'),('assetlib-importPractice','depend','assetlib-practice'),('assetlib-importPractice','depend','assetlib-practicelib'),('assetlib-importPractice','recommend','assetlib-assignToPractice'),('assetlib-importPractice','recommend','assetlib-editPractice'),('assetlib-importPractice','recommend','assetlib-removePractice'),('assetlib-importRisk','depend','assetlib-risk'),('assetlib-importRisk','depend','assetlib-risklib'),('assetlib-importRisk','recommend','assetlib-assignToRisk'),('assetlib-importRisk','recommend','assetlib-editRisk'),('assetlib-importRisk','recommend','assetlib-removeRisk'),('assetlib-importStory','depend','assetlib-story'),('assetlib-importStory','depend','assetlib-storylib'),('assetlib-importStory','recommend','assetlib-assignToStory'),('assetlib-importStory','recommend','assetlib-editStory'),('assetlib-importStory','recommend','assetlib-removeStory'),('assetlib-issue','depend','assetlib-issuelib'),('assetlib-issue','recommend','assetlib-editIssue'),('assetlib-issue','recommend','assetlib-importIssue'),('assetlib-issue','recommend','assetlib-issueView'),('assetlib-issue','recommend','assetlib-removeIssue'),('assetlib-issuelib','recommend','assetlib-createIssuelib'),('assetlib-issuelib','recommend','assetlib-editIssuelib'),('assetlib-issuelib','recommend','assetlib-issue'),('assetlib-issuelib','recommend','assetlib-issuelibSort'),('assetlib-issuelib','recommend','assetlib-issueLibView'),('assetlib-issuelibSort','depend','assetlib-issuelib'),('assetlib-issuelibSort','recommend','assetlib-createIssuelib'),('assetlib-issuelibSort','recommend','assetlib-editIssuelib'),('assetlib-issueLibView','depend','assetlib-issue'),('assetlib-issueLibView','depend','assetlib-issuelib'),('assetlib-issueLibView','recommend','assetlib-editIssuelib'),('assetlib-issueView','depend','assetlib-issue'),('assetlib-issueView','depend','assetlib-issuelib'),('assetlib-issueView','recommend','assetlib-editIssue'),('assetlib-issueView','recommend','assetlib-removeIssue'),('assetlib-opportunity','depend','assetlib-opportunitylib'),('assetlib-opportunity','recommend','assetlib-assignToOpportunity'),('assetlib-opportunity','recommend','assetlib-editOpportunity'),('assetlib-opportunity','recommend','assetlib-importOpportunity'),('assetlib-opportunity','recommend','assetlib-removeOpportunity'),('assetlib-opportunitylib','recommend','assetlib-createOpportunitylib'),('assetlib-opportunitylib','recommend','assetlib-editOpportunitylib'),('assetlib-opportunitylib','recommend','assetlib-opportunitylibSort'),('assetlib-opportunitylibSort','depend','assetlib-opportunitylib'),('assetlib-opportunitylibSort','recommend','assetlib-createOpportunitylib'),('assetlib-opportunitylibSort','recommend','assetlib-editOpportunitylib'),('assetlib-opportunityLibView','depend','assetlib-opportunitylib'),('assetlib-opportunityLibView','recommend','assetlib-editOpportunitylib'),('assetlib-opportunityView','depend','assetlib-opportunity'),('assetlib-opportunityView','depend','assetlib-opportunitylib'),('assetlib-opportunityView','recommend','assetlib-assignToOpportunity'),('assetlib-opportunityView','recommend','assetlib-editOpportunity'),('assetlib-practice','depend','assetlib-practicelib'),('assetlib-practice','recommend','assetlib-assignToPractice'),('assetlib-practice','recommend','assetlib-editPractice'),('assetlib-practice','recommend','assetlib-importPractice'),('assetlib-practice','recommend','assetlib-removePractice'),('assetlib-practicelib','recommend','assetlib-createPracticelib'),('assetlib-practicelib','recommend','assetlib-editPracticelib'),('assetlib-practicelib','recommend','assetlib-practicelibSort'),('assetlib-practicelibSort','depend','assetlib-practicelib'),('assetlib-practicelibSort','recommend','assetlib-createPracticelib'),('assetlib-practicelibSort','recommend','assetlib-editPracticelib'),('assetlib-practiceLibView','depend','assetlib-practicelib'),('assetlib-practiceLibView','recommend','assetlib-editPracticelib'),('assetlib-practiceView','depend','assetlib-practice'),('assetlib-practiceView','depend','assetlib-practicelib'),('assetlib-practiceView','recommend','assetlib-editPractice'),('assetlib-practiceView','recommend','assetlib-removePractice'),('assetlib-removeComponent','depend','assetlib-component'),('assetlib-removeComponent','depend','assetlib-componentlib'),('assetlib-removeComponent','recommend','assetlib-batchRemoveComponent'),('assetlib-removeComponent','recommend','assetlib-editComponent'),('assetlib-removeComponent','recommend','assetlib-importComponent'),('assetlib-removeIssue','depend','assetlib-issue'),('assetlib-removeIssue','depend','assetlib-issuelib'),('assetlib-removeIssue','recommend','assetlib-batchRemoveIssue'),('assetlib-removeIssue','recommend','assetlib-editIssue'),('assetlib-removeIssue','recommend','assetlib-importIssue'),('assetlib-removeOpportunity','depend','assetlib-opportunity'),('assetlib-removeOpportunity','depend','assetlib-opportunitylib'),('assetlib-removeOpportunity','recommend','assetlib-batchRemoveOpportunity'),('assetlib-removeOpportunity','recommend','assetlib-editOpportunity'),('assetlib-removeOpportunity','recommend','assetlib-importOpportunity'),('assetlib-removePractice','depend','assetlib-practice'),('assetlib-removePractice','depend','assetlib-practicelib'),('assetlib-removePractice','recommend','assetlib-batchRemovePractice'),('assetlib-removePractice','recommend','assetlib-editPractice'),('assetlib-removePractice','recommend','assetlib-importPractice'),('assetlib-removeRisk','depend','assetlib-risk'),('assetlib-removeRisk','depend','assetlib-risklib'),('assetlib-removeRisk','recommend','assetlib-batchRemoveRisk'),('assetlib-removeRisk','recommend','assetlib-editRisk'),('assetlib-removeRisk','recommend','assetlib-importRisk'),('assetlib-removeStory','depend','assetlib-story'),('assetlib-removeStory','depend','assetlib-storylib'),('assetlib-removeStory','recommend','assetlib-batchRemoveStory'),('assetlib-removeStory','recommend','assetlib-editStory'),('assetlib-removeStory','recommend','assetlib-importStory'),('assetlib-risk','depend','assetlib-risklib'),('assetlib-risk','recommend','assetlib-assignToRisk'),('assetlib-risk','recommend','assetlib-editRisk'),('assetlib-risk','recommend','assetlib-importRisk'),('assetlib-risk','recommend','assetlib-removeRisk'),('assetlib-risk','recommend','assetlib-riskView'),('assetlib-risklib','recommend','assetlib-createRisklib'),('assetlib-risklib','recommend','assetlib-editRisklib'),('assetlib-risklib','recommend','assetlib-risk'),('assetlib-risklib','recommend','assetlib-risklibSort'),('assetlib-risklib','recommend','assetlib-riskLibView'),('assetlib-risklibSort','depend','assetlib-risklib'),('assetlib-risklibSort','recommend','assetlib-createRisklib'),('assetlib-risklibSort','recommend','assetlib-editRisklib'),('assetlib-riskLibView','depend','assetlib-risklib'),('assetlib-riskLibView','recommend','assetlib-editRisk'),('assetlib-riskView','depend','assetlib-risk'),('assetlib-riskView','depend','assetlib-risklib'),('assetlib-riskView','recommend','assetlib-assignToRisk'),('assetlib-riskView','recommend','assetlib-editRisk'),('assetlib-story','depend','assetlib-storylib'),('assetlib-story','recommend','assetlib-assignToStory'),('assetlib-story','recommend','assetlib-editStory'),('assetlib-story','recommend','assetlib-importStory'),('assetlib-story','recommend','assetlib-removeStory'),('assetlib-story','recommend','assetlib-storyView'),('assetlib-storylib','recommend','assetlib-createStorylib'),('assetlib-storylib','recommend','assetlib-editStorylib'),('assetlib-storylib','recommend','assetlib-story'),('assetlib-storylib','recommend','assetlib-storylibSort'),('assetlib-storylib','recommend','assetlib-storyLibView'),('assetlib-storylibSort','depend','assetlib-storylib'),('assetlib-storylibSort','recommend','assetlib-createStorylib'),('assetlib-storylibSort','recommend','assetlib-editStorylib'),('assetlib-storyLibView','depend','assetlib-story'),('assetlib-storyLibView','depend','assetlib-storylib'),('assetlib-storyLibView','recommend','assetlib-editStorylib'),('assetlib-storyView','depend','assetlib-story'),('assetlib-storyView','depend','assetlib-storylib'),('assetlib-storyView','recommend','assetlib-assignToStory'),('assetlib-storyView','recommend','assetlib-editStory'),('assetlib-storyView','recommend','assetlib-importStory'),('assetlib-storyView','recommend','assetlib-removeStory'),('attend-browseReview','depend','attend-personal'),('attend-company','depend','attend-personal'),('attend-department','depend','attend-personal'),('attend-detail','depend','attend-personal'),('attend-edit','depend','attend-personal'),('attend-edit','recommend','attend-browseReview'),('attend-export','depend','attend-department'),('attend-export','depend','attend-personal'),('attend-exportDetail','depend','attend-detail'),('attend-exportDetail','depend','attend-personal'),('attend-exportStat','depend','attend-personal'),('attend-exportStat','depend','attend-stat'),('attend-personal','recommend','attend-edit'),('attend-personalSettings','depend','attend-personal'),('attend-review','depend','attend-browseReview'),('attend-review','depend','attend-personal'),('attend-saveStat','depend','attend-personal'),('attend-saveStat','depend','attend-stat'),('attend-setManager','depend','attend-personal'),('attend-settings','depend','attend-personal'),('attend-stat','depend','attend-personal'),('auditcl-batchCreate','recommend','auditcl-batchEdit'),('auditcl-batchCreate','recommend','auditcl-delete'),('auditcl-batchCreate','recommend','auditcl-edit'),('auditcl-batchEdit','recommend','auditcl-batchCreate'),('auditcl-batchEdit','recommend','auditcl-delete'),('auditcl-batchEdit','recommend','auditcl-edit'),('auditcl-delete','recommend','auditcl-batchCreate'),('auditcl-delete','recommend','auditcl-batchEdit'),('auditcl-delete','recommend','auditcl-edit'),('auditcl-edit','recommend','auditcl-batchCreate'),('auditcl-edit','recommend','auditcl-batchEdit'),('auditcl-edit','recommend','auditcl-delete'),('auditplan-assignTo','depend','auditplan-browse'),('auditplan-assignTo','recommend','auditplan-check'),('auditplan-assignTo','recommend','auditplan-create'),('auditplan-assignTo','recommend','auditplan-edit'),('auditplan-assignTo','recommend','auditplan-nc'),('auditplan-assignTo','recommend','auditplan-result'),('auditplan-batchCheck','depend','auditplan-browse'),('auditplan-batchCheck','recommend','auditplan-check'),('auditplan-batchCreate','depend','auditplan-browse'),('auditplan-batchCreate','recommend','auditplan-create'),('auditplan-batchEdit','depend','auditplan-browse'),('auditplan-batchEdit','recommend','auditplan-edit'),('auditplan-check','depend','auditplan-browse'),('auditplan-check','recommend','auditplan-assignTo'),('auditplan-check','recommend','auditplan-batchCheck'),('auditplan-check','recommend','auditplan-create'),('auditplan-check','recommend','auditplan-edit'),('auditplan-check','recommend','auditplan-nc'),('auditplan-check','recommend','auditplan-result'),('auditplan-create','depend','auditplan-browse'),('auditplan-create','recommend','auditplan-assignTo'),('auditplan-create','recommend','auditplan-batchCreate'),('auditplan-create','recommend','auditplan-check'),('auditplan-create','recommend','auditplan-delete'),('auditplan-create','recommend','auditplan-edit'),('auditplan-create','recommend','auditplan-nc'),('auditplan-create','recommend','auditplan-result'),('auditplan-delete','depend','auditplan-browse'),('auditplan-delete','recommend','auditplan-create'),('auditplan-delete','recommend','auditplan-edit'),('auditplan-edit','depend','auditplan-browse'),('auditplan-edit','recommend','auditplan-assignTo'),('auditplan-edit','recommend','auditplan-batchEdit'),('auditplan-edit','recommend','auditplan-check'),('auditplan-edit','recommend','auditplan-create'),('auditplan-edit','recommend','auditplan-delete'),('auditplan-edit','recommend','auditplan-nc'),('auditplan-edit','recommend','auditplan-result'),('auditplan-nc','depend','auditplan-browse'),('auditplan-nc','recommend','auditplan-assignTo'),('auditplan-nc','recommend','auditplan-check'),('auditplan-nc','recommend','auditplan-create'),('auditplan-nc','recommend','auditplan-edit'),('auditplan-nc','recommend','auditplan-result'),('auditplan-result','depend','auditplan-browse'),('auditplan-result','recommend','auditplan-assignTo'),('auditplan-result','recommend','auditplan-check'),('auditplan-result','recommend','auditplan-create'),('auditplan-result','recommend','auditplan-edit'),('auditplan-result','recommend','auditplan-nc'),('backup-backup','depend','backup-index'),('backup-change','depend','backup-setting'),('backup-delete','depend','backup-index'),('backup-restore','depend','backup-index'),('backup-rmPHPHeader','depend','backup-index'),('backup-setting','depend','backup-index'),('backup-setting','recommend','backup-change'),('baseline-createTemplate','depend','baseline-template'),('baseline-createTemplate','recommend','baseline-delete'),('baseline-createTemplate','recommend','baseline-editBook'),('baseline-createTemplate','recommend','baseline-editTemplate'),('baseline-createTemplate','recommend','baseline-manageBook'),('baseline-delete','depend','baseline-template'),('baseline-delete','recommend','baseline-createTemplate'),('baseline-editBook','depend','baseline-template'),('baseline-editBook','recommend','baseline-createTemplate'),('baseline-editBook','recommend','baseline-delete'),('baseline-editBook','recommend','baseline-editTemplate'),('baseline-editBook','recommend','baseline-manageBook'),('baseline-editTemplate','depend','baseline-template'),('baseline-editTemplate','recommend','baseline-createTemplate'),('baseline-editTemplate','recommend','baseline-delete'),('baseline-editTemplate','recommend','baseline-editBook'),('baseline-editTemplate','recommend','baseline-manageBook'),('baseline-manageBook','depend','baseline-template'),('baseline-manageBook','recommend','baseline-createTemplate'),('baseline-manageBook','recommend','baseline-delete'),('baseline-manageBook','recommend','baseline-editBook'),('baseline-manageBook','recommend','baseline-editTemplate'),('baseline-view','depend','baseline-template'),('branch-activate','depend','branch-close'),('branch-activate','depend','branch-manage'),('branch-activate','recommend','branch-create'),('branch-activate','recommend','branch-edit'),('branch-activate','recommend','branch-mergeBranch'),('branch-activate','recommend','branch-sort'),('branch-batchEdit','depend','product-all'),('branch-batchEdit','recommend','product-edit'),('branch-close','depend','branch-manage'),('branch-close','recommend','branch-activate'),('branch-close','recommend','branch-batchEdit'),('branch-close','recommend','branch-create'),('branch-close','recommend','branch-edit'),('branch-close','recommend','branch-mergeBranch'),('branch-close','recommend','branch-sort'),('branch-create','depend','branch-manage'),('branch-create','recommend','branch-activate'),('branch-create','recommend','branch-batchEdit'),('branch-create','recommend','branch-close'),('branch-create','recommend','branch-edit'),('branch-create','recommend','branch-mergeBranch'),('branch-create','recommend','branch-sort'),('branch-edit','depend','branch-manage'),('branch-edit','recommend','branch-activate'),('branch-edit','recommend','branch-batchEdit'),('branch-edit','recommend','branch-close'),('branch-edit','recommend','branch-create'),('branch-edit','recommend','branch-mergeBranch'),('branch-edit','recommend','branch-sort'),('branch-manage','depend','product-view'),('branch-manage','recommend','branch-activate'),('branch-manage','recommend','branch-close'),('branch-manage','recommend','branch-create'),('branch-manage','recommend','branch-edit'),('branch-manage','recommend','branch-mergeBranch'),('branch-manage','recommend','branch-sort'),('branch-mergeBranch','depend','branch-manage'),('branch-mergeBranch','recommend','branch-activate'),('branch-mergeBranch','recommend','branch-batchEdit'),('branch-mergeBranch','recommend','branch-close'),('branch-mergeBranch','recommend','branch-create'),('branch-mergeBranch','recommend','branch-edit'),('branch-mergeBranch','recommend','branch-sort'),('branch-sort','depend','branch-manage'),('branch-sort','recommend','branch-create'),('branch-sort','recommend','branch-edit'),('budget-batchCreate','depend','workestimation-index'),('budget-batchCreate','recommend','budget-create'),('budget-browse','depend','project-index'),('budget-browse','depend','workestimation-index'),('budget-browse','recommend','budget-summary'),('budget-create','depend','workestimation-index'),('budget-create','recommend','budget-batchCreate'),('budget-delete','depend','budget-browse'),('budget-delete','depend','workestimation-index'),('budget-delete','recommend','budget-create'),('budget-delete','recommend','budget-edit'),('budget-edit','depend','budget-browse'),('budget-edit','depend','workestimation-index'),('budget-edit','recommend','budget-view'),('budget-summary','depend','workestimation-index'),('budget-summary','recommend','budget-browse'),('budget-view','depend','budget-browse'),('budget-view','depend','workestimation-index'),('budget-view','recommend','budget-edit'),('bug-activate','depend','bug-view'),('bug-activate','recommend','bug-assignTo'),('bug-activate','recommend','bug-batchActivate'),('bug-activate','recommend','bug-close'),('bug-activate','recommend','bug-confirmBug'),('bug-activate','recommend','bug-confirmStoryChange'),('bug-activate','recommend','bug-create'),('bug-activate','recommend','bug-edit'),('bug-activate','recommend','bug-linkBugs'),('bug-activate','recommend','bug-resolve'),('bug-assignTo','depend','bug-view'),('bug-assignTo','recommend','bug-activate'),('bug-assignTo','recommend','bug-batchAssignTo'),('bug-assignTo','recommend','bug-close'),('bug-assignTo','recommend','bug-confirmBug'),('bug-assignTo','recommend','bug-confirmStoryChange'),('bug-assignTo','recommend','bug-create'),('bug-assignTo','recommend','bug-edit'),('bug-assignTo','recommend','bug-linkBugs'),('bug-assignTo','recommend','bug-resolve'),('bug-batchActivate','recommend','bug-activate'),('bug-batchAssignTo','recommend','bug-assignTo'),('bug-batchChangeBranch','recommend','bug-edit'),('bug-batchChangeModule','recommend','bug-edit'),('bug-batchChangePlan','recommend','bug-edit'),('bug-batchClose','recommend','bug-close'),('bug-batchConfirm','recommend','bug-confirmBug'),('bug-batchCreate','recommend','bug-create'),('bug-batchEdit','recommend','bug-edit'),('bug-batchResolve','recommend','bug-resolve'),('bug-browse','depend','qa-index'),('bug-browse','recommend','bug-report'),('bug-browse','recommend','bug-view'),('bug-close','depend','bug-view'),('bug-close','recommend','bug-activate'),('bug-close','recommend','bug-assignTo'),('bug-close','recommend','bug-batchClose'),('bug-close','recommend','bug-confirmBug'),('bug-close','recommend','bug-confirmStoryChange'),('bug-close','recommend','bug-create'),('bug-close','recommend','bug-edit'),('bug-close','recommend','bug-linkBugs'),('bug-close','recommend','bug-resolve'),('bug-confirmBug','depend','bug-view'),('bug-confirmBug','recommend','bug-activate'),('bug-confirmBug','recommend','bug-assignTo'),('bug-confirmBug','recommend','bug-batchConfirm'),('bug-confirmBug','recommend','bug-close'),('bug-confirmBug','recommend','bug-confirmStoryChange'),('bug-confirmBug','recommend','bug-create'),('bug-confirmBug','recommend','bug-edit'),('bug-confirmBug','recommend','bug-linkBugs'),('bug-confirmBug','recommend','bug-resolve'),('bug-confirmStoryChange','depend','bug-view'),('bug-confirmStoryChange','recommend','bug-activate'),('bug-confirmStoryChange','recommend','bug-assignTo'),('bug-confirmStoryChange','recommend','bug-close'),('bug-confirmStoryChange','recommend','bug-confirmBug'),('bug-confirmStoryChange','recommend','bug-create'),('bug-confirmStoryChange','recommend','bug-edit'),('bug-confirmStoryChange','recommend','bug-linkBugs'),('bug-confirmStoryChange','recommend','bug-resolve'),('bug-create','depend','bug-view'),('bug-create','recommend','bug-activate'),('bug-create','recommend','bug-assignTo'),('bug-create','recommend','bug-batchCreate'),('bug-create','recommend','bug-close'),('bug-create','recommend','bug-confirmBug'),('bug-create','recommend','bug-confirmStoryChange'),('bug-create','recommend','bug-edit'),('bug-create','recommend','bug-linkBugs'),('bug-create','recommend','bug-resolve'),('bug-delete','depend','bug-view'),('bug-edit','depend','bug-view'),('bug-edit','recommend','bug-activate'),('bug-edit','recommend','bug-assignTo'),('bug-edit','recommend','bug-batchEdit'),('bug-edit','recommend','bug-close'),('bug-edit','recommend','bug-confirmBug'),('bug-edit','recommend','bug-confirmStoryChange'),('bug-edit','recommend','bug-create'),('bug-edit','recommend','bug-linkBugs'),('bug-edit','recommend','bug-resolve'),('bug-exportTemplate','depend','bug-import'),('bug-import','depend','bug-exportTemplate'),('bug-linkBugs','depend','bug-edit'),('bug-resolve','depend','bug-view'),('bug-resolve','recommend','bug-activate'),('bug-resolve','recommend','bug-assignTo'),('bug-resolve','recommend','bug-batchResolve'),('bug-resolve','recommend','bug-close'),('bug-resolve','recommend','bug-confirmBug'),('bug-resolve','recommend','bug-confirmStoryChange'),('bug-resolve','recommend','bug-create'),('bug-resolve','recommend','bug-edit'),('bug-resolve','recommend','bug-linkBugs'),('build-batchUnlinkBug','depend','execution-build'),('build-batchUnlinkBug','recommend','build-unlinkBug'),('build-batchUnlinkStory','depend','execution-build'),('build-batchUnlinkStory','recommend','build-unlinkStory'),('build-create','depend','execution-build'),('build-create','recommend','build-edit'),('build-create','recommend','build-linkBug'),('build-create','recommend','build-linkStory'),('build-create','recommend','build-unlinkBug'),('build-create','recommend','build-unlinkStory'),('build-delete','depend','execution-build'),('build-delete','recommend','build-create'),('build-delete','recommend','build-edit'),('build-edit','depend','execution-build'),('build-edit','recommend','build-create'),('build-edit','recommend','build-linkBug'),('build-edit','recommend','build-linkStory'),('build-edit','recommend','build-unlinkBug'),('build-edit','recommend','build-unlinkStory'),('build-linkBug','depend','execution-build'),('build-linkBug','recommend','build-create'),('build-linkBug','recommend','build-edit'),('build-linkBug','recommend','build-linkStory'),('build-linkBug','recommend','build-unlinkBug'),('build-linkBug','recommend','build-unlinkStory'),('build-linkStory','depend','execution-build'),('build-linkStory','recommend','build-create'),('build-linkStory','recommend','build-edit'),('build-linkStory','recommend','build-linkBug'),('build-linkStory','recommend','build-unlinkBug'),('build-linkStory','recommend','build-unlinkStory'),('build-unlinkBug','depend','execution-build'),('build-unlinkBug','recommend','build-batchUnlinkBug'),('build-unlinkBug','recommend','build-create'),('build-unlinkBug','recommend','build-edit'),('build-unlinkBug','recommend','build-linkBug'),('build-unlinkBug','recommend','build-linkStory'),('build-unlinkBug','recommend','build-unlinkStory'),('build-unlinkStory','depend','execution-build'),('build-unlinkStory','recommend','build-batchUnlinkStory'),('build-unlinkStory','recommend','build-create'),('build-unlinkStory','recommend','build-edit'),('build-unlinkStory','recommend','build-linkBug'),('build-unlinkStory','recommend','build-linkStory'),('build-unlinkStory','recommend','build-unlinkBug'),('build-view','depend','execution-build'),('build-view','recommend','build-create'),('build-view','recommend','build-edit'),('build-view','recommend','build-linkBug'),('build-view','recommend','build-linkStory'),('build-view','recommend','build-unlinkBug'),('build-view','recommend','build-unlinkStory'),('caselib-batchCreateCase','depend','caselib-browse'),('caselib-batchCreateCase','recommend','caselib-createCase'),('caselib-browse','recommend','assetlib-caselib'),('caselib-browse','recommend','caselib-create'),('caselib-browse','recommend','caselib-createCase'),('caselib-browse','recommend','caselib-edit'),('caselib-browse','recommend','caselib-import'),('caselib-browse','recommend','caselib-view'),('caselib-create','depend','caselib-browse'),('caselib-create','recommend','assetlib-caselibSort'),('caselib-create','recommend','caselib-createCase'),('caselib-create','recommend','caselib-edit'),('caselib-create','recommend','caselib-import'),('caselib-createCase','depend','caselib-browse'),('caselib-createCase','recommend','caselib-batchCreateCase'),('caselib-createCase','recommend','caselib-create'),('caselib-createCase','recommend','caselib-import'),('caselib-delete','depend','caselib-view'),('caselib-delete','recommend','caselib-create'),('caselib-delete','recommend','caselib-edit'),('caselib-edit','depend','caselib-view'),('caselib-edit','recommend','assetlib-caselibSort'),('caselib-edit','recommend','caselib-create'),('caselib-exportTemplate','depend','caselib-browse'),('caselib-exportTemplate','depend','caselib-import'),('caselib-import','depend','caselib-browse'),('caselib-import','depend','caselib-exportTemplate'),('caselib-import','depend','caselib-showImport'),('caselib-showImport','depend','caselib-import'),('caselib-view','depend','caselib-browse'),('caselib-view','recommend','assetlib-caselib'),('caselib-view','recommend','caselib-edit'),('chart-browse','depend','chart-preview'),('chart-create','depend','chart-browse'),('chart-create','recommend','chart-delete'),('chart-create','recommend','chart-design'),('chart-create','recommend','chart-edit'),('chart-delete','depend','chart-browse'),('chart-delete','recommend','chart-create'),('chart-delete','recommend','chart-design'),('chart-delete','recommend','chart-edit'),('chart-design','depend','chart-browse'),('chart-design','recommend','chart-create'),('chart-design','recommend','chart-delete'),('chart-design','recommend','chart-edit'),('chart-edit','depend','chart-browse'),('chart-edit','recommend','chart-create'),('chart-edit','recommend','chart-delete'),('chart-edit','recommend','chart-design'),('chart-export','depend','chart-preview'),('charter-activate','depend','charter-browse'),('charter-activate','depend','charter-view'),('charter-activate','recommend','charter-close'),('charter-activate','recommend','charter-create'),('charter-activate','recommend','charter-edit'),('charter-close','depend','charter-browse'),('charter-close','depend','charter-view'),('charter-close','recommend','charter-activate'),('charter-close','recommend','charter-create'),('charter-close','recommend','charter-edit'),('charter-create','depend','charter-browse'),('charter-create','recommend','charter-delete'),('charter-create','recommend','charter-edit'),('charter-delete','depend','charter-browse'),('charter-delete','depend','charter-view'),('charter-edit','depend','charter-browse'),('charter-edit','depend','charter-loadRoadmapStories'),('charter-edit','depend','charter-view'),('charter-edit','recommend','charter-create'),('charter-edit','recommend','charter-delete'),('charter-loadRoadmapStories','depend','charter-browse'),('charter-loadRoadmapStories','depend','charter-view'),('charter-review','depend','charter-browse'),('charter-review','depend','charter-loadRoadmapStories'),('charter-review','depend','charter-view'),('charter-view','depend','charter-browse'),('ci-checkCompileStatus','recommend','ci-commitResult'),('ci-commitResult','recommend','ci-checkCompileStatus'),('cm-browse','depend','project-index'),('cm-browse','recommend','cm-view'),('cm-create','depend','cm-browse'),('cm-create','depend','cm-view'),('cm-create','recommend','cm-delete'),('cm-create','recommend','cm-edit'),('cm-create','recommend','review-browse'),('cm-delete','depend','cm-browse'),('cm-delete','depend','cm-view'),('cm-delete','recommend','cm-create'),('cm-delete','recommend','cm-edit'),('cm-edit','depend','cm-browse'),('cm-edit','depend','cm-view'),('cm-edit','recommend','cm-create'),('cm-edit','recommend','cm-delete'),('cm-report','depend','cm-browse'),('cm-view','depend','cm-browse'),('cmcl-batchCreate','recommend','cmcl-delete'),('cmcl-batchCreate','recommend','cmcl-edit'),('cmcl-delete','recommend','cmcl-batchCreate'),('cmcl-delete','recommend','cmcl-edit'),('cmcl-edit','recommend','cmcl-batchCreate'),('cmcl-edit','recommend','cmcl-delete'),('company-alleffort','depend','my-team'),('company-alleffort','depend','user-todo'),('company-alleffort','recommend','company-allTodo'),('company-allTodo','depend','my-team'),('company-allTodo','depend','user-todo'),('company-allTodo','recommend','company-alleffort'),('company-browse','depend','admin-index'),('company-browse','depend','admin-register'),('company-browse','recommend','user-view'),('company-calendar','depend','company-effort'),('company-calendar','depend','my-team'),('company-dynamic','depend','my-team'),('company-edit','depend','company-view'),('company-edit','depend','my-team'),('company-effort','depend','my-team'),('company-effort','recommend','company-calendar'),('company-todo','depend','my-team'),('company-view','depend','my-team'),('company-view','recommend','company-edit'),('compile-browse','depend','job-browse'),('compile-browse','recommend','compile-logs'),('compile-browse','recommend','job-exec'),('compile-browse','recommend','job-view'),('compile-logs','depend','job-browse'),('compile-logs','recommend','compile-browse'),('compile-logs','recommend','job-exec'),('compile-logs','recommend','job-view'),('compile-syncCompile','depend','job-browse'),('cron-create','depend','cron-index'),('cron-create','recommend','cron-delete'),('cron-create','recommend','cron-edit'),('cron-create','recommend','cron-toggle'),('cron-delete','depend','cron-index'),('cron-delete','recommend','cron-create'),('cron-delete','recommend','cron-edit'),('cron-delete','recommend','cron-toggle'),('cron-edit','depend','cron-index'),('cron-edit','recommend','cron-create'),('cron-edit','recommend','cron-delete'),('cron-edit','recommend','cron-toggle'),('cron-openProcess','depend','cron-index'),('cron-toggle','depend','cron-index'),('cron-toggle','recommend','cron-create'),('cron-toggle','recommend','cron-delete'),('cron-toggle','recommend','cron-edit'),('cron-turnon','depend','cron-index'),('custom-browseStoryConcept','depend','admin-index'),('custom-browseStoryConcept','depend','admin-register'),('custom-code','depend','admin-index'),('custom-code','depend','admin-register'),('custom-deleteStoryConcept','depend','admin-index'),('custom-deleteStoryConcept','depend','admin-register'),('custom-deleteStoryConcept','depend','custom-browseStoryConcept'),('custom-editStoryConcept','depend','admin-index'),('custom-editStoryConcept','depend','admin-register'),('custom-editStoryConcept','depend','custom-browseStoryConcept'),('custom-execution','depend','admin-index'),('custom-execution','depend','admin-register'),('custom-flow','depend','admin-index'),('custom-flow','depend','admin-register'),('custom-hours','depend','admin-index'),('custom-hours','depend','admin-register'),('custom-kanban','depend','admin-index'),('custom-kanban','depend','admin-register'),('custom-limitTaskDate','depend','admin-index'),('custom-limitTaskDate','depend','admin-register'),('custom-limitTaskDate','depend','custom-execution'),('custom-percent','depend','admin-index'),('custom-percent','depend','admin-register'),('custom-product','depend','admin-index'),('custom-product','depend','admin-register'),('custom-required','depend','admin-index'),('custom-required','depend','admin-register'),('custom-restore','depend','admin-index'),('custom-restore','depend','admin-register'),('custom-set','depend','admin-index'),('custom-set','depend','admin-register'),('custom-setDefaultConcept','depend','admin-index'),('custom-setDefaultConcept','depend','admin-register'),('custom-setDefaultConcept','depend','custom-browseStoryConcept'),('custom-setStoryConcept','depend','admin-index'),('custom-setStoryConcept','depend','admin-register'),('custom-setStoryConcept','depend','custom-browseStoryConcept'),('custom-timezone','depend','admin-index'),('dataview-create','depend','dataview-browse'),('dataview-create','recommend','dataview-edit'),('dataview-create','recommend','dataview-query'),('dataview-delete','depend','dataview-browse'),('dataview-edit','depend','dataview-browse'),('dataview-edit','recommend','dataview-create'),('dataview-edit','recommend','dataview-query'),('dataview-export','depend','dataview-browse'),('dataview-export','depend','dataview-query'),('dataview-query','depend','dataview-browse'),('dataview-query','recommend','dataview-create'),('dataview-query','recommend','dataview-edit'),('demand-activate','depend','demand-browse'),('demand-activate','depend','demand-view'),('demand-activate','recommend','demand-assignTo'),('demand-activate','recommend','demand-batchCreate'),('demand-activate','recommend','demand-close'),('demand-activate','recommend','demand-create'),('demand-activate','recommend','demand-edit'),('demand-assignTo','depend','demand-browse'),('demand-assignTo','recommend','demand-activate'),('demand-assignTo','recommend','demand-close'),('demand-assignTo','recommend','demand-create'),('demand-assignTo','recommend','demand-edit'),('demand-batchCreate','depend','demand-browse'),('demand-batchCreate','depend','demand-view'),('demand-batchCreate','recommend','demand-create'),('demand-browse','recommend','demand-view'),('demand-change','depend','demand-browse'),('demand-change','depend','demand-view'),('demand-change','recommend','demand-activate'),('demand-change','recommend','demand-assignTo'),('demand-change','recommend','demand-batchCreate'),('demand-change','recommend','demand-close'),('demand-change','recommend','demand-create'),('demand-change','recommend','demand-edit'),('demand-close','depend','demand-browse'),('demand-close','depend','demand-view'),('demand-close','recommend','demand-activate'),('demand-close','recommend','demand-assignTo'),('demand-close','recommend','demand-batchCreate'),('demand-close','recommend','demand-create'),('demand-close','recommend','demand-edit'),('demand-create','depend','demand-browse'),('demand-create','depend','demand-view'),('demand-create','recommend','demand-assignTo'),('demand-create','recommend','demand-batchCreate'),('demand-create','recommend','demand-change'),('demand-create','recommend','demand-edit'),('demand-create','recommend','demand-recall'),('demand-create','recommend','demand-submitReview'),('demand-delete','depend','demand-browse'),('demand-delete','depend','demand-view'),('demand-distribute','depend','demand-browse'),('demand-distribute','depend','demand-view'),('demand-distribute','recommend','demand-assignTo'),('demand-distribute','recommend','demand-batchCreate'),('demand-distribute','recommend','demand-create'),('demand-distribute','recommend','demand-edit'),('demand-edit','depend','demand-browse'),('demand-edit','recommend','demand-assignTo'),('demand-edit','recommend','demand-batchCreate'),('demand-export','depend','demand-browse'),('demand-export','recommend','demand-exportTemplate'),('demand-export','recommend','demand-import'),('demand-exportTemplate','depend','demand-browse'),('demand-exportTemplate','recommend','demand-export'),('demand-import','depend','demand-browse'),('demand-import','depend','demand-exportTemplate'),('demand-import','recommend','demand-batchCreate'),('demand-import','recommend','demand-create'),('demand-import','recommend','demand-export'),('demand-manageTree','depend','demand-browse'),('demand-recall','depend','demand-browse'),('demand-recall','depend','demand-view'),('demand-recall','recommend','demand-activate'),('demand-recall','recommend','demand-assignTo'),('demand-recall','recommend','demand-batchCreate'),('demand-recall','recommend','demand-change'),('demand-recall','recommend','demand-close'),('demand-recall','recommend','demand-create'),('demand-recall','recommend','demand-edit'),('demand-review','depend','demand-browse'),('demand-review','depend','demand-view'),('demand-review','recommend','demand-activate'),('demand-review','recommend','demand-assignTo'),('demand-review','recommend','demand-batchCreate'),('demand-review','recommend','demand-change'),('demand-review','recommend','demand-close'),('demand-review','recommend','demand-create'),('demand-review','recommend','demand-edit'),('demand-submitReview','depend','demand-browse'),('demand-submitReview','depend','demand-view'),('demand-submitReview','recommend','demand-activate'),('demand-submitReview','recommend','demand-assignTo'),('demand-submitReview','recommend','demand-batchCreate'),('demand-submitReview','recommend','demand-change'),('demand-submitReview','recommend','demand-close'),('demand-submitReview','recommend','demand-create'),('demand-submitReview','recommend','demand-edit'),('demand-track','recommend','demand-browse'),('demand-track','recommend','demand-view'),('demand-view','depend','demand-browse'),('demand-view','recommend','demand-assignTo'),('demand-view','recommend','demand-change'),('demand-view','recommend','demand-create'),('demand-view','recommend','demand-edit'),('demand-view','recommend','demand-recall'),('demand-view','recommend','demand-review'),('demand-view','recommend','demand-submitReview'),('demandpool-activate','depend','demandpool-browse'),('demandpool-activate','depend','demandpool-view'),('demandpool-activate','recommend','demandpool-close'),('demandpool-activate','recommend','demandpool-create'),('demandpool-activate','recommend','demandpool-edit'),('demandpool-browse','recommend','demandpool-edit'),('demandpool-browse','recommend','demandpool-view'),('demandpool-close','depend','demandpool-browse'),('demandpool-close','depend','demandpool-view'),('demandpool-close','recommend','demandpool-activate'),('demandpool-close','recommend','demandpool-create'),('demandpool-close','recommend','demandpool-edit'),('demandpool-create','depend','demandpool-browse'),('demandpool-create','recommend','demandpool-close'),('demandpool-create','recommend','demandpool-edit'),('demandpool-create','recommend','demandpool-view'),('demandpool-delete','depend','demandpool-browse'),('demandpool-delete','depend','demandpool-view'),('demandpool-delete','recommend','demandpool-create'),('demandpool-delete','recommend','demandpool-edit'),('demandpool-edit','depend','demandpool-browse'),('demandpool-edit','depend','demandpool-view'),('demandpool-edit','recommend','demandpool-close'),('demandpool-edit','recommend','demandpool-create'),('demandpool-view','depend','demandpool-browse'),('demandpool-view','recommend','demandpool-activate'),('demandpool-view','recommend','demandpool-close'),('demandpool-view','recommend','demandpool-delete'),('demandpool-view','recommend','demandpool-edit'),('deploy-activate','depend','deploy-browse'),('deploy-activate','depend','ops-index'),('deploy-activate','recommend','deploy-create'),('deploy-activate','recommend','deploy-edit'),('deploy-activate','recommend','deploy-finish'),('deploy-assignTo','depend','deploy-browse'),('deploy-assignTo','depend','deploy-steps'),('deploy-assignTo','depend','ops-index'),('deploy-assignTo','recommend','deploy-editStep'),('deploy-assignTo','recommend','deploy-finishStep'),('deploy-assignTo','recommend','deploy-manageStep'),('deploy-assignTo','recommend','testtask-deployCaseResults'),('deploy-assignTo','recommend','testtask-runDeployCase'),('deploy-batchUnlinkCases','depend','deploy-browse'),('deploy-batchUnlinkCases','depend','deploy-cases'),('deploy-batchUnlinkCases','depend','ops-index'),('deploy-batchUnlinkCases','recommend','deploy-unlinkCase'),('deploy-browse','depend','ops-index'),('deploy-browse','recommend','deploy-activate'),('deploy-browse','recommend','deploy-create'),('deploy-browse','recommend','deploy-edit'),('deploy-browse','recommend','deploy-finish'),('deploy-browse','recommend','deploy-view'),('deploy-cases','depend','deploy-browse'),('deploy-cases','depend','ops-index'),('deploy-cases','recommend','deploy-linkCases'),('deploy-cases','recommend','deploy-unlinkCase'),('deploy-create','depend','deploy-browse'),('deploy-create','depend','ops-index'),('deploy-create','recommend','deploy-activate'),('deploy-create','recommend','deploy-edit'),('deploy-create','recommend','deploy-finish'),('deploy-delete','depend','deploy-browse'),('deploy-delete','depend','ops-index'),('deploy-delete','recommend','deploy-create'),('deploy-delete','recommend','deploy-edit'),('deploy-deleteStep','depend','deploy-browse'),('deploy-deleteStep','depend','deploy-steps'),('deploy-deleteStep','depend','ops-index'),('deploy-deleteStep','recommend','deploy-assignTo'),('deploy-deleteStep','recommend','deploy-editStep'),('deploy-deleteStep','recommend','deploy-finishStep'),('deploy-deleteStep','recommend','deploy-manageStep'),('deploy-deleteStep','recommend','testtask-deployCaseResults'),('deploy-deleteStep','recommend','testtask-runDeployCase'),('deploy-edit','depend','deploy-browse'),('deploy-edit','depend','ops-index'),('deploy-edit','recommend','deploy-activate'),('deploy-edit','recommend','deploy-create'),('deploy-edit','recommend','deploy-finish'),('deploy-editStep','depend','deploy-browse'),('deploy-editStep','depend','deploy-steps'),('deploy-editStep','depend','ops-index'),('deploy-editStep','recommend','deploy-assignTo'),('deploy-editStep','recommend','deploy-finishStep'),('deploy-editStep','recommend','deploy-manageStep'),('deploy-editStep','recommend','testtask-deployCaseResults'),('deploy-editStep','recommend','testtask-runDeployCase'),('deploy-finish','depend','deploy-browse'),('deploy-finish','depend','ops-index'),('deploy-finish','recommend','deploy-activate'),('deploy-finish','recommend','deploy-create'),('deploy-finish','recommend','deploy-edit'),('deploy-finishStep','depend','deploy-browse'),('deploy-finishStep','depend','deploy-steps'),('deploy-finishStep','depend','ops-index'),('deploy-finishStep','recommend','deploy-assignTo'),('deploy-finishStep','recommend','deploy-editStep'),('deploy-finishStep','recommend','deploy-manageStep'),('deploy-finishStep','recommend','testtask-deployCaseResults'),('deploy-finishStep','recommend','testtask-runDeployCase'),('deploy-linkCases','depend','deploy-browse'),('deploy-linkCases','depend','deploy-cases'),('deploy-linkCases','depend','ops-index'),('deploy-linkCases','recommend','deploy-unlinkCase'),('deploy-manageScope','depend','deploy-browse'),('deploy-manageScope','depend','deploy-scope'),('deploy-manageScope','depend','ops-index'),('deploy-manageStep','depend','deploy-browse'),('deploy-manageStep','depend','deploy-steps'),('deploy-manageStep','depend','ops-index'),('deploy-manageStep','recommend','deploy-assignTo'),('deploy-manageStep','recommend','deploy-editStep'),('deploy-manageStep','recommend','deploy-finishStep'),('deploy-manageStep','recommend','testtask-deployCaseResults'),('deploy-manageStep','recommend','testtask-runDeployCase'),('deploy-scope','depend','deploy-browse'),('deploy-scope','depend','ops-index'),('deploy-scope','recommend','deploy-manageScope'),('deploy-steps','depend','deploy-browse'),('deploy-steps','depend','ops-index'),('deploy-steps','recommend','deploy-assignTo'),('deploy-steps','recommend','deploy-editStep'),('deploy-steps','recommend','deploy-finishStep'),('deploy-steps','recommend','deploy-manageStep'),('deploy-steps','recommend','deploy-viewStep'),('deploy-steps','recommend','testtask-deployCaseResults'),('deploy-steps','recommend','testtask-runDeployCase'),('deploy-unlinkCase','depend','deploy-browse'),('deploy-unlinkCase','depend','deploy-cases'),('deploy-unlinkCase','depend','ops-index'),('deploy-unlinkCase','recommend','deploy-batchUnlinkCases'),('deploy-unlinkCase','recommend','deploy-linkCases'),('deploy-view','depend','deploy-browse'),('deploy-view','depend','ops-index'),('deploy-view','recommend','deploy-activate'),('deploy-view','recommend','deploy-create'),('deploy-view','recommend','deploy-edit'),('deploy-view','recommend','deploy-finish'),('deploy-viewStep','depend','deploy-browse'),('deploy-viewStep','depend','deploy-steps'),('deploy-viewStep','depend','ops-index'),('deploy-viewStep','recommend','deploy-assignTo'),('deploy-viewStep','recommend','deploy-editStep'),('deploy-viewStep','recommend','deploy-finishStep'),('deploy-viewStep','recommend','deploy-manageStep'),('deploy-viewStep','recommend','testtask-deployCaseResults'),('deploy-viewStep','recommend','testtask-runDeployCase'),('dept-browse','depend','admin-index'),('dept-browse','depend','admin-register'),('dept-browse','depend','dept-edit'),('dept-browse','recommend','dept-delete'),('dept-browse','recommend','dept-manageChild'),('dept-browse','recommend','dept-updateOrder'),('dept-delete','depend','admin-index'),('dept-delete','depend','admin-register'),('dept-delete','depend','dept-browse'),('dept-delete','recommend','dept-edit'),('dept-delete','recommend','dept-manageChild'),('dept-delete','recommend','tree-updateOrder'),('dept-edit','depend','admin-index'),('dept-edit','depend','admin-register'),('dept-edit','depend','dept-browse'),('dept-edit','recommend','dept-delete'),('dept-edit','recommend','dept-manageChild'),('dept-edit','recommend','tree-updateOrder'),('dept-manageChild','depend','admin-index'),('dept-manageChild','depend','admin-register'),('dept-manageChild','depend','dept-browse'),('dept-manageChild','recommend','dept-delete'),('dept-manageChild','recommend','dept-edit'),('dept-manageChild','recommend','tree-updateOrder'),('dept-updateOrder','depend','admin-index'),('dept-updateOrder','depend','admin-register'),('dept-updateOrder','depend','dept-browse'),('dept-updateOrder','recommend','dept-delete'),('dept-updateOrder','recommend','dept-edit'),('dept-updateOrder','recommend','dept-manageChild'),('dept-updateOrder','recommend','tree-updateOrder'),('design-assignTo','depend','design-browse'),('design-assignTo','recommend','design-create'),('design-assignTo','recommend','design-edit'),('design-assignTo','recommend','design-linkCommit'),('design-assignTo','recommend','design-revision'),('design-assignTo','recommend','design-submit'),('design-assignTo','recommend','design-unlinkCommit'),('design-batchCreate','depend','design-browse'),('design-batchCreate','recommend','design-create'),('design-browse','depend','project-index'),('design-browse','recommend','design-view'),('design-create','depend','design-browse'),('design-create','recommend','design-assignTo'),('design-create','recommend','design-batchCreate'),('design-create','recommend','design-edit'),('design-create','recommend','design-linkCommit'),('design-create','recommend','design-submit'),('design-create','recommend','design-unlinkCommit'),('design-delete','depend','design-browse'),('design-delete','recommend','design-assignTo'),('design-delete','recommend','design-create'),('design-delete','recommend','design-edit'),('design-delete','recommend','design-linkCommit'),('design-delete','recommend','design-submit'),('design-delete','recommend','design-unlinkCommit'),('design-edit','depend','design-browse'),('design-edit','recommend','design-assignTo'),('design-edit','recommend','design-create'),('design-edit','recommend','design-linkCommit'),('design-edit','recommend','design-revision'),('design-edit','recommend','design-submit'),('design-edit','recommend','design-unlinkCommit'),('design-linkCommit','depend','design-browse'),('design-linkCommit','recommend','design-assignTo'),('design-linkCommit','recommend','design-create'),('design-linkCommit','recommend','design-edit'),('design-linkCommit','recommend','design-revision'),('design-linkCommit','recommend','design-submit'),('design-linkCommit','recommend','design-unlinkCommit'),('design-linkCommit','recommend','design-viewCommit'),('design-revision','depend','design-viewCommit'),('design-revision','recommend','design-linkCommit'),('design-revision','recommend','design-unlinkCommit'),('design-revision','recommend','design-viewCommit'),('design-submit','depend','design-browse'),('design-unlinkCommit','depend','design-browse'),('design-unlinkCommit','recommend','design-assignTo'),('design-unlinkCommit','recommend','design-create'),('design-unlinkCommit','recommend','design-edit'),('design-unlinkCommit','recommend','design-linkCommit'),('design-unlinkCommit','recommend','design-revision'),('design-unlinkCommit','recommend','design-submit'),('design-unlinkCommit','recommend','design-viewCommit'),('design-view','depend','design-browse'),('design-viewCommit','depend','design-browse'),('design-viewCommit','recommend','design-linkCommit'),('design-viewCommit','recommend','design-revision'),('dimension-create','depend','dimension-browse'),('dimension-create','recommend','dimension-delete'),('dimension-create','recommend','dimension-edit'),('dimension-delete','depend','dimension-browse'),('dimension-delete','recommend','dimension-create'),('dimension-delete','recommend','dimension-edit'),('dimension-edit','depend','dimension-browse'),('dimension-edit','recommend','dimension-create'),('dimension-edit','recommend','dimension-delete'),('doc-addCatalog','recommend','doc-editCatalog'),('doc-addCatalog','recommend','doc-sortCatalog'),('doc-collect','recommend','doc-create'),('doc-collect','recommend','doc-edit'),('doc-create','recommend','doc-collect'),('doc-create','recommend','doc-edit'),('doc-createLib','recommend','doc-editLib'),('doc-createLib','recommend','doc-showFiles'),('doc-custom2export','depend','doc-teamSpace'),('doc-diff','depend','doc-view'),('doc-displaySetting','depend','doc-view'),('doc-edit','recommend','doc-collect'),('doc-edit','recommend','doc-create'),('doc-editCatalog','recommend','doc-addCatalog'),('doc-editCatalog','recommend','doc-sortCatalog'),('doc-editLib','recommend','doc-createLib'),('doc-editLib','recommend','doc-showFiles'),('doc-index','recommend','doc-mySpace'),('doc-index','recommend','doc-productSpace'),('doc-index','recommend','doc-projectSpace'),('doc-index','recommend','doc-teamSpace'),('doc-index','recommend','doc-view'),('doc-mine2export','depend','doc-mySpace'),('doc-myCollection','depend','doc-mySpace'),('doc-myCollection','recommend','doc-myCreation'),('doc-myCollection','recommend','doc-myEdited'),('doc-myCollection','recommend','doc-myView'),('doc-myCreation','depend','doc-mySpace'),('doc-myCreation','recommend','doc-myCollection'),('doc-myCreation','recommend','doc-myEdited'),('doc-myCreation','recommend','doc-myView'),('doc-myEdited','depend','doc-mySpace'),('doc-myEdited','recommend','doc-myCollection'),('doc-myEdited','recommend','doc-myCreation'),('doc-myEdited','recommend','doc-myView'),('doc-mySpace','recommend','doc-index'),('doc-mySpace','recommend','doc-productSpace'),('doc-mySpace','recommend','doc-projectSpace'),('doc-mySpace','recommend','doc-teamSpace'),('doc-mySpace','recommend','doc-view'),('doc-myView','depend','doc-mySpace'),('doc-myView','recommend','doc-myCollection'),('doc-myView','recommend','doc-myCreation'),('doc-myView','recommend','doc-myEdited'),('doc-product2export','depend','doc-productSpace'),('doc-productSpace','recommend','doc-index'),('doc-productSpace','recommend','doc-mySpace'),('doc-productSpace','recommend','doc-projectSpace'),('doc-productSpace','recommend','doc-teamSpace'),('doc-productSpace','recommend','doc-view'),('doc-project2export','depend','doc-projectSpace'),('doc-projectSpace','recommend','doc-index'),('doc-projectSpace','recommend','doc-mySpace'),('doc-projectSpace','recommend','doc-productSpace'),('doc-projectSpace','recommend','doc-teamSpace'),('doc-projectSpace','recommend','doc-view'),('doc-showFiles','recommend','doc-createLib'),('doc-showFiles','recommend','doc-editLib'),('doc-sortCatalog','recommend','doc-addCatalog'),('doc-sortCatalog','recommend','doc-editCatalog'),('doc-teamSpace','recommend','doc-index'),('doc-teamSpace','recommend','doc-mySpace'),('doc-teamSpace','recommend','doc-productSpace'),('doc-teamSpace','recommend','doc-projectSpace'),('doc-teamSpace','recommend','doc-view'),('doc-view','recommend','doc-diff'),('doc-view','recommend','doc-displaySetting'),('doc-view','recommend','doc-index'),('doc-view','recommend','doc-myCollection'),('doc-view','recommend','doc-myCreation'),('doc-view','recommend','doc-myEdited'),('doc-view','recommend','doc-mySpace'),('doc-view','recommend','doc-myView'),('doc-view','recommend','doc-productSpace'),('doc-view','recommend','doc-projectSpace'),('doc-view','recommend','doc-teamSpace'),('domain-browse','depend','ops-index'),('domain-browse','recommend','domain-create'),('domain-browse','recommend','domain-edit'),('domain-browse','recommend','domain-view'),('domain-create','depend','domain-browse'),('domain-create','depend','ops-index'),('domain-create','recommend','domain-edit'),('domain-delete','depend','domain-browse'),('domain-delete','depend','ops-index'),('domain-delete','recommend','domain-create'),('domain-delete','recommend','domain-edit'),('domain-edit','depend','domain-browse'),('domain-edit','depend','ops-index'),('domain-edit','recommend','domain-create'),('domain-view','depend','domain-browse'),('domain-view','depend','ops-index'),('domain-view','recommend','domain-create'),('domain-view','recommend','domain-edit'),('durationestimation-create','depend','durationestimation-index'),('durationestimation-create','depend','workestimation-index'),('durationestimation-index','depend','budget-browse'),('durationestimation-index','depend','project-index'),('durationestimation-index','depend','workestimation-index'),('durationestimation-index','recommend','budget-edit'),('durationestimation-index','recommend','durationestimation-create'),('effort-batchCreate','depend','effort-calendar'),('effort-batchCreate','recommend','effort-delete'),('effort-batchCreate','recommend','effort-edit'),('effort-batchCreate','recommend','effort-view'),('effort-batchEdit','depend','my-effort'),('effort-batchEdit','recommend','effort-edit'),('effort-createForObject','recommend','effort-delete'),('effort-createForObject','recommend','effort-edit'),('effort-delete','recommend','effort-batchCreate'),('effort-delete','recommend','effort-batchEdit'),('effort-delete','recommend','effort-createForObject'),('effort-delete','recommend','effort-edit'),('effort-delete','recommend','effort-export'),('effort-delete','recommend','effort-view'),('effort-edit','recommend','effort-batchCreate'),('effort-edit','recommend','effort-batchEdit'),('effort-edit','recommend','effort-createForObject'),('effort-edit','recommend','effort-delete'),('effort-edit','recommend','effort-export'),('effort-edit','recommend','effort-view'),('effort-export','depend','effort-calendar'),('effort-export','depend','my-effort'),('effort-export','recommend','effort-view'),('effort-view','depend','effort-calendar'),('effort-view','recommend','effort-delete'),('effort-view','recommend','effort-edit'),('effort-view','recommend','my-effort'),('execution-activate','depend','execution-all'),('execution-activate','recommend','execution-close'),('execution-activate','recommend','execution-create'),('execution-activate','recommend','execution-edit'),('execution-activate','recommend','execution-putoff'),('execution-activate','recommend','execution-start'),('execution-activate','recommend','execution-suspend'),('execution-addWhitelist','depend','execution-whitelist'),('execution-addWhitelist','recommend','execution-unbindWhitelist'),('execution-all','recommend','execution-create'),('execution-all','recommend','execution-doc'),('execution-all','recommend','execution-dynamic'),('execution-all','recommend','execution-edit'),('execution-all','recommend','execution-updateOrder'),('execution-all','recommend','execution-view'),('execution-batchchangestatus','depend','execution-all'),('execution-batchchangestatus','recommend','execution-edit'),('execution-batchedit','depend','execution-all'),('execution-batchedit','recommend','execution-edit'),('execution-batchUnlinkStory','depend','execution-story'),('execution-batchUnlinkStory','recommend','execution-unlinkStory'),('execution-bug','recommend','execution-testcase'),('execution-bug','recommend','execution-testreport'),('execution-bug','recommend','execution-testtask'),('execution-build','recommend','build-create'),('execution-build','recommend','build-edit'),('execution-build','recommend','build-linkBug'),('execution-build','recommend','build-linkStory'),('execution-build','recommend','build-unlinkBug'),('execution-build','recommend','build-unlinkStory'),('execution-build','recommend','build-view'),('execution-burn','recommend','execution-computeBurn'),('execution-burn','recommend','execution-fixFirst'),('execution-calendar','recommend','execution-gantt'),('execution-calendar','recommend','execution-grouptask'),('execution-calendar','recommend','execution-taskEffort'),('execution-calendar','recommend','execution-tree'),('execution-cfd','recommend','execution-computeCFD'),('execution-close','depend','execution-all'),('execution-close','recommend','execution-activate'),('execution-close','recommend','execution-create'),('execution-close','recommend','execution-edit'),('execution-close','recommend','execution-putoff'),('execution-close','recommend','execution-start'),('execution-close','recommend','execution-suspend'),('execution-computeBurn','depend','execution-burn'),('execution-computeBurn','recommend','execution-fixFirst'),('execution-computeCFD','depend','execution-cfd'),('execution-computeTaskEffort','depend','execution-taskEffort'),('execution-create','depend','execution-all'),('execution-create','recommend','execution-activate'),('execution-create','recommend','execution-close'),('execution-create','recommend','execution-edit'),('execution-create','recommend','execution-manageProducts'),('execution-create','recommend','execution-putoff'),('execution-create','recommend','execution-start'),('execution-create','recommend','execution-suspend'),('execution-delete','depend','execution-all'),('execution-delete','recommend','execution-create'),('execution-delete','recommend','execution-edit'),('execution-deleterelation','depend','execution-gantt'),('execution-deleterelation','depend','execution-relation'),('execution-doc','recommend','execution-all'),('execution-doc','recommend','execution-dynamic'),('execution-doc','recommend','execution-view'),('execution-dynamic','recommend','execution-all'),('execution-dynamic','recommend','execution-doc'),('execution-dynamic','recommend','execution-view'),('execution-edit','depend','execution-all'),('execution-edit','recommend','execution-activate'),('execution-edit','recommend','execution-batchedit'),('execution-edit','recommend','execution-close'),('execution-edit','recommend','execution-create'),('execution-edit','recommend','execution-manageProducts'),('execution-edit','recommend','execution-putoff'),('execution-edit','recommend','execution-start'),('execution-edit','recommend','execution-suspend'),('execution-executionkanban','recommend','execution-setKanban'),('execution-export','depend','execution-all'),('execution-fixFirst','depend','execution-burn'),('execution-fixFirst','recommend','execution-computeBurn'),('execution-gantt','recommend','execution-calendar'),('execution-gantt','recommend','execution-ganttEdit'),('execution-gantt','recommend','execution-ganttsetting'),('execution-gantt','recommend','execution-grouptask'),('execution-gantt','recommend','execution-taskEffort'),('execution-gantt','recommend','execution-tree'),('execution-ganttEdit','depend','execution-gantt'),('execution-ganttsetting','depend','execution-gantt'),('execution-grouptask','recommend','execution-calendar'),('execution-grouptask','recommend','execution-gantt'),('execution-grouptask','recommend','execution-taskEffort'),('execution-grouptask','recommend','execution-tree'),('execution-importBug','depend','execution-task'),('execution-importBug','recommend','task-create'),('execution-importBug','recommend','task-edit'),('execution-importplanstories','depend','execution-task'),('execution-importplanstories','recommend','task-create'),('execution-importplanstories','recommend','task-edit'),('execution-importtask','depend','execution-task'),('execution-importtask','recommend','task-create'),('execution-importtask','recommend','task-edit'),('execution-kanban','depend','execution-executionkanban'),('execution-kanban','recommend','execution-executionkanban'),('execution-kanban','recommend','execution-setKanban'),('execution-linkStory','depend','execution-story'),('execution-linkStory','recommend','execution-storyEstimate'),('execution-linkStory','recommend','execution-storyKanban'),('execution-linkStory','recommend','execution-storySort'),('execution-linkStory','recommend','execution-storyView'),('execution-linkStory','recommend','execution-unlinkStory'),('execution-maintainrelation','depend','execution-gantt'),('execution-maintainrelation','depend','execution-relation'),('execution-manageMembers','depend','execution-team'),('execution-manageMembers','recommend','execution-unlinkMember'),('execution-manageProducts','depend','execution-all'),('execution-manageProducts','recommend','execution-create'),('execution-manageProducts','recommend','execution-edit'),('execution-printKanban','depend','execution-executionkanban'),('execution-putoff','depend','execution-all'),('execution-putoff','recommend','execution-activate'),('execution-putoff','recommend','execution-close'),('execution-putoff','recommend','execution-create'),('execution-putoff','recommend','execution-edit'),('execution-putoff','recommend','execution-start'),('execution-putoff','recommend','execution-suspend'),('execution-relation','depend','execution-gantt'),('execution-relation','recommend','execution-deleterelation'),('execution-relation','recommend','execution-maintainrelation'),('execution-setKanban','depend','execution-executionkanban'),('execution-start','depend','execution-all'),('execution-start','recommend','execution-activate'),('execution-start','recommend','execution-close'),('execution-start','recommend','execution-create'),('execution-start','recommend','execution-edit'),('execution-start','recommend','execution-putoff'),('execution-start','recommend','execution-suspend'),('execution-story','recommend','execution-linkStory'),('execution-story','recommend','execution-storyEstimate'),('execution-story','recommend','execution-storyKanban'),('execution-story','recommend','execution-storySort'),('execution-story','recommend','execution-storyView'),('execution-story','recommend','execution-unlinkStory'),('execution-storyEstimate','depend','execution-story'),('execution-storyEstimate','recommend','execution-linkStory'),('execution-storyEstimate','recommend','execution-storyKanban'),('execution-storyEstimate','recommend','execution-storySort'),('execution-storyEstimate','recommend','execution-storyView'),('execution-storyEstimate','recommend','execution-unlinkStory'),('execution-storyKanban','depend','execution-story'),('execution-storyKanban','recommend','execution-linkStory'),('execution-storyKanban','recommend','execution-storyEstimate'),('execution-storyKanban','recommend','execution-storySort'),('execution-storyKanban','recommend','execution-storyView'),('execution-storyKanban','recommend','execution-unlinkStory'),('execution-storySort','depend','execution-story'),('execution-storySort','recommend','execution-linkStory'),('execution-storySort','recommend','execution-storyEstimate'),('execution-storySort','recommend','execution-storyKanban'),('execution-storySort','recommend','execution-storyView'),('execution-storySort','recommend','execution-unlinkStory'),('execution-storyView','depend','execution-story'),('execution-storyView','recommend','execution-linkStory'),('execution-storyView','recommend','execution-storyEstimate'),('execution-storyView','recommend','execution-storyKanban'),('execution-storyView','recommend','execution-storySort'),('execution-storyView','recommend','execution-unlinkStory'),('execution-suspend','depend','execution-all'),('execution-suspend','recommend','execution-activate'),('execution-suspend','recommend','execution-close'),('execution-suspend','recommend','execution-create'),('execution-suspend','recommend','execution-edit'),('execution-suspend','recommend','execution-putoff'),('execution-suspend','recommend','execution-start'),('execution-task','recommend','task-create'),('execution-task','recommend','task-report'),('execution-task','recommend','task-view'),('execution-taskEffort','recommend','execution-calendar'),('execution-taskEffort','recommend','execution-computeTaskEffort'),('execution-taskEffort','recommend','execution-gantt'),('execution-taskEffort','recommend','execution-grouptask'),('execution-taskEffort','recommend','execution-tree'),('execution-taskKanban','depend','execution-executionkanban'),('execution-taskKanban','recommend','execution-executionkanban'),('execution-taskKanban','recommend','execution-setKanban'),('execution-team','recommend','execution-manageMembers'),('execution-team','recommend','execution-unlinkMember'),('execution-testcase','recommend','execution-testreport'),('execution-testcase','recommend','execution-testtask'),('execution-testreport','recommend','execution-testcase'),('execution-testreport','recommend','execution-testtask'),('execution-testtask','recommend','execution-testcase'),('execution-testtask','recommend','execution-testreport'),('execution-tree','recommend','execution-calendar'),('execution-tree','recommend','execution-gantt'),('execution-tree','recommend','execution-grouptask'),('execution-tree','recommend','execution-taskEffort'),('execution-tree','recommend','execution-treeStory'),('execution-tree','recommend','execution-treeTask'),('execution-treeStory','depend','execution-tree'),('execution-treeStory','recommend','execution-treeTask'),('execution-treeTask','depend','execution-tree'),('execution-treeTask','recommend','execution-treeStory'),('execution-unbindWhitelist','depend','execution-whitelist'),('execution-unbindWhitelist','recommend','execution-addWhitelist'),('execution-unlinkMember','depend','execution-team'),('execution-unlinkMember','recommend','execution-manageMembers'),('execution-unlinkStory','depend','execution-story'),('execution-unlinkStory','recommend','execution-linkStory'),('execution-unlinkStory','recommend','execution-storyEstimate'),('execution-unlinkStory','recommend','execution-storyKanban'),('execution-unlinkStory','recommend','execution-storySort'),('execution-unlinkStory','recommend','execution-storyView'),('execution-updateOrder','depend','execution-all'),('execution-updateOrder','recommend','execution-all'),('execution-updateOrder','recommend','execution-doc'),('execution-updateOrder','recommend','execution-dynamic'),('execution-updateOrder','recommend','execution-view'),('execution-view','recommend','execution-all'),('execution-view','recommend','execution-doc'),('execution-view','recommend','execution-dynamic'),('execution-whitelist','recommend','execution-addWhitelist'),('execution-whitelist','recommend','execution-unbindWhitelist'),('extension-activate','depend','extension-browse'),('extension-activate','recommend','extension-deactivate'),('extension-activate','recommend','extension-erase'),('extension-activate','recommend','extension-install'),('extension-activate','recommend','extension-obtain'),('extension-activate','recommend','extension-structure'),('extension-activate','recommend','extension-uninstall'),('extension-activate','recommend','extension-upgrade'),('extension-activate','recommend','extension-upload'),('extension-deactivate','depend','extension-browse'),('extension-deactivate','recommend','extension-activate'),('extension-deactivate','recommend','extension-erase'),('extension-deactivate','recommend','extension-install'),('extension-deactivate','recommend','extension-obtain'),('extension-deactivate','recommend','extension-structure'),('extension-deactivate','recommend','extension-uninstall'),('extension-deactivate','recommend','extension-upgrade'),('extension-deactivate','recommend','extension-upload'),('extension-erase','depend','extension-browse'),('extension-erase','recommend','extension-activate'),('extension-erase','recommend','extension-deactivate'),('extension-erase','recommend','extension-install'),('extension-erase','recommend','extension-obtain'),('extension-erase','recommend','extension-structure'),('extension-erase','recommend','extension-uninstall'),('extension-erase','recommend','extension-upgrade'),('extension-erase','recommend','extension-upload'),('extension-install','depend','extension-browse'),('extension-install','recommend','extension-activate'),('extension-install','recommend','extension-deactivate'),('extension-install','recommend','extension-erase'),('extension-install','recommend','extension-obtain'),('extension-install','recommend','extension-structure'),('extension-install','recommend','extension-uninstall'),('extension-install','recommend','extension-upgrade'),('extension-install','recommend','extension-upload'),('extension-obtain','depend','extension-browse'),('extension-obtain','recommend','extension-activate'),('extension-obtain','recommend','extension-deactivate'),('extension-obtain','recommend','extension-erase'),('extension-obtain','recommend','extension-install'),('extension-obtain','recommend','extension-structure'),('extension-obtain','recommend','extension-uninstall'),('extension-obtain','recommend','extension-upgrade'),('extension-obtain','recommend','extension-upload'),('extension-structure','depend','extension-browse'),('extension-structure','recommend','extension-activate'),('extension-structure','recommend','extension-deactivate'),('extension-structure','recommend','extension-erase'),('extension-structure','recommend','extension-install'),('extension-structure','recommend','extension-obtain'),('extension-structure','recommend','extension-uninstall'),('extension-structure','recommend','extension-upgrade'),('extension-structure','recommend','extension-upload'),('extension-uninstall','depend','extension-browse'),('extension-uninstall','recommend','extension-activate'),('extension-uninstall','recommend','extension-deactivate'),('extension-uninstall','recommend','extension-erase'),('extension-uninstall','recommend','extension-install'),('extension-uninstall','recommend','extension-obtain'),('extension-uninstall','recommend','extension-structure'),('extension-uninstall','recommend','extension-upgrade'),('extension-uninstall','recommend','extension-upload'),('extension-upgrade','depend','extension-browse'),('extension-upgrade','recommend','extension-activate'),('extension-upgrade','recommend','extension-deactivate'),('extension-upgrade','recommend','extension-erase'),('extension-upgrade','recommend','extension-install'),('extension-upgrade','recommend','extension-obtain'),('extension-upgrade','recommend','extension-structure'),('extension-upgrade','recommend','extension-uninstall'),('extension-upgrade','recommend','extension-upload'),('extension-upload','depend','extension-browse'),('extension-upload','recommend','extension-activate'),('extension-upload','recommend','extension-deactivate'),('extension-upload','recommend','extension-erase'),('extension-upload','recommend','extension-install'),('extension-upload','recommend','extension-obtain'),('extension-upload','recommend','extension-structure'),('extension-upload','recommend','extension-uninstall'),('extension-upload','recommend','extension-upgrade'),('faq-browse','recommend','faq-create'),('faq-browse','recommend','faq-edit'),('faq-create','depend','faq-browse'),('faq-create','recommend','faq-edit'),('faq-delete','depend','faq-browse'),('faq-delete','recommend','faq-create'),('faq-delete','recommend','faq-edit'),('faq-edit','depend','faq-browse'),('faq-edit','recommend','faq-create'),('feedback-activate','depend','feedback-admin'),('feedback-activate','recommend','feedback-ask'),('feedback-activate','recommend','feedback-assignTo'),('feedback-activate','recommend','feedback-close'),('feedback-activate','recommend','feedback-comment'),('feedback-activate','recommend','feedback-create'),('feedback-activate','recommend','feedback-edit'),('feedback-admin','recommend','feedback-adminView'),('feedback-adminView','depend','feedback-admin'),('feedback-adminView','recommend','feedback-create'),('feedback-adminView','recommend','feedback-edit'),('feedback-ask','depend','feedback-admin'),('feedback-ask','recommend','feedback-activate'),('feedback-ask','recommend','feedback-assignTo'),('feedback-ask','recommend','feedback-close'),('feedback-ask','recommend','feedback-comment'),('feedback-ask','recommend','feedback-create'),('feedback-ask','recommend','feedback-edit'),('feedback-assignTo','depend','feedback-admin'),('feedback-assignTo','recommend','feedback-activate'),('feedback-assignTo','recommend','feedback-ask'),('feedback-assignTo','recommend','feedback-batchAssignTo'),('feedback-assignTo','recommend','feedback-close'),('feedback-assignTo','recommend','feedback-comment'),('feedback-assignTo','recommend','feedback-create'),('feedback-assignTo','recommend','feedback-edit'),('feedback-batchAssignTo','depend','feedback-admin'),('feedback-batchAssignTo','recommend','feedback-assignTo'),('feedback-batchClose','depend','feedback-admin'),('feedback-batchClose','recommend','feedback-close'),('feedback-batchEdit','depend','feedback-admin'),('feedback-batchEdit','recommend','feedback-edit'),('feedback-batchReview','depend','feedback-admin'),('feedback-batchReview','recommend','feedback-review'),('feedback-close','depend','feedback-admin'),('feedback-close','recommend','feedback-activate'),('feedback-close','recommend','feedback-ask'),('feedback-close','recommend','feedback-assignTo'),('feedback-close','recommend','feedback-batchClose'),('feedback-close','recommend','feedback-comment'),('feedback-close','recommend','feedback-create'),('feedback-close','recommend','feedback-edit'),('feedback-comment','depend','feedback-admin'),('feedback-comment','recommend','feedback-activate'),('feedback-comment','recommend','feedback-ask'),('feedback-comment','recommend','feedback-assignTo'),('feedback-comment','recommend','feedback-close'),('feedback-comment','recommend','feedback-create'),('feedback-comment','recommend','feedback-edit'),('feedback-create','depend','feedback-admin'),('feedback-create','recommend','feedback-activate'),('feedback-create','recommend','feedback-ask'),('feedback-create','recommend','feedback-assignTo'),('feedback-create','recommend','feedback-close'),('feedback-create','recommend','feedback-comment'),('feedback-create','recommend','feedback-edit'),('feedback-delete','depend','feedback-admin'),('feedback-delete','recommend','feedback-create'),('feedback-delete','recommend','feedback-edit'),('feedback-edit','depend','feedback-admin'),('feedback-edit','recommend','feedback-activate'),('feedback-edit','recommend','feedback-ask'),('feedback-edit','recommend','feedback-assignTo'),('feedback-edit','recommend','feedback-batchEdit'),('feedback-edit','recommend','feedback-close'),('feedback-edit','recommend','feedback-comment'),('feedback-edit','recommend','feedback-create'),('feedback-editOthers','depend','feedback-admin'),('feedback-editOthers','recommend','feedback-edit'),('feedback-export','depend','feedback-admin'),('feedback-exportTemplate','depend','feedback-admin'),('feedback-exportTemplate','depend','feedback-import'),('feedback-import','depend','feedback-admin'),('feedback-import','depend','feedback-exportTemplate'),('feedback-manageProduct','depend','feedback-products'),('feedback-manageProduct','recommend','feedback-productSetting'),('feedback-products','recommend','feedback-manageProduct'),('feedback-products','recommend','feedback-productSetting'),('feedback-productSetting','depend','feedback-products'),('feedback-productSetting','recommend','feedback-manageProduct'),('feedback-reply','depend','feedback-admin'),('feedback-reply','recommend','feedback-review'),('feedback-reply','recommend','feedback-toBug'),('feedback-reply','recommend','feedback-toStory'),('feedback-reply','recommend','feedback-toTask'),('feedback-reply','recommend','feedback-toTicket'),('feedback-reply','recommend','feedback-toTodo'),('feedback-reply','recommend','feedback-toUserStory'),('feedback-review','depend','feedback-admin'),('feedback-review','recommend','feedback-batchReview'),('feedback-review','recommend','feedback-reply'),('feedback-review','recommend','feedback-toBug'),('feedback-review','recommend','feedback-toStory'),('feedback-review','recommend','feedback-toTask'),('feedback-review','recommend','feedback-toTicket'),('feedback-review','recommend','feedback-toTodo'),('feedback-review','recommend','feedback-toUserStory'),('feedback-syncProduct','depend','feedback-admin'),('feedback-toBug','depend','feedback-admin'),('feedback-toBug','recommend','feedback-reply'),('feedback-toBug','recommend','feedback-review'),('feedback-toBug','recommend','feedback-toStory'),('feedback-toBug','recommend','feedback-toTask'),('feedback-toBug','recommend','feedback-toTicket'),('feedback-toBug','recommend','feedback-toTodo'),('feedback-toBug','recommend','feedback-toUserStory'),('feedback-toStory','depend','feedback-admin'),('feedback-toStory','recommend','feedback-reply'),('feedback-toStory','recommend','feedback-review'),('feedback-toStory','recommend','feedback-toBug'),('feedback-toStory','recommend','feedback-toTask'),('feedback-toStory','recommend','feedback-toTicket'),('feedback-toStory','recommend','feedback-toTodo'),('feedback-toStory','recommend','feedback-toUserStory'),('feedback-toTask','depend','feedback-admin'),('feedback-toTask','recommend','feedback-reply'),('feedback-toTask','recommend','feedback-review'),('feedback-toTask','recommend','feedback-toBug'),('feedback-toTask','recommend','feedback-toStory'),('feedback-toTask','recommend','feedback-toTicket'),('feedback-toTask','recommend','feedback-toTodo'),('feedback-toTask','recommend','feedback-toUserStory'),('feedback-toTicket','depend','feedback-admin'),('feedback-toTicket','recommend','feedback-reply'),('feedback-toTicket','recommend','feedback-review'),('feedback-toTicket','recommend','feedback-toBug'),('feedback-toTicket','recommend','feedback-toStory'),('feedback-toTicket','recommend','feedback-toTask'),('feedback-toTicket','recommend','feedback-toTodo'),('feedback-toTicket','recommend','feedback-toUserStory'),('feedback-toTodo','depend','feedback-admin'),('feedback-toTodo','recommend','feedback-reply'),('feedback-toTodo','recommend','feedback-review'),('feedback-toTodo','recommend','feedback-toBug'),('feedback-toTodo','recommend','feedback-toStory'),('feedback-toTodo','recommend','feedback-toTask'),('feedback-toTodo','recommend','feedback-toTicket'),('feedback-toTodo','recommend','feedback-toUserStory'),('feedback-toUserStory','depend','feedback-admin'),('feedback-toUserStory','recommend','feedback-reply'),('feedback-toUserStory','recommend','feedback-review'),('feedback-toUserStory','recommend','feedback-toBug'),('feedback-toUserStory','recommend','feedback-toStory'),('feedback-toUserStory','recommend','feedback-toTask'),('feedback-toUserStory','recommend','feedback-toTicket'),('feedback-toUserStory','recommend','feedback-toTodo'),('file-delete','recommend','file-edit'),('gapanalysis-batchCreate','depend','gapanalysis-browse'),('gapanalysis-batchCreate','recommend','gapanalysis-create'),('gapanalysis-batchEdit','depend','gapanalysis-browse'),('gapanalysis-batchEdit','recommend','gapanalysis-batchCreate'),('gapanalysis-batchEdit','recommend','gapanalysis-edit'),('gapanalysis-create','depend','gapanalysis-browse'),('gapanalysis-create','recommend','gapanalysis-batchCreate'),('gapanalysis-create','recommend','gapanalysis-delete'),('gapanalysis-create','recommend','gapanalysis-edit'),('gapanalysis-delete','depend','gapanalysis-view'),('gapanalysis-delete','recommend','gapanalysis-create'),('gapanalysis-edit','depend','gapanalysis-browse'),('gapanalysis-edit','recommend','gapanalysis-batchEdit'),('gapanalysis-edit','recommend','gapanalysis-create'),('gapanalysis-edit','recommend','gapanalysis-delete'),('gapanalysis-view','depend','gapanalysis-browse'),('git-apiSync','recommend','git-cat'),('git-apiSync','recommend','git-diff'),('git-cat','recommend','git-apiSync'),('git-cat','recommend','git-diff'),('git-diff','recommend','git-apiSync'),('git-diff','recommend','git-cat'),('gitea-bindUser','depend','gitlab-browse'),('gitea-bindUser','recommend','gitea-create'),('gitea-bindUser','recommend','gitea-edit'),('gitea-bindUser','recommend','gitea-view'),('gitea-browse','recommend','gitea-create'),('gitea-browse','recommend','gitea-edit'),('gitea-browse','recommend','gitea-view'),('gitea-create','depend','gitea-browse'),('gitea-create','recommend','gitea-edit'),('gitea-create','recommend','gitea-view'),('gitea-delete','depend','gitea-browse'),('gitea-delete','recommend','gitea-create'),('gitea-delete','recommend','gitea-edit'),('gitea-delete','recommend','gitea-view'),('gitea-edit','depend','gitea-browse'),('gitea-edit','recommend','gitea-create'),('gitea-edit','recommend','gitea-view'),('gitea-view','depend','gitea-browse'),('gitea-view','recommend','gitea-create'),('gitea-view','recommend','gitea-edit'),('gitlab-bindUser','depend','gitlab-browse'),('gitlab-bindUser','recommend','gitea-bindUser'),('gitlab-bindUser','recommend','gitlab-createWebhook'),('gitlab-bindUser','recommend','gitlab-importIssue'),('gitlab-browse','recommend','gitlab-create'),('gitlab-browse','recommend','gitlab-edit'),('gitlab-browse','recommend','gitlab-view'),('gitlab-browseBranch','depend','gitlab-browse'),('gitlab-browseBranch','recommend','gitlab-createBranch'),('gitlab-browseBranch','recommend','gitlab-manageBranchPriv'),('gitlab-browseGroup','depend','gitlab-browse'),('gitlab-browseGroup','recommend','gitlab-createGroup'),('gitlab-browseGroup','recommend','gitlab-editGroup'),('gitlab-browseGroup','recommend','gitlab-manageGroupMembers'),('gitlab-browseProject','depend','gitlab-browse'),('gitlab-browseProject','recommend','gitlab-createProject'),('gitlab-browseProject','recommend','gitlab-editProject'),('gitlab-browseTag','depend','gitlab-browse'),('gitlab-browseTag','recommend','gitlab-createTag'),('gitlab-browseTag','recommend','gitlab-manageTagPriv'),('gitlab-browseUser','depend','gitlab-browse'),('gitlab-browseUser','recommend','gitlab-createUser'),('gitlab-browseUser','recommend','gitlab-editUser'),('gitlab-create','depend','gitlab-browse'),('gitlab-create','recommend','gitlab-edit'),('gitlab-create','recommend','gitlab-view'),('gitlab-createBranch','depend','gitlab-browse'),('gitlab-createBranch','depend','gitlab-browseBranch'),('gitlab-createBranch','recommend','gitlab-browseBranch'),('gitlab-createBranch','recommend','gitlab-manageBranchPriv'),('gitlab-createGroup','depend','gitlab-browse'),('gitlab-createGroup','depend','gitlab-browseGroup'),('gitlab-createGroup','recommend','gitlab-editGroup'),('gitlab-createGroup','recommend','gitlab-manageGroupMembers'),('gitlab-createProject','depend','gitlab-browse'),('gitlab-createProject','depend','gitlab-browseProject'),('gitlab-createProject','recommend','gitlab-editProject'),('gitlab-createTag','depend','gitlab-browse'),('gitlab-createTag','depend','gitlab-browseTag'),('gitlab-createTag','recommend','gitlab-manageTagPriv'),('gitlab-createUser','depend','gitlab-browse'),('gitlab-createUser','depend','gitlab-browseUser'),('gitlab-createUser','recommend','gitlab-editUser'),('gitlab-createWebhook','depend','gitlab-browse'),('gitlab-createWebhook','recommend','gitea-bindUser'),('gitlab-createWebhook','recommend','gitlab-bindUser'),('gitlab-createWebhook','recommend','gitlab-importIssue'),('gitlab-delete','depend','gitlab-browse'),('gitlab-delete','recommend','gitlab-create'),('gitlab-delete','recommend','gitlab-edit'),('gitlab-delete','recommend','gitlab-view'),('gitlab-deleteGroup','depend','gitlab-browse'),('gitlab-deleteGroup','depend','gitlab-browseGroup'),('gitlab-deleteGroup','recommend','gitlab-createGroup'),('gitlab-deleteGroup','recommend','gitlab-editGroup'),('gitlab-deleteGroup','recommend','gitlab-manageGroupMembers'),('gitlab-deleteProject','depend','gitlab-browse'),('gitlab-deleteProject','depend','gitlab-browseProject'),('gitlab-deleteProject','recommend','gitlab-createProject'),('gitlab-deleteProject','recommend','gitlab-editProject'),('gitlab-deleteTag','depend','gitlab-browse'),('gitlab-deleteTag','depend','gitlab-browseTag'),('gitlab-deleteTag','recommend','gitlab-createTag'),('gitlab-deleteTag','recommend','gitlab-manageTagPriv'),('gitlab-deleteUser','depend','gitlab-browse'),('gitlab-deleteUser','depend','gitlab-browseUser'),('gitlab-deleteUser','recommend','gitlab-createUser'),('gitlab-deleteUser','recommend','gitlab-editUser'),('gitlab-edit','depend','gitlab-browse'),('gitlab-edit','recommend','gitlab-create'),('gitlab-edit','recommend','gitlab-view'),('gitlab-editGroup','depend','gitlab-browse'),('gitlab-editGroup','depend','gitlab-browseGroup'),('gitlab-editGroup','recommend','gitlab-createGroup'),('gitlab-editGroup','recommend','gitlab-manageGroupMembers'),('gitlab-editProject','depend','gitlab-browse'),('gitlab-editProject','depend','gitlab-browseProject'),('gitlab-editProject','recommend','gitlab-createProject'),('gitlab-editUser','depend','gitlab-browse'),('gitlab-editUser','depend','gitlab-browseUser'),('gitlab-editUser','recommend','gitlab-createUser'),('gitlab-importIssue','depend','gitlab-browse'),('gitlab-importIssue','recommend','gitea-bindUser'),('gitlab-importIssue','recommend','gitlab-bindUser'),('gitlab-importIssue','recommend','gitlab-createWebhook'),('gitlab-manageBranchPriv','depend','gitlab-browse'),('gitlab-manageBranchPriv','depend','gitlab-browseBranch'),('gitlab-manageBranchPriv','recommend','gitlab-browseBranch'),('gitlab-manageBranchPriv','recommend','gitlab-createBranch'),('gitlab-manageGroupMembers','depend','gitlab-browse'),('gitlab-manageGroupMembers','depend','gitlab-browseGroup'),('gitlab-manageGroupMembers','recommend','gitlab-createGroup'),('gitlab-manageGroupMembers','recommend','gitlab-editGroup'),('gitlab-manageProjectMembers','depend','gitlab-browse'),('gitlab-manageProjectMembers','depend','gitlab-browseProject'),('gitlab-manageProjectMembers','recommend','gitlab-createProject'),('gitlab-manageProjectMembers','recommend','gitlab-editProject'),('gitlab-manageTagPriv','depend','gitlab-browse'),('gitlab-manageTagPriv','depend','gitlab-browseTag'),('gitlab-manageTagPriv','recommend','gitlab-createTag'),('gitlab-view','depend','gitlab-browse'),('gitlab-view','recommend','gitlab-create'),('gitlab-view','recommend','gitlab-edit'),('gitlab-webhook','depend','gitlab-browse'),('gogs-bindUser','depend','gogs-browse'),('gogs-bindUser','recommend','gogs-create'),('gogs-bindUser','recommend','gogs-edit'),('gogs-bindUser','recommend','gogs-view'),('gogs-browse','recommend','gogs-bindUser'),('gogs-browse','recommend','gogs-create'),('gogs-browse','recommend','gogs-edit'),('gogs-browse','recommend','gogs-view'),('gogs-create','depend','gogs-browse'),('gogs-create','recommend','gogs-bindUser'),('gogs-create','recommend','gogs-edit'),('gogs-create','recommend','gogs-view'),('gogs-delete','depend','gogs-browse'),('gogs-delete','recommend','gogs-bindUser'),('gogs-delete','recommend','gogs-create'),('gogs-delete','recommend','gogs-edit'),('gogs-delete','recommend','gogs-view'),('gogs-edit','depend','gogs-browse'),('gogs-edit','recommend','gogs-bindUser'),('gogs-edit','recommend','gogs-create'),('gogs-edit','recommend','gogs-view'),('gogs-view','depend','gogs-browse'),('gogs-view','recommend','gogs-bindUser'),('gogs-view','recommend','gogs-create'),('gogs-view','recommend','gogs-edit'),('group-browse','depend','admin-index'),('group-browse','depend','admin-register'),('group-copy','depend','admin-index'),('group-copy','depend','admin-register'),('group-copy','depend','group-browse'),('group-copy','recommend','group-create'),('group-copy','recommend','group-delete'),('group-copy','recommend','group-edit'),('group-copy','recommend','group-manageMember'),('group-copy','recommend','group-manageProjectAdmin'),('group-copy','recommend','group-manageView'),('group-create','depend','admin-index'),('group-create','depend','admin-register'),('group-create','depend','group-browse'),('group-create','recommend','group-copy'),('group-create','recommend','group-delete'),('group-create','recommend','group-edit'),('group-create','recommend','group-manageMember'),('group-create','recommend','group-manageProjectAdmin'),('group-create','recommend','group-manageView'),('group-delete','depend','admin-index'),('group-delete','depend','admin-register'),('group-delete','depend','group-browse'),('group-delete','recommend','group-copy'),('group-delete','recommend','group-create'),('group-delete','recommend','group-edit'),('group-delete','recommend','group-manageMember'),('group-delete','recommend','group-manageProjectAdmin'),('group-delete','recommend','group-manageView'),('group-edit','depend','admin-index'),('group-edit','depend','admin-register'),('group-edit','depend','group-browse'),('group-edit','recommend','group-copy'),('group-edit','recommend','group-create'),('group-edit','recommend','group-delete'),('group-edit','recommend','group-manageMember'),('group-edit','recommend','group-manageProjectAdmin'),('group-edit','recommend','group-manageView'),('group-manageMember','depend','admin-index'),('group-manageMember','depend','admin-register'),('group-manageMember','depend','group-browse'),('group-manageMember','recommend','group-copy'),('group-manageMember','recommend','group-create'),('group-manageMember','recommend','group-delete'),('group-manageMember','recommend','group-edit'),('group-manageMember','recommend','group-manageProjectAdmin'),('group-manageMember','recommend','group-manageView'),('group-managePriv','depend','admin-index'),('group-managePriv','depend','admin-register'),('group-managePriv','depend','group-browse'),('group-manageProjectAdmin','depend','admin-index'),('group-manageProjectAdmin','depend','admin-register'),('group-manageProjectAdmin','depend','group-browse'),('group-manageProjectAdmin','recommend','group-copy'),('group-manageProjectAdmin','recommend','group-create'),('group-manageProjectAdmin','recommend','group-delete'),('group-manageProjectAdmin','recommend','group-edit'),('group-manageProjectAdmin','recommend','group-manageMember'),('group-manageProjectAdmin','recommend','group-manageView'),('group-manageView','depend','admin-index'),('group-manageView','depend','admin-register'),('group-manageView','depend','group-browse'),('group-manageView','recommend','group-copy'),('group-manageView','recommend','group-create'),('group-manageView','recommend','group-delete'),('group-manageView','recommend','group-edit'),('group-manageView','recommend','group-manageMember'),('group-manageView','recommend','group-manageProjectAdmin'),('holiday-create','depend','holiday-browse'),('holiday-create','recommend','holiday-delete'),('holiday-create','recommend','holiday-edit'),('holiday-delete','depend','holiday-browse'),('holiday-delete','recommend','holiday-create'),('holiday-delete','recommend','holiday-edit'),('holiday-edit','depend','holiday-browse'),('holiday-edit','recommend','holiday-create'),('holiday-import','depend','holiday-browse'),('holiday-import','recommend','holiday-create'),('host-browse','depend','ops-index'),('host-browse','recommend','host-create'),('host-browse','recommend','host-edit'),('host-browse','recommend','host-treemap'),('host-browse','recommend','host-view'),('host-changeStatus','depend','host-browse'),('host-changeStatus','depend','ops-index'),('host-changeStatus','recommend','host-create'),('host-changeStatus','recommend','host-edit'),('host-create','depend','host-browse'),('host-create','depend','ops-index'),('host-create','recommend','host-changeStatus'),('host-create','recommend','host-edit'),('host-delete','depend','host-browse'),('host-delete','depend','ops-index'),('host-delete','recommend','host-create'),('host-delete','recommend','host-edit'),('host-edit','depend','host-browse'),('host-edit','depend','ops-index'),('host-edit','recommend','host-changeStatus'),('host-edit','recommend','host-create'),('host-treemap','depend','host-browse'),('host-treemap','depend','ops-index'),('host-view','depend','host-browse'),('host-view','depend','ops-index'),('host-view','recommend','host-create'),('host-view','recommend','host-edit'),('issue-activate','depend','issue-browse'),('issue-activate','depend','issue-view'),('issue-activate','recommend','issue-assignTo'),('issue-activate','recommend','issue-cancel'),('issue-activate','recommend','issue-close'),('issue-activate','recommend','issue-confirm'),('issue-activate','recommend','issue-create'),('issue-activate','recommend','issue-edit'),('issue-activate','recommend','issue-resolve'),('issue-assignTo','depend','issue-browse'),('issue-assignTo','depend','issue-view'),('issue-assignTo','recommend','issue-activate'),('issue-assignTo','recommend','issue-cancel'),('issue-assignTo','recommend','issue-close'),('issue-assignTo','recommend','issue-confirm'),('issue-assignTo','recommend','issue-create'),('issue-assignTo','recommend','issue-edit'),('issue-assignTo','recommend','issue-resolve'),('issue-batchCreate','depend','issue-browse'),('issue-batchCreate','recommend','issue-create'),('issue-batchImportToLib','depend','issue-browse'),('issue-batchImportToLib','recommend','issue-importToLib'),('issue-browse','recommend','issue-view'),('issue-cancel','depend','issue-browse'),('issue-cancel','depend','issue-view'),('issue-cancel','recommend','issue-activate'),('issue-cancel','recommend','issue-assignTo'),('issue-cancel','recommend','issue-close'),('issue-cancel','recommend','issue-confirm'),('issue-cancel','recommend','issue-create'),('issue-cancel','recommend','issue-edit'),('issue-cancel','recommend','issue-resolve'),('issue-close','depend','issue-browse'),('issue-close','depend','issue-view'),('issue-close','recommend','issue-activate'),('issue-close','recommend','issue-assignTo'),('issue-close','recommend','issue-cancel'),('issue-close','recommend','issue-confirm'),('issue-close','recommend','issue-create'),('issue-close','recommend','issue-edit'),('issue-close','recommend','issue-resolve'),('issue-confirm','depend','issue-browse'),('issue-confirm','depend','issue-view'),('issue-confirm','recommend','issue-activate'),('issue-confirm','recommend','issue-assignTo'),('issue-confirm','recommend','issue-cancel'),('issue-confirm','recommend','issue-close'),('issue-confirm','recommend','issue-create'),('issue-confirm','recommend','issue-edit'),('issue-confirm','recommend','issue-resolve'),('issue-create','depend','issue-browse'),('issue-create','depend','issue-view'),('issue-create','recommend','issue-activate'),('issue-create','recommend','issue-assignTo'),('issue-create','recommend','issue-batchCreate'),('issue-create','recommend','issue-cancel'),('issue-create','recommend','issue-close'),('issue-create','recommend','issue-confirm'),('issue-create','recommend','issue-edit'),('issue-create','recommend','issue-resolve'),('issue-delete','depend','issue-browse'),('issue-edit','depend','issue-browse'),('issue-edit','depend','issue-view'),('issue-edit','recommend','issue-activate'),('issue-edit','recommend','issue-assignTo'),('issue-edit','recommend','issue-cancel'),('issue-edit','recommend','issue-close'),('issue-edit','recommend','issue-confirm'),('issue-edit','recommend','issue-create'),('issue-edit','recommend','issue-resolve'),('issue-export','depend','issue-browse'),('issue-importFromLib','depend','issue-browse'),('issue-importFromLib','recommend','assetlib-issue'),('issue-importFromLib','recommend','assetlib-issuelib'),('issue-importToLib','depend','issue-view'),('issue-importToLib','recommend','issue-batchImportToLib'),('issue-resolve','depend','issue-browse'),('issue-resolve','depend','issue-view'),('issue-resolve','recommend','issue-activate'),('issue-resolve','recommend','issue-assignTo'),('issue-resolve','recommend','issue-cancel'),('issue-resolve','recommend','issue-close'),('issue-resolve','recommend','issue-confirm'),('issue-resolve','recommend','issue-create'),('issue-resolve','recommend','issue-edit'),('issue-view','depend','issue-browse'),('jenkins-browse','recommend','jenkins-create'),('jenkins-browse','recommend','jenkins-edit'),('jenkins-create','depend','jenkins-browse'),('jenkins-create','recommend','jenkins-edit'),('jenkins-delete','depend','jenkins-browse'),('jenkins-delete','recommend','jenkins-create'),('jenkins-delete','recommend','jenkins-edit'),('jenkins-edit','depend','jenkins-browse'),('jenkins-edit','recommend','jenkins-create'),('job-browse','recommend','job-create'),('job-browse','recommend','job-edit'),('job-create','depend','job-browse'),('job-create','recommend','job-edit'),('job-delete','depend','job-browse'),('job-delete','recommend','job-create'),('job-delete','recommend','job-edit'),('job-edit','depend','job-browse'),('job-edit','recommend','job-create'),('job-exec','depend','job-browse'),('job-exec','recommend','compile-browse'),('job-exec','recommend','compile-logs'),('job-exec','recommend','job-view'),('job-view','depend','job-browse'),('job-view','recommend','compile-browse'),('job-view','recommend','compile-logs'),('job-view','recommend','job-exec'),('kanban-activate','depend','kanban-view'),('kanban-activate','recommend','kanban-close'),('kanban-activate','recommend','kanban-create'),('kanban-activate','recommend','kanban-edit'),('kanban-activate','recommend','kanban-setting'),('kanban-activateSpace','depend','kanban-space'),('kanban-activateSpace','recommend','kanban-closeSpace'),('kanban-activateSpace','recommend','kanban-createSpace'),('kanban-activateSpace','recommend','kanban-editSpace'),('kanban-archiveCard','depend','kanban-view'),('kanban-archiveCard','recommend','kanban-createCard'),('kanban-archiveCard','recommend','kanban-deleteCard'),('kanban-archiveCard','recommend','kanban-editCard'),('kanban-archiveCard','recommend','kanban-moveCard'),('kanban-archiveCard','recommend','kanban-restoreCard'),('kanban-archiveCard','recommend','kanban-setCardColor'),('kanban-archiveCard','recommend','kanban-sortCard'),('kanban-archiveCard','recommend','kanban-viewArchivedCard'),('kanban-archiveCard','recommend','kanban-viewCard'),('kanban-archiveColumn','depend','kanban-view'),('kanban-archiveColumn','recommend','kanban-createColumn'),('kanban-archiveColumn','recommend','kanban-deleteColumn'),('kanban-archiveColumn','recommend','kanban-restoreColumn'),('kanban-archiveColumn','recommend','kanban-setColumn'),('kanban-archiveColumn','recommend','kanban-setWIP'),('kanban-archiveColumn','recommend','kanban-sortColumn'),('kanban-archiveColumn','recommend','kanban-splitColumn'),('kanban-archiveColumn','recommend','kanban-viewArchivedColumn'),('kanban-assigntoCard','depend','kanban-view'),('kanban-assigntoCard','recommend','kanban-archiveCard'),('kanban-assigntoCard','recommend','kanban-createCard'),('kanban-assigntoCard','recommend','kanban-deleteCard'),('kanban-assigntoCard','recommend','kanban-editCard'),('kanban-assigntoCard','recommend','kanban-moveCard'),('kanban-assigntoCard','recommend','kanban-restoreCard'),('kanban-assigntoCard','recommend','kanban-setCardColor'),('kanban-assigntoCard','recommend','kanban-sortCard'),('kanban-assigntoCard','recommend','kanban-viewArchivedCard'),('kanban-assigntoCard','recommend','kanban-viewCard'),('kanban-batchCreateCard','depend','kanban-view'),('kanban-batchCreateCard','recommend','kanban-createCard'),('kanban-close','depend','kanban-view'),('kanban-close','recommend','kanban-activate'),('kanban-close','recommend','kanban-create'),('kanban-close','recommend','kanban-edit'),('kanban-close','recommend','kanban-setting'),('kanban-closeSpace','depend','kanban-space'),('kanban-closeSpace','recommend','kanban-activateSpace'),('kanban-closeSpace','recommend','kanban-createSpace'),('kanban-closeSpace','recommend','kanban-editSpace'),('kanban-create','depend','kanban-view'),('kanban-create','recommend','kanban-activate'),('kanban-create','recommend','kanban-close'),('kanban-create','recommend','kanban-edit'),('kanban-create','recommend','kanban-setting'),('kanban-createCard','depend','kanban-view'),('kanban-createCard','recommend','kanban-archiveCard'),('kanban-createCard','recommend','kanban-batchCreateCard'),('kanban-createCard','recommend','kanban-deleteCard'),('kanban-createCard','recommend','kanban-editCard'),('kanban-createCard','recommend','kanban-moveCard'),('kanban-createCard','recommend','kanban-restoreCard'),('kanban-createCard','recommend','kanban-setCardColor'),('kanban-createCard','recommend','kanban-sortCard'),('kanban-createCard','recommend','kanban-viewArchivedCard'),('kanban-createCard','recommend','kanban-viewCard'),('kanban-createColumn','depend','kanban-view'),('kanban-createColumn','recommend','kanban-archiveColumn'),('kanban-createColumn','recommend','kanban-deleteColumn'),('kanban-createColumn','recommend','kanban-restoreColumn'),('kanban-createColumn','recommend','kanban-setColumn'),('kanban-createColumn','recommend','kanban-setWIP'),('kanban-createColumn','recommend','kanban-sortColumn'),('kanban-createColumn','recommend','kanban-splitColumn'),('kanban-createColumn','recommend','kanban-viewArchivedColumn'),('kanban-createLane','depend','kanban-view'),('kanban-createLane','recommend','kanban-deleteLane'),('kanban-createLane','recommend','kanban-editLaneColor'),('kanban-createLane','recommend','kanban-editLaneName'),('kanban-createLane','recommend','kanban-sortGroup'),('kanban-createLane','recommend','kanban-sortLane'),('kanban-createRegion','depend','kanban-view'),('kanban-createRegion','recommend','kanban-deleteRegion'),('kanban-createRegion','recommend','kanban-editRegion'),('kanban-createRegion','recommend','kanban-sortRegion'),('kanban-createSpace','depend','kanban-space'),('kanban-createSpace','recommend','kanban-activateSpace'),('kanban-createSpace','recommend','kanban-closeSpace'),('kanban-createSpace','recommend','kanban-editSpace'),('kanban-delete','depend','kanban-view'),('kanban-delete','recommend','kanban-create'),('kanban-delete','recommend','kanban-edit'),('kanban-deleteCard','depend','kanban-view'),('kanban-deleteCard','recommend','kanban-archiveCard'),('kanban-deleteCard','recommend','kanban-createCard'),('kanban-deleteCard','recommend','kanban-editCard'),('kanban-deleteCard','recommend','kanban-moveCard'),('kanban-deleteCard','recommend','kanban-restoreCard'),('kanban-deleteCard','recommend','kanban-setCardColor'),('kanban-deleteCard','recommend','kanban-sortCard'),('kanban-deleteCard','recommend','kanban-viewArchivedCard'),('kanban-deleteCard','recommend','kanban-viewCard'),('kanban-deleteColumn','depend','kanban-view'),('kanban-deleteColumn','recommend','kanban-archiveColumn'),('kanban-deleteColumn','recommend','kanban-createColumn'),('kanban-deleteColumn','recommend','kanban-restoreColumn'),('kanban-deleteColumn','recommend','kanban-setColumn'),('kanban-deleteColumn','recommend','kanban-setWIP'),('kanban-deleteColumn','recommend','kanban-sortColumn'),('kanban-deleteColumn','recommend','kanban-splitColumn'),('kanban-deleteColumn','recommend','kanban-viewArchivedColumn'),('kanban-deleteLane','depend','kanban-view'),('kanban-deleteLane','recommend','kanban-createLane'),('kanban-deleteLane','recommend','kanban-editLaneColor'),('kanban-deleteLane','recommend','kanban-editLaneName'),('kanban-deleteLane','recommend','kanban-sortGroup'),('kanban-deleteLane','recommend','kanban-sortLane'),('kanban-deleteRegion','depend','kanban-view'),('kanban-deleteRegion','recommend','kanban-createRegion'),('kanban-deleteRegion','recommend','kanban-editRegion'),('kanban-deleteRegion','recommend','kanban-sortRegion'),('kanban-deleteSpace','depend','kanban-space'),('kanban-edit','depend','kanban-view'),('kanban-edit','recommend','kanban-activate'),('kanban-edit','recommend','kanban-close'),('kanban-edit','recommend','kanban-create'),('kanban-edit','recommend','kanban-setting'),('kanban-editCard','depend','kanban-view'),('kanban-editCard','recommend','kanban-archiveCard'),('kanban-editCard','recommend','kanban-createCard'),('kanban-editCard','recommend','kanban-deleteCard'),('kanban-editCard','recommend','kanban-moveCard'),('kanban-editCard','recommend','kanban-restoreCard'),('kanban-editCard','recommend','kanban-setCardColor'),('kanban-editCard','recommend','kanban-sortCard'),('kanban-editCard','recommend','kanban-viewArchivedCard'),('kanban-editCard','recommend','kanban-viewCard'),('kanban-editLaneColor','depend','kanban-view'),('kanban-editLaneColor','recommend','kanban-createLane'),('kanban-editLaneColor','recommend','kanban-deleteLane'),('kanban-editLaneColor','recommend','kanban-editLaneName'),('kanban-editLaneColor','recommend','kanban-sortGroup'),('kanban-editLaneColor','recommend','kanban-sortLane'),('kanban-editLaneName','depend','kanban-view'),('kanban-editLaneName','recommend','kanban-createLane'),('kanban-editLaneName','recommend','kanban-deleteLane'),('kanban-editLaneName','recommend','kanban-editLaneColor'),('kanban-editLaneName','recommend','kanban-sortGroup'),('kanban-editLaneName','recommend','kanban-sortLane'),('kanban-editRegion','depend','kanban-view'),('kanban-editRegion','recommend','kanban-createRegion'),('kanban-editRegion','recommend','kanban-deleteRegion'),('kanban-editRegion','recommend','kanban-sortRegion'),('kanban-editSpace','depend','kanban-space'),('kanban-editSpace','recommend','kanban-activateSpace'),('kanban-editSpace','recommend','kanban-closeSpace'),('kanban-editSpace','recommend','kanban-createSpace'),('kanban-moveCard','depend','kanban-view'),('kanban-moveCard','recommend','kanban-archiveCard'),('kanban-moveCard','recommend','kanban-createCard'),('kanban-moveCard','recommend','kanban-deleteCard'),('kanban-moveCard','recommend','kanban-editCard'),('kanban-moveCard','recommend','kanban-restoreCard'),('kanban-moveCard','recommend','kanban-setCardColor'),('kanban-moveCard','recommend','kanban-sortCard'),('kanban-moveCard','recommend','kanban-viewArchivedCard'),('kanban-moveCard','recommend','kanban-viewCard'),('kanban-restoreCard','depend','kanban-view'),('kanban-restoreCard','recommend','kanban-archiveCard'),('kanban-restoreCard','recommend','kanban-createCard'),('kanban-restoreCard','recommend','kanban-deleteCard'),('kanban-restoreCard','recommend','kanban-editCard'),('kanban-restoreCard','recommend','kanban-moveCard'),('kanban-restoreCard','recommend','kanban-setCardColor'),('kanban-restoreCard','recommend','kanban-sortCard'),('kanban-restoreCard','recommend','kanban-viewArchivedCard'),('kanban-restoreCard','recommend','kanban-viewCard'),('kanban-restoreColumn','depend','kanban-view'),('kanban-restoreColumn','recommend','kanban-archiveColumn'),('kanban-restoreColumn','recommend','kanban-createColumn'),('kanban-restoreColumn','recommend','kanban-deleteColumn'),('kanban-restoreColumn','recommend','kanban-setColumn'),('kanban-restoreColumn','recommend','kanban-setWIP'),('kanban-restoreColumn','recommend','kanban-sortColumn'),('kanban-restoreColumn','recommend','kanban-splitColumn'),('kanban-restoreColumn','recommend','kanban-viewArchivedColumn'),('kanban-setCardColor','depend','kanban-view'),('kanban-setCardColor','recommend','kanban-archiveCard'),('kanban-setCardColor','recommend','kanban-createCard'),('kanban-setCardColor','recommend','kanban-deleteCard'),('kanban-setCardColor','recommend','kanban-editCard'),('kanban-setCardColor','recommend','kanban-moveCard'),('kanban-setCardColor','recommend','kanban-restoreCard'),('kanban-setCardColor','recommend','kanban-sortCard'),('kanban-setCardColor','recommend','kanban-viewArchivedCard'),('kanban-setCardColor','recommend','kanban-viewCard'),('kanban-setColumn','depend','kanban-view'),('kanban-setColumn','recommend','kanban-archiveColumn'),('kanban-setColumn','recommend','kanban-createColumn'),('kanban-setColumn','recommend','kanban-deleteColumn'),('kanban-setColumn','recommend','kanban-restoreColumn'),('kanban-setColumn','recommend','kanban-setWIP'),('kanban-setColumn','recommend','kanban-sortColumn'),('kanban-setColumn','recommend','kanban-splitColumn'),('kanban-setColumn','recommend','kanban-viewArchivedColumn'),('kanban-setting','depend','kanban-view'),('kanban-setting','recommend','kanban-activate'),('kanban-setting','recommend','kanban-close'),('kanban-setting','recommend','kanban-create'),('kanban-setting','recommend','kanban-edit'),('kanban-setWIP','depend','kanban-view'),('kanban-setWIP','recommend','kanban-archiveColumn'),('kanban-setWIP','recommend','kanban-createColumn'),('kanban-setWIP','recommend','kanban-deleteColumn'),('kanban-setWIP','recommend','kanban-restoreColumn'),('kanban-setWIP','recommend','kanban-setColumn'),('kanban-setWIP','recommend','kanban-sortColumn'),('kanban-setWIP','recommend','kanban-splitColumn'),('kanban-setWIP','recommend','kanban-viewArchivedColumn'),('kanban-sortCard','depend','kanban-view'),('kanban-sortCard','recommend','kanban-archiveCard'),('kanban-sortCard','recommend','kanban-createCard'),('kanban-sortCard','recommend','kanban-deleteCard'),('kanban-sortCard','recommend','kanban-editCard'),('kanban-sortCard','recommend','kanban-moveCard'),('kanban-sortCard','recommend','kanban-restoreCard'),('kanban-sortCard','recommend','kanban-setCardColor'),('kanban-sortCard','recommend','kanban-viewArchivedCard'),('kanban-sortCard','recommend','kanban-viewCard'),('kanban-sortColumn','depend','kanban-view'),('kanban-sortColumn','recommend','kanban-archiveColumn'),('kanban-sortColumn','recommend','kanban-createColumn'),('kanban-sortColumn','recommend','kanban-deleteColumn'),('kanban-sortColumn','recommend','kanban-restoreColumn'),('kanban-sortColumn','recommend','kanban-setColumn'),('kanban-sortColumn','recommend','kanban-setWIP'),('kanban-sortColumn','recommend','kanban-splitColumn'),('kanban-sortColumn','recommend','kanban-viewArchivedColumn'),('kanban-sortGroup','depend','kanban-view'),('kanban-sortGroup','recommend','kanban-createLane'),('kanban-sortGroup','recommend','kanban-deleteLane'),('kanban-sortGroup','recommend','kanban-editLaneColor'),('kanban-sortGroup','recommend','kanban-editLaneName'),('kanban-sortGroup','recommend','kanban-sortLane'),('kanban-sortLane','depend','kanban-view'),('kanban-sortLane','recommend','kanban-createLane'),('kanban-sortLane','recommend','kanban-deleteLane'),('kanban-sortLane','recommend','kanban-editLaneColor'),('kanban-sortLane','recommend','kanban-editLaneName'),('kanban-sortLane','recommend','kanban-sortGroup'),('kanban-sortRegion','depend','kanban-view'),('kanban-sortRegion','recommend','kanban-createRegion'),('kanban-sortRegion','recommend','kanban-deleteRegion'),('kanban-sortRegion','recommend','kanban-editRegion'),('kanban-space','recommend','kanban-createSpace'),('kanban-splitColumn','depend','kanban-view'),('kanban-splitColumn','recommend','kanban-archiveColumn'),('kanban-splitColumn','recommend','kanban-createColumn'),('kanban-splitColumn','recommend','kanban-deleteColumn'),('kanban-splitColumn','recommend','kanban-restoreColumn'),('kanban-splitColumn','recommend','kanban-setColumn'),('kanban-splitColumn','recommend','kanban-setWIP'),('kanban-splitColumn','recommend','kanban-sortColumn'),('kanban-splitColumn','recommend','kanban-viewArchivedColumn'),('kanban-view','recommend','kanban-activate'),('kanban-view','recommend','kanban-close'),('kanban-view','recommend','kanban-create'),('kanban-view','recommend','kanban-edit'),('kanban-view','recommend','kanban-setting'),('kanban-viewArchivedCard','depend','kanban-view'),('kanban-viewArchivedCard','recommend','kanban-archiveCard'),('kanban-viewArchivedCard','recommend','kanban-createCard'),('kanban-viewArchivedCard','recommend','kanban-deleteCard'),('kanban-viewArchivedCard','recommend','kanban-editCard'),('kanban-viewArchivedCard','recommend','kanban-moveCard'),('kanban-viewArchivedCard','recommend','kanban-restoreCard'),('kanban-viewArchivedCard','recommend','kanban-setCardColor'),('kanban-viewArchivedCard','recommend','kanban-sortCard'),('kanban-viewArchivedCard','recommend','kanban-viewCard'),('kanban-viewArchivedColumn','depend','kanban-view'),('kanban-viewArchivedColumn','recommend','kanban-archiveColumn'),('kanban-viewArchivedColumn','recommend','kanban-createColumn'),('kanban-viewArchivedColumn','recommend','kanban-deleteColumn'),('kanban-viewArchivedColumn','recommend','kanban-restoreColumn'),('kanban-viewArchivedColumn','recommend','kanban-setColumn'),('kanban-viewArchivedColumn','recommend','kanban-setWIP'),('kanban-viewArchivedColumn','recommend','kanban-sortColumn'),('kanban-viewArchivedColumn','recommend','kanban-splitColumn'),('kanban-viewCard','depend','kanban-view'),('kanban-viewCard','recommend','kanban-archiveCard'),('kanban-viewCard','recommend','kanban-createCard'),('kanban-viewCard','recommend','kanban-deleteCard'),('kanban-viewCard','recommend','kanban-editCard'),('kanban-viewCard','recommend','kanban-moveCard'),('kanban-viewCard','recommend','kanban-restoreCard'),('kanban-viewCard','recommend','kanban-setCardColor'),('kanban-viewCard','recommend','kanban-sortCard'),('kanban-viewCard','recommend','kanban-viewArchivedCard'),('leave-back','depend','attend-personal'),('leave-back','depend','leave-personal'),('leave-browseReview','depend','attend-personal'),('leave-browseReview','depend','leave-personal'),('leave-company','depend','attend-personal'),('leave-create','depend','attend-personal'),('leave-create','depend','leave-personal'),('leave-create','recommend','leave-delete'),('leave-create','recommend','leave-edit'),('leave-create','recommend','leave-switchstatus'),('leave-create','recommend','leave-view'),('leave-delete','depend','attend-personal'),('leave-delete','depend','leave-personal'),('leave-delete','recommend','leave-create'),('leave-delete','recommend','leave-edit'),('leave-delete','recommend','leave-switchstatus'),('leave-delete','recommend','leave-view'),('leave-edit','depend','attend-personal'),('leave-edit','depend','leave-personal'),('leave-edit','recommend','leave-create'),('leave-edit','recommend','leave-delete'),('leave-edit','recommend','leave-switchstatus'),('leave-edit','recommend','leave-view'),('leave-export','depend','attend-personal'),('leave-export','depend','leave-personal'),('leave-personal','depend','attend-personal'),('leave-personal','recommend','leave-create'),('leave-personal','recommend','leave-edit'),('leave-personal','recommend','leave-view'),('leave-personalAnnual','depend','attend-personal'),('leave-personalAnnual','depend','leave-personal'),('leave-review','depend','attend-personal'),('leave-review','depend','leave-browseReview'),('leave-review','depend','leave-personal'),('leave-setReviewer','depend','attend-personal'),('leave-setReviewer','depend','leave-personal'),('leave-switchstatus','depend','attend-personal'),('leave-switchstatus','depend','leave-personal'),('leave-switchstatus','recommend','leave-create'),('leave-switchstatus','recommend','leave-delete'),('leave-switchstatus','recommend','leave-edit'),('leave-switchstatus','recommend','leave-view'),('leave-view','depend','attend-personal'),('leave-view','depend','leave-personal'),('lieu-browseReview','depend','attend-personal'),('lieu-browseReview','depend','lieu-personal'),('lieu-company','depend','attend-personal'),('lieu-create','depend','attend-personal'),('lieu-create','depend','lieu-personal'),('lieu-create','recommend','lieu-delete'),('lieu-create','recommend','lieu-edit'),('lieu-create','recommend','lieu-switchstatus'),('lieu-create','recommend','lieu-view'),('lieu-delete','depend','attend-personal'),('lieu-delete','depend','lieu-personal'),('lieu-delete','recommend','lieu-create'),('lieu-delete','recommend','lieu-edit'),('lieu-delete','recommend','lieu-switchstatus'),('lieu-delete','recommend','lieu-view'),('lieu-edit','depend','attend-personal'),('lieu-edit','depend','lieu-personal'),('lieu-edit','recommend','lieu-create'),('lieu-edit','recommend','lieu-delete'),('lieu-edit','recommend','lieu-switchstatus'),('lieu-edit','recommend','lieu-view'),('lieu-personal','depend','attend-personal'),('lieu-personal','recommend','lieu-create'),('lieu-personal','recommend','lieu-edit'),('lieu-personal','recommend','lieu-view'),('lieu-review','depend','attend-personal'),('lieu-review','depend','lieu-browseReview'),('lieu-review','depend','lieu-personal'),('lieu-setReviewer','depend','attend-personal'),('lieu-switchstatus','depend','attend-personal'),('lieu-switchstatus','depend','lieu-personal'),('lieu-switchstatus','recommend','lieu-create'),('lieu-switchstatus','recommend','lieu-delete'),('lieu-switchstatus','recommend','lieu-edit'),('lieu-switchstatus','recommend','lieu-view'),('lieu-view','depend','attend-personal'),('lieu-view','depend','lieu-personal'),('mail-batchDelete','depend','mail-browse'),('mail-batchDelete','recommend','mail-delete'),('mail-browse','depend','mail-edit'),('mail-delete','depend','mail-browse'),('mail-edit','depend','message-index'),('mail-resend','depend','mail-browse'),('mail-reset','depend','mail-edit'),('mail-reset','recommend','mail-save'),('mail-save','depend','mail-edit'),('mail-save','recommend','mail-reset'),('mail-test','depend','mail-edit'),('makeup-browseReview','depend','attend-personal'),('makeup-browseReview','depend','makeup-personal'),('makeup-company','depend','attend-personal'),('makeup-create','depend','attend-personal'),('makeup-create','depend','makeup-personal'),('makeup-create','recommend','makeup-delete'),('makeup-create','recommend','makeup-edit'),('makeup-create','recommend','makeup-switchstatus'),('makeup-create','recommend','makeup-view'),('makeup-delete','depend','attend-personal'),('makeup-delete','depend','makeup-personal'),('makeup-delete','recommend','makeup-create'),('makeup-delete','recommend','makeup-edit'),('makeup-delete','recommend','makeup-switchstatus'),('makeup-delete','recommend','makeup-view'),('makeup-edit','depend','attend-personal'),('makeup-edit','depend','makeup-personal'),('makeup-edit','recommend','makeup-create'),('makeup-edit','recommend','makeup-delete'),('makeup-edit','recommend','makeup-switchstatus'),('makeup-edit','recommend','makeup-view'),('makeup-export','depend','attend-personal'),('makeup-export','depend','makeup-personal'),('makeup-personal','depend','attend-personal'),('makeup-personal','recommend','makeup-create'),('makeup-personal','recommend','makeup-edit'),('makeup-personal','recommend','makeup-view'),('makeup-review','depend','attend-personal'),('makeup-review','depend','makeup-browseReview'),('makeup-review','depend','makeup-personal'),('makeup-setReviewer','depend','attend-personal'),('makeup-setReviewer','depend','makeup-personal'),('makeup-switchstatus','depend','attend-personal'),('makeup-switchstatus','depend','makeup-personal'),('makeup-switchstatus','recommend','makeup-create'),('makeup-switchstatus','recommend','makeup-delete'),('makeup-switchstatus','recommend','makeup-edit'),('makeup-switchstatus','recommend','makeup-view'),('makeup-view','depend','attend-personal'),('makeup-view','depend','makeup-personal'),('measrecord-browse','depend','project-index'),('measurement-batchEdit','depend','measurement-browse'),('measurement-batchEdit','recommend','measurement-editBasic'),('measurement-createBasic','depend','measurement-browse'),('measurement-createBasic','recommend','measurement-delete'),('measurement-createBasic','recommend','measurement-editBasic'),('measurement-createBasic','recommend','measurement-setSQL'),('measurement-createTemplate','depend','measurement-template'),('measurement-createTemplate','recommend','measurement-editTemplate'),('measurement-createTemplate','recommend','measurement-viewTemplate'),('measurement-delete','depend','measurement-browse'),('measurement-delete','recommend','measurement-batchEdit'),('measurement-delete','recommend','measurement-createBasic'),('measurement-delete','recommend','measurement-editBasic'),('measurement-delete','recommend','measurement-setSQL'),('measurement-editBasic','depend','measurement-browse'),('measurement-editBasic','recommend','measurement-batchEdit'),('measurement-editBasic','recommend','measurement-createBasic'),('measurement-editBasic','recommend','measurement-delete'),('measurement-editBasic','recommend','measurement-setSQL'),('measurement-editTemplate','recommend','measurement-createTemplate'),('measurement-editTemplate','recommend','measurement-viewTemplate'),('measurement-saveReport','depend','measurement-viewTemplate'),('measurement-setSQL','depend','measurement-browse'),('measurement-setSQL','recommend','measurement-createBasic'),('measurement-setSQL','recommend','measurement-delete'),('measurement-setSQL','recommend','measurement-editBasic'),('meeting-create','depend','meeting-browse'),('meeting-create','recommend','meeting-delete'),('meeting-create','recommend','meeting-edit'),('meeting-create','recommend','meeting-minutes'),('meeting-create','recommend','meeting-view'),('meeting-delete','depend','meeting-view'),('meeting-delete','recommend','meeting-create'),('meeting-edit','depend','meeting-browse'),('meeting-edit','recommend','meeting-create'),('meeting-edit','recommend','meeting-delete'),('meeting-edit','recommend','meeting-minutes'),('meeting-edit','recommend','meeting-view'),('meeting-minutes','depend','meeting-browse'),('meeting-minutes','recommend','meeting-create'),('meeting-minutes','recommend','meeting-edit'),('meeting-minutes','recommend','meeting-view'),('meeting-view','depend','meeting-browse'),('meeting-view','recommend','meeting-create'),('meeting-view','recommend','meeting-delete'),('meeting-view','recommend','meeting-edit'),('meeting-view','recommend','meeting-minutes'),('meetingroom-batchCreate','depend','meetingroom-browse'),('meetingroom-batchCreate','recommend','meetingroom-create'),('meetingroom-batchEdit','depend','meetingroom-browse'),('meetingroom-batchEdit','recommend','meetingroom-create'),('meetingroom-create','depend','meetingroom-browse'),('meetingroom-create','recommend','meetingroom-batchCreate'),('meetingroom-create','recommend','meetingroom-delete'),('meetingroom-create','recommend','meetingroom-edit'),('meetingroom-create','recommend','meetingroom-view'),('meetingroom-delete','depend','meetingroom-view'),('meetingroom-delete','recommend','meetingroom-create'),('meetingroom-delete','recommend','meetingroom-edit'),('meetingroom-edit','depend','meetingroom-browse'),('meetingroom-edit','recommend','meetingroom-batchEdit'),('meetingroom-edit','recommend','meetingroom-create'),('meetingroom-edit','recommend','meetingroom-delete'),('meetingroom-edit','recommend','meetingroom-view'),('meetingroom-view','depend','meetingroom-browse'),('meetingroom-view','recommend','meetingroom-batchCreate'),('meetingroom-view','recommend','meetingroom-batchEdit'),('meetingroom-view','recommend','meetingroom-create'),('meetingroom-view','recommend','meetingroom-delete'),('meetingroom-view','recommend','meetingroom-edit'),('milestone-index','depend','project-index'),('milestone-index','depend','weekly-index'),('milestone-index','recommend','milestone-saveOtherProblem'),('milestone-saveOtherProblem','depend','milestone-index'),('milestone-saveOtherProblem','depend','weekly-index'),('mr-accept','recommend','mr-browse'),('mr-accept','recommend','mr-create'),('mr-accept','recommend','mr-edit'),('mr-addReview','depend','mr-accept'),('mr-addReview','recommend','repo-addBug'),('mr-approval','depend','mr-accept'),('mr-approval','recommend','mr-close'),('mr-approval','recommend','mr-reopen'),('mr-browse','depend','mr-accept'),('mr-browse','recommend','mr-addReview'),('mr-browse','recommend','mr-approval'),('mr-browse','recommend','mr-close'),('mr-browse','recommend','mr-create'),('mr-browse','recommend','mr-diff'),('mr-browse','recommend','mr-edit'),('mr-browse','recommend','mr-link'),('mr-browse','recommend','mr-linkBug'),('mr-browse','recommend','mr-linkStory'),('mr-browse','recommend','mr-linkTask'),('mr-browse','recommend','mr-reopen'),('mr-browse','recommend','mr-unlink'),('mr-browse','recommend','mr-view'),('mr-close','depend','mr-accept'),('mr-close','recommend','mr-approval'),('mr-close','recommend','mr-reopen'),('mr-create','depend','mr-accept'),('mr-create','recommend','mr-edit'),('mr-delete','depend','mr-accept'),('mr-delete','recommend','mr-create'),('mr-delete','recommend','mr-edit'),('mr-diff','depend','mr-accept'),('mr-diff','recommend','mr-link'),('mr-diff','recommend','mr-view'),('mr-edit','depend','mr-accept'),('mr-edit','recommend','mr-create'),('mr-edit','recommend','mr-linkBug'),('mr-edit','recommend','mr-linkStory'),('mr-edit','recommend','mr-linkTask'),('mr-edit','recommend','mr-unlink'),('mr-link','depend','mr-accept'),('mr-link','recommend','mr-diff'),('mr-link','recommend','mr-view'),('mr-linkBug','depend','mr-accept'),('mr-linkBug','depend','mr-link'),('mr-linkBug','recommend','mr-linkStory'),('mr-linkBug','recommend','mr-linkTask'),('mr-linkBug','recommend','mr-unlink'),('mr-linkStory','depend','mr-accept'),('mr-linkStory','depend','mr-link'),('mr-linkStory','recommend','mr-approval'),('mr-linkStory','recommend','mr-close'),('mr-linkStory','recommend','mr-diff'),('mr-linkStory','recommend','mr-linkBug'),('mr-linkStory','recommend','mr-linkTask'),('mr-linkStory','recommend','mr-reopen'),('mr-linkStory','recommend','mr-unlink'),('mr-linkTask','depend','mr-accept'),('mr-linkTask','depend','mr-link'),('mr-linkTask','recommend','mr-linkBug'),('mr-linkTask','recommend','mr-linkStory'),('mr-linkTask','recommend','mr-unlink'),('mr-reopen','depend','mr-accept'),('mr-reopen','recommend','mr-approval'),('mr-reopen','recommend','mr-close'),('mr-unlink','depend','mr-accept'),('mr-unlink','recommend','mr-link'),('mr-unlink','recommend','mr-linkBug'),('mr-unlink','recommend','mr-linkStory'),('mr-unlink','recommend','mr-linkTask'),('mr-view','depend','mr-accept'),('mr-view','recommend','mr-diff'),('mr-view','recommend','mr-link'),('my-audit','depend','my-index'),('my-calendar','depend','my-index'),('my-calendar','recommend','my-todo'),('my-changePassword','depend','my-index'),('my-changePassword','depend','my-profile'),('my-contribute','depend','my-index'),('my-deleteContacts','recommend','my-manageContacts'),('my-doc','depend','my-index'),('my-dynamic','depend','my-index'),('my-editProfile','depend','my-index'),('my-editProfile','depend','my-profile'),('my-effort','depend','effort-calendar'),('my-execution','depend','my-index'),('my-index','recommend','my-todo'),('my-manageContacts','recommend','my-deleteContacts'),('my-preference','depend','my-index'),('my-profile','depend','my-index'),('my-project','depend','my-index'),('my-score','depend','my-index'),('my-team','recommend','user-bug'),('my-team','recommend','user-dynamic'),('my-team','recommend','user-effort'),('my-team','recommend','user-effortcalendar'),('my-team','recommend','user-execution'),('my-team','recommend','user-issue'),('my-team','recommend','user-profile'),('my-team','recommend','user-risk'),('my-team','recommend','user-story'),('my-team','recommend','user-task'),('my-team','recommend','user-testCase'),('my-team','recommend','user-testTask'),('my-team','recommend','user-todo'),('my-team','recommend','user-todocalendar'),('my-todo','depend','my-calendar'),('my-todo','depend','my-index'),('my-todo','recommend','todo-view'),('my-uploadAvatar','depend','my-index'),('my-uploadAvatar','depend','my-profile'),('my-work','depend','my-index'),('nc-activate','depend','nc-browse'),('nc-activate','recommend','nc-assignTo'),('nc-activate','recommend','nc-close'),('nc-activate','recommend','nc-create'),('nc-activate','recommend','nc-delete'),('nc-activate','recommend','nc-edit'),('nc-activate','recommend','nc-resolve'),('nc-assignTo','depend','nc-browse'),('nc-assignTo','recommend','nc-activate'),('nc-assignTo','recommend','nc-close'),('nc-assignTo','recommend','nc-create'),('nc-assignTo','recommend','nc-delete'),('nc-assignTo','recommend','nc-edit'),('nc-assignTo','recommend','nc-resolve'),('nc-close','depend','nc-browse'),('nc-close','recommend','nc-activate'),('nc-close','recommend','nc-assignTo'),('nc-close','recommend','nc-create'),('nc-close','recommend','nc-delete'),('nc-close','recommend','nc-edit'),('nc-close','recommend','nc-resolve'),('nc-create','depend','nc-browse'),('nc-create','recommend','nc-activate'),('nc-create','recommend','nc-assignTo'),('nc-create','recommend','nc-close'),('nc-create','recommend','nc-delete'),('nc-create','recommend','nc-edit'),('nc-create','recommend','nc-resolve'),('nc-delete','depend','nc-browse'),('nc-delete','recommend','nc-activate'),('nc-delete','recommend','nc-assignTo'),('nc-delete','recommend','nc-close'),('nc-delete','recommend','nc-create'),('nc-delete','recommend','nc-edit'),('nc-delete','recommend','nc-resolve'),('nc-edit','depend','nc-browse'),('nc-edit','recommend','nc-activate'),('nc-edit','recommend','nc-assignTo'),('nc-edit','recommend','nc-close'),('nc-edit','recommend','nc-create'),('nc-edit','recommend','nc-delete'),('nc-edit','recommend','nc-resolve'),('nc-export','depend','nc-browse'),('nc-resolve','depend','nc-browse'),('nc-resolve','recommend','nc-activate'),('nc-resolve','recommend','nc-assignTo'),('nc-resolve','recommend','nc-close'),('nc-resolve','recommend','nc-create'),('nc-resolve','recommend','nc-delete'),('nc-resolve','recommend','nc-edit'),('nc-view','depend','nc-browse'),('opportunity-activate','depend','opportunity-browse'),('opportunity-activate','depend','opportunity-view'),('opportunity-activate','recommend','opportunity-assignTo'),('opportunity-activate','recommend','opportunity-batchActivate'),('opportunity-activate','recommend','opportunity-cancel'),('opportunity-activate','recommend','opportunity-close'),('opportunity-activate','recommend','opportunity-create'),('opportunity-activate','recommend','opportunity-edit'),('opportunity-activate','recommend','opportunity-hangup'),('opportunity-activate','recommend','opportunity-track'),('opportunity-assignTo','depend','opportunity-browse'),('opportunity-assignTo','depend','opportunity-view'),('opportunity-assignTo','recommend','opportunity-activate'),('opportunity-assignTo','recommend','opportunity-batchAssignTo'),('opportunity-assignTo','recommend','opportunity-cancel'),('opportunity-assignTo','recommend','opportunity-close'),('opportunity-assignTo','recommend','opportunity-create'),('opportunity-assignTo','recommend','opportunity-edit'),('opportunity-assignTo','recommend','opportunity-hangup'),('opportunity-assignTo','recommend','opportunity-track'),('opportunity-batchActivate','depend','opportunity-browse'),('opportunity-batchActivate','recommend','opportunity-activate'),('opportunity-batchAssignTo','depend','opportunity-browse'),('opportunity-batchAssignTo','recommend','opportunity-assignTo'),('opportunity-batchCancel','depend','opportunity-browse'),('opportunity-batchCancel','recommend','opportunity-cancel'),('opportunity-batchClose','depend','opportunity-browse'),('opportunity-batchClose','recommend','opportunity-close'),('opportunity-batchCreate','depend','opportunity-browse'),('opportunity-batchCreate','recommend','opportunity-create'),('opportunity-batchEdit','depend','opportunity-browse'),('opportunity-batchEdit','recommend','opportunity-edit'),('opportunity-batchHangup','depend','opportunity-browse'),('opportunity-batchHangup','recommend','opportunity-hangup'),('opportunity-batchImportToLib','depend','opportunity-browse'),('opportunity-batchImportToLib','recommend','opportunity-importToLib'),('opportunity-browse','recommend','opportunity-view'),('opportunity-cancel','depend','opportunity-browse'),('opportunity-cancel','depend','opportunity-view'),('opportunity-cancel','recommend','opportunity-activate'),('opportunity-cancel','recommend','opportunity-assignTo'),('opportunity-cancel','recommend','opportunity-batchCancel'),('opportunity-cancel','recommend','opportunity-close'),('opportunity-cancel','recommend','opportunity-create'),('opportunity-cancel','recommend','opportunity-edit'),('opportunity-cancel','recommend','opportunity-hangup'),('opportunity-cancel','recommend','opportunity-track'),('opportunity-close','depend','opportunity-browse'),('opportunity-close','depend','opportunity-view'),('opportunity-close','recommend','opportunity-activate'),('opportunity-close','recommend','opportunity-assignTo'),('opportunity-close','recommend','opportunity-batchClose'),('opportunity-close','recommend','opportunity-cancel'),('opportunity-close','recommend','opportunity-create'),('opportunity-close','recommend','opportunity-edit'),('opportunity-close','recommend','opportunity-hangup'),('opportunity-close','recommend','opportunity-track'),('opportunity-create','depend','opportunity-browse'),('opportunity-create','depend','opportunity-view'),('opportunity-create','recommend','opportunity-activate'),('opportunity-create','recommend','opportunity-assignTo'),('opportunity-create','recommend','opportunity-batchCreate'),('opportunity-create','recommend','opportunity-cancel'),('opportunity-create','recommend','opportunity-close'),('opportunity-create','recommend','opportunity-edit'),('opportunity-create','recommend','opportunity-hangup'),('opportunity-create','recommend','opportunity-track'),('opportunity-delete','depend','opportunity-browse'),('opportunity-edit','depend','opportunity-browse'),('opportunity-edit','depend','opportunity-view'),('opportunity-edit','recommend','opportunity-activate'),('opportunity-edit','recommend','opportunity-assignTo'),('opportunity-edit','recommend','opportunity-batchEdit'),('opportunity-edit','recommend','opportunity-cancel'),('opportunity-edit','recommend','opportunity-close'),('opportunity-edit','recommend','opportunity-create'),('opportunity-edit','recommend','opportunity-hangup'),('opportunity-edit','recommend','opportunity-track'),('opportunity-export','depend','opportunity-browse'),('opportunity-hangup','depend','opportunity-browse'),('opportunity-hangup','depend','opportunity-view'),('opportunity-hangup','recommend','opportunity-activate'),('opportunity-hangup','recommend','opportunity-assignTo'),('opportunity-hangup','recommend','opportunity-batchHangup'),('opportunity-hangup','recommend','opportunity-cancel'),('opportunity-hangup','recommend','opportunity-close'),('opportunity-hangup','recommend','opportunity-create'),('opportunity-hangup','recommend','opportunity-edit'),('opportunity-hangup','recommend','opportunity-track'),('opportunity-importFromLib','depend','opportunity-browse'),('opportunity-importFromLib','recommend','assetlib-opportunity'),('opportunity-importFromLib','recommend','assetlib-opportunitylib'),('opportunity-importToLib','depend','opportunity-view'),('opportunity-importToLib','recommend','opportunity-batchImportToLib'),('opportunity-track','depend','opportunity-browse'),('opportunity-track','depend','opportunity-view'),('opportunity-track','recommend','opportunity-activate'),('opportunity-track','recommend','opportunity-assignTo'),('opportunity-track','recommend','opportunity-cancel'),('opportunity-track','recommend','opportunity-close'),('opportunity-track','recommend','opportunity-create'),('opportunity-track','recommend','opportunity-edit'),('opportunity-track','recommend','opportunity-hangup'),('ops-setting','depend','ops-index'),('overtime-browseReview','depend','attend-personal'),('overtime-browseReview','depend','overtime-personal'),('overtime-company','depend','attend-personal'),('overtime-create','depend','attend-personal'),('overtime-create','depend','overtime-personal'),('overtime-create','recommend','overtime-delete'),('overtime-create','recommend','overtime-edit'),('overtime-create','recommend','overtime-switchstatus'),('overtime-create','recommend','overtime-view'),('overtime-delete','depend','attend-personal'),('overtime-delete','depend','overtime-personal'),('overtime-delete','recommend','overtime-create'),('overtime-delete','recommend','overtime-edit'),('overtime-delete','recommend','overtime-switchstatus'),('overtime-delete','recommend','overtime-view'),('overtime-edit','depend','attend-personal'),('overtime-edit','depend','overtime-personal'),('overtime-edit','recommend','overtime-create'),('overtime-edit','recommend','overtime-delete'),('overtime-edit','recommend','overtime-switchstatus'),('overtime-edit','recommend','overtime-view'),('overtime-export','depend','attend-personal'),('overtime-personal','depend','attend-personal'),('overtime-personal','recommend','overtime-create'),('overtime-personal','recommend','overtime-edit'),('overtime-personal','recommend','overtime-view'),('overtime-review','depend','attend-personal'),('overtime-review','depend','overtime-browseReview'),('overtime-review','depend','overtime-personal'),('overtime-setReviewer','depend','attend-personal'),('overtime-setReviewer','depend','overtime-personal'),('overtime-switchstatus','depend','attend-personal'),('overtime-switchstatus','depend','overtime-personal'),('overtime-switchstatus','recommend','overtime-create'),('overtime-switchstatus','recommend','overtime-delete'),('overtime-switchstatus','recommend','overtime-edit'),('overtime-switchstatus','recommend','overtime-view'),('overtime-view','depend','attend-personal'),('overtime-view','depend','overtime-personal'),('personnel-accessible','depend','program-browse'),('personnel-addWhitelist','depend','personnel-whitelist'),('personnel-addWhitelist','depend','program-browse'),('personnel-addWhitelist','recommend','program-unbindWhitelist'),('personnel-invest','depend','program-browse'),('personnel-whitelist','depend','program-browse'),('pivot-browse','depend','pivot-preview'),('pivot-bugAssign','depend','pivot-preview'),('pivot-bugAssignSummary','depend','pivot-preview'),('pivot-bugCreate','depend','pivot-preview'),('pivot-bugSummary','depend','pivot-preview'),('pivot-build','depend','pivot-preview'),('pivot-casesrun','depend','pivot-preview'),('pivot-create','depend','pivot-browse'),('pivot-create','recommend','pivot-delete'),('pivot-create','recommend','pivot-design'),('pivot-create','recommend','pivot-edit'),('pivot-delete','depend','pivot-browse'),('pivot-delete','recommend','pivot-create'),('pivot-delete','recommend','pivot-design'),('pivot-delete','recommend','pivot-edit'),('pivot-design','depend','pivot-browse'),('pivot-design','recommend','pivot-create'),('pivot-design','recommend','pivot-delete'),('pivot-design','recommend','pivot-edit'),('pivot-edit','depend','pivot-browse'),('pivot-edit','recommend','pivot-create'),('pivot-edit','recommend','pivot-delete'),('pivot-edit','recommend','pivot-design'),('pivot-export','depend','pivot-preview'),('pivot-productInvest','depend','pivot-preview'),('pivot-productSummary','depend','pivot-preview'),('pivot-projectDeviation','depend','pivot-preview'),('pivot-roadmap','depend','pivot-preview'),('pivot-storyLinkedBug','depend','pivot-preview'),('pivot-testcase','depend','pivot-preview'),('pivot-workAssignSummary','depend','pivot-preview'),('pivot-workload','depend','pivot-preview'),('pivot-workSummary','depend','pivot-preview'),('process-activityList','recommend','process-create'),('process-activityList','recommend','process-edit'),('process-activityList','recommend','process-view'),('process-batchCreate','recommend','process-create'),('process-create','recommend','process-activityList'),('process-create','recommend','process-batchCreate'),('process-create','recommend','process-delete'),('process-create','recommend','process-edit'),('process-create','recommend','process-updateOrder'),('process-create','recommend','process-view'),('process-delete','recommend','process-create'),('process-edit','recommend','process-activityList'),('process-edit','recommend','process-create'),('process-edit','recommend','process-delete'),('process-edit','recommend','process-updateOrder'),('process-edit','recommend','process-view'),('process-updateOrder','recommend','process-create'),('process-updateOrder','recommend','process-edit'),('process-view','recommend','process-activityList'),('product-addWhitelist','depend','product-whitelist'),('product-addWhitelist','recommend','product-create'),('product-all','recommend','product-create'),('product-all','recommend','product-dashboard'),('product-all','recommend','product-dynamic'),('product-all','recommend','product-edit'),('product-all','recommend','product-index'),('product-all','recommend','product-kanban'),('product-all','recommend','product-updateOrder'),('product-all','recommend','product-view'),('product-batchEdit','depend','product-all'),('product-batchEdit','recommend','product-edit'),('product-browse','recommend','story-report'),('product-browse','recommend','story-view'),('product-close','depend','product-view'),('product-close','recommend','product-create'),('product-close','recommend','product-edit'),('product-create','depend','product-all'),('product-create','recommend','product-close'),('product-create','recommend','product-edit'),('product-create','recommend','product-updateOrder'),('product-dashboard','recommend','product-dynamic'),('product-dashboard','recommend','product-roadmap'),('product-delete','depend','product-view'),('product-delete','recommend','product-create'),('product-delete','recommend','product-edit'),('product-dynamic','depend','product-browse'),('product-dynamic','recommend','product-all'),('product-dynamic','recommend','product-kanban'),('product-dynamic','recommend','product-view'),('product-edit','depend','product-all'),('product-edit','depend','product-view'),('product-edit','recommend','product-batchEdit'),('product-edit','recommend','product-close'),('product-edit','recommend','product-create'),('product-edit','recommend','product-updateOrder'),('product-export','depend','product-all'),('product-index','recommend','product-all'),('product-index','recommend','product-dashboard'),('product-index','recommend','product-kanban'),('product-index','recommend','product-view'),('product-kanban','recommend','product-all'),('product-kanban','recommend','product-dashboard'),('product-kanban','recommend','product-dynamic'),('product-kanban','recommend','product-index'),('product-kanban','recommend','product-view'),('product-manageLine','depend','product-all'),('product-manageLine','recommend','product-create'),('product-manageLine','recommend','product-edit'),('product-manageLine','recommend','product-updateOrder'),('product-project','depend','product-browse'),('product-project','recommend','project-create'),('product-requirement','depend','product-browse'),('product-requirement','recommend','requirement-report'),('product-requirement','recommend','requirement-view'),('product-roadmap','depend','product-all'),('product-roadmap','depend','product-browse'),('product-roadmap','depend','product-dashboard'),('product-roadmap','recommend','release-view'),('product-track','depend','product-browse'),('product-track','recommend','product-browse'),('product-track','recommend','product-requirement'),('product-track','recommend','requirement-view'),('product-track','recommend','story-view'),('product-unbindWhitelist','depend','product-whitelist'),('product-unbindWhitelist','recommend','product-addWhitelist'),('product-unbindWhitelist','recommend','product-create'),('product-updateOrder','depend','product-all'),('product-updateOrder','recommend','product-create'),('product-updateOrder','recommend','product-edit'),('product-view','depend','product-all'),('product-view','depend','product-browse'),('product-view','depend','product-dashboard'),('product-view','recommend','branch-manage'),('product-view','recommend','product-all'),('product-view','recommend','product-create'),('product-view','recommend','product-dashboard'),('product-view','recommend','product-dynamic'),('product-view','recommend','product-edit'),('product-view','recommend','product-kanban'),('product-view','recommend','product-whitelist'),('product-whitelist','depend','product-browse'),('product-whitelist','recommend','product-addWhitelist'),('product-whitelist','recommend','product-unbindWhitelist'),('product-whitelist','recommend','product-view'),('productplan-activate','depend','productplan-view'),('productplan-activate','recommend','productplan-close'),('productplan-activate','recommend','productplan-create'),('productplan-activate','recommend','productplan-edit'),('productplan-activate','recommend','productplan-finish'),('productplan-activate','recommend','productplan-linkBug'),('productplan-activate','recommend','productplan-linkStory'),('productplan-activate','recommend','productplan-start'),('productplan-activate','recommend','productplan-unlinkBug'),('productplan-activate','recommend','productplan-unlinkStory'),('productplan-batchChangeStatus','depend','productplan-browse'),('productplan-batchChangeStatus','recommend','productplan-edit'),('productplan-batchEdit','depend','productplan-browse'),('productplan-batchEdit','recommend','productplan-edit'),('productplan-batchUnlinkBug','depend','productplan-view'),('productplan-batchUnlinkBug','recommend','productplan-unlinkBug'),('productplan-batchUnlinkStory','depend','productplan-browse'),('productplan-batchUnlinkStory','recommend','productplan-unlinkStory'),('productplan-browse','depend','product-browse'),('productplan-browse','recommend','productplan-create'),('productplan-browse','recommend','productplan-edit'),('productplan-browse','recommend','productplan-view'),('productplan-close','depend','productplan-view'),('productplan-close','recommend','productplan-activate'),('productplan-close','recommend','productplan-create'),('productplan-close','recommend','productplan-edit'),('productplan-close','recommend','productplan-finish'),('productplan-close','recommend','productplan-linkBug'),('productplan-close','recommend','productplan-linkStory'),('productplan-close','recommend','productplan-start'),('productplan-close','recommend','productplan-unlinkBug'),('productplan-close','recommend','productplan-unlinkStory'),('productplan-create','depend','productplan-browse'),('productplan-create','recommend','productplan-activate'),('productplan-create','recommend','productplan-close'),('productplan-create','recommend','productplan-edit'),('productplan-create','recommend','productplan-finish'),('productplan-create','recommend','productplan-linkBug'),('productplan-create','recommend','productplan-linkStory'),('productplan-create','recommend','productplan-start'),('productplan-delete','depend','productplan-view'),('productplan-delete','recommend','productplan-create'),('productplan-delete','recommend','productplan-edit'),('productplan-edit','depend','productplan-view'),('productplan-edit','recommend','productplan-activate'),('productplan-edit','recommend','productplan-batchEdit'),('productplan-edit','recommend','productplan-close'),('productplan-edit','recommend','productplan-create'),('productplan-edit','recommend','productplan-finish'),('productplan-edit','recommend','productplan-linkBug'),('productplan-edit','recommend','productplan-linkStory'),('productplan-edit','recommend','productplan-start'),('productplan-edit','recommend','productplan-unlinkBug'),('productplan-edit','recommend','productplan-unlinkStory'),('productplan-finish','depend','productplan-view'),('productplan-finish','recommend','productplan-activate'),('productplan-finish','recommend','productplan-close'),('productplan-finish','recommend','productplan-create'),('productplan-finish','recommend','productplan-edit'),('productplan-finish','recommend','productplan-linkBug'),('productplan-finish','recommend','productplan-linkStory'),('productplan-finish','recommend','productplan-start'),('productplan-finish','recommend','productplan-unlinkBug'),('productplan-finish','recommend','productplan-unlinkStory'),('productplan-linkBug','depend','productplan-view'),('productplan-linkBug','recommend','productplan-activate'),('productplan-linkBug','recommend','productplan-close'),('productplan-linkBug','recommend','productplan-create'),('productplan-linkBug','recommend','productplan-edit'),('productplan-linkBug','recommend','productplan-finish'),('productplan-linkBug','recommend','productplan-linkStory'),('productplan-linkBug','recommend','productplan-start'),('productplan-linkBug','recommend','productplan-unlinkBug'),('productplan-linkBug','recommend','productplan-unlinkStory'),('productplan-linkStory','depend','productplan-view'),('productplan-linkStory','recommend','productplan-activate'),('productplan-linkStory','recommend','productplan-close'),('productplan-linkStory','recommend','productplan-create'),('productplan-linkStory','recommend','productplan-edit'),('productplan-linkStory','recommend','productplan-finish'),('productplan-linkStory','recommend','productplan-linkBug'),('productplan-linkStory','recommend','productplan-start'),('productplan-linkStory','recommend','productplan-unlinkBug'),('productplan-linkStory','recommend','productplan-unlinkStory'),('productplan-start','depend','productplan-view'),('productplan-start','recommend','productplan-activate'),('productplan-start','recommend','productplan-close'),('productplan-start','recommend','productplan-create'),('productplan-start','recommend','productplan-edit'),('productplan-start','recommend','productplan-finish'),('productplan-start','recommend','productplan-linkBug'),('productplan-start','recommend','productplan-linkStory'),('productplan-start','recommend','productplan-unlinkBug'),('productplan-start','recommend','productplan-unlinkStory'),('productplan-unlinkBug','depend','productplan-view'),('productplan-unlinkBug','recommend','productplan-activate'),('productplan-unlinkBug','recommend','productplan-batchUnlinkBug'),('productplan-unlinkBug','recommend','productplan-close'),('productplan-unlinkBug','recommend','productplan-create'),('productplan-unlinkBug','recommend','productplan-edit'),('productplan-unlinkBug','recommend','productplan-finish'),('productplan-unlinkBug','recommend','productplan-linkBug'),('productplan-unlinkBug','recommend','productplan-linkStory'),('productplan-unlinkBug','recommend','productplan-start'),('productplan-unlinkBug','recommend','productplan-unlinkStory'),('productplan-unlinkStory','depend','productplan-view'),('productplan-unlinkStory','recommend','productplan-activate'),('productplan-unlinkStory','recommend','productplan-batchUnlinkStory'),('productplan-unlinkStory','recommend','productplan-close'),('productplan-unlinkStory','recommend','productplan-create'),('productplan-unlinkStory','recommend','productplan-edit'),('productplan-unlinkStory','recommend','productplan-finish'),('productplan-unlinkStory','recommend','productplan-linkBug'),('productplan-unlinkStory','recommend','productplan-linkStory'),('productplan-unlinkStory','recommend','productplan-start'),('productplan-unlinkStory','recommend','productplan-unlinkBug'),('productplan-view','depend','productplan-browse'),('productplan-view','recommend','productplan-create'),('productplan-view','recommend','productplan-edit'),('program-activate','depend','program-browse'),('program-activate','depend','program-view'),('program-activate','recommend','program-close'),('program-activate','recommend','program-create'),('program-activate','recommend','program-delete'),('program-activate','recommend','program-edit'),('program-activate','recommend','program-start'),('program-batchUnlinkStakeholders','depend','program-browse'),('program-batchUnlinkStakeholders','depend','program-stakeholder'),('program-batchUnlinkStakeholders','recommend','program-unlinkStakeholder'),('program-close','depend','program-browse'),('program-close','depend','program-view'),('program-close','recommend','program-activate'),('program-close','recommend','program-create'),('program-close','recommend','program-delete'),('program-close','recommend','program-edit'),('program-close','recommend','program-start'),('program-create','depend','program-browse'),('program-create','recommend','program-edit'),('program-create','recommend','program-start'),('program-create','recommend','program-updateOrder'),('program-createStakeholder','depend','program-browse'),('program-createStakeholder','depend','program-stakeholder'),('program-createStakeholder','recommend','program-unlinkStakeholder'),('program-delete','depend','program-browse'),('program-delete','recommend','program-create'),('program-edit','depend','program-browse'),('program-edit','recommend','program-activate'),('program-edit','recommend','program-close'),('program-edit','recommend','program-create'),('program-edit','recommend','program-start'),('program-edit','recommend','program-suspend'),('program-edit','recommend','program-updateOrder'),('program-stakeholder','depend','program-browse'),('program-start','depend','program-browse'),('program-start','depend','program-view'),('program-start','recommend','program-activate'),('program-start','recommend','program-close'),('program-start','recommend','program-create'),('program-start','recommend','program-delete'),('program-start','recommend','program-edit'),('program-suspend','depend','program-browse'),('program-suspend','depend','program-view'),('program-suspend','recommend','program-activate'),('program-suspend','recommend','program-close'),('program-suspend','recommend','program-create'),('program-suspend','recommend','program-delete'),('program-suspend','recommend','program-edit'),('program-suspend','recommend','program-start'),('program-unbindWhitelist','depend','personnel-whitelist'),('program-unbindWhitelist','depend','program-browse'),('program-unbindWhitelist','recommend','personnel-addWhitelist'),('program-unlinkStakeholder','depend','program-browse'),('program-unlinkStakeholder','depend','program-stakeholder'),('program-unlinkStakeholder','recommend','program-createStakeholder'),('program-updateOrder','depend','program-browse'),('program-updateOrder','recommend','program-create'),('program-updateOrder','recommend','program-edit'),('programplan-browse','depend','project-index'),('programplan-browse','recommend','programplan-ganttEdit'),('programplan-create','depend','programplan-browse'),('programplan-create','recommend','programplan-edit'),('programplan-edit','depend','programplan-browse'),('programplan-edit','recommend','programplan-create'),('programplan-ganttEdit','depend','programplan-browse'),('project-activate','depend','project-browse'),('project-activate','recommend','project-batchEdit'),('project-activate','recommend','project-close'),('project-activate','recommend','project-create'),('project-activate','recommend','project-edit'),('project-activate','recommend','project-start'),('project-activate','recommend','project-suspend'),('project-addWhitelist','depend','project-whitelist'),('project-addWhitelist','recommend','project-unbindWhitelist'),('project-batchEdit','depend','project-browse'),('project-batchEdit','recommend','project-edit'),('project-browse','depend','project-index'),('project-browse','recommend','project-create'),('project-browse','recommend','project-dynamic'),('project-browse','recommend','project-edit'),('project-browse','recommend','project-index'),('project-browse','recommend','project-kanban'),('project-browse','recommend','project-updateOrder'),('project-browse','recommend','project-view'),('project-bug','depend','project-index'),('project-bug','recommend','project-testcase'),('project-bug','recommend','project-testreport'),('project-bug','recommend','project-testtask'),('project-close','depend','project-browse'),('project-close','recommend','project-activate'),('project-close','recommend','project-batchEdit'),('project-close','recommend','project-create'),('project-close','recommend','project-edit'),('project-close','recommend','project-start'),('project-close','recommend','project-suspend'),('project-copyGroup','depend','project-group'),('project-copyGroup','recommend','project-createGroup'),('project-copyGroup','recommend','project-editGroup'),('project-copyGroup','recommend','project-manageGroupMember'),('project-copyGroup','recommend','project-managePriv'),('project-create','depend','project-browse'),('project-create','recommend','project-activate'),('project-create','recommend','project-close'),('project-create','recommend','project-edit'),('project-create','recommend','project-group'),('project-create','recommend','project-manageProducts'),('project-create','recommend','project-start'),('project-create','recommend','project-suspend'),('project-create','recommend','project-team'),('project-create','recommend','project-updateOrder'),('project-create','recommend','project-whitelist'),('project-createGroup','depend','project-group'),('project-createGroup','recommend','project-copyGroup'),('project-createGroup','recommend','project-editGroup'),('project-createGroup','recommend','project-manageGroupMember'),('project-createGroup','recommend','project-managePriv'),('project-delete','depend','project-browse'),('project-delete','recommend','project-create'),('project-delete','recommend','project-edit'),('project-dynamic','depend','project-index'),('project-dynamic','recommend','project-browse'),('project-dynamic','recommend','project-view'),('project-edit','depend','project-browse'),('project-edit','recommend','project-activate'),('project-edit','recommend','project-batchEdit'),('project-edit','recommend','project-close'),('project-edit','recommend','project-create'),('project-edit','recommend','project-manageProducts'),('project-edit','recommend','project-start'),('project-edit','recommend','project-suspend'),('project-edit','recommend','project-updateOrder'),('project-editGroup','depend','project-group'),('project-editGroup','recommend','project-copyGroup'),('project-editGroup','recommend','project-createGroup'),('project-editGroup','recommend','project-manageGroupMember'),('project-editGroup','recommend','project-managePriv'),('project-execution','depend','project-index'),('project-execution','recommend','execution-create'),('project-export','depend','project-browse'),('project-group','depend','project-index'),('project-group','recommend','project-create'),('project-group','recommend','project-createGroup'),('project-group','recommend','project-edit'),('project-index','recommend','project-browse'),('project-index','recommend','project-kanban'),('project-kanban','depend','project-index'),('project-kanban','recommend','project-browse'),('project-kanban','recommend','project-dynamic'),('project-kanban','recommend','project-view'),('project-manageGroupMember','depend','project-group'),('project-manageGroupMember','recommend','project-copyGroup'),('project-manageGroupMember','recommend','project-createGroup'),('project-manageGroupMember','recommend','project-editGroup'),('project-manageGroupMember','recommend','project-managePriv'),('project-manageMembers','depend','project-team'),('project-manageMembers','recommend','project-unlinkMember'),('project-managePriv','depend','project-group'),('project-managePriv','recommend','project-copyGroup'),('project-managePriv','recommend','project-createGroup'),('project-managePriv','recommend','project-editGroup'),('project-managePriv','recommend','project-manageGroupMember'),('project-manageProducts','depend','project-browse'),('project-manageProducts','recommend','project-create'),('project-manageProducts','recommend','project-edit'),('project-programTitle','depend','project-browse'),('project-programTitle','recommend','program-browse'),('project-start','depend','project-browse'),('project-start','recommend','project-activate'),('project-start','recommend','project-batchEdit'),('project-start','recommend','project-close'),('project-start','recommend','project-create'),('project-start','recommend','project-edit'),('project-start','recommend','project-suspend'),('project-suspend','depend','project-browse'),('project-suspend','recommend','project-activate'),('project-suspend','recommend','project-batchEdit'),('project-suspend','recommend','project-close'),('project-suspend','recommend','project-create'),('project-suspend','recommend','project-edit'),('project-suspend','recommend','project-start'),('project-team','recommend','project-manageMembers'),('project-team','recommend','project-unlinkMember'),('project-testcase','depend','project-index'),('project-testcase','recommend','project-testreport'),('project-testcase','recommend','project-testtask'),('project-testreport','depend','project-index'),('project-testreport','recommend','project-testtask'),('project-testtask','depend','project-index'),('project-testtask','recommend','project-testcase'),('project-testtask','recommend','project-testreport'),('project-unbindWhitelist','depend','project-whitelist'),('project-unbindWhitelist','recommend','project-addWhitelist'),('project-unlinkMember','depend','project-team'),('project-unlinkMember','recommend','project-manageMembers'),('project-updateOrder','depend','project-browse'),('project-updateOrder','recommend','project-create'),('project-updateOrder','recommend','project-edit'),('project-view','depend','project-index'),('project-view','recommend','project-create'),('project-view','recommend','project-edit'),('project-view','recommend','project-group'),('project-view','recommend','project-manageProducts'),('project-view','recommend','project-team'),('project-view','recommend','stakeholder-browse'),('project-whitelist','depend','project-index'),('project-whitelist','recommend','project-addWhitelist'),('project-whitelist','recommend','project-unbindWhitelist'),('project-whitelist','recommend','project-view'),('projectbuild-batchUnlinkBug','recommend','projectbuild-unlinkBug'),('projectbuild-batchUnlinkStory','recommend','projectbuild-unlinkStory'),('projectbuild-browse','depend','project-index'),('projectbuild-browse','recommend','projectbuild-view'),('projectbuild-create','recommend','projectbuild-batchUnlinkBug'),('projectbuild-create','recommend','projectbuild-batchUnlinkStory'),('projectbuild-create','recommend','projectbuild-delete'),('projectbuild-create','recommend','projectbuild-edit'),('projectbuild-create','recommend','projectbuild-linkBug'),('projectbuild-create','recommend','projectbuild-linkStory'),('projectbuild-create','recommend','projectbuild-unlinkBug'),('projectbuild-create','recommend','projectbuild-unlinkStory'),('projectbuild-delete','recommend','projectbuild-batchUnlinkBug'),('projectbuild-delete','recommend','projectbuild-batchUnlinkStory'),('projectbuild-delete','recommend','projectbuild-create'),('projectbuild-delete','recommend','projectbuild-edit'),('projectbuild-delete','recommend','projectbuild-linkBug'),('projectbuild-delete','recommend','projectbuild-linkStory'),('projectbuild-delete','recommend','projectbuild-unlinkBug'),('projectbuild-delete','recommend','projectbuild-unlinkStory'),('projectbuild-edit','recommend','projectbuild-batchUnlinkBug'),('projectbuild-edit','recommend','projectbuild-batchUnlinkStory'),('projectbuild-edit','recommend','projectbuild-create'),('projectbuild-edit','recommend','projectbuild-delete'),('projectbuild-edit','recommend','projectbuild-linkBug'),('projectbuild-edit','recommend','projectbuild-linkStory'),('projectbuild-edit','recommend','projectbuild-unlinkBug'),('projectbuild-edit','recommend','projectbuild-unlinkStory'),('projectbuild-linkBug','recommend','projectbuild-create'),('projectbuild-linkBug','recommend','projectbuild-delete'),('projectbuild-linkBug','recommend','projectbuild-edit'),('projectbuild-linkBug','recommend','projectbuild-unlinkBug'),('projectbuild-linkStory','recommend','projectbuild-create'),('projectbuild-linkStory','recommend','projectbuild-delete'),('projectbuild-linkStory','recommend','projectbuild-edit'),('projectbuild-linkStory','recommend','projectbuild-linkBug'),('projectbuild-linkStory','recommend','projectbuild-unlinkStory'),('projectbuild-unlinkBug','recommend','projectbuild-batchUnlinkStory'),('projectbuild-unlinkBug','recommend','projectbuild-create'),('projectbuild-unlinkBug','recommend','projectbuild-delete'),('projectbuild-unlinkBug','recommend','projectbuild-edit'),('projectbuild-unlinkBug','recommend','projectbuild-linkStory'),('projectbuild-unlinkStory','recommend','projectbuild-batchUnlinkStory'),('projectbuild-unlinkStory','recommend','projectbuild-create'),('projectbuild-unlinkStory','recommend','projectbuild-delete'),('projectbuild-unlinkStory','recommend','projectbuild-edit'),('projectbuild-unlinkStory','recommend','projectbuild-linkStory'),('projectbuild-view','depend','projectbuild-browse'),('projectplan-browse','depend','project-index'),('projectplan-browse','recommend','projectplan-create'),('projectplan-browse','recommend','projectplan-edit'),('projectplan-create','depend','projectplan-browse'),('projectplan-create','recommend','projectplan-edit'),('projectplan-edit','depend','projectplan-browse'),('projectplan-edit','recommend','projectplan-create'),('projectplan-view','depend','projectplan-browse'),('projectrelease-batchUnlinkBug','depend','projectrelease-browse'),('projectrelease-batchUnlinkBug','recommend','projectrelease-unlinkBug'),('projectrelease-batchUnlinkStory','depend','projectrelease-browse'),('projectrelease-batchUnlinkStory','recommend','projectrelease-unlinkStory'),('projectrelease-browse','depend','project-index'),('projectrelease-browse','recommend','projectrelease-create'),('projectrelease-browse','recommend','projectrelease-edit'),('projectrelease-browse','recommend','projectrelease-view'),('projectrelease-changeStatus','depend','projectrelease-browse'),('projectrelease-changeStatus','recommend','projectrelease-create'),('projectrelease-changeStatus','recommend','projectrelease-delete'),('projectrelease-changeStatus','recommend','projectrelease-edit'),('projectrelease-changeStatus','recommend','projectrelease-linkBug'),('projectrelease-changeStatus','recommend','projectrelease-linkStory'),('projectrelease-changeStatus','recommend','projectrelease-unlinkBug'),('projectrelease-changeStatus','recommend','projectrelease-unlinkStory'),('projectrelease-create','depend','projectrelease-browse'),('projectrelease-create','recommend','projectrelease-changeStatus'),('projectrelease-create','recommend','projectrelease-delete'),('projectrelease-create','recommend','projectrelease-edit'),('projectrelease-create','recommend','projectrelease-linkBug'),('projectrelease-create','recommend','projectrelease-linkStory'),('projectrelease-create','recommend','projectrelease-unlinkBug'),('projectrelease-create','recommend','projectrelease-unlinkStory'),('projectrelease-delete','depend','projectrelease-browse'),('projectrelease-delete','recommend','projectrelease-changeStatus'),('projectrelease-delete','recommend','projectrelease-create'),('projectrelease-delete','recommend','projectrelease-edit'),('projectrelease-delete','recommend','projectrelease-linkBug'),('projectrelease-delete','recommend','projectrelease-linkStory'),('projectrelease-delete','recommend','projectrelease-unlinkBug'),('projectrelease-delete','recommend','projectrelease-unlinkStory'),('projectrelease-edit','depend','projectrelease-browse'),('projectrelease-edit','recommend','projectrelease-changeStatus'),('projectrelease-edit','recommend','projectrelease-create'),('projectrelease-edit','recommend','projectrelease-delete'),('projectrelease-edit','recommend','projectrelease-linkBug'),('projectrelease-edit','recommend','projectrelease-linkStory'),('projectrelease-edit','recommend','projectrelease-unlinkBug'),('projectrelease-edit','recommend','projectrelease-unlinkStory'),('projectrelease-export','depend','projectrelease-browse'),('projectrelease-export','depend','projectrelease-view'),('projectrelease-linkBug','depend','projectrelease-browse'),('projectrelease-linkBug','recommend','projectrelease-changeStatus'),('projectrelease-linkBug','recommend','projectrelease-create'),('projectrelease-linkBug','recommend','projectrelease-delete'),('projectrelease-linkBug','recommend','projectrelease-edit'),('projectrelease-linkBug','recommend','projectrelease-linkStory'),('projectrelease-linkBug','recommend','projectrelease-unlinkBug'),('projectrelease-linkBug','recommend','projectrelease-unlinkStory'),('projectrelease-linkStory','depend','projectrelease-browse'),('projectrelease-linkStory','recommend','projectrelease-changeStatus'),('projectrelease-linkStory','recommend','projectrelease-create'),('projectrelease-linkStory','recommend','projectrelease-delete'),('projectrelease-linkStory','recommend','projectrelease-edit'),('projectrelease-linkStory','recommend','projectrelease-linkBug'),('projectrelease-linkStory','recommend','projectrelease-unlinkBug'),('projectrelease-linkStory','recommend','projectrelease-unlinkStory'),('projectrelease-notify','depend','projectrelease-browse'),('projectrelease-unlinkBug','depend','projectrelease-browse'),('projectrelease-unlinkBug','recommend','projectrelease-batchUnlinkBug'),('projectrelease-unlinkBug','recommend','projectrelease-changeStatus'),('projectrelease-unlinkBug','recommend','projectrelease-create'),('projectrelease-unlinkBug','recommend','projectrelease-delete'),('projectrelease-unlinkBug','recommend','projectrelease-edit'),('projectrelease-unlinkBug','recommend','projectrelease-linkBug'),('projectrelease-unlinkBug','recommend','projectrelease-linkStory'),('projectrelease-unlinkBug','recommend','projectrelease-unlinkStory'),('projectrelease-unlinkStory','depend','projectrelease-browse'),('projectrelease-unlinkStory','recommend','projectrelease-batchUnlinkStory'),('projectrelease-unlinkStory','recommend','projectrelease-changeStatus'),('projectrelease-unlinkStory','recommend','projectrelease-create'),('projectrelease-unlinkStory','recommend','projectrelease-delete'),('projectrelease-unlinkStory','recommend','projectrelease-edit'),('projectrelease-unlinkStory','recommend','projectrelease-linkBug'),('projectrelease-unlinkStory','recommend','projectrelease-linkStory'),('projectrelease-unlinkStory','recommend','projectrelease-unlinkBug'),('projectrelease-view','depend','projectrelease-browse'),('projectrelease-view','recommend','projectrelease-create'),('projectrelease-view','recommend','projectrelease-edit'),('projectstory-batchUnlinkStory','depend','projectstory-story'),('projectstory-batchUnlinkStory','recommend','projectstory-unlinkStory'),('projectstory-importFromLib','depend','projectstory-story'),('projectstory-importFromLib','recommend','assetlib-story'),('projectstory-importFromLib','recommend','assetlib-storylib'),('projectstory-importFromLib','recommend','projectstory-batchUnlinkStory'),('projectstory-importFromLib','recommend','projectstory-importplanstories'),('projectstory-importFromLib','recommend','projectstory-linkStory'),('projectstory-importFromLib','recommend','projectstory-unlinkStory'),('projectstory-importFromLib','recommend','story-batchToTask'),('projectstory-importplanstories','depend','projectstory-story'),('projectstory-importplanstories','recommend','projectstory-importFromLib'),('projectstory-importplanstories','recommend','projectstory-linkStory'),('projectstory-importplanstories','recommend','projectstory-unlinkStory'),('projectstory-importplanstories','recommend','story-batchToTask'),('projectstory-linkStory','depend','projectstory-story'),('projectstory-linkStory','recommend','projectstory-importFromLib'),('projectstory-linkStory','recommend','projectstory-importplanstories'),('projectstory-linkStory','recommend','projectstory-unlinkStory'),('projectstory-linkStory','recommend','story-batchToTask'),('projectstory-story','depend','project-index'),('projectstory-story','recommend','projectstory-view'),('projectstory-track','depend','project-index'),('projectstory-track','recommend','design-revision'),('projectstory-track','recommend','projectstory-story'),('projectstory-track','recommend','projectstory-view'),('projectstory-unlinkStory','depend','projectstory-story'),('projectstory-unlinkStory','recommend','projectstory-batchUnlinkStory'),('projectstory-unlinkStory','recommend','projectstory-importFromLib'),('projectstory-unlinkStory','recommend','projectstory-importplanstories'),('projectstory-unlinkStory','recommend','projectstory-linkStory'),('projectstory-unlinkStory','recommend','story-batchToTask'),('projectstory-view','depend','projectstory-story'),('pssp-browse','depend','project-index'),('pssp-update','depend','pssp-browse'),('release-batchUnlinkBug','depend','release-view'),('release-batchUnlinkBug','recommend','release-unlinkBug'),('release-batchUnlinkStory','depend','release-view'),('release-batchUnlinkStory','recommend','release-unlinkStory'),('release-browse','depend','product-browse'),('release-browse','recommend','release-view'),('release-changeStatus','depend','release-view'),('release-changeStatus','recommend','release-create'),('release-changeStatus','recommend','release-edit'),('release-changeStatus','recommend','release-linkBug'),('release-changeStatus','recommend','release-linkStory'),('release-changeStatus','recommend','release-notify'),('release-changeStatus','recommend','release-unlinkBug'),('release-changeStatus','recommend','release-unlinkStory'),('release-create','depend','release-browse'),('release-create','recommend','release-changeStatus'),('release-create','recommend','release-edit'),('release-create','recommend','release-linkBug'),('release-create','recommend','release-linkStory'),('release-create','recommend','release-notify'),('release-create','recommend','release-unlinkBug'),('release-create','recommend','release-unlinkStory'),('release-delete','depend','release-view'),('release-delete','recommend','release-create'),('release-delete','recommend','release-edit'),('release-edit','depend','release-view'),('release-edit','recommend','release-changeStatus'),('release-edit','recommend','release-create'),('release-edit','recommend','release-linkBug'),('release-edit','recommend','release-linkStory'),('release-edit','recommend','release-notify'),('release-edit','recommend','release-unlinkBug'),('release-edit','recommend','release-unlinkStory'),('release-export','depend','release-view'),('release-linkBug','depend','release-view'),('release-linkBug','recommend','release-changeStatus'),('release-linkBug','recommend','release-create'),('release-linkBug','recommend','release-edit'),('release-linkBug','recommend','release-linkStory'),('release-linkBug','recommend','release-notify'),('release-linkBug','recommend','release-unlinkBug'),('release-linkBug','recommend','release-unlinkStory'),('release-linkStory','depend','release-view'),('release-linkStory','recommend','release-changeStatus'),('release-linkStory','recommend','release-create'),('release-linkStory','recommend','release-edit'),('release-linkStory','recommend','release-linkBug'),('release-linkStory','recommend','release-notify'),('release-linkStory','recommend','release-unlinkBug'),('release-linkStory','recommend','release-unlinkStory'),('release-notify','depend','release-view'),('release-notify','recommend','release-create'),('release-notify','recommend','release-edit'),('release-notify','recommend','release-linkBug'),('release-notify','recommend','release-linkStory'),('release-notify','recommend','release-unlinkBug'),('release-notify','recommend','release-unlinkStory'),('release-unlinkBug','depend','release-view'),('release-unlinkBug','recommend','release-batchUnlinkBug'),('release-unlinkBug','recommend','release-changeStatus'),('release-unlinkBug','recommend','release-create'),('release-unlinkBug','recommend','release-edit'),('release-unlinkBug','recommend','release-linkBug'),('release-unlinkBug','recommend','release-linkStory'),('release-unlinkBug','recommend','release-notify'),('release-unlinkBug','recommend','release-unlinkStory'),('release-unlinkStory','depend','release-view'),('release-unlinkStory','recommend','release-batchUnlinkStory'),('release-unlinkStory','recommend','release-changeStatus'),('release-unlinkStory','recommend','release-create'),('release-unlinkStory','recommend','release-edit'),('release-unlinkStory','recommend','release-linkBug'),('release-unlinkStory','recommend','release-linkStory'),('release-unlinkStory','recommend','release-notify'),('release-unlinkStory','recommend','release-unlinkBug'),('release-view','depend','release-browse'),('release-view','recommend','product-roadmap'),('repo-addBug','depend','repo-diff'),('repo-addBug','recommend','mr-addReview'),('repo-addBug','recommend','repo-addComment'),('repo-addBug','recommend','repo-editBug'),('repo-addBug','recommend','repo-editComment'),('repo-addBug','recommend','repo-review'),('repo-addComment','depend','repo-diff'),('repo-addComment','recommend','repo-addBug'),('repo-addComment','recommend','repo-editBug'),('repo-addComment','recommend','repo-editComment'),('repo-addComment','recommend','repo-review'),('repo-apiGetRepoByUrl','depend','repo-maintain'),('repo-blame','recommend','repo-linkBug'),('repo-blame','recommend','repo-linkStory'),('repo-blame','recommend','repo-linkTask'),('repo-blame','recommend','repo-log'),('repo-blame','recommend','repo-revision'),('repo-blame','recommend','repo-showSyncCommit'),('repo-blame','recommend','repo-unlink'),('repo-blame','recommend','repo-view'),('repo-browse','depend','repo-maintain'),('repo-browse','recommend','repo-create'),('repo-browse','recommend','repo-edit'),('repo-create','depend','repo-maintain'),('repo-create','recommend','repo-edit'),('repo-create','recommend','repo-import'),('repo-delete','depend','repo-maintain'),('repo-delete','recommend','repo-create'),('repo-delete','recommend','repo-edit'),('repo-deleteBug','depend','repo-diff'),('repo-deleteBug','recommend','repo-addBug'),('repo-deleteBug','recommend','repo-addComment'),('repo-deleteBug','recommend','repo-editBug'),('repo-deleteBug','recommend','repo-editComment'),('repo-deleteBug','recommend','repo-review'),('repo-deleteComment','depend','repo-diff'),('repo-deleteComment','recommend','repo-addBug'),('repo-deleteComment','recommend','repo-addComment'),('repo-deleteComment','recommend','repo-editBug'),('repo-deleteComment','recommend','repo-editComment'),('repo-deleteComment','recommend','repo-review'),('repo-diff','recommend','repo-addBug'),('repo-diff','recommend','repo-editBug'),('repo-diff','recommend','repo-review'),('repo-download','recommend','repo-downloadCode'),('repo-downloadCode','recommend','repo-download'),('repo-edit','depend','repo-maintain'),('repo-edit','recommend','repo-create'),('repo-editBug','depend','repo-diff'),('repo-editBug','recommend','repo-addBug'),('repo-editBug','recommend','repo-addComment'),('repo-editBug','recommend','repo-editComment'),('repo-editBug','recommend','repo-review'),('repo-editComment','depend','repo-diff'),('repo-editComment','recommend','repo-addBug'),('repo-editComment','recommend','repo-addComment'),('repo-editComment','recommend','repo-editBug'),('repo-editComment','recommend','repo-review'),('repo-import','depend','repo-maintain'),('repo-import','recommend','repo-create'),('repo-linkBug','recommend','repo-blame'),('repo-linkBug','recommend','repo-linkStory'),('repo-linkBug','recommend','repo-linkTask'),('repo-linkBug','recommend','repo-log'),('repo-linkBug','recommend','repo-revision'),('repo-linkBug','recommend','repo-showSyncCommit'),('repo-linkBug','recommend','repo-unlink'),('repo-linkBug','recommend','repo-view'),('repo-linkStory','recommend','repo-blame'),('repo-linkStory','recommend','repo-linkBug'),('repo-linkStory','recommend','repo-linkTask'),('repo-linkStory','recommend','repo-log'),('repo-linkStory','recommend','repo-revision'),('repo-linkStory','recommend','repo-showSyncCommit'),('repo-linkStory','recommend','repo-unlink'),('repo-linkStory','recommend','repo-view'),('repo-linkTask','recommend','repo-blame'),('repo-linkTask','recommend','repo-linkBug'),('repo-linkTask','recommend','repo-linkStory'),('repo-linkTask','recommend','repo-log'),('repo-linkTask','recommend','repo-revision'),('repo-linkTask','recommend','repo-showSyncCommit'),('repo-linkTask','recommend','repo-unlink'),('repo-linkTask','recommend','repo-view'),('repo-log','recommend','repo-blame'),('repo-log','recommend','repo-linkBug'),('repo-log','recommend','repo-linkStory'),('repo-log','recommend','repo-linkTask'),('repo-log','recommend','repo-revision'),('repo-log','recommend','repo-showSyncCommit'),('repo-log','recommend','repo-unlink'),('repo-log','recommend','repo-view'),('repo-maintain','recommend','repo-browse'),('repo-maintain','recommend','repo-create'),('repo-maintain','recommend','repo-edit'),('repo-review','depend','repo-diff'),('repo-review','recommend','repo-addBug'),('repo-review','recommend','repo-editBug'),('repo-revision','recommend','repo-blame'),('repo-revision','recommend','repo-linkBug'),('repo-revision','recommend','repo-linkStory'),('repo-revision','recommend','repo-linkTask'),('repo-revision','recommend','repo-log'),('repo-revision','recommend','repo-showSyncCommit'),('repo-revision','recommend','repo-unlink'),('repo-revision','recommend','repo-view'),('repo-showSyncCommit','recommend','repo-blame'),('repo-showSyncCommit','recommend','repo-linkBug'),('repo-showSyncCommit','recommend','repo-linkStory'),('repo-showSyncCommit','recommend','repo-linkTask'),('repo-showSyncCommit','recommend','repo-log'),('repo-showSyncCommit','recommend','repo-revision'),('repo-showSyncCommit','recommend','repo-unlink'),('repo-showSyncCommit','recommend','repo-view'),('repo-unlink','recommend','repo-blame'),('repo-unlink','recommend','repo-linkBug'),('repo-unlink','recommend','repo-linkStory'),('repo-unlink','recommend','repo-linkTask'),('repo-unlink','recommend','repo-log'),('repo-unlink','recommend','repo-revision'),('repo-unlink','recommend','repo-showSyncCommit'),('repo-unlink','recommend','repo-view'),('repo-view','recommend','repo-blame'),('repo-view','recommend','repo-linkBug'),('repo-view','recommend','repo-linkStory'),('repo-view','recommend','repo-linkTask'),('repo-view','recommend','repo-log'),('repo-view','recommend','repo-revision'),('repo-view','recommend','repo-showSyncCommit'),('repo-view','recommend','repo-unlink'),('report-viewReport','depend','report-customeredReport'),('requirement-activate','depend','requirement-view'),('requirement-activate','recommend','requirement-assignTo'),('requirement-activate','recommend','requirement-change'),('requirement-activate','recommend','requirement-close'),('requirement-activate','recommend','requirement-create'),('requirement-activate','recommend','requirement-edit'),('requirement-activate','recommend','requirement-linkRequirements'),('requirement-activate','recommend','requirement-linkStory'),('requirement-activate','recommend','requirement-recall'),('requirement-activate','recommend','requirement-submitReview'),('requirement-assignTo','depend','requirement-view'),('requirement-assignTo','recommend','requirement-activate'),('requirement-assignTo','recommend','requirement-batchAssignTo'),('requirement-assignTo','recommend','requirement-change'),('requirement-assignTo','recommend','requirement-close'),('requirement-assignTo','recommend','requirement-create'),('requirement-assignTo','recommend','requirement-edit'),('requirement-assignTo','recommend','requirement-linkRequirements'),('requirement-assignTo','recommend','requirement-linkStory'),('requirement-assignTo','recommend','requirement-recall'),('requirement-assignTo','recommend','requirement-submitReview'),('requirement-batchAssignTo','depend','product-requirement'),('requirement-batchAssignTo','recommend','requirement-assignTo'),('requirement-batchChangeBranch','depend','product-requirement'),('requirement-batchChangeBranch','recommend','requirement-edit'),('requirement-batchChangeModule','depend','product-requirement'),('requirement-batchChangeModule','recommend','requirement-edit'),('requirement-batchChangeRoadmap','depend','product-requirement'),('requirement-batchChangeRoadmap','recommend','requirement-batchCreate'),('requirement-batchChangeRoadmap','recommend','requirement-create'),('requirement-batchChangeRoadmap','recommend','requirement-edit'),('requirement-batchClose','depend','product-requirement'),('requirement-batchClose','recommend','requirement-close'),('requirement-batchCreate','depend','product-requirement'),('requirement-batchCreate','recommend','requirement-create'),('requirement-batchEdit','depend','product-requirement'),('requirement-batchEdit','recommend','requirement-edit'),('requirement-batchReview','depend','product-requirement'),('requirement-batchReview','recommend','requirement-review'),('requirement-change','depend','requirement-view'),('requirement-change','recommend','requirement-activate'),('requirement-change','recommend','requirement-assignTo'),('requirement-change','recommend','requirement-close'),('requirement-change','recommend','requirement-create'),('requirement-change','recommend','requirement-edit'),('requirement-change','recommend','requirement-linkRequirements'),('requirement-change','recommend','requirement-linkStory'),('requirement-change','recommend','requirement-recall'),('requirement-change','recommend','requirement-submitReview'),('requirement-close','depend','requirement-view'),('requirement-close','recommend','requirement-activate'),('requirement-close','recommend','requirement-assignTo'),('requirement-close','recommend','requirement-batchClose'),('requirement-close','recommend','requirement-change'),('requirement-close','recommend','requirement-create'),('requirement-close','recommend','requirement-edit'),('requirement-close','recommend','requirement-linkRequirements'),('requirement-close','recommend','requirement-linkStory'),('requirement-close','recommend','requirement-recall'),('requirement-close','recommend','requirement-submitReview'),('requirement-create','recommend','requirement-activate'),('requirement-create','recommend','requirement-assignTo'),('requirement-create','recommend','requirement-batchCreate'),('requirement-create','recommend','requirement-change'),('requirement-create','recommend','requirement-close'),('requirement-create','recommend','requirement-edit'),('requirement-create','recommend','requirement-linkRequirements'),('requirement-create','recommend','requirement-linkStory'),('requirement-create','recommend','requirement-recall'),('requirement-create','recommend','requirement-submitReview'),('requirement-delete','depend','requirement-view'),('requirement-delete','recommend','requirement-create'),('requirement-delete','recommend','requirement-edit'),('requirement-edit','depend','requirement-view'),('requirement-edit','recommend','requirement-activate'),('requirement-edit','recommend','requirement-assignTo'),('requirement-edit','recommend','requirement-batchEdit'),('requirement-edit','recommend','requirement-change'),('requirement-edit','recommend','requirement-close'),('requirement-edit','recommend','requirement-create'),('requirement-edit','recommend','requirement-linkRequirements'),('requirement-edit','recommend','requirement-linkStory'),('requirement-edit','recommend','requirement-recall'),('requirement-edit','recommend','requirement-submitReview'),('requirement-export','depend','product-requirement'),('requirement-exportTemplate','depend','product-requirement'),('requirement-import','depend','product-requirement'),('requirement-import','depend','requirement-exportTemplate'),('requirement-linkRequirements','depend','requirement-view'),('requirement-linkRequirements','recommend','requirement-activate'),('requirement-linkRequirements','recommend','requirement-assignTo'),('requirement-linkRequirements','recommend','requirement-change'),('requirement-linkRequirements','recommend','requirement-close'),('requirement-linkRequirements','recommend','requirement-create'),('requirement-linkRequirements','recommend','requirement-edit'),('requirement-linkRequirements','recommend','requirement-linkStory'),('requirement-linkRequirements','recommend','requirement-recall'),('requirement-linkRequirements','recommend','requirement-submitReview'),('requirement-linkStory','depend','requirement-view'),('requirement-linkStory','recommend','requirement-activate'),('requirement-linkStory','recommend','requirement-assignTo'),('requirement-linkStory','recommend','requirement-batchChangeModule'),('requirement-linkStory','recommend','requirement-change'),('requirement-linkStory','recommend','requirement-close'),('requirement-linkStory','recommend','requirement-create'),('requirement-linkStory','recommend','requirement-edit'),('requirement-linkStory','recommend','requirement-linkRequirements'),('requirement-linkStory','recommend','requirement-recall'),('requirement-linkStory','recommend','requirement-submitReview'),('requirement-recall','depend','requirement-view'),('requirement-recall','recommend','requirement-activate'),('requirement-recall','recommend','requirement-assignTo'),('requirement-recall','recommend','requirement-change'),('requirement-recall','recommend','requirement-close'),('requirement-recall','recommend','requirement-create'),('requirement-recall','recommend','requirement-edit'),('requirement-recall','recommend','requirement-linkRequirements'),('requirement-recall','recommend','requirement-linkStory'),('requirement-recall','recommend','requirement-submitReview'),('requirement-report','depend','product-requirement'),('requirement-review','depend','requirement-view'),('requirement-review','recommend','requirement-batchReview'),('requirement-submitReview','depend','requirement-view'),('requirement-submitReview','recommend','requirement-activate'),('requirement-submitReview','recommend','requirement-assignTo'),('requirement-submitReview','recommend','requirement-change'),('requirement-submitReview','recommend','requirement-close'),('requirement-submitReview','recommend','requirement-create'),('requirement-submitReview','recommend','requirement-edit'),('requirement-submitReview','recommend','requirement-linkRequirements'),('requirement-submitReview','recommend','requirement-linkStory'),('requirement-submitReview','recommend','requirement-recall'),('researchplan-browse','depend','project-index'),('researchplan-browse','recommend','researchplan-create'),('researchplan-browse','recommend','researchplan-edit'),('researchplan-browse','recommend','researchplan-view'),('researchplan-create','depend','researchplan-browse'),('researchplan-create','recommend','researchplan-edit'),('researchplan-create','recommend','researchplan-view'),('researchplan-delete','depend','researchplan-browse'),('researchplan-delete','recommend','researchplan-create'),('researchplan-delete','recommend','researchplan-edit'),('researchplan-delete','recommend','researchplan-view'),('researchplan-edit','depend','researchplan-browse'),('researchplan-edit','recommend','researchplan-create'),('researchplan-edit','recommend','researchplan-view'),('researchplan-view','depend','researchplan-browse'),('researchplan-view','recommend','researchplan-create'),('researchplan-view','recommend','researchplan-edit'),('researchreport-browse','depend','project-index'),('researchreport-browse','depend','researchplan-browse'),('researchreport-browse','recommend','researchreport-create'),('researchreport-browse','recommend','researchreport-edit'),('researchreport-browse','recommend','researchreport-view'),('researchreport-create','depend','researchplan-browse'),('researchreport-create','depend','researchreport-browse'),('researchreport-create','recommend','researchreport-edit'),('researchreport-create','recommend','researchreport-view'),('researchreport-delete','depend','researchplan-browse'),('researchreport-delete','depend','researchreport-browse'),('researchreport-delete','recommend','researchreport-create'),('researchreport-delete','recommend','researchreport-edit'),('researchreport-delete','recommend','researchreport-view'),('researchreport-edit','depend','researchplan-browse'),('researchreport-edit','depend','researchreport-browse'),('researchreport-edit','recommend','researchreport-create'),('researchreport-edit','recommend','researchreport-view'),('researchreport-view','depend','researchplan-browse'),('researchreport-view','depend','researchreport-browse'),('researchreport-view','recommend','researchreport-create'),('researchreport-view','recommend','researchreport-edit'),('review-assess','depend','review-browse'),('review-assess','recommend','review-report'),('review-audit','depend','review-browse'),('review-browse','depend','project-index'),('review-browse','recommend','review-view'),('review-create','depend','review-browse'),('review-create','recommend','review-edit'),('review-create','recommend','review-recall'),('review-create','recommend','review-report'),('review-create','recommend','review-submit'),('review-create','recommend','review-toAudit'),('review-delete','depend','review-browse'),('review-delete','recommend','review-create'),('review-delete','recommend','review-edit'),('review-edit','depend','review-browse'),('review-edit','recommend','review-create'),('review-edit','recommend','review-delete'),('review-edit','recommend','review-recall'),('review-edit','recommend','review-report'),('review-edit','recommend','review-submit'),('review-edit','recommend','review-toAudit'),('review-recall','depend','review-browse'),('review-recall','recommend','review-create'),('review-recall','recommend','review-delete'),('review-recall','recommend','review-edit'),('review-recall','recommend','review-report'),('review-recall','recommend','review-submit'),('review-recall','recommend','review-toAudit'),('review-report','depend','review-browse'),('review-report','recommend','review-create'),('review-report','recommend','review-delete'),('review-report','recommend','review-edit'),('review-report','recommend','review-recall'),('review-report','recommend','review-submit'),('review-report','recommend','review-toAudit'),('review-submit','depend','review-browse'),('review-submit','recommend','review-create'),('review-submit','recommend','review-edit'),('review-submit','recommend','review-recall'),('review-submit','recommend','review-report'),('review-submit','recommend','review-toAudit'),('review-toAudit','depend','review-browse'),('review-toAudit','recommend','review-create'),('review-toAudit','recommend','review-delete'),('review-toAudit','recommend','review-edit'),('review-toAudit','recommend','review-recall'),('review-toAudit','recommend','review-report'),('review-toAudit','recommend','review-submit'),('review-view','depend','review-browse'),('reviewcl-batchCreate','recommend','reviewcl-create'),('reviewcl-create','recommend','reviewcl-batchCreate'),('reviewcl-create','recommend','reviewcl-delete'),('reviewcl-create','recommend','reviewcl-edit'),('reviewcl-create','recommend','reviewcl-view'),('reviewcl-delete','recommend','reviewcl-create'),('reviewcl-delete','recommend','reviewcl-edit'),('reviewcl-delete','recommend','reviewcl-view'),('reviewcl-edit','recommend','reviewcl-create'),('reviewcl-edit','recommend','reviewcl-delete'),('reviewcl-edit','recommend','reviewcl-view'),('reviewissue-create','depend','reviewissue-issue'),('reviewissue-create','recommend','reviewissue-delete'),('reviewissue-create','recommend','reviewissue-edit'),('reviewissue-create','recommend','reviewissue-resolved'),('reviewissue-create','recommend','reviewissue-updateStatus'),('reviewissue-delete','depend','reviewissue-issue'),('reviewissue-delete','recommend','reviewissue-create'),('reviewissue-delete','recommend','reviewissue-edit'),('reviewissue-delete','recommend','reviewissue-resolved'),('reviewissue-delete','recommend','reviewissue-updateStatus'),('reviewissue-edit','depend','reviewissue-issue'),('reviewissue-edit','recommend','reviewissue-create'),('reviewissue-edit','recommend','reviewissue-delete'),('reviewissue-edit','recommend','reviewissue-resolved'),('reviewissue-edit','recommend','reviewissue-updateStatus'),('reviewissue-issue','depend','project-index'),('reviewissue-issue','depend','review-browse'),('reviewissue-resolved','depend','reviewissue-issue'),('reviewissue-resolved','recommend','reviewissue-create'),('reviewissue-resolved','recommend','reviewissue-delete'),('reviewissue-resolved','recommend','reviewissue-edit'),('reviewissue-resolved','recommend','reviewissue-updateStatus'),('reviewissue-updateStatus','depend','reviewissue-issue'),('reviewissue-updateStatus','recommend','reviewissue-create'),('reviewissue-updateStatus','recommend','reviewissue-delete'),('reviewissue-updateStatus','recommend','reviewissue-edit'),('reviewissue-updateStatus','recommend','reviewissue-resolved'),('reviewissue-view','depend','reviewissue-issue'),('risk-activate','depend','risk-browse'),('risk-activate','depend','risk-view'),('risk-activate','recommend','risk-assignTo'),('risk-activate','recommend','risk-cancel'),('risk-activate','recommend','risk-close'),('risk-activate','recommend','risk-create'),('risk-activate','recommend','risk-edit'),('risk-activate','recommend','risk-hangup'),('risk-activate','recommend','risk-track'),('risk-assignTo','depend','risk-browse'),('risk-assignTo','depend','risk-view'),('risk-assignTo','recommend','risk-activate'),('risk-assignTo','recommend','risk-cancel'),('risk-assignTo','recommend','risk-close'),('risk-assignTo','recommend','risk-create'),('risk-assignTo','recommend','risk-edit'),('risk-assignTo','recommend','risk-hangup'),('risk-assignTo','recommend','risk-track'),('risk-batchCreate','depend','risk-browse'),('risk-batchCreate','depend','risk-view'),('risk-batchCreate','recommend','risk-create'),('risk-batchImportToLib','depend','risk-browse'),('risk-batchImportToLib','recommend','risk-importToLib'),('risk-browse','recommend','risk-view'),('risk-cancel','depend','risk-browse'),('risk-cancel','depend','risk-view'),('risk-cancel','recommend','risk-activate'),('risk-cancel','recommend','risk-assignTo'),('risk-cancel','recommend','risk-close'),('risk-cancel','recommend','risk-create'),('risk-cancel','recommend','risk-edit'),('risk-cancel','recommend','risk-hangup'),('risk-cancel','recommend','risk-track'),('risk-close','depend','risk-browse'),('risk-close','depend','risk-view'),('risk-close','recommend','risk-activate'),('risk-close','recommend','risk-assignTo'),('risk-close','recommend','risk-cancel'),('risk-close','recommend','risk-create'),('risk-close','recommend','risk-edit'),('risk-close','recommend','risk-hangup'),('risk-close','recommend','risk-track'),('risk-create','depend','risk-browse'),('risk-create','depend','risk-view'),('risk-create','recommend','risk-activate'),('risk-create','recommend','risk-assignTo'),('risk-create','recommend','risk-batchCreate'),('risk-create','recommend','risk-cancel'),('risk-create','recommend','risk-close'),('risk-create','recommend','risk-edit'),('risk-create','recommend','risk-hangup'),('risk-create','recommend','risk-track'),('risk-delete','depend','risk-browse'),('risk-edit','depend','risk-browse'),('risk-edit','depend','risk-view'),('risk-edit','recommend','risk-activate'),('risk-edit','recommend','risk-assignTo'),('risk-edit','recommend','risk-cancel'),('risk-edit','recommend','risk-close'),('risk-edit','recommend','risk-create'),('risk-edit','recommend','risk-hangup'),('risk-edit','recommend','risk-track'),('risk-export','depend','risk-browse'),('risk-hangup','depend','risk-browse'),('risk-hangup','depend','risk-view'),('risk-hangup','recommend','risk-activate'),('risk-hangup','recommend','risk-assignTo'),('risk-hangup','recommend','risk-cancel'),('risk-hangup','recommend','risk-close'),('risk-hangup','recommend','risk-create'),('risk-hangup','recommend','risk-edit'),('risk-hangup','recommend','risk-track'),('risk-importFromLib','depend','risk-browse'),('risk-importFromLib','depend','risk-view'),('risk-importFromLib','recommend','assetlib-risk'),('risk-importFromLib','recommend','assetlib-risklib'),('risk-importToLib','depend','risk-view'),('risk-importToLib','recommend','risk-batchImportToLib'),('risk-track','depend','risk-browse'),('risk-track','depend','risk-view'),('risk-track','recommend','risk-activate'),('risk-track','recommend','risk-assignTo'),('risk-track','recommend','risk-cancel'),('risk-track','recommend','risk-close'),('risk-track','recommend','risk-create'),('risk-track','recommend','risk-edit'),('risk-track','recommend','risk-hangup'),('risk-view','depend','risk-browse'),('roadmap-activate','depend','roadmap-browse'),('roadmap-activate','depend','roadmap-view'),('roadmap-activate','recommend','roadmap-close'),('roadmap-batchUnlinkUR','depend','roadmap-browse'),('roadmap-batchUnlinkUR','depend','roadmap-view'),('roadmap-batchUnlinkUR','recommend','roadmap-unlinkUR'),('roadmap-browse','recommend','roadmap-create'),('roadmap-browse','recommend','roadmap-edit'),('roadmap-browse','recommend','roadmap-view'),('roadmap-close','depend','roadmap-browse'),('roadmap-close','depend','roadmap-view'),('roadmap-close','recommend','roadmap-activate'),('roadmap-create','depend','roadmap-browse'),('roadmap-create','depend','roadmap-view'),('roadmap-create','recommend','roadmap-edit'),('roadmap-delete','depend','roadmap-browse'),('roadmap-delete','depend','roadmap-view'),('roadmap-edit','depend','roadmap-browse'),('roadmap-edit','depend','roadmap-view'),('roadmap-edit','recommend','roadmap-create'),('roadmap-linkUR','depend','roadmap-browse'),('roadmap-linkUR','depend','roadmap-view'),('roadmap-linkUR','recommend','roadmap-batchUnlinkUR'),('roadmap-linkUR','recommend','roadmap-unlinkUR'),('roadmap-unlinkUR','depend','roadmap-browse'),('roadmap-unlinkUR','depend','roadmap-view'),('roadmap-unlinkUR','recommend','roadmap-batchUnlinkUR'),('roadmap-view','depend','roadmap-browse'),('roadmap-view','recommend','roadmap-edit'),('roadmap-view','recommend','roadmap-linkUR'),('screen-allAnnualData','depend','screen-annualData'),('screen-annualData','depend','screen-browse'),('screen-create','depend','screen-browse'),('screen-create','recommend','screen-design'),('screen-create','recommend','screen-edit'),('screen-create','recommend','screen-publish'),('screen-delete','depend','screen-browse'),('screen-design','depend','screen-browse'),('screen-design','recommend','screen-create'),('screen-design','recommend','screen-edit'),('screen-design','recommend','screen-publish'),('screen-edit','depend','screen-browse'),('screen-edit','recommend','screen-create'),('screen-edit','recommend','screen-design'),('screen-edit','recommend','screen-publish'),('screen-publish','depend','screen-browse'),('screen-publish','recommend','screen-create'),('screen-publish','recommend','screen-design'),('screen-publish','recommend','screen-edit'),('search-buildIndex','depend','admin-index'),('search-buildQuery','depend','search-buildForm'),('search-deleteQuery','depend','search-buildForm'),('search-deleteQuery','recommend','search-saveQuery'),('search-saveQuery','depend','search-buildForm'),('search-saveQuery','recommend','search-deleteQuery'),('serverroom-browse','depend','ops-index'),('serverroom-browse','recommend','serverroom-create'),('serverroom-browse','recommend','serverroom-edit'),('serverroom-browse','recommend','serverroom-view'),('serverroom-create','depend','ops-index'),('serverroom-create','depend','serverroom-browse'),('serverroom-create','recommend','serverroom-edit'),('serverroom-delete','depend','ops-index'),('serverroom-delete','depend','serverroom-browse'),('serverroom-delete','recommend','serverroom-create'),('serverroom-delete','recommend','serverroom-edit'),('serverroom-edit','depend','ops-index'),('serverroom-edit','depend','serverroom-browse'),('serverroom-edit','recommend','serverroom-create'),('serverroom-view','depend','ops-index'),('serverroom-view','depend','serverroom-browse'),('serverroom-view','recommend','serverroom-create'),('serverroom-view','recommend','serverroom-edit'),('service-browse','depend','ops-index'),('service-browse','recommend','service-create'),('service-browse','recommend','service-edit'),('service-browse','recommend','service-manage'),('service-browse','recommend','service-view'),('service-create','depend','ops-index'),('service-create','depend','service-browse'),('service-create','recommend','service-edit'),('service-create','recommend','service-manage'),('service-delete','depend','ops-index'),('service-delete','depend','service-browse'),('service-delete','recommend','service-create'),('service-delete','recommend','service-edit'),('service-delete','recommend','service-manage'),('service-edit','depend','ops-index'),('service-edit','depend','service-browse'),('service-edit','recommend','service-create'),('service-edit','recommend','service-manage'),('service-manage','depend','ops-index'),('service-manage','depend','service-browse'),('service-manage','recommend','service-create'),('service-manage','recommend','service-edit'),('service-view','depend','ops-index'),('service-view','depend','service-browse'),('service-view','recommend','service-create'),('service-view','recommend','service-edit'),('service-view','recommend','service-manage'),('sms-reset','depend','sms-index'),('sms-test','depend','sms-index'),('sonarqube-browse','recommend','sonarqube-create'),('sonarqube-browse','recommend','sonarqube-edit'),('sonarqube-browseIssue','depend','sonarqube-browse'),('sonarqube-browseIssue','depend','sonarqube-browseProject'),('sonarqube-browseIssue','recommend','sonarqube-createProject'),('sonarqube-browseIssue','recommend','sonarqube-execJob'),('sonarqube-browseIssue','recommend','sonarqube-reportView'),('sonarqube-browseProject','depend','sonarqube-browse'),('sonarqube-create','depend','sonarqube-browse'),('sonarqube-create','recommend','sonarqube-edit'),('sonarqube-createProject','depend','sonarqube-browse'),('sonarqube-createProject','depend','sonarqube-browseProject'),('sonarqube-createProject','recommend','sonarqube-browseIssue'),('sonarqube-createProject','recommend','sonarqube-execJob'),('sonarqube-createProject','recommend','sonarqube-reportView'),('sonarqube-delete','depend','sonarqube-browse'),('sonarqube-delete','recommend','sonarqube-create'),('sonarqube-delete','recommend','sonarqube-edit'),('sonarqube-deleteProject','depend','sonarqube-browse'),('sonarqube-deleteProject','depend','sonarqube-browseProject'),('sonarqube-deleteProject','recommend','sonarqube-browseIssue'),('sonarqube-deleteProject','recommend','sonarqube-createProject'),('sonarqube-deleteProject','recommend','sonarqube-execJob'),('sonarqube-deleteProject','recommend','sonarqube-reportView'),('sonarqube-edit','depend','sonarqube-browse'),('sonarqube-edit','recommend','sonarqube-create'),('sonarqube-execJob','depend','sonarqube-browse'),('sonarqube-execJob','depend','sonarqube-browseProject'),('sonarqube-execJob','recommend','sonarqube-browseIssue'),('sonarqube-execJob','recommend','sonarqube-createProject'),('sonarqube-execJob','recommend','sonarqube-reportView'),('sonarqube-reportView','depend','sonarqube-browse'),('sonarqube-reportView','depend','sonarqube-browseProject'),('sonarqube-reportView','recommend','sonarqube-browseIssue'),('sonarqube-reportView','recommend','sonarqube-createProject'),('sonarqube-reportView','recommend','sonarqube-execJob'),('sqlbuilder-createSQLView','depend','sqlbuilder-browseSQLView'),('sqlbuilder-createSQLView','recommend','sqlbuilder-deleteSQLView'),('sqlbuilder-createSQLView','recommend','sqlbuilder-editSQLView'),('sqlbuilder-deleteSQLView','depend','sqlbuilder-browseSQLView'),('sqlbuilder-deleteSQLView','recommend','sqlbuilder-createSQLView'),('sqlbuilder-deleteSQLView','recommend','sqlbuilder-editSQLView'),('sqlbuilder-editSQLView','depend','sqlbuilder-browseSQLView'),('sqlbuilder-editSQLView','recommend','sqlbuilder-createSQLView'),('sqlbuilder-editSQLView','recommend','sqlbuilder-deleteSQLView'),('stage-batchCreate','recommend','stage-create'),('stage-create','recommend','stage-batchCreate'),('stage-create','recommend','stage-delete'),('stage-create','recommend','stage-edit'),('stage-delete','recommend','stage-create'),('stage-delete','recommend','stage-edit'),('stage-edit','recommend','stage-create'),('stage-edit','recommend','stage-delete'),('stakeholder-batchCreate','depend','stakeholder-browse'),('stakeholder-batchCreate','recommend','stakeholder-create'),('stakeholder-browse','depend','project-index'),('stakeholder-browse','recommend','stakeholder-view'),('stakeholder-communicate','depend','stakeholder-browse'),('stakeholder-communicate','recommend','stakeholder-batchCreate'),('stakeholder-communicate','recommend','stakeholder-create'),('stakeholder-communicate','recommend','stakeholder-delete'),('stakeholder-communicate','recommend','stakeholder-edit'),('stakeholder-communicate','recommend','stakeholder-expect'),('stakeholder-communicate','recommend','stakeholder-userIssue'),('stakeholder-create','depend','stakeholder-browse'),('stakeholder-create','recommend','stakeholder-batchCreate'),('stakeholder-create','recommend','stakeholder-communicate'),('stakeholder-create','recommend','stakeholder-delete'),('stakeholder-create','recommend','stakeholder-edit'),('stakeholder-create','recommend','stakeholder-expect'),('stakeholder-create','recommend','stakeholder-userIssue'),('stakeholder-delete','depend','stakeholder-browse'),('stakeholder-delete','recommend','stakeholder-batchCreate'),('stakeholder-delete','recommend','stakeholder-communicate'),('stakeholder-delete','recommend','stakeholder-create'),('stakeholder-delete','recommend','stakeholder-edit'),('stakeholder-delete','recommend','stakeholder-expect'),('stakeholder-delete','recommend','stakeholder-userIssue'),('stakeholder-edit','depend','stakeholder-browse'),('stakeholder-edit','recommend','stakeholder-batchCreate'),('stakeholder-edit','recommend','stakeholder-communicate'),('stakeholder-edit','recommend','stakeholder-create'),('stakeholder-edit','recommend','stakeholder-delete'),('stakeholder-edit','recommend','stakeholder-expect'),('stakeholder-edit','recommend','stakeholder-userIssue'),('stakeholder-expect','depend','stakeholder-browse'),('stakeholder-expect','recommend','stakeholder-batchCreate'),('stakeholder-expect','recommend','stakeholder-communicate'),('stakeholder-expect','recommend','stakeholder-create'),('stakeholder-expect','recommend','stakeholder-delete'),('stakeholder-expect','recommend','stakeholder-edit'),('stakeholder-expect','recommend','stakeholder-userIssue'),('stakeholder-userIssue','depend','stakeholder-browse'),('stakeholder-userIssue','recommend','stakeholder-batchCreate'),('stakeholder-userIssue','recommend','stakeholder-communicate'),('stakeholder-userIssue','recommend','stakeholder-create'),('stakeholder-userIssue','recommend','stakeholder-delete'),('stakeholder-userIssue','recommend','stakeholder-edit'),('stakeholder-userIssue','recommend','stakeholder-expect'),('stakeholder-view','depend','stakeholder-browse'),('story-activate','depend','story-view'),('story-activate','recommend','story-assignTo'),('story-activate','recommend','story-change'),('story-activate','recommend','story-close'),('story-activate','recommend','story-create'),('story-activate','recommend','story-edit'),('story-activate','recommend','story-linkStories'),('story-activate','recommend','story-linkStory'),('story-activate','recommend','story-processStoryChange'),('story-activate','recommend','story-recall'),('story-activate','recommend','story-relieved'),('story-activate','recommend','story-submitReview'),('story-assignTo','depend','product-browse'),('story-assignTo','recommend','story-activate'),('story-assignTo','recommend','story-change'),('story-assignTo','recommend','story-close'),('story-assignTo','recommend','story-create'),('story-assignTo','recommend','story-edit'),('story-assignTo','recommend','story-linkStories'),('story-assignTo','recommend','story-linkStory'),('story-assignTo','recommend','story-processStoryChange'),('story-assignTo','recommend','story-recall'),('story-assignTo','recommend','story-relieved'),('story-assignTo','recommend','story-submitReview'),('story-batchAssignTo','depend','product-browse'),('story-batchAssignTo','recommend','story-edit'),('story-batchChangeBranch','depend','product-browse'),('story-batchChangeBranch','recommend','story-edit'),('story-batchChangeModule','depend','product-browse'),('story-batchChangeModule','recommend','story-edit'),('story-batchChangePlan','depend','product-browse'),('story-batchChangePlan','recommend','story-edit'),('story-batchChangeStage','depend','product-browse'),('story-batchChangeStage','recommend','story-edit'),('story-batchClose','depend','product-browse'),('story-batchClose','recommend','story-close'),('story-batchCreate','depend','product-browse'),('story-batchCreate','recommend','story-create'),('story-batchEdit','depend','product-browse'),('story-batchEdit','recommend','story-edit'),('story-batchImportToLib','depend','product-browse'),('story-batchImportToLib','recommend','story-importToLib'),('story-batchReview','depend','product-browse'),('story-batchReview','recommend','story-review'),('story-batchToTask','depend','projectstory-story'),('story-batchToTask','recommend','execution-task'),('story-bugs','depend','product-browse'),('story-cases','depend','product-browse'),('story-change','depend','story-view'),('story-change','recommend','story-activate'),('story-change','recommend','story-assignTo'),('story-change','recommend','story-close'),('story-change','recommend','story-create'),('story-change','recommend','story-edit'),('story-change','recommend','story-linkStories'),('story-change','recommend','story-linkStory'),('story-change','recommend','story-processStoryChange'),('story-change','recommend','story-recall'),('story-change','recommend','story-relieved'),('story-change','recommend','story-submitReview'),('story-close','depend','story-view'),('story-close','recommend','story-activate'),('story-close','recommend','story-assignTo'),('story-close','recommend','story-change'),('story-close','recommend','story-create'),('story-close','recommend','story-edit'),('story-close','recommend','story-linkStories'),('story-close','recommend','story-linkStory'),('story-close','recommend','story-processStoryChange'),('story-close','recommend','story-recall'),('story-close','recommend','story-relieved'),('story-close','recommend','story-submitReview'),('story-create','recommend','story-activate'),('story-create','recommend','story-assignTo'),('story-create','recommend','story-batchCreate'),('story-create','recommend','story-change'),('story-create','recommend','story-close'),('story-create','recommend','story-edit'),('story-create','recommend','story-linkStories'),('story-create','recommend','story-linkStory'),('story-create','recommend','story-processStoryChange'),('story-create','recommend','story-recall'),('story-create','recommend','story-relation'),('story-create','recommend','story-relieved'),('story-create','recommend','story-submitReview'),('story-delete','depend','story-view'),('story-delete','recommend','story-create'),('story-delete','recommend','story-edit'),('story-edit','depend','story-view'),('story-edit','recommend','story-activate'),('story-edit','recommend','story-assignTo'),('story-edit','recommend','story-batchEdit'),('story-edit','recommend','story-change'),('story-edit','recommend','story-close'),('story-edit','recommend','story-create'),('story-edit','recommend','story-linkStories'),('story-edit','recommend','story-linkStory'),('story-edit','recommend','story-processStoryChange'),('story-edit','recommend','story-recall'),('story-edit','recommend','story-relieved'),('story-edit','recommend','story-submitReview'),('story-export','depend','product-browse'),('story-exportTemplate','depend','product-browse'),('story-import','depend','product-browse'),('story-import','depend','story-exportTemplate'),('story-importToLib','depend','story-view'),('story-importToLib','recommend','story-batchImportToLib'),('story-linkStories','depend','story-view'),('story-linkStories','recommend','story-activate'),('story-linkStories','recommend','story-assignTo'),('story-linkStories','recommend','story-change'),('story-linkStories','recommend','story-close'),('story-linkStories','recommend','story-create'),('story-linkStories','recommend','story-edit'),('story-linkStories','recommend','story-linkStory'),('story-linkStories','recommend','story-processStoryChange'),('story-linkStories','recommend','story-recall'),('story-linkStories','recommend','story-relieved'),('story-linkStories','recommend','story-submitReview'),('story-linkStory','depend','story-view'),('story-linkStory','recommend','story-activate'),('story-linkStory','recommend','story-assignTo'),('story-linkStory','recommend','story-change'),('story-linkStory','recommend','story-close'),('story-linkStory','recommend','story-create'),('story-linkStory','recommend','story-edit'),('story-linkStory','recommend','story-linkStories'),('story-linkStory','recommend','story-processStoryChange'),('story-linkStory','recommend','story-recall'),('story-linkStory','recommend','story-relieved'),('story-linkStory','recommend','story-submitReview'),('story-processStoryChange','depend','story-view'),('story-processStoryChange','recommend','story-activate'),('story-processStoryChange','recommend','story-assignTo'),('story-processStoryChange','recommend','story-change'),('story-processStoryChange','recommend','story-close'),('story-processStoryChange','recommend','story-create'),('story-processStoryChange','recommend','story-edit'),('story-processStoryChange','recommend','story-linkStories'),('story-processStoryChange','recommend','story-linkStory'),('story-processStoryChange','recommend','story-recall'),('story-processStoryChange','recommend','story-relieved'),('story-processStoryChange','recommend','story-submitReview'),('story-recall','depend','story-view'),('story-recall','recommend','story-activate'),('story-recall','recommend','story-assignTo'),('story-recall','recommend','story-change'),('story-recall','recommend','story-close'),('story-recall','recommend','story-create'),('story-recall','recommend','story-edit'),('story-recall','recommend','story-linkStories'),('story-recall','recommend','story-linkStory'),('story-recall','recommend','story-processStoryChange'),('story-recall','recommend','story-relieved'),('story-recall','recommend','story-submitReview'),('story-relation','depend','story-view'),('story-relieved','depend','story-view'),('story-relieved','recommend','story-activate'),('story-relieved','recommend','story-assignTo'),('story-relieved','recommend','story-change'),('story-relieved','recommend','story-close'),('story-relieved','recommend','story-create'),('story-relieved','recommend','story-edit'),('story-relieved','recommend','story-linkStories'),('story-relieved','recommend','story-linkStory'),('story-relieved','recommend','story-processStoryChange'),('story-relieved','recommend','story-recall'),('story-relieved','recommend','story-submitReview'),('story-report','depend','product-browse'),('story-review','depend','story-view'),('story-review','recommend','story-batchReview'),('story-submitReview','depend','story-view'),('story-submitReview','recommend','story-activate'),('story-submitReview','recommend','story-assignTo'),('story-submitReview','recommend','story-change'),('story-submitReview','recommend','story-close'),('story-submitReview','recommend','story-create'),('story-submitReview','recommend','story-edit'),('story-submitReview','recommend','story-linkStories'),('story-submitReview','recommend','story-linkStory'),('story-submitReview','recommend','story-processStoryChange'),('story-submitReview','recommend','story-recall'),('story-submitReview','recommend','story-relieved'),('story-tasks','depend','product-browse'),('svn-apiSync','depend','svn-cat'),('svn-apiSync','depend','svn-diff'),('svn-cat','depend','svn-apiSync'),('svn-cat','depend','svn-diff'),('svn-diff','depend','svn-apiSync'),('svn-diff','depend','svn-cat'),('task-activate','depend','execution-task'),('task-activate','recommend','task-assignTo'),('task-activate','recommend','task-cancel'),('task-activate','recommend','task-close'),('task-activate','recommend','task-create'),('task-activate','recommend','task-edit'),('task-activate','recommend','task-finish'),('task-activate','recommend','task-pause'),('task-activate','recommend','task-restart'),('task-activate','recommend','task-start'),('task-assignTo','depend','execution-task'),('task-assignTo','recommend','task-activate'),('task-assignTo','recommend','task-batchAssignTo'),('task-assignTo','recommend','task-cancel'),('task-assignTo','recommend','task-close'),('task-assignTo','recommend','task-create'),('task-assignTo','recommend','task-edit'),('task-assignTo','recommend','task-finish'),('task-assignTo','recommend','task-pause'),('task-assignTo','recommend','task-restart'),('task-assignTo','recommend','task-start'),('task-batchAssignTo','depend','execution-task'),('task-batchAssignTo','recommend','task-assignTo'),('task-batchCancel','depend','execution-task'),('task-batchCancel','recommend','task-cancel'),('task-batchChangeModule','depend','execution-task'),('task-batchChangeModule','recommend','task-edit'),('task-batchClose','depend','execution-task'),('task-batchClose','recommend','task-close'),('task-batchClose','recommend','task-deleteEstimate'),('task-batchClose','recommend','task-editEstimate'),('task-batchCreate','depend','execution-task'),('task-batchCreate','recommend','task-create'),('task-batchEdit','depend','execution-task'),('task-batchEdit','recommend','task-edit'),('task-cancel','depend','execution-task'),('task-cancel','recommend','task-activate'),('task-cancel','recommend','task-assignTo'),('task-cancel','recommend','task-batchCancel'),('task-cancel','recommend','task-close'),('task-cancel','recommend','task-create'),('task-cancel','recommend','task-edit'),('task-cancel','recommend','task-finish'),('task-cancel','recommend','task-pause'),('task-cancel','recommend','task-restart'),('task-cancel','recommend','task-start'),('task-close','depend','execution-task'),('task-close','recommend','task-activate'),('task-close','recommend','task-assignTo'),('task-close','recommend','task-batchClose'),('task-close','recommend','task-cancel'),('task-close','recommend','task-create'),('task-close','recommend','task-edit'),('task-close','recommend','task-finish'),('task-close','recommend','task-pause'),('task-close','recommend','task-restart'),('task-close','recommend','task-start'),('task-confirmdesignchange','depend','execution-task'),('task-confirmdesignchange','recommend','task-edit'),('task-confirmStoryChange','depend','execution-task'),('task-confirmStoryChange','recommend','task-edit'),('task-create','depend','execution-task'),('task-create','recommend','execution-importBug'),('task-create','recommend','execution-importplanstories'),('task-create','recommend','task-activate'),('task-create','recommend','task-assignTo'),('task-create','recommend','task-batchCreate'),('task-create','recommend','task-cancel'),('task-create','recommend','task-close'),('task-create','recommend','task-edit'),('task-create','recommend','task-finish'),('task-create','recommend','task-pause'),('task-create','recommend','task-restart'),('task-create','recommend','task-start'),('task-delete','depend','execution-task'),('task-delete','recommend','task-create'),('task-delete','recommend','task-edit'),('task-deleteEstimate','depend','execution-task'),('task-deleteEstimate','depend','task-recordEstimate'),('task-deleteEstimate','recommend','task-editEstimate'),('task-edit','depend','execution-task'),('task-edit','recommend','task-activate'),('task-edit','recommend','task-assignTo'),('task-edit','recommend','task-batchChangeModule'),('task-edit','recommend','task-batchEdit'),('task-edit','recommend','task-cancel'),('task-edit','recommend','task-close'),('task-edit','recommend','task-confirmdesignchange'),('task-edit','recommend','task-confirmStoryChange'),('task-edit','recommend','task-create'),('task-edit','recommend','task-finish'),('task-edit','recommend','task-pause'),('task-edit','recommend','task-restart'),('task-edit','recommend','task-start'),('task-editEstimate','depend','execution-task'),('task-editEstimate','depend','task-recordEstimate'),('task-editEstimate','recommend','task-deleteEstimate'),('task-export','depend','execution-task'),('task-exportTemplate','depend','execution-task'),('task-exportTemplate','recommend','task-import'),('task-finish','depend','execution-task'),('task-finish','recommend','task-activate'),('task-finish','recommend','task-assignTo'),('task-finish','recommend','task-cancel'),('task-finish','recommend','task-close'),('task-finish','recommend','task-create'),('task-finish','recommend','task-edit'),('task-finish','recommend','task-pause'),('task-finish','recommend','task-restart'),('task-finish','recommend','task-start'),('task-import','depend','execution-task'),('task-import','depend','task-exportTemplate'),('task-pause','depend','execution-task'),('task-pause','recommend','task-activate'),('task-pause','recommend','task-assignTo'),('task-pause','recommend','task-cancel'),('task-pause','recommend','task-close'),('task-pause','recommend','task-create'),('task-pause','recommend','task-edit'),('task-pause','recommend','task-finish'),('task-pause','recommend','task-restart'),('task-pause','recommend','task-start'),('task-recordEstimate','depend','execution-task'),('task-recordEstimate','recommend','task-deleteEstimate'),('task-recordEstimate','recommend','task-editEstimate'),('task-report','depend','execution-task'),('task-restart','depend','execution-task'),('task-restart','recommend','task-activate'),('task-restart','recommend','task-assignTo'),('task-restart','recommend','task-cancel'),('task-restart','recommend','task-close'),('task-restart','recommend','task-create'),('task-restart','recommend','task-edit'),('task-restart','recommend','task-finish'),('task-restart','recommend','task-pause'),('task-restart','recommend','task-start'),('task-start','depend','execution-task'),('task-start','recommend','task-activate'),('task-start','recommend','task-assignTo'),('task-start','recommend','task-cancel'),('task-start','recommend','task-close'),('task-start','recommend','task-create'),('task-start','recommend','task-edit'),('task-start','recommend','task-finish'),('task-start','recommend','task-pause'),('task-start','recommend','task-restart'),('task-view','depend','execution-task'),('task-view','recommend','task-activate'),('task-view','recommend','task-assignTo'),('task-view','recommend','task-cancel'),('task-view','recommend','task-close'),('task-view','recommend','task-create'),('task-view','recommend','task-edit'),('task-view','recommend','task-finish'),('task-view','recommend','task-pause'),('task-view','recommend','task-restart'),('task-view','recommend','task-start'),('testcase-automation','depend','testcase-browse'),('testcase-batchCaseTypeChange','recommend','testcase-edit'),('testcase-batchChangeBranch','recommend','testcase-edit'),('testcase-batchChangeModule','recommend','testcase-edit'),('testcase-batchChangeScene','depend','testcase-browse'),('testcase-batchChangeScene','recommend','testcase-changeScene'),('testcase-batchChangeScene','recommend','testcase-createScene'),('testcase-batchChangeScene','recommend','testcase-editScene'),('testcase-batchCreate','recommend','testcase-create'),('testcase-batchDelete','recommend','testcase-delete'),('testcase-batchReview','recommend','testcase-review'),('testcase-browse','depend','qa-index'),('testcase-browse','recommend','testcase-groupCase'),('testcase-browse','recommend','testcase-view'),('testcase-browse','recommend','testcase-zeroCase'),('testcase-changeScene','depend','testcase-browse'),('testcase-changeScene','recommend','testcase-batchChangeScene'),('testcase-changeScene','recommend','testcase-createScene'),('testcase-changeScene','recommend','testcase-editScene'),('testcase-confirmChange','depend','testcase-view'),('testcase-confirmChange','recommend','testcase-confirmLibcaseChange'),('testcase-confirmChange','recommend','testcase-confirmStoryChange'),('testcase-confirmChange','recommend','testcase-create'),('testcase-confirmChange','recommend','testcase-edit'),('testcase-confirmChange','recommend','testcase-ignoreLibcaseChange'),('testcase-confirmChange','recommend','testcase-linkBugs'),('testcase-confirmChange','recommend','testcase-linkCases'),('testcase-confirmLibcaseChange','depend','testcase-view'),('testcase-confirmLibcaseChange','recommend','testcase-confirmChange'),('testcase-confirmLibcaseChange','recommend','testcase-confirmStoryChange'),('testcase-confirmLibcaseChange','recommend','testcase-create'),('testcase-confirmLibcaseChange','recommend','testcase-edit'),('testcase-confirmLibcaseChange','recommend','testcase-ignoreLibcaseChange'),('testcase-confirmStoryChange','depend','testcase-view'),('testcase-confirmStoryChange','recommend','testcase-confirmChange'),('testcase-confirmStoryChange','recommend','testcase-confirmLibcaseChange'),('testcase-confirmStoryChange','recommend','testcase-create'),('testcase-confirmStoryChange','recommend','testcase-edit'),('testcase-confirmStoryChange','recommend','testcase-ignoreLibcaseChange'),('testcase-confirmStoryChange','recommend','testcase-linkBugs'),('testcase-confirmStoryChange','recommend','testcase-linkCases'),('testcase-create','depend','testcase-view'),('testcase-create','recommend','testcase-confirmChange'),('testcase-create','recommend','testcase-confirmLibcaseChange'),('testcase-create','recommend','testcase-confirmStoryChange'),('testcase-create','recommend','testcase-edit'),('testcase-create','recommend','testcase-ignoreLibcaseChange'),('testcase-create','recommend','testcase-linkBugs'),('testcase-create','recommend','testcase-linkCases'),('testcase-create','recommend','testcase-submit'),('testcase-createBug','depend','testcase-view'),('testcase-createBug','recommend','testcase-confirmChange'),('testcase-createBug','recommend','testcase-confirmLibcaseChange'),('testcase-createBug','recommend','testcase-confirmStoryChange'),('testcase-createBug','recommend','testcase-create'),('testcase-createBug','recommend','testcase-edit'),('testcase-createBug','recommend','testcase-ignoreLibcaseChange'),('testcase-createBug','recommend','testcase-linkBugs'),('testcase-createBug','recommend','testcase-linkCases'),('testcase-createBug','recommend','testcase-submit'),('testcase-createScene','depend','testcase-browse'),('testcase-createScene','recommend','testcase-batchChangeScene'),('testcase-createScene','recommend','testcase-changeScene'),('testcase-createScene','recommend','testcase-editScene'),('testcase-delete','depend','testcase-view'),('testcase-delete','recommend','testcase-batchDelete'),('testcase-deleteScene','depend','testcase-browse'),('testcase-edit','depend','testcase-view'),('testcase-edit','recommend','testcase-confirmChange'),('testcase-edit','recommend','testcase-confirmLibcaseChange'),('testcase-edit','recommend','testcase-confirmStoryChange'),('testcase-edit','recommend','testcase-create'),('testcase-edit','recommend','testcase-ignoreLibcaseChange'),('testcase-edit','recommend','testcase-linkBugs'),('testcase-edit','recommend','testcase-linkCases'),('testcase-edit','recommend','testcase-submit'),('testcase-editScene','depend','testcase-browse'),('testcase-editScene','recommend','testcase-batchChangeScene'),('testcase-editScene','recommend','testcase-changeScene'),('testcase-editScene','recommend','testcase-createScene'),('testcase-export','recommend','testcase-exportXmind'),('testcase-exportTemplate','depend','testcase-import'),('testcase-exportXmind','recommend','testcase-export'),('testcase-ignoreLibcaseChange','depend','testcase-view'),('testcase-ignoreLibcaseChange','recommend','testcase-confirmChange'),('testcase-ignoreLibcaseChange','recommend','testcase-confirmLibcaseChange'),('testcase-ignoreLibcaseChange','recommend','testcase-confirmStoryChange'),('testcase-ignoreLibcaseChange','recommend','testcase-create'),('testcase-ignoreLibcaseChange','recommend','testcase-edit'),('testcase-import','depend','testcase-exportTemplate'),('testcase-import','recommend','testcase-importXmind'),('testcase-importFromLib','recommend','assetlib-caselib'),('testcase-importFromLib','recommend','caselib-browse'),('testcase-importToLib','depend','testcase-view'),('testcase-importXmind','recommend','testcase-import'),('testcase-linkBugs','depend','testcase-view'),('testcase-linkBugs','recommend','testcase-create'),('testcase-linkBugs','recommend','testcase-edit'),('testcase-linkBugs','recommend','testcase-linkCases'),('testcase-linkCases','depend','testcase-view'),('testcase-linkCases','recommend','testcase-create'),('testcase-linkCases','recommend','testcase-edit'),('testcase-linkCases','recommend','testcase-linkBugs'),('testcase-review','depend','testcase-view'),('testcase-review','recommend','testcase-batchReview'),('testcase-showScript','depend','testcase-browse'),('testcase-submit','depend','testcase-view'),('testcase-submit','recommend','testcase-confirmChange'),('testcase-submit','recommend','testcase-confirmLibcaseChange'),('testcase-submit','recommend','testcase-confirmStoryChange'),('testcase-submit','recommend','testcase-create'),('testcase-submit','recommend','testcase-edit'),('testcase-submit','recommend','testcase-ignoreLibcaseChange'),('testcase-submit','recommend','testcase-linkBugs'),('testcase-submit','recommend','testcase-linkCases'),('testreport-browse','depend','qa-index'),('testreport-browse','recommend','testreport-view'),('testreport-create','depend','testreport-view'),('testreport-create','recommend','testreport-edit'),('testreport-delete','depend','testreport-view'),('testreport-edit','depend','testreport-view'),('testreport-edit','recommend','testreport-create'),('testsuite-batchUnlinkCases','depend','testsuite-view'),('testsuite-batchUnlinkCases','recommend','testsuite-unlinkCase'),('testsuite-browse','depend','qa-index'),('testsuite-create','depend','testsuite-browse'),('testsuite-create','recommend','testsuite-edit'),('testsuite-delete','depend','testsuite-browse'),('testsuite-delete','depend','testsuite-view'),('testsuite-edit','depend','testsuite-browse'),('testsuite-edit','depend','testsuite-view'),('testsuite-edit','recommend','testsuite-create'),('testsuite-linkCase','depend','testsuite-view'),('testsuite-linkCase','recommend','testsuite-batchUnlinkCases'),('testsuite-linkCase','recommend','testsuite-unlinkCase'),('testsuite-unlinkCase','depend','testsuite-view'),('testsuite-unlinkCase','recommend','testsuite-linkCase'),('testtask-activate','recommend','testtask-block'),('testtask-activate','recommend','testtask-close'),('testtask-activate','recommend','testtask-create'),('testtask-activate','recommend','testtask-edit'),('testtask-activate','recommend','testtask-start'),('testtask-batchAssign','depend','testtask-cases'),('testtask-batchRun','depend','testtask-cases'),('testtask-batchRun','recommend','testtask-runcase'),('testtask-batchUnlinkCases','depend','testtask-cases'),('testtask-batchUnlinkCases','recommend','testtask-unlinkcase'),('testtask-block','recommend','testtask-activate'),('testtask-block','recommend','testtask-close'),('testtask-block','recommend','testtask-create'),('testtask-block','recommend','testtask-edit'),('testtask-block','recommend','testtask-start'),('testtask-browse','depend','qa-index'),('testtask-cases','recommend','testtask-groupCase'),('testtask-cases','recommend','testtask-report'),('testtask-close','recommend','testtask-activate'),('testtask-close','recommend','testtask-block'),('testtask-close','recommend','testtask-create'),('testtask-close','recommend','testtask-edit'),('testtask-close','recommend','testtask-start'),('testtask-create','recommend','testtask-activate'),('testtask-create','recommend','testtask-block'),('testtask-create','recommend','testtask-close'),('testtask-create','recommend','testtask-edit'),('testtask-create','recommend','testtask-start'),('testtask-deployCaseResults','depend','deploy-browse'),('testtask-deployCaseResults','depend','deploy-steps'),('testtask-deployCaseResults','depend','ops-index'),('testtask-deployCaseResults','recommend','deploy-assignTo'),('testtask-deployCaseResults','recommend','deploy-editStep'),('testtask-deployCaseResults','recommend','deploy-finishStep'),('testtask-deployCaseResults','recommend','deploy-manageStep'),('testtask-deployCaseResults','recommend','testtask-runDeployCase'),('testtask-edit','recommend','testtask-activate'),('testtask-edit','recommend','testtask-block'),('testtask-edit','recommend','testtask-close'),('testtask-edit','recommend','testtask-create'),('testtask-edit','recommend','testtask-start'),('testtask-groupCase','depend','testtask-cases'),('testtask-importUnitResult','depend','testtask-browseUnits'),('testtask-linkcase','depend','testtask-cases'),('testtask-linkcase','recommend','testtask-unlinkcase'),('testtask-report','depend','testtask-cases'),('testtask-results','depend','testtask-cases'),('testtask-results','recommend','testtask-runcase'),('testtask-runcase','depend','testtask-cases'),('testtask-runcase','recommend','testtask-results'),('testtask-runDeployCase','depend','deploy-browse'),('testtask-runDeployCase','depend','deploy-steps'),('testtask-runDeployCase','depend','ops-index'),('testtask-runDeployCase','recommend','deploy-assignTo'),('testtask-runDeployCase','recommend','deploy-editStep'),('testtask-runDeployCase','recommend','deploy-finishStep'),('testtask-runDeployCase','recommend','deploy-manageStep'),('testtask-runDeployCase','recommend','testtask-deployCaseResults'),('testtask-start','recommend','testtask-activate'),('testtask-start','recommend','testtask-block'),('testtask-start','recommend','testtask-close'),('testtask-start','recommend','testtask-create'),('testtask-start','recommend','testtask-edit'),('testtask-unitCases','depend','testtask-browseUnits'),('testtask-unlinkcase','depend','testtask-cases'),('testtask-unlinkcase','recommend','testtask-linkcase'),('ticket-activate','depend','ticket-browse'),('ticket-activate','recommend','ticket-batchActivate'),('ticket-assignTo','depend','ticket-browse'),('ticket-assignTo','recommend','ticket-batchAssignTo'),('ticket-assignTo','recommend','ticket-create'),('ticket-assignTo','recommend','ticket-edit'),('ticket-batchActivate','depend','ticket-browse'),('ticket-batchActivate','recommend','ticket-activate'),('ticket-batchAssignTo','depend','ticket-browse'),('ticket-batchAssignTo','recommend','ticket-assignTo'),('ticket-batchClose','depend','ticket-browse'),('ticket-batchClose','recommend','ticket-close'),('ticket-batchEdit','depend','ticket-browse'),('ticket-batchEdit','recommend','ticket-edit'),('ticket-batchFinish','depend','ticket-browse'),('ticket-batchFinish','recommend','ticket-finish'),('ticket-browse','recommend','ticket-create'),('ticket-browse','recommend','ticket-edit'),('ticket-browse','recommend','ticket-view'),('ticket-close','depend','ticket-browse'),('ticket-close','recommend','ticket-batchClose'),('ticket-close','recommend','ticket-edit'),('ticket-create','depend','ticket-browse'),('ticket-create','recommend','ticket-activate'),('ticket-create','recommend','ticket-close'),('ticket-create','recommend','ticket-edit'),('ticket-createBug','depend','ticket-browse'),('ticket-createBug','recommend','ticket-createStory'),('ticket-createBug','recommend','ticket-finish'),('ticket-createBug','recommend','ticket-start'),('ticket-createStory','depend','ticket-browse'),('ticket-createStory','recommend','ticket-createBug'),('ticket-createStory','recommend','ticket-finish'),('ticket-createStory','recommend','ticket-start'),('ticket-delete','depend','ticket-browse'),('ticket-delete','recommend','ticket-create'),('ticket-delete','recommend','ticket-edit'),('ticket-edit','depend','ticket-browse'),('ticket-edit','recommend','ticket-activate'),('ticket-edit','recommend','ticket-close'),('ticket-edit','recommend','ticket-create'),('ticket-export','depend','ticket-browse'),('ticket-exportTemplate','depend','ticket-browse'),('ticket-exportTemplate','depend','ticket-import'),('ticket-finish','depend','ticket-browse'),('ticket-finish','recommend','ticket-createBug'),('ticket-finish','recommend','ticket-createStory'),('ticket-finish','recommend','ticket-start'),('ticket-import','depend','ticket-browse'),('ticket-import','depend','ticket-exportTemplate'),('ticket-start','depend','ticket-browse'),('ticket-start','recommend','ticket-activate'),('ticket-start','recommend','ticket-assignTo'),('ticket-start','recommend','ticket-close'),('ticket-start','recommend','ticket-create'),('ticket-start','recommend','ticket-createBug'),('ticket-start','recommend','ticket-createStory'),('ticket-start','recommend','ticket-edit'),('ticket-start','recommend','ticket-finish'),('ticket-syncProduct','depend','ticket-browse'),('ticket-view','depend','ticket-browse'),('ticket-view','recommend','ticket-edit'),('todo-activate','depend','my-calendar'),('todo-activate','depend','my-index'),('todo-activate','depend','todo-view'),('todo-activate','recommend','todo-close'),('todo-assignTo','depend','my-calendar'),('todo-assignTo','depend','my-index'),('todo-assignTo','depend','todo-view'),('todo-batchClose','depend','my-calendar'),('todo-batchClose','depend','my-index'),('todo-batchClose','depend','todo-view'),('todo-batchCreate','depend','my-calendar'),('todo-batchCreate','depend','my-index'),('todo-batchCreate','depend','todo-view'),('todo-batchCreate','recommend','todo-create'),('todo-batchEdit','depend','my-calendar'),('todo-batchEdit','depend','my-index'),('todo-batchEdit','depend','todo-view'),('todo-batchEdit','recommend','todo-create'),('todo-batchEdit','recommend','todo-edit'),('todo-batchFinish','depend','my-calendar'),('todo-batchFinish','depend','my-index'),('todo-batchFinish','depend','todo-view'),('todo-batchFinish','recommend','todo-finish'),('todo-close','depend','my-calendar'),('todo-close','depend','my-index'),('todo-close','depend','todo-view'),('todo-close','recommend','todo-activate'),('todo-create','depend','my-calendar'),('todo-create','depend','my-index'),('todo-create','depend','todo-view'),('todo-create','recommend','todo-batchCreate'),('todo-createcycle','depend','my-calendar'),('todo-createcycle','depend','my-index'),('todo-createcycle','depend','todo-create'),('todo-createcycle','depend','todo-view'),('todo-delete','depend','my-calendar'),('todo-delete','depend','my-index'),('todo-delete','depend','todo-view'),('todo-edit','depend','my-calendar'),('todo-edit','depend','my-index'),('todo-edit','depend','todo-view'),('todo-edit','recommend','todo-batchEdit'),('todo-export','depend','my-calendar'),('todo-export','depend','my-index'),('todo-finish','depend','my-calendar'),('todo-finish','depend','my-index'),('todo-finish','depend','todo-view'),('todo-finish','recommend','todo-activate'),('todo-finish','recommend','todo-close'),('todo-import2Today','depend','my-calendar'),('todo-import2Today','depend','my-index'),('todo-start','depend','my-calendar'),('todo-start','depend','my-index'),('todo-start','depend','todo-view'),('todo-start','recommend','todo-activate'),('todo-start','recommend','todo-close'),('todo-start','recommend','todo-finish'),('todo-view','depend','my-calendar'),('todo-view','depend','my-index'),('todo-view','recommend','my-todo'),('traincourse-changeStatus','depend','traincourse-admin'),('traincourse-changeStatus','recommend','traincourse-uploadCourse'),('traincourse-deleteCourse','depend','traincourse-admin'),('traincourse-deleteCourse','recommend','traincourse-uploadCourse'),('traincourse-uploadCourse','depend','traincourse-admin'),('traincourse-uploadCourse','recommend','traincourse-deleteCourse'),('traincourse-viewChapter','depend','traincourse-browse'),('traincourse-viewChapter','depend','traincourse-viewCourse'),('traincourse-viewCourse','depend','traincourse-browse'),('trainplan-batchCreate','depend','trainplan-browse'),('trainplan-batchCreate','recommend','trainplan-create'),('trainplan-batchEdit','depend','trainplan-browse'),('trainplan-batchEdit','recommend','trainplan-edit'),('trainplan-batchFinish','depend','trainplan-browse'),('trainplan-batchFinish','recommend','trainplan-finish'),('trainplan-create','depend','trainplan-browse'),('trainplan-create','recommend','trainplan-delete'),('trainplan-create','recommend','trainplan-edit'),('trainplan-create','recommend','trainplan-finish'),('trainplan-create','recommend','trainplan-summary'),('trainplan-delete','depend','trainplan-view'),('trainplan-delete','recommend','trainplan-create'),('trainplan-delete','recommend','trainplan-edit'),('trainplan-edit','depend','trainplan-browse'),('trainplan-edit','recommend','trainplan-batchEdit'),('trainplan-edit','recommend','trainplan-create'),('trainplan-edit','recommend','trainplan-delete'),('trainplan-edit','recommend','trainplan-finish'),('trainplan-edit','recommend','trainplan-summary'),('trainplan-finish','depend','trainplan-browse'),('trainplan-finish','recommend','trainplan-batchFinish'),('trainplan-finish','recommend','trainplan-create'),('trainplan-finish','recommend','trainplan-delete'),('trainplan-finish','recommend','trainplan-edit'),('trainplan-finish','recommend','trainplan-summary'),('trainplan-summary','depend','trainplan-browse'),('trainplan-summary','recommend','trainplan-finish'),('trainplan-view','depend','trainplan-browse'),('tree-browse','depend','tree-edit'),('tree-browse','recommend','tree-delete'),('tree-browse','recommend','tree-manageChild'),('tree-browseTask','depend','tree-edit'),('tree-browseTask','recommend','tree-delete'),('tree-browseTask','recommend','tree-manageChild'),('tree-manageChild','depend','tree-edit'),('tree-manageChild','recommend','tree-delete'),('user-batchCreate','depend','admin-index'),('user-batchCreate','depend','admin-register'),('user-batchCreate','depend','company-browse'),('user-batchCreate','recommend','user-create'),('user-batchEdit','depend','admin-index'),('user-batchEdit','depend','admin-register'),('user-batchEdit','depend','company-browse'),('user-batchEdit','depend','user-view'),('user-batchEdit','recommend','user-edit'),('user-bug','depend','my-team'),('user-bug','depend','user-todo'),('user-bug','recommend','user-dynamic'),('user-bug','recommend','user-effort'),('user-bug','recommend','user-execution'),('user-bug','recommend','user-issue'),('user-bug','recommend','user-profile'),('user-bug','recommend','user-risk'),('user-bug','recommend','user-story'),('user-bug','recommend','user-task'),('user-bug','recommend','user-testCase'),('user-bug','recommend','user-testTask'),('user-create','depend','admin-index'),('user-create','depend','admin-register'),('user-create','depend','company-browse'),('user-create','recommend','user-batchCreate'),('user-create','recommend','user-delete'),('user-create','recommend','user-edit'),('user-create','recommend','user-unlock'),('user-delete','depend','admin-index'),('user-delete','depend','admin-register'),('user-delete','depend','company-browse'),('user-delete','depend','user-view'),('user-delete','recommend','user-create'),('user-delete','recommend','user-edit'),('user-delete','recommend','user-unlock'),('user-dynamic','depend','my-team'),('user-dynamic','depend','user-todo'),('user-dynamic','recommend','user-bug'),('user-dynamic','recommend','user-effort'),('user-dynamic','recommend','user-execution'),('user-dynamic','recommend','user-issue'),('user-dynamic','recommend','user-profile'),('user-dynamic','recommend','user-risk'),('user-dynamic','recommend','user-story'),('user-dynamic','recommend','user-task'),('user-dynamic','recommend','user-testCase'),('user-dynamic','recommend','user-testTask'),('user-edit','depend','admin-index'),('user-edit','depend','admin-register'),('user-edit','depend','company-browse'),('user-edit','depend','user-view'),('user-edit','recommend','user-batchEdit'),('user-edit','recommend','user-create'),('user-edit','recommend','user-delete'),('user-edit','recommend','user-unlock'),('user-effort','depend','my-team'),('user-effort','depend','user-todo'),('user-effort','recommend','user-bug'),('user-effort','recommend','user-dynamic'),('user-effort','recommend','user-execution'),('user-effort','recommend','user-issue'),('user-effort','recommend','user-profile'),('user-effort','recommend','user-risk'),('user-effort','recommend','user-story'),('user-effort','recommend','user-task'),('user-effort','recommend','user-testCase'),('user-effort','recommend','user-testTask'),('user-effortcalendar','depend','my-team'),('user-effortcalendar','depend','user-todo'),('user-execution','depend','my-team'),('user-execution','depend','user-todo'),('user-execution','recommend','user-bug'),('user-execution','recommend','user-dynamic'),('user-execution','recommend','user-effort'),('user-execution','recommend','user-issue'),('user-execution','recommend','user-profile'),('user-execution','recommend','user-risk'),('user-execution','recommend','user-story'),('user-execution','recommend','user-task'),('user-execution','recommend','user-testCase'),('user-execution','recommend','user-testTask'),('user-export','depend','company-browse'),('user-exportTemplate','depend','company-browse'),('user-exportTemplate','depend','user-import'),('user-import','depend','company-browse'),('user-import','depend','user-exportTemplate'),('user-importldap','depend','ldap-set'),('user-issue','depend','my-team'),('user-issue','depend','user-todo'),('user-issue','recommend','user-bug'),('user-issue','recommend','user-dynamic'),('user-issue','recommend','user-effort'),('user-issue','recommend','user-execution'),('user-issue','recommend','user-profile'),('user-issue','recommend','user-risk'),('user-issue','recommend','user-story'),('user-issue','recommend','user-task'),('user-issue','recommend','user-testCase'),('user-issue','recommend','user-testTask'),('user-profile','depend','my-team'),('user-profile','depend','user-todo'),('user-profile','recommend','user-bug'),('user-profile','recommend','user-dynamic'),('user-profile','recommend','user-effort'),('user-profile','recommend','user-execution'),('user-profile','recommend','user-issue'),('user-profile','recommend','user-risk'),('user-profile','recommend','user-story'),('user-profile','recommend','user-task'),('user-profile','recommend','user-testCase'),('user-profile','recommend','user-testTask'),('user-risk','depend','my-team'),('user-risk','depend','user-todo'),('user-risk','recommend','user-bug'),('user-risk','recommend','user-dynamic'),('user-risk','recommend','user-effort'),('user-risk','recommend','user-execution'),('user-risk','recommend','user-issue'),('user-risk','recommend','user-profile'),('user-risk','recommend','user-story'),('user-risk','recommend','user-task'),('user-risk','recommend','user-testCase'),('user-risk','recommend','user-testTask'),('user-story','depend','my-team'),('user-story','depend','user-todo'),('user-story','recommend','user-bug'),('user-story','recommend','user-dynamic'),('user-story','recommend','user-effort'),('user-story','recommend','user-execution'),('user-story','recommend','user-issue'),('user-story','recommend','user-profile'),('user-story','recommend','user-risk'),('user-story','recommend','user-task'),('user-story','recommend','user-testCase'),('user-story','recommend','user-testTask'),('user-task','depend','my-team'),('user-task','depend','user-todo'),('user-task','recommend','user-bug'),('user-task','recommend','user-dynamic'),('user-task','recommend','user-effort'),('user-task','recommend','user-execution'),('user-task','recommend','user-issue'),('user-task','recommend','user-profile'),('user-task','recommend','user-risk'),('user-task','recommend','user-story'),('user-task','recommend','user-testCase'),('user-task','recommend','user-testTask'),('user-testCase','depend','my-team'),('user-testCase','depend','user-todo'),('user-testCase','recommend','user-bug'),('user-testCase','recommend','user-dynamic'),('user-testCase','recommend','user-effort'),('user-testCase','recommend','user-execution'),('user-testCase','recommend','user-issue'),('user-testCase','recommend','user-profile'),('user-testCase','recommend','user-risk'),('user-testCase','recommend','user-story'),('user-testCase','recommend','user-task'),('user-testCase','recommend','user-testTask'),('user-testTask','depend','my-team'),('user-testTask','depend','user-todo'),('user-testTask','recommend','user-bug'),('user-testTask','recommend','user-dynamic'),('user-testTask','recommend','user-effort'),('user-testTask','recommend','user-execution'),('user-testTask','recommend','user-issue'),('user-testTask','recommend','user-profile'),('user-testTask','recommend','user-risk'),('user-testTask','recommend','user-story'),('user-testTask','recommend','user-task'),('user-testTask','recommend','user-testCase'),('user-todo','depend','my-team'),('user-todo','recommend','user-bug'),('user-todo','recommend','user-dynamic'),('user-todo','recommend','user-effort'),('user-todo','recommend','user-effortcalendar'),('user-todo','recommend','user-execution'),('user-todo','recommend','user-issue'),('user-todo','recommend','user-profile'),('user-todo','recommend','user-risk'),('user-todo','recommend','user-story'),('user-todo','recommend','user-task'),('user-todo','recommend','user-testCase'),('user-todo','recommend','user-testTask'),('user-todo','recommend','user-todocalendar'),('user-todocalendar','depend','my-team'),('user-todocalendar','depend','user-todo'),('user-unbind','depend','admin-index'),('user-unbind','depend','admin-register'),('user-unlock','depend','admin-index'),('user-unlock','depend','admin-register'),('user-unlock','depend','company-browse'),('user-unlock','depend','user-view'),('user-unlock','recommend','user-create'),('user-unlock','recommend','user-delete'),('user-unlock','recommend','user-edit'),('user-view','depend','admin-index'),('user-view','depend','admin-register'),('user-view','depend','company-browse'),('webhook-bind','depend','webhook-chooseDept'),('webhook-chooseDept','depend','webhook-browse'),('webhook-chooseDept','recommend','webhook-create'),('webhook-chooseDept','recommend','webhook-delete'),('webhook-chooseDept','recommend','webhook-edit'),('webhook-create','depend','webhook-browse'),('webhook-create','recommend','webhook-bind'),('webhook-create','recommend','webhook-chooseDept'),('webhook-create','recommend','webhook-delete'),('webhook-create','recommend','webhook-edit'),('webhook-create','recommend','webhook-log'),('webhook-delete','depend','webhook-browse'),('webhook-delete','recommend','webhook-bind'),('webhook-delete','recommend','webhook-chooseDept'),('webhook-delete','recommend','webhook-create'),('webhook-delete','recommend','webhook-edit'),('webhook-delete','recommend','webhook-log'),('webhook-edit','depend','webhook-browse'),('webhook-edit','recommend','webhook-bind'),('webhook-edit','recommend','webhook-chooseDept'),('webhook-edit','recommend','webhook-create'),('webhook-edit','recommend','webhook-delete'),('webhook-edit','recommend','webhook-log'),('webhook-log','depend','webhook-browse'),('webhook-log','recommend','webhook-bind'),('webhook-log','recommend','webhook-chooseDept'),('webhook-log','recommend','webhook-create'),('webhook-log','recommend','webhook-delete'),('webhook-log','recommend','webhook-edit'),('weekly-exportweeklyreport','depend','weekly-index'),('weekly-exportweeklyreport','recommend','weekly-index'),('weekly-index','depend','project-index'),('workestimation-index','depend','project-index'),('workflow-activate','depend','workflow-browseFlow'),('workflow-backup','depend','workflow-browseFlow'),('workflow-browseDB','depend','workflow-browseFlow'),('workflow-copy','depend','workflow-browseFlow'),('workflow-create','depend','workflow-browseFlow'),('workflow-deactivate','depend','workflow-browseFlow'),('workflow-delete','depend','workflow-browseFlow'),('workflow-edit','depend','workflow-browseFlow'),('workflow-flowchart','depend','workflow-browseFlow'),('workflow-release','depend','workflow-browseFlow'),('workflow-setApproval','depend','workflow-browseFlow'),('workflow-setCSS','depend','workflow-browseFlow'),('workflow-setJS','depend','workflow-browseFlow'),('workflow-ui','depend','workflow-browseFlow'),('workflow-upgrade','depend','workflow-browseFlow'),('workflow-view','depend','workflow-browseFlow'),('workflowaction-browse','depend','workflow-browseFlow'),('workflowaction-create','depend','workflow-browseFlow'),('workflowaction-delete','depend','workflow-browseFlow'),('workflowaction-edit','depend','workflow-browseFlow'),('workflowaction-setCSS','depend','workflow-browseFlow'),('workflowaction-setJS','depend','workflow-browseFlow'),('workflowaction-setNotice','depend','workflow-browseFlow'),('workflowaction-setVerification','depend','workflow-browseFlow'),('workflowaction-sort','depend','workflow-browseFlow'),('workflowaction-view','depend','workflow-browseFlow'),('workflowcondition-browse','depend','workflow-browseFlow'),('workflowcondition-create','depend','workflow-browseFlow'),('workflowcondition-delete','depend','workflow-browseFlow'),('workflowcondition-edit','depend','workflow-browseFlow'),('workflowdatasource-browse','depend','workflow-browseFlow'),('workflowdatasource-create','depend','workflow-browseFlow'),('workflowdatasource-delete','depend','workflow-browseFlow'),('workflowdatasource-edit','depend','workflow-browseFlow'),('workflowfield-browse','depend','workflow-browseFlow'),('workflowfield-create','depend','workflow-browseFlow'),('workflowfield-delete','depend','workflow-browseFlow'),('workflowfield-edit','depend','workflow-browseFlow'),('workflowfield-exportTemplate','depend','workflow-browseFlow'),('workflowfield-import','depend','workflow-browseFlow'),('workflowfield-setExport','depend','workflow-browseFlow'),('workflowfield-setSearch','depend','workflow-browseFlow'),('workflowfield-setValue','depend','workflow-browseFlow'),('workflowfield-showImport','depend','workflow-browseFlow'),('workflowfield-sort','depend','workflow-browseFlow'),('workflowhook-browse','depend','workflow-browseFlow'),('workflowhook-create','depend','workflow-browseFlow'),('workflowhook-delete','depend','workflow-browseFlow'),('workflowhook-edit','depend','workflow-browseFlow'),('workflowlabel-browse','depend','workflow-browseFlow'),('workflowlabel-create','depend','workflow-browseFlow'),('workflowlabel-delete','depend','workflow-browseFlow'),('workflowlabel-edit','depend','workflow-browseFlow'),('workflowlabel-sort','depend','workflow-browseFlow'),('workflowlayout-admin','depend','workflow-browseFlow'),('workflowlayout-block','depend','workflow-browseFlow'),('workflowlinkage-browse','depend','workflow-browseFlow'),('workflowlinkage-create','depend','workflow-browseFlow'),('workflowlinkage-delete','depend','workflow-browseFlow'),('workflowlinkage-edit','depend','workflow-browseFlow'),('workflowrelation-admin','depend','workflow-browseFlow'),('workflowreport-browse','depend','workflow-browseFlow'),('workflowreport-create','depend','workflow-browseFlow'),('workflowreport-delete','depend','workflow-browseFlow'),('workflowreport-edit','depend','workflow-browseFlow'),('workflowreport-sort','depend','workflow-browseFlow'),('workflowrule-browse','depend','workflow-browseFlow'),('workflowrule-create','depend','workflow-browseFlow'),('workflowrule-delete','depend','workflow-browseFlow'),('workflowrule-edit','depend','workflow-browseFlow'),('workflowrule-view','depend','workflow-browseFlow'),('zahost-browse','depend','qa-index'),('zahost-browse','recommend','zahost-view'),('zahost-browseImage','depend','zahost-browse'),('zahost-cancelDownload','depend','zahost-downloadImage'),('zahost-create','depend','zahost-browse'),('zahost-create','recommend','zahost-edit'),('zahost-delete','depend','zahost-browse'),('zahost-downloadImage','depend','zahost-browseImage'),('zahost-downloadImage','depend','zahost-cancelDownload'),('zahost-edit','depend','zahost-browse'),('zahost-edit','recommend','zahost-create'),('zahost-view','depend','zahost-browse'),('zanode-browse','depend','qa-index'),('zanode-browse','recommend','zanode-view'),('zanode-browseSnapshot','depend','zanode-view'),('zanode-close','depend','zanode-browse'),('zanode-close','depend','zanode-view'),('zanode-close','recommend','zanode-create'),('zanode-close','recommend','zanode-edit'),('zanode-close','recommend','zanode-getVNC'),('zanode-close','recommend','zanode-reboot'),('zanode-close','recommend','zanode-resume'),('zanode-close','recommend','zanode-start'),('zanode-close','recommend','zanode-suspend'),('zanode-create','depend','zanode-browse'),('zanode-create','depend','zanode-view'),('zanode-create','recommend','zanode-close'),('zanode-create','recommend','zanode-edit'),('zanode-create','recommend','zanode-getVNC'),('zanode-create','recommend','zanode-reboot'),('zanode-create','recommend','zanode-resume'),('zanode-create','recommend','zanode-start'),('zanode-create','recommend','zanode-suspend'),('zanode-createImage','depend','zanode-browse'),('zanode-createSnapshot','depend','zanode-browse'),('zanode-createSnapshot','depend','zanode-view'),('zanode-createSnapshot','recommend','zanode-editSnapshot'),('zanode-deleteSnapshot','depend','zanode-browseSnapshot'),('zanode-destroy','depend','zanode-browse'),('zanode-destroy','depend','zanode-view'),('zanode-edit','depend','zanode-browse'),('zanode-edit','depend','zanode-view'),('zanode-edit','recommend','zanode-close'),('zanode-edit','recommend','zanode-create'),('zanode-edit','recommend','zanode-getVNC'),('zanode-edit','recommend','zanode-reboot'),('zanode-edit','recommend','zanode-resume'),('zanode-edit','recommend','zanode-start'),('zanode-edit','recommend','zanode-suspend'),('zanode-editSnapshot','depend','zanode-browseSnapshot'),('zanode-editSnapshot','recommend','zanode-createSnapshot'),('zanode-getVNC','depend','zanode-browse'),('zanode-getVNC','depend','zanode-view'),('zanode-getVNC','recommend','zanode-close'),('zanode-getVNC','recommend','zanode-create'),('zanode-getVNC','recommend','zanode-edit'),('zanode-getVNC','recommend','zanode-reboot'),('zanode-getVNC','recommend','zanode-resume'),('zanode-getVNC','recommend','zanode-start'),('zanode-getVNC','recommend','zanode-suspend'),('zanode-reboot','depend','zanode-browse'),('zanode-reboot','depend','zanode-view'),('zanode-reboot','recommend','zanode-close'),('zanode-reboot','recommend','zanode-create'),('zanode-reboot','recommend','zanode-edit'),('zanode-reboot','recommend','zanode-getVNC'),('zanode-reboot','recommend','zanode-resume'),('zanode-reboot','recommend','zanode-start'),('zanode-reboot','recommend','zanode-suspend'),('zanode-restoreSnapshot','depend','zanode-browseSnapshot'),('zanode-resume','depend','zanode-browse'),('zanode-resume','depend','zanode-view'),('zanode-resume','recommend','zanode-close'),('zanode-resume','recommend','zanode-create'),('zanode-resume','recommend','zanode-edit'),('zanode-resume','recommend','zanode-getVNC'),('zanode-resume','recommend','zanode-reboot'),('zanode-resume','recommend','zanode-start'),('zanode-resume','recommend','zanode-suspend'),('zanode-start','depend','zanode-browse'),('zanode-start','depend','zanode-view'),('zanode-start','recommend','zanode-close'),('zanode-start','recommend','zanode-create'),('zanode-start','recommend','zanode-edit'),('zanode-start','recommend','zanode-getVNC'),('zanode-start','recommend','zanode-reboot'),('zanode-start','recommend','zanode-resume'),('zanode-start','recommend','zanode-suspend'),('zanode-suspend','depend','zanode-browse'),('zanode-suspend','depend','zanode-view'),('zanode-suspend','recommend','zanode-close'),('zanode-suspend','recommend','zanode-create'),('zanode-suspend','recommend','zanode-edit'),('zanode-suspend','recommend','zanode-getVNC'),('zanode-suspend','recommend','zanode-reboot'),('zanode-suspend','recommend','zanode-resume'),('zanode-suspend','recommend','zanode-start'),('zanode-view','depend','zanode-browse'),('zoutput-batchCreate','depend','zoutput-browse'),('zoutput-batchCreate','recommend','zoutput-create'),('zoutput-batchEdit','depend','zoutput-browse'),('zoutput-batchEdit','recommend','zoutput-edit'),('zoutput-create','depend','zoutput-browse'),('zoutput-create','recommend','zoutput-batchCreate'),('zoutput-create','recommend','zoutput-delete'),('zoutput-create','recommend','zoutput-edit'),('zoutput-create','recommend','zoutput-updateOrder'),('zoutput-create','recommend','zoutput-view'),('zoutput-delete','depend','zoutput-browse'),('zoutput-delete','recommend','zoutput-create'),('zoutput-edit','depend','zoutput-browse'),('zoutput-edit','recommend','zoutput-batchEdit'),('zoutput-edit','recommend','zoutput-create'),('zoutput-edit','recommend','zoutput-delete'),('zoutput-edit','recommend','zoutput-updateOrder'),('zoutput-edit','recommend','zoutput-view'),('zoutput-updateOrder','depend','zoutput-browse'),('zoutput-updateOrder','recommend','zoutput-create'),('zoutput-updateOrder','recommend','zoutput-edit'),('zoutput-view','depend','zoutput-browse'),('ai-editModel','depend','ai-models'),('ai-editModel','depend','ai-testConnection'),('ai-testConnection','depend','ai-models'),('ai-testConnection','depend','ai-editModel'),('ai-promptView','depend','ai-prompts'),('ai-createPrompt','depend','ai-prompts'),('ai-createPrompt','depend','ai-promptView'),('ai-promptEdit','depend','ai-prompts'),('ai-promptEdit','depend','ai-promptView'),('ai-promptDelete','depend','ai-prompts'),('ai-promptDelete','depend','ai-promptView'),('ai-promptAssignRole','depend','ai-prompts'),('ai-promptAssignRole','depend','ai-promptView'),('ai-promptSelectDataSource','depend','ai-prompts'),('ai-promptSelectDataSource','depend','ai-promptView'),('ai-promptSetPurpose','depend','ai-prompts'),('ai-promptSetPurpose','depend','ai-promptView'),('ai-promptSetTargetForm','depend','ai-prompts'),('ai-promptSetTargetForm','depend','ai-promptView'),('ai-promptFinalize','depend','ai-prompts'),('ai-promptFinalize','depend','ai-promptView'),('ai-promptAudit','depend','ai-prompts'),('ai-promptAudit','depend','ai-promptView'),('ai-promptPublish','depend','ai-prompts'),('ai-promptPublish','depend','ai-promptView'),('ai-promptUnpublish','depend','ai-prompts'),('ai-promptUnpublish','depend','ai-promptView'),('ai-promptEdit','depend','ai-createPrompt'),('ai-promptAssignRole','depend','ai-createPrompt'),('ai-promptSelectDataSource','depend','ai-createPrompt'),('ai-promptSetPurpose','depend','ai-createPrompt'),('ai-promptSetTargetForm','depend','ai-createPrompt'),('ai-promptFinalize','depend','ai-createPrompt'),('ai-promptAudit','depend','ai-createPrompt'),('ai-createPrompt','recommend','ai-promptEdit'),('ai-createPrompt','recommend','ai-promptDelete'),('ai-createPrompt','recommend','ai-promptAssignRole'),('ai-createPrompt','recommend','ai-promptSelectDataSource'),('ai-createPrompt','recommend','ai-promptSetPurpose'),('ai-createPrompt','recommend','ai-promptSetTargetForm'),('ai-createPrompt','recommend','ai-promptFinalize'),('ai-createPrompt','recommend','ai-promptAudit'),('ai-promptAssignRole','depend','ai-promptSelectDataSource'),('ai-promptAssignRole','depend','ai-promptSetPurpose'),('ai-promptAssignRole','depend','ai-promptSetTargetForm'),('ai-promptAssignRole','depend','ai-promptFinalize'),('ai-promptAssignRole','depend','ai-promptAudit'),('ai-promptAssignRole','depend','ai-promptExecute'),('ai-promptSelectDataSource','depend','ai-promptAssignRole'),('ai-promptSelectDataSource','depend','ai-promptSetPurpose'),('ai-promptSelectDataSource','depend','ai-promptSetTargetForm'),('ai-promptSelectDataSource','depend','ai-promptFinalize'),('ai-promptSelectDataSource','depend','ai-promptAudit'),('ai-promptSelectDataSource','depend','ai-promptExecute'),('ai-promptSetPurpose','depend','ai-promptAssignRole'),('ai-promptSetPurpose','depend','ai-promptSelectDataSource'),('ai-promptSetPurpose','depend','ai-promptSetTargetForm'),('ai-promptSetPurpose','depend','ai-promptFinalize'),('ai-promptSetPurpose','depend','ai-promptAudit'),('ai-promptSetPurpose','depend','ai-promptExecute'),('ai-promptSetTargetForm','depend','ai-promptAssignRole'),('ai-promptSetTargetForm','depend','ai-promptSelectDataSource'),('ai-promptSetTargetForm','depend','ai-promptSetPurpose'),('ai-promptSetTargetForm','depend','ai-promptFinalize'),('ai-promptSetTargetForm','depend','ai-promptAudit'),('ai-promptSetTargetForm','depend','ai-promptExecute'),('ai-promptFinalize','depend','ai-promptAssignRole'),('ai-promptFinalize','depend','ai-promptSelectDataSource'),('ai-promptFinalize','depend','ai-promptSetPurpose'),('ai-promptFinalize','depend','ai-promptSetTargetForm'),('ai-promptFinalize','depend','ai-promptAudit'),('ai-promptFinalize','depend','ai-promptExecute'),('ai-promptAudit','depend','ai-promptAssignRole'),('ai-promptAudit','depend','ai-promptSelectDataSource'),('ai-promptAudit','depend','ai-promptSetPurpose'),('ai-promptAudit','depend','ai-promptSetTargetForm'),('ai-promptAudit','depend','ai-promptFinalize'),('ai-promptAudit','depend','ai-promptExecute'),('ai-roleTemplates','depend','ai-promptAssignRole'),('ai-promptAssignRole','depend','ai-roleTemplates'),('ai-promptExecutionReset', 'depend', 'ai-promptExecute'), ('ai-promptExecute', 'depend', 'ai-promptExecutionReset'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'hourPoint', '0'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1'); @@ -2487,17 +2524,17 @@ CREATE TABLE IF NOT EXISTS `zt_im_conference` ( `cgid` char(40) NOT NULL DEFAULT '', `status` enum ('closed', 'open', 'notStarted') DEFAULT 'closed' NOT NULL, `participants` text NULL, - `subscribers` text NOT NULL, + `subscribers` text NULL, `invitee` text NULL, `openedBy` mediumint(8) NOT NULL DEFAULT 0, `openedDate` datetime NULL, - `topic` text NOT NULL, + `topic` text NULL, `startTime` datetime NULL, `endTime` datetime NULL, `password` char(20) NOT NULL DEFAULT '', `type` enum('default', 'periodic', 'scheduled') NOT NULL DEFAULT 'default', `number` char(20) NOT NULL DEFAULT '', - `note` text NOT NULL, + `note` text NULL, `sentNotify` tinyint(1) NOT NULL DEFAULT 0, `reminderTime` int NOT NULL DEFAULT 0, PRIMARY KEY (`id`) @@ -2982,8 +3019,8 @@ CREATE TABLE IF NOT EXISTS `zt_leave` ( `year` char(4) NOT NULL DEFAULT '', `begin` date NULL, `end` date NULL, - `start` time NOT NULL, - `finish` time NOT NULL, + `start` time NULL, + `finish` time NULL, `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', `backDate` datetime NULL, `type` varchar(30) NOT NULL DEFAULT '', @@ -3010,8 +3047,8 @@ CREATE TABLE IF NOT EXISTS `zt_lieu` ( `year` char(4) NOT NULL DEFAULT '', `begin` date NULL, `end` date NULL, - `start` time NOT NULL, - `finish` time NOT NULL, + `start` time NULL, + `finish` time NULL, `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', `overtime` char(255) NOT NULL DEFAULT '', `trip` char(255) NOT NULL DEFAULT '', @@ -3040,8 +3077,8 @@ CREATE TABLE IF NOT EXISTS `zt_trip` ( `year` char(4) NOT NULL DEFAULT '', `begin` date NULL, `end` date NULL, - `start` time NOT NULL, - `finish` time NOT NULL, + `start` time NULL, + `finish` time NULL, `from` char(50) NOT NULL DEFAULT '', `to` char(50) NOT NULL DEFAULT '', `createdBy` char(30) NOT NULL DEFAULT '', @@ -13648,7 +13685,7 @@ CREATE TABLE IF NOT EXISTS `zt_auditresult` ( `result` char(30) NOT NULL DEFAULT '', `checkedBy` varchar(30) NOT NULL DEFAULT '', `checkedDate` date NULL, - `comment` text NOT NULL , + `comment` text NULL, `assignedTo` varchar(30) NOT NULL DEFAULT '', `status` varchar(30) NOT NULL DEFAULT '', `createdBy` varchar(30) NOT NULL DEFAULT '', @@ -13879,8 +13916,8 @@ CREATE TABLE IF NOT EXISTS `zt_meeting` ( `execution` mediumint(8) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `type` varchar(255) NOT NULL DEFAULT '', - `begin` time NOT NULL, - `end` time NOT NULL, + `begin` time NULL, + `end` time NULL, `dept` mediumint(8) NOT NULL DEFAULT '0', `mode` varchar(255) NOT NULL DEFAULT '', `host` varchar(30) NOT NULL DEFAULT '', @@ -14078,7 +14115,7 @@ CREATE TABLE IF NOT EXISTS `zt_reviewissue` ( `type` char(30) NOT NULL DEFAULT 'review', `listID` mediumint(8) NOT NULL DEFAULT '0', `title` varchar(255) NOT NULL DEFAULT '', - `opinion` varchar(255) NOT NULL DEFAULT '', + `opinion` mediumtext NULL, `opinionDate` DATE NULL, `status` char(30) NOT NULL DEFAULT '', `resolution` char(30) NOT NULL DEFAULT '', @@ -14369,111 +14406,7 @@ CREATE TABLE `zt_scene` ( `grade` tinyint(3) NOT NULL DEFAULT '0', `path` varchar(1000) NOT NULL DEFAULT '', PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- DROP VIEW IF EXISTS `ztv_scenecase`; -CREATE OR REPLACE VIEW `ztv_scenecase` AS SELECT - `zt_case`.`id` AS `id`, - `zt_case`.`title` AS `title`, - `zt_case`.`project` AS `project`, - `zt_case`.`product` AS `product`, - `zt_case`.`execution` AS `execution`, - `zt_case`.`branch` AS `branch`, - `zt_case`.`lib` AS `lib`, - `zt_case`.`module` AS `module`, - `zt_case`.`story` AS `story`, - `zt_case`.`storyVersion` AS `storyVersion`, - `zt_case`.`precondition` AS `precondition`, - `zt_case`.`keywords` AS `keywords`, - `zt_case`.`pri` AS `pri`, - `zt_case`.`type` AS `type`, - `zt_case`.`auto` AS `auto`, - `zt_case`.`frame` AS `frame`, - `zt_case`.`stage` AS `stage`, - `zt_case`.`howRun` AS `howRun`, - `zt_case`.`scriptedBy` AS `scriptedBy`, - `zt_case`.`scriptedDate` AS `scriptedDate`, - `zt_case`.`scriptStatus` AS `scriptStatus`, - `zt_case`.`scriptLocation` AS `scriptLocation`, - `zt_case`.`status` AS `status`, - `zt_case`.`subStatus` AS `subStatus`, - `zt_case`.`color` AS `color`, - `zt_case`.`frequency` AS `frequency`, - IF(`zt_case`.`sort` = 0, `zt_case`.`id`, `zt_case`.`sort`) AS `sort`, - `zt_case`.`openedBy` AS `openedBy`, - `zt_case`.`openedDate` AS `openedDate`, - `zt_case`.`reviewedBy` AS `reviewedBy`, - `zt_case`.`reviewedDate` AS `reviewedDate`, - `zt_case`.`lastEditedBy` AS `lastEditedBy`, - `zt_case`.`lastEditedDate` AS `lastEditedDate`, - `zt_case`.`version` AS `version`, - `zt_case`.`linkCase` AS `linkCase`, - `zt_case`.`fromBug` AS `fromBug`, - `zt_case`.`fromCaseID` AS `fromCaseID`, - `zt_case`.`fromCaseVersion` AS `fromCaseVersion`, - `zt_case`.`deleted` AS `deleted`, - `zt_case`.`lastRunner` AS `lastRunner`, - `zt_case`.`lastRunDate` AS `lastRunDate`, - `zt_case`.`lastRunResult` AS `lastRunResult`, - `zt_case`.`scene` AS `parent`, - `zt_case`.`scene` AS `scene`, - ifnull(`zt_scene`.`grade` + 1 , 1) AS `grade`, - ifnull( - concat( `zt_scene`.`path`, `zt_case`.`id`, ','), - concat(',' , `zt_case`.`id` , ',') - ) AS `path`, - 1 AS `isCase` -FROM (`zt_case` LEFT JOIN `zt_scene` ON( `zt_case`.`scene` = `zt_scene`.`id`+100000000)) -UNION - SELECT - `zt_scene`.`id`+ 100000000 AS `id`, - `zt_scene`.`title` AS `title`, - 0 AS `project`, - `zt_scene`.`product` AS `product`, - 0 AS `execution`, - `zt_scene`.`branch` AS `branch`, - 0 AS `lib`, - `zt_scene`.`module` AS `module`, - 0 AS `story`, - 0 AS `storyVersion`, - '' AS `precondition`, - '' AS `keywords`, - 0 AS `pri`, - '' AS `type`, - '' AS `auto`, - '' AS `frame`, - '' AS `stage`, - '' AS `howRun`, - '' AS `scriptedBy`, - '' AS `scriptedDate`, - '' AS `scriptStatus`, - '' AS `scriptLocation`, - '' AS `status`, - '' AS `subStatus`, - '' AS `color`, - '' AS `frequency`, - `zt_scene`.`sort` AS `sort`, - `zt_scene`.`openedBy` AS `openedBy`, - `zt_scene`.`openedDate` AS `openedDate`, - '' AS `reviewedBy`, - '' AS `reviewedDate`, - `zt_scene`.`lastEditedBy` AS `lastEditedBy`, - `zt_scene`.`lastEditedDate` AS `lastEditedDate`, - 0 AS `version`, - '' AS `linkCase`, - 0 AS `fromBug`, - 0 AS `fromCaseID`, - '' AS `fromCaseVersion`, - `zt_scene`.`deleted` AS `deleted`, - '' AS `lastRunner`, - '' AS `lastRunDate`, - '' AS `lastRunResult`, - `zt_scene`.`parent` AS `parent`, - `zt_scene`.`parent` AS `scene`, - `zt_scene`.`grade` AS `grade`, - `zt_scene`.`path` AS `path`, - 2 AS `isCase` - FROM `zt_scene`; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; REPLACE INTO `zt_approvalflow` (`id`, `name`, `code`, `desc`, `version`, `createdBy`, `createdDate`, `type`, `deleted`) VALUES (1, '最简审批', 'simple', '', 1, 'admin', '2022-04-29 08:46:40', 'project', 0); @@ -15005,10 +14938,10 @@ REPLACE INTO `zt_basicmeas` (`id`, `purpose`, `scope`, `object`, `name`, `code`, (52,'workload','project','finance','项目设计工作最终总预计工时数','pgmDesignLastEstHours','小时','CREATE FUNCTION `qc_pgmdesignlastesthours`($project int) RETURNS float(10,2)\r\nBEGIN\r\n declare estimate float(10,2) default 0__DELIMITER__\r\n declare inited int default 0__DELIMITER__\r\n select qc_cminited($project,\'PP\') into inited__DELIMITER__\r\n IF inited = 1 THEN\r\n select qc_getdesignlastesthours($project) into estimate__DELIMITER__\r\n return estimate__DELIMITER__\r\n ELSE \r\n return 0__DELIMITER__\r\n END IF__DELIMITER__\r\nEND','{\"$project\":{\"showName\":\"\\u6240\\u5c5e\\u9879\\u76ee\",\"varName\":\"$project\",\"varType\":\"select\",\"options\":\"project\",\"defaultValue\":\"\"}}','项目计划最后一个基线版本中所有设计相关任务最初预计工时和','','crontab','{\"week\":\"1,2,3,4,5,6,0\",\"type\":\"week\"}','00:00','','admin','2020-07-23 14:33:00','','1970-01-01 00:00:01',260,'0'), (53,'workload','project','finance','项目任务最终总预计工时数','pgmLastEstHours','小时','CREATE FUNCTION `qc_pgmlastesthours`($project int) RETURNS float(10,2)\r\nBEGIN\r\n declare estimate float(10,2) default 0__DELIMITER__\r\n declare inited int default 0__DELIMITER__\r\n select qc_cminited($project,\'PP\') into inited__DELIMITER__\r\n IF inited = 1 THEN\r\n select qc_getlastesthours($project) into estimate__DELIMITER__\r\n return estimate__DELIMITER__\r\n ELSE \r\n return 0__DELIMITER__\r\n END IF__DELIMITER__\r\nEND','{\"$project\":{\"showName\":\"\\u6240\\u5c5e\\u9879\\u76ee\",\"varName\":\"$project\",\"varType\":\"select\",\"options\":\"project\",\"defaultValue\":\"\"}}','项目计划最后一个基线版本中所有任务最初预计工时和','','crontab','{\"week\":\"1,2,3,4,5,6,0\",\"type\":\"week\"}','00:00','','admin','2020-07-23 14:54:42','','1970-01-01 00:00:01',265,'0'); -REPLACE INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES -('1','0','*','*','*','moduleName=weekly&methodName=computeWeekly','更新项目周报','system',0,'normal','2020-08-27 10:07:53'), -('1','0','*','*','*','moduleName=measurement&methodName=initCrontabQueue','初始化度量队列','zentao',0,'normal','2020-07-07 14:51:48'), -('*/5','*','*','*','*','moduleName=measurement&methodName=execCrontabQueue','执行度量队列','zentao',0,'running','2020-07-10 13:10:58'); +REPLACE INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`) VALUES +('1','0','*','*','*','moduleName=weekly&methodName=computeWeekly','更新项目周报','zentao',0,'normal'), +('1','0','*','*','*','moduleName=measurement&methodName=initCrontabQueue','初始化度量队列','zentao',0,'normal'), +('*/5','*','*','*','*','moduleName=measurement&methodName=execCrontabQueue','执行度量队列','zentao',0,'running'); -- DROP TABLE IF EXISTS `zt_pivot`; CREATE TABLE IF NOT EXISTS `zt_pivot` ( @@ -15136,8 +15069,8 @@ INSERT INTO `zt_chart`(`id`, `name`, `dimension`, `type`, `group`, `dataset`, `d (1046, '宏观数据-产品需求完成率', 1, 'bar', '36', '', '', '{\r\n\"xaxis\":[{\"field\":\"product\",\"name\":\"产品\"}],\r\n\"yaxis\":[\r\n {\"type\":\"value\",\"field\":\"closedRate\",\"agg\":\"value\",\"name\":\"需求完成率\",\"valOrAgg\":\"value\"}\r\n]}', '[]', 0, '', NULL, 'SELECT\r\n t1.name AS product,\r\n IFNULL(t2.name, \'/\') AS program, \r\n IFNULL(t3.name, \'/\') AS productLine, \r\n IFNULL(t4.story, 0) AS closedStory, \r\n t5.story AS totalStory, \r\n ROUND(IFNULL(t4.story, 0) / t5.story * 100, 2) AS closedRate \r\nFROM zt_product AS t1 \r\nLEFT JOIN zt_project AS t2 ON t1.program = t2.id AND t2.type = \'program\' AND t2.grade = 1 \r\nLEFT JOIN zt_module AS t3 ON t1.line = t3.id AND t3.type = \'line\' \r\nLEFT JOIN (SELECT product, COUNT(1) AS story FROM zt_story WHERE deleted = \'0\' AND closedReason = \'done\' GROUP BY product) AS t4 ON t1.id = t4.product \r\nLEFT JOIN (SELECT product, COUNT(1) AS story FROM zt_story WHERE deleted = \'0\' AND ( closedReason = \'done\' OR status != \'closed\') GROUP BY product) AS t5 ON t1.id = t5.product \r\nWHERE t1.deleted = \'0\' AND t1.status != \'closed\' AND t1.shadow = \'0\' AND t1.vision = \'rnd\' AND t5.story IS NOT NULL \r\nORDER BY t1.order DESC', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), (1047, '宏观数据-产品Bug修复率', 1, 'bar', '44', '', '', '{\r\n\"xaxis\":[{\"field\":\"product\",\"name\":\"产品\"}],\r\n\"yaxis\":[\r\n {\"type\":\"value\",\"field\":\"fixedRate\",\"agg\":\"value\",\"name\":\"Bug修复率\",\"valOrAgg\":\"value\"}\r\n]}', '[]', 0, '', NULL, 'SELECT \r\n t1.name AS product,\r\n IFNULL(t2.name, \'/\') AS program,\r\n IFNULL(t3.name, \'/\') AS productLine,\r\n IFNULL(t4.bug, 0) AS fixedBug,\r\n t5.bug AS totalBug,\r\n ROUND(IFNULL(t4.bug, 0) / t5.bug * 100, 2) AS fixedRate\r\nFROM zt_product AS t1\r\nLEFT JOIN zt_project AS t2 ON t1.program = t2.id AND t2.type = \'program\' AND t2.grade = 1\r\nLEFT JOIN zt_module AS t3 ON t1.line = t3.id AND t3.type = \'line\'\r\nLEFT JOIN (SELECT product, COUNT(1) AS bug FROM zt_bug WHERE deleted = \'0\' AND resolution = \'fixed\' AND status = \'closed\' GROUP BY product) AS t4 ON t1.id = t4.product\r\nLEFT JOIN (SELECT product, COUNT(1) AS bug FROM zt_bug WHERE deleted = \'0\' AND (resolution = \'fixed\' OR resolution = \'postponed\' OR status = \'active\') GROUP BY product) AS t5 ON t1.id = t5.product\r\nWHERE t1.deleted = \'0\' AND t1.status != \'closed\' AND t1.shadow = \'0\' AND t1.vision = \'rnd\' AND t5.bug IS NOT NULL\r\nORDER BY t1.order DESC', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), (1049, '宏观数据-部门人员分布图', 1, 'bar', '56', '', '', '{\r\n\"xaxis\":[{\"field\":\"deptName\",\"name\":\"部门\"}],\r\n\"yaxis\":[\r\n {\"type\":\"value\",\"field\":\"count\",\"agg\":\"value\",\"name\":\"部门人数\",\"valOrAgg\":\"value\"}\r\n]}', '[]', 0, '', NULL, 'SELECT IF(t3.id IS NOT NULL, t3.`name`, \"空\") AS deptName,count(1) as count, \r\nIF(t3.id IS NOT NULL, t3.`order`, 9999) AS deptOrder \r\nFROM zt_user AS t1 \r\nLEFT JOIN zt_dept AS t2 ON t1.dept = t2.id\r\nLEFT JOIN zt_dept AS t3 ON FIND_IN_SET(TRIM(\',\' FROM t3.path), TRIM(\',\' FROM t2.path)) AND t3.grade = \'1\'\r\nWHERE t1.deleted = \'0\'\r\nGROUP BY deptName, deptOrder \r\nORDER BY deptOrder ASC', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), -(1050, '宏观数据-公司角色分布图', 1, 'pie', '56', '', '', '{\"group\":[{\"field\":\"role\",\"name\":\"类型\"}],\"metric\":[{\"type\":\"agg\",\"field\":\"account\",\"agg\":\"count\",\"name\":\"人数\",\"valOrAgg\":\"count\"}]}', '[]', 0, '', NULL, 'SELECT\n account,\nCASE\n ROLE \n WHEN \'dev\' THEN\n \"研发\" \n WHEN \'qa\' THEN\r\n \"测试\"\r\n WHEN \'pm\' THEN\r\n \"项目经理\"\r\n WHEN \'others\' THEN\r\n \"其他\"\r\n WHEN \'td\' THEN\r\n \"研发主管\"\r\n WHEN \'pd\' THEN\r\n \"产品主管\"\r\n WHEN \'po\' THEN\r\n \"产品经理\"\r\n WHEN \'qd\' THEN\r\n \"测试主管\"\r\n WHEN \'top\' THEN\r\n \"高层管理\"\r\n ELSE\r\n \"未知\"\r\n END\r\n role\n FROM\n `zt_user` \n WHERE\n deleted = \'0\' ', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), -(1051, '宏观数据-人员工龄分布图', 1, 'bar', '56', '', '', '{\r\n\"xaxis\":[{\"field\":\"joinDate\",\"name\":\"工龄\"}],\r\n\"yaxis\":[\r\n {\"type\":\"value\",\"field\":\"count\",\"agg\":\"value\",\"name\":\"人数\",\"valOrAgg\":\"value\"}\r\n]}', '[]', 0, '', NULL, 'SELECT count(1) as count, \"0-1年\" as joinDate FROM `zt_user` WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 1 YEAR)\r\nunion\r\nSELECT count(1) as count, \"1-3年\" as joinDate FROM `zt_user` WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 3 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 1 YEAR)\r\nunion\r\nSELECT count(1) as count, \"3-5年\" as joinDate FROM `zt_user` WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 5 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 3 YEAR)\r\nunion\r\nSELECT count(1) as count, \"5-10年\" as joinDate FROM `zt_user` WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 10 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 5 YEAR)\r\nunion\r\nSELECT count(1) as count, \"10年以上\" as joinDate FROM `zt_user` WHERE deleted = \'0\' AND `join` < DATE_SUB(NOW(), INTERVAL 10 YEAR) AND LEFT(`join`, 4) != \'0000\'\r\nunion \r\nSELECT count(1) as count, \"未知\" as joinDate FROM `zt_user` WHERE deleted = \'0\' AND LEFT(`join`, 4) = \'0000\'', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), +(1050, '宏观数据-公司角色分布图', 1, 'pie', '56', '', '', '{\"group\":[{\"field\":\"role\",\"name\":\"类型\"}],\"metric\":[{\"type\":\"agg\",\"field\":\"account\",\"agg\":\"count\",\"name\":\"人数\",\"valOrAgg\":\"count\"}]}', '[]', 0, '', NULL, 'SELECT\n account,\nCASE\n ROLE \n WHEN \'dev\' THEN\n \"研发\" \n WHEN \'qa\' THEN\r\n \"测试\"\r\n WHEN \'pm\' THEN\r\n \"项目经理\"\r\n WHEN \'others\' THEN\r\n \"其他\"\r\n WHEN \'td\' THEN\r\n \"研发主管\"\r\n WHEN \'pd\' THEN\r\n \"产品主管\"\r\n WHEN \'po\' THEN\r\n \"产品经理\"\r\n WHEN \'qd\' THEN\r\n \"测试主管\"\r\n WHEN \'top\' THEN\r\n \"高层管理\"\r\n ELSE\r\n \"未知\"\r\n END\r\n role\n FROM\n zt_user \n WHERE\n deleted = \'0\' ', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), +(1051, '宏观数据-人员工龄分布图', 1, 'bar', '56', '', '', '{\r\n\"xaxis\":[{\"field\":\"joinDate\",\"name\":\"工龄\"}],\r\n\"yaxis\":[\r\n {\"type\":\"value\",\"field\":\"count\",\"agg\":\"value\",\"name\":\"人数\",\"valOrAgg\":\"value\"}\r\n]}', '[]', 0, '', NULL, 'SELECT count(1) as count, \"0-1年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 1 YEAR)\r\nunion\r\nSELECT count(1) as count, \"1-3年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 3 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 1 YEAR)\r\nunion\r\nSELECT count(1) as count, \"3-5年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 5 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 3 YEAR)\r\nunion\r\nSELECT count(1) as count, \"5-10年\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` > DATE_SUB(NOW(), INTERVAL 10 YEAR) AND `join` <= DATE_SUB(NOW(), INTERVAL 5 YEAR)\r\nunion\r\nSELECT count(1) as count, \"10年以上\" as joinDate FROM zt_user WHERE deleted = \'0\' AND `join` < DATE_SUB(NOW(), INTERVAL 10 YEAR) AND LEFT(`join`, 4) != \'0000\'\r\nunion \r\nSELECT count(1) as count, \"未知\" as joinDate FROM zt_user WHERE deleted = \'0\' AND LEFT(`join`, 4) = \'0000\'', 'published', 1, '', 'admin', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0), (1055, '年度新增-一级项目集个数', 1, 'card', '45', '', '', '{\"value\": {\"type\": \"agg\", \"field\": \"id\", \"agg\": \"count\"}, \"title\": {\"type\": \"text\", \"name\": \"\"},\n\"type\": \"value\"\n}', '', 0, NULL, NULL, 'SELECT\r\n t1.`year`,\r\n t2.id,\r\n t2.name\r\nFROM\r\n ( SELECT DISTINCT YEAR ( `date` ) AS \"year\" FROM zt_action ) AS t1\r\n LEFT JOIN (\r\n SELECT\r\n id, name,\r\n YEAR ( openedDate ) AS `year` \r\n FROM\r\n zt_project \r\n WHERE\r\n `type` = \'program\' \r\n AND deleted = \'0\' \r\n AND grade = \'1\' \r\n ) t2 ON t1.`year` = t2.`year` \r\n WHERE t2.id IS NOT NULL', 'published', 1, '', 'admin', NULL, '', NULL, 0), (1056, '年度新增-产品个数', 1, 'card', '47', '', '', '{\"value\": {\"type\": \"agg\", \"field\": \"id\", \"agg\": \"count\"}, \"title\": {\"type\": \"text\", \"name\": \"\"},\n\"type\": \"value\"\n}', '', 0, NULL, NULL, 'SELECT\r\n t1.`year`,\r\n t2.id,\r\n t2.name\r\nFROM\r\n ( SELECT DISTINCT YEAR ( `date` ) AS \"year\" FROM zt_action ) AS t1\r\n LEFT JOIN (\r\n SELECT\r\n id, name,\r\n YEAR ( createdDate ) AS `year` \r\n FROM\r\n zt_product \r\n WHERE\r\n deleted = \'0\' \r\n AND shadow = \'0\' \r\n ) t2 ON t1.`year` = t2.`year` \r\n WHERE t2.id IS NOT NULL', 'published', 1, '', 'admin', NULL, '', NULL, 0), (1057, '年度新增-需求个数', 1, 'card', '51', '', '', '{\"value\": {\"type\": \"agg\", \"field\": \"id\", \"agg\": \"count\"}, \"title\": {\"type\": \"text\", \"name\": \"\"},\n\"type\": \"value\"\n}', '', 0, NULL, NULL, 'SELECT\n t1.`year`,\n t2.id,\r\n t2.title\nFROM\n ( SELECT DISTINCT YEAR ( `date` ) AS \"year\" FROM zt_action ) AS t1\n LEFT JOIN ( SELECT id, title, YEAR ( openedDate ) AS `year` FROM zt_story WHERE deleted = \'0\' ) AS t2 ON t1.`year` = t2.`year` \r\n WHERE t2.id IS NOT NULL', 'published', 1, '', 'admin', NULL, '', NULL, 0), @@ -15775,14 +15708,14 @@ END; -- DROP TABLE IF EXISTS `zt_demandpool`; CREATE TABLE `zt_demandpool` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `desc` mediumtext NOT NULL, - `status` char(30) NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` date NOT NULL, - `owner` text NOT NULL, - `reviewer` text NOT NULL, - `acl` char(30) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `desc` mediumtext NULL, + `status` char(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` date NULL, + `owner` text NULL, + `reviewer` text NULL, + `acl` char(30) NULL, `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -15790,100 +15723,100 @@ CREATE TABLE `zt_demandpool` ( -- DROP TABLE IF EXISTS `zt_demand`; CREATE TABLE `zt_demand` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `pool` int(8) NOT NULL, - `module` int(8) NOT NULL, - `product` mediumint(8) NOT NULL, - `parent` mediumint(8) NOT NULL, - `pri` char(30) NOT NULL, - `category` char(30) NOT NULL, - `source` char(30) NOT NULL, - `sourceNote` varchar(255) NOT NULL, - `title` varchar(255) NOT NULL, - `feedbackedBy` varchar(255) NOT NULL, - `email` varchar(255) NOT NULL, - `assignedTo` char(30) NOT NULL, - `assignedDate` datetime NOT NULL, - `reviewedBy` text NOT NULL, - `reviewedDate` datetime NOT NULL, - `status` char(30) NOT NULL, - `duration` char(30) NOT NULL, - `BSA` char(30) NOT NULL, - `story` mediumint(8) NOT NULL, - `roadmap` mediumint(8) NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` datetime NOT NULL, - `mailto` text NOT NULL, - `duplicateDemand` mediumint(8) NOT NULL, - `childDemands` varchar(255) NOT NULL, - `version` varchar(255) NOT NULL, + `pool` int(8) NOT NULL DEFAULT '0', + `module` int(8) NOT NULL DEFAULT '0', + `product` mediumint(8) NOT NULL DEFAULT '0', + `parent` mediumint(8) NOT NULL DEFAULT '0', + `pri` char(30) NOT NULL DEFAULT '', + `category` char(30) NOT NULL DEFAULT '', + `source` char(30) NOT NULL DEFAULT '', + `sourceNote` varchar(255) NOT NULL DEFAULT '', + `title` varchar(255) NOT NULL DEFAULT '', + `feedbackedBy` varchar(255) NOT NULL DEFAULT '', + `email` varchar(255) NOT NULL DEFAULT '', + `assignedTo` char(30) NOT NULL DEFAULT '', + `assignedDate` datetime NULL, + `reviewedBy` text NULL, + `reviewedDate` datetime NULL, + `status` char(30) NOT NULL DEFAULT '', + `duration` char(30) NOT NULL DEFAULT '', + `BSA` char(30) NOT NULL DEFAULT '', + `story` mediumint(8) NOT NULL DEFAULT '0', + `roadmap` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` datetime NULL, + `mailto` text NULL, + `duplicateDemand` mediumint(8) NULL, + `childDemands` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', `vision` varchar(255) NOT NULL DEFAULT 'or', - `color` varchar(255) NOT NULL, - `changedBy` char(30) NOT NULL, - `changedDate` datetime NOT NULL, - `closedBy` char(30) NOT NULL, - `closedDate` datetime NOT NULL, - `closedReason` varchar(30) NOT NULL, - `submitedBy` varchar(30) NOT NULL, + `color` varchar(255) NOT NULL DEFAULT '', + `changedBy` char(30) NOT NULL DEFAULT '', + `changedDate` datetime NULL, + `closedBy` char(30) NOT NULL DEFAULT '', + `closedDate` datetime NULL, + `closedReason` varchar(30) NOT NULL DEFAULT '', + `submitedBy` varchar(30) NOT NULL DEFAULT '', `lastEditedBy` varchar(30) NOT NULL DEFAULT '', - `lastEditedDate` datetime NOT NULL, - `activatedDate` datetime NOT NULL, + `lastEditedDate` datetime NULL, + `activatedDate` datetime NULL, `distributedBy` varchar(30) NOT NULL DEFAULT '', - `distributedDate` datetime NOT NULL, + `distributedDate` datetime NULL, `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_demandspec`; CREATE TABLE `zt_demandspec` ( - `demand` mediumint(9) NOT NULL, - `version` smallint(6) NOT NULL, - `title` varchar(255) NOT NULL, - `spec` mediumtext NOT NULL, - `verify` mediumtext NOT NULL, - `files` text NOT NULL, - UNIQUE KEY `demand` (`demand`,`version`) + `demand` mediumint(9) NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL DEFAULT '', + `spec` mediumtext NULL, + `verify` mediumtext NULL, + `files` text NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE UNIQUE INDEX `demand` ON `zt_demandspec`(`demand`,`version`); -- DROP TABLE IF EXISTS `zt_demandreview`; CREATE TABLE `zt_demandreview` ( - `demand` mediumint(9) NOT NULL, - `version` smallint(6) NOT NULL, - `reviewer` varchar(30) NOT NULL, - `result` varchar(30) NOT NULL, - `reviewDate` datetime NOT NULL, - UNIQUE KEY `demand` (`demand`,`version`,`reviewer`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; + `demand` mediumint(9) NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '0', + `reviewer` varchar(30) NOT NULL DEFAULT '', + `result` varchar(30) NOT NULL DEFAULT '', + `reviewDate` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE UNIQUE INDEX `demand` ON `zt_demandreview`(`demand`,`version`,`reviewer`); -- DROP TABLE IF EXISTS `zt_charter`; CREATE TABLE `zt_charter` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `level` int(8) NOT NULL, - `category` char(30) NOT NULL, - `market` varchar(30) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `level` int(8) NOT NULL DEFAULT '0', + `category` char(30) NOT NULL DEFAULT '', + `market` varchar(30) NOT NULL DEFAULT '', `check` enum('0','1') NOT NULL DEFAULT '0', - `appliedBy` char(30) NOT NULL, - `appliedDate` datetime NOT NULL, - `budget` char(30) NOT NULL, - `budgetUnit` char(30) NOT NULL, - `product` mediumint(8) NOT NULL, - `roadmap` mediumint(8) NOT NULL, - `spec` mediumtext NOT NULL, - `status` char(30) NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` datetime NOT NULL, - `charterFiles` text NOT NULL, + `appliedBy` char(30) NOT NULL DEFAULT '', + `appliedDate` datetime NULL, + `budget` char(30) NOT NULL DEFAULT '', + `budgetUnit` char(30) NOT NULL DEFAULT '', + `product` mediumint(8) NOT NULL DEFAULT '0', + `roadmap` mediumint(8) NOT NULL DEFAULT '0', + `spec` mediumtext NULL, + `status` char(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` datetime NULL, + `charterFiles` text NULL, `closedBy` char(30) NOT NULL DEFAULT '', `closedDate` datetime NULL, - `closedReason` varchar(255) NOT NULL, + `closedReason` varchar(255) NOT NULL DEFAULT '', `activatedBy` char(30) NOT NULL DEFAULT '', `activatedDate` datetime NULL, - `reviewedBy` varchar(255) NOT NULL, - `reviewedResult` char(30) NOT NULL, - `reviewedDate` datetime NOT NULL, - `meetingDate` date NOT NULL, - `meetingLocation` varchar(255) NOT NULL, - `meetingMinutes` mediumtext NOT NULL, + `reviewedBy` varchar(255) NOT NULL DEFAULT '', + `reviewedResult` char(30) NOT NULL DEFAULT '', + `reviewedDate` datetime NULL, + `meetingDate` date NULL, + `meetingLocation` varchar(255) NOT NULL DEFAULT '', + `meetingMinutes` mediumtext NULL, `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -15893,29 +15826,30 @@ REPLACE INTO `zt_config` (`vision`, `owner`, `module`, `section`, `key`, `value` -- DROP TABLE IF EXISTS `zt_roadmap`; CREATE TABLE `zt_roadmap` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `product` mediumint(8) NOT NULL, - `branch` mediumint(8) NOT NULL, - `name` varchar(255) NOT NULL, - `status` char(30) NOT NULL, - `begin` date NOT NULL, - `end` date NOT NULL, - `desc` longtext NOT NULL, - `createdBy` char(30) NOT NULL, - `createdDate` date NOT NULL, - `closedBy` char(30) NOT NULL, - `closedDate` datetime NOT NULL, + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) NOT NULL DEFAULT '0', + `branch` mediumint(8) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `status` char(30) NOT NULL DEFAULT '', + `begin` date NULL, + `end` date NULL, + `desc` longtext NULL, + `createdBy` char(30) NOT NULL DEFAULT '', + `createdDate` date NULL, + `closedBy` char(30) NOT NULL DEFAULT '', + `closedDate` datetime NULL, `closedReason` enum('done','canceled') DEFAULT NULL, - `deleted` enum('0','1') NOT NULL DEFAULT '0' + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_roadmapstory`; CREATE TABLE `zt_roadmapstory` ( - `roadmap` mediumint(8) unsigned NOT NULL, - `story` mediumint(8) unsigned NOT NULL, - `order` MEDIUMINT UNSIGNED NOT NULL, - UNIQUE KEY `roadmap_story` (`roadmap`,`story`) + `roadmap` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `order` MEDIUMINT UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE UNIQUE INDEX `roadmap_story` ON `zt_roadmapstory`(`roadmap`,`story`); REPLACE INTO `zt_stage` (`name`, `percent`, `type`, `projectType`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `deleted`) VALUES ('概念', '10', 'concept', 'ipd', 'admin', '2020-02-08 21:08:30', 'admin', '2020-02-12 13:50:27', '0'), @@ -15924,3 +15858,56 @@ REPLACE INTO `zt_stage` (`name`, `percent`, `type`, `projectType`, `createdBy`, ('验证', '15', 'qualify', 'ipd', 'admin', '2020-02-08 21:08:30', 'admin', '2020-02-12 13:50:27', '0'), ('发布', '10', 'launch', 'ipd', 'admin', '2020-02-08 21:08:30', 'admin', '2020-02-12 13:50:27', '0'), ('全生命周期', '5', 'lifecycle', 'ipd', 'admin', '2020-02-08 21:08:45', 'admin', '2020-02-12 13:50:27', '0'); + +-- DROP TABLE IF EXISTS `zt_prompt`; +CREATE TABLE IF NOT EXISTS `zt_prompt` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(20) NOT NULL, + `desc` text DEFAULT NULL, + `model` mediumint(8) unsigned DEFAULT NULL, + `module` varchar(30) DEFAULT NULL, + `source` text DEFAULT NULL, + `targetForm` varchar(30) DEFAULT NULL, + `purpose` text DEFAULT NULL, + `elaboration` text DEFAULT NULL, + `role` text DEFAULT NULL, + `characterization` text DEFAULT NULL, + `status` enum('draft','active','replaced') NOT NULL DEFAULT 'draft', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) DEFAULT NULL, + `editedDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO `zt_prompt` (`name`, `model`, `module`, `source`, `targetForm`, `purpose`, `elaboration`, `role`, `characterization`, `createdBy`, `createdDate`) VALUES +('需求润色', 0, 'story', ',story.title,story.spec,story.verify,story.product,story.module,story.pri,story.category,story.estimate,', 'story.change', '帮忙优化其中各字段的表述,使表述清晰准确。必要时可以修改需求使其更加合理。', '需求描述格式建议使用:作为一名<某种类型的用户>,我希望<达成某些目的>,这样可以<开发的价值>。验收标准建议列举多条。', '请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。', 'system', '2023-08-10 13:24:14'), +('一键拆用例', 0, 'story', ',story.title,story.spec,story.verify,story.product,story.module,story.pri,story.category,story.estimate,', 'story.testcasecreate', '为这个需求生成一个或多个对应的测试用例。', '', '作为一名资深的测试工程师。', '熟悉测试流程和方法,精通自动化测试和性能测试,能够设计和编写测试用例和测试脚本,擅长问题诊断和分析,熟悉敏捷开发和持续集成,能够协调多部门合作和项目管理。开发工程师应该是专业且严谨的。', 'system', '2023-08-10 13:24:14'), +('任务润色', 0, 'task', ',task.name,task.desc,task.pri,task.status,task.estimate,task.consumed,task.left,task.progress,task.estStarted,task.realStarted,', 'task.edit', '优化其中各字段的表述,使表述清晰准确,明确任务目标。', '必要时指出任务的风险点。', '你是一名经验丰富的开发工程师。', '精通多种编程语言和框架、熟悉前后端技术和架构、擅长性能优化和安全防护、熟悉云计算和容器化技术、能够协调多人协作和项目管理。', 'system', '2023-08-10 13:24:14'), +('需求转任务', 0, 'story', ',story.title,story.spec,story.verify,story.product,story.module,story.pri,story.category,story.estimate,', 'story.totask', '将需求转化为对应的开发任务要求。', '', '请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。同时精通多种编程语言和框架、熟悉前后端技术。', 'system', '2023-08-10 13:24:14'), +('Bug转需求', 0, 'bug', ',bug.title,bug.steps,bug.severity,bug.pri,bug.status,bug.confirmed,bug.type,', 'bug.story/create', '将bug转换为产品需求,表述清晰准确。', '需求描述格式建议使用:作为一名<某种类型的用户>,我希望<达成某些目的>,这样可以<开发的价值>。验收标准建议列举多条。', '请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。', 'system', '2023-08-10 13:24:14'), +('Bug润色', 0, 'bug', ',bug.title,bug.steps,bug.severity,bug.pri,bug.status,bug.confirmed,bug.type,', 'bug.edit', '优化其中各字段的表述,使表述清晰准确。', 'Bug描述格式建议使用:[步骤]<一步一步复现Bug的步骤>[结果][期望]', '作为一名资深的测试工程师。', '熟悉测试流程和方法,精通自动化测试和性能测试,能够设计和编写测试用例和测试脚本,擅长问题诊断和分析,熟悉敏捷开发和持续集成,能够协调多部门合作和项目管理。开发工程师应该是专业且严谨的。', 'system', '2023-08-10 13:24:14'); + +-- DROP TABLE IF EXISTS `zt_promptrole`; +CREATE TABLE IF NOT EXISTS `zt_promptrole` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + `desc` text DEFAULT NULL, + `model` mediumint(8) unsigned DEFAULT NULL, + `role` text DEFAULT NULL, + `characterization` text DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO `zt_promptrole` (`role`, `characterization`) VALUES +('请你扮演一名资深的产品经理。', '负责产品战略、设计、开发、数据分析、用户体验、团队管理、沟通协调等方面,需要具备多种技能和能力,以实现产品目标和公司战略。'), +('你是一名经验丰富的开发工程师。', '精通多种编程语言和框架、熟悉前后端技术和架构、擅长性能优化和安全防护、熟悉云计算和容器化技术、能够协调多人协作和项目管理。'), +('作为一名资深的测试工程师。', '测试工程师应该是专业且严谨的。熟悉测试流程和方法,精通自动化测试和性能测试,能够设计和编写测试用例和测试脚本,擅长问题诊断和分析,熟悉敏捷开发和持续集成,能够协调多部门合作和项目管理。'), +('假如你是一名资深的QA工程师。', '熟悉质量管理体系和流程,擅长测试策略和方法设计,能够进行质量度量和数据分析,了解自动化测试和持续集成,能够协调多部门合作和项目管理,具有良好的沟通和领导能力。'), +('你是一名文章写得很好的文案编辑。', '文笔流畅、条理清晰。精通广告文案写作和编辑,擅长创意思维和品牌策略,能够进行市场调研和竞品分析,具有敏锐的审美和语言表达能力,能够协调多部门合作和项目管理,具有良好的沟通和协调能力。'), +('请你扮演一名经验丰富的项目经理。', '具备项目计划制定、进度管理、成本控制、团队管理、沟通协调、风险管理、质量控制、敏捷开发、互联网技术和数据分析等多方面的技能和能力。'), +('你是一个自回归的语言模型,已经通过instruction-tuning和RLHF进行了Fine-tuning。', '你仔细地提供准确、事实、深思熟虑、细致入微的答案,并在推理方面表现出色。如果你认为可能没有正确的答案,你会直接说出来。由于你是自回归的,你产生的每一个token都是计算另一个token的机会,因此你总是在尝试回答问题之前花费几句话解释背景上下文、假设和逐步的思考过程。您的用户是AI和伦理学的专家,所以他们已经知道您是一个语言模型以及您的能力和局限性,所以不需要再提醒他们。他们一般都熟悉伦理问题,所以您也不需要再提醒他们。在回答时不要啰嗦,但在可能有助于解释的地方提供详细信息和示例。'); + +ALTER TABLE `zt_ticket` ADD `subStatus` varchar(30) NOT NULL DEFAULT ''; diff --git a/dependency.json b/dependency.json deleted file mode 100644 index f6b52a754c..0000000000 --- a/dependency.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "pkg": { - "xuanxuan": { - "gitVersion": "v7.2.1-rc.4", - "version": "7.2.1" - }, - "zentaoext": { - "gitVersion": "18.x" - }, - "zdoo": { - "gitVersion": "master" - }, - "zdooext": { - "gitVersion": "master" - } - } -} diff --git a/doc/CHANGELOG b/doc/CHANGELOG index cb53653a05..43cf8e6e84 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,102 @@ +2023-08-15 18.6 +完成的需求 +开源版: +30539 数据备份前自动检查空间大小空间不足时给出提示 +31901 产品中设置的评审人默认具备产品访问权限 +39107 优化重复Bug下拉菜单的加载速度 +39958 文档按版本记录每个版本下的附件内容 +40703 历史记录数据较多时,加载性能优化 +42686 版本关联需求时搜索列表中过滤掉草稿、评审中、变更中的需求 +43731 附件增加单独的预览权限 +44084 文档详情对比后内容区域优化删除和新增的样式 +44726 文档详情中文章内容大纲支持显示所有层级 +45166 优化InnoDB对于REPLACE操作的性能支撑问题 +45316 创建文档时调整选择模板的方式 +45887 优化树状图中任务的显示规则 +46723 新增区域页面中调整复制区域样式的名称 +47076 测试下面的测试单中创建测试报告与执行下面测试单创建测试报告逻辑保持一致 +47293 升级流程中在执行SQL环节增加进度展示 +48093 优化项目概况页加载速度 +48094 优化执行概况页加载速度 +48492 一键安装包默认的内存大小提升到512M +48493 一键安装包默认的附件大小提升到100M +48500 希望创建产品和创建分支的权限可以解耦 +48612 测试报告的测试范围只展示版本关联的需求和Bug +企业版: +47188 汇总设置增加提示文案 +47126 透视表设计器实现汇总设置参数的开关 +47127 在未勾选汇总设置时实现下一步按钮和流程标签的校验逻辑 +47130 前台支持切换查看透视表和原始数据 +47137 前台支持查看未勾选汇总设置的透视表 +47138 前台支持查看透视表的原始数据 +47132 老用户未设置报表设计参数的水晶报表时也可以正常升级 +47137 前台支持查看未勾选汇总设置的透视表 +47138 前台支持查看透视表的原始数据 +46528 浏览数据表时可以分页查看数据表 +旗舰版: +47077 调整瀑布项目甘特图中任务计划起止日期的显示规则 +46637 检查清单中的不符合项不直接影响评审结果 +46631 地盘待处理区块中标签下无数据时隐藏该标签 +46630 地盘待处理区块中将审批标签调整到日程后面 +46629 工时明细表中列表数据超过一屏时底部滚动条置顶显示 +44213 融合瀑布模型中看板和迭代工时数据参与挣值计算 +46639 批量创建质量保证计划时可以按过程内容默认填充所有活动、文档 +46636 评审问题列表中增加搜索功能 +46626 不符合项列表增加搜索功能 +46625 质量保证计划列表增加搜索功能 +修复的Bug +开源版: +36686 产品下创建非激活状态需求没有记录动态和历史记录 +36654 升级后产品需求的数据不正确 +36958 修改需求的所属产品异常 +36954 任务起止时间设置必填不生效 +36722 升级18.5系列版本,出现一致性检查需要手动执行SQL +36910 更新燃尽图计算有误 +36959 禅道项目空间提研发需求提示【所属计划】不能为空 +35520 无产品无迭代项目用户需求列表点击SR处数字提示无权限 +35526 无产品无迭代项目研发需求列表切换为看板视图后无法再切换到用户需求 +36945 全局搜索无迭代项目下任务,点击没有跳转项目标签 +36055 通用看板模块的“泳道高度”设置“自定义”后卡片展示没有按照高度变化来呈现 +36102 mysql8下文档仪表盘下的产品文档区块sql报错 +36961 评审用例时选了了多人,用例列表中显示用户名,不显示姓名 +36074 附件下载链接带sid信息 +36826 执行的工时重复统计了父子任务的工时 +37048 后台文档模板中编辑模板的字段显示的是“创建模板” +36981 无产品无迭代项目下文档详情页1.5级导航丢失 +36916 链接类型的文档升级后链接没有渲染出来 +35404 系统权限保存速度太慢 +35786 无产品的融合敏捷项目下的看板,批量提需求后,页面未刷新 +36405 创建产品页面选择项目集或删除项目集后产品线控件处加载2次 +37052 【性能】权限保存20s+ +25993 scrum看板任务看板按需分组切换排序条件卡片渲染不出来 +37122 在地盘仪表盘移动【我的待处理】区块,进入审批中的onlybody超链接,跳转到了页面而不是弹窗 +37046 多分支产品下提研发需求页面的“用户需求”无法正常加载 +35381 【4.4alpha1】无迭代项目需求分解任务慢 +26408 gogs服务器用户1千人时,进入绑定用户页面无加载信息 +27044 项目集下项目过多时,页面反应慢 +37084 18.5版本用例数据较多时,页面卡顿 +37243 多分支产品创建研发需求,用户需求没有根据分支联动 +37241 所有分支下创建研发需求,显示所有的用户需求 +37045 研发看板卡片拖动排序后刷新页面排序不成功 +34331 维护部门时,页面样式不正确 +37230 二次开发数据字典中左侧目录树无法正常展示 +企业版: +36779 Bug类型统计表表头类型显示的不是中文 +36857 透视表下的项目Bug类型统计表中类型显示为了键名 +36920 BI下导出按钮失效 +36626 登录有代码报错 +旗舰版: +34960 文档链接复制后在新页签中打开报错 +36453 linux一键安装包瀑布项目评审保存结果有报错 +33583 瀑布项目甘特图中阶段显示的计划开始、结束时间不正确 +36465 工作流开启审批流后进行评审时不发送webhook应用通知 +36115 私有产品可访问权限,增加项目所属项目集干系人 +35661 【调整优化】达梦数据库版本的禅道升级时,数据库备份页面需优化 +36051 地盘仪表盘中未完成的项目统计瀑布项目进度没有跟随周报进度 +37040 新增工作流字段后项目阶段测试用例搜索异常 +35828 状态为“已入库”的数据依然可以进行批量审批 +37235 里程碑报告中开始周数和结束周数不正确 + 2023-07-27 ipd1.0 完成的需求 42981 实现需求的导入功能 diff --git a/framework/base/helper.class.php b/framework/base/helper.class.php index d75a7fba01..4af970220e 100644 --- a/framework/base/helper.class.php +++ b/framework/base/helper.class.php @@ -251,8 +251,8 @@ class baseHelper { if(is_array($idList)) { - foreach($idList as $key=>$value) $idList[$key] = addslashes($value); - return "IN ('" . join("','", $idList) . "')"; + foreach($idList as $key => $value) $idList[$key] = empty($value) ? '' : addslashes($value); + return "IN ('" . implode("','", $idList) . "')"; } if(is_null($idList)) $idList = ''; @@ -446,7 +446,7 @@ class baseHelper if(function_exists('mb_substr')) $string = mb_substr($string, 0, $length, 'utf-8'); preg_match_all("/./su", $string, $data); - $string = join("", array_slice($data[0], 0, $length)); + $string = implode("", array_slice($data[0], 0, $length)); return ($string != $rawString) ? $string . $append : $string; } diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 28e7d133c7..5fa817ae46 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -800,6 +800,7 @@ class baseRouter $account = isset($_SESSION['user']) ? $_SESSION['user']->account : ''; if(empty($account) and isset($_POST['account'])) $account = $_POST['account']; if(empty($account) and isset($_GET['account'])) $account = $_GET['account']; + if(empty($account)) $account = $this->cookie->za; $vision = ''; if($this->config->installed and validater::checkAccount($account)) @@ -1552,9 +1553,8 @@ class baseRouter { $fp = fopen($file2Included, 'r'); $line1 = fgets($fp); - $line2 = fgets($fp); fclose($fp); - if(strpos($line1, 'sessionFile)) return $this->sessionFile; + if(!empty($this->sessionFile)) return $this->sessionFile; + if(!preg_match('/^\w+$/', $id)) return false; $sessionID = $id; if($this->tagID) $sessionID = md5($id . $this->tagID); @@ -3470,6 +3471,7 @@ class ztSessionHandler public function read($id) { $sessFile = $this->getSessionFile($id); + if(!$sessFile) return false; if(!file_exists($sessFile)) { ($this->tagID and file_exists($this->rawFile)) ? copy($this->rawFile, $sessFile) : touch($sessFile); @@ -3490,6 +3492,8 @@ class ztSessionHandler public function write($id, $sessData) { $sessFile = $this->getSessionFile($id); + if(!$sessFile) return false; + touch($sessFile); touch($this->rawFile); if(md5_file($sessFile) == md5($sessData)) return true; diff --git a/framework/helper.class.php b/framework/helper.class.php index 27686a9be9..90a6a3676f 100644 --- a/framework/helper.class.php +++ b/framework/helper.class.php @@ -445,6 +445,7 @@ function isInModal(): bool */ function formatTime($time, $format = '') { + if(empty($time)) return ''; $time = str_replace('0000-00-00', '', $time); $time = str_replace('00:00:00', '', $time); if(trim($time) == '') return ''; diff --git a/framework/model.class.php b/framework/model.class.php index c571a7512f..be92ac09e0 100644 --- a/framework/model.class.php +++ b/framework/model.class.php @@ -122,7 +122,7 @@ class model extends baseModel if($action->extensionType == 'override') return $this->loadModel('flow')->buildActionMenu($moduleName, $action, $data, $type); - $conditions = json_decode($action->conditions); + $conditions = empty($action->conditions) ? array() : json_decode($action->conditions); if($conditions and $action->extensionType == 'extend') { if($icon != 'copy' and $methodName != 'create') $title = $action->name; diff --git a/framework/router.class.php b/framework/router.class.php index 2270c04699..6435f08172 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -509,7 +509,10 @@ class router extends baseRouter } else { - $action = $this->dbh->query("SELECT * FROM " . TABLE_WORKFLOWACTION . " WHERE `module` = '$this->moduleName' AND `action` = '$this->methodName' AND `vision` = '{$this->config->vision}'")->fetch(); + $actionQuery = "SELECT * FROM " . TABLE_WORKFLOWACTION . " WHERE `module` = '$this->moduleName' AND `action` = '$this->methodName'"; + if(isset($this->app->user) && $this->app->user->account != 'guest') $actionQuery .= " AND `vision` = '{$this->config->vision}'"; + + $action = $this->dbh->query($actionQuery)->fetch(); if(zget($action, 'extensionType') == 'override') { $this->rawModule = $this->moduleName; @@ -692,4 +695,24 @@ class router extends baseRouter $this->rawParams = parent::mergeParams($defaultParams, $passedParams); return $this->rawParams; } + + /** + * 加载一个模块: + * + * Load a module. + * + * @access public + * @return bool|object if the module object of die. + */ + public function loadModule() + { + /* 不能直接请求基类的方法 Cannot call methods of base control class. */ + if(method_exists('Control', $this->methodName)) + { + echo 'Cannot call methods of base control class.'; + return false; + } + + return parent::loadModule(); + } } diff --git a/lib/base/dao/dao.class.php b/lib/base/dao/dao.class.php index c973b11be4..1edae05c68 100644 --- a/lib/base/dao/dao.class.php +++ b/lib/base/dao/dao.class.php @@ -1925,7 +1925,7 @@ class baseSQL } else { - $condition = ctype_alnum((string)$arg1) ? '`' . $arg1 . '`' : $arg1; + $condition = (is_string($arg1) && ctype_alnum($arg1)) ? '`' . $arg1 . '`' : $arg1; } if(!$this->inMark) $this->sql .= ' ' . DAO::WHERE ." $condition "; @@ -1944,7 +1944,7 @@ class baseSQL public function andWhere($condition, $addMark = false) { if($this->inCondition and !$this->conditionIsTrue) return $this; - if(ctype_alnum($condition)) $condition = '`' . $condition . '`'; + if(is_string($condition) && ctype_alnum($condition)) $condition = '`' . $condition . '`'; $mark = $addMark ? '(' : ''; $this->sql .= " AND {$mark} $condition "; @@ -1962,7 +1962,7 @@ class baseSQL public function orWhere($condition) { if($this->inCondition and !$this->conditionIsTrue) return $this; - if(ctype_alnum($condition)) $condition = '`' . $condition . '`'; + if(is_string($condition) && ctype_alnum($condition)) $condition = '`' . $condition . '`'; $this->sql .= " OR $condition "; return $this; diff --git a/lib/base/front/front.class.php b/lib/base/front/front.class.php index 7e1d449c43..3ff343f896 100644 --- a/lib/base/front/front.class.php +++ b/lib/base/front/front.class.php @@ -1310,12 +1310,12 @@ EOT; elseif(is_bool($value)) { $value = $value ? 'true' : 'false'; - $js .= "{$prefix}{$key} = $value;"; + $js .= "{$prefix}{$key} = $value;"; } else { - $value = addslashes($value); - $js .= "{$prefix}{$key} = '{$value}';"; + $value = empty($value) ? '' : addslashes($value); + $js .= "{$prefix}{$key} = '{$value}';"; } $js .= static::end($newline = false); echo $js; diff --git a/lib/dbh/dbh.class.php b/lib/dbh/dbh.class.php index 98a106af74..c93fead40b 100644 --- a/lib/dbh/dbh.class.php +++ b/lib/dbh/dbh.class.php @@ -256,10 +256,14 @@ class dbh public function formatDmSQL($sql) { $sql = trim($sql); - /* '\\\\n' try to compatible screen json like \u0232\\nBug. */ - $sql = str_replace(array('\\\\n', '\r', '\n'), ' ', $sql); $sql = $this->formatFunction($sql); + if(defined('IN_UPGRADE')) + { + $sql = $this->processDmChangeColumn($sql); + $sql = $this->processDmTableIndex($sql); + } + $actionPos = strpos($sql, ' '); $action = strtoupper(substr($sql, 0, $actionPos)); $setPos = 0; @@ -313,7 +317,7 @@ class dbh } elseif(stripos($sql, 'CREATE UNIQUE INDEX') === 0 || stripos($sql, 'CREATE INDEX') === 0) { - preg_match('/ON\ +[0-9a-zA-Z\_\.]+\`([0-9a-zA-Z\_]+)\`/', $sql, $matches); + preg_match('/ON\ +`([0-9a-zA-Z_]+)`/', $sql, $matches); $tableName = str_replace($this->config->prefix, '', $matches); $sql = preg_replace('/INDEX\ +\`/', 'INDEX `' . strtolower($tableName[1]) . '_', $sql); @@ -372,6 +376,32 @@ class dbh } } + /** + * Format dm table index. + * + * @param string $sql + * @access public + * @return string + */ + public function processDmTableIndex($sql) + { + if(strpos($sql, 'DROP INDEX') === FALSE) return $sql; + return preg_replace('/DROP INDEX `(\w+)` ON `zt_(\w+)`/', 'DROP INDEX IF EXISTS `$2_$1`', $sql); + } + + /** + * Format dm change column. + * + * @param string $sql + * @access public + * @return string + */ + public function processDmChangeColumn($sql) + { + if(strpos($sql, 'CHANGE COLUMN') === FALSE) return $sql; + return preg_replace('/ALTER TABLE `([^`]+)` CHANGE COLUMN `([^`]+)` `([^`]+)` (\w+)/', 'ALTER TABLE `$1` RENAME COLUMN `$2` TO `$3`;', $sql); + } + /** * Format function. * @@ -469,7 +499,16 @@ class dbh foreach($datetimeMatch[0] as $match) $sql = str_replace($match, $match . '(0)', $sql); } - if(strpos($sql, "ALTER TABLE") !== false) $sql = $this->convertAlterTableSql($sql); + if(strpos($sql, "ALTER TABLE") === 0) + { + $sql = $this->convertAlterTableSql($sql); + if(stripos($sql, "ADD") !== false) + { + // 使用正则表达式匹配并去除 "AFTER" 关键字及其后面的内容 + $pattern = "/\s+AFTER\s+.+$/i"; + $sql = preg_replace($pattern, "", $sql); + } + } } return $sql; @@ -486,10 +525,11 @@ class dbh { // 解析REPLACE INTO语句,提取出表名、字段和值 $matches = []; - preg_match('/^REPLACE\s+INTO\s+`?([\w_]+)`?\s*\((.*)\)\s+VALUES\s*\((.*?)\)\s*$/i', $sql, $matches); + preg_match('/^REPLACE\s+INTO\s+`?([\w_]+)`?\s*\((.*)\)\s+VALUES\s*\(([^()]+)\)\s*$/i', $sql, $matches); + if(empty($matches)) return $sql; $table_name = $matches[1]; - $columns = array_map('trim', explode(',', $matches[2])); - $values = array_map('trim', explode(', ', $matches[3])); + $columns = array_map('trim', explode(',', $matches[2])); + $values = array_map('trim', explode(', ', $matches[3])); if($table_name == '' or $columns == '' or $values == '') return $sql; // 构造SELECT语句,查询数据是否存在 diff --git a/lib/mobile/mobile.class.php b/lib/mobile/mobile.class.php index a5ef550e72..f7f6d5eeff 100644 --- a/lib/mobile/mobile.class.php +++ b/lib/mobile/mobile.class.php @@ -218,7 +218,7 @@ class mobile 'iPad' => 'iPad|iPad.*Mobile', // Removed |^.*Android.*Nexus(?!(?:Mobile).)*$ // @see #442 - 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)', + 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)', 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone. // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI)\b', @@ -756,11 +756,11 @@ class mobile return self::$uaHttpHeaders; } - + /** * Set CloudFront headers * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device - * + * * @param array $cfHeaders List of HTTP headers * * @return boolean If there were CloudFront headers to be set @@ -1213,7 +1213,7 @@ class mobile */ public function match($regex, $userAgent = null) { - $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); + $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : ($this->userAgent ? $this->userAgent : '')), $matches); // If positive match is found, store the results for debug. if ($match) { $this->matchingRegex = $regex; diff --git a/lib/pager/pager.class.php b/lib/pager/pager.class.php index a3cfd2f4ba..04a87aa01b 100644 --- a/lib/pager/pager.class.php +++ b/lib/pager/pager.class.php @@ -20,6 +20,28 @@ helper::import(dirname(dirname(__FILE__)) . '/base/pager/pager.class.php'); */ class pager extends basePager { + /** + * 分页查询起始偏移量。 + * offset + * + * @var float + * @access public + */ + public $offset = 0; + + /** + * 设置分页查询起始偏移量。 + * Set offset of paging query. + * + * @param int $offset + * @access public + * @return void + */ + public function setOffset($offset) + { + $this->offset = $offset; + } + /** * 设置模块名。 * Set the $moduleName property. @@ -85,6 +107,20 @@ class pager extends basePager if($this->app->isFlow) unset($this->params['module']); } + /** + * 创建limit语句。 + * Create the limit string. + * + * @access public + * @return string + */ + public function limit() + { + $limit = ''; + if($this->pageTotal > 1) $limit = ' lImiT ' . ($this->offset + ($this->pageID - 1) * $this->recPerPage) . ", $this->recPerPage"; + return $limit; + } + /** * Show pager. * diff --git a/lib/zdb/zdb.class.php b/lib/zdb/zdb.class.php index 02ffd734b4..7837847b43 100644 --- a/lib/zdb/zdb.class.php +++ b/lib/zdb/zdb.class.php @@ -257,7 +257,7 @@ class zdb /* Create a value sql. */ $value = array_values($row); - $value = array_map('addslashes', $value); + $value = $this->addslashes($value); $value = join("','", $value); $value = "'" . $value . "'"; $sql = "INSERT INTO `$table`($keys) VALUES (" . $value . ");\n"; @@ -367,4 +367,31 @@ class zdb return $return; } } + + + /** + * Add slashes for string or string list. + * + * @param string|string[] $data + * @return string|string[] + */ + public function addslashes($data) + { + if(is_string($data)) return addslashes($data); + if((function_exists('array_is_list') && array_is_list($data)) || (is_array($data) && array_keys($data) === array_keys(array_keys($data)))) + { + $result = array(); + foreach($data as $item) + { + if(is_string($item)) + $result[] = addslashes($item); + elseif(is_null($item)) + $result[] = null; + else + $result[] = $item; + } + return $result; + } + return $data; + } } diff --git a/misc/ci/basic-build.yaml b/misc/ci/basic-build.yaml new file mode 100644 index 0000000000..8e227be893 --- /dev/null +++ b/misc/ci/basic-build.yaml @@ -0,0 +1,21 @@ +spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: easycorp.io/cpu-spec + operator: Gt + values: + - "7" + containers: + - name: docker + volumeMounts: + - mountPath: /var/run/docker.sock + name: docker-socket + volumes: + - name: docker-socket + hostPath: + path: /var/run/docker.sock + type: Socket diff --git a/misc/ci/normal.yaml b/misc/ci/normal.yaml new file mode 100644 index 0000000000..ac8dc8a303 --- /dev/null +++ b/misc/ci/normal.yaml @@ -0,0 +1,17 @@ +spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: easycorp.io/cpu-spec + operator: Lt + values: + - "8" + - weight: 50 + preference: + matchExpressions: + - key: easycorp.io/cpu-spec + operator: DoesNotExist + diff --git a/misc/ci/publish-image.yaml b/misc/ci/publish-image.yaml new file mode 100644 index 0000000000..8e227be893 --- /dev/null +++ b/misc/ci/publish-image.yaml @@ -0,0 +1,21 @@ +spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: easycorp.io/cpu-spec + operator: Gt + values: + - "7" + containers: + - name: docker + volumeMounts: + - mountPath: /var/run/docker.sock + name: docker-socket + volumes: + - name: docker-socket + hostPath: + path: /var/run/docker.sock + type: Socket diff --git a/misc/ci/publish-zbox.yaml b/misc/ci/publish-zbox.yaml new file mode 100644 index 0000000000..131938b2da --- /dev/null +++ b/misc/ci/publish-zbox.yaml @@ -0,0 +1,36 @@ +metadata: + labels: + ci-cpu-level: high +spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: easycorp.io/cpu-spec + operator: Gt + values: + - "7" + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: ci-cpu-level + operator: In + values: + - high + topologyKey: "kubernetes.io/hostname" + containers: + - name: docker + image: docker:23.0.6-dind-alpine3.17 + command: ["sleep"] + args: ["99d"] + volumeMounts: + - mountPath: /var/run/docker.sock + name: docker-socket + volumes: + - name: docker-socket + hostPath: + path: /var/run/docker.sock + type: Socket diff --git a/misc/downgrade.sh b/misc/downgrade.sh new file mode 100755 index 0000000000..6be6b6f975 --- /dev/null +++ b/misc/downgrade.sh @@ -0,0 +1,319 @@ +#!/bin/bash +set -e + +phpVer="7.4" +installRector="false" +codeRootDir=$PWD +composerDir="$(dirname "$(realpath "$0")")" +outputDir="$PWD/build" + +helper() { + cat << EOF +Usage: $0 -p version dirs... +Arguments: + -p php版本号,如 7.4 + 可以指定多个版本,用逗号分隔,如 7.4,7.0,5.4 + -i 在 misc 目录执行 composer install, 安装 rector + -r 指定要降级的代码根目录, 默认为当前目录 + -o 降级补丁包输出目录 +EOF +} + +# 处理命令行参数, 获取要降级的目录 +[ $# -eq 0 ] && helper +while getopts "ir:p:o:" opt; do + case $opt in + "p") + phpVer=$OPTARG + ;; + "r") + codeRootDir=$(realpath "$OPTARG") + ;; + "i") + installRector="true" + ;; + "o") + outputDir=$OPTARG + ;; + *) + helper + exit 1 + ;; + esac +done + +shift $((OPTIND - 1)) + +if [ "$#" -eq 0 ];then + echo "need at least one file or directory" + exit 2 +fi + +# 处理降级目录路径 +downGradeDirs=() +for d in "$@" +do + targetDir="$codeRootDir/$d" + test -d "$targetDir" || (echo "$d ($targetDir) is not a directory, abort."; exit 2) + downGradeDirs+=("${targetDir}") +done +# 结束命令行参数处理 + +excludeRegexList=( +module/holiday/ext/ +lib/purifier/HTMLPurifier.autoload-legacy.php +lib/sqlparser/vendor/ +) + +################################## +# 在非容器环境,返回 cpu 核数减一 +# 在容器环境,如未对 cpu 做限制,返回宿主机核数减一,否则按实际限制的 cpu 核数 +################################## +quotaFile="/sys/fs/cgroup/cpu.max" +getCpuQuota() { + if [ -f $quotaFile ];then + quota=$(cut -d ' ' -f 1 $quotaFile) + period=$(cut -d ' ' -f 2 $quotaFile) + if [ "$quota" = "max" ];then + echo $(($(nproc)-1)) + return + else + echo $((quota/period)) + return + fi + else + echo $(($(nproc)-1)) + return + fi +} + +# 检查要降级版本的 php 命令行是否存在,将用于校验语法 +existsPHPCli() { + phpVersion="$1" + which php"${phpVersion}" >/dev/null +} + +######################################### +# 执行降级命令 +# 参数: +# 1. 降级版本, 如 7.4, 7.0 +# 2. 关闭缓存 (可选项), nocache +# 3. 并行执行 (可选项), parallel +# * 降级目录列表 +# 说明 +# 1. 由于降级命令有可能会发生异常,故设置了重试, +# 在函数运行时,缓存目录不变,故重试时会减少部分时间 +# 2. 并行执行的个数,根据 cpu 最大核数减一处理,如果是容器环境,按分配的核数 +# 并行执行需要安装 parallel 包 +########################################## +maxRectorRetries=3 +downGradeDir() { + rectorCmd="rector" + + export PHP_VERSION=${1/./} + shift + + if [ "$1" = "nocache" ];then + rectorCmd="rector-nocache" + shift + fi + + withParallel="false" + if [ "$1" = "parallel" ];then + withParallel="true" + shift + fi + + downDirs=("$@") + echo "set PHP_VERSION to $PHP_VERSION" + echo "do downgrade on dir ${downDirs[*]}" + + lastDir=$PWD + cd "$composerDir" || exit + rectorResult=0 + + set +e + for ((i=0;i /tmp/changedFiles + + lastDir=$PWD + cd "$archiveDir" || exit 1 + mkdir -p build/ + test -d "$outputDir" || mkdir -pv "$outputDir" + + downPatchFile="${outputDir}/downgrade-php$phpVersion.tar.gz" + tar zcf "$downPatchFile" --files-from=/tmp/changedFiles + echo "Release downgrade patch file: $downPatchFile" + + cd "$lastDir" +} + +# 正则匹配要排除的文件,跳过校验 +matchExclude() { + filePath="$1" + for reg in "${excludeRegexList[@]}" + do + if [[ "$filePath" =~ $reg ]];then + echo "true" + return + fi + done + echo "false" +} + +############################# +# 对单个 php 版本降级的主函数 +# 参数: +# 1. php 版本 +# 2. 起始时间, 用于比较降级后变更的文件 +# * 降级目录列表 +# 步骤: +# 设置临时缓存目录,执行降级 +# 对降级目录里所有 php 文件校验语法,确保通过 +# 打包变更文件 +######################################## +DownGrade() { + phpVersion="$1" + pointTime="$2" + shift 2 + + downDirs=("$@") + RECTOR_CACHE_DIR=$(mktemp -d) + export RECTOR_CACHE_DIR + + startTime="$(date +%s)" + + if which parallel >/dev/null ;then + downGradeDir "$phpVersion" parallel "${downDirs[@]}" + else + for d in "${downDirs[@]}" + do + downGradeDir "$phpVersion" "$d" + done + fi + + for f in $(find "${downGradeDirs[@]}" -type f -name '*.php') + do + shouldIgnore=$(matchExclude "$f") + if [ "$shouldIgnore" = "true" ];then + echo "$f is excluded" + continue + fi + ensureSyntaxPassed "$phpVersion" "$f" + done + + archiveChangedFiles "$phpVersion" "$pointTime" "$codeRootDir" + test -d "$RECTOR_CACHE_DIR" && rm -rf "$RECTOR_CACHE_DIR" + + endTime="$(date +%s)" + echo "downgrade to ${phpVersion} cost $((endTime-startTime)) seconds" + echo +} + +# 设置脚本启动时间 +startPointTime=$(date +'%Y-%m-%d %H:%M:%S') + +# 执行 composer 组件安装 +if [ "$installRector" = "true" ];then + lastDir=$PWD + cd "$composerDir" || exit 1 + + composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ + composer install + + cd "$lastDir" || exit 1 +fi + +# 检查 -p 参数, 执行多版本降级或是单版本降级 +if [[ "$phpVer" =~ ^.*, ]];then + IFS=',' read -r -a verList <<< "$phpVer" + for v in "${verList[@]}" + do + existsPHPCli "$v" || (echo "php${v} is not found, abort."; exit 3) + done + + for v in "${verList[@]}" + do + DownGrade "$v" "$startPointTime" "${downGradeDirs[@]}" + done +else + existsPHPCli "$phpVer" || (echo "php${phpVer} is not found, abort."; exit 3) + DownGrade "$phpVer" "$startPointTime" "${downGradeDirs[@]}" +fi + + + +# syntaxCheck "$phpVer" /code/module/pipeline/model.php +# downGradeDir "$phpVer" "${downGradeDirs[@]}" +# archiveChangedFiles "$t" "$codeRootDir" \ No newline at end of file diff --git a/misc/gen_build_report.sh b/misc/gen_build_report.sh index ab41b24784..8a76ae037f 100755 --- a/misc/gen_build_report.sh +++ b/misc/gen_build_report.sh @@ -14,14 +14,40 @@ outputLine() { echo "$1" } -outputLine "构建日期 **$finishTime**" +renderGitWebUrl() { + if [ -z "$GIT_URL" ];then + return + fi + + echo $GIT_URL | sed -r -e 's/^.+@/https:\/\//' -e 's/\.git$//' +} + +renderTagUrl() { + GIT_WEB_BASE=$(renderGitWebUrl) + if [ -n "$GIT_WEB_BASE" ];then + echo "[${TAG_NAME}](${GIT_WEB_BASE}/src/tag/${TAG_NAME})" + else + echo ${TAG_NAME} + fi +} + +renderCommitUrl() { + GIT_WEB_BASE=$(renderGitWebUrl) + if [ -n "$GIT_WEB_BASE" ];then + echo "[${GIT_COMMIT:0:7}](${GIT_WEB_BASE}/commit/${GIT_COMMIT}) ([提交历史](${GIT_WEB_BASE}/commits/tag/${TAG_NAME}))" + else + echo ${GIT_COMMIT:0:7} + fi +} + +outputLine "完成时间 **$finishTime**" blankLine outputLine "#### Git 信息" -outputLine "* 触发 Tag: $TAG_NAME" +outputLine "* 触发 Tag: $(renderTagUrl)" -outputLine "* CommitId: ${GIT_COMMIT:0:7}" +outputLine "* CommitId: $(renderCommitUrl)" outputLine "* 触发人: ${GIT_TAGGER_NAME}" @@ -32,30 +58,30 @@ blankLine subGroupPath=`echo $GIT_TAG_BUILD_GROUP | sed 's/\./\//'` outputLine "#### 下载地址" + outputLine "##### 开源版" outputFrame "[${PMS_VERSION} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/pmsPack/$subGroupPath/ZenTaoPMS/${PMS_VERSION}/)" outputFrame "\t\t" outputLine "[${PMS_VERSION} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/pmsPack/$subGroupPath/ZenTaoALM/${PMS_VERSION}/)" outputLine "##### 企业版" - outputFrame "[${BIZ_VERSION:3} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoPMS/${BIZ_VERSION}/)" outputFrame "\t\t" -outputLine "[${BIZ_VERSION:3} 升级包 (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoPMS.update/${BIZ_VERSION}/)" +outputLine "[${BIZ_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoALM/${BIZ_VERSION}/)" -outputFrame "[${BIZ_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoALM/${BIZ_VERSION}/)" -outputFrame "\t" -outputLine "[${BIZ_VERSION:3} 升级包 (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/bizPack/$subGroupPath/ZenTaoALM.update/${BIZ_VERSION}/)" outputLine "##### 旗舰版" - outputFrame "[${MAX_VERSION:3} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoPMS/${MAX_VERSION}/)" outputFrame "\t\t" -outputLine "[${MAX_VERSION:3} 升级包 (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoPMS.update/${MAX_VERSION}/)" +outputLine "[${MAX_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoALM/${MAX_VERSION}/)" -outputFrame "[${MAX_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoALM/${MAX_VERSION}/)" -outputFrame "\t" -outputLine "[${MAX_VERSION:3} 升级包 (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/maxPack/$subGroupPath/ZenTaoALM.update/${MAX_VERSION}/)" + +if [ -n "$IPD_VERSION" ];then + outputLine "##### IPD版" + outputFrame "[${IPD_VERSION:3} (中文)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/ipdPack/$subGroupPath/ZenTaoPMS/${IPD_VERSION}/)" + outputFrame "\t\t" + outputLine "[${IPD_VERSION:3} (English)](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/service/rest/repository/browse/${ARTIFACT_REPOSITORY}/zentao/ipdPack/$subGroupPath/ZenTaoALM/${IPD_VERSION}/)" +fi outputLine "##### 历史版本" -outputLine "[查看历史版本](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/#browse/browse:easycorp-snapshot)" +outputLine "[查看历史版本](${ARTIFACT_PROTOCOL}://${ARTIFACT_HOST}/#browse/browse:${ARTIFACT_REPOSITORY})" diff --git a/misc/parse_tag.sh b/misc/parse_tag.sh index 17939fdaf3..eeda8c2095 100755 --- a/misc/parse_tag.sh +++ b/misc/parse_tag.sh @@ -5,8 +5,6 @@ FIELD=$2 frameCount=`echo $TAG| grep -o '_' | wc -l` -build_date=${TAG##*_} - build_id='' if [ $frameCount -eq 3 ];then @@ -14,19 +12,20 @@ if [ $frameCount -eq 3 ];then fi case $FIELD in - date) - # must 8 numbers - echo $build_date | egrep -E '^[0-9]{8}$' - ;; - id) - echo $build_id - ;; group) - if [ -n "$build_id" ];then - echo "$build_date.$build_id" - else - echo "$build_date.release" - fi + case $frameCount in + 1) + echo release + ;; + *) + build_date=${TAG##*_} + if [ -n "$build_id" ];then + echo "$build_date.$build_id" + else + echo "$build_date.release" + fi + ;; + esac ;; type) if [ -n "$build_id" ];then diff --git a/module/action/config.php b/module/action/config.php index 981314a5fa..bd5a661cf5 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -60,6 +60,7 @@ $config->action->objectNameFields['instance'] = 'name'; $config->action->objectNameFields['space'] = 'name'; $config->action->objectNameFields['solution'] = 'name'; $config->action->objectNameFields['artifactrepo'] = 'name'; +$config->action->objectNameFields['prompt'] = 'name'; $config->action->commonImgSize = 870; @@ -77,7 +78,7 @@ $config->action->majorList['doc'] = array('releaseddoc', 'collected'); $config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan,gapanalysis,researchplan,researchreport,'; $config->action->needGetRelateField = ',branch,story,productplan,release,task,build,bug,testcase,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,researchplan,researchreport,meeting,kanbanlane,kanbancolumn,module,review,'; $config->action->noLinkModules = ',doclib,module,webhook,gitlab,instance,gitea,gogs,sonarqube,pipeline,jenkins,kanban,kanbanspace,kanbancolumn,kanbanlane,kanbanregion,kanbancard,execution,project,traincategory,apistruct,program,product,user,entry,repo,'; -$config->action->ignoreObjectType4Dynamic = 'kanbanregion,kanbanlane,kanbancolumn'; +$config->action->ignoreObjectType4Dynamic = 'kanbanregion,kanbanlane,kanbancolumn,disconnectxuanxuan,reconnectxuanxuan,loginxuanxuan,logoutxuanxuan,editmr,removemr'; $config->action->preferredTypeNum = 10; @@ -100,4 +101,5 @@ $config->trash->search['params']['objectID'] = array('operator' => 'include', $config->trash->search['params']['actor'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); $config->trash->search['params']['date'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); -$config->action->newPageModule = array('repo', 'mr', 'host', 'account', 'serverroom', 'instance', 'store', 'space', 'deploy', 'domain', 'service', 'gitlab', 'gitea', 'gogs', 'sonarqube', 'jenkins'); +$config->action->newPageModule = array('repo', 'mr', 'host', 'account', 'serverroom', 'instance', 'store', 'space', 'deploy', 'domain', 'service', 'gitlab', 'gitea', 'gogs', 'sonarqube', 'jenkins'); +$config->action->latestDateList = array('today', 'yesterday', 'thisWeek', 'lastWeek', 'thisMonth'); diff --git a/module/action/control.php b/module/action/control.php index 5da7a634db..f0608eb6d4 100755 --- a/module/action/control.php +++ b/module/action/control.php @@ -461,4 +461,15 @@ class action extends control return true; } + + /** + * Clear dynamic records older than one month. + * + * @access public + * @return void + */ + public function cleanActions() + { + $this->action->cleanActions(); + } } diff --git a/module/action/lang/de.php b/module/action/lang/de.php index 96b3a3b584..1c19277b07 100644 --- a/module/action/lang/de.php +++ b/module/action/lang/de.php @@ -165,6 +165,7 @@ $lang->action->objectTypes['scene'] = 'Scene'; $lang->action->objectTypes['serverroom'] = 'IDC'; $lang->action->objectTypes['account'] = 'Account'; $lang->action->objectTypes['host'] = 'Host'; +$lang->action->objectTypes['prompt'] = 'Prompt'; /* Used to describe operation history. */ $lang->action->desc = new stdclass(); @@ -289,6 +290,10 @@ $lang->action->desc->releaseddoc = '$date, 由 $actor released $lang->action->desc->collected = '$date, 由 $actor collected $extra。' . "\n"; $lang->action->desc->uncollected = '$date, 由 $actor uncollected $extra。' . "\n"; +/* AI prompts related actions. */ +$lang->action->desc->published = '$date, published by $actor.' . "\n"; +$lang->action->desc->unpublished = '$date, unpublished by $actor.' . "\n"; + /* 用来描述应用的历史操作记录。*/ $lang->action->desc->install = '$date, installed by $actor.' . "\n"; $lang->action->desc->uninstall = '$date, uninstalled by $actor.' . "\n"; @@ -497,6 +502,9 @@ $lang->action->label->uncollected = 'uncollected'; $lang->action->label->online = 'online'; $lang->action->label->offline = 'offline'; $lang->action->label->linkhost = 'link hosts to'; +$lang->action->label->published = 'Published'; +$lang->action->label->unpublished = 'Unpublished'; +$lang->action->label->prompt = 'Prompt'; /* Dynamic information is grouped by object. */ $lang->action->dynamicAction = new stdclass; @@ -794,6 +802,11 @@ $lang->action->dynamicAction->repo['edited'] = 'Edit Repo'; $lang->action->dynamicAction->repo['deleted'] = 'Delete Repo'; $lang->action->dynamicAction->repo['undeleted'] = 'Undelete Repo'; +$lang->action->dynamicAction->ai['created'] = 'Create prompt'; +$lang->action->dynamicAction->ai['edited'] = 'Edited prompt'; +$lang->action->dynamicAction->ai['published'] = 'Published prompt'; +$lang->action->dynamicAction->ai['unpublished'] = 'Unpublished prompt'; + /* Generate the corresponding object link. */ $lang->action->label->product = $lang->productCommon . '|product|view|productID=%s'; $lang->action->label->productplan = 'Plan|productplan|view|productID=%s'; @@ -835,6 +848,7 @@ $lang->action->label->stage = 'Stage|stage|browse|'; $lang->action->label->module = 'Module|tree|browse|productid=%s&type=story¤tModuleID=0&branch=all'; $lang->action->label->ticket = 'Ticket|ticket|view|id=%s'; $lang->action->label->chartgroup = 'Group'; +$lang->action->label->prompt = 'Prompt|ai|promptview|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/en.php b/module/action/lang/en.php index ad307b28f8..e109fbd236 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -169,7 +169,7 @@ $lang->action->objectTypes['deploy'] = 'Deploy'; $lang->action->objectTypes['service'] = 'Service'; $lang->action->objectTypes['domain'] = 'Domain'; $lang->action->objectTypes['artifactrepo'] = 'Artifact Repo'; - +$lang->action->objectTypes['prompt'] = 'Prompt'; /* Used to describe operation history. */ $lang->action->desc = new stdclass(); @@ -295,6 +295,10 @@ $lang->action->desc->releaseddoc = '$date, 由 $actor released $lang->action->desc->collected = '$date, 由 $actor collected $extra。' . "\n"; $lang->action->desc->uncollected = '$date, 由 $actor uncollected $extra。' . "\n"; +/* AI prompts related actions. */ +$lang->action->desc->published = '$date, published by $actor.' . "\n"; +$lang->action->desc->unpublished = '$date, unpublished by $actor.' . "\n"; + /* 用来描述应用的历史操作记录。*/ $lang->action->desc->install = '$date, installed by $actor.' . "\n"; $lang->action->desc->uninstall = '$date, uninstalled by $actor.' . "\n"; @@ -503,7 +507,9 @@ $lang->action->label->uncollected = 'uncollected'; $lang->action->label->online = 'online'; $lang->action->label->offline = 'offline'; $lang->action->label->linkhost = 'link hosts to'; - +$lang->action->label->published = 'Published'; +$lang->action->label->unpublished = 'Unpublished'; +$lang->action->label->prompt = 'Prompt'; /* Dynamic information is grouped by object. */ $lang->action->dynamicAction = new stdclass; @@ -801,6 +807,11 @@ $lang->action->dynamicAction->repo['edited'] = 'Edit Repo'; $lang->action->dynamicAction->repo['deleted'] = 'Delete Repo'; $lang->action->dynamicAction->repo['undeleted'] = 'Undelete Repo'; +$lang->action->dynamicAction->ai['created'] = 'Create prompt'; +$lang->action->dynamicAction->ai['edited'] = 'Edited prompt'; +$lang->action->dynamicAction->ai['published'] = 'Published prompt'; +$lang->action->dynamicAction->ai['unpublished'] = 'Unpublished prompt'; + /* Generate the corresponding object link. */ $lang->action->label->product = $lang->productCommon . '|product|view|productID=%s'; $lang->action->label->productplan = 'Plan|productplan|view|productID=%s'; @@ -850,6 +861,7 @@ $lang->action->label->deploy = 'Deploy|deploy|view|id=%s'; $lang->action->label->domian = 'Domain|domian|view|id=%s'; $lang->action->label->service = 'Service|service|view|id=%s'; $lang->action->label->artifactrepo = 'Artifact Repo|artifactrepo|browse|'; +$lang->action->label->prompt = 'Prompt|ai|promptview|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php index 572c7c1c4e..6a66278e48 100644 --- a/module/action/lang/fr.php +++ b/module/action/lang/fr.php @@ -162,6 +162,7 @@ $lang->action->objectTypes['repo'] = 'Repo'; $lang->action->objectTypes['dataview'] = 'Data View'; $lang->action->objectTypes['privlang'] = 'Priv'; $lang->action->objectTypes['scene'] = 'Scene'; +$lang->action->objectTypes['prompt'] = 'Prompt'; /* Used to describe operation history. */ $lang->action->desc = new stdclass(); @@ -311,6 +312,10 @@ $lang->action->desc->autobackup = '$date, backed up of system' . "\ $lang->action->desc->autorestore = '$date, restored by system.' . "\n"; $lang->action->desc->deleteexpiredbackup = '$date, deleted the expired automatic backups by system.' . "\n"; +/* AI prompts related actions. */ +$lang->action->desc->published = '$date, published by $actor.' . "\n"; +$lang->action->desc->unpublished = '$date, unpublished by $actor.' . "\n"; + /* Used to display dynamic information. */ $lang->action->label = new stdclass(); $lang->action->label->install = 'install '; @@ -494,6 +499,9 @@ $lang->action->label->saveddraft = 'save draft'; $lang->action->label->releaseddoc = 'released'; $lang->action->label->collected = 'collected'; $lang->action->label->uncollected = 'uncollected'; +$lang->action->label->published = 'Published'; +$lang->action->label->unpublished = 'Unpublished'; +$lang->action->label->prompt = 'Prompt'; /* Dynamic information is grouped by object. */ $lang->action->dynamicAction = new stdclass(); @@ -791,6 +799,11 @@ $lang->action->dynamicAction->repo['edited'] = 'Edit Repo'; $lang->action->dynamicAction->repo['deleted'] = 'Delete Repo'; $lang->action->dynamicAction->repo['undeleted'] = 'Undelete Repo'; +$lang->action->dynamicAction->ai['created'] = 'Create prompt'; +$lang->action->dynamicAction->ai['edited'] = 'Edited prompt'; +$lang->action->dynamicAction->ai['published'] = 'Published prompt'; +$lang->action->dynamicAction->ai['unpublished'] = 'Unpublished prompt'; + /* Generate the corresponding object link. */ $lang->action->label->product = $lang->productCommon . '|product|view|productID=%s'; $lang->action->label->productplan = 'Plan|productplan|view|productID=%s'; @@ -832,6 +845,7 @@ $lang->action->label->stage = 'Stage|stage|browse|'; $lang->action->label->module = 'Module|tree|browse|productid=%s&type=story¤tModuleID=0&branch=all'; $lang->action->label->ticket = 'Ticket|ticket|view|id=%s'; $lang->action->label->chartgroup = 'Group'; +$lang->action->label->prompt = 'Prompt|ai|promptview|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index ae81795a4f..e1c74f9209 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -169,6 +169,7 @@ $lang->action->objectTypes['deploy'] = '发布'; $lang->action->objectTypes['service'] = '服务'; $lang->action->objectTypes['domain'] = '域名'; $lang->action->objectTypes['artifactrepo'] = '制品库'; +$lang->action->objectTypes['prompt'] = '提词'; /* 用来描述操作历史记录。*/ $lang->action->desc = new stdclass(); @@ -293,6 +294,10 @@ $lang->action->desc->releaseddoc = '$date, 由 $actor 发布 action->desc->collected = '$date, 由 $actor 收藏 $extra。' . "\n"; $lang->action->desc->uncollected = '$date, 由 $actor 取消收藏 $extra。' . "\n"; +/* AI 提词历史操作记录。 */ +$lang->action->desc->published = '$date, 由 $actor 发布。' . "\n"; +$lang->action->desc->unpublished = '$date, 由 $actor 下架。' . "\n"; + /* 用来描述应用的历史操作记录。*/ $lang->action->desc->install = '$date, 由 $actor 安装。' . "\n"; $lang->action->desc->uninstall = '$date, 由 $actor 删除。' . "\n"; @@ -499,6 +504,9 @@ $lang->action->label->uncollected = '取消收藏了'; $lang->action->label->online = '上架了'; $lang->action->label->offline = '下架了'; $lang->action->label->linkhost = '主机关联到'; +$lang->action->label->published = '发布了'; +$lang->action->label->unpublished = '下架了'; +$lang->action->label->prompt = '提词'; /* 动态信息按照对象分组 */ $lang->action->dynamicAction = new stdclass(); @@ -796,6 +804,11 @@ $lang->action->dynamicAction->repo['edited'] = '编辑代码库'; $lang->action->dynamicAction->repo['deleted'] = '删除代码库'; $lang->action->dynamicAction->repo['undeleted'] = '还原代码库'; +$lang->action->dynamicAction->ai['created'] = '创建提词'; +$lang->action->dynamicAction->ai['edited'] = '编辑提词'; +$lang->action->dynamicAction->ai['published'] = '发布提词'; +$lang->action->dynamicAction->ai['unpublished'] = '下架提词'; + /* 用来生成相应对象的链接。*/ $lang->action->label->product = $lang->productCommon . '|product|view|productID=%s'; $lang->action->label->productplan = "计划|productplan|view|productID=%s"; @@ -845,6 +858,7 @@ $lang->action->label->deploy = '上线|deploy|view|id=%s'; $lang->action->label->domian = '域名|domian|view|id=%s'; $lang->action->label->service = '服务|service|view|id=%s'; $lang->action->label->artifactrepo = '制品库|artifactrepo|browse|'; +$lang->action->label->prompt = '提词|ai|promptview|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/model.php b/module/action/model.php index e2067ecc3c..185df24ee8 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -71,6 +71,18 @@ class actionModel extends model $this->dao->insert(TABLE_ACTION)->data($action)->autoCheck()->exec(); $actionID = $this->dao->lastInsertID(); + $hasRecentTable = true; + if(defined('IN_UPGRADE') and IN_UPGRADE) + { + $fromVersion = $this->loadModel('setting')->getItem('owner=system&module=common§ion=global&key=version'); + if(is_numeric($fromVersion[0]) and version_compare($fromVersion, '18.6', '<')) $hasRecentTable = false; + if(strpos($fromVersion, 'pro') !== false) $hasRecentTable = false; + if(strpos($fromVersion, 'biz') !== false and version_compare($fromVersion, 'biz8.6', '<')) $hasRecentTable = false; + if(strpos($fromVersion, 'max') !== false and version_compare($fromVersion, 'max4.6', '<')) $hasRecentTable = false; + if(strpos($fromVersion, 'ipd') !== false and version_compare($fromVersion, 'ipd1.0.1', '<')) $hasRecentTable = false; + } + if($hasRecentTable) $this->dao->insert(TABLE_ACTIONRECENT)->data($action)->autoCheck()->exec(); + if($this->post->uid) $this->file->updateObjectID($this->post->uid, $objectID, $objectType); /* Call the message notification function. */ @@ -79,6 +91,9 @@ class actionModel extends model /* Add index for global search. */ $this->saveIndex($objectType, $objectID, $actionType); + $changeFunc = 'after' . ucfirst($objectType); + if(method_exists($this, $changeFunc)) call_user_func_array(array($this, $changeFunc), array($action, $actionID)); + return $actionID; } @@ -896,6 +911,13 @@ class actionModel extends model } $this->dao->insert(TABLE_HISTORY)->data($change)->exec(); } + + if(isset($this->session->calllbackActionList[$actionID])) + { + $callbackMethod = $this->session->calllbackActionList[$actionID]; + unset($this->session->calllbackActionList[$actionID]); + if(method_exists($this, $callbackMethod)) call_user_func_array(array($this, $callbackMethod), array($actionID)); + } } /** @@ -1300,7 +1322,7 @@ class actionModel extends model * @param string $account * @param string $period * @param string $orderBy - * @param object $pager + * @param int $limit * @param string|int $productID all|int(like 123)|notzero all => include zero, notzero, greater than 0 * @param string|int $projectID same as productID * @param string|int $executionID same as productID @@ -1309,8 +1331,10 @@ class actionModel extends model * @access public * @return array */ - public function getDynamic($account = 'all', $period = 'all', $orderBy = 'date_desc', $pager = null, $productID = 'all', $projectID = 'all', $executionID = 'all', $date = '', $direction = 'next') + public function getDynamic($account = 'all', $period = 'all', $orderBy = 'date_desc', $limit = 50, $productID = 'all', $projectID = 'all', $executionID = 'all', $date = '', $direction = 'next') { + $this->cleanActions(); + /* Computer the begin and end date of a period. */ $beginAndEnd = $this->computeBeginAndEnd($period); extract($beginAndEnd); @@ -1321,34 +1345,33 @@ class actionModel extends model if(!$this->app->user->admin) { $aclViews = isset($this->app->user->rights['acls']['views']) ? $this->app->user->rights['acls']['views'] : array(); - if($productID == 'all') $authedProducts = (empty($aclViews) or (!empty($aclViews) and !empty($aclViews['product']))) ? $this->app->user->view->products : '0'; - if($projectID == 'all') $authedProjects = (empty($aclViews) or (!empty($aclViews) and !empty($aclViews['project']))) ? $this->app->user->view->projects : '0'; - if($executionID == 'all') $authedExecutions = (empty($aclViews) or (!empty($aclViews) and !empty($aclViews['execution']))) ? $this->app->user->view->sprints : '0'; - - if(empty($authedProducts)) $authedProducts = '0'; + if($productID == 'all') $grantedProducts = empty($aclViews) || !empty($aclViews['product']) ? $this->app->user->view->products : '0'; + if($projectID == 'all') $grantedProjects = empty($aclViews) || !empty($aclViews['project']) ? $this->app->user->view->projects : '0'; + if($executionID == 'all') $grantedExecutions = empty($aclViews) || !empty($aclViews['execution']) ? $this->app->user->view->sprints : '0'; + if(empty($grantedProducts)) $grantedProducts = '0'; if($productID == 'all' and $projectID == 'all') { $productCondition = ''; - foreach(explode(',', $authedProducts) as $product) $productCondition = empty($productCondition) ? "(execution = '0' and project = '0' and (product LIKE '%,$product,%'" : "$productCondition OR product LIKE '%,$product,%'"; + foreach(explode(',', $grantedProducts) as $product) $productCondition = empty($productCondition) ? "(execution = '0' and project = '0' and (product LIKE '%,$product,%'" : "$productCondition OR product LIKE '%,$product,%'"; if(!empty($productCondition)) $productCondition .= '))'; - $projectCondition = "(execution = '0' and project != '0' and project " . helper::dbIN($authedProjects) . ')'; - $executionCondition = isset($authedExecutions) ? "(execution != 0 and execution " . helper::dbIN($authedExecutions) . ')' : "(execution != 0 and execution = '$executionID')"; + $projectCondition = "(execution = '0' and project != '0' and project " . helper::dbIN($grantedProjects) . ')'; + $executionCondition = isset($grantedExecutions) ? "(execution != 0 and execution " . helper::dbIN($grantedExecutions) . ')' : "(execution != 0 and execution = '$executionID')"; } elseif($productID == 'all' and is_numeric($projectID)) { $products = $this->loadModel('product')->getProductPairsByProject($projectID); - $executions = $this->loadModel('execution')->getPairs($projectID) + array(0 => 0); + $executions = $this->loadModel('execution')->fetchPairs($projectID) + array(0 => 0); - $authedExecutions = isset($authedExecutions) ? array_intersect(array_keys($executions), explode(',', $authedExecutions)) : array_keys($executions); + $grantedExecutions = isset($grantedExecutions) ? array_intersect(array_keys($executions), explode(',', $grantedExecutions)) : array_keys($executions); $productCondition = ''; foreach(array_keys($products) as $product) $productCondition = empty($productCondition) ? "(execution = '0' and project = '0' and (product LIKE '%,$product,%'" : "$productCondition OR product LIKE '%,$product,%'"; if(!empty($productCondition)) $productCondition .= '))'; $projectCondition = "(execution = '0' and project = '$projectID')"; - $executionCondition = "(execution != '0' and execution " . helper::dbIN($authedExecutions) . ')'; + $executionCondition = "(execution != '0' and execution " . helper::dbIN($grantedExecutions) . ')'; } elseif(is_numeric($productID) and $projectID == 'all') { @@ -1356,12 +1379,12 @@ class actionModel extends model $projects = $this->product->getProjectPairsByProduct($productID); $executions = $this->product->getExecutionPairsByProduct($productID) + array(0 => 0); - $authedProjects = array_intersect(array_keys($projects), explode(',', $authedProjects)); - $authedExecutions = isset($authedExecutions) ? array_intersect(array_keys($executions), explode(',', $authedExecutions)) : array_keys($executions); + $grantedProjects = array_intersect(array_keys($projects), explode(',', $grantedProjects)); + $grantedExecutions = isset($grantedExecutions) ? array_intersect(array_keys($executions), explode(',', $grantedExecutions)) : array_keys($executions); $productCondition = "(execution = '0' and project = '0' and product like '%,$productID,%')"; - $projectCondition = "(execution = '0' and project != '0' and project " . helper::dbIN($authedProjects) . ')'; - $executionCondition = "(execution != '0' and execution " . helper::dbIN($authedExecutions) . ')'; + $projectCondition = "(execution = '0' and project != '0' and project " . helper::dbIN($grantedProjects) . ')'; + $executionCondition = "(execution != '0' and execution " . helper::dbIN($grantedExecutions) . ')'; } $condition = "((product =',0,' or product = '0' or product=',,') AND project = '0' AND execution = '0')"; @@ -1384,46 +1407,58 @@ class actionModel extends model if($this->app->getMethodName() == 'dynamic') $beginDate = $year - 1 . '-01-01'; } - $programCondition = empty($this->app->user->view->programs) ? '0' : $this->app->user->view->programs; + if(is_numeric($projectID)) + { + $openedDate = $this->dao->select('openedDate')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch('openedDate'); + $beginDate = $openedDate > $beginDate ? $openedDate : $beginDate; + } - $efforts = $this->dao->select('id')->from(TABLE_EFFORT)->where($condition)->fetchPairs(); - $efforts = !empty($efforts) ? implode(',', $efforts) : 0; + $condition = "(($condition) OR `objectType` IN ('doc', 'doclib'))"; $noMultipleExecutions = $this->dao->select('id')->from(TABLE_PROJECT)->where('multiple')->eq(0)->andWhere('type')->in('sprint,kanban')->fetchPairs('id', 'id'); - - $condition = "(`objectType` IN ('doc', 'doclib') OR ($condition)) AND `objectType` NOT IN ('program', 'effort', 'execution')"; if($noMultipleExecutions) $condition .= " OR (`objectID` NOT " . helper::dbIN($noMultipleExecutions) . " AND `objectType` = 'execution')"; + + $programCondition = empty($this->app->user->view->programs) ? '0' : $this->app->user->view->programs; $condition .= " OR (`objectID` in ($programCondition) AND `objectType` = 'program')"; + + $efforts = $this->dao->select('id')->from(TABLE_EFFORT) + ->where($condition) + ->beginIF($period != 'all') + ->beginIF(isset($begin))->andWhere('date')->gt($begin)->fi() + ->beginIF(isset($end))->andWhere('date')->lt($end)->fi() + ->fi() + ->beginIF($beginDate)->andWhere('date')->ge($beginDate)->fi() + ->fetchPairs(); + $efforts = !empty($efforts) ? implode(',', $efforts) : 0; $condition .= " OR (`objectID` in ($efforts) AND `objectType` = 'effort')"; $condition = "($condition)"; /* Get actions. */ - $actions = $this->dao->select('*')->from(TABLE_ACTION) + $actionTable = in_array($period, $this->config->action->latestDateList) ? TABLE_ACTIONRECENT : TABLE_ACTION; + + $actions = $this->dao->select('*')->from($actionTable) ->where('objectType')->notIN($this->config->action->ignoreObjectType4Dynamic) + ->beginIF($this->config->vision == 'lite')->andWhere('objectType')->notin('product')->fi() + ->beginIF($this->config->systemMode == 'light')->andWhere('objectType')->notin('program')->fi() ->andWhere('vision')->eq($this->config->vision) - ->beginIF($period != 'all')->andWhere('date')->gt($begin)->fi() - ->beginIF($period != 'all')->andWhere('date')->lt($end)->fi() + ->beginIF($period != 'all') + ->andWhere('date')->gt($begin) + ->andWhere('date')->lt($end) + ->fi() ->beginIF($date)->andWhere('date' . ($direction == 'next' ? '<' : '>') . "'{$date}'")->fi() - ->beginIF($account != 'all')->andWhere('actor')->eq($account)->fi() ->beginIF($beginDate)->andWhere('date')->ge($beginDate)->fi() + ->beginIF($account != 'all')->andWhere('actor')->eq($account)->fi() ->beginIF(is_numeric($productID))->andWhere('product')->like("%,$productID,%")->fi() - ->andWhere('1=1', true) ->beginIF(is_numeric($projectID))->andWhere('project')->eq($projectID)->fi() ->beginIF(!empty($executions))->andWhere('execution')->in(array_keys($executions))->fi() ->beginIF(is_numeric($executionID))->andWhere('execution')->eq($executionID)->fi() - ->markRight(1) - /* Types excluded from Lite. */ - ->beginIF($this->config->vision == 'lite')->andWhere('objectType')->notin('product')->fi() - ->beginIF($this->config->systemMode == 'light')->andWhere('objectType')->notin('program')->fi() ->beginIF($productID == 'notzero')->andWhere('product')->gt(0)->andWhere('product')->notlike('%,0,%')->fi() ->beginIF($projectID == 'notzero')->andWhere('project')->gt(0)->fi() ->beginIF($executionID == 'notzero')->andWhere('execution')->gt(0)->fi() ->andWhere($condition) ->beginIF($actionCondition)->andWhere("($actionCondition)")->fi() - /* Filter out client login/logout actions. */ - ->andWhere('action')->notin('disconnectxuanxuan,reconnectxuanxuan,loginxuanxuan,logoutxuanxuan,editmr,removemr') ->orderBy($orderBy) - ->page($pager) + ->limit($limit) ->fetchAll(); if(!$actions) return array(); @@ -1464,13 +1499,13 @@ class actionModel extends model * @param array $executions * @param int $queryID * @param string $orderBy - * @param object $pager + * @param int $limit * @param string $date * @param string $direction * @access public * @return array */ - public function getDynamicBySearch($products, $projects, $executions, $queryID, $orderBy = 'date_desc', $pager = null, $date = '', $direction = 'next') + public function getDynamicBySearch($products, $projects, $executions, $queryID, $orderBy = 'date_desc', $limit = 50, $date = '', $direction = 'next') { $query = $queryID ? $this->loadModel('search')->getQuery($queryID) : ''; @@ -1519,7 +1554,7 @@ class actionModel extends model if($this->config->vision == 'lite') $actionQuery .= " AND objectType != 'product'"; $actionQuery .= " AND vision = '" . $this->config->vision . "'"; - $actions = $this->getBySQL($actionQuery, $orderBy, $pager); + $actions = $this->getBySQL($actionQuery, $orderBy, $limit); $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'action'); if(!$actions) return array(); @@ -1531,11 +1566,11 @@ class actionModel extends model * * @param string $sql * @param string $orderBy - * @param object $pager + * @param int $limit * @access public * @return array */ - public function getBySQL($sql, $orderBy, $pager = null) + public function getBySQL($sql, $orderBy, $limit = 50) { $actionCondition = $this->getActionCondition(); if(is_array($actionCondition)) return array(); @@ -1544,7 +1579,7 @@ class actionModel extends model ->where($sql) ->beginIF(!empty($actionCondition))->andWhere("($actionCondition)")->fi() ->orderBy($orderBy) - ->page($pager) + ->limit($limit) ->fetchAll(); } @@ -2068,22 +2103,16 @@ class actionModel extends model $period = strtolower($period); - if($period == 'all') return array('begin' => '1970-1-1', 'end' => '2109-1-1'); - if($period == 'today') return array('begin' => $today, 'end' => $tomorrow); - if($period == 'yesterday') return array('begin' => $yesterday, 'end' => $today); - if($period == 'twodaysago') return array('begin' => $twoDaysAgo, 'end' => $yesterday); - if($period == 'latest3days')return array('begin' => $twoDaysAgo, 'end' => $tomorrow); + if($period == 'all') return array('begin' => '1970-1-1', 'end' => LONG_TIME); + if($period == 'today') return array('begin' => $today, 'end' => $tomorrow); + if($period == 'yesterday') return array('begin' => $yesterday, 'end' => $today); + if($period == 'twodaysago') return array('begin' => $twoDaysAgo, 'end' => $yesterday); + if($period == 'latest3days') return array('begin' => $twoDaysAgo, 'end' => $tomorrow); + if($period == 'lastweek') return date::getLastWeek(); + if($period == 'thismonth') return date::getThisMonth(); + if($period == 'lastmonth') return date::getLastMonth(); - /* If the period is by week, add the end time to the end date. */ - if($period == 'thisweek' or $period == 'lastweek') - { - $func = "get$period"; - extract(date::$func()); - return array('begin' => $begin, 'end' => $end); - } - - if($period == 'thismonth') return date::getThisMonth(); - if($period == 'lastmonth') return date::getLastMonth(); + return date::getThisWeek(); } /** @@ -2226,21 +2255,21 @@ class actionModel extends model if($action->objectType == 'case') { - $case = $this->dao->select('*')->from(TABLE_CASE)->where('id')->eq($action->objectID)->fetch(); - if($case->scene) + $caseScene = $this->dao->select('scene')->from(TABLE_CASE)->where('id')->eq($action->objectID)->fetch('scene'); + if($caseScene) { - $scene = $this->dao->select('*')->from(VIEW_SCENECASE)->where('id')->eq($case->scene)->fetch(); + $scene = $this->loadModel('testcase')->getSceneByID($caseScene); if($scene->deleted) return print(js::error($this->lang->action->refusecase)); } } if($action->objectType == 'scene') { - $scene = $this->dao->select('*')->from("zt_scene")->where('id')->eq($action->objectID)->fetch(); + $scene = $this->loadModel('testcase')->getSceneByID($action->objectID); if($scene->parent) { - $scenerow = $this->dao->select('*')->from(VIEW_SCENECASE)->where('id')->eq($scene->parent)->fetch(); - if($scenerow->deleted) return print(js::error($this->lang->action->refusescene)); + $parentScene = $this->testcase->getSceneByID($scene->parent); + if($parentScene->deleted) return print(js::error($this->lang->action->refusescene)); } } @@ -2368,7 +2397,8 @@ class actionModel extends model if($dateGroup) { - $lastDateActions = $this->dao->select('*')->from(TABLE_ACTION)->where($this->session->actionQueryCondition)->andWhere("(LEFT(`date`, 10) = '" . substr($action->originalDate, 0, 10) . "')")->orderBy($this->session->actionOrderBy)->fetchAll('id'); + $lastDate = date(DT_DATE1, $timeStamp); + $lastDateActions = $this->dao->select('*')->from(TABLE_ACTION)->where('`date`')->ge($lastDate)->andWhere('`date`')->le("{$lastDate} 23:59:59")->andWhere($this->session->actionQueryCondition)->orderBy($this->session->actionOrderBy)->fetchAll('id'); if(count($dateGroup[$date]) < count($lastDateActions)) { unset($dateGroup[$date]); @@ -2412,11 +2442,13 @@ class actionModel extends model $condition = $this->session->actionQueryCondition; /* Remove date condition for direction. */ - $condition = preg_replace("/AND +date[\<\>]'\d{4}\-\d{2}\-\d{2}'/", '', $condition); - $count = $this->dao->select('count(*) as count')->from(TABLE_ACTION)->where($condition) - ->andWhere('date' . ($direction == 'next' ? '<' : '>') . "'{$date}'") - ->fetch('count'); - return $count > 0; + $condition = preg_replace("/AND +[`]?date[`]?[ ]*[\<\>][ |=]*'\d{4}\-\d{2}\-\d{2}'/", '', $condition); + $actions = $this->dao->select('id')->from(TABLE_ACTION) + ->where('date' . ($direction == 'next' ? '<' : '>') . "'{$date}'") + ->andWhere($condition) + ->limit(1) + ->fetch('id'); + return !empty($actions); } /** @@ -2628,4 +2660,32 @@ class actionModel extends model $this->create($deletedAction->objectType, $deletedAction->objectID, 'undeleted'); } } + + /** + * Clear dynamic records older than one month. + * + * @access public + * @return void + */ + public function cleanActions() + { + $lastMonth = date('Y-m-d', strtotime('-1 month')); + $this->dao->delete()->from(TABLE_ACTIONRECENT)->where('date')->lt($lastMonth)->exec(); + return !dao::isError(); + } + + /** + * Get dynamic count. + * + * @access public + * @return void + */ + public function getDynamicCount() + { + $condition = $this->session->actionQueryCondition; + $count = $this->dao->select('count(1) as count')->from(TABLE_ACTION) + ->where($condition) + ->fetch('count'); + return $count; + } } diff --git a/module/admin/config.php b/module/admin/config.php index de97e8b6e4..47722b9ceb 100755 --- a/module/admin/config.php +++ b/module/admin/config.php @@ -16,6 +16,7 @@ $config->admin->menuGroup['dev'] = array('dev', 'entry', 'editor'); $config->admin->menuGroup['extension'] = array('extension'); $config->admin->menuGroup['convert'] = array('convert'); $config->admin->menuGroup['platform'] = array('system', 'repo', 'account', 'host', 'serverroom', 'ops', 'tree', 'domain', 'deploy', 'service'); +$config->admin->menuGroup['ai'] = array('ai|adminindex', 'ai|prompts', 'ai|promptview', 'ai|conversations', 'ai|models', 'ai|editmodel', 'ai|promptassignrole', 'ai|promptselectdatasource', 'ai|promptsetpurpose', 'ai|promptsettargetform', 'ai|promptfinalize', 'ai|promptedit'); $config->admin->menuModuleGroup['model']['custom|set'] = array('project', 'issue', 'risk', 'opportunity', 'nc'); $config->admin->menuModuleGroup['model']['custom|required'] = array('project', 'build'); @@ -84,6 +85,7 @@ $config->admin->helpURL['extension'] = 'https://www.zentao.net/book/zentaopms/53 $config->admin->helpURL['dev'] = 'https://www.zentao.net/book/zentaopms/537.html'; $config->admin->helpURL['convert'] = 'https://www.zentao.net/book/zentaopms/656.html'; $config->admin->helpURL['platform'] = 'https://www.zentao.net/book/zentaopms/656.html'; +$config->admin->helpURL['ai'] = 'https://www.zentao.net/book/zentaopms/'; $config->admin->navsGroup['feature']['my'] = ',todo,block,'; $config->admin->navsGroup['feature']['product'] = ',product,story,productplan,release,'; diff --git a/module/admin/lang/de.php b/module/admin/lang/de.php index 2c4af48235..b914a10c9e 100755 --- a/module/admin/lang/de.php +++ b/module/admin/lang/de.php @@ -183,6 +183,8 @@ $lang->admin->menuSetting['convert']['name'] = 'Data Import'; $lang->admin->menuSetting['convert']['desc'] = 'Data import from third-party systems.'; $lang->admin->menuSetting['platform']['name'] = 'DevOps'; $lang->admin->menuSetting['platform']['desc'] = 'Settings of DevOps elements such as resources and environment.'; +$lang->admin->menuSetting['ai']['name'] = 'AI Configurations'; +$lang->admin->menuSetting['ai']['desc'] = 'Manage prompts and language models.'; $lang->admin->updateDynamics = 'Dynamics'; $lang->admin->updatePatch = 'Patch'; @@ -206,4 +208,9 @@ $lang->admin->productFeature['max'][] = 'Asset Library'; $lang->admin->productFeature['max'][] = 'QA Plan'; $lang->admin->productFeature['max'][] = 'Opportunity/Risk/Issues Management'; +$lang->admin->ai = new stdclass(); +$lang->admin->ai->model = 'Language Models'; +$lang->admin->ai->conversation = 'Conversations'; +$lang->admin->ai->prompt = 'Prompts'; + include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index 64e45dc97f..12eac2de60 100755 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -183,6 +183,8 @@ $lang->admin->menuSetting['convert']['name'] = 'Data Import'; $lang->admin->menuSetting['convert']['desc'] = 'Data import from third-party systems.'; $lang->admin->menuSetting['platform']['name'] = 'DevOps'; $lang->admin->menuSetting['platform']['desc'] = 'Settings of DevOps elements such as resources and environment.'; +$lang->admin->menuSetting['ai']['name'] = 'AI Configurations'; +$lang->admin->menuSetting['ai']['desc'] = 'Manage prompts and language models.'; $lang->admin->updateDynamics = 'Dynamics'; $lang->admin->updatePatch = 'Patch'; @@ -206,4 +208,9 @@ $lang->admin->productFeature['max'][] = 'Asset Library'; $lang->admin->productFeature['max'][] = 'QA Plan'; $lang->admin->productFeature['max'][] = 'Opportunity/Risk/Issues Management'; +$lang->admin->ai = new stdclass(); +$lang->admin->ai->model = 'Language Models'; +$lang->admin->ai->conversation = 'Conversations'; +$lang->admin->ai->prompt = 'Prompts'; + include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/fr.php b/module/admin/lang/fr.php index 36e8d65cb0..1e14f7cacb 100755 --- a/module/admin/lang/fr.php +++ b/module/admin/lang/fr.php @@ -183,6 +183,8 @@ $lang->admin->menuSetting['convert']['name'] = 'Data Import'; $lang->admin->menuSetting['convert']['desc'] = 'Data import from third-party systems.'; $lang->admin->menuSetting['platform']['name'] = 'DevOps'; $lang->admin->menuSetting['platform']['desc'] = 'Settings of DevOps elements such as resources and environment.'; +$lang->admin->menuSetting['ai']['name'] = 'AI Configurations'; +$lang->admin->menuSetting['ai']['desc'] = 'Manage prompts and language models.'; $lang->admin->updateDynamics = 'Dynamics'; $lang->admin->updatePatch = 'Patch'; @@ -206,4 +208,9 @@ $lang->admin->productFeature['max'][] = 'Asset Library'; $lang->admin->productFeature['max'][] = 'QA Plan'; $lang->admin->productFeature['max'][] = 'Opportunity/Risk/Issues Management'; +$lang->admin->ai = new stdclass(); +$lang->admin->ai->model = 'Language Models'; +$lang->admin->ai->conversation = 'Conversations'; +$lang->admin->ai->prompt = 'Prompts'; + include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/menu.php b/module/admin/lang/menu.php index d1c8801380..3df93c5ad3 100644 --- a/module/admin/lang/menu.php +++ b/module/admin/lang/menu.php @@ -48,6 +48,11 @@ $lang->admin->menuList->platform['name'] = $lang->admin->menuSetting['platform' $lang->admin->menuList->platform['desc'] = $lang->admin->menuSetting['platform']['desc']; $lang->admin->menuList->platform['order'] = 55; +$lang->admin->menuList->ai['name'] = $lang->admin->menuSetting['ai']['name']; +$lang->admin->menuList->ai['desc'] = $lang->admin->menuSetting['ai']['desc']; +$lang->admin->menuList->ai['link'] = 'ai|adminindex'; +$lang->admin->menuList->ai['order'] = 55; + $lang->admin->menuList->system['subMenu']['mode'] = array('link' => "{$lang->custom->mode}|custom|mode|"); $lang->admin->menuList->system['subMenu']['trash'] = array('link' => "{$lang->action->trash}|action|trash|"); $lang->admin->menuList->system['subMenu']['safe'] = array('link' => "{$lang->security}|admin|safe|", 'alias' => 'checkweak,resetpwdsetting', 'links' => array('admin|resetpwdsetting|', 'admin|checkweak|')); @@ -223,6 +228,22 @@ $lang->admin->menuList->platform['menuOrder']['25'] = 'setrules'; $lang->admin->menuList->platform['dividerMenu'] = ',plat,setrules,'; +$lang->admin->menuList->ai['subMenu']['prompts'] = array('link' => "{$lang->admin->ai->prompt}|ai|prompts|", 'alias' => 'promptview,promptassignrole,promptselectdatasource,promptsetpurpose,promptsettargetform,promptfinalize,promptedit'); +// $lang->admin->menuList->ai['subMenu']['conversations'] = array('link' => "{$lang->admin->ai->conversation}|ai|conversations|"); +$lang->admin->menuList->ai['subMenu']['models'] = array('link' => "{$lang->admin->ai->model}|ai|models|", 'alias' => 'editmodel'); + +$lang->admin->menuList->ai['menuOrder']['5'] = 'prompts'; +// $lang->admin->menuList->ai['menuOrder']['10'] = 'conversations'; +$lang->admin->menuList->ai['menuOrder']['15'] = 'models'; + +$lang->admin->menuList->ai['subMenu']['prompts'] = array('link' => "{$lang->admin->ai->prompt}|ai|prompts|", 'alias' => 'promptview,promptassignrole,promptselectdatasource,promptsetpurpose,promptsettargetform,promptfinalize,promptedit'); +// $lang->admin->menuList->ai['subMenu']['conversations'] = array('link' => "{$lang->admin->ai->conversation}|ai|conversations|"); +$lang->admin->menuList->ai['subMenu']['models'] = array('link' => "{$lang->admin->ai->model}|ai|models|", 'alias' => 'editmodel'); + +$lang->admin->menuList->ai['menuOrder']['5'] = 'prompts'; +// $lang->admin->menuList->ai['menuOrder']['10'] = 'conversations'; +$lang->admin->menuList->ai['menuOrder']['15'] = 'models'; + if($config->edition != 'max' and $config->edition != 'ipd') { unset($lang->admin->menuList->model['subMenu']['scrum']); diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index fac3b7e559..5934151242 100755 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -183,6 +183,8 @@ $lang->admin->menuSetting['convert']['name'] = '数据导入'; $lang->admin->menuSetting['convert']['desc'] = '第三方系统的数据导入。'; $lang->admin->menuSetting['platform']['name'] = 'DevOps设置'; $lang->admin->menuSetting['platform']['desc'] = '资源、环境等DevOps各要素配置。'; +$lang->admin->menuSetting['ai']['name'] = 'AI 配置'; +$lang->admin->menuSetting['ai']['desc'] = '管理 AI 提词应用、配置语言模型。'; $lang->admin->updateDynamics = '更新动态'; $lang->admin->updatePatch = '补丁更新'; @@ -206,4 +208,9 @@ $lang->admin->productFeature['max'][] = '项目管理可视化,精准掌控项 $lang->admin->productFeature['max'][] = '资产库管理,为项目提供数据支撑'; $lang->admin->productFeature['max'][] = '严格权限控制,方式灵活安全'; +$lang->admin->ai = new stdclass(); +$lang->admin->ai->model = '语言模型'; +$lang->admin->ai->conversation = '会话'; +$lang->admin->ai->prompt = '提词'; + include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/model.php b/module/admin/model.php index 502a83caad..a3b0e91755 100755 --- a/module/admin/model.php +++ b/module/admin/model.php @@ -390,7 +390,8 @@ class adminModel extends model } } } - elseif(!empty($menu['link']) and strpos($menu['link'], '|') !== false) + + if(!empty($menu['link']) and strpos($menu['link'], '|') !== false) { list($module, $method) = explode('|', $menu['link']); $menu['link'] = helper::createLink($module, $method); diff --git a/module/ai/config.php b/module/ai/config.php new file mode 100644 index 0000000000..264e048e53 --- /dev/null +++ b/module/ai/config.php @@ -0,0 +1,264 @@ +ai->vendorList = array(); +$config->ai->vendorList['openai']['requiredFields'] = array('key'); +$config->ai->vendorList['azure']['requiredFields'] = array('key', 'resource', 'deployment'); + +$config->ai->openai = new stdclass(); +$config->ai->openai->api = new stdclass(); +$config->ai->openai->api->vendor = array('openai', 'azure'); +$config->ai->openai->api->openai = new stdclass(); +$config->ai->openai->api->openai->version = 'v1'; // OpenAI API version, required. +$config->ai->openai->api->openai->format = 'https://api.openai.com/%s/%s'; // OpenAI API format, args: API version, API name. +$config->ai->openai->api->openai->authFormat = 'Authorization: Bearer %s'; // OpenAI API auth header format. +$config->ai->openai->api->azure = new stdclass(); +$config->ai->openai->api->azure->resource = 'openai-at-zentao'; // your Azure OpenAI resource name, required. +$config->ai->openai->api->azure->deployment = 'the-first-gpt'; // your Azure OpenAI deployment name, required. +$config->ai->openai->api->azure->apiVersion = '2023-07-01-preview'; // Azure OpenAI API version, required. +$config->ai->openai->api->azure->format = 'https://%s.openai.azure.com/openai/deployments/%s/%s?api-version=%s'; // Azure API format, args: resource name, deployment name, API name, API version. +$config->ai->openai->api->azure->authFormat = 'api-key: %s'; // Azure API auth header format. +$config->ai->openai->api->methods = array('function' => 'chat/completions', 'chat' => 'chat/completions', 'completion' => 'completions', 'edit' => 'edits'); + +$config->ai->openai->params = new stdclass(); +$config->ai->openai->params->chat = new stdclass(); +$config->ai->openai->params->function = new stdclass(); +$config->ai->openai->params->completion = new stdclass(); +$config->ai->openai->params->edit = new stdclass(); +$config->ai->openai->params->chat->required = array('messages'); +$config->ai->openai->params->chat->optional = array('max_tokens', 'temperature', 'top_p', 'n', 'stream', 'stop', 'presence_penalty', 'frequency_penalty', 'logit_bias', 'user'); +$config->ai->openai->params->function->required = array('messages', 'functions', 'function_call'); +$config->ai->openai->params->function->optional = array('max_tokens', 'temperature', 'top_p', 'n', 'stream', 'stop', 'presence_penalty', 'frequency_penalty', 'logit_bias', 'user'); +$config->ai->openai->params->completion->required = array('prompt', 'max_tokens'); +$config->ai->openai->params->completion->optional = array('suffix', 'temperature', 'top_p', 'n', 'stream', 'logprobs', 'echo', 'stop', 'presence_penalty', 'frequency_penalty', 'best_of', 'logit_bias', 'user'); +$config->ai->openai->params->edit->required = array('input', 'instruction'); +$config->ai->openai->params->edit->optional = array('temperature', 'top_p', 'n'); + +$config->ai->openai->model = new stdclass(); +$config->ai->openai->model->chat = 'gpt-3.5-turbo'; +$config->ai->openai->model->function = 'gpt-3.5-turbo-0613'; +$config->ai->openai->model->completion = 'text-davinci-003'; +$config->ai->openai->model->edit = 'text-davinci-edit-001'; + +$config->ai->openai->contentTypeMapping = array('Content-Type: application/json' => array('', 'function', 'chat', 'completion', 'edit'), 'Content-Type: multipart/form-data' => array()); +$config->ai->openai->contentType = array(); +foreach($config->ai->openai->contentTypeMapping as $contentType => $apis) +{ + foreach($apis as $api) $config->ai->openai->contentType[$api] = $contentType; +} + +/* Required fields of forms. */ +$config->ai->createprompt = new stdclass(); +$config->ai->testPrompt = new stdclass(); +$config->ai->createprompt->requiredFields = 'name'; +$config->ai->testPrompt->requiredFields = 'name,module,source,purpose,targetForm'; + +/* Data source object props definations, commented out ones are not supported for now. */ +$config->ai->dataSource = array(); +// $config->ai->dataSource['my']['efforts'] = array('date', 'work', 'account', 'consumed', 'left', 'objectID', 'product', 'project', 'execution'); +$config->ai->dataSource['product']['product'] = array('name', 'desc'); +// $config->ai->dataSource['product']['modules'] = array('name', 'modules'); +$config->ai->dataSource['story']['story'] = array('title', 'spec', 'verify', 'product', 'module', 'pri', 'category', 'estimate'); +$config->ai->dataSource['productplan']['productplan'] = array('title', 'desc', 'begin', 'end'); +$config->ai->dataSource['productplan']['stories'] = array('title', 'module', 'pri', 'estimate', 'status', 'stage'); +$config->ai->dataSource['productplan']['bugs'] = array('title', 'pri', 'status'); +$config->ai->dataSource['release']['release'] = array('product', 'name', 'desc', 'date'); +$config->ai->dataSource['release']['stories'] = array('title', 'estimate'); +$config->ai->dataSource['release']['bugs'] = array('title'); +$config->ai->dataSource['project']['project'] = array('name', 'type', 'desc', 'begin', 'end', 'estimate'); +$config->ai->dataSource['project']['programplans'] = array('name', 'desc', 'status', 'begin', 'end', 'realBegan', 'realEnd', 'planDuration', 'progress', 'estimate', 'consumed', 'left'); +$config->ai->dataSource['project']['executions'] = array('name', 'desc', 'status', 'begin', 'end', 'realBegan', 'realEnd', 'estimate', 'consumed', 'progress'); +$config->ai->dataSource['execution']['execution'] = array('name', 'desc', 'estimate'); +$config->ai->dataSource['execution']['tasks'] = array('name', 'pri', 'status', 'estimate', 'consumed', 'left', 'progress', 'estStarted', 'realStarted', 'finishedDate', 'closedReason'); +$config->ai->dataSource['task']['task'] = array('name', 'desc', 'pri', 'status', 'estimate', 'consumed', 'left', 'progress', 'estStarted', 'realStarted'); +$config->ai->dataSource['bug']['bug'] = array('title', 'steps', 'severity','pri', 'status', 'confirmed', 'type'); +$config->ai->dataSource['case']['case'] = array('title', 'precondition', 'scene', 'product', 'module', 'pri', 'type', 'lastRunResult', 'status'); +$config->ai->dataSource['case']['steps'] = array('desc', 'expect'); +$config->ai->dataSource['doc']['doc'] = array('title', 'addedBy', 'addedDate', 'editedBy', 'editedDate', 'content'); + +/* Available target form definations. Please also update `$lang->ai->targetForm` upon changes! Some are commented out, these need extra work. */ +$config->ai->targetForm = array(); +// $config->ai->targetForm['product']['tree/managechild'] = (object)array('m' => 'tree', 'f' => 'browse'); +// $config->ai->targetForm['product']['doc/create'] = (object)array('m' => 'doc', 'f' => 'create'); +$config->ai->targetForm['story']['create'] = (object)array('m' => 'story', 'f' => 'create'); +$config->ai->targetForm['story']['batchcreate'] = (object)array('m' => 'story', 'f' => 'batchcreate'); +$config->ai->targetForm['story']['change'] = (object)array('m' => 'story', 'f' => 'change'); +$config->ai->targetForm['story']['totask'] = (object)array('m' => 'task', 'f' => 'batchcreate'); +$config->ai->targetForm['story']['testcasecreate'] = (object)array('m' => 'testcase', 'f' => 'create'); +$config->ai->targetForm['story']['subdivide'] = (object)array('m' => 'story', 'f' => 'batchcreate'); +$config->ai->targetForm['productplan']['edit'] = (object)array('m' => 'productplan', 'f' => 'edit'); +$config->ai->targetForm['productplan']['create'] = (object)array('m' => 'productplan', 'f' => 'create'); +// $config->ai->targetForm['projectrelease']['doc/create'] = (object)array('m' => 'doc', 'f' => 'create'); +// $config->ai->targetForm['project']['risk/create'] = (object)array('m' => 'risk', 'f' => 'create'); +// $config->ai->targetForm['project']['issue/create'] = (object)array('m' => 'issue', 'f' => 'create'); +// $config->ai->targetForm['project']['doc/create'] = (object)array('m' => 'doc', 'f' => 'create'); +$config->ai->targetForm['project']['programplan/create'] = (object)array('m' => 'programplan', 'f' => 'create'); +$config->ai->targetForm['execution']['batchcreatetask'] = (object)array('m' => 'task', 'f' => 'batchcreate'); +// $config->ai->targetForm['execution']['createtestreport'] = (object)array('m' => 'execution', 'f' => 'testreport'); +// $config->ai->targetForm['execution']['createqa'] = (object)array('m' => 'execution', 'f' => 'createQA'); +// $config->ai->targetForm['execution']['createrisk'] = (object)array('m' => 'execution', 'f' => 'createRisk'); +// $config->ai->targetForm['execution']['createissue'] = (object)array('m' => 'execution', 'f' => 'createIssue'); +$config->ai->targetForm['task']['edit'] = (object)array('m' => 'task', 'f' => 'edit'); +$config->ai->targetForm['task']['batchcreate'] = (object)array('m' => 'task', 'f' => 'batchcreate'); +$config->ai->targetForm['testcase']['edit'] = (object)array('m' => 'testcase', 'f' => 'edit'); +// $config->ai->targetForm['testcase']['createscript'] = (object)array('m' => 'testcase', 'f' => 'createScript'); +$config->ai->targetForm['bug']['edit'] = (object)array('m' => 'bug', 'f' => 'edit'); +$config->ai->targetForm['bug']['story/create'] = (object)array('m' => 'story', 'f' => 'create'); +$config->ai->targetForm['bug']['testcase/create'] = (object)array('m' => 'testcase', 'f' => 'create'); +// $config->ai->targetForm['doc']['create'] = (object)array('m' => 'doc', 'f' => 'create'); +$config->ai->targetForm['doc']['edit'] = (object)array('m' => 'doc', 'f' => 'edit'); + +/* Used to check if form injection is available, generated from `$config->ai->targetForm`. */ +$config->ai->availableForms = array(); +foreach($config->ai->targetForm as $forms) +{ + foreach($forms as $form) + { + if(!empty($config->ai->availableForms[$form->m]) && in_array($form->f, $config->ai->availableForms[$form->m])) continue; + $config->ai->availableForms[$form->m][] = $form->f; + } +} + +/** + * Target form variables definations, defines format and arguments of target form redirection links, + * useful when method requires additional arguments. + * + * Arg keys are names of objects, usually the same as object name. Arg values indicate if arg is required. + * It will be used to get object ID and sprintf to format. + */ +$config->ai->targetFormVars = array(); +$config->ai->targetFormVars['story']['create'] = (object)array('format' => 'product=%d', 'args' => array('product' => 1), 'app' => 'product'); +$config->ai->targetFormVars['story']['batchcreate'] = (object)array('format' => 'productID=%d', 'args' => array('product' => 1), 'app' => 'product'); +$config->ai->targetFormVars['story']['change'] = (object)array('format' => 'storyID=%d', 'args' => array('story' => 1), 'app' => 'product'); +$config->ai->targetFormVars['productplan']['create'] = (object)array('format' => 'productID=%d&branch=%d&parent=%d', 'args' => array('product' => 1, 'branch' => 0, 'productplan' => 0), 'app' => 'product'); +$config->ai->targetFormVars['productplan']['edit'] = (object)array('format' => 'planID=%d', 'args' => array('productplan' => 1), 'app' => 'product'); +$config->ai->targetFormVars['task']['create'] = (object)array('format' => 'executionID=%d&storyID=%d', 'args' => array('execution' => 1, 'story' => 0), 'app' => 'execution'); +$config->ai->targetFormVars['task']['batchcreate'] = (object)array('format' => 'executionID=%d&storyID=%d', 'args' => array('execution' => 1, 'story' => 0), 'app' => 'execution'); +$config->ai->targetFormVars['task']['edit'] = (object)array('format' => 'taskID=%d', 'args' => array('task' => 1), 'app' => 'execution'); +$config->ai->targetFormVars['bug']['create'] = (object)array('format' => 'productID=%d', 'args' => array('product' => 1), 'app' => 'qa'); +$config->ai->targetFormVars['bug']['edit'] = (object)array('format' => 'bugID=%d', 'args' => array('bug' => 1), 'app' => 'qa'); +$config->ai->targetFormVars['testcase']['create'] = (object)array('format' => 'productID=%d', 'args' => array('product' => 1), 'app' => 'qa'); +$config->ai->targetFormVars['testcase']['edit'] = (object)array('format' => 'caseID=%d', 'args' => array('case' => 1), 'app' => 'qa'); +$config->ai->targetFormVars['testreport']['create'] = (object)array('format' => 'productID=%d', 'args' => array('product' => 1), 'app' => 'qa'); +$config->ai->targetFormVars['execution']['testreport'] = (object)array('format' => '', 'args' => array(), 'app' => 'execution'); +// $config->ai->targetFormVars['tree']['browse'] = (object)array('format' => 'rootID=%d&view=%s', 'args' => array('root', 'view'), 'app' => 'product'); +$config->ai->targetFormVars['programplan']['create'] = (object)array('format' => 'projectID=%d', 'args' => array('project' => 1), 'app' => 'project'); +$config->ai->targetFormVars['doc']['edit'] = (object)array('format' => 'docID=%d', 'args' => array('doc' => 1), 'app' => 'doc'); + +/* Menu printing configurations. */ +$config->ai->menuPrint = new stdclass(); +/** + * Menu location definations, defines acceptable module-methods and on page menu locations, etc. + * Some are identical except for module name, reuse them as much as possible. + * + * @param string $module prompt module name (actual module could differ from prompt module name) + * @param string $targetContainer injection target container selector + * @param string $class class of menu or dropdown button + * @param string $buttonClass specified class of action menu buttons + * @param string $dropdownClass specified class of dropdown menu button + * @param string $objectVarName object variable name of view + * @param string $stylesheet stylesheet to be injected + * @param string $injectMethod injection jQuery method, `append` by default + * @see ./view/promptmenu.html.php + */ +$config->ai->menuPrint->locations = array(); +$config->ai->menuPrint->locations['story']['view'] = (object)array( + 'module' => 'story', + 'targetContainer' => '#mainContent .cell:first-of-type .detail:first-of-type .detail-title', + 'class' => 'pull-right', + 'stylesheet' => '#mainContent .cell:first-of-type .detail:first-of-type .detail-title>button {margin-left: 10px;} #mainContent .cell:first-of-type .detail:first-of-type .detail-content {margin-top: 12px;}' +); +$config->ai->menuPrint->locations['task']['view'] = clone $config->ai->menuPrint->locations['story']['view']; +$config->ai->menuPrint->locations['task']['view']->module = 'task'; +$config->ai->menuPrint->locations['testcase']['view'] = clone $config->ai->menuPrint->locations['story']['view']; +$config->ai->menuPrint->locations['testcase']['view']->module = 'case'; +$config->ai->menuPrint->locations['bug']['view'] = clone $config->ai->menuPrint->locations['story']['view']; +$config->ai->menuPrint->locations['bug']['view']->module = 'bug'; +$config->ai->menuPrint->locations['projectstory']['view'] = clone $config->ai->menuPrint->locations['story']['view']; +$config->ai->menuPrint->locations['execution']['storyView'] = $config->ai->menuPrint->locations['story']['view']; + +$config->ai->menuPrint->locations['execution']['view'] = (object)array( + 'module' => 'execution', + 'injectMethod' => 'prepend', + 'targetContainer' => '#mainContent.main-row > .col-4.side-col .detail:first-child > .detail-title', + 'class' => 'pull-right' +); + +$config->ai->menuPrint->locations['project']['view'] = clone $config->ai->menuPrint->locations['execution']['view']; +$config->ai->menuPrint->locations['project']['view']->module = 'project'; +$config->ai->menuPrint->locations['project']['view'] = clone $config->ai->menuPrint->locations['execution']['view']; +$config->ai->menuPrint->locations['project']['view']->module = 'project'; + +$config->ai->menuPrint->locations['product']['view'] = (object)array( + 'module' => 'product', + 'injectMethod' => 'append', + 'targetContainer' => '#mainContent.main-row > .col-8.main-col .detail:first-child > .detail-title', + 'class' => 'pull-right' +); + +$config->ai->menuPrint->locations['productplan']['view'] = (object)array( + 'module' => 'productplan', + 'targetContainer' => '#mainMenu>.btn-toolbar.pull-right', + 'objectVarName' => 'plan' +); +$config->ai->menuPrint->locations['projectplan']['view'] = $config->ai->menuPrint->locations['productplan']['view']; +$config->ai->menuPrint->locations['release']['view'] = clone $config->ai->menuPrint->locations['productplan']['view']; +$config->ai->menuPrint->locations['release']['view']->module = 'release'; +$config->ai->menuPrint->locations['release']['view']->objectVarName = null; +$config->ai->menuPrint->locations['projectrelease']['view'] = clone $config->ai->menuPrint->locations['productplan']['view']; +$config->ai->menuPrint->locations['projectrelease']['view']->objectVarName = null; + +$config->ai->menuPrint->locations['doc']['view'] = (object)array( + 'module' => 'doc', + 'injectMethod' => 'prepend', + 'targetContainer' => '#mainMenu>.btn-toolbar.pull-right', +); + +$config->ai->injectAuditButton = new stdclass(); +$config->ai->injectAuditButton->locations = array(); +$config->ai->injectAuditButton->locations['task']['edit'] = array( + 'toolbar' => (object)array( + 'targetContainer' => '#mainContent .main-header', + 'injectMethod' => 'append', + 'class' => 'pull-right btn-toolbar', + ), + 'action' => (object)array( + 'targetContainer' => '#mainContent .form-actions', + 'injectMethod' => 'html', + ) +); + +$config->ai->injectAuditButton->locations['bug']['create'] = array( + 'toolbar' => (object)array( + 'targetContainer' => '#mainContent .main-header .btn-toolbar', + 'injectMethod' => 'prepend', + ), + 'action' => (object)array( + 'targetContainer' => '#mainContent .form-actions', + 'injectMethod' => 'html', + ) +); + +$config->ai->injectAuditButton->locations['doc']['edit'] = array( + 'toolbar' => (object)array( + 'targetContainer' => '#mainContent #headerBox .btn-tools', + 'injectMethod' => 'prepend', + ), + 'action' => (object)array( + 'targetContainer' => '#mainContent #headerBox .btn-tools', + 'injectMethod' => 'html', + 'containerStyles' => '{"width": "600px"}' + ) +); + +$config->ai->injectAuditButton->locations['productplan']['create'] = $config->ai->injectAuditButton->locations['task']['edit']; +$config->ai->injectAuditButton->locations['productplan']['edit'] = $config->ai->injectAuditButton->locations['task']['edit']; +$config->ai->injectAuditButton->locations['programplan']['create'] = $config->ai->injectAuditButton->locations['task']['edit']; +$config->ai->injectAuditButton->locations['bug']['edit'] = $config->ai->injectAuditButton->locations['task']['edit']; +$config->ai->injectAuditButton->locations['story']['change'] = $config->ai->injectAuditButton->locations['task']['edit']; +$config->ai->injectAuditButton->locations['testcase']['edit'] = $config->ai->injectAuditButton->locations['task']['edit']; +$config->ai->injectAuditButton->locations['testreport']['create'] = $config->ai->injectAuditButton->locations['task']['edit']; + +$config->ai->injectAuditButton->locations['story']['batchcreate'] = $config->ai->injectAuditButton->locations['bug']['create']; +$config->ai->injectAuditButton->locations['story']['create'] = $config->ai->injectAuditButton->locations['bug']['create']; +$config->ai->injectAuditButton->locations['task']['batchcreate'] = $config->ai->injectAuditButton->locations['bug']['create']; +$config->ai->injectAuditButton->locations['task']['create'] = $config->ai->injectAuditButton->locations['bug']['create']; +$config->ai->injectAuditButton->locations['testcase']['create'] = $config->ai->injectAuditButton->locations['bug']['create']; diff --git a/module/ai/control.php b/module/ai/control.php new file mode 100644 index 0000000000..dfabaa782a --- /dev/null +++ b/module/ai/control.php @@ -0,0 +1,688 @@ + + * @package ai + * @link https://www.zentao.net + */ +class ai extends control +{ + public function __construct($module = '', $method = '') + { + parent::__construct($module, $method); + $this->loadModel('user'); + } + + /** + * Check for user's privs and model configs, redirect to most relevant page. + * + * @access public + * @return void + */ + public function adminIndex() + { + $modelConfig = new stdclass(); + $modelConfigData = $this->loadModel('setting')->getItems('owner=system&module=ai'); + foreach($modelConfigData as $item) $modelConfig->{$item->key} = $item->value; + + $modelConfigured = !empty($modelConfig->key) && !empty($modelConfig->type) && (empty($modelConfig->proxyType) || !empty($modelConfig->proxyAddr)); + + /* Redirect to model edit if user has priv and model is unconfigured. */ + if(commonModel::hasPriv('ai', 'editModel') && !$modelConfigured) return $this->locate($this->createLink('ai', 'editModel')); + + /* Redirect to prompts if user has priv. */ + if(commonModel::hasPriv('ai', 'prompts')) return $this->locate($this->createLink('ai', 'prompts')); + + /* Redirect to models if user has priv. */ + if(commonModel::hasPriv('ai', 'models')) return $this->locate($this->createLink('ai', 'models')); + + /* User has no priv, deny access. */ + return $this->send(array('result' => 'fail', 'message' => $this->lang->error->accessDenied, 'locate' => $this->createLink('admin', 'index'))); + } + + /** + * List models. + * + * TODO: not fully implemented yet, currently shows the only model config. + * + * @access public + * @return void + */ + public function models() + { + $modelConfig = new stdclass(); + $modelConfig->type = ''; + $modelConfig->key = ''; + $modelConfig->proxyType = ''; + $modelConfig->proxyAddr = ''; + $modelConfig->description = ''; + $modelConfig->status = ''; + + $storedModelConfig = $this->loadModel('setting')->getItems('owner=system&module=ai'); + foreach($storedModelConfig as $item) $modelConfig->{$item->key} = $item->value; + + $this->view->modelConfig = $modelConfig; + $this->view->title = $this->lang->ai->models->title; + $this->display(); + } + + /** + * Edit model configuration, store in system.ai settings. + * + * @access public + * @return void + */ + public function editModel() + { + if(strtolower($this->server->request_method) == 'post') + { + $modelConfig = fixer::input('post')->get(); + + $currentVendor = empty($modelConfig->vendor) ? key($lang->ai->models->openaiVendorList) : $modelConfig->vendor; + $vendorRequiredFields = $this->config->ai->vendorList[$currentVendor]['requiredFields']; + + $errors = array(); + if(empty($modelConfig->type)) $errors[] = sprintf($this->lang->ai->validate->noEmpty, $this->lang->ai->models->type); + foreach($vendorRequiredFields as $field) + { + if(empty($modelConfig->$field)) $errors[] = sprintf($this->lang->ai->validate->noEmpty, $this->lang->ai->models->$field); + } + if(!empty($modelConfig->proxyType) && empty($modelConfig->proxyAddr)) + { + $errors[] = sprintf($this->lang->ai->validate->noEmpty, $this->lang->ai->models->proxyAddr); + } + if(!empty($errors)) return $this->send(array('result' => 'fail', 'message' => implode(' ', $errors))); + + $this->loadModel('setting')->setItems('system.ai', $modelConfig); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'locate' => $this->inlink('models') . '#app=admin')); + } + + $modelConfig = new stdclass(); + $modelConfig->type = ''; + $modelConfig->key = ''; + $modelConfig->proxyType = ''; + $modelConfig->proxyAddr = ''; + $modelConfig->description = ''; + $modelConfig->status = ''; + + $storedModelConfig = $this->loadModel('setting')->getItems('owner=system&module=ai'); + foreach($storedModelConfig as $item) $modelConfig->{$item->key} = $item->value; + + $this->view->modelConfig = $modelConfig; + $this->view->title = $this->lang->ai->models->title; + $this->display(); + } + + /** + * Test connection to API endpoint. + * + * @access public + * @return void + */ + public function testConnection() + { + $modelConfig = fixer::input('post')->get(); + + $currentVendor = empty($modelConfig->vendor) ? key($lang->ai->models->openaiVendorList) : $modelConfig->vendor; + $vendorRequiredFields = $this->config->ai->vendorList[$currentVendor]['requiredFields']; + + $errors = array(); + if(empty($modelConfig->type)) $errors[] = sprintf($this->lang->ai->validate->noEmpty, $this->lang->ai->models->type); + foreach($vendorRequiredFields as $field) + { + if(empty($modelConfig->$field)) $errors[] = sprintf($this->lang->ai->validate->noEmpty, $this->lang->ai->models->$field); + } + if(!empty($modelConfig->proxyType) && empty($modelConfig->proxyAddr)) + { + $errors[] = sprintf($this->lang->ai->validate->noEmpty, $this->lang->ai->models->proxyAddr); + } + if(!empty($errors)) return $this->send(array('result' => 'fail', 'message' => implode(' ', $errors))); + + $this->ai->setConfig($modelConfig); + + if($currentVendor == 'azure') + { + $messages = array( + (object)array('role' => 'user', 'content' => 'Hello?') + ); + $result = $this->ai->converse($messages); + } + else + { + $result = $this->ai->complete('test', 1); // Test completing 'test' with length of 1. + } + + if($result === false) + { + return $this->send(array('result' => 'fail', 'message' => empty($this->ai->errors) ? $this->lang->ai->models->testConnectionResult->fail : sprintf($this->lang->ai->models->testConnectionResult->failFormat, implode(', ', $this->ai->errors)))); + } + + return $this->send(array('result' => 'success', 'message' => $this->lang->ai->models->testConnectionResult->success)); + } + + /** + * List prompts. + * + * @param string $module + * @param string $status + * @access public + * @return void + */ + public function prompts($module = '', $status = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 15, $pageID = 1) + { + if($_POST) + { + $data = fixer::input('post')->get(); + if(isset($data->togglePromptStatus) && isset($data->promptId)) + { + $modelConfig = new stdclass(); + $storedModelConfig = $this->loadModel('setting')->getItems('owner=system&module=ai'); + foreach($storedModelConfig as $item) $modelConfig->{$item->key} = $item->value; + if(empty($modelConfig->key)) return $this->send(array('result' => 'fail', 'message' => $this->lang->ai->models->noModelError, 'locate' => $this->inlink('models') . '#app=admin')); + + $this->ai->togglePromptStatus($data->promptId); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success')); + } + } + /* Set pager and order. */ + $this->app->loadClass('pager', $static = true); + $pager = new pager($recTotal, $recPerPage, $pageID); + $order = common::appendOrder($orderBy); + + $this->view->prompts = $this->ai->getPrompts($module, $status, $order, $pager); + $this->view->module = $module; + $this->view->status = $status; + $this->view->orderBy = $orderBy; + $this->view->pager = $pager; + $this->view->title = $this->lang->ai->prompts->common; + + if($this->config->edition == 'open') + { + $this->view->promptModules = array_map(function($prompt) + { + return $prompt->module; + }, $this->ai->getPrompts()); + } + $this->display(); + } + + /** + * View prompt details. + * + * @param int $id + * @access public + * @return void + */ + public function promptView($id) + { + $prompt = $this->ai->getPromptById($id); + + $this->view->prompt = $prompt; + $this->view->preAndNext = $this->loadModel('common')->getPreAndNextObject('prompt', $id); + $this->view->actions = $this->loadModel('action')->getList('prompt', $id); + $this->view->dataPreview = $this->ai->generateDemoDataPrompt($prompt->module, $prompt->source); + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->title = "{$this->lang->ai->prompts->common}#{$prompt->id} $prompt->name"; + + $this->display(); + } + + /** + * Create a prompt. + * + * @access public + * @return void + */ + public function createPrompt() + { + if(strtolower($this->server->request_method) == 'post') + { + $prompt = fixer::input('post')->get(); + $promptID = $this->ai->createPrompt($prompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'callback' => "gotoPrompt($promptID)")); + } + + $this->view->title = $this->lang->ai->prompts->create; + $this->display(); + } + + /** + * Edit a prompt. + * + * @param int $id + * @access public + * @return void + */ + public function promptEdit($id) + { + $prompt = $this->ai->getPromptByID($id); + + if(strtolower($this->server->request_method) == 'post') + { + $data = fixer::input('post')->get(); + + $prompt->name = $data->name; + $prompt->desc = $data->desc; + + $this->ai->updatePrompt($prompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'locate' => $this->inlink('promptView', "id={$prompt->id}") . '#app=admin')); + } + + $this->view->prompt = $prompt; + $this->view->title = $this->lang->ai->prompts->edit; + $this->display(); + } + + /** + * Delete a prompt. + * + * @param int $prompt + * @access public + * @return void + */ + public function promptDelete($prompt) + { + $result = $this->ai->deletePrompt($prompt); + + if(dao::isError() || $result === false) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success')); + } + + /** + * Edit role of prompt, prompt editing step 2. + * + * @param int $promptID + * @access public + * @return void + */ + public function promptAssignRole($promptID) + { + $prompt = $this->ai->getPromptByID($promptID); + + if($_POST) + { + $data = fixer::input('post')->get(); + + $originalPrompt = clone $prompt; + + $prompt->model = 0; // TODO: use actual $data->model; + $prompt->role = $data->role; + $prompt->characterization = $data->characterization; + + if(!empty($data->saveTemplate) && $data->saveTemplate == 'save') + { + $this->ai->createRoleTemplate($prompt->role, $prompt->characterization); + } + + $this->ai->updatePrompt($prompt, $originalPrompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(!empty($data->jumpToNext)) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptSelectDataSource', "promptID=$promptID") . '#app=admin')); + + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptAssignRole', "promptID=$promptID") . '#app=admin')); + } + + $this->view->prompt = $prompt; + $this->view->promptID = $promptID; + $this->view->lastActiveStep = $this->ai->getLastActiveStep($prompt); + $this->view->title = "{$this->lang->ai->prompts->common}#{$prompt->id} $prompt->name {$this->lang->colon} " . $this->lang->ai->prompts->assignRole . " {$this->lang->colon} " . $this->lang->ai->prompts->common; + $this->view->roleTemplates = $this->ai->getRoleTemplates(); + $this->display(); + } + + /** + * Set data source of prompt, prompt editing step 3. + * + * @param int $promptID + * @access public + * @return void + */ + public function promptSelectDataSource($promptID) + { + $prompt = $this->ai->getPromptByID($promptID); + + if($_POST) + { + $data = fixer::input('post')->get(); + + $originalPrompt = clone $prompt; + + $prompt->module = $data->datagroup; + $prompt->source = ",$data->datasource,"; + + $this->ai->updatePrompt($prompt, $originalPrompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(!empty($data->jumpToNext)) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptSetPurpose', "promptID=$promptID") . '#app=admin')); + + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptSelectDataSource', "promptID=$promptID") . '#app=admin')); + } + + $this->view->activeDataSource = empty($prompt->module) ? current(array_keys($this->config->ai->dataSource)) : $prompt->module; + $this->view->dataSource = $this->config->ai->dataSource; + $this->view->prompt = $prompt; + $this->view->promptID = $promptID; + $this->view->lastActiveStep = $this->ai->getLastActiveStep($prompt); + $this->view->title = "{$this->lang->ai->prompts->common}#{$prompt->id} $prompt->name {$this->lang->colon} " . $this->lang->ai->prompts->selectDataSource . " {$this->lang->colon} " . $this->lang->ai->prompts->common; + $this->display(); + } + + /** + * Edit purpose and purpose elaboration of prompt, prompt editing step 4. + * + * @param int $promptID + * @access public + * @return void + */ + public function promptSetPurpose($promptID) + { + $prompt = $this->ai->getPromptByID($promptID); + + if($_POST) + { + $data = fixer::input('post')->get(); + + $originalPrompt = clone $prompt; + + $prompt->purpose = $data->purpose; + $prompt->elaboration = $data->elaboration; + + $this->ai->updatePrompt($prompt, $originalPrompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(!empty($data->jumpToNext)) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptSetTargetForm', "promptID=$promptID") . '#app=admin')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptSetPurpose', "promptID=$promptID") . '#app=admin')); + } + + $this->view->dataPreview = $this->ai->generateDemoDataPrompt($prompt->module, $prompt->source); + $this->view->prompt = $prompt; + $this->view->promptID = $promptID; + $this->view->lastActiveStep = $this->ai->getLastActiveStep($prompt); + $this->view->title = "{$this->lang->ai->prompts->common}#{$prompt->id} $prompt->name {$this->lang->colon} " . $this->lang->ai->prompts->setPurpose . " {$this->lang->colon} " . $this->lang->ai->prompts->common; + $this->display(); + } + + /** + * Set target form of prompt, prompt editing step 5. + * + * @param int $promptID + * @access public + * @return void + */ + public function promptSetTargetForm($promptID) + { + $prompt = $this->ai->getPromptByID($promptID); + + if($_POST) + { + $data = fixer::input('post')->get(); + + $originalPrompt = clone $prompt; + + $prompt->targetForm = $data->targetForm; + + $this->ai->updatePrompt($prompt, $originalPrompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(!empty($data->goTesting)) // Go to testing object view. + { + $location = $this->ai->getTestingLocation($prompt); + return $this->send(empty($location) ? array('result' => 'fail', 'target' => '#go-test-btn', 'msg' => $this->lang->ai->prompts->goingTestingFail) : array('result' => 'success', 'target' => '#go-test-btn', 'msg' => $this->lang->ai->prompts->goingTesting, 'locate' => $location)); + } + + if(!empty($data->jumpToNext)) $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptFinalize', "promptID=$promptID") . '#app=admin')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptSetTargetForm', "promptID=$promptID") . '#app=admin')); + } + + $this->view->dataPreview = $this->ai->generateDemoDataPrompt($prompt->module, $prompt->source); + $this->view->prompt = $prompt; + $this->view->promptID = $promptID; + $this->view->lastActiveStep = $this->ai->getLastActiveStep($prompt); + $this->view->title = "{$this->lang->ai->prompts->common}#{$prompt->id} $prompt->name {$this->lang->colon} " . $this->lang->ai->prompts->setTargetForm . " {$this->lang->colon} " . $this->lang->ai->prompts->common; + $this->display(); + } + + /** + * Edit additional information of prompt, final prompt editing step. + * + * @param int $promptID + * @access public + * @return void + */ + public function promptFinalize($promptID) + { + $prompt = $this->ai->getPromptByID($promptID); + + if($_POST) + { + $data = fixer::input('post')->get(); + + $originalPrompt = clone $prompt; + + $prompt->name = $data->name; + $prompt->desc = $data->desc; + + $this->ai->updatePrompt($prompt, $originalPrompt); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(!empty($data->jumpToNext)) $this->ai->togglePromptStatus($prompt, 'active'); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(!empty($data->jumpToNext)) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('prompts') . '#app=admin')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->inlink('promptFinalize', "promptID=$promptID") . '#app=admin')); + } + + $this->view->prompt = $prompt; + $this->view->promptID = $promptID; + $this->view->lastActiveStep = $this->ai->getLastActiveStep($prompt); + $this->view->title = "{$this->lang->ai->prompts->common}#{$prompt->id} $prompt->name {$this->lang->colon} " . $this->lang->ai->prompts->finalize . " {$this->lang->colon} " . $this->lang->ai->prompts->common; + $this->display(); + } + + /** + * Execute prompt on obejct, and redirect to target form page. + * + * @param int $promptId + * @param int $objectId + * @access public + * @return void + */ + public function promptExecute($promptId, $objectId) + { + $modelConfig = new stdclass(); + $storedModelConfig = $this->loadModel('setting')->getItems('owner=system&module=ai'); + foreach($storedModelConfig as $item) $modelConfig->{$item->key} = $item->value; + if(empty($modelConfig->key)) return $this->send(array('result' => 'fail', 'message' => $this->lang->ai->models->noModelError, 'locate' => $this->inlink('models') . '#app=admin')); + + $prompt = $this->ai->getPromptByID($promptId); + if(empty($prompt) || !$this->ai->isExecutable($prompt)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->ai->execute->failFormat, $this->lang->ai->execute->failReasons['noPrompt']))); + + $object = $this->ai->getObjectForPromptById($prompt, $objectId); + if(empty($object)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->ai->execute->failFormat, $this->lang->ai->execute->failReasons['noObjectData']))); + + list($objectData, $rawObject) = $object; + + list($location, $stop) = $this->ai->getTargetFormLocation($prompt, $rawObject); + if(empty($location)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->ai->execute->failFormat, $this->lang->ai->execute->failReasons['noTargetForm']))); + if(!empty($stop)) return header("location: $location", true, 302); + + $response = $this->ai->executePrompt($prompt, $object); + if(is_int($response)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->ai->execute->failFormat, $this->lang->ai->execute->executeErrors[$response]) . (empty($this->ai->errors) ? '' : implode(', ', $this->ai->errors)))); + if(empty($response)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->ai->execute->failFormat, $this->lang->ai->execute->failReasons['noResponse']))); + + $this->ai->setInjectData($prompt->targetForm, $response); + + $_SESSION['aiPrompt']['prompt'] = $prompt; + $_SESSION['aiPrompt']['objectId'] = $objectId; + + if($prompt->status == 'draft') $_SESSION['auditPrompt']['time'] = time(); + + $promptViewLink = $this->inlink('promptview', "promptID=$promptId"); + echo js::start() . "const currentApp = parent.$.apps.getLastApp().code; parent.$.apps.open('$location'); if(currentApp == 'admin') {location.href = '$promptViewLink';} else if(currentApp != parent.$.apps.getLastApp().code) {parent.$.apps.close(currentApp);}" . js::end(); + } + + /** + * Reset prompt execution. + * + * @param bool $failed Whether the execution failed, triggers error message. + * @access public + * @return void + */ + public function promptExecutionReset($failed = false) + { + /* Reset session. */ + unset($_SESSION['aiPrompt']); + unset($_SESSION['auditPrompt']); + + if($failed) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->ai->execute->failFormat, $this->lang->ai->execute->failReasons['noTargetForm']), 'locate' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')); + return $this->send(array('result' => 'success')); + } + + /** + * Audit prompt modal. + * + * @param int $promptId + * @param int $objectId + * @param bool $exit + * @access public + * @return void|int + */ + public function promptAudit($promptId, $objectId, $exit = false) + { + if(!empty($exit)) + { + unset($_SESSION['auditPrompt']); + return $this->send(array('result' => 'success', 'locate' => $this->inlink('promptview', "promptID=$promptId") . '#app=admin')); + } + + $prompt = $this->ai->getPromptByID($promptId); + + if($_POST) + { + $data = fixer::input('post')->get(); + + $originalPrompt = clone $prompt; + + $prompt->role = $data->role; + $prompt->characterization = $data->characterization; + $prompt->purpose = $data->purpose; + $prompt->elaboration = $data->elaboration; + + $this->ai->updatePrompt($prompt, $originalPrompt); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(empty($data->backLocation)) + { + $response = array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true); + } + else + { + $response = array('result' => 'success', 'message' => $this->lang->saveSuccess, 'callback' => "reloadPrompt($promptId, $objectId)"); + } + + $this->sendSuccess($response); + } + + $objectForPrompt = $this->ai->getObjectForPromptById($prompt, $objectId); + if(empty($objectForPrompt)) return $this->send(array('result' => 'fail', 'message' => $this->lang->ai->execute->fail)); + + list($objectData, $object) = $objectForPrompt; + + $this->view->prompt = $prompt; + $this->view->object = $object; + $this->view->dataPrompt = $this->ai->serializeDataToPrompt($prompt->module, $prompt->source, $objectData); + + $this->display(); + } + + /** + * Publish prompt, set status to active. + * + * @param int $id + * @param bool $backToTestingLocation + * @access public + * @return void + */ + public function promptPublish($id, $backToTestingLocation = false) + { + $modelConfig = new stdclass(); + $storedModelConfig = $this->loadModel('setting')->getItems('owner=system&module=ai'); + foreach($storedModelConfig as $item) $modelConfig->{$item->key} = $item->value; + if(empty($modelConfig->key)) return $this->send(array('result' => 'fail', 'message' => $this->lang->ai->models->noModelError, 'locate' => $this->inlink('models') . '#app=admin')); + + unset($_SESSION['auditPrompt']); + $this->ai->togglePromptStatus($id, 'active'); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + if($backToTestingLocation) + { + return $this->send(array('result' => 'success', 'message' => $this->lang->ai->prompts->action->publishSuccess, 'locate' => $this->inlink('promptview', "id=$id") . '#app=admin')); + } + + return $this->send(array('result' => 'success')); + } + + /** + * Unpublish prompt, set status to draft. + * + * @param int $id + * @access public + * @return void + */ + public function promptUnpublish($id) + { + $this->ai->togglePromptStatus($id, 'draft'); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success')); + } + + /** + * Return html element for the role template list. + * This is used in prompt designing step 2. + * Return html will deserialize in the front end js and replace the original role template list. + * + * @access public + * @return void + */ + public function roleTemplates() + { + if($_POST) + { + $data = fixer::input('post')->get(); + $method = $data->method; + switch($method) + { + case 'create': + $this->ai->createRoleTemplate($data->role, $data->characterization); + break; + case 'delete': + $this->ai->deleteRoleTemplate($data->id); + break; + case 'edit': + $this->ai->updateRoleTemplate($data->id, $data->role, $data->characterization); + break; + } + } + + $this->view->roleTemplates = $this->ai->getRoleTemplates(); + $this->display(); + } +} diff --git a/module/ai/css/common.css b/module/ai/css/common.css new file mode 100644 index 0000000000..348377497d --- /dev/null +++ b/module/ai/css/common.css @@ -0,0 +1,189 @@ +.design-steps +{ + display: flex; + justify-content: space-between; + margin-bottom: 12px; +} + +.design-steps .steps +{ + box-shadow: inset 0 0 0 rgb(0 0 0 / 10%), 0 0 15px rgb(0 0 0 / 10%); + border-radius: 4px; + isolation: isolate; + display: flex; +} + +.step +{ + position: relative; + height: 32px; + min-width: 100px; + display: flex; + justify-content: center; + align-items: center; + background-color: #ffffff; +} + +.step > a +{ + padding: 0 10px; + position: relative; + left: 5px; + cursor: pointer; +} + +.step:first-child +{ + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.step:last-child +{ + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.step:hover +{ + background-color: #edeef2 !important; +} + +.step > .hover-arrow, .step:hover > .solid-arrow +{ + position: absolute; + top: 0; + left: 100%; + width: 0; + height: 0; + z-index: 1; + border-style: solid; + border-width: 16px 0 16px 10px; + border-color: transparent transparent transparent #edeef2 !important; +} + +.step > .solid-arrow +{ + background: none !important; + width: 0 !important; + height: 0 !important; +} + +.step.disabled +{ + background-color: #ffffff; +} + +.step.disabled > a +{ + color: #c4c4c4; + cursor: not-allowed; + pointer-events: none; +} + +.step.clickable +{ + background-color: #ffffff; +} + +.step.clickable > .solid-arrow, +.step.disabled > .solid-arrow +{ + position: absolute; + top: 0; + left: 100%; + z-index: 1; + border-style: solid; + border-width: 16px 0 16px 10px; + border-color: transparent transparent transparent #ffffff; +} + +.step.clickable > .outline-arrow, +.step.disabled > .outline-arrow +{ + background-image: url("static/svg/arrow-step-polyline.svg"); + background-size: 8px; + background-position: center; + background-repeat: no-repeat; + position: absolute; + top: 0; + left: 100%; + width: 15px; + height: 32px; + z-index: 1; +} + +.step.active +{ + background-color: #38b2fe; +} + +.step.active > a +{ + color: #ffffff; +} + +.step:hover.active > a +{ + color: #38b2fe; +} + +.step.active > .solid-arrow +{ + position: absolute; + top: 0; + left: 100%; + z-index: 1; + border-style: solid; + border-width: 16px 0 16px 10px; + border-color: transparent transparent transparent #38b2fe; +} + +.step.active > .outline-arrow +{ + background-image: url("static/svg/arrow-step-polyline.svg"); + background-size: 8px; + background-position: center; + background-repeat: no-repeat; + position: absolute; + top: 0; + left: 100%; + width: 15px; + height: 32px; + z-index: 1; +} + +.step.current +{ + background-color: #2e7eff; +} + +.step.current > a +{ + color: #ffffff; + font-weight: bold; +} + +.step:hover.current > a +{ + color: #2e7eff; +} + +.step.current > .solid-arrow +{ + position: absolute; + top: 0; + left: 100%; + z-index: 1; + border-style: solid; + border-width: 16px 0 16px 10px; + border-color: transparent transparent transparent #2e7eff; +} + +#returnConfirmModal .footer +{ + display: flex; + justify-content: space-between; +} + +.visibility-hidden{visibility: hidden;} diff --git a/module/ai/css/promptview.css b/module/ai/css/promptview.css new file mode 100644 index 0000000000..2b234489a7 --- /dev/null +++ b/module/ai/css/promptview.css @@ -0,0 +1,8 @@ +.prompt-details .detail-title { + font-weight: normal; + color:#838a9d; +} + +.prompt-details .detail-content + .detail-title { + margin-top: 10px; +} diff --git a/module/ai/js/common.js b/module/ai/js/common.js new file mode 100644 index 0000000000..f5f0b23c75 --- /dev/null +++ b/module/ai/js/common.js @@ -0,0 +1,8 @@ +(function () { + const form = document.querySelector('#mainForm'); + if (form) { + form.addEventListener('input', function () { + isPromptDesignDirty = true; + }); + } +})(); diff --git a/module/ai/js/prompts.js b/module/ai/js/prompts.js new file mode 100644 index 0000000000..cec2384c77 --- /dev/null +++ b/module/ai/js/prompts.js @@ -0,0 +1,58 @@ +(function() +{ + let currentPrompt = null; + const actions = document.querySelectorAll('.c-actions'); + for(let action of actions) + { + action.addEventListener('click', function() + { + currentPrompt = action.getAttribute('data-prompt-id'); + }); + } + + const goDesignButton = document.getElementById('goDesignButton'); + if(goDesignButton) + { + goDesignButton.addEventListener('click', function() + { + if(currentPrompt) + { + location.href = createLink('ai', 'promptassignrole', `prompt=${currentPrompt}`); + } + }); + } + + const draftPromptButton = document.getElementById('draftPromptButton'); + if(draftPromptButton) + { + draftPromptButton.addEventListener('click', function() + { + if(currentPrompt) + { + togglePromptStatus(currentPrompt); + } + }); + } +})(); + +function togglePromptStatus(id) +{ + const form = document.createElement("form"); + form.method = 'post'; + form.action = createLink('ai', 'prompts'); + + const promptId = document.createElement('input'); + promptId.type = 'hidden'; + promptId.name = 'promptId'; + promptId.value = id; + form.appendChild(promptId); + + const publish = document.createElement('input'); + publish.type = 'hidden'; + publish.name = 'togglePromptStatus'; + publish.value = '1'; + form.appendChild(publish); + + document.body.appendChild(form); + form.submit(); +} diff --git a/module/ai/lang/de.php b/module/ai/lang/de.php new file mode 100644 index 0000000000..e3eb75c843 --- /dev/null +++ b/module/ai/lang/de.php @@ -0,0 +1,796 @@ + + * @package ai + * @link https://www.zentao.net + */ +$lang->ai->common = 'AI'; + +/* Definitions of table columns, used to sprintf error messages to dao::$errors. */ +$lang->prompt = new stdclass(); +$lang->prompt->name = 'Name'; +$lang->prompt->desc = 'Description'; +$lang->prompt->model = 'Model'; +$lang->prompt->module = 'Module'; +$lang->prompt->source = 'Data Source'; +$lang->prompt->targetForm = 'Target Form'; +$lang->prompt->purpose = 'Purpose'; +$lang->prompt->elaboration = 'Elaboration'; +$lang->prompt->role = 'Role'; +$lang->prompt->characterization = 'Characterization'; +$lang->prompt->status = 'Status'; +$lang->prompt->createdBy = 'Created By'; +$lang->prompt->createdDate = 'Created Date'; +$lang->prompt->editedBy = 'Edited By'; +$lang->prompt->editedDate = 'Edited Date'; +$lang->prompt->deleted = 'Deleted'; + +/* Lang for privs, keys are paired with privlang items. */ +$lang->ai->modelBrowse = 'Browse Models'; +$lang->ai->modelEdit = 'Edit Models'; +$lang->ai->modelTestConnection = 'Test Model Connection'; +$lang->ai->promptCreate = 'Create Prompt'; +$lang->ai->promptEdit = 'Edit Prompt'; +$lang->ai->promptDelete = 'Delete Prompt'; +$lang->ai->promptAssignRole = 'Assign Prompt Role'; +$lang->ai->promptSelectDataSource = 'Select Prompt Data'; +$lang->ai->promptSetPurpose = 'Set Prompt Purpose'; +$lang->ai->promptSetTargetForm = 'Set Prompt Target Form'; +$lang->ai->promptFinalize = 'Finalize Prompt'; +$lang->ai->promptAudit = 'Audit Prompt'; +$lang->ai->promptPublish = 'Publish Prompt'; +$lang->ai->promptUnpublish = 'Unpublish Prompt'; +$lang->ai->promptBrowse = 'Browse Prompts'; +$lang->ai->promptView = 'View Prompt'; +$lang->ai->promptExecute = 'Execute Prompt'; +$lang->ai->promptExecutionReset = 'Reset Execute Prompt'; +$lang->ai->roleTemplates = 'Manage Role Templates'; + +$lang->ai->nextStep = 'Next'; +$lang->ai->goTesting = 'Go testing'; + +$lang->ai->validate = new stdclass(); +$lang->ai->validate->noEmpty = '%s cannot be empty.'; +$lang->ai->validate->dirtyForm = 'The design step of %s has changed. Do you want to save and return it?'; +$lang->ai->validate->nameNotUnique = 'A prompt with the same name already exists, please change the name.'; + +$lang->ai->prompts = new stdclass(); +$lang->ai->prompts->common = 'Prompt'; +$lang->ai->prompts->emptyList = 'No prompts yet.'; +$lang->ai->prompts->create = 'Create Prompt'; +$lang->ai->prompts->edit = 'Edit Prompt'; +$lang->ai->prompts->id = 'ID'; +$lang->ai->prompts->name = 'Name'; +$lang->ai->prompts->description = 'Description'; +$lang->ai->prompts->createdBy = 'Creator'; +$lang->ai->prompts->createdDate = 'Created Date'; +$lang->ai->prompts->targetForm = 'Target Form'; +$lang->ai->prompts->funcDesc = 'Function Description'; +$lang->ai->prompts->deleted = 'Deleted'; +$lang->ai->prompts->stage = 'Stage'; +$lang->ai->prompts->basicInfo = 'Basic Info'; +$lang->ai->prompts->editInfo = 'Edit Info'; +$lang->ai->prompts->createdBy = 'Created By'; +$lang->ai->prompts->publishedBy = 'Published By'; +$lang->ai->prompts->draftedBy = 'Drafted By'; +$lang->ai->prompts->lastEditor = 'Last Editor'; + +$lang->ai->prompts->summary = 'There are %s prompts on this page.'; + +$lang->ai->prompts->action = new stdclass(); +$lang->ai->prompts->action->goDesignConfirm = 'The current prompt is not complete, continue designing?'; +$lang->ai->prompts->action->goDesign = 'Go designing'; +$lang->ai->prompts->action->draftConfirm = 'Once unpublished, the prompt cannot be used any further. Are you sure you want to proceed?'; +$lang->ai->prompts->action->design = 'Design'; +$lang->ai->prompts->action->test = 'Test'; +$lang->ai->prompts->action->edit = 'Edit'; +$lang->ai->prompts->action->publish = 'Publish'; +$lang->ai->prompts->action->unpublish = 'Unpublish'; +$lang->ai->prompts->action->delete = 'Delete'; +$lang->ai->prompts->action->deleteConfirm = 'Deleted prompts will be no longer available. Are you sure you want to proceed?'; +$lang->ai->prompts->action->publishSuccess = 'Publish Success'; + +/* Steps of prompt creation. */ +$lang->ai->prompts->assignRole = 'Assign Role'; +$lang->ai->prompts->selectDataSource = 'Select Data Fields'; +$lang->ai->prompts->setPurpose = 'Set Purpose'; +$lang->ai->prompts->setTargetForm = 'Set Target Form'; +$lang->ai->prompts->finalize = 'Finalize'; + +/* Role assigning. */ +$lang->ai->prompts->model = 'Model'; +$lang->ai->prompts->role = 'Role'; +$lang->ai->prompts->characterization = 'Characterization'; +$lang->ai->prompts->rolePlaceholder = '"Act as a "'; +$lang->ai->prompts->charPlaceholder = 'Detailed characterization of this role'; +$lang->ai->prompts->roleTemplate = 'Role Template'; +$lang->ai->prompts->roleTemplateTip = 'After a template is referenced, modifying the role or role description does not affect the template.'; +$lang->ai->prompts->addRoleTemplate = 'Add Role Template'; +$lang->ai->prompts->editRoleTemplate = 'Edit Role Template'; +$lang->ai->prompts->editRoleTemplateTip = 'Editing this template will not affect its previous usages in prompts.'; +$lang->ai->prompts->roleAddedSuccess = 'Role added successfully.'; +$lang->ai->prompts->roleDelConfirm = 'Deleting the role does not affect the role that is already in the prompt. Do you want to delete it?'; +$lang->ai->prompts->roleDelSuccess = 'Role deleted successfully.'; +$lang->ai->prompts->roleTemplateSave = 'Save Role Template'; +$lang->ai->prompts->roleTemplateSaveList = array(); +$lang->ai->prompts->roleTemplateSaveList['save'] = 'Save'; +$lang->ai->prompts->roleTemplateSaveList['discard'] = 'Discard'; + +/* Data source selecting. */ +$lang->ai->prompts->selectData = 'Select fields'; +$lang->ai->prompts->selectDataTip = 'Select an object and its fields will be shown below.'; +$lang->ai->prompts->selectedFormat = 'Selecting data from {0}, {1} fields selected.'; +$lang->ai->prompts->nonSelected = 'No field selected.'; +$lang->ai->prompts->sortTip = 'Sorting fields by priority is suggested.'; +$lang->ai->prompts->object = 'Object'; +$lang->ai->prompts->field = 'Field'; + +/* Purpose setting. */ +$lang->ai->prompts->purpose = 'Purpose'; +$lang->ai->prompts->purposeTip = 'What do I want it to accomplish, in order to achieve what goals?'; +$lang->ai->prompts->elaboration = 'Elaboration'; +$lang->ai->prompts->elaborationTip = 'I hope its answer draws attention to some additional requests.'; +$lang->ai->prompts->inputPreview = 'Prompt Preview'; +$lang->ai->prompts->dataPreview = 'Data Prompt Preview'; +$lang->ai->prompts->rolePreview = 'Role Prompt Preview'; +$lang->ai->prompts->promptPreview = 'Purpose Prompt Preview'; + +/* Target form selecting. */ +$lang->ai->prompts->selectTargetForm = 'Select Target Form'; +$lang->ai->prompts->selectTargetFormTip = 'Results returned from LLMs can be directly inputed into forms within ZenTao.'; +$lang->ai->prompts->goingTesting = 'Redirecting to testing page'; +$lang->ai->prompts->goingTestingFail = 'Unable to go testing, no suitable object found.'; + +/* Finalize page. */ +$lang->ai->moduleDisableTip = 'Module is automatically selected based on selected objects.'; + +/* Data source definition. */ +$lang->ai->dataSource = array(); + +$lang->ai->dataSource['my']['common'] = 'My'; +$lang->ai->dataSource['product']['common'] = 'Product'; +$lang->ai->dataSource['story']['common'] = 'Story'; +$lang->ai->dataSource['productplan']['common'] = 'Product Plan'; +$lang->ai->dataSource['release']['common'] = 'Release'; +$lang->ai->dataSource['project']['common'] = 'Project'; +$lang->ai->dataSource['execution']['common'] = 'Execution'; +$lang->ai->dataSource['task']['common'] = 'Task'; +$lang->ai->dataSource['bug']['common'] = 'Bug'; +$lang->ai->dataSource['case']['common'] = 'Test Case'; +$lang->ai->dataSource['doc']['common'] = 'Document'; + +$lang->ai->dataSource['my']['efforts']['common'] = 'Efforts'; +$lang->ai->dataSource['my']['efforts']['date'] = 'Date'; +$lang->ai->dataSource['my']['efforts']['work'] = 'Work'; +$lang->ai->dataSource['my']['efforts']['account'] = 'Account'; +$lang->ai->dataSource['my']['efforts']['consumed'] = 'Consumed'; +$lang->ai->dataSource['my']['efforts']['left'] = 'Left'; +$lang->ai->dataSource['my']['efforts']['objectID'] = 'Object'; +$lang->ai->dataSource['my']['efforts']['product'] = 'Product'; +$lang->ai->dataSource['my']['efforts']['project'] = 'Project'; +$lang->ai->dataSource['my']['efforts']['execution'] = 'Execution'; + +$lang->ai->dataSource['product']['product']['common'] = 'Product'; +$lang->ai->dataSource['product']['product']['name'] = 'Product Name'; +$lang->ai->dataSource['product']['product']['desc'] = 'Description'; +$lang->ai->dataSource['product']['modules']['common'] = 'Module'; +$lang->ai->dataSource['product']['modules']['name'] = 'Module Name'; +$lang->ai->dataSource['product']['modules']['modules'] = 'Sub Modules'; + +$lang->ai->dataSource['productplan']['productplan']['common'] = 'Product Plan'; +$lang->ai->dataSource['productplan']['productplan']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['productplan']['desc'] = 'Description'; +$lang->ai->dataSource['productplan']['productplan']['begin'] = 'Begin'; +$lang->ai->dataSource['productplan']['productplan']['end'] = 'End'; + +$lang->ai->dataSource['productplan']['stories']['common'] = 'Stories'; +$lang->ai->dataSource['productplan']['stories']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['stories']['module'] = 'Module'; +$lang->ai->dataSource['productplan']['stories']['pri'] = 'Priority'; +$lang->ai->dataSource['productplan']['stories']['estimate'] = 'Estimates'; +$lang->ai->dataSource['productplan']['stories']['status'] = 'Status'; +$lang->ai->dataSource['productplan']['stories']['stage'] = 'Stage'; + +$lang->ai->dataSource['productplan']['bugs']['common'] = 'Bugs'; +$lang->ai->dataSource['productplan']['bugs']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['bugs']['pri'] = 'Priority'; +$lang->ai->dataSource['productplan']['bugs']['status'] = 'Status'; + +$lang->ai->dataSource['release']['release']['common'] = 'Release'; +$lang->ai->dataSource['release']['release']['product'] = 'Product'; +$lang->ai->dataSource['release']['release']['name'] = 'Name'; +$lang->ai->dataSource['release']['release']['desc'] = 'Description'; +$lang->ai->dataSource['release']['release']['date'] = 'Release Date'; + +$lang->ai->dataSource['release']['stories']['common'] = 'Stories'; +$lang->ai->dataSource['release']['stories']['title'] = 'Title'; +$lang->ai->dataSource['release']['stories']['estimate'] = 'Estimates'; + +$lang->ai->dataSource['release']['bugs']['common'] = 'Bugs'; +$lang->ai->dataSource['release']['bugs']['title'] = 'Title'; + +$lang->ai->dataSource['project']['project']['common'] = 'Project'; +$lang->ai->dataSource['project']['project']['name'] = 'Name'; +$lang->ai->dataSource['project']['project']['type'] = 'Type'; +$lang->ai->dataSource['project']['project']['desc'] = 'Description'; +$lang->ai->dataSource['project']['project']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['project']['end'] = 'End'; +$lang->ai->dataSource['project']['project']['estimate'] = 'Estimates'; + +$lang->ai->dataSource['project']['programplans']['common'] = 'Program Plan'; +$lang->ai->dataSource['project']['programplans']['name'] = 'Name'; +$lang->ai->dataSource['project']['programplans']['desc'] = 'Description'; +$lang->ai->dataSource['project']['programplans']['status'] = 'Status'; +$lang->ai->dataSource['project']['programplans']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['programplans']['end'] = 'End'; +$lang->ai->dataSource['project']['programplans']['realBegan'] = 'Actual Start'; +$lang->ai->dataSource['project']['programplans']['realEnd'] = 'Actual End'; +$lang->ai->dataSource['project']['programplans']['planDuration'] = 'Plan Duration'; +$lang->ai->dataSource['project']['programplans']['progress'] = 'Progress'; +$lang->ai->dataSource['project']['programplans']['estimate'] = 'Estimates'; +$lang->ai->dataSource['project']['programplans']['consumed'] = 'Consumed'; +$lang->ai->dataSource['project']['programplans']['left'] = 'Left'; + +$lang->ai->dataSource['project']['executions']['common'] = 'Execution'; +$lang->ai->dataSource['project']['executions']['name'] = 'Name'; +$lang->ai->dataSource['project']['executions']['desc'] = 'Description'; +$lang->ai->dataSource['project']['executions']['status'] = 'Status'; +$lang->ai->dataSource['project']['executions']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['executions']['end'] = 'End'; +$lang->ai->dataSource['project']['executions']['realBegan'] = 'Actual Start'; +$lang->ai->dataSource['project']['executions']['realEnd'] = 'Actual End'; +$lang->ai->dataSource['project']['executions']['estimate'] = 'Estimates'; +$lang->ai->dataSource['project']['executions']['consumed'] = 'Consumed'; +$lang->ai->dataSource['project']['executions']['left'] = 'Left'; +$lang->ai->dataSource['project']['executions']['progress'] = 'Progress'; + +$lang->ai->dataSource['story']['story']['common'] = 'Story'; +$lang->ai->dataSource['story']['story']['title'] = 'Title'; +$lang->ai->dataSource['story']['story']['spec'] = 'Description'; +$lang->ai->dataSource['story']['story']['verify'] = 'Acceptance criteria'; +$lang->ai->dataSource['story']['story']['product'] = 'Product'; +$lang->ai->dataSource['story']['story']['module'] = 'Module'; +$lang->ai->dataSource['story']['story']['pri'] = 'Priority'; +$lang->ai->dataSource['story']['story']['category'] = 'Category'; +$lang->ai->dataSource['story']['story']['estimate'] = 'Estimated hours'; + +$lang->ai->dataSource['execution']['execution']['common'] = 'Execution'; +$lang->ai->dataSource['execution']['execution']['name'] = 'Name'; +$lang->ai->dataSource['execution']['execution']['desc'] = 'Description'; +$lang->ai->dataSource['execution']['execution']['estimate'] = 'Estimated hours'; + +$lang->ai->dataSource['execution']['tasks']['common'] = 'Task List'; +$lang->ai->dataSource['execution']['tasks']['name'] = 'Name'; +$lang->ai->dataSource['execution']['tasks']['pri'] = 'Priority'; +$lang->ai->dataSource['execution']['tasks']['status'] = 'Status'; +$lang->ai->dataSource['execution']['tasks']['estimate'] = 'Estimated hours'; +$lang->ai->dataSource['execution']['tasks']['consumed'] = 'Consumed hours'; +$lang->ai->dataSource['execution']['tasks']['left'] = 'Remaining hours'; +$lang->ai->dataSource['execution']['tasks']['progress'] = 'Progress'; +$lang->ai->dataSource['execution']['tasks']['estStarted'] = 'Estimated start date'; +$lang->ai->dataSource['execution']['tasks']['realStarted'] = 'Actual start date'; +$lang->ai->dataSource['execution']['tasks']['finishedDate']= 'Finished date'; +$lang->ai->dataSource['execution']['tasks']['closedReason']= 'Closing reason'; + +$lang->ai->dataSource['task']['task']['common'] = 'Task'; +$lang->ai->dataSource['task']['task']['name'] = 'Name'; +$lang->ai->dataSource['task']['task']['desc'] = 'Description'; +$lang->ai->dataSource['task']['task']['pri'] = 'Priority'; +$lang->ai->dataSource['task']['task']['status'] = 'Status'; +$lang->ai->dataSource['task']['task']['estimate'] = 'Estimates'; +$lang->ai->dataSource['task']['task']['consumed'] = 'Consumed'; +$lang->ai->dataSource['task']['task']['left'] = 'Left'; +$lang->ai->dataSource['task']['task']['progress'] = 'Progress'; +$lang->ai->dataSource['task']['task']['estStarted'] = 'Start Date'; +$lang->ai->dataSource['task']['task']['realStarted'] = 'Actual Start'; + +$lang->ai->dataSource['case']['case']['common'] = 'Test Case'; +$lang->ai->dataSource['case']['case']['title'] = 'Title'; +$lang->ai->dataSource['case']['case']['precondition'] = 'Prerequisite'; +$lang->ai->dataSource['case']['case']['scene'] = 'Scene'; +$lang->ai->dataSource['case']['case']['product'] = 'Product'; +$lang->ai->dataSource['case']['case']['module'] = 'Module'; +$lang->ai->dataSource['case']['case']['pri'] = 'Priority'; +$lang->ai->dataSource['case']['case']['type'] = 'Type'; +$lang->ai->dataSource['case']['case']['lastRunResult'] = 'Result'; +$lang->ai->dataSource['case']['case']['status'] = 'Status'; + +$lang->ai->dataSource['case']['steps']['common'] = 'Steps'; +$lang->ai->dataSource['case']['steps']['desc'] = 'Description'; +$lang->ai->dataSource['case']['steps']['expect'] = 'Expectation'; + +$lang->ai->dataSource['bug']['bug']['common'] = 'Bug'; +$lang->ai->dataSource['bug']['bug']['title'] = 'Title'; +$lang->ai->dataSource['bug']['bug']['steps'] = 'Repro Steps'; +$lang->ai->dataSource['bug']['bug']['severity'] = 'Severity'; +$lang->ai->dataSource['bug']['bug']['pri'] = 'Priority'; +$lang->ai->dataSource['bug']['bug']['status'] = 'Status'; +$lang->ai->dataSource['bug']['bug']['confirmed'] = 'Confirmed'; +$lang->ai->dataSource['bug']['bug']['type'] = 'Type'; + +$lang->ai->dataSource['doc']['doc']['common'] = 'Document'; +$lang->ai->dataSource['doc']['doc']['title'] = 'Title'; +$lang->ai->dataSource['doc']['doc']['content'] = 'Text'; +$lang->ai->dataSource['doc']['doc']['addedBy'] = 'Created By'; +$lang->ai->dataSource['doc']['doc']['addedDate'] = 'Created Date'; +$lang->ai->dataSource['doc']['doc']['editedBy'] = 'Edited By'; +$lang->ai->dataSource['doc']['doc']['editedDate'] = 'Edited Date'; + +/* Target form definition. See `$config->ai->targetForm`. */ +$lang->ai->targetForm = array(); +$lang->ai->targetForm['product']['common'] = 'Product'; +$lang->ai->targetForm['story']['common'] = 'Story'; +$lang->ai->targetForm['productplan']['common'] = 'Plan'; +$lang->ai->targetForm['projectrelease']['common'] = 'Release'; +$lang->ai->targetForm['project']['common'] = 'Project'; +$lang->ai->targetForm['execution']['common'] = 'Execution'; +$lang->ai->targetForm['task']['common'] = 'Task'; +$lang->ai->targetForm['testcase']['common'] = 'Test Case'; +$lang->ai->targetForm['bug']['common'] = 'Bug'; +$lang->ai->targetForm['doc']['common'] = 'Document'; + +$lang->ai->targetForm['product']['tree/managechild'] = 'Manage Modules'; +$lang->ai->targetForm['product']['doc/create'] = 'Create Doc'; + +$lang->ai->targetForm['story']['create'] = 'Create Story'; +$lang->ai->targetForm['story']['batchcreate'] = 'Batch Create Story'; +$lang->ai->targetForm['story']['change'] = 'Change Story'; +$lang->ai->targetForm['story']['totask'] = 'Story to Task'; +$lang->ai->targetForm['story']['testcasecreate'] = 'Create Test Case'; +$lang->ai->targetForm['story']['subdivide'] = 'Subdivide Story'; + +$lang->ai->targetForm['productplan']['edit'] = 'Edit Plan'; +$lang->ai->targetForm['productplan']['create'] = 'Create Sub-Plan'; + +$lang->ai->targetForm['projectrelease']['doc/create'] = 'Create Doc'; + +$lang->ai->targetForm['project']['risk/create'] = 'Create Risk'; +$lang->ai->targetForm['project']['issue/create'] = 'Create Issue'; +$lang->ai->targetForm['project']['doc/create'] = 'Create Doc'; +$lang->ai->targetForm['project']['programplan/create'] = 'Set Program Plan'; + +$lang->ai->targetForm['execution']['batchcreatetask'] = 'Batch Create Task'; +$lang->ai->targetForm['execution']['createtestreport'] = 'Create Test Report'; +$lang->ai->targetForm['execution']['createqa'] = 'Create QA'; +$lang->ai->targetForm['execution']['createrisk'] = 'Create Risk'; +$lang->ai->targetForm['execution']['createissue'] = 'Create Issue'; + +$lang->ai->targetForm['task']['edit'] = 'Edit Task'; +$lang->ai->targetForm['task']['batchcreate'] = 'Batch Create Task'; + +$lang->ai->targetForm['testcase']['edit'] = 'Edit Test Case'; +$lang->ai->targetForm['testcase']['createscript'] = 'Create Script'; + +$lang->ai->targetForm['bug']['edit'] = 'Edit Bug'; +$lang->ai->targetForm['bug']['story/create'] = 'Bug to Story'; +$lang->ai->targetForm['bug']['testcase/create'] = 'Bug to Test Case'; + +$lang->ai->targetForm['doc']['create'] = 'Create Doc'; +$lang->ai->targetForm['doc']['edit'] = 'Edit Doc'; + +$lang->ai->prompts->statuses = array(); +$lang->ai->prompts->statuses[''] = 'All'; +$lang->ai->prompts->statuses['draft'] = 'Draft'; +$lang->ai->prompts->statuses['active'] = 'Active'; + +$lang->ai->prompts->modules = array(); +$lang->ai->prompts->modules[''] = 'All'; +// $lang->ai->prompts->modules['my'] = 'My'; +$lang->ai->prompts->modules['product'] = 'Product'; +$lang->ai->prompts->modules['project'] = 'Project'; +$lang->ai->prompts->modules['story'] = 'Story'; +$lang->ai->prompts->modules['productplan'] = 'Product Plan'; +// $lang->ai->prompts->modules['release'] = 'Release'; +$lang->ai->prompts->modules['execution'] = 'Execution'; +$lang->ai->prompts->modules['task'] = 'Task'; +$lang->ai->prompts->modules['case'] = 'Test Case'; +$lang->ai->prompts->modules['bug'] = 'Bug'; +$lang->ai->prompts->modules['doc'] = 'Document'; + +$lang->ai->conversations = new stdclass(); +$lang->ai->conversations->common = 'Conversations'; + +$lang->ai->models = new stdclass(); +$lang->ai->models->title = 'Language Model Configuration'; +$lang->ai->models->common = 'Language Model'; +$lang->ai->models->type = 'Model'; +$lang->ai->models->vendor = 'Vendor'; +$lang->ai->models->key = 'API Key'; +$lang->ai->models->resource = 'Resource'; +$lang->ai->models->deployment = 'Deployment'; +$lang->ai->models->proxyType = 'Proxy Type'; +$lang->ai->models->proxyAddr = 'Proxy Address'; +$lang->ai->models->description = 'Description'; +$lang->ai->models->testConnection = 'Test Connection'; +$lang->ai->models->unconfigured = 'Unconfigured'; +$lang->ai->models->edit = 'Edit Parameters'; +$lang->ai->models->concealTip = 'Visible when editing'; +$lang->ai->models->upgradeBiz = 'For more AI features, all in ZenTao Biz.'; +$lang->ai->models->noModelError = 'No language model is configured, please contact the administrator.'; + +$lang->ai->models->testConnectionResult = new stdclass(); +$lang->ai->models->testConnectionResult->success = 'Successfully connected'; +$lang->ai->models->testConnectionResult->fail = 'Failed to connect'; +$lang->ai->models->testConnectionResult->failFormat = 'Failed to connect: %s'; + +$lang->ai->models->statusList = array(); +$lang->ai->models->statusList['on'] = 'Enable'; +$lang->ai->models->statusList['off'] = 'Disable'; + +$lang->ai->models->typeList = array(); +$lang->ai->models->typeList['openai-gpt35'] = 'OpenAI / GPT-3.5'; +// $lang->ai->models->typeList['azure-gpt35'] = 'Azure / GPT-3.5'; + +$lang->ai->models->openaiVendorList = array(); +$lang->ai->models->openaiVendorList['openai'] = 'OpenAI'; +$lang->ai->models->openaiVendorList['azure'] = 'Azure'; + +$lang->ai->models->proxyTypes = array(); +$lang->ai->models->proxyTypes[''] = 'No Proxy'; +$lang->ai->models->proxyTypes['socks5'] = 'SOCKS5'; + +$lang->ai->models->promptFor = 'Prompt for %s'; + +$lang->ai->designStepNav = array(); +$lang->ai->designStepNav['assignrole'] = 'Specify Role'; +$lang->ai->designStepNav['selectdatasource'] = 'Select Object'; +$lang->ai->designStepNav['setpurpose'] = 'Confirm Action'; +$lang->ai->designStepNav['settargetform'] = 'Process Result'; +$lang->ai->designStepNav['finalize'] = 'Ready to Publish'; + +$lang->ai->dataTypeDesc = '%s is %s type, %s'; + +$lang->ai->dataType = new stdclass(); +$lang->ai->dataType->pri = new stdClass(); +$lang->ai->dataType->pri->type = 'numeric'; +$lang->ai->dataType->pri->desc = '1 is the highest priority, 4 is the lowest priority.'; + +$lang->ai->dataType->estimate = new stdClass(); +$lang->ai->dataType->estimate->type = 'numeric'; +$lang->ai->dataType->estimate->desc = 'Unit is in hours.'; + +$lang->ai->dataType->consumed = $lang->ai->dataType->estimate; +$lang->ai->dataType->left = $lang->ai->dataType->estimate; + +$lang->ai->dataType->progress = new stdClass(); +$lang->ai->dataType->progress->type = 'percentage'; +$lang->ai->dataType->progress->desc = '0 means not started, 100 means completed.'; + +$lang->ai->dataType->datetime = new stdClass(); +$lang->ai->dataType->datetime->type = 'datetime'; +$lang->ai->dataType->datetime->desc = 'Format is: 1970-01-01 00:00:01, or leave it blank.'; + +$lang->ai->dataType->estStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->realStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->finishedDate = $lang->ai->dataType->datetime; + +$lang->ai->demoData = new stdclass(); +$lang->ai->demoData->notExist = 'The demo data does not exist for now.'; +$lang->ai->demoData->story = array( + 'story' => array + ( + 'title' => 'Develop an online learning platform', + 'spec' => 'We need to develop an online learning platform that provides course management, student management, teacher management, and other functions.', + 'verify' => '1. All functions can operate properly without any obvious errors or abnormalities.2. The interface is aesthetically pleasing and user-friendly.3. The platform can meet user needs and has a high level of user satisfaction.4. The code has good quality, with clear structure and easy maintenance.', + 'module' => 7, + 'pri' => 1, + 'estimate' => 1, + 'product' => 1, + 'category' => 'feature', + ), +); +$lang->ai->demoData->execution = array +( + 'execution' => array( + 'name' => 'Online Learning Platform Software Development', + 'desc' => 'This plan aims to develop an online learning platform software that provides accessible learning resources, including text, video, and audio, as well as some learning tools such as exams, tests, and discussion forums.', + 'estimate' => 7, + ), + 'tasks' => array( + 0 => + array( + 'name' => 'Technology Selection', + 'pri' => 1, + 'status' => 'done', + 'estimate' => 1, + 'consumed' => 1, + 'left' => 0, + 'progress' => 100, + 'estStarted' => '2023-07-02 00:00:00', + 'realStarted' => '2023-07-02 00:00:00', + 'finishedDate' => '2023-07-02 00:00:00', + 'closedReason' => 'Completed', + ), + 1 => + array( + 'name' => 'UI Design', + 'pri' => 1, + 'status' => 'doing', + 'estimate' => 2, + 'consumed' => 1, + 'left' => 1, + 'progress' => 50, + 'estStarted' => '2023-07-03 00:00:00', + 'realStarted' => '2023-07-03 00:00:00', + 'finishedDate' => '', + 'closedReason' => '', + ), + 2 => + array( + 'name' => 'Development', + 'pri' => 1, + 'status' => 'wait', + 'estimate' => 1, + 'consumed' => 0, + 'left' => 1, + 'progress' => 0, + 'estStarted' => '', + 'realStarted' => '', + 'finishedDate' => '', + 'closedReason' => '', + ), + ), +); + +/* Forms as JSON Schemas. */ +$lang->ai->formSchema = array(); +$lang->ai->formSchema['story']['create'] = new stdclass(); +$lang->ai->formSchema['story']['create']->title = 'Story'; +$lang->ai->formSchema['story']['create']->type = 'object'; +$lang->ai->formSchema['story']['create']->properties = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->spec = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->verify = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->title->description = 'Title of story'; +$lang->ai->formSchema['story']['create']->properties->spec->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->spec->description = 'Description of story'; +$lang->ai->formSchema['story']['create']->properties->verify->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->verify->description = 'Acceptance criteria of story'; +$lang->ai->formSchema['story']['create']->required = array('title', 'spec', 'verify'); +$lang->ai->formSchema['story']['change'] = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['story']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->title = 'Stories'; +$lang->ai->formSchema['story']['batchcreate']->type = 'object'; +$lang->ai->formSchema['story']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories->type = 'array'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->description = 'Stories'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->items = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['productplan']['create'] = new stdclass(); +$lang->ai->formSchema['productplan']['create']->title = 'Product Plan'; +$lang->ai->formSchema['productplan']['create']->type = 'object'; +$lang->ai->formSchema['productplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->title->description = 'Title of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->begin->type = 'date'; +$lang->ai->formSchema['productplan']['create']->properties->begin->description = 'Begin date of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->end->type = 'date'; +$lang->ai->formSchema['productplan']['create']->properties->end->description = 'End date of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->desc->description = 'Description of product plan'; +$lang->ai->formSchema['productplan']['create']->required = array('title', 'begin', 'end'); +$lang->ai->formSchema['productplan']['edit'] = $lang->ai->formSchema['productplan']['create']; + +$lang->ai->formSchema['task']['create'] = new stdclass(); +$lang->ai->formSchema['task']['create']->title = 'Task'; +$lang->ai->formSchema['task']['create']->type = 'object'; +$lang->ai->formSchema['task']['create']->properties = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->name = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->estimate = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->type->description = 'Type of task'; +$lang->ai->formSchema['task']['create']->properties->type->enum = array('design', 'devel', 'request', 'test', 'study', 'discuss', 'ui', 'affair', 'misc'); +$lang->ai->formSchema['task']['create']->properties->name->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->name->description = 'Name of task'; +$lang->ai->formSchema['task']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->desc->description = 'Description of task'; +$lang->ai->formSchema['task']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->pri->description = 'Priority of task'; +$lang->ai->formSchema['task']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['task']['create']->properties->estimate->type = 'number'; +$lang->ai->formSchema['task']['create']->properties->estimate->description = 'Estimated hours of task'; +$lang->ai->formSchema['task']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->begin->description = 'Begin date of task'; +$lang->ai->formSchema['task']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->end->description = 'End date of task'; +$lang->ai->formSchema['task']['create']->required = array('type', 'name'); +$lang->ai->formSchema['task']['edit'] = $lang->ai->formSchema['task']['create']; + +$lang->ai->formSchema['task']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->title = 'Tasks'; +$lang->ai->formSchema['task']['batchcreate']->type = 'object'; +$lang->ai->formSchema['task']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->type = 'array'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->description = 'Tasks'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items = $lang->ai->formSchema['task']['create']; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->estStarted = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->deadline = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end; +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin); +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end); + +$lang->ai->formSchema['bug']['create'] = new stdclass(); +$lang->ai->formSchema['bug']['create']->title = 'Bug'; +$lang->ai->formSchema['bug']['create']->type = 'object'; +$lang->ai->formSchema['bug']['create']->properties = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->severity = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->openedBuild = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->title->description = 'Title of bug'; +$lang->ai->formSchema['bug']['create']->properties->steps->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->steps->description = 'Repro steps of bug'; +$lang->ai->formSchema['bug']['create']->properties->severity->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->severity->description = 'Severity of bug'; +$lang->ai->formSchema['bug']['create']->properties->severity->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->pri->description = 'Priority of bug'; +$lang->ai->formSchema['bug']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->openedBuild->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->description = 'Affected builds of bug'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->enum = array('trunk'); +$lang->ai->formSchema['bug']['create']->required = array('title', 'steps', 'severity', 'pri', 'openedBuild'); +$lang->ai->formSchema['bug']['edit'] = $lang->ai->formSchema['bug']['create']; + +$lang->ai->formSchema['testcase']['create'] = new stdclass(); +$lang->ai->formSchema['testcase']['create']->title = 'Test Case'; +$lang->ai->formSchema['testcase']['create']->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->stage = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->precondition = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->type->description = 'Type of test case'; +$lang->ai->formSchema['testcase']['create']->properties->type->enum = array('feature', 'performance', 'config', 'install', 'security', 'interface', 'unit', 'other'); +$lang->ai->formSchema['testcase']['create']->properties->stage->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->stage->description = 'Stage of test case'; +$lang->ai->formSchema['testcase']['create']->properties->stage->enum = array('unittest', 'feature', 'intergrate', 'system', 'smoke', 'bvt'); +$lang->ai->formSchema['testcase']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->title->description = 'Title of test case'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->description = 'Precondition of test case'; +$lang->ai->formSchema['testcase']['create']->properties->steps->type = 'array'; +$lang->ai->formSchema['testcase']['create']->properties->steps->description = 'Steps of test case'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->description = 'Step description'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->description = 'Expectation of step'; +$lang->ai->formSchema['testcase']['create']->required = array('type', 'title', 'steps'); +$lang->ai->formSchema['testcase']['edit'] = $lang->ai->formSchema['testcase']['create']; + +$lang->ai->formSchema['testreport']['create'] = new stdclass(); +$lang->ai->formSchema['testreport']['create']->title = 'Test Report'; +$lang->ai->formSchema['testreport']['create']->type = 'object'; +$lang->ai->formSchema['testreport']['create']->properties = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->report = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->begin->description = 'Begin date of testing'; +$lang->ai->formSchema['testreport']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->end->description = 'End date of testing'; +$lang->ai->formSchema['testreport']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->title->description = 'Title of test report'; +$lang->ai->formSchema['testreport']['create']->properties->report->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->report->description = 'Report content'; +$lang->ai->formSchema['testreport']['create']->required = array('begin', 'end', 'title', 'report'); +$lang->ai->formSchema['execution']['testreport'] = $lang->ai->formSchema['testreport']['create']; + +$lang->ai->formSchema['doc']['edit'] = new stdclass(); +$lang->ai->formSchema['doc']['edit']->title = 'Document'; +$lang->ai->formSchema['doc']['edit']->type = 'object'; +$lang->ai->formSchema['doc']['edit']->properties = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->content = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->title->description = 'Title of the document'; +$lang->ai->formSchema['doc']['edit']->properties->content->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->content->description = 'Content of the document'; +$lang->ai->formSchema['doc']['edit']->required = array('title', 'content'); + +$lang->ai->formSchema['tree']['browse'] = new stdclass(); +$lang->ai->formSchema['tree']['browse']->title = 'Modules'; +$lang->ai->formSchema['tree']['browse']->type = 'object'; +$lang->ai->formSchema['tree']['browse']->properties = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->type = 'array'; +$lang->ai->formSchema['tree']['browse']->properties->modules->title = 'Modules'; +$lang->ai->formSchema['tree']['browse']->properties->modules->items = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->items->type = 'string'; +$lang->ai->formSchema['tree']['browse']->required = array('modules'); + +$lang->ai->formSchema['programplan']['create'] = new stdclass(); +$lang->ai->formSchema['programplan']['create']->title = 'Program Plan'; +$lang->ai->formSchema['programplan']['create']->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->type = 'array'; +$lang->ai->formSchema['programplan']['create']->properties->stages->title = 'Plans'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->description = 'Name of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->description = 'Attribute of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->enum = array('request', 'design', 'dev', 'qa', 'release', 'review', 'other'); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->type = 'boolean'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->description = 'Is milestone?'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->description = 'Begin date of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->description = 'End date of stage'; +$lang->ai->formSchema['programplan']['create']->required = array('stages'); + +$lang->ai->promptMenu = new stdclass(); +$lang->ai->promptMenu->dropdownTitle = 'AI'; + +$lang->ai->dataInject = new stdclass(); +$lang->ai->dataInject->success = 'Prompt execution results are filled in.'; +$lang->ai->dataInject->fail = 'Failed to fill in prompt execution results.'; + +$lang->ai->execute = new stdclass(); +$lang->ai->execute->loading = 'Prompt executing...'; +$lang->ai->execute->auditing = 'Getting ready for auditing...'; +$lang->ai->execute->success = 'Prompt executed.'; +$lang->ai->execute->fail = 'Prompt execution failed.'; +$lang->ai->execute->failFormat = 'Prompt execution failed: %s.'; +$lang->ai->execute->failReasons = array(); +$lang->ai->execute->failReasons['noPrompt'] = 'unable to get prompt'; +$lang->ai->execute->failReasons['noObjectData'] = 'unable to get object data'; +$lang->ai->execute->failReasons['noResponse'] = 'no response from external service'; +$lang->ai->execute->failReasons['noTargetForm'] = 'unable to get target form or its required fields'; +$lang->ai->execute->executeErrors = array(); +$lang->ai->execute->executeErrors[-1] = 'unable to get prompt'; +$lang->ai->execute->executeErrors[-2] = 'unable to get object data'; +$lang->ai->execute->executeErrors[-3] = 'failed to serialize object data'; +$lang->ai->execute->executeErrors[-4] = 'unable to get target form schema'; +$lang->ai->execute->executeErrors[-5] = 'request failed or API returned error'; + +$lang->ai->audit = new stdclass(); +$lang->ai->audit->designPrompt = 'Prompt Design'; +$lang->ai->audit->afterSave = 'After saving,'; +$lang->ai->audit->regenerate = 'Regenerate'; +$lang->ai->audit->exit = 'Exit Audit'; + +$lang->ai->audit->backLocationList = array(); +$lang->ai->audit->backLocationList[0] = 'back to audit page.'; +$lang->ai->audit->backLocationList[1] = 'back to audit page and regenerate.'; diff --git a/module/ai/lang/en.php b/module/ai/lang/en.php new file mode 100644 index 0000000000..e3eb75c843 --- /dev/null +++ b/module/ai/lang/en.php @@ -0,0 +1,796 @@ + + * @package ai + * @link https://www.zentao.net + */ +$lang->ai->common = 'AI'; + +/* Definitions of table columns, used to sprintf error messages to dao::$errors. */ +$lang->prompt = new stdclass(); +$lang->prompt->name = 'Name'; +$lang->prompt->desc = 'Description'; +$lang->prompt->model = 'Model'; +$lang->prompt->module = 'Module'; +$lang->prompt->source = 'Data Source'; +$lang->prompt->targetForm = 'Target Form'; +$lang->prompt->purpose = 'Purpose'; +$lang->prompt->elaboration = 'Elaboration'; +$lang->prompt->role = 'Role'; +$lang->prompt->characterization = 'Characterization'; +$lang->prompt->status = 'Status'; +$lang->prompt->createdBy = 'Created By'; +$lang->prompt->createdDate = 'Created Date'; +$lang->prompt->editedBy = 'Edited By'; +$lang->prompt->editedDate = 'Edited Date'; +$lang->prompt->deleted = 'Deleted'; + +/* Lang for privs, keys are paired with privlang items. */ +$lang->ai->modelBrowse = 'Browse Models'; +$lang->ai->modelEdit = 'Edit Models'; +$lang->ai->modelTestConnection = 'Test Model Connection'; +$lang->ai->promptCreate = 'Create Prompt'; +$lang->ai->promptEdit = 'Edit Prompt'; +$lang->ai->promptDelete = 'Delete Prompt'; +$lang->ai->promptAssignRole = 'Assign Prompt Role'; +$lang->ai->promptSelectDataSource = 'Select Prompt Data'; +$lang->ai->promptSetPurpose = 'Set Prompt Purpose'; +$lang->ai->promptSetTargetForm = 'Set Prompt Target Form'; +$lang->ai->promptFinalize = 'Finalize Prompt'; +$lang->ai->promptAudit = 'Audit Prompt'; +$lang->ai->promptPublish = 'Publish Prompt'; +$lang->ai->promptUnpublish = 'Unpublish Prompt'; +$lang->ai->promptBrowse = 'Browse Prompts'; +$lang->ai->promptView = 'View Prompt'; +$lang->ai->promptExecute = 'Execute Prompt'; +$lang->ai->promptExecutionReset = 'Reset Execute Prompt'; +$lang->ai->roleTemplates = 'Manage Role Templates'; + +$lang->ai->nextStep = 'Next'; +$lang->ai->goTesting = 'Go testing'; + +$lang->ai->validate = new stdclass(); +$lang->ai->validate->noEmpty = '%s cannot be empty.'; +$lang->ai->validate->dirtyForm = 'The design step of %s has changed. Do you want to save and return it?'; +$lang->ai->validate->nameNotUnique = 'A prompt with the same name already exists, please change the name.'; + +$lang->ai->prompts = new stdclass(); +$lang->ai->prompts->common = 'Prompt'; +$lang->ai->prompts->emptyList = 'No prompts yet.'; +$lang->ai->prompts->create = 'Create Prompt'; +$lang->ai->prompts->edit = 'Edit Prompt'; +$lang->ai->prompts->id = 'ID'; +$lang->ai->prompts->name = 'Name'; +$lang->ai->prompts->description = 'Description'; +$lang->ai->prompts->createdBy = 'Creator'; +$lang->ai->prompts->createdDate = 'Created Date'; +$lang->ai->prompts->targetForm = 'Target Form'; +$lang->ai->prompts->funcDesc = 'Function Description'; +$lang->ai->prompts->deleted = 'Deleted'; +$lang->ai->prompts->stage = 'Stage'; +$lang->ai->prompts->basicInfo = 'Basic Info'; +$lang->ai->prompts->editInfo = 'Edit Info'; +$lang->ai->prompts->createdBy = 'Created By'; +$lang->ai->prompts->publishedBy = 'Published By'; +$lang->ai->prompts->draftedBy = 'Drafted By'; +$lang->ai->prompts->lastEditor = 'Last Editor'; + +$lang->ai->prompts->summary = 'There are %s prompts on this page.'; + +$lang->ai->prompts->action = new stdclass(); +$lang->ai->prompts->action->goDesignConfirm = 'The current prompt is not complete, continue designing?'; +$lang->ai->prompts->action->goDesign = 'Go designing'; +$lang->ai->prompts->action->draftConfirm = 'Once unpublished, the prompt cannot be used any further. Are you sure you want to proceed?'; +$lang->ai->prompts->action->design = 'Design'; +$lang->ai->prompts->action->test = 'Test'; +$lang->ai->prompts->action->edit = 'Edit'; +$lang->ai->prompts->action->publish = 'Publish'; +$lang->ai->prompts->action->unpublish = 'Unpublish'; +$lang->ai->prompts->action->delete = 'Delete'; +$lang->ai->prompts->action->deleteConfirm = 'Deleted prompts will be no longer available. Are you sure you want to proceed?'; +$lang->ai->prompts->action->publishSuccess = 'Publish Success'; + +/* Steps of prompt creation. */ +$lang->ai->prompts->assignRole = 'Assign Role'; +$lang->ai->prompts->selectDataSource = 'Select Data Fields'; +$lang->ai->prompts->setPurpose = 'Set Purpose'; +$lang->ai->prompts->setTargetForm = 'Set Target Form'; +$lang->ai->prompts->finalize = 'Finalize'; + +/* Role assigning. */ +$lang->ai->prompts->model = 'Model'; +$lang->ai->prompts->role = 'Role'; +$lang->ai->prompts->characterization = 'Characterization'; +$lang->ai->prompts->rolePlaceholder = '"Act as a "'; +$lang->ai->prompts->charPlaceholder = 'Detailed characterization of this role'; +$lang->ai->prompts->roleTemplate = 'Role Template'; +$lang->ai->prompts->roleTemplateTip = 'After a template is referenced, modifying the role or role description does not affect the template.'; +$lang->ai->prompts->addRoleTemplate = 'Add Role Template'; +$lang->ai->prompts->editRoleTemplate = 'Edit Role Template'; +$lang->ai->prompts->editRoleTemplateTip = 'Editing this template will not affect its previous usages in prompts.'; +$lang->ai->prompts->roleAddedSuccess = 'Role added successfully.'; +$lang->ai->prompts->roleDelConfirm = 'Deleting the role does not affect the role that is already in the prompt. Do you want to delete it?'; +$lang->ai->prompts->roleDelSuccess = 'Role deleted successfully.'; +$lang->ai->prompts->roleTemplateSave = 'Save Role Template'; +$lang->ai->prompts->roleTemplateSaveList = array(); +$lang->ai->prompts->roleTemplateSaveList['save'] = 'Save'; +$lang->ai->prompts->roleTemplateSaveList['discard'] = 'Discard'; + +/* Data source selecting. */ +$lang->ai->prompts->selectData = 'Select fields'; +$lang->ai->prompts->selectDataTip = 'Select an object and its fields will be shown below.'; +$lang->ai->prompts->selectedFormat = 'Selecting data from {0}, {1} fields selected.'; +$lang->ai->prompts->nonSelected = 'No field selected.'; +$lang->ai->prompts->sortTip = 'Sorting fields by priority is suggested.'; +$lang->ai->prompts->object = 'Object'; +$lang->ai->prompts->field = 'Field'; + +/* Purpose setting. */ +$lang->ai->prompts->purpose = 'Purpose'; +$lang->ai->prompts->purposeTip = 'What do I want it to accomplish, in order to achieve what goals?'; +$lang->ai->prompts->elaboration = 'Elaboration'; +$lang->ai->prompts->elaborationTip = 'I hope its answer draws attention to some additional requests.'; +$lang->ai->prompts->inputPreview = 'Prompt Preview'; +$lang->ai->prompts->dataPreview = 'Data Prompt Preview'; +$lang->ai->prompts->rolePreview = 'Role Prompt Preview'; +$lang->ai->prompts->promptPreview = 'Purpose Prompt Preview'; + +/* Target form selecting. */ +$lang->ai->prompts->selectTargetForm = 'Select Target Form'; +$lang->ai->prompts->selectTargetFormTip = 'Results returned from LLMs can be directly inputed into forms within ZenTao.'; +$lang->ai->prompts->goingTesting = 'Redirecting to testing page'; +$lang->ai->prompts->goingTestingFail = 'Unable to go testing, no suitable object found.'; + +/* Finalize page. */ +$lang->ai->moduleDisableTip = 'Module is automatically selected based on selected objects.'; + +/* Data source definition. */ +$lang->ai->dataSource = array(); + +$lang->ai->dataSource['my']['common'] = 'My'; +$lang->ai->dataSource['product']['common'] = 'Product'; +$lang->ai->dataSource['story']['common'] = 'Story'; +$lang->ai->dataSource['productplan']['common'] = 'Product Plan'; +$lang->ai->dataSource['release']['common'] = 'Release'; +$lang->ai->dataSource['project']['common'] = 'Project'; +$lang->ai->dataSource['execution']['common'] = 'Execution'; +$lang->ai->dataSource['task']['common'] = 'Task'; +$lang->ai->dataSource['bug']['common'] = 'Bug'; +$lang->ai->dataSource['case']['common'] = 'Test Case'; +$lang->ai->dataSource['doc']['common'] = 'Document'; + +$lang->ai->dataSource['my']['efforts']['common'] = 'Efforts'; +$lang->ai->dataSource['my']['efforts']['date'] = 'Date'; +$lang->ai->dataSource['my']['efforts']['work'] = 'Work'; +$lang->ai->dataSource['my']['efforts']['account'] = 'Account'; +$lang->ai->dataSource['my']['efforts']['consumed'] = 'Consumed'; +$lang->ai->dataSource['my']['efforts']['left'] = 'Left'; +$lang->ai->dataSource['my']['efforts']['objectID'] = 'Object'; +$lang->ai->dataSource['my']['efforts']['product'] = 'Product'; +$lang->ai->dataSource['my']['efforts']['project'] = 'Project'; +$lang->ai->dataSource['my']['efforts']['execution'] = 'Execution'; + +$lang->ai->dataSource['product']['product']['common'] = 'Product'; +$lang->ai->dataSource['product']['product']['name'] = 'Product Name'; +$lang->ai->dataSource['product']['product']['desc'] = 'Description'; +$lang->ai->dataSource['product']['modules']['common'] = 'Module'; +$lang->ai->dataSource['product']['modules']['name'] = 'Module Name'; +$lang->ai->dataSource['product']['modules']['modules'] = 'Sub Modules'; + +$lang->ai->dataSource['productplan']['productplan']['common'] = 'Product Plan'; +$lang->ai->dataSource['productplan']['productplan']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['productplan']['desc'] = 'Description'; +$lang->ai->dataSource['productplan']['productplan']['begin'] = 'Begin'; +$lang->ai->dataSource['productplan']['productplan']['end'] = 'End'; + +$lang->ai->dataSource['productplan']['stories']['common'] = 'Stories'; +$lang->ai->dataSource['productplan']['stories']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['stories']['module'] = 'Module'; +$lang->ai->dataSource['productplan']['stories']['pri'] = 'Priority'; +$lang->ai->dataSource['productplan']['stories']['estimate'] = 'Estimates'; +$lang->ai->dataSource['productplan']['stories']['status'] = 'Status'; +$lang->ai->dataSource['productplan']['stories']['stage'] = 'Stage'; + +$lang->ai->dataSource['productplan']['bugs']['common'] = 'Bugs'; +$lang->ai->dataSource['productplan']['bugs']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['bugs']['pri'] = 'Priority'; +$lang->ai->dataSource['productplan']['bugs']['status'] = 'Status'; + +$lang->ai->dataSource['release']['release']['common'] = 'Release'; +$lang->ai->dataSource['release']['release']['product'] = 'Product'; +$lang->ai->dataSource['release']['release']['name'] = 'Name'; +$lang->ai->dataSource['release']['release']['desc'] = 'Description'; +$lang->ai->dataSource['release']['release']['date'] = 'Release Date'; + +$lang->ai->dataSource['release']['stories']['common'] = 'Stories'; +$lang->ai->dataSource['release']['stories']['title'] = 'Title'; +$lang->ai->dataSource['release']['stories']['estimate'] = 'Estimates'; + +$lang->ai->dataSource['release']['bugs']['common'] = 'Bugs'; +$lang->ai->dataSource['release']['bugs']['title'] = 'Title'; + +$lang->ai->dataSource['project']['project']['common'] = 'Project'; +$lang->ai->dataSource['project']['project']['name'] = 'Name'; +$lang->ai->dataSource['project']['project']['type'] = 'Type'; +$lang->ai->dataSource['project']['project']['desc'] = 'Description'; +$lang->ai->dataSource['project']['project']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['project']['end'] = 'End'; +$lang->ai->dataSource['project']['project']['estimate'] = 'Estimates'; + +$lang->ai->dataSource['project']['programplans']['common'] = 'Program Plan'; +$lang->ai->dataSource['project']['programplans']['name'] = 'Name'; +$lang->ai->dataSource['project']['programplans']['desc'] = 'Description'; +$lang->ai->dataSource['project']['programplans']['status'] = 'Status'; +$lang->ai->dataSource['project']['programplans']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['programplans']['end'] = 'End'; +$lang->ai->dataSource['project']['programplans']['realBegan'] = 'Actual Start'; +$lang->ai->dataSource['project']['programplans']['realEnd'] = 'Actual End'; +$lang->ai->dataSource['project']['programplans']['planDuration'] = 'Plan Duration'; +$lang->ai->dataSource['project']['programplans']['progress'] = 'Progress'; +$lang->ai->dataSource['project']['programplans']['estimate'] = 'Estimates'; +$lang->ai->dataSource['project']['programplans']['consumed'] = 'Consumed'; +$lang->ai->dataSource['project']['programplans']['left'] = 'Left'; + +$lang->ai->dataSource['project']['executions']['common'] = 'Execution'; +$lang->ai->dataSource['project']['executions']['name'] = 'Name'; +$lang->ai->dataSource['project']['executions']['desc'] = 'Description'; +$lang->ai->dataSource['project']['executions']['status'] = 'Status'; +$lang->ai->dataSource['project']['executions']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['executions']['end'] = 'End'; +$lang->ai->dataSource['project']['executions']['realBegan'] = 'Actual Start'; +$lang->ai->dataSource['project']['executions']['realEnd'] = 'Actual End'; +$lang->ai->dataSource['project']['executions']['estimate'] = 'Estimates'; +$lang->ai->dataSource['project']['executions']['consumed'] = 'Consumed'; +$lang->ai->dataSource['project']['executions']['left'] = 'Left'; +$lang->ai->dataSource['project']['executions']['progress'] = 'Progress'; + +$lang->ai->dataSource['story']['story']['common'] = 'Story'; +$lang->ai->dataSource['story']['story']['title'] = 'Title'; +$lang->ai->dataSource['story']['story']['spec'] = 'Description'; +$lang->ai->dataSource['story']['story']['verify'] = 'Acceptance criteria'; +$lang->ai->dataSource['story']['story']['product'] = 'Product'; +$lang->ai->dataSource['story']['story']['module'] = 'Module'; +$lang->ai->dataSource['story']['story']['pri'] = 'Priority'; +$lang->ai->dataSource['story']['story']['category'] = 'Category'; +$lang->ai->dataSource['story']['story']['estimate'] = 'Estimated hours'; + +$lang->ai->dataSource['execution']['execution']['common'] = 'Execution'; +$lang->ai->dataSource['execution']['execution']['name'] = 'Name'; +$lang->ai->dataSource['execution']['execution']['desc'] = 'Description'; +$lang->ai->dataSource['execution']['execution']['estimate'] = 'Estimated hours'; + +$lang->ai->dataSource['execution']['tasks']['common'] = 'Task List'; +$lang->ai->dataSource['execution']['tasks']['name'] = 'Name'; +$lang->ai->dataSource['execution']['tasks']['pri'] = 'Priority'; +$lang->ai->dataSource['execution']['tasks']['status'] = 'Status'; +$lang->ai->dataSource['execution']['tasks']['estimate'] = 'Estimated hours'; +$lang->ai->dataSource['execution']['tasks']['consumed'] = 'Consumed hours'; +$lang->ai->dataSource['execution']['tasks']['left'] = 'Remaining hours'; +$lang->ai->dataSource['execution']['tasks']['progress'] = 'Progress'; +$lang->ai->dataSource['execution']['tasks']['estStarted'] = 'Estimated start date'; +$lang->ai->dataSource['execution']['tasks']['realStarted'] = 'Actual start date'; +$lang->ai->dataSource['execution']['tasks']['finishedDate']= 'Finished date'; +$lang->ai->dataSource['execution']['tasks']['closedReason']= 'Closing reason'; + +$lang->ai->dataSource['task']['task']['common'] = 'Task'; +$lang->ai->dataSource['task']['task']['name'] = 'Name'; +$lang->ai->dataSource['task']['task']['desc'] = 'Description'; +$lang->ai->dataSource['task']['task']['pri'] = 'Priority'; +$lang->ai->dataSource['task']['task']['status'] = 'Status'; +$lang->ai->dataSource['task']['task']['estimate'] = 'Estimates'; +$lang->ai->dataSource['task']['task']['consumed'] = 'Consumed'; +$lang->ai->dataSource['task']['task']['left'] = 'Left'; +$lang->ai->dataSource['task']['task']['progress'] = 'Progress'; +$lang->ai->dataSource['task']['task']['estStarted'] = 'Start Date'; +$lang->ai->dataSource['task']['task']['realStarted'] = 'Actual Start'; + +$lang->ai->dataSource['case']['case']['common'] = 'Test Case'; +$lang->ai->dataSource['case']['case']['title'] = 'Title'; +$lang->ai->dataSource['case']['case']['precondition'] = 'Prerequisite'; +$lang->ai->dataSource['case']['case']['scene'] = 'Scene'; +$lang->ai->dataSource['case']['case']['product'] = 'Product'; +$lang->ai->dataSource['case']['case']['module'] = 'Module'; +$lang->ai->dataSource['case']['case']['pri'] = 'Priority'; +$lang->ai->dataSource['case']['case']['type'] = 'Type'; +$lang->ai->dataSource['case']['case']['lastRunResult'] = 'Result'; +$lang->ai->dataSource['case']['case']['status'] = 'Status'; + +$lang->ai->dataSource['case']['steps']['common'] = 'Steps'; +$lang->ai->dataSource['case']['steps']['desc'] = 'Description'; +$lang->ai->dataSource['case']['steps']['expect'] = 'Expectation'; + +$lang->ai->dataSource['bug']['bug']['common'] = 'Bug'; +$lang->ai->dataSource['bug']['bug']['title'] = 'Title'; +$lang->ai->dataSource['bug']['bug']['steps'] = 'Repro Steps'; +$lang->ai->dataSource['bug']['bug']['severity'] = 'Severity'; +$lang->ai->dataSource['bug']['bug']['pri'] = 'Priority'; +$lang->ai->dataSource['bug']['bug']['status'] = 'Status'; +$lang->ai->dataSource['bug']['bug']['confirmed'] = 'Confirmed'; +$lang->ai->dataSource['bug']['bug']['type'] = 'Type'; + +$lang->ai->dataSource['doc']['doc']['common'] = 'Document'; +$lang->ai->dataSource['doc']['doc']['title'] = 'Title'; +$lang->ai->dataSource['doc']['doc']['content'] = 'Text'; +$lang->ai->dataSource['doc']['doc']['addedBy'] = 'Created By'; +$lang->ai->dataSource['doc']['doc']['addedDate'] = 'Created Date'; +$lang->ai->dataSource['doc']['doc']['editedBy'] = 'Edited By'; +$lang->ai->dataSource['doc']['doc']['editedDate'] = 'Edited Date'; + +/* Target form definition. See `$config->ai->targetForm`. */ +$lang->ai->targetForm = array(); +$lang->ai->targetForm['product']['common'] = 'Product'; +$lang->ai->targetForm['story']['common'] = 'Story'; +$lang->ai->targetForm['productplan']['common'] = 'Plan'; +$lang->ai->targetForm['projectrelease']['common'] = 'Release'; +$lang->ai->targetForm['project']['common'] = 'Project'; +$lang->ai->targetForm['execution']['common'] = 'Execution'; +$lang->ai->targetForm['task']['common'] = 'Task'; +$lang->ai->targetForm['testcase']['common'] = 'Test Case'; +$lang->ai->targetForm['bug']['common'] = 'Bug'; +$lang->ai->targetForm['doc']['common'] = 'Document'; + +$lang->ai->targetForm['product']['tree/managechild'] = 'Manage Modules'; +$lang->ai->targetForm['product']['doc/create'] = 'Create Doc'; + +$lang->ai->targetForm['story']['create'] = 'Create Story'; +$lang->ai->targetForm['story']['batchcreate'] = 'Batch Create Story'; +$lang->ai->targetForm['story']['change'] = 'Change Story'; +$lang->ai->targetForm['story']['totask'] = 'Story to Task'; +$lang->ai->targetForm['story']['testcasecreate'] = 'Create Test Case'; +$lang->ai->targetForm['story']['subdivide'] = 'Subdivide Story'; + +$lang->ai->targetForm['productplan']['edit'] = 'Edit Plan'; +$lang->ai->targetForm['productplan']['create'] = 'Create Sub-Plan'; + +$lang->ai->targetForm['projectrelease']['doc/create'] = 'Create Doc'; + +$lang->ai->targetForm['project']['risk/create'] = 'Create Risk'; +$lang->ai->targetForm['project']['issue/create'] = 'Create Issue'; +$lang->ai->targetForm['project']['doc/create'] = 'Create Doc'; +$lang->ai->targetForm['project']['programplan/create'] = 'Set Program Plan'; + +$lang->ai->targetForm['execution']['batchcreatetask'] = 'Batch Create Task'; +$lang->ai->targetForm['execution']['createtestreport'] = 'Create Test Report'; +$lang->ai->targetForm['execution']['createqa'] = 'Create QA'; +$lang->ai->targetForm['execution']['createrisk'] = 'Create Risk'; +$lang->ai->targetForm['execution']['createissue'] = 'Create Issue'; + +$lang->ai->targetForm['task']['edit'] = 'Edit Task'; +$lang->ai->targetForm['task']['batchcreate'] = 'Batch Create Task'; + +$lang->ai->targetForm['testcase']['edit'] = 'Edit Test Case'; +$lang->ai->targetForm['testcase']['createscript'] = 'Create Script'; + +$lang->ai->targetForm['bug']['edit'] = 'Edit Bug'; +$lang->ai->targetForm['bug']['story/create'] = 'Bug to Story'; +$lang->ai->targetForm['bug']['testcase/create'] = 'Bug to Test Case'; + +$lang->ai->targetForm['doc']['create'] = 'Create Doc'; +$lang->ai->targetForm['doc']['edit'] = 'Edit Doc'; + +$lang->ai->prompts->statuses = array(); +$lang->ai->prompts->statuses[''] = 'All'; +$lang->ai->prompts->statuses['draft'] = 'Draft'; +$lang->ai->prompts->statuses['active'] = 'Active'; + +$lang->ai->prompts->modules = array(); +$lang->ai->prompts->modules[''] = 'All'; +// $lang->ai->prompts->modules['my'] = 'My'; +$lang->ai->prompts->modules['product'] = 'Product'; +$lang->ai->prompts->modules['project'] = 'Project'; +$lang->ai->prompts->modules['story'] = 'Story'; +$lang->ai->prompts->modules['productplan'] = 'Product Plan'; +// $lang->ai->prompts->modules['release'] = 'Release'; +$lang->ai->prompts->modules['execution'] = 'Execution'; +$lang->ai->prompts->modules['task'] = 'Task'; +$lang->ai->prompts->modules['case'] = 'Test Case'; +$lang->ai->prompts->modules['bug'] = 'Bug'; +$lang->ai->prompts->modules['doc'] = 'Document'; + +$lang->ai->conversations = new stdclass(); +$lang->ai->conversations->common = 'Conversations'; + +$lang->ai->models = new stdclass(); +$lang->ai->models->title = 'Language Model Configuration'; +$lang->ai->models->common = 'Language Model'; +$lang->ai->models->type = 'Model'; +$lang->ai->models->vendor = 'Vendor'; +$lang->ai->models->key = 'API Key'; +$lang->ai->models->resource = 'Resource'; +$lang->ai->models->deployment = 'Deployment'; +$lang->ai->models->proxyType = 'Proxy Type'; +$lang->ai->models->proxyAddr = 'Proxy Address'; +$lang->ai->models->description = 'Description'; +$lang->ai->models->testConnection = 'Test Connection'; +$lang->ai->models->unconfigured = 'Unconfigured'; +$lang->ai->models->edit = 'Edit Parameters'; +$lang->ai->models->concealTip = 'Visible when editing'; +$lang->ai->models->upgradeBiz = 'For more AI features, all in ZenTao Biz.'; +$lang->ai->models->noModelError = 'No language model is configured, please contact the administrator.'; + +$lang->ai->models->testConnectionResult = new stdclass(); +$lang->ai->models->testConnectionResult->success = 'Successfully connected'; +$lang->ai->models->testConnectionResult->fail = 'Failed to connect'; +$lang->ai->models->testConnectionResult->failFormat = 'Failed to connect: %s'; + +$lang->ai->models->statusList = array(); +$lang->ai->models->statusList['on'] = 'Enable'; +$lang->ai->models->statusList['off'] = 'Disable'; + +$lang->ai->models->typeList = array(); +$lang->ai->models->typeList['openai-gpt35'] = 'OpenAI / GPT-3.5'; +// $lang->ai->models->typeList['azure-gpt35'] = 'Azure / GPT-3.5'; + +$lang->ai->models->openaiVendorList = array(); +$lang->ai->models->openaiVendorList['openai'] = 'OpenAI'; +$lang->ai->models->openaiVendorList['azure'] = 'Azure'; + +$lang->ai->models->proxyTypes = array(); +$lang->ai->models->proxyTypes[''] = 'No Proxy'; +$lang->ai->models->proxyTypes['socks5'] = 'SOCKS5'; + +$lang->ai->models->promptFor = 'Prompt for %s'; + +$lang->ai->designStepNav = array(); +$lang->ai->designStepNav['assignrole'] = 'Specify Role'; +$lang->ai->designStepNav['selectdatasource'] = 'Select Object'; +$lang->ai->designStepNav['setpurpose'] = 'Confirm Action'; +$lang->ai->designStepNav['settargetform'] = 'Process Result'; +$lang->ai->designStepNav['finalize'] = 'Ready to Publish'; + +$lang->ai->dataTypeDesc = '%s is %s type, %s'; + +$lang->ai->dataType = new stdclass(); +$lang->ai->dataType->pri = new stdClass(); +$lang->ai->dataType->pri->type = 'numeric'; +$lang->ai->dataType->pri->desc = '1 is the highest priority, 4 is the lowest priority.'; + +$lang->ai->dataType->estimate = new stdClass(); +$lang->ai->dataType->estimate->type = 'numeric'; +$lang->ai->dataType->estimate->desc = 'Unit is in hours.'; + +$lang->ai->dataType->consumed = $lang->ai->dataType->estimate; +$lang->ai->dataType->left = $lang->ai->dataType->estimate; + +$lang->ai->dataType->progress = new stdClass(); +$lang->ai->dataType->progress->type = 'percentage'; +$lang->ai->dataType->progress->desc = '0 means not started, 100 means completed.'; + +$lang->ai->dataType->datetime = new stdClass(); +$lang->ai->dataType->datetime->type = 'datetime'; +$lang->ai->dataType->datetime->desc = 'Format is: 1970-01-01 00:00:01, or leave it blank.'; + +$lang->ai->dataType->estStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->realStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->finishedDate = $lang->ai->dataType->datetime; + +$lang->ai->demoData = new stdclass(); +$lang->ai->demoData->notExist = 'The demo data does not exist for now.'; +$lang->ai->demoData->story = array( + 'story' => array + ( + 'title' => 'Develop an online learning platform', + 'spec' => 'We need to develop an online learning platform that provides course management, student management, teacher management, and other functions.', + 'verify' => '1. All functions can operate properly without any obvious errors or abnormalities.2. The interface is aesthetically pleasing and user-friendly.3. The platform can meet user needs and has a high level of user satisfaction.4. The code has good quality, with clear structure and easy maintenance.', + 'module' => 7, + 'pri' => 1, + 'estimate' => 1, + 'product' => 1, + 'category' => 'feature', + ), +); +$lang->ai->demoData->execution = array +( + 'execution' => array( + 'name' => 'Online Learning Platform Software Development', + 'desc' => 'This plan aims to develop an online learning platform software that provides accessible learning resources, including text, video, and audio, as well as some learning tools such as exams, tests, and discussion forums.', + 'estimate' => 7, + ), + 'tasks' => array( + 0 => + array( + 'name' => 'Technology Selection', + 'pri' => 1, + 'status' => 'done', + 'estimate' => 1, + 'consumed' => 1, + 'left' => 0, + 'progress' => 100, + 'estStarted' => '2023-07-02 00:00:00', + 'realStarted' => '2023-07-02 00:00:00', + 'finishedDate' => '2023-07-02 00:00:00', + 'closedReason' => 'Completed', + ), + 1 => + array( + 'name' => 'UI Design', + 'pri' => 1, + 'status' => 'doing', + 'estimate' => 2, + 'consumed' => 1, + 'left' => 1, + 'progress' => 50, + 'estStarted' => '2023-07-03 00:00:00', + 'realStarted' => '2023-07-03 00:00:00', + 'finishedDate' => '', + 'closedReason' => '', + ), + 2 => + array( + 'name' => 'Development', + 'pri' => 1, + 'status' => 'wait', + 'estimate' => 1, + 'consumed' => 0, + 'left' => 1, + 'progress' => 0, + 'estStarted' => '', + 'realStarted' => '', + 'finishedDate' => '', + 'closedReason' => '', + ), + ), +); + +/* Forms as JSON Schemas. */ +$lang->ai->formSchema = array(); +$lang->ai->formSchema['story']['create'] = new stdclass(); +$lang->ai->formSchema['story']['create']->title = 'Story'; +$lang->ai->formSchema['story']['create']->type = 'object'; +$lang->ai->formSchema['story']['create']->properties = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->spec = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->verify = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->title->description = 'Title of story'; +$lang->ai->formSchema['story']['create']->properties->spec->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->spec->description = 'Description of story'; +$lang->ai->formSchema['story']['create']->properties->verify->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->verify->description = 'Acceptance criteria of story'; +$lang->ai->formSchema['story']['create']->required = array('title', 'spec', 'verify'); +$lang->ai->formSchema['story']['change'] = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['story']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->title = 'Stories'; +$lang->ai->formSchema['story']['batchcreate']->type = 'object'; +$lang->ai->formSchema['story']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories->type = 'array'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->description = 'Stories'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->items = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['productplan']['create'] = new stdclass(); +$lang->ai->formSchema['productplan']['create']->title = 'Product Plan'; +$lang->ai->formSchema['productplan']['create']->type = 'object'; +$lang->ai->formSchema['productplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->title->description = 'Title of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->begin->type = 'date'; +$lang->ai->formSchema['productplan']['create']->properties->begin->description = 'Begin date of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->end->type = 'date'; +$lang->ai->formSchema['productplan']['create']->properties->end->description = 'End date of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->desc->description = 'Description of product plan'; +$lang->ai->formSchema['productplan']['create']->required = array('title', 'begin', 'end'); +$lang->ai->formSchema['productplan']['edit'] = $lang->ai->formSchema['productplan']['create']; + +$lang->ai->formSchema['task']['create'] = new stdclass(); +$lang->ai->formSchema['task']['create']->title = 'Task'; +$lang->ai->formSchema['task']['create']->type = 'object'; +$lang->ai->formSchema['task']['create']->properties = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->name = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->estimate = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->type->description = 'Type of task'; +$lang->ai->formSchema['task']['create']->properties->type->enum = array('design', 'devel', 'request', 'test', 'study', 'discuss', 'ui', 'affair', 'misc'); +$lang->ai->formSchema['task']['create']->properties->name->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->name->description = 'Name of task'; +$lang->ai->formSchema['task']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->desc->description = 'Description of task'; +$lang->ai->formSchema['task']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->pri->description = 'Priority of task'; +$lang->ai->formSchema['task']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['task']['create']->properties->estimate->type = 'number'; +$lang->ai->formSchema['task']['create']->properties->estimate->description = 'Estimated hours of task'; +$lang->ai->formSchema['task']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->begin->description = 'Begin date of task'; +$lang->ai->formSchema['task']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->end->description = 'End date of task'; +$lang->ai->formSchema['task']['create']->required = array('type', 'name'); +$lang->ai->formSchema['task']['edit'] = $lang->ai->formSchema['task']['create']; + +$lang->ai->formSchema['task']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->title = 'Tasks'; +$lang->ai->formSchema['task']['batchcreate']->type = 'object'; +$lang->ai->formSchema['task']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->type = 'array'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->description = 'Tasks'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items = $lang->ai->formSchema['task']['create']; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->estStarted = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->deadline = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end; +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin); +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end); + +$lang->ai->formSchema['bug']['create'] = new stdclass(); +$lang->ai->formSchema['bug']['create']->title = 'Bug'; +$lang->ai->formSchema['bug']['create']->type = 'object'; +$lang->ai->formSchema['bug']['create']->properties = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->severity = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->openedBuild = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->title->description = 'Title of bug'; +$lang->ai->formSchema['bug']['create']->properties->steps->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->steps->description = 'Repro steps of bug'; +$lang->ai->formSchema['bug']['create']->properties->severity->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->severity->description = 'Severity of bug'; +$lang->ai->formSchema['bug']['create']->properties->severity->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->pri->description = 'Priority of bug'; +$lang->ai->formSchema['bug']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->openedBuild->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->description = 'Affected builds of bug'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->enum = array('trunk'); +$lang->ai->formSchema['bug']['create']->required = array('title', 'steps', 'severity', 'pri', 'openedBuild'); +$lang->ai->formSchema['bug']['edit'] = $lang->ai->formSchema['bug']['create']; + +$lang->ai->formSchema['testcase']['create'] = new stdclass(); +$lang->ai->formSchema['testcase']['create']->title = 'Test Case'; +$lang->ai->formSchema['testcase']['create']->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->stage = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->precondition = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->type->description = 'Type of test case'; +$lang->ai->formSchema['testcase']['create']->properties->type->enum = array('feature', 'performance', 'config', 'install', 'security', 'interface', 'unit', 'other'); +$lang->ai->formSchema['testcase']['create']->properties->stage->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->stage->description = 'Stage of test case'; +$lang->ai->formSchema['testcase']['create']->properties->stage->enum = array('unittest', 'feature', 'intergrate', 'system', 'smoke', 'bvt'); +$lang->ai->formSchema['testcase']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->title->description = 'Title of test case'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->description = 'Precondition of test case'; +$lang->ai->formSchema['testcase']['create']->properties->steps->type = 'array'; +$lang->ai->formSchema['testcase']['create']->properties->steps->description = 'Steps of test case'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->description = 'Step description'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->description = 'Expectation of step'; +$lang->ai->formSchema['testcase']['create']->required = array('type', 'title', 'steps'); +$lang->ai->formSchema['testcase']['edit'] = $lang->ai->formSchema['testcase']['create']; + +$lang->ai->formSchema['testreport']['create'] = new stdclass(); +$lang->ai->formSchema['testreport']['create']->title = 'Test Report'; +$lang->ai->formSchema['testreport']['create']->type = 'object'; +$lang->ai->formSchema['testreport']['create']->properties = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->report = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->begin->description = 'Begin date of testing'; +$lang->ai->formSchema['testreport']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->end->description = 'End date of testing'; +$lang->ai->formSchema['testreport']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->title->description = 'Title of test report'; +$lang->ai->formSchema['testreport']['create']->properties->report->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->report->description = 'Report content'; +$lang->ai->formSchema['testreport']['create']->required = array('begin', 'end', 'title', 'report'); +$lang->ai->formSchema['execution']['testreport'] = $lang->ai->formSchema['testreport']['create']; + +$lang->ai->formSchema['doc']['edit'] = new stdclass(); +$lang->ai->formSchema['doc']['edit']->title = 'Document'; +$lang->ai->formSchema['doc']['edit']->type = 'object'; +$lang->ai->formSchema['doc']['edit']->properties = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->content = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->title->description = 'Title of the document'; +$lang->ai->formSchema['doc']['edit']->properties->content->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->content->description = 'Content of the document'; +$lang->ai->formSchema['doc']['edit']->required = array('title', 'content'); + +$lang->ai->formSchema['tree']['browse'] = new stdclass(); +$lang->ai->formSchema['tree']['browse']->title = 'Modules'; +$lang->ai->formSchema['tree']['browse']->type = 'object'; +$lang->ai->formSchema['tree']['browse']->properties = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->type = 'array'; +$lang->ai->formSchema['tree']['browse']->properties->modules->title = 'Modules'; +$lang->ai->formSchema['tree']['browse']->properties->modules->items = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->items->type = 'string'; +$lang->ai->formSchema['tree']['browse']->required = array('modules'); + +$lang->ai->formSchema['programplan']['create'] = new stdclass(); +$lang->ai->formSchema['programplan']['create']->title = 'Program Plan'; +$lang->ai->formSchema['programplan']['create']->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->type = 'array'; +$lang->ai->formSchema['programplan']['create']->properties->stages->title = 'Plans'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->description = 'Name of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->description = 'Attribute of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->enum = array('request', 'design', 'dev', 'qa', 'release', 'review', 'other'); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->type = 'boolean'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->description = 'Is milestone?'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->description = 'Begin date of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->description = 'End date of stage'; +$lang->ai->formSchema['programplan']['create']->required = array('stages'); + +$lang->ai->promptMenu = new stdclass(); +$lang->ai->promptMenu->dropdownTitle = 'AI'; + +$lang->ai->dataInject = new stdclass(); +$lang->ai->dataInject->success = 'Prompt execution results are filled in.'; +$lang->ai->dataInject->fail = 'Failed to fill in prompt execution results.'; + +$lang->ai->execute = new stdclass(); +$lang->ai->execute->loading = 'Prompt executing...'; +$lang->ai->execute->auditing = 'Getting ready for auditing...'; +$lang->ai->execute->success = 'Prompt executed.'; +$lang->ai->execute->fail = 'Prompt execution failed.'; +$lang->ai->execute->failFormat = 'Prompt execution failed: %s.'; +$lang->ai->execute->failReasons = array(); +$lang->ai->execute->failReasons['noPrompt'] = 'unable to get prompt'; +$lang->ai->execute->failReasons['noObjectData'] = 'unable to get object data'; +$lang->ai->execute->failReasons['noResponse'] = 'no response from external service'; +$lang->ai->execute->failReasons['noTargetForm'] = 'unable to get target form or its required fields'; +$lang->ai->execute->executeErrors = array(); +$lang->ai->execute->executeErrors[-1] = 'unable to get prompt'; +$lang->ai->execute->executeErrors[-2] = 'unable to get object data'; +$lang->ai->execute->executeErrors[-3] = 'failed to serialize object data'; +$lang->ai->execute->executeErrors[-4] = 'unable to get target form schema'; +$lang->ai->execute->executeErrors[-5] = 'request failed or API returned error'; + +$lang->ai->audit = new stdclass(); +$lang->ai->audit->designPrompt = 'Prompt Design'; +$lang->ai->audit->afterSave = 'After saving,'; +$lang->ai->audit->regenerate = 'Regenerate'; +$lang->ai->audit->exit = 'Exit Audit'; + +$lang->ai->audit->backLocationList = array(); +$lang->ai->audit->backLocationList[0] = 'back to audit page.'; +$lang->ai->audit->backLocationList[1] = 'back to audit page and regenerate.'; diff --git a/module/ai/lang/fr.php b/module/ai/lang/fr.php new file mode 100644 index 0000000000..e3eb75c843 --- /dev/null +++ b/module/ai/lang/fr.php @@ -0,0 +1,796 @@ + + * @package ai + * @link https://www.zentao.net + */ +$lang->ai->common = 'AI'; + +/* Definitions of table columns, used to sprintf error messages to dao::$errors. */ +$lang->prompt = new stdclass(); +$lang->prompt->name = 'Name'; +$lang->prompt->desc = 'Description'; +$lang->prompt->model = 'Model'; +$lang->prompt->module = 'Module'; +$lang->prompt->source = 'Data Source'; +$lang->prompt->targetForm = 'Target Form'; +$lang->prompt->purpose = 'Purpose'; +$lang->prompt->elaboration = 'Elaboration'; +$lang->prompt->role = 'Role'; +$lang->prompt->characterization = 'Characterization'; +$lang->prompt->status = 'Status'; +$lang->prompt->createdBy = 'Created By'; +$lang->prompt->createdDate = 'Created Date'; +$lang->prompt->editedBy = 'Edited By'; +$lang->prompt->editedDate = 'Edited Date'; +$lang->prompt->deleted = 'Deleted'; + +/* Lang for privs, keys are paired with privlang items. */ +$lang->ai->modelBrowse = 'Browse Models'; +$lang->ai->modelEdit = 'Edit Models'; +$lang->ai->modelTestConnection = 'Test Model Connection'; +$lang->ai->promptCreate = 'Create Prompt'; +$lang->ai->promptEdit = 'Edit Prompt'; +$lang->ai->promptDelete = 'Delete Prompt'; +$lang->ai->promptAssignRole = 'Assign Prompt Role'; +$lang->ai->promptSelectDataSource = 'Select Prompt Data'; +$lang->ai->promptSetPurpose = 'Set Prompt Purpose'; +$lang->ai->promptSetTargetForm = 'Set Prompt Target Form'; +$lang->ai->promptFinalize = 'Finalize Prompt'; +$lang->ai->promptAudit = 'Audit Prompt'; +$lang->ai->promptPublish = 'Publish Prompt'; +$lang->ai->promptUnpublish = 'Unpublish Prompt'; +$lang->ai->promptBrowse = 'Browse Prompts'; +$lang->ai->promptView = 'View Prompt'; +$lang->ai->promptExecute = 'Execute Prompt'; +$lang->ai->promptExecutionReset = 'Reset Execute Prompt'; +$lang->ai->roleTemplates = 'Manage Role Templates'; + +$lang->ai->nextStep = 'Next'; +$lang->ai->goTesting = 'Go testing'; + +$lang->ai->validate = new stdclass(); +$lang->ai->validate->noEmpty = '%s cannot be empty.'; +$lang->ai->validate->dirtyForm = 'The design step of %s has changed. Do you want to save and return it?'; +$lang->ai->validate->nameNotUnique = 'A prompt with the same name already exists, please change the name.'; + +$lang->ai->prompts = new stdclass(); +$lang->ai->prompts->common = 'Prompt'; +$lang->ai->prompts->emptyList = 'No prompts yet.'; +$lang->ai->prompts->create = 'Create Prompt'; +$lang->ai->prompts->edit = 'Edit Prompt'; +$lang->ai->prompts->id = 'ID'; +$lang->ai->prompts->name = 'Name'; +$lang->ai->prompts->description = 'Description'; +$lang->ai->prompts->createdBy = 'Creator'; +$lang->ai->prompts->createdDate = 'Created Date'; +$lang->ai->prompts->targetForm = 'Target Form'; +$lang->ai->prompts->funcDesc = 'Function Description'; +$lang->ai->prompts->deleted = 'Deleted'; +$lang->ai->prompts->stage = 'Stage'; +$lang->ai->prompts->basicInfo = 'Basic Info'; +$lang->ai->prompts->editInfo = 'Edit Info'; +$lang->ai->prompts->createdBy = 'Created By'; +$lang->ai->prompts->publishedBy = 'Published By'; +$lang->ai->prompts->draftedBy = 'Drafted By'; +$lang->ai->prompts->lastEditor = 'Last Editor'; + +$lang->ai->prompts->summary = 'There are %s prompts on this page.'; + +$lang->ai->prompts->action = new stdclass(); +$lang->ai->prompts->action->goDesignConfirm = 'The current prompt is not complete, continue designing?'; +$lang->ai->prompts->action->goDesign = 'Go designing'; +$lang->ai->prompts->action->draftConfirm = 'Once unpublished, the prompt cannot be used any further. Are you sure you want to proceed?'; +$lang->ai->prompts->action->design = 'Design'; +$lang->ai->prompts->action->test = 'Test'; +$lang->ai->prompts->action->edit = 'Edit'; +$lang->ai->prompts->action->publish = 'Publish'; +$lang->ai->prompts->action->unpublish = 'Unpublish'; +$lang->ai->prompts->action->delete = 'Delete'; +$lang->ai->prompts->action->deleteConfirm = 'Deleted prompts will be no longer available. Are you sure you want to proceed?'; +$lang->ai->prompts->action->publishSuccess = 'Publish Success'; + +/* Steps of prompt creation. */ +$lang->ai->prompts->assignRole = 'Assign Role'; +$lang->ai->prompts->selectDataSource = 'Select Data Fields'; +$lang->ai->prompts->setPurpose = 'Set Purpose'; +$lang->ai->prompts->setTargetForm = 'Set Target Form'; +$lang->ai->prompts->finalize = 'Finalize'; + +/* Role assigning. */ +$lang->ai->prompts->model = 'Model'; +$lang->ai->prompts->role = 'Role'; +$lang->ai->prompts->characterization = 'Characterization'; +$lang->ai->prompts->rolePlaceholder = '"Act as a "'; +$lang->ai->prompts->charPlaceholder = 'Detailed characterization of this role'; +$lang->ai->prompts->roleTemplate = 'Role Template'; +$lang->ai->prompts->roleTemplateTip = 'After a template is referenced, modifying the role or role description does not affect the template.'; +$lang->ai->prompts->addRoleTemplate = 'Add Role Template'; +$lang->ai->prompts->editRoleTemplate = 'Edit Role Template'; +$lang->ai->prompts->editRoleTemplateTip = 'Editing this template will not affect its previous usages in prompts.'; +$lang->ai->prompts->roleAddedSuccess = 'Role added successfully.'; +$lang->ai->prompts->roleDelConfirm = 'Deleting the role does not affect the role that is already in the prompt. Do you want to delete it?'; +$lang->ai->prompts->roleDelSuccess = 'Role deleted successfully.'; +$lang->ai->prompts->roleTemplateSave = 'Save Role Template'; +$lang->ai->prompts->roleTemplateSaveList = array(); +$lang->ai->prompts->roleTemplateSaveList['save'] = 'Save'; +$lang->ai->prompts->roleTemplateSaveList['discard'] = 'Discard'; + +/* Data source selecting. */ +$lang->ai->prompts->selectData = 'Select fields'; +$lang->ai->prompts->selectDataTip = 'Select an object and its fields will be shown below.'; +$lang->ai->prompts->selectedFormat = 'Selecting data from {0}, {1} fields selected.'; +$lang->ai->prompts->nonSelected = 'No field selected.'; +$lang->ai->prompts->sortTip = 'Sorting fields by priority is suggested.'; +$lang->ai->prompts->object = 'Object'; +$lang->ai->prompts->field = 'Field'; + +/* Purpose setting. */ +$lang->ai->prompts->purpose = 'Purpose'; +$lang->ai->prompts->purposeTip = 'What do I want it to accomplish, in order to achieve what goals?'; +$lang->ai->prompts->elaboration = 'Elaboration'; +$lang->ai->prompts->elaborationTip = 'I hope its answer draws attention to some additional requests.'; +$lang->ai->prompts->inputPreview = 'Prompt Preview'; +$lang->ai->prompts->dataPreview = 'Data Prompt Preview'; +$lang->ai->prompts->rolePreview = 'Role Prompt Preview'; +$lang->ai->prompts->promptPreview = 'Purpose Prompt Preview'; + +/* Target form selecting. */ +$lang->ai->prompts->selectTargetForm = 'Select Target Form'; +$lang->ai->prompts->selectTargetFormTip = 'Results returned from LLMs can be directly inputed into forms within ZenTao.'; +$lang->ai->prompts->goingTesting = 'Redirecting to testing page'; +$lang->ai->prompts->goingTestingFail = 'Unable to go testing, no suitable object found.'; + +/* Finalize page. */ +$lang->ai->moduleDisableTip = 'Module is automatically selected based on selected objects.'; + +/* Data source definition. */ +$lang->ai->dataSource = array(); + +$lang->ai->dataSource['my']['common'] = 'My'; +$lang->ai->dataSource['product']['common'] = 'Product'; +$lang->ai->dataSource['story']['common'] = 'Story'; +$lang->ai->dataSource['productplan']['common'] = 'Product Plan'; +$lang->ai->dataSource['release']['common'] = 'Release'; +$lang->ai->dataSource['project']['common'] = 'Project'; +$lang->ai->dataSource['execution']['common'] = 'Execution'; +$lang->ai->dataSource['task']['common'] = 'Task'; +$lang->ai->dataSource['bug']['common'] = 'Bug'; +$lang->ai->dataSource['case']['common'] = 'Test Case'; +$lang->ai->dataSource['doc']['common'] = 'Document'; + +$lang->ai->dataSource['my']['efforts']['common'] = 'Efforts'; +$lang->ai->dataSource['my']['efforts']['date'] = 'Date'; +$lang->ai->dataSource['my']['efforts']['work'] = 'Work'; +$lang->ai->dataSource['my']['efforts']['account'] = 'Account'; +$lang->ai->dataSource['my']['efforts']['consumed'] = 'Consumed'; +$lang->ai->dataSource['my']['efforts']['left'] = 'Left'; +$lang->ai->dataSource['my']['efforts']['objectID'] = 'Object'; +$lang->ai->dataSource['my']['efforts']['product'] = 'Product'; +$lang->ai->dataSource['my']['efforts']['project'] = 'Project'; +$lang->ai->dataSource['my']['efforts']['execution'] = 'Execution'; + +$lang->ai->dataSource['product']['product']['common'] = 'Product'; +$lang->ai->dataSource['product']['product']['name'] = 'Product Name'; +$lang->ai->dataSource['product']['product']['desc'] = 'Description'; +$lang->ai->dataSource['product']['modules']['common'] = 'Module'; +$lang->ai->dataSource['product']['modules']['name'] = 'Module Name'; +$lang->ai->dataSource['product']['modules']['modules'] = 'Sub Modules'; + +$lang->ai->dataSource['productplan']['productplan']['common'] = 'Product Plan'; +$lang->ai->dataSource['productplan']['productplan']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['productplan']['desc'] = 'Description'; +$lang->ai->dataSource['productplan']['productplan']['begin'] = 'Begin'; +$lang->ai->dataSource['productplan']['productplan']['end'] = 'End'; + +$lang->ai->dataSource['productplan']['stories']['common'] = 'Stories'; +$lang->ai->dataSource['productplan']['stories']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['stories']['module'] = 'Module'; +$lang->ai->dataSource['productplan']['stories']['pri'] = 'Priority'; +$lang->ai->dataSource['productplan']['stories']['estimate'] = 'Estimates'; +$lang->ai->dataSource['productplan']['stories']['status'] = 'Status'; +$lang->ai->dataSource['productplan']['stories']['stage'] = 'Stage'; + +$lang->ai->dataSource['productplan']['bugs']['common'] = 'Bugs'; +$lang->ai->dataSource['productplan']['bugs']['title'] = 'Title'; +$lang->ai->dataSource['productplan']['bugs']['pri'] = 'Priority'; +$lang->ai->dataSource['productplan']['bugs']['status'] = 'Status'; + +$lang->ai->dataSource['release']['release']['common'] = 'Release'; +$lang->ai->dataSource['release']['release']['product'] = 'Product'; +$lang->ai->dataSource['release']['release']['name'] = 'Name'; +$lang->ai->dataSource['release']['release']['desc'] = 'Description'; +$lang->ai->dataSource['release']['release']['date'] = 'Release Date'; + +$lang->ai->dataSource['release']['stories']['common'] = 'Stories'; +$lang->ai->dataSource['release']['stories']['title'] = 'Title'; +$lang->ai->dataSource['release']['stories']['estimate'] = 'Estimates'; + +$lang->ai->dataSource['release']['bugs']['common'] = 'Bugs'; +$lang->ai->dataSource['release']['bugs']['title'] = 'Title'; + +$lang->ai->dataSource['project']['project']['common'] = 'Project'; +$lang->ai->dataSource['project']['project']['name'] = 'Name'; +$lang->ai->dataSource['project']['project']['type'] = 'Type'; +$lang->ai->dataSource['project']['project']['desc'] = 'Description'; +$lang->ai->dataSource['project']['project']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['project']['end'] = 'End'; +$lang->ai->dataSource['project']['project']['estimate'] = 'Estimates'; + +$lang->ai->dataSource['project']['programplans']['common'] = 'Program Plan'; +$lang->ai->dataSource['project']['programplans']['name'] = 'Name'; +$lang->ai->dataSource['project']['programplans']['desc'] = 'Description'; +$lang->ai->dataSource['project']['programplans']['status'] = 'Status'; +$lang->ai->dataSource['project']['programplans']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['programplans']['end'] = 'End'; +$lang->ai->dataSource['project']['programplans']['realBegan'] = 'Actual Start'; +$lang->ai->dataSource['project']['programplans']['realEnd'] = 'Actual End'; +$lang->ai->dataSource['project']['programplans']['planDuration'] = 'Plan Duration'; +$lang->ai->dataSource['project']['programplans']['progress'] = 'Progress'; +$lang->ai->dataSource['project']['programplans']['estimate'] = 'Estimates'; +$lang->ai->dataSource['project']['programplans']['consumed'] = 'Consumed'; +$lang->ai->dataSource['project']['programplans']['left'] = 'Left'; + +$lang->ai->dataSource['project']['executions']['common'] = 'Execution'; +$lang->ai->dataSource['project']['executions']['name'] = 'Name'; +$lang->ai->dataSource['project']['executions']['desc'] = 'Description'; +$lang->ai->dataSource['project']['executions']['status'] = 'Status'; +$lang->ai->dataSource['project']['executions']['begin'] = 'Begin'; +$lang->ai->dataSource['project']['executions']['end'] = 'End'; +$lang->ai->dataSource['project']['executions']['realBegan'] = 'Actual Start'; +$lang->ai->dataSource['project']['executions']['realEnd'] = 'Actual End'; +$lang->ai->dataSource['project']['executions']['estimate'] = 'Estimates'; +$lang->ai->dataSource['project']['executions']['consumed'] = 'Consumed'; +$lang->ai->dataSource['project']['executions']['left'] = 'Left'; +$lang->ai->dataSource['project']['executions']['progress'] = 'Progress'; + +$lang->ai->dataSource['story']['story']['common'] = 'Story'; +$lang->ai->dataSource['story']['story']['title'] = 'Title'; +$lang->ai->dataSource['story']['story']['spec'] = 'Description'; +$lang->ai->dataSource['story']['story']['verify'] = 'Acceptance criteria'; +$lang->ai->dataSource['story']['story']['product'] = 'Product'; +$lang->ai->dataSource['story']['story']['module'] = 'Module'; +$lang->ai->dataSource['story']['story']['pri'] = 'Priority'; +$lang->ai->dataSource['story']['story']['category'] = 'Category'; +$lang->ai->dataSource['story']['story']['estimate'] = 'Estimated hours'; + +$lang->ai->dataSource['execution']['execution']['common'] = 'Execution'; +$lang->ai->dataSource['execution']['execution']['name'] = 'Name'; +$lang->ai->dataSource['execution']['execution']['desc'] = 'Description'; +$lang->ai->dataSource['execution']['execution']['estimate'] = 'Estimated hours'; + +$lang->ai->dataSource['execution']['tasks']['common'] = 'Task List'; +$lang->ai->dataSource['execution']['tasks']['name'] = 'Name'; +$lang->ai->dataSource['execution']['tasks']['pri'] = 'Priority'; +$lang->ai->dataSource['execution']['tasks']['status'] = 'Status'; +$lang->ai->dataSource['execution']['tasks']['estimate'] = 'Estimated hours'; +$lang->ai->dataSource['execution']['tasks']['consumed'] = 'Consumed hours'; +$lang->ai->dataSource['execution']['tasks']['left'] = 'Remaining hours'; +$lang->ai->dataSource['execution']['tasks']['progress'] = 'Progress'; +$lang->ai->dataSource['execution']['tasks']['estStarted'] = 'Estimated start date'; +$lang->ai->dataSource['execution']['tasks']['realStarted'] = 'Actual start date'; +$lang->ai->dataSource['execution']['tasks']['finishedDate']= 'Finished date'; +$lang->ai->dataSource['execution']['tasks']['closedReason']= 'Closing reason'; + +$lang->ai->dataSource['task']['task']['common'] = 'Task'; +$lang->ai->dataSource['task']['task']['name'] = 'Name'; +$lang->ai->dataSource['task']['task']['desc'] = 'Description'; +$lang->ai->dataSource['task']['task']['pri'] = 'Priority'; +$lang->ai->dataSource['task']['task']['status'] = 'Status'; +$lang->ai->dataSource['task']['task']['estimate'] = 'Estimates'; +$lang->ai->dataSource['task']['task']['consumed'] = 'Consumed'; +$lang->ai->dataSource['task']['task']['left'] = 'Left'; +$lang->ai->dataSource['task']['task']['progress'] = 'Progress'; +$lang->ai->dataSource['task']['task']['estStarted'] = 'Start Date'; +$lang->ai->dataSource['task']['task']['realStarted'] = 'Actual Start'; + +$lang->ai->dataSource['case']['case']['common'] = 'Test Case'; +$lang->ai->dataSource['case']['case']['title'] = 'Title'; +$lang->ai->dataSource['case']['case']['precondition'] = 'Prerequisite'; +$lang->ai->dataSource['case']['case']['scene'] = 'Scene'; +$lang->ai->dataSource['case']['case']['product'] = 'Product'; +$lang->ai->dataSource['case']['case']['module'] = 'Module'; +$lang->ai->dataSource['case']['case']['pri'] = 'Priority'; +$lang->ai->dataSource['case']['case']['type'] = 'Type'; +$lang->ai->dataSource['case']['case']['lastRunResult'] = 'Result'; +$lang->ai->dataSource['case']['case']['status'] = 'Status'; + +$lang->ai->dataSource['case']['steps']['common'] = 'Steps'; +$lang->ai->dataSource['case']['steps']['desc'] = 'Description'; +$lang->ai->dataSource['case']['steps']['expect'] = 'Expectation'; + +$lang->ai->dataSource['bug']['bug']['common'] = 'Bug'; +$lang->ai->dataSource['bug']['bug']['title'] = 'Title'; +$lang->ai->dataSource['bug']['bug']['steps'] = 'Repro Steps'; +$lang->ai->dataSource['bug']['bug']['severity'] = 'Severity'; +$lang->ai->dataSource['bug']['bug']['pri'] = 'Priority'; +$lang->ai->dataSource['bug']['bug']['status'] = 'Status'; +$lang->ai->dataSource['bug']['bug']['confirmed'] = 'Confirmed'; +$lang->ai->dataSource['bug']['bug']['type'] = 'Type'; + +$lang->ai->dataSource['doc']['doc']['common'] = 'Document'; +$lang->ai->dataSource['doc']['doc']['title'] = 'Title'; +$lang->ai->dataSource['doc']['doc']['content'] = 'Text'; +$lang->ai->dataSource['doc']['doc']['addedBy'] = 'Created By'; +$lang->ai->dataSource['doc']['doc']['addedDate'] = 'Created Date'; +$lang->ai->dataSource['doc']['doc']['editedBy'] = 'Edited By'; +$lang->ai->dataSource['doc']['doc']['editedDate'] = 'Edited Date'; + +/* Target form definition. See `$config->ai->targetForm`. */ +$lang->ai->targetForm = array(); +$lang->ai->targetForm['product']['common'] = 'Product'; +$lang->ai->targetForm['story']['common'] = 'Story'; +$lang->ai->targetForm['productplan']['common'] = 'Plan'; +$lang->ai->targetForm['projectrelease']['common'] = 'Release'; +$lang->ai->targetForm['project']['common'] = 'Project'; +$lang->ai->targetForm['execution']['common'] = 'Execution'; +$lang->ai->targetForm['task']['common'] = 'Task'; +$lang->ai->targetForm['testcase']['common'] = 'Test Case'; +$lang->ai->targetForm['bug']['common'] = 'Bug'; +$lang->ai->targetForm['doc']['common'] = 'Document'; + +$lang->ai->targetForm['product']['tree/managechild'] = 'Manage Modules'; +$lang->ai->targetForm['product']['doc/create'] = 'Create Doc'; + +$lang->ai->targetForm['story']['create'] = 'Create Story'; +$lang->ai->targetForm['story']['batchcreate'] = 'Batch Create Story'; +$lang->ai->targetForm['story']['change'] = 'Change Story'; +$lang->ai->targetForm['story']['totask'] = 'Story to Task'; +$lang->ai->targetForm['story']['testcasecreate'] = 'Create Test Case'; +$lang->ai->targetForm['story']['subdivide'] = 'Subdivide Story'; + +$lang->ai->targetForm['productplan']['edit'] = 'Edit Plan'; +$lang->ai->targetForm['productplan']['create'] = 'Create Sub-Plan'; + +$lang->ai->targetForm['projectrelease']['doc/create'] = 'Create Doc'; + +$lang->ai->targetForm['project']['risk/create'] = 'Create Risk'; +$lang->ai->targetForm['project']['issue/create'] = 'Create Issue'; +$lang->ai->targetForm['project']['doc/create'] = 'Create Doc'; +$lang->ai->targetForm['project']['programplan/create'] = 'Set Program Plan'; + +$lang->ai->targetForm['execution']['batchcreatetask'] = 'Batch Create Task'; +$lang->ai->targetForm['execution']['createtestreport'] = 'Create Test Report'; +$lang->ai->targetForm['execution']['createqa'] = 'Create QA'; +$lang->ai->targetForm['execution']['createrisk'] = 'Create Risk'; +$lang->ai->targetForm['execution']['createissue'] = 'Create Issue'; + +$lang->ai->targetForm['task']['edit'] = 'Edit Task'; +$lang->ai->targetForm['task']['batchcreate'] = 'Batch Create Task'; + +$lang->ai->targetForm['testcase']['edit'] = 'Edit Test Case'; +$lang->ai->targetForm['testcase']['createscript'] = 'Create Script'; + +$lang->ai->targetForm['bug']['edit'] = 'Edit Bug'; +$lang->ai->targetForm['bug']['story/create'] = 'Bug to Story'; +$lang->ai->targetForm['bug']['testcase/create'] = 'Bug to Test Case'; + +$lang->ai->targetForm['doc']['create'] = 'Create Doc'; +$lang->ai->targetForm['doc']['edit'] = 'Edit Doc'; + +$lang->ai->prompts->statuses = array(); +$lang->ai->prompts->statuses[''] = 'All'; +$lang->ai->prompts->statuses['draft'] = 'Draft'; +$lang->ai->prompts->statuses['active'] = 'Active'; + +$lang->ai->prompts->modules = array(); +$lang->ai->prompts->modules[''] = 'All'; +// $lang->ai->prompts->modules['my'] = 'My'; +$lang->ai->prompts->modules['product'] = 'Product'; +$lang->ai->prompts->modules['project'] = 'Project'; +$lang->ai->prompts->modules['story'] = 'Story'; +$lang->ai->prompts->modules['productplan'] = 'Product Plan'; +// $lang->ai->prompts->modules['release'] = 'Release'; +$lang->ai->prompts->modules['execution'] = 'Execution'; +$lang->ai->prompts->modules['task'] = 'Task'; +$lang->ai->prompts->modules['case'] = 'Test Case'; +$lang->ai->prompts->modules['bug'] = 'Bug'; +$lang->ai->prompts->modules['doc'] = 'Document'; + +$lang->ai->conversations = new stdclass(); +$lang->ai->conversations->common = 'Conversations'; + +$lang->ai->models = new stdclass(); +$lang->ai->models->title = 'Language Model Configuration'; +$lang->ai->models->common = 'Language Model'; +$lang->ai->models->type = 'Model'; +$lang->ai->models->vendor = 'Vendor'; +$lang->ai->models->key = 'API Key'; +$lang->ai->models->resource = 'Resource'; +$lang->ai->models->deployment = 'Deployment'; +$lang->ai->models->proxyType = 'Proxy Type'; +$lang->ai->models->proxyAddr = 'Proxy Address'; +$lang->ai->models->description = 'Description'; +$lang->ai->models->testConnection = 'Test Connection'; +$lang->ai->models->unconfigured = 'Unconfigured'; +$lang->ai->models->edit = 'Edit Parameters'; +$lang->ai->models->concealTip = 'Visible when editing'; +$lang->ai->models->upgradeBiz = 'For more AI features, all in ZenTao Biz.'; +$lang->ai->models->noModelError = 'No language model is configured, please contact the administrator.'; + +$lang->ai->models->testConnectionResult = new stdclass(); +$lang->ai->models->testConnectionResult->success = 'Successfully connected'; +$lang->ai->models->testConnectionResult->fail = 'Failed to connect'; +$lang->ai->models->testConnectionResult->failFormat = 'Failed to connect: %s'; + +$lang->ai->models->statusList = array(); +$lang->ai->models->statusList['on'] = 'Enable'; +$lang->ai->models->statusList['off'] = 'Disable'; + +$lang->ai->models->typeList = array(); +$lang->ai->models->typeList['openai-gpt35'] = 'OpenAI / GPT-3.5'; +// $lang->ai->models->typeList['azure-gpt35'] = 'Azure / GPT-3.5'; + +$lang->ai->models->openaiVendorList = array(); +$lang->ai->models->openaiVendorList['openai'] = 'OpenAI'; +$lang->ai->models->openaiVendorList['azure'] = 'Azure'; + +$lang->ai->models->proxyTypes = array(); +$lang->ai->models->proxyTypes[''] = 'No Proxy'; +$lang->ai->models->proxyTypes['socks5'] = 'SOCKS5'; + +$lang->ai->models->promptFor = 'Prompt for %s'; + +$lang->ai->designStepNav = array(); +$lang->ai->designStepNav['assignrole'] = 'Specify Role'; +$lang->ai->designStepNav['selectdatasource'] = 'Select Object'; +$lang->ai->designStepNav['setpurpose'] = 'Confirm Action'; +$lang->ai->designStepNav['settargetform'] = 'Process Result'; +$lang->ai->designStepNav['finalize'] = 'Ready to Publish'; + +$lang->ai->dataTypeDesc = '%s is %s type, %s'; + +$lang->ai->dataType = new stdclass(); +$lang->ai->dataType->pri = new stdClass(); +$lang->ai->dataType->pri->type = 'numeric'; +$lang->ai->dataType->pri->desc = '1 is the highest priority, 4 is the lowest priority.'; + +$lang->ai->dataType->estimate = new stdClass(); +$lang->ai->dataType->estimate->type = 'numeric'; +$lang->ai->dataType->estimate->desc = 'Unit is in hours.'; + +$lang->ai->dataType->consumed = $lang->ai->dataType->estimate; +$lang->ai->dataType->left = $lang->ai->dataType->estimate; + +$lang->ai->dataType->progress = new stdClass(); +$lang->ai->dataType->progress->type = 'percentage'; +$lang->ai->dataType->progress->desc = '0 means not started, 100 means completed.'; + +$lang->ai->dataType->datetime = new stdClass(); +$lang->ai->dataType->datetime->type = 'datetime'; +$lang->ai->dataType->datetime->desc = 'Format is: 1970-01-01 00:00:01, or leave it blank.'; + +$lang->ai->dataType->estStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->realStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->finishedDate = $lang->ai->dataType->datetime; + +$lang->ai->demoData = new stdclass(); +$lang->ai->demoData->notExist = 'The demo data does not exist for now.'; +$lang->ai->demoData->story = array( + 'story' => array + ( + 'title' => 'Develop an online learning platform', + 'spec' => 'We need to develop an online learning platform that provides course management, student management, teacher management, and other functions.', + 'verify' => '1. All functions can operate properly without any obvious errors or abnormalities.2. The interface is aesthetically pleasing and user-friendly.3. The platform can meet user needs and has a high level of user satisfaction.4. The code has good quality, with clear structure and easy maintenance.', + 'module' => 7, + 'pri' => 1, + 'estimate' => 1, + 'product' => 1, + 'category' => 'feature', + ), +); +$lang->ai->demoData->execution = array +( + 'execution' => array( + 'name' => 'Online Learning Platform Software Development', + 'desc' => 'This plan aims to develop an online learning platform software that provides accessible learning resources, including text, video, and audio, as well as some learning tools such as exams, tests, and discussion forums.', + 'estimate' => 7, + ), + 'tasks' => array( + 0 => + array( + 'name' => 'Technology Selection', + 'pri' => 1, + 'status' => 'done', + 'estimate' => 1, + 'consumed' => 1, + 'left' => 0, + 'progress' => 100, + 'estStarted' => '2023-07-02 00:00:00', + 'realStarted' => '2023-07-02 00:00:00', + 'finishedDate' => '2023-07-02 00:00:00', + 'closedReason' => 'Completed', + ), + 1 => + array( + 'name' => 'UI Design', + 'pri' => 1, + 'status' => 'doing', + 'estimate' => 2, + 'consumed' => 1, + 'left' => 1, + 'progress' => 50, + 'estStarted' => '2023-07-03 00:00:00', + 'realStarted' => '2023-07-03 00:00:00', + 'finishedDate' => '', + 'closedReason' => '', + ), + 2 => + array( + 'name' => 'Development', + 'pri' => 1, + 'status' => 'wait', + 'estimate' => 1, + 'consumed' => 0, + 'left' => 1, + 'progress' => 0, + 'estStarted' => '', + 'realStarted' => '', + 'finishedDate' => '', + 'closedReason' => '', + ), + ), +); + +/* Forms as JSON Schemas. */ +$lang->ai->formSchema = array(); +$lang->ai->formSchema['story']['create'] = new stdclass(); +$lang->ai->formSchema['story']['create']->title = 'Story'; +$lang->ai->formSchema['story']['create']->type = 'object'; +$lang->ai->formSchema['story']['create']->properties = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->spec = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->verify = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->title->description = 'Title of story'; +$lang->ai->formSchema['story']['create']->properties->spec->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->spec->description = 'Description of story'; +$lang->ai->formSchema['story']['create']->properties->verify->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->verify->description = 'Acceptance criteria of story'; +$lang->ai->formSchema['story']['create']->required = array('title', 'spec', 'verify'); +$lang->ai->formSchema['story']['change'] = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['story']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->title = 'Stories'; +$lang->ai->formSchema['story']['batchcreate']->type = 'object'; +$lang->ai->formSchema['story']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories->type = 'array'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->description = 'Stories'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->items = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['productplan']['create'] = new stdclass(); +$lang->ai->formSchema['productplan']['create']->title = 'Product Plan'; +$lang->ai->formSchema['productplan']['create']->type = 'object'; +$lang->ai->formSchema['productplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->title->description = 'Title of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->begin->type = 'date'; +$lang->ai->formSchema['productplan']['create']->properties->begin->description = 'Begin date of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->end->type = 'date'; +$lang->ai->formSchema['productplan']['create']->properties->end->description = 'End date of product plan'; +$lang->ai->formSchema['productplan']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->desc->description = 'Description of product plan'; +$lang->ai->formSchema['productplan']['create']->required = array('title', 'begin', 'end'); +$lang->ai->formSchema['productplan']['edit'] = $lang->ai->formSchema['productplan']['create']; + +$lang->ai->formSchema['task']['create'] = new stdclass(); +$lang->ai->formSchema['task']['create']->title = 'Task'; +$lang->ai->formSchema['task']['create']->type = 'object'; +$lang->ai->formSchema['task']['create']->properties = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->name = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->estimate = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->type->description = 'Type of task'; +$lang->ai->formSchema['task']['create']->properties->type->enum = array('design', 'devel', 'request', 'test', 'study', 'discuss', 'ui', 'affair', 'misc'); +$lang->ai->formSchema['task']['create']->properties->name->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->name->description = 'Name of task'; +$lang->ai->formSchema['task']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->desc->description = 'Description of task'; +$lang->ai->formSchema['task']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->pri->description = 'Priority of task'; +$lang->ai->formSchema['task']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['task']['create']->properties->estimate->type = 'number'; +$lang->ai->formSchema['task']['create']->properties->estimate->description = 'Estimated hours of task'; +$lang->ai->formSchema['task']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->begin->description = 'Begin date of task'; +$lang->ai->formSchema['task']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->end->description = 'End date of task'; +$lang->ai->formSchema['task']['create']->required = array('type', 'name'); +$lang->ai->formSchema['task']['edit'] = $lang->ai->formSchema['task']['create']; + +$lang->ai->formSchema['task']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->title = 'Tasks'; +$lang->ai->formSchema['task']['batchcreate']->type = 'object'; +$lang->ai->formSchema['task']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->type = 'array'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->description = 'Tasks'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items = $lang->ai->formSchema['task']['create']; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->estStarted = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->deadline = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end; +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin); +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end); + +$lang->ai->formSchema['bug']['create'] = new stdclass(); +$lang->ai->formSchema['bug']['create']->title = 'Bug'; +$lang->ai->formSchema['bug']['create']->type = 'object'; +$lang->ai->formSchema['bug']['create']->properties = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->severity = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->openedBuild = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->title->description = 'Title of bug'; +$lang->ai->formSchema['bug']['create']->properties->steps->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->steps->description = 'Repro steps of bug'; +$lang->ai->formSchema['bug']['create']->properties->severity->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->severity->description = 'Severity of bug'; +$lang->ai->formSchema['bug']['create']->properties->severity->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->pri->description = 'Priority of bug'; +$lang->ai->formSchema['bug']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->openedBuild->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->description = 'Affected builds of bug'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->enum = array('trunk'); +$lang->ai->formSchema['bug']['create']->required = array('title', 'steps', 'severity', 'pri', 'openedBuild'); +$lang->ai->formSchema['bug']['edit'] = $lang->ai->formSchema['bug']['create']; + +$lang->ai->formSchema['testcase']['create'] = new stdclass(); +$lang->ai->formSchema['testcase']['create']->title = 'Test Case'; +$lang->ai->formSchema['testcase']['create']->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->stage = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->precondition = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->type->description = 'Type of test case'; +$lang->ai->formSchema['testcase']['create']->properties->type->enum = array('feature', 'performance', 'config', 'install', 'security', 'interface', 'unit', 'other'); +$lang->ai->formSchema['testcase']['create']->properties->stage->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->stage->description = 'Stage of test case'; +$lang->ai->formSchema['testcase']['create']->properties->stage->enum = array('unittest', 'feature', 'intergrate', 'system', 'smoke', 'bvt'); +$lang->ai->formSchema['testcase']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->title->description = 'Title of test case'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->description = 'Precondition of test case'; +$lang->ai->formSchema['testcase']['create']->properties->steps->type = 'array'; +$lang->ai->formSchema['testcase']['create']->properties->steps->description = 'Steps of test case'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->description = 'Step description'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->description = 'Expectation of step'; +$lang->ai->formSchema['testcase']['create']->required = array('type', 'title', 'steps'); +$lang->ai->formSchema['testcase']['edit'] = $lang->ai->formSchema['testcase']['create']; + +$lang->ai->formSchema['testreport']['create'] = new stdclass(); +$lang->ai->formSchema['testreport']['create']->title = 'Test Report'; +$lang->ai->formSchema['testreport']['create']->type = 'object'; +$lang->ai->formSchema['testreport']['create']->properties = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->report = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->begin->description = 'Begin date of testing'; +$lang->ai->formSchema['testreport']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->end->description = 'End date of testing'; +$lang->ai->formSchema['testreport']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->title->description = 'Title of test report'; +$lang->ai->formSchema['testreport']['create']->properties->report->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->report->description = 'Report content'; +$lang->ai->formSchema['testreport']['create']->required = array('begin', 'end', 'title', 'report'); +$lang->ai->formSchema['execution']['testreport'] = $lang->ai->formSchema['testreport']['create']; + +$lang->ai->formSchema['doc']['edit'] = new stdclass(); +$lang->ai->formSchema['doc']['edit']->title = 'Document'; +$lang->ai->formSchema['doc']['edit']->type = 'object'; +$lang->ai->formSchema['doc']['edit']->properties = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->content = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->title->description = 'Title of the document'; +$lang->ai->formSchema['doc']['edit']->properties->content->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->content->description = 'Content of the document'; +$lang->ai->formSchema['doc']['edit']->required = array('title', 'content'); + +$lang->ai->formSchema['tree']['browse'] = new stdclass(); +$lang->ai->formSchema['tree']['browse']->title = 'Modules'; +$lang->ai->formSchema['tree']['browse']->type = 'object'; +$lang->ai->formSchema['tree']['browse']->properties = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->type = 'array'; +$lang->ai->formSchema['tree']['browse']->properties->modules->title = 'Modules'; +$lang->ai->formSchema['tree']['browse']->properties->modules->items = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->items->type = 'string'; +$lang->ai->formSchema['tree']['browse']->required = array('modules'); + +$lang->ai->formSchema['programplan']['create'] = new stdclass(); +$lang->ai->formSchema['programplan']['create']->title = 'Program Plan'; +$lang->ai->formSchema['programplan']['create']->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->type = 'array'; +$lang->ai->formSchema['programplan']['create']->properties->stages->title = 'Plans'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->description = 'Name of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->description = 'Attribute of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->enum = array('request', 'design', 'dev', 'qa', 'release', 'review', 'other'); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->type = 'boolean'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->description = 'Is milestone?'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->description = 'Begin date of stage'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->description = 'End date of stage'; +$lang->ai->formSchema['programplan']['create']->required = array('stages'); + +$lang->ai->promptMenu = new stdclass(); +$lang->ai->promptMenu->dropdownTitle = 'AI'; + +$lang->ai->dataInject = new stdclass(); +$lang->ai->dataInject->success = 'Prompt execution results are filled in.'; +$lang->ai->dataInject->fail = 'Failed to fill in prompt execution results.'; + +$lang->ai->execute = new stdclass(); +$lang->ai->execute->loading = 'Prompt executing...'; +$lang->ai->execute->auditing = 'Getting ready for auditing...'; +$lang->ai->execute->success = 'Prompt executed.'; +$lang->ai->execute->fail = 'Prompt execution failed.'; +$lang->ai->execute->failFormat = 'Prompt execution failed: %s.'; +$lang->ai->execute->failReasons = array(); +$lang->ai->execute->failReasons['noPrompt'] = 'unable to get prompt'; +$lang->ai->execute->failReasons['noObjectData'] = 'unable to get object data'; +$lang->ai->execute->failReasons['noResponse'] = 'no response from external service'; +$lang->ai->execute->failReasons['noTargetForm'] = 'unable to get target form or its required fields'; +$lang->ai->execute->executeErrors = array(); +$lang->ai->execute->executeErrors[-1] = 'unable to get prompt'; +$lang->ai->execute->executeErrors[-2] = 'unable to get object data'; +$lang->ai->execute->executeErrors[-3] = 'failed to serialize object data'; +$lang->ai->execute->executeErrors[-4] = 'unable to get target form schema'; +$lang->ai->execute->executeErrors[-5] = 'request failed or API returned error'; + +$lang->ai->audit = new stdclass(); +$lang->ai->audit->designPrompt = 'Prompt Design'; +$lang->ai->audit->afterSave = 'After saving,'; +$lang->ai->audit->regenerate = 'Regenerate'; +$lang->ai->audit->exit = 'Exit Audit'; + +$lang->ai->audit->backLocationList = array(); +$lang->ai->audit->backLocationList[0] = 'back to audit page.'; +$lang->ai->audit->backLocationList[1] = 'back to audit page and regenerate.'; diff --git a/module/ai/lang/zh-cn.php b/module/ai/lang/zh-cn.php new file mode 100644 index 0000000000..2516b7b5dc --- /dev/null +++ b/module/ai/lang/zh-cn.php @@ -0,0 +1,795 @@ + + * @package ai + * @link https://www.zentao.net + */ +$lang->ai->common = 'AI'; + +/* Definitions of table columns, used to sprintf error messages to dao::$errors. */ +$lang->prompt = new stdclass(); +$lang->prompt->name = '名称'; +$lang->prompt->desc = '描述'; +$lang->prompt->model = '语言模型'; +$lang->prompt->module = '所属分组'; +$lang->prompt->source = '对象数据'; +$lang->prompt->targetForm = '目标表单'; +$lang->prompt->purpose = '操作'; +$lang->prompt->elaboration = '补充要求'; +$lang->prompt->role = '角色'; +$lang->prompt->characterization = '角色描述'; +$lang->prompt->status = '阶段'; +$lang->prompt->createdBy = '由谁创建'; +$lang->prompt->createdDate = '创建时间'; +$lang->prompt->editedBy = '最后编辑'; +$lang->prompt->editedDate = '编辑时间'; +$lang->prompt->deleted = '是否已删除'; + +/* Lang for privs, keys are paired with privlang items. */ +$lang->ai->modelBrowse = '浏览语言模型'; +$lang->ai->modelEdit = '编辑语言模型'; +$lang->ai->modelTestConnection = '测试连接'; +$lang->ai->promptCreate = '创建提词'; +$lang->ai->promptEdit = '编辑提词'; +$lang->ai->promptDelete = '删除提词'; +$lang->ai->promptAssignRole = '指定角色'; +$lang->ai->promptSelectDataSource = '选择对象'; +$lang->ai->promptSetPurpose = '确认操作'; +$lang->ai->promptSetTargetForm = '结果处理'; +$lang->ai->promptFinalize = '准备发布'; +$lang->ai->promptAudit = '调试提词'; +$lang->ai->promptPublish = '发布提词'; +$lang->ai->promptUnpublish = '取消发布提词'; +$lang->ai->promptBrowse = '浏览提词列表'; +$lang->ai->promptView = '查看提词详情'; +$lang->ai->promptExecute = '执行提词'; +$lang->ai->promptExecutionReset = '重置调试'; +$lang->ai->roleTemplates = '管理角色模板'; + +$lang->ai->nextStep = '下一步'; +$lang->ai->goTesting = '去调试'; + +$lang->ai->validate = new stdclass(); +$lang->ai->validate->noEmpty = '%s不能为空。'; +$lang->ai->validate->dirtyForm = '%s的参数配置已变动,是否保存并返回?'; +$lang->ai->validate->nameNotUnique = '该名称已使用,请尝试其他名称。'; + +$lang->ai->prompts = new stdclass(); +$lang->ai->prompts->common = '提词'; +$lang->ai->prompts->emptyList = '暂时没有提词。'; +$lang->ai->prompts->create = '创建提词'; +$lang->ai->prompts->edit = '编辑提词'; +$lang->ai->prompts->id = 'ID'; +$lang->ai->prompts->name = '名称'; +$lang->ai->prompts->description = '描述'; +$lang->ai->prompts->createdBy = '创建者'; +$lang->ai->prompts->createdDate = '创建时间'; +$lang->ai->prompts->targetForm = '表单'; +$lang->ai->prompts->funcDesc = '功能描述'; +$lang->ai->prompts->deleted = '已删除'; +$lang->ai->prompts->stage = '阶段'; +$lang->ai->prompts->basicInfo = '基本信息'; +$lang->ai->prompts->editInfo = '创建编辑'; +$lang->ai->prompts->createdBy = '由谁创建'; +$lang->ai->prompts->publishedBy = '由谁发布'; +$lang->ai->prompts->draftedBy = '由谁下架'; +$lang->ai->prompts->lastEditor = '最后编辑'; + +$lang->ai->prompts->summary = '本页共 %s 个提词。'; + +$lang->ai->prompts->action = new stdclass(); +$lang->ai->prompts->action->goDesignConfirm = '当前提词未完成,是否继续设计?'; +$lang->ai->prompts->action->goDesign = '去设计'; +$lang->ai->prompts->action->draftConfirm = '下架后,提词将不能继续使用,您确定要下架吗?'; +$lang->ai->prompts->action->design = '设计'; +$lang->ai->prompts->action->test = '调试'; +$lang->ai->prompts->action->edit = '编辑'; +$lang->ai->prompts->action->publish = '发布'; +$lang->ai->prompts->action->unpublish = '下架'; +$lang->ai->prompts->action->delete = '删除'; +$lang->ai->prompts->action->deleteConfirm = '删除后,提词将不能继续使用,您确定要删除吗?'; +$lang->ai->prompts->action->publishSuccess = '发布成功'; + +/* Steps of prompt creation. */ +$lang->ai->prompts->assignRole = '指定角色'; +$lang->ai->prompts->selectDataSource = '选择对象'; +$lang->ai->prompts->setPurpose = '确认操作'; +$lang->ai->prompts->setTargetForm = '结果处理'; +$lang->ai->prompts->finalize = '准备发布'; + +/* Role assigning. */ +$lang->ai->prompts->model = '语言模型'; +$lang->ai->prompts->role = '角色'; +$lang->ai->prompts->characterization = '角色描述'; +$lang->ai->prompts->rolePlaceholder = '“你来扮演 <一个什么角色>”'; +$lang->ai->prompts->charPlaceholder = '该角色的具体描述信息'; +$lang->ai->prompts->roleTemplate = '角色模版'; +$lang->ai->prompts->roleTemplateTip = '引用模板后,修改角色、角色描述不会对模板造成影响。'; +$lang->ai->prompts->addRoleTemplate = '添加角色模板'; +$lang->ai->prompts->editRoleTemplate = '编辑角色模板'; +$lang->ai->prompts->editRoleTemplateTip = '本次编辑不会影响已使用该模版的提词'; +$lang->ai->prompts->roleAddedSuccess = '角色模版保存成功'; +$lang->ai->prompts->roleDelConfirm = '删除不会影响已用角色模版的提词,是否删除?'; +$lang->ai->prompts->roleDelSuccess = '角色模板已删除'; +$lang->ai->prompts->roleTemplateSave = '存为角色模板'; +$lang->ai->prompts->roleTemplateSaveList = array(); +$lang->ai->prompts->roleTemplateSaveList['save'] = '保存'; +$lang->ai->prompts->roleTemplateSaveList['discard'] = '不保存'; + +/* Data source selecting. */ +$lang->ai->prompts->selectData = '选择字段'; +$lang->ai->prompts->selectDataTip = '选择对象后,此处会展示已选对象的字段。'; +$lang->ai->prompts->selectedFormat = '已选对象为{0},已选 {1} 条字段'; +$lang->ai->prompts->nonSelected = '暂无所选字段。'; +$lang->ai->prompts->sortTip = '可根据重要性给数据字段排序。'; +$lang->ai->prompts->object = '对象'; +$lang->ai->prompts->field = '字段'; + +/* Purpose setting. */ +$lang->ai->prompts->purpose = '操作'; +$lang->ai->prompts->purposeTip = '“我希望<它能完成什么事情,以便于达到什么样的目标>”'; +$lang->ai->prompts->elaboration = '补充要求'; +$lang->ai->prompts->elaborationTip = '“我希望<它的回答请注意一些补充要求>”'; +$lang->ai->prompts->inputPreview = '输入预览'; +$lang->ai->prompts->dataPreview = '对象数据预览'; +$lang->ai->prompts->rolePreview = '角色提词预览'; +$lang->ai->prompts->promptPreview = '操作提词预览'; + +/* Target form selecting. */ +$lang->ai->prompts->selectTargetForm = '选择表单'; +$lang->ai->prompts->selectTargetFormTip = '选择后,可以将大语言模型返回的结果直接录入到禅道对应的表单中。'; +$lang->ai->prompts->goingTesting = '即将跳转至调试页面'; +$lang->ai->prompts->goingTestingFail = '无法去调试,找不到合适的对象'; + +/* Finalize page. */ +$lang->ai->moduleDisableTip = '系统根据所选对象自动关联分组'; + +/* Data source definition. */ +$lang->ai->dataSource = array(); + +$lang->ai->dataSource['my']['common'] = '地盘'; +$lang->ai->dataSource['product']['common'] = '产品'; +$lang->ai->dataSource['story']['common'] = '需求'; +$lang->ai->dataSource['productplan']['common'] = '计划'; +$lang->ai->dataSource['release']['common'] = '发布'; +$lang->ai->dataSource['project']['common'] = '项目'; +$lang->ai->dataSource['execution']['common'] = '执行'; +$lang->ai->dataSource['task']['common'] = '任务'; +$lang->ai->dataSource['bug']['common'] = 'Bug'; +$lang->ai->dataSource['case']['common'] = '用例'; +$lang->ai->dataSource['doc']['common'] = '文档'; + +$lang->ai->dataSource['my']['efforts']['common'] = '日志列表'; +$lang->ai->dataSource['my']['efforts']['date'] = '日期'; +$lang->ai->dataSource['my']['efforts']['work'] = '工作内容'; +$lang->ai->dataSource['my']['efforts']['account'] = '记录人'; +$lang->ai->dataSource['my']['efforts']['consumed'] = '耗时'; +$lang->ai->dataSource['my']['efforts']['left'] = '剩余'; +$lang->ai->dataSource['my']['efforts']['objectID'] = '对象'; +$lang->ai->dataSource['my']['efforts']['product'] = '产品'; +$lang->ai->dataSource['my']['efforts']['project'] = '项目'; +$lang->ai->dataSource['my']['efforts']['execution'] = '执行'; + +$lang->ai->dataSource['product']['product']['common'] = '产品'; +$lang->ai->dataSource['product']['product']['name'] = '产品名称'; +$lang->ai->dataSource['product']['product']['desc'] = '产品描述'; +$lang->ai->dataSource['product']['modules']['common'] = '产品模块列表'; +$lang->ai->dataSource['product']['modules']['name'] = '模块名称'; +$lang->ai->dataSource['product']['modules']['modules'] = '子模块'; + +$lang->ai->dataSource['productplan']['productplan']['common'] = '计划'; +$lang->ai->dataSource['productplan']['productplan']['title'] = '计划名称'; +$lang->ai->dataSource['productplan']['productplan']['desc'] = '计划描述'; +$lang->ai->dataSource['productplan']['productplan']['begin'] = '开始时间'; +$lang->ai->dataSource['productplan']['productplan']['end'] = '结束时间'; + +$lang->ai->dataSource['productplan']['stories']['common'] = '需求列表'; +$lang->ai->dataSource['productplan']['stories']['title'] = '需求名称'; +$lang->ai->dataSource['productplan']['stories']['module'] = '所属模块'; +$lang->ai->dataSource['productplan']['stories']['pri'] = '优先级'; +$lang->ai->dataSource['productplan']['stories']['estimate'] = '预计故事点'; +$lang->ai->dataSource['productplan']['stories']['status'] = '状态'; +$lang->ai->dataSource['productplan']['stories']['stage'] = '阶段'; + +$lang->ai->dataSource['productplan']['bugs']['common'] = 'Bug列表'; +$lang->ai->dataSource['productplan']['bugs']['title'] = 'Bug标题'; +$lang->ai->dataSource['productplan']['bugs']['pri'] = '优先级'; +$lang->ai->dataSource['productplan']['bugs']['status'] = '状态'; + +$lang->ai->dataSource['release']['release']['common'] = '发布'; +$lang->ai->dataSource['release']['release']['product'] = '所属产品'; +$lang->ai->dataSource['release']['release']['name'] = '发布名称'; +$lang->ai->dataSource['release']['release']['desc'] = '发布描述'; +$lang->ai->dataSource['release']['release']['date'] = '发布日期'; + +$lang->ai->dataSource['release']['stories']['common'] = '需求列表'; +$lang->ai->dataSource['release']['stories']['title'] = '需求名称'; +$lang->ai->dataSource['release']['stories']['estimate'] = '预估故事点'; + +$lang->ai->dataSource['release']['bugs']['common'] = 'Bug列表'; +$lang->ai->dataSource['release']['bugs']['title'] = 'Bug标题'; + +$lang->ai->dataSource['project']['project']['common'] = '项目'; +$lang->ai->dataSource['project']['project']['name'] = '项目名称'; +$lang->ai->dataSource['project']['project']['type'] = '项目类型'; +$lang->ai->dataSource['project']['project']['desc'] = '项目描述'; +$lang->ai->dataSource['project']['project']['begin'] = '计划开始'; +$lang->ai->dataSource['project']['project']['end'] = '计划结束'; +$lang->ai->dataSource['project']['project']['estimate'] = '预计工时'; + +$lang->ai->dataSource['project']['programplans']['common'] = '阶段列表'; +$lang->ai->dataSource['project']['programplans']['name'] = '阶段名称'; +$lang->ai->dataSource['project']['programplans']['desc'] = '阶段描述'; +$lang->ai->dataSource['project']['programplans']['status'] = '阶段状态'; +$lang->ai->dataSource['project']['programplans']['begin'] = '计划开始'; +$lang->ai->dataSource['project']['programplans']['end'] = '计划完成'; +$lang->ai->dataSource['project']['programplans']['realBegan'] = '实际开始'; +$lang->ai->dataSource['project']['programplans']['realEnd'] = '实际完成'; +$lang->ai->dataSource['project']['programplans']['planDuration'] = '工期'; +$lang->ai->dataSource['project']['programplans']['progress'] = '任务进度'; +$lang->ai->dataSource['project']['programplans']['estimate'] = '预计工时'; +$lang->ai->dataSource['project']['programplans']['consumed'] = '消耗工时'; +$lang->ai->dataSource['project']['programplans']['left'] = '剩余工时'; + +$lang->ai->dataSource['project']['executions']['common'] = '迭代列表'; +$lang->ai->dataSource['project']['executions']['name'] = '执行名称'; +$lang->ai->dataSource['project']['executions']['desc'] = '执行描述'; +$lang->ai->dataSource['project']['executions']['status'] = '执行状态'; +$lang->ai->dataSource['project']['executions']['begin'] = '计划开始'; +$lang->ai->dataSource['project']['executions']['end'] = '计划完成'; +$lang->ai->dataSource['project']['executions']['realBegan'] = '实际开始'; +$lang->ai->dataSource['project']['executions']['realEnd'] = '实际完成'; +$lang->ai->dataSource['project']['executions']['estimate'] = '预计工时'; +$lang->ai->dataSource['project']['executions']['consumed'] = '消耗工时'; +$lang->ai->dataSource['project']['executions']['left'] = '剩余工时'; +$lang->ai->dataSource['project']['executions']['progress'] = '进度'; + +$lang->ai->dataSource['story']['story']['common'] = '需求'; +$lang->ai->dataSource['story']['story']['title'] = '需求标题'; +$lang->ai->dataSource['story']['story']['spec'] = '需求描述'; +$lang->ai->dataSource['story']['story']['verify'] = '验收标准'; +$lang->ai->dataSource['story']['story']['product'] = '产品'; +$lang->ai->dataSource['story']['story']['module'] = '模块'; +$lang->ai->dataSource['story']['story']['pri'] = '优先级'; +$lang->ai->dataSource['story']['story']['category'] = '需求类型'; +$lang->ai->dataSource['story']['story']['estimate'] = '预计工时'; + +$lang->ai->dataSource['execution']['execution']['common'] = '执行'; +$lang->ai->dataSource['execution']['execution']['name'] = '执行名称'; +$lang->ai->dataSource['execution']['execution']['desc'] = '执行描述'; +$lang->ai->dataSource['execution']['execution']['estimate'] = '预计工时'; + +$lang->ai->dataSource['execution']['tasks']['common'] = '任务列表'; +$lang->ai->dataSource['execution']['tasks']['name'] = '任务名称'; +$lang->ai->dataSource['execution']['tasks']['pri'] = '优先级'; +$lang->ai->dataSource['execution']['tasks']['status'] = '状态'; +$lang->ai->dataSource['execution']['tasks']['estimate'] = '预计工时'; +$lang->ai->dataSource['execution']['tasks']['consumed'] = '已消耗'; +$lang->ai->dataSource['execution']['tasks']['left'] = '剩余'; +$lang->ai->dataSource['execution']['tasks']['progress'] = '进度'; +$lang->ai->dataSource['execution']['tasks']['estStarted'] = '预计开始'; +$lang->ai->dataSource['execution']['tasks']['realStarted'] = '实际开始'; +$lang->ai->dataSource['execution']['tasks']['finishedDate']= '完成日期'; +$lang->ai->dataSource['execution']['tasks']['closedReason']= '关闭原因'; + +$lang->ai->dataSource['task']['task']['common'] = '任务'; +$lang->ai->dataSource['task']['task']['name'] = '任务名称'; +$lang->ai->dataSource['task']['task']['desc'] = '任务描述'; +$lang->ai->dataSource['task']['task']['pri'] = '优先级'; +$lang->ai->dataSource['task']['task']['status'] = '状态'; +$lang->ai->dataSource['task']['task']['estimate'] = '预计'; +$lang->ai->dataSource['task']['task']['consumed'] = '消耗'; +$lang->ai->dataSource['task']['task']['left'] = '剩余'; +$lang->ai->dataSource['task']['task']['progress'] = '进度'; +$lang->ai->dataSource['task']['task']['estStarted'] = '预计开始'; +$lang->ai->dataSource['task']['task']['realStarted'] = '实际开始'; + +$lang->ai->dataSource['case']['case']['common'] = '用例'; +$lang->ai->dataSource['case']['case']['title'] = '标题'; +$lang->ai->dataSource['case']['case']['precondition'] = '前置条件'; +$lang->ai->dataSource['case']['case']['scene'] = '所属场景'; +$lang->ai->dataSource['case']['case']['product'] = '所属产品'; +$lang->ai->dataSource['case']['case']['module'] = '所属模块'; +$lang->ai->dataSource['case']['case']['pri'] = '优先级'; +$lang->ai->dataSource['case']['case']['type'] = '类型'; +$lang->ai->dataSource['case']['case']['lastRunResult'] = '结果'; +$lang->ai->dataSource['case']['case']['status'] = '状态'; + +$lang->ai->dataSource['case']['steps']['common'] = '步骤列表'; +$lang->ai->dataSource['case']['steps']['desc'] = '步骤描述'; +$lang->ai->dataSource['case']['steps']['expect'] = '预期'; + +$lang->ai->dataSource['bug']['bug']['common'] = 'Bug'; +$lang->ai->dataSource['bug']['bug']['title'] = 'Bug标题'; +$lang->ai->dataSource['bug']['bug']['steps'] = '重现步骤'; +$lang->ai->dataSource['bug']['bug']['severity'] = '级别'; +$lang->ai->dataSource['bug']['bug']['pri'] = '优先级'; +$lang->ai->dataSource['bug']['bug']['status'] = '状态'; +$lang->ai->dataSource['bug']['bug']['confirmed'] = '确认'; +$lang->ai->dataSource['bug']['bug']['type'] = 'Bug类型'; + +$lang->ai->dataSource['doc']['doc']['common'] = '文档'; +$lang->ai->dataSource['doc']['doc']['title'] = '文档标题'; +$lang->ai->dataSource['doc']['doc']['content'] = '文档正文'; +$lang->ai->dataSource['doc']['doc']['addedBy'] = '创建者'; +$lang->ai->dataSource['doc']['doc']['addedDate'] = '创建日期'; +$lang->ai->dataSource['doc']['doc']['editedBy'] = '修改者'; +$lang->ai->dataSource['doc']['doc']['editedDate'] = '修改日期'; + +/* Target form definition. See `$config->ai->targetForm`. */ +$lang->ai->targetForm = array(); +$lang->ai->targetForm['product']['common'] = '产品'; +$lang->ai->targetForm['story']['common'] = '需求'; +$lang->ai->targetForm['productplan']['common'] = '计划'; +$lang->ai->targetForm['projectrelease']['common'] = '发布'; +$lang->ai->targetForm['project']['common'] = '项目'; +$lang->ai->targetForm['execution']['common'] = '执行'; +$lang->ai->targetForm['task']['common'] = '任务'; +$lang->ai->targetForm['testcase']['common'] = '用例'; +$lang->ai->targetForm['bug']['common'] = 'Bug'; +$lang->ai->targetForm['doc']['common'] = '文档'; + +$lang->ai->targetForm['product']['tree/managechild'] = '维护模块'; +$lang->ai->targetForm['product']['doc/create'] = '创建文档'; + +$lang->ai->targetForm['story']['create'] = '提需求'; +$lang->ai->targetForm['story']['batchcreate'] = '批量提需求'; +$lang->ai->targetForm['story']['change'] = '变更需求'; +$lang->ai->targetForm['story']['totask'] = '需求建任务'; +$lang->ai->targetForm['story']['testcasecreate'] = '需求建用例'; +$lang->ai->targetForm['story']['subdivide'] = '需求细分'; + +$lang->ai->targetForm['productplan']['edit'] = '编辑计划'; +$lang->ai->targetForm['productplan']['create'] = '创建子计划'; + +$lang->ai->targetForm['projectrelease']['doc/create'] = '创建文档'; + +$lang->ai->targetForm['project']['risk/create'] = '创建风险'; +$lang->ai->targetForm['project']['issue/create'] = '创建问题'; +$lang->ai->targetForm['project']['doc/create'] = '创建文档'; +$lang->ai->targetForm['project']['programplan/create'] = '设置阶段'; + +$lang->ai->targetForm['execution']['batchcreatetask'] = '批量创建任务'; +$lang->ai->targetForm['execution']['createtestreport'] = '创建测试报告'; +$lang->ai->targetForm['execution']['createqa'] = '创建 QA'; +$lang->ai->targetForm['execution']['createrisk'] = '创建风险'; +$lang->ai->targetForm['execution']['createissue'] = '创建问题'; + +$lang->ai->targetForm['task']['edit'] = '编辑任务'; +$lang->ai->targetForm['task']['batchcreate'] = '批量创建子任务'; + +$lang->ai->targetForm['testcase']['edit'] = '编辑用例'; +$lang->ai->targetForm['testcase']['createscript'] = '创建自动化脚本'; + +$lang->ai->targetForm['bug']['edit'] = '编辑 Bug'; +$lang->ai->targetForm['bug']['story/create'] = 'Bug 转需求'; +$lang->ai->targetForm['bug']['testcase/create'] = 'Bug 建用例'; + +$lang->ai->targetForm['doc']['create'] = '创建文档'; +$lang->ai->targetForm['doc']['edit'] = '编辑文档'; + +$lang->ai->prompts->statuses = array(); +$lang->ai->prompts->statuses[''] = '全部'; +$lang->ai->prompts->statuses['draft'] = '未发布'; +$lang->ai->prompts->statuses['active'] = '已发布'; + +$lang->ai->prompts->modules = array(); +$lang->ai->prompts->modules[''] = '所有分组'; +// $lang->ai->prompts->modules['my'] = '地盘'; +$lang->ai->prompts->modules['product'] = '产品'; +$lang->ai->prompts->modules['project'] = '项目'; +$lang->ai->prompts->modules['story'] = '需求'; +$lang->ai->prompts->modules['productplan'] = '计划'; +$lang->ai->prompts->modules['release'] = '发布'; +$lang->ai->prompts->modules['execution'] = '执行'; +$lang->ai->prompts->modules['task'] = '任务'; +$lang->ai->prompts->modules['case'] = '用例'; +$lang->ai->prompts->modules['bug'] = 'Bug'; +$lang->ai->prompts->modules['doc'] = '文档'; + +$lang->ai->conversations = new stdclass(); +$lang->ai->conversations->common = '会话'; + +$lang->ai->models = new stdclass(); +$lang->ai->models->title = '语言模型配置'; +$lang->ai->models->common = '语言模型'; +$lang->ai->models->type = '语言模型'; +$lang->ai->models->vendor = '供应商'; +$lang->ai->models->key = 'API Key'; +$lang->ai->models->resource = 'Resource'; +$lang->ai->models->deployment = 'Deployment'; +$lang->ai->models->proxyType = '代理类型'; +$lang->ai->models->proxyAddr = '代理地址'; +$lang->ai->models->description = '描述'; +$lang->ai->models->testConnection = '测试连接'; +$lang->ai->models->unconfigured = '未配置'; +$lang->ai->models->edit = '编辑模型参数'; +$lang->ai->models->concealTip = '完整信息在编辑时可见'; +$lang->ai->models->upgradeBiz = '更多AI功能,尽在企业版!'; +$lang->ai->models->noModelError = '暂无可用的语言模型,请联系管理员配置。'; + +$lang->ai->models->testConnectionResult = new stdclass(); +$lang->ai->models->testConnectionResult->success = '连接成功'; +$lang->ai->models->testConnectionResult->fail = '连接失败'; +$lang->ai->models->testConnectionResult->failFormat = '连接失败:%s'; + +$lang->ai->models->statusList = array(); +$lang->ai->models->statusList['on'] = '启用'; +$lang->ai->models->statusList['off'] = '停用'; + +$lang->ai->models->typeList = array(); +$lang->ai->models->typeList['openai-gpt35'] = 'OpenAI / GPT-3.5'; +// $lang->ai->models->typeList['azure-gpt35'] = 'Azure / GPT-3.5'; + +$lang->ai->models->openaiVendorList = array(); +$lang->ai->models->openaiVendorList['openai'] = 'OpenAI'; +$lang->ai->models->openaiVendorList['azure'] = 'Azure'; + +$lang->ai->models->proxyTypes = array(); +$lang->ai->models->proxyTypes[''] = '不使用代理'; +$lang->ai->models->proxyTypes['socks5'] = 'SOCKS5'; + +$lang->ai->models->promptFor = '输入给 %s'; + +$lang->ai->designStepNav = array(); +$lang->ai->designStepNav['assignrole'] = '指定角色'; +$lang->ai->designStepNav['selectdatasource'] = '选择对象'; +$lang->ai->designStepNav['setpurpose'] = '确认操作'; +$lang->ai->designStepNav['settargetform'] = '结果处理'; +$lang->ai->designStepNav['finalize'] = '准备发布'; + +$lang->ai->dataTypeDesc = '%s是%s类型,%s'; + +$lang->ai->dataType = new stdclass(); +$lang->ai->dataType->pri = new stdClass(); +$lang->ai->dataType->pri->type = '数值'; +$lang->ai->dataType->pri->desc = '1 是最高优先级,4 是最低优先级。'; + +$lang->ai->dataType->estimate = new stdClass(); +$lang->ai->dataType->estimate->type = '数值'; +$lang->ai->dataType->estimate->desc = '单位为小时。'; + +$lang->ai->dataType->consumed = $lang->ai->dataType->estimate; +$lang->ai->dataType->left = $lang->ai->dataType->estimate; + +$lang->ai->dataType->progress = new stdClass(); +$lang->ai->dataType->progress->type = '百分比'; +$lang->ai->dataType->progress->desc = '0 是未开始,100是已完成。'; + +$lang->ai->dataType->datetime = new stdClass(); +$lang->ai->dataType->datetime->type = '日期时间'; +$lang->ai->dataType->datetime->desc = '格式为:1970-01-01 00:00:01,没有则留空。'; + +$lang->ai->dataType->estStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->realStarted = $lang->ai->dataType->datetime; +$lang->ai->dataType->finishedDate = $lang->ai->dataType->datetime; + +$lang->ai->demoData = new stdclass(); +$lang->ai->demoData->notExist = '暂无演示数据。'; +$lang->ai->demoData->story = array( + 'story' => array + ( + 'title' => '开发一个在线学习平台', + 'spec' => '我们需要开发一个在线学习平台,能够提供课程管理、学生管理、教师管理等功能。', + 'verify' => '1. 所有功能均能够正常运行,没有明显的错误和异常。2. 界面美观、易用性好。3. 平台能够满足用户需求,具有较高的用户满意度。4. 代码质量好,结构清晰、易于维护。', + 'module' => 7, + 'pri' => 1, + 'estimate' => 1, + 'product' => 1, + 'category' => 'feature', + ), +); +$lang->ai->demoData->execution = array +( + 'execution' => array( + 'name' => '在线学习平台软件开发', + 'desc' => '本计划旨在开发一款在线学习平台软件,该软件将提供可访问的学习资源,包括文本、视频和音频等,以及一些学习工具如考试、测试和讨论论坛等。', + 'estimate' => 7, + ), + 'tasks' => array( + 0 => + array( + 'name' => '技术选型', + 'pri' => 1, + 'status' => 'done', + 'estimate' => 1, + 'consumed' => 1, + 'left' => 0, + 'progress' => 100, + 'estStarted' => '2023-07-02 00:00:00', + 'realStarted' => '2023-07-02 00:00:00', + 'finishedDate' => '2023-07-02 00:00:00', + 'closedReason' => '已完成', + ), + 1 => + array( + 'name' => 'UI设计', + 'pri' => 1, + 'status' => 'doing', + 'estimate' => 2, + 'consumed' => 1, + 'left' => 1, + 'progress' => 50, + 'estStarted' => '2023-07-03 00:00:00', + 'realStarted' => '2023-07-03 00:00:00', + 'finishedDate' => '', + 'closedReason' => '', + ), + 2 => + array( + 'name' => '开发', + 'pri' => 1, + 'status' => 'wait', + 'estimate' => 1, + 'consumed' => 0, + 'left' => 1, + 'progress' => 0, + 'estStarted' => '', + 'realStarted' => '', + 'finishedDate' => '', + 'closedReason' => '', + ), + ), +); + +/* Forms as JSON Schemas. */ +$lang->ai->formSchema = array(); +$lang->ai->formSchema['story']['create'] = new stdclass(); +$lang->ai->formSchema['story']['create']->title = '需求'; +$lang->ai->formSchema['story']['create']->type = 'object'; +$lang->ai->formSchema['story']['create']->properties = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->spec = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->verify = new stdclass(); +$lang->ai->formSchema['story']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->title->description = '需求的标题'; +$lang->ai->formSchema['story']['create']->properties->spec->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->spec->description = '需求的描述'; +$lang->ai->formSchema['story']['create']->properties->verify->type = 'string'; +$lang->ai->formSchema['story']['create']->properties->verify->description = '需求的验收标准'; +$lang->ai->formSchema['story']['create']->required = array('title', 'spec', 'verify'); +$lang->ai->formSchema['story']['change'] = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['story']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->title = '批量创建需求'; +$lang->ai->formSchema['story']['batchcreate']->type = 'object'; +$lang->ai->formSchema['story']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories = new stdclass(); +$lang->ai->formSchema['story']['batchcreate']->properties->stories->type = 'array'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->description = '需求列表'; +$lang->ai->formSchema['story']['batchcreate']->properties->stories->items = $lang->ai->formSchema['story']['create']; + +$lang->ai->formSchema['productplan']['create'] = new stdclass(); +$lang->ai->formSchema['productplan']['create']->title = '产品计划'; +$lang->ai->formSchema['productplan']['create']->type = 'object'; +$lang->ai->formSchema['productplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['productplan']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->title->description = '产品计划的标题'; +$lang->ai->formSchema['productplan']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->begin->description = '产品计划的开始时间'; +$lang->ai->formSchema['productplan']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->end->description = '产品计划的结束时间'; +$lang->ai->formSchema['productplan']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['productplan']['create']->properties->desc->description = '产品计划的描述'; +$lang->ai->formSchema['productplan']['create']->required = array('title', 'begin', 'end'); +$lang->ai->formSchema['productplan']['edit'] = $lang->ai->formSchema['productplan']['create']; + +$lang->ai->formSchema['task']['create'] = new stdclass(); +$lang->ai->formSchema['task']['create']->title = '任务'; +$lang->ai->formSchema['task']['create']->type = 'object'; +$lang->ai->formSchema['task']['create']->properties = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->name = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->desc = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->estimate = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['task']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->type->description = '任务的类型'; +$lang->ai->formSchema['task']['create']->properties->type->enum = array('design', 'devel', 'request', 'test', 'study', 'discuss', 'ui', 'affair', 'misc'); +$lang->ai->formSchema['task']['create']->properties->name->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->name->description = '任务的名称'; +$lang->ai->formSchema['task']['create']->properties->desc->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->desc->description = '任务的描述'; +$lang->ai->formSchema['task']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->pri->description = '任务的优先级'; +$lang->ai->formSchema['task']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['task']['create']->properties->estimate->type = 'number'; +$lang->ai->formSchema['task']['create']->properties->estimate->description = '任务的预计工时'; +$lang->ai->formSchema['task']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->begin->description = '任务的预计开始日期'; +$lang->ai->formSchema['task']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['task']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['task']['create']->properties->end->description = '任务的预计结束日期'; +$lang->ai->formSchema['task']['create']->required = array('type', 'name'); +$lang->ai->formSchema['task']['edit'] = $lang->ai->formSchema['task']['create']; + +$lang->ai->formSchema['task']['batchcreate'] = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->title = '批量创建任务'; +$lang->ai->formSchema['task']['batchcreate']->type = 'object'; +$lang->ai->formSchema['task']['batchcreate']->properties = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks = new stdclass(); +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->type = 'array'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->description = '任务列表'; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items = $lang->ai->formSchema['task']['create']; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->estStarted = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin; +$lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->deadline = clone $lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end; +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->begin); +unset($lang->ai->formSchema['task']['batchcreate']->properties->tasks->items->properties->end); + +$lang->ai->formSchema['bug']['create'] = new stdclass(); +$lang->ai->formSchema['bug']['create']->title = 'Bug'; +$lang->ai->formSchema['bug']['create']->type = 'object'; +$lang->ai->formSchema['bug']['create']->properties = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->severity = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->pri = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->openedBuild = new stdclass(); +$lang->ai->formSchema['bug']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->title->description = 'Bug 的标题'; +$lang->ai->formSchema['bug']['create']->properties->steps->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->steps->description = '重现步骤'; +$lang->ai->formSchema['bug']['create']->properties->severity->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->severity->description = 'Bug 的严重程度'; +$lang->ai->formSchema['bug']['create']->properties->severity->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->pri->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->pri->description = 'Bug 的优先级'; +$lang->ai->formSchema['bug']['create']->properties->pri->enum = array('1', '2', '3', '4'); +$lang->ai->formSchema['bug']['create']->properties->openedBuild->type = 'string'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->description = 'Bug 影响的版本'; +$lang->ai->formSchema['bug']['create']->properties->openedBuild->enum = array('trunk'); +$lang->ai->formSchema['bug']['create']->required = array('title', 'steps', 'severity', 'pri', 'openedBuild'); +$lang->ai->formSchema['bug']['edit'] = $lang->ai->formSchema['bug']['create']; + +$lang->ai->formSchema['testcase']['create'] = new stdclass(); +$lang->ai->formSchema['testcase']['create']->title = '用例'; +$lang->ai->formSchema['testcase']['create']->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->stage = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->precondition = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects = new stdclass(); +$lang->ai->formSchema['testcase']['create']->properties->type->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->type->description = '用例的类型'; +$lang->ai->formSchema['testcase']['create']->properties->type->enum = array('feature', 'performance', 'config', 'install', 'security', 'interface', 'unit', 'other'); +$lang->ai->formSchema['testcase']['create']->properties->stage->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->stage->description = '用例适用阶段'; +$lang->ai->formSchema['testcase']['create']->properties->stage->enum = array('unittest', 'feature', 'intergrate', 'system', 'smoke', 'bvt'); +$lang->ai->formSchema['testcase']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->title->description = '用例的标题'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->precondition->description = '用例的前置条件'; +$lang->ai->formSchema['testcase']['create']->properties->steps->type = 'array'; +$lang->ai->formSchema['testcase']['create']->properties->steps->description = '用例的步骤列表'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->type = 'object'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->steps->description = '步骤的描述'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->type = 'string'; +$lang->ai->formSchema['testcase']['create']->properties->steps->items->properties->expects->description = '步骤的预期结果'; +$lang->ai->formSchema['testcase']['create']->required = array('type', 'title', 'steps'); +$lang->ai->formSchema['testcase']['edit'] = $lang->ai->formSchema['testcase']['create']; + +$lang->ai->formSchema['testreport']['create'] = new stdclass(); +$lang->ai->formSchema['testreport']['create']->title = '测试报告'; +$lang->ai->formSchema['testreport']['create']->type = 'object'; +$lang->ai->formSchema['testreport']['create']->properties = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->end = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->title = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->report = new stdclass(); +$lang->ai->formSchema['testreport']['create']->properties->begin->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->begin->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->begin->description = '测试开始时间'; +$lang->ai->formSchema['testreport']['create']->properties->end->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->end->format = 'date'; +$lang->ai->formSchema['testreport']['create']->properties->end->description = '测试开始时间'; +$lang->ai->formSchema['testreport']['create']->properties->title->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->title->description = '测试报告的标题'; +$lang->ai->formSchema['testreport']['create']->properties->report->type = 'string'; +$lang->ai->formSchema['testreport']['create']->properties->report->description = '测试报告的内容'; +$lang->ai->formSchema['testreport']['create']->required = array('begin', 'end', 'title', 'report'); +$lang->ai->formSchema['execution']['testreport'] = $lang->ai->formSchema['testreport']['create']; + +$lang->ai->formSchema['doc']['edit'] = new stdclass(); +$lang->ai->formSchema['doc']['edit']->title = '文档'; +$lang->ai->formSchema['doc']['edit']->type = 'object'; +$lang->ai->formSchema['doc']['edit']->properties = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->content = new stdclass(); +$lang->ai->formSchema['doc']['edit']->properties->title->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->title->description = '文档的标题'; +$lang->ai->formSchema['doc']['edit']->properties->content->type = 'string'; +$lang->ai->formSchema['doc']['edit']->properties->content->description = '文档的正文'; +$lang->ai->formSchema['doc']['edit']->required = array('title', 'content'); + +$lang->ai->formSchema['tree']['browse'] = new stdclass(); +$lang->ai->formSchema['tree']['browse']->title = '模块'; +$lang->ai->formSchema['tree']['browse']->type = 'object'; +$lang->ai->formSchema['tree']['browse']->properties = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->type = 'array'; +$lang->ai->formSchema['tree']['browse']->properties->modules->title = '模块'; +$lang->ai->formSchema['tree']['browse']->properties->modules->items = new stdclass(); +$lang->ai->formSchema['tree']['browse']->properties->modules->items->type = 'string'; +$lang->ai->formSchema['tree']['browse']->required = array('modules'); + +$lang->ai->formSchema['programplan']['create'] = new stdclass(); +$lang->ai->formSchema['programplan']['create']->title = '计划阶段'; +$lang->ai->formSchema['programplan']['create']->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->type = 'array'; +$lang->ai->formSchema['programplan']['create']->properties->stages->title = '阶段列表'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->type = 'object'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end = new stdclass(); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->names->description = '阶段名称'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->description = '阶段类型'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->attributes->enum = array('request', 'design', 'dev', 'qa', 'release', 'review', 'other'); +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->type = 'boolean'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->milestone->description = '是否为里程碑'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->begin->description = '阶段开始时间'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->type = 'string'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->format = 'date'; +$lang->ai->formSchema['programplan']['create']->properties->stages->items->properties->end->description = '阶段结束时间'; +$lang->ai->formSchema['programplan']['create']->required = array('stages'); + +$lang->ai->promptMenu = new stdclass(); +$lang->ai->promptMenu->dropdownTitle = 'AI'; + +$lang->ai->dataInject = new stdclass(); +$lang->ai->dataInject->success = '已将提词执行结果填写到表单中'; +$lang->ai->dataInject->fail = '提词执行结果填写失败'; + +$lang->ai->execute = new stdclass(); +$lang->ai->execute->loading = '提词执行中'; +$lang->ai->execute->auditing = '即将跳转至调试页面并执行提词'; +$lang->ai->execute->success = '提词执行成功'; +$lang->ai->execute->fail = '提词执行失败'; +$lang->ai->execute->failFormat = '提词执行失败:%s。'; +$lang->ai->execute->failReasons = array(); +$lang->ai->execute->failReasons['noPrompt'] = '提词不存在'; +$lang->ai->execute->failReasons['noObjectData'] = '对象数据获取失败'; +$lang->ai->execute->failReasons['noResponse'] = '请求返回值为空'; +$lang->ai->execute->failReasons['noTargetForm'] = '目标表单地址获取失败,或表单必要变量获取失败(可能原因为无法找到关联的对象,请检查对象间的关联关系)'; +$lang->ai->execute->executeErrors = array(); +$lang->ai->execute->executeErrors[-1] = '提词不存在'; +$lang->ai->execute->executeErrors[-2] = '对象数据获取失败'; +$lang->ai->execute->executeErrors[-3] = '序列化对象数据失败'; +$lang->ai->execute->executeErrors[-4] = '表单结构获取失败'; +$lang->ai->execute->executeErrors[-5] = 'API 返回值为空或返回了错误'; + +$lang->ai->audit = new stdclass(); +$lang->ai->audit->designPrompt = '提词设计'; +$lang->ai->audit->afterSave = '保存后'; +$lang->ai->audit->regenerate = '重新生成'; +$lang->ai->audit->exit = '退出调试'; + +$lang->ai->audit->backLocationList = array(); +$lang->ai->audit->backLocationList[0] = '返回调试页面'; +$lang->ai->audit->backLocationList[1] = '返回调试页面并重新生成'; diff --git a/module/ai/model.php b/module/ai/model.php new file mode 100644 index 0000000000..716cdd5bea --- /dev/null +++ b/module/ai/model.php @@ -0,0 +1,1600 @@ + + * @package ai + * @link https://www.zentao.net + */ +class aiModel extends model +{ + /** + * Model config. + * + * @var object + * @access public + */ + public $modelConfig; + + /** + * Errors from last request. + * + * @var array + * @access public + */ + public $errors = array(); + + /** + * Constructor. Get model config from system.ai settings. + * + * @access public + * @return void + */ + public function __construct() + { + parent::__construct(); + + /* Load config from setting. */ + $this->modelConfig = new stdclass(); + $openaiSettings = $this->loadModel('setting')->getItems("owner=system&module=ai"); + foreach($openaiSettings as $item) $this->modelConfig->{$item->key} = $item->value; + } + + /** + * Set model config, used for testing. + * + * @param object $config + * @access public + * @return void + */ + public function setConfig($config) + { + $this->modelConfig = $config; + } + + /** + * Make request to OpenAI API. + * + * @param string $type chat | completion | edit + * @param mixed $data data to send + * @param int $timeout request timeout in seconds + * @access private + * @return mixed false if error, json string if success + */ + private function makeRequest($type, $data, $timeout = 10) + { + /* Try encoding data to json, handles both encoded json and raw data. */ + $postData = json_encode($data); + if(json_last_error()) $postData = $data; + + /* Set auth and content-type headers. */ + $requestHeaders = array(sprintf($this->config->ai->openai->api->{$this->modelConfig->vendor}->authFormat, $this->modelConfig->key)); + $requestHeaders[] = isset($this->config->ai->openai->contentType[$type]) ? $this->config->ai->openai->contentType[$type] : $this->config->ai->openai->contentType['']; + + /* Assemble request url. */ + if($this->modelConfig->vendor == 'azure') + { + $url = sprintf($this->config->ai->openai->api->azure->format, $this->config->ai->openai->api->azure->resource, $this->config->ai->openai->api->azure->deployment, $this->config->ai->openai->api->methods[$type], $this->config->ai->openai->api->azure->apiVersion); + } + else + { + $url = sprintf($this->config->ai->openai->api->openai->format, $this->config->ai->openai->api->openai->version, $this->config->ai->openai->api->methods[$type]); + } + + /* Set up requestor. */ + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); + curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); + + /* Use proxy if proxy is set. */ + if(!empty($this->modelConfig->proxyType) && !empty($this->modelConfig->proxyAddr)) + { + curl_setopt($ch, CURLOPT_PROXY, $this->modelConfig->proxyAddr); + curl_setopt($ch, CURLOPT_PROXYTYPE, static::getProxyType($this->modelConfig->proxyType)); + } + + $result = curl_exec($ch); + + if(isset($this->config->debug) && $this->config->debug >= 1) + { + global $app; + $logFile = $app->getLogRoot() . 'saas.' . date('Ymd') . '.log.php'; + if(!file_exists($logFile)) file_put_contents($logFile, ''); + $fh = @fopen($logFile, 'a'); + if($fh) + { + fwrite($fh, date('Ymd H:i:s') . ": " . $app->getURI() . ' AI Request' . "\n"); + fwrite($fh, "postData: " . print_r($data, true) . "\n"); + fwrite($fh, "results:" . print_r($result, true) . "\n"); + fclose($fh); + } + } + + if(curl_errno($ch)) return false; + curl_close($ch); + + return $result; + } + + /** + * Get proxy type. + * + * @param string $proxyType + * @access private + * @return int|false + */ + private static function getProxyType($proxyType) + { + if(!in_array($proxyType, array('http', 'socks4', 'socks5'))) return false; + return constant('CURLPROXY_' . strtoupper($proxyType)); + } + + /** + * Convert camelCase to snake_case. + * + * @param string $str + * @access private + * @return string + */ + private static function camelCaseToSnakeCase($str) + { + return strtolower(preg_replace('/(? $value) $standardizedData->{static::camelCaseToSnakeCase($key)} = $value; + return $standardizedData; + } + + /** + * Assemble request data params, filters out the unwanted ones, and will return false if missing any required param. + * + * @param string $type + * @param object $data + * @access private + * @return mixed false if missing required params, post data object if success + */ + private function assembleRequestData($type, $data) + { + $postData = new stdclass(); + $postData->model = $this->config->ai->openai->model->$type; + + $data = static::standardizeParams($data); + + /* Set required params, abort if missing. */ + foreach($this->config->ai->openai->params->$type->required as $param) + { + if(!isset($data->$param)) return false; + $postData->$param = $data->$param; + } + + /* Set optional params. */ + foreach($this->config->ai->openai->params->$type->optional as $param) + { + if(isset($data->$param)) $postData->$param = $data->$param; + } + + return $postData; + } + + /** + * Decode response from OpenAI API, add error to $this->errors if any. + * + * @param string $response json string + * @access private + * @return mixed false if error, json object if success + */ + private function decodeResponse($response) + { + $response = json_decode($response); + if(json_last_error()) + { + /* Polyfill for PHP 5 < 5.5.0. */ + if(!function_exists('json_last_error_msg')) + { + function json_last_error_msg() + { + switch(json_last_error()) + { + case JSON_ERROR_DEPTH: return 'Maximum stack depth exceeded'; + case JSON_ERROR_STATE_MISMATCH: return 'Underflow or the modes mismatch'; + case JSON_ERROR_CTRL_CHAR: return 'Unexpected control character found'; + case JSON_ERROR_SYNTAX: return 'Syntax error, malformed JSON'; + case JSON_ERROR_UTF8: return 'Malformed UTF-8 characters, possibly incorrectly encoded'; + default: return 'Unknown error'; + } + } + } + + $this->errors[] = 'JSON decode error: ' . json_last_error_msg(); + return false; + } + if(isset($response->error)) + { + $this->errors[] = isset($response->error->message) ? $response->error->message : 'Unknown error'; + return false; + } + return $response; + } + + /** + * Parse text responses from simple APIs. For example, completion. + * + * @param string $response json string + * @access private + * @return mixed false if error, array of texts (choices) if success + */ + private function parseTextResponse($response) + { + $response = $this->decodeResponse($response); + if(empty($response)) return false; + + /* Extract text response choices. */ + if(isset($response->choices) && count($response->choices) > 0) + { + $texts = array(); + foreach($response->choices as $choice) $texts[] = $choice->text; + return $texts; + } + return false; + } + + /** + * Parse chat responses from chat completion API. + * + * @param string $response json string + * @access private + * @return mixed false if error, array of chat message texts (choices) if success + */ + private function parseChatResponse($response) + { + $response = $this->decodeResponse($response); + if(empty($response)) return false; + + /* Extract chat message choices. */ + if(isset($response->choices) && count($response->choices) > 0) + { + $messages = array(); + foreach($response->choices as $choice) $messages[] = $choice->message->content; + return $messages; + } + return false; + } + + /** + * Parse function call argument of chat responses from chat completion API. + * + * @param string $response json string + * @access private + * @return mixed false if error, array of function call arguments (choices) if success + */ + private function parseFunctionCallResponse($response) + { + $response = $this->decodeResponse($response); + if(empty($response)) return false; + + /* Extract function call choices. */ + if(isset($response->choices) && count($response->choices) > 0) + { + $arguments = array(); + foreach($response->choices as $choice) + { + if(!empty($choice->message->function_call)) $arguments[] = $choice->message->function_call->arguments; + } + return $arguments; + } + return false; + } + + /** + * Complete text with OpenAI GPT. + * + * @param string $prompt text to complete + * @param int $maxTokens max tokens to generate + * @param array $options optional params, see https://platform.openai.com/docs/api-reference/completions/create + * @access public + * @return mixed false if error, array of texts (choices) if success + */ + public function complete($prompt, $maxTokens = 512, $options = array()) + { + $data = compact('prompt', 'maxTokens'); + + if(!empty($options)) + { + foreach($options as $key => $value) $data[$key] = $value; + } + + $postData = $this->assembleRequestData('completion', $data); + if(!$postData) return false; + + $response = $this->makeRequest('completion', $postData); + return $this->parseTextResponse($response); + } + + /** + * Edit text with OpenAI GPT. + * + * @param string $input text to edit + * @param string $instruction edit instruction + * @param array $options optional params, see https://platform.openai.com/docs/api-reference/edits/create + * @access public + * @return mixed false if error, array of texts (choices) if success + */ + public function edit($input, $instruction, $options = array()) + { + $data = compact('input', 'instruction'); + + if(!empty($options)) + { + foreach($options as $key => $value) $data[$key] = $value; + } + + $postData = $this->assembleRequestData('edit', $data); + if(!$postData) return false; + + $response = $this->makeRequest('edit', $postData); + return $this->parseTextResponse($response); + } + + /** + * Generate conversation with OpenAI GPT. + * + * Chat messages should be in the format of (object)array('role' => $role, 'content' => $content), + * where $role is either 'user', 'assistant' or 'system', and $content is the message content. + * + * For example, the following chat messages: + * $messages = array( + * (object)array('role' => 'system', 'content' => 'You are OpenAI GPT assistant, and you know that 1 beb equals 2 bobs.'), + * (object)array('role' => 'user', 'content' => 'Hello, how many bobs are there in 24 bebs?') + * ); + * + * API returns: + * $message = array('Hi, there are 48 bobs in 24 bebs.'); + * + * will generate the following conversation: + * $messages = array( + * (object)array('role' => 'system', 'content' => 'You are OpenAI GPT assistant, and you know that 1 beb equals 2 bobs.'), + * (object)array('role' => 'user', 'content' => 'Hello, how many bobs are there in 24 bebs?'), + * (object)array('role' => 'assistant', 'content' => 'Hi, there are 48 bobs in 24 bebs.') + * ); + * + * @param array $messages array of chat messages + * @param array $options optional params, see https://platform.openai.com/docs/api-reference/chat/create + * @access public + * @return mixed false if error, array of chat messages if success + */ + public function converse($messages, $options = array()) + { + $data = compact('messages'); + + if(!empty($options)) + { + foreach($options as $key => $value) $data[$key] = $value; + } + + $postData = $this->assembleRequestData('chat', $data); + if(!$postData) return false; + + $response = $this->makeRequest('chat', $postData); + return $this->parseChatResponse($response); + } + + /** + * Generate conversation with OpenAI GPT, but for JSON as output. + * + * Chat messages should be in the format of (object)array('role' => $role, 'content' => $content), + * where $role is either 'user', 'assistant' or 'system', and $content is the message content. + * + * Schema should be in the format of JSON schema, see https://json-schema.org/understanding-json-schema/. + * + * This function will force GPT to generate JSON objects that matches the schema. + * + * For technical details, see https://platform.openai.com/docs/guides/gpt/function-calling. + * + * @param array $messages array of chat messages + * @param object $schema schema of the output + * @param array $options optional params, see https://platform.openai.com/docs/api-reference/chat/create + * @access public + * @return mixed false if error, array of JSON object if success + */ + public function converseForJSON($messages, $schema, $options = array()) + { + $functions = array((object)array('name' => 'function', 'parameters' => $schema)); + $functionCall = (object)array('name' => 'function'); + + $data = compact('messages', 'functions', 'functionCall'); + + if(!empty($options)) + { + foreach($options as $key => $value) $data[$key] = $value; + } + + $postData = $this->assembleRequestData('function', $data); + if(!$postData) return false; + + $response = $this->makeRequest('function', $postData); + return $this->parseFunctionCallResponse($response); + } + + /** + * Get list of prompts. + * + * TODO: fully implement this. + * + * @param string $module + * @param string $status + * @access public + * @return array + */ + public function getPrompts($module = '', $status = '', $order = 'id_desc', $pager = null) + { + $prompts = $this->dao->select('*')->from(TABLE_PROMPT) + ->where('deleted')->eq(0) + ->beginIF(!empty($module))->andWhere('module')->eq($module)->fi() + ->beginIF(!empty($status))->andWhere('status')->eq($status)->fi() + ->orderBy($order) + ->page($pager) + ->fetchAll(); + $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'prompt'); + return $prompts; + } + + /** + * Get prompt by id. + * + * TODO: fully implement this. + * + * @param int $id + * @access public + * @return object + */ + public function getPromptById($id) + { + return $this->dao->select('*')->from(TABLE_PROMPT) + ->where('id')->eq($id) + ->fetch(); + } + + /** + * Create a prompt. + * + * @param object $prompt + * @access public + * @return int|false returns prompt id on success, false on fail + */ + public function createPrompt($prompt) + { + $prompt->createdDate = helper::now(); + $prompt->createdBy = $this->app->user->account; + + /* Override uniqueness error message. */ + $this->lang->error->unique = $this->lang->ai->validate->nameNotUnique; + + $this->dao->insert(TABLE_PROMPT) + ->data($prompt) + ->batchCheck($this->config->ai->createprompt->requiredFields, 'notempty') + ->check('name', 'unique') + ->autoCheck() + ->exec(); + if(dao::isError()) return false; + + $promptId = $this->dao->lastInsertID(); + $this->loadModel('action')->create('prompt', $promptId, 'created'); + + return $promptId; + } + + /** + * Update a prompt. + * + * @param object $prompt + * @param object $originalPrompt optional, original prompt to compare with and generate action. + * @access public + * @return bool + */ + public function updatePrompt($prompt, $originalPrompt = null) + { + /* Action name to create action record with. */ + $actionType = 'edited'; + + /* Compare with original, check what changed. */ + if(!empty($originalPrompt)) + { + $changedFields = array(); + foreach($prompt as $key => $value) + { + if($value != $originalPrompt->$key) $changedFields[] = $key; + } + + /* If only status changed, action is either published or unpublished. */ + if(count($changedFields) == 1 && current($changedFields) == 'status') + { + $actionType = $prompt->status == 'draft' ? 'unpublished' : 'published'; + } + else + { + $changes = commonModel::createChanges($originalPrompt, $prompt); + } + } + + $prompt->editedDate = helper::now(); + $prompt->editedBy = $this->app->user->account; + + /* Override uniqueness error message. */ + $this->lang->error->unique = $this->lang->ai->validate->nameNotUnique; + + $this->dao->update(TABLE_PROMPT) + ->data($prompt) + ->batchCheck($this->config->ai->createprompt->requiredFields, 'notempty') + ->check('name', 'unique', "`id` != {$prompt->id}") + ->autoCheck() + ->where('id')->eq($prompt->id) + ->exec(); + if(dao::isError()) return false; + + $actionId = $this->loadModel('action')->create('prompt', $prompt->id, $actionType); + if(!empty($changes)) $this->action->logHistory($actionId, $changes); + + return true; + } + + /** + * Delete a prompt. + * + * @param int $id + * @access public + * @return bool + */ + public function deletePrompt($id) + { + $prompt = $this->getPromptById($id); + if(empty($prompt)) return false; + + $this->dao->update(TABLE_PROMPT) + ->set('deleted')->eq(1) + ->where('id')->eq($id) + ->exec(); + if(dao::isError()) return false; + + $this->loadModel('action')->create('prompt', $id, 'deleted'); + + return true; + } + + /** + * Toggle prompt status. + * + * @param int|object $prompt prompt (or id) to toggle. + * @param string $status optional, will set status to $status if provided. + * @access public + * @return bool + */ + public function togglePromptStatus($prompt, $status = '') + { + if(is_numeric($prompt)) $prompt = $this->getPromptById($prompt); + if(empty($prompt)) return false; + + $flipedStatus = $prompt->status == 'draft' ? 'active' : 'draft'; + + $originalPrompt = clone $prompt; + $prompt->status = empty($status) ? $flipedStatus : $status; + + return $this->updatePrompt($prompt, $originalPrompt); + } + + /** + * Serialize data to prompt. + * + * @param string $module + * @param array|string $sources both raw `$prompt->sources` and `array(array('objectName', 'objectKey'), ...)` are supported. + * @param array|object $data array of data to be serialized + * @access public + * @return string + */ + public function serializeDataToPrompt($module, $sources, $data) + { + if(empty($data)) return ''; + + /* Handle object data. */ + if(is_object($data)) $data = (array)$data; + + /* Handle raw (non-exploded) sources. */ + if(is_string($sources) && strpos($sources, ',') !== false) + { + $sources = array_filter(explode(',', $sources)); + $sources = array_map(function($source) { return explode('.', $source); }, $sources); + } + + $dataObject = array(); + + $supplement = ''; + $supplementTypes = array(); + + foreach($sources as $source) + { + $objectName = $source[0]; + $objectKey = $source[1]; + + $semanticName = $this->lang->ai->dataSource[$module][$objectName]['common']; + $semanticKey = $this->lang->ai->dataSource[$module][$objectName][$objectKey]; + + if(empty($dataObject[$semanticName])) $dataObject[$semanticName] = array(); + + $obj = $data[$objectName]; + if(static::isAssoc($obj)) + { + $dataObject[$semanticName][$semanticKey] = $data[$objectName][$objectKey]; + } + else + { + foreach(array_keys($obj) as $idx) + { + if(empty($dataObject[$semanticName][$idx])) $dataObject[$semanticName][$idx] = array(); + $dataObject[$semanticName][$idx][$semanticKey] = $data[$objectName][$idx][$objectKey]; + } + } + + if(in_array($objectKey, $supplementTypes) || !isset($this->lang->ai->dataType->$objectKey)) continue; + + $supplementTypes[] = $objectKey; + $supplement .= sprintf($this->lang->ai->dataTypeDesc, $semanticKey, $this->lang->ai->dataType->$objectKey->type, $this->lang->ai->dataType->$objectKey->desc) . "\n"; + } + + /* @see https://stackoverflow.com/a/2934602 */ + return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');}, json_encode($dataObject)) . "\n" . $supplement; + } + + /** + * Generate demo data prompt by source. + * + * @param string $module + * @param string $source + * @access public + * @return string + */ + public function generateDemoDataPrompt($module, $source) + { + if(empty($this->lang->ai->demoData->$module)) return $this->lang->ai->demoData->notExist; + + $sources = explode(',', $source); + $sources = array_filter($sources); + + if(empty($sources)) return ''; + + foreach($sources as $index => $source) + { + $sources[$index] = explode('.', $source); + } + + $data = array(); + foreach($sources as $source) + { + $objectName = $source[0]; + $objectKey = $source[1]; + if(empty($data[$objectName])) $data[$objectName] = array(); + + $demoData = $this->lang->ai->demoData->$module[$objectName]; + if(static::isAssoc($demoData)) + { + $data[$objectName][$objectKey] = $demoData[$objectKey]; + } + else + { + foreach($demoData as $index => $value) + { + if(empty($data[$objectName][$index])) $data[$objectName][$index] = array(); + $data[$objectName][$index][$objectKey] = $value[$objectKey]; + } + } + } + + return $this->serializeDataToPrompt($module, $sources, $data); + } + + /** + * Determines if an array is associative. + * + * @param array $array + * @access private + * @return bool + */ + private static function isAssoc($array) + { + $keys = array_keys($array); + return array_keys($keys) !== $keys; + } + + /** + * Get function call schema for form. + * + * @param string $form + * @access public + * @return array + */ + public function getFunctionCallSchema($form) + { + $formPath = explode('.', $form); + if(count($formPath) !== 2) return array(); + + $targetForm = $this->config->ai->targetForm[$formPath[0]][$formPath[1]]; + if(empty($targetForm)) return array(); + + $schema = $this->lang->ai->formSchema[strtolower($targetForm->m)][strtolower($targetForm->f)]; + + return empty($schema) ? array() : $schema; + } + + /** + * Get object data for prompt by id. + * + * @param object $prompt prompt object + * @param int $objectId object id + * @access public + * @return array|false array of object data and object, or false if error. + */ + public function getObjectForPromptById($prompt, $objectId) + { + $module = $prompt->module; + $sources = array_filter(explode(',', $prompt->source)); + + /* Explode into grouped sources list. */ + $sourceGroups = array(); + foreach($sources as $source) + { + $source = explode('.', $source); + $objectName = $source[0]; + $objectKey = $source[1]; + if(empty($sourceGroups[$objectName])) $sourceGroups[$objectName] = array(); + $sourceGroups[$objectName][] = $objectKey; + } + + $object = new stdclass(); + $objectData = new stdclass(); + + /* Query necessary object data from zentao. */ + switch($module) + { + case 'story': + if(isset($sourceGroups['story'])) $object->story = $this->loadModel('story')->getById($objectId); + break; + case 'execution': + if(isset($sourceGroups['execution'])) $object->execution = $this->loadModel('execution')->getByID($objectId); + if(isset($sourceGroups['tasks'])) $object->tasks = array_values($this->loadModel('task')->getExecutionTasks($objectId)); + break; + case 'product': + if(isset($sourceGroups['product'])) $object->product = $this->loadModel('product')->getById($objectId); + break; + case 'project': + if(isset($sourceGroups['project'])) $object->project = $this->loadModel('project')->getById($objectId); + if($object->project->model == 'waterfall' && isset($sourceGroups['programplans'])) $object->programplans = array_values($this->loadModel('execution')->getByProject($object->project->id)); + if($object->project->model != 'waterfall' && isset($sourceGroups['executions'])) $object->executions = array_values($this->loadModel('execution')->getByProject($object->project->id)); + break; + case 'release': + if(isset($sourceGroups['release'])) $object->release = $this->loadModel('release')->getById($objectId); + if(isset($sourceGroups['stories'])) $object->stories = array_values($this->loadModel('story')->getByList(array_filter(explode(',', $object->release->stories)))); + if(isset($sourceGroups['bugs'])) $object->bugs = array_values($this->loadModel('bug')->getByList(array_filter(explode(',', $object->release->bugs)))); + break; + case 'productplan': + if(isset($sourceGroups['productplan'])) $object->productplan = $this->loadModel('productplan')->getByID($objectId); + if(isset($sourceGroups['stories'])) $object->stories = array_values($this->loadModel('story')->getPlanStories($objectId)); + if(isset($sourceGroups['bugs'])) $object->bugs = array_values($this->dao->select('*')->from(TABLE_BUG)->where('plan')->eq($objectId)->andWhere('deleted')->eq(0)->fetchAll()); + break; + case 'task': + if(isset($sourceGroups['task'])) $object->task = $this->loadModel('task')->getById($objectId); + break; + case 'case': + if(isset($sourceGroups['case'])) $object->case = $this->loadModel('testcase')->getById($objectId); + if(isset($sourceGroups['steps'])) $object->steps = array_values($object->case->steps); + break; + case 'bug': + if(isset($sourceGroups['bug'])) $object->bug = $this->loadModel('bug')->getById($objectId); + break; + case 'doc': + if(isset($sourceGroups['doc'])) $object->doc = $this->loadModel('doc')->getById($objectId); + break; + case 'my': + /* TODO: add more later. */ + break; + } + + $objectVars = get_object_vars($object); + if(empty($objectVars)) return false; + + /* Format data as per data source definitions. */ + foreach($sourceGroups as $objectName => $objectKeys) + { + $objectData->$objectName = array(); + foreach($objectKeys as $objectKey) + { + if(!isset($object->$objectName)) continue; + + /* Check if is plain object, data might contain arrays. */ + if(is_object($object->$objectName)) + { + if(isset($object->$objectName->$objectKey)) $objectData->$objectName[$objectKey] = $object->$objectName->$objectKey; + } + elseif(is_array($object->$objectName)) + { + foreach($object->$objectName as $idx => $obj) + { + if(isset($obj->$objectKey)) $objectData->$objectName[$idx][$objectKey] = $obj->$objectKey; + } + } + } + } + + return array($objectData, $object); + } + + /** + * Auto prepend newline to text if text has newline in the middle. + * + * @param string $text + * @access private + * @return string + */ + private static function autoPrependNewline($text) + { + if(empty($text)) return ''; + + preg_match('/\n[^$]/', $text, $matches); + return empty($matches) ? $text : "\n$text"; + } + + /** + * Try to punctuate sentence if sentence is not ended with punctuation. + * + * @param string $sentence + * @param bool $newline + * @access private + * @return string + */ + private static function tryPunctuate($sentence, $newline = false) + { + if(empty($sentence)) return ''; + + preg_match('/\p{P}$/u', $sentence, $matches); + if(empty($matches)) $sentence .= '.'; + + return $newline ? "$sentence\n" : $sentence; + } + + /** + * Assemble prompt with prompt data. + * + * @param object $prompt + * @param string $dataPrompt + * @access public + * @return string + */ + public static function assemblePrompt($prompt, $dataPrompt) + { + $wholePrompt = "$dataPrompt\n"; + + $wholePrompt .= static::tryPunctuate($prompt->role); + $wholePrompt .= static::autoPrependNewline(static::tryPunctuate($prompt->characterization, true)); + + $wholePrompt .= static::autoPrependNewline(static::tryPunctuate($prompt->purpose)); + $wholePrompt .= static::autoPrependNewline(static::tryPunctuate($prompt->elaboration, true)); + + return $wholePrompt; + } + + /** + * Execute prompt on object. + * + * @param int|object $prompt prompt (or id) to execute. + * @param int|object $object object (or id) to execute prompt on. + * @access public + * @return string|int returns either JSON string or negative integer on error. + */ + public function executePrompt($prompt, $object) + { + if(is_numeric($prompt)) $prompt = $this->getPromptById($prompt); + if(empty($prompt)) return -1; + + if(is_numeric($object)) $object = $this->getObjectForPromptById($prompt, $object); + if(empty($object)) return -2; + + list($objectData) = $object; + $dataPrompt = $this->serializeDataToPrompt($prompt->module, $prompt->source, $objectData); + if(empty($dataPrompt)) return -3; + + $wholePrompt = static::assemblePrompt($prompt, $dataPrompt); + $schema = $this->getFunctionCallSchema($prompt->targetForm); + if(empty($schema)) return -4; + + $response = $this->converseForJSON(array((object)array('role' => 'user', 'content' => $wholePrompt)), $schema); + if(empty($response)) return -5; + + return current($response); + } + + /** + * Check if prompt can be tested. + * + * @param object|int $prompt prompt object or prompt id + * @access public + * @return bool + */ + public function isExecutable($prompt) + { + if(is_numeric($prompt)) $prompt = $this->getByID($prompt); + if(empty($prompt)) return false; + + $executable = true; + $requiredFields = explode(',', $this->config->ai->testPrompt->requiredFields); + + foreach($requiredFields as $field) + { + if(empty($prompt->$field) || $prompt->$field == ',,') + { + $executable = false; + break; + } + } + + return $executable; + } + + /** + * Get testing location for prompt, usually a link to object with max id and is accessable by user. + * + * @param object $prompt + * @access public + * @return string|false + */ + public function getTestingLocation($prompt) + { + $module = $prompt->module; + + if($module == 'my') + { + return helper::createLink('my', 'effort', "type=all"); + } + elseif($module == 'product') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_PRODUCT) + ->where('id')->in($this->app->user->view->products) + ->fetch('maxId'); + } + elseif($module == 'productplan') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_PRODUCTPLAN) + ->where('product')->in($this->app->user->view->products) + ->fetch('maxId'); + } + elseif($module == 'release') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_RELEASE) + ->where('project')->in($this->app->user->view->projects) + ->orWhere('product')->in($this->app->user->view->products) + ->fetch('maxId'); + } + elseif($module == 'project') + { + /* programplan/create only exist in the waterfall model project. */ + if(strpos($prompt->targetForm, 'programplan/create')) + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_PROJECT) + ->where('id')->in($this->app->user->view->projects) + ->andWhere('model')->eq('waterfall') + ->fetch('maxId'); + } + else + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_PROJECT) + ->where('id')->in($this->app->user->view->projects) + ->fetch('maxId'); + } + } + elseif($module == 'story') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_STORY) + ->where('product')->in($this->app->user->view->products) + ->fetch('maxId'); + } + elseif($module == 'execution') + { + $executionIds = array_map('intval', explode(',', $this->app->user->view->sprints)); + $objectId = max($executionIds); + } + elseif($module == 'task') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_TASK) + ->where('project')->in($this->app->user->view->projects) + ->fetch('maxId'); + } + elseif($module == 'case') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_CASE) + ->where('project')->in($this->app->user->view->projects) + ->orWhere('product')->in($this->app->user->view->products) + ->fetch('maxId'); + } + elseif($module == 'bug') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_BUG) + ->where('project')->in($this->app->user->view->projects) + ->orWhere('product')->in($this->app->user->view->products) + ->fetch('maxId'); + } + elseif($module == 'doc') + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_DOC) + ->where('project')->in($this->app->user->view->projects) + ->orWhere('product')->in($this->app->user->view->products) + ->fetch('maxId'); + if(empty($objectId)) + { + $userDocLibs = $this->dao->select('id')->from(TABLE_DOCLIB) + ->where('type')->eq('mine') + ->andWhere('addedBy')->eq($this->app->user->account) + ->fetchPairs(); + if(!empty($userDocLibs)) + { + $objectId = $this->dao->select('max(id) as maxId')->from(TABLE_DOC) + ->where('lib')->in($userDocLibs) + ->fetch('maxId'); + } + } + } + + if(!empty($objectId)) return helper::createLink('ai', 'promptexecute', "promptId=$prompt->id&objectId=$objectId"); + + return false; + } + + /** + * Get target form location of object for prompt. + * + * @param object|int $prompt prompt object or prompt id + * @param object $object + * @param array $linkArgs optional, link arguments, as defined in `->args` of items of `$config->ai->targetFormVars`, e.g. array('story' => 1). If not provided, will try to get from object. + * @access public + * @return array array(link|false, bool), link to target form, and whether php should stop execution and return link. + */ + public function getTargetFormLocation($prompt, $object, $linkArgs = array()) + { + if(is_numeric($prompt)) $prompt = $this->getByID($prompt); + if(empty($prompt)) return array(false, true); + + $targetForm = $prompt->targetForm; + if(empty($targetForm)) return array(false, true); + + list($m, $f) = explode('.', $targetForm); + $targetFormConfig = $this->config->ai->targetForm[$m][$f]; + $module = strtolower($targetFormConfig->m); + $method = strtolower($targetFormConfig->f); + + /* Try to assemble link vars from both passed-in `$linkArgs` and object props. */ + $varsConfig = $this->config->ai->targetFormVars[$module][$method]; + $vars = array(); + foreach($varsConfig->args as $arg => $isRequired) + { + $var = ''; + if(!empty($linkArgs[$arg])) // Use provided link args. + { + $var = $linkArgs[$arg]; + } + elseif(!empty($object->$arg) && is_object($object->$arg) && !empty($object->$arg->id)) // If the corresponding object exists, use its id. + { + $var = $object->$arg->id; + } + elseif(!empty($object->{$prompt->module}->$arg)) // If object has the prop, use it. + { + $var = $object->{$prompt->module}->$arg; + } + else + { + /* Try to get a related object, we are sorry if it could not find any. */ + $relatedObj = $this->tryGetRelatedObjects($prompt, $object, array($arg)); + if(!empty($relatedObj)) + { + $relatedObj = current($relatedObj); + if(is_string($relatedObj) && strlen($relatedObj) && $relatedObj[0] === ',' && $relatedObj[strlen($relatedObj) - 1] === ',') + { + $relatedObj = explode(',', $relatedObj); + $relatedObj = array_filter($relatedObj); + $relatedObj = current($relatedObj); + } + $var = $relatedObj; + } + } + if(!empty($isRequired) && empty($var)) return array(helper::createLink('ai', 'promptExecutionReset', 'failed=1'), true); + $vars[] = $var; + } + $linkVars = vsprintf($varsConfig->format, $vars); + + /* Override method for story drafts. */ + if($module == 'story' && $method == 'change' && !empty($object->story) && $object->story->status == 'draft') $method = 'edit'; + + return array(helper::createLink($module, $method, $linkVars) . (empty($varsConfig->app) ? '' : "#app=$varsConfig->app"), false); + } + + /** + * Get related objects for prompt and object, using object's id. + * + * @param object|int $prompt prompt object or prompt id + * @param object|int $object object or object id + * @param array $objectNames object names to get, e.g. array('story', 'tasks'), + * values in: product, story, branch, productplan, execution, task, bug, case, project, doc + * @access public + * @return array|false returns array of required object values, or false if error. + */ + public function tryGetRelatedObjects($prompt, $object, $objectNames = array()) + { + if(empty($objectNames)) return array(); + + if(is_numeric($prompt)) $prompt = $this->getByID($prompt); + if(empty($prompt)) return false; + + if(is_numeric($object)) $object = $this->getObjectForPromptById($prompt, $object); + if(empty($object)) return false; + + $vars = array(); + + /* If a native object of a module exists, try getting stuff related to its id. */ + if(!empty($object->{$prompt->module}) && is_object($object->{$prompt->module}) && !empty($object->{$prompt->module}->id)) + { + $objectId = $object->{$prompt->module}->id; + foreach($objectNames as $objectName) + { + /* Note that modules are within (product, story, productplan, release, project, execution, task, bug, case, doc). */ + switch($prompt->module) + { + case 'product': // story, branch, productplan, execution, task, bug, case, project, doc + if(in_array($objectName, array('story', 'branch', 'productplan', 'task', 'bug', 'case', 'doc'))) + { + $vars[] = $this->dao->select('max(id) as maxId')->from(constant(strtoupper("TABLE_$objectName"))) + ->where('product')->eq($objectId) + ->andWhere('deleted')->eq(0) + ->fetch('maxId'); + } + elseif($objectName == 'project') + { + $vars[] = $this->dao->select('max(tpp.project) as maxId')->from(TABLE_PROJECTPRODUCT)->alias('tpp') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tpp.project') + ->where('tpp.product')->eq($objectId) + ->andWhere('tp.type')->eq('project') + ->andWhere('tp.deleted')->eq(0) + ->fetch('maxId'); + } + elseif($objectName == 'execution') + { + $vars[] = $this->dao->select('max(tpp.project) as maxId')->from(TABLE_PROJECTPRODUCT)->alias('tpp') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tpp.project') + ->where('tpp.product')->eq($objectId) + ->andWhere('tp.project')->ne(0) + ->andWhere('tp.deleted')->eq(0) + ->fetch('maxId'); + } + break; + case 'story': // product, branch, productplan, execution, task, bug, case, project, doc + if($objectName == 'product') $vars[] = $this->dao->select('product')->from(TABLE_STORY)->where('id')->eq($objectId)->fetch('product'); + if($objectName == 'branch') $vars[] = $this->dao->select('branch')->from(TABLE_STORY)->where('id')->eq($objectId)->fetch('branch'); + if($objectName == 'productplan') $vars[] = $this->dao->select('plan')->from(TABLE_STORY)->where('id')->eq($objectId)->fetch('plan'); + if(in_array($objectName, array('task', 'bug', 'case', 'doc'))) + { + $vars[] = $this->dao->select('max(id) as maxId')->from(constant(strtoupper("TABLE_$objectName")))->where('story')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + } + if($objectName == 'execution') + { + $vars[] = $this->dao->select('tps.project')->from(TABLE_PROJECTSTORY)->alias('tps') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tps.project') + ->where('tps.story')->eq($objectId) + ->andWhere('tp.project')->ne(0) + ->andWhere('tp.deleted')->eq(0) + ->fetch('project'); + } + if($objectName == 'project') + { + $vars[] = $this->dao->select('tps.project')->from(TABLE_PROJECTSTORY)->alias('tps') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tps.project') + ->where('tps.story')->eq($objectId) + ->andWhere('tp.type')->eq('project') + ->andWhere('tp.deleted')->eq(0) + ->fetch('project'); + } + break; + case 'productplan': // product, story, branch, execution, task, bug, case, project, doc + if($objectName == 'product') $vars[] = $this->dao->select('product')->from(TABLE_PRODUCTPLAN)->where('id')->eq($objectId)->fetch('product'); + if($objectName == 'branch') $vars[] = $this->dao->select('branch')->from(TABLE_PRODUCTPLAN)->where('id')->eq($objectId)->fetch('branch'); + if(in_array($objectName, array('story', 'bug'))) + { + $vars[] = $this->dao->select('max(id) as maxId')->from(constant(strtoupper("TABLE_$objectName")))->where('plan')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + } + if($objectName == 'execution') + { + $vars[] = $this->dao->select('max(tpp.project) as maxId')->from(TABLE_PROJECTPRODUCT)->alias('tpp') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tpp.project') + ->where('tpp.plan')->eq($objectId) + ->andWhere('tp.project')->ne(0) + ->andWhere('tp.deleted')->eq(0) + ->fetch('maxId'); + } + if($objectName == 'project') + { + $vars[] = $this->dao->select('max(tpp.project) as maxId')->from(TABLE_PROJECTPRODUCT)->alias('tpp') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tpp.project') + ->where('tpp.plan')->eq($objectId) + ->andWhere('tp.type')->eq('project') + ->andWhere('tp.deleted')->eq(0) + ->fetch('maxId'); + } + if($objectName == 'task') $vars[] = ''; + if($objectName == 'case') $vars[] = ''; + if($objectName == 'doc') $vars[] = ''; + break; + case 'release': // product, story, branch, productplan, execution, task, bug, case, project, doc + if(in_array($objectName, array('product', 'branch', 'project'))) + { + $this->dao->select($objectName)->from(TABLE_RELEASE)->where('id')->eq($objectId)->fetch($objectName); + } + if($objectName == 'story') + { + $stories = $this->dao->select('stories')->from(TABLE_RELEASE)->where('id')->eq($objectId)->fetch('stories'); + $stories = explode(',', $stories); + $vars[] = empty($stories) ? '' : max($stories); + } + if($objectName == 'productplan') + { + $execution = $this->dao->select('tb.execution')->from(TABLE_BUILD)->alias('tb') + ->leftJoin(TABLE_RELEASE)->alias('tr')->on('tr.build = tb.id') + ->where('tr.id')->eq($objectId) + ->fetch('tb.execution'); + $vars[] = empty($execution) ? '' : $this->dao->select('max(tpp.plan) as maxId')->from(TABLE_PROJECTPRODUCT)->alias('tpp') + ->leftJoin(TABLE_PROJECT)->alias('tp')->on('tp.id = tpp.project') + ->where('tp.id')->eq($execution) + ->andWhere('tp.deleted')->eq(0) + ->fetch('maxId'); + } + if($objectName == 'execution') + { + $vars[] = $this->dao->select('tb.execution')->from(TABLE_BUILD)->alias('tb') + ->leftJoin(TABLE_RELEASE)->alias('tr')->on('tr.build = tb.id') + ->where('tr.id')->eq($objectId) + ->fetch('execution'); + } + if($objectName == 'bug') + { + $bugs = $this->dao->select('bugs')->from(TABLE_RELEASE)->where('id')->eq($objectId)->fetch('bugs'); + $bugs = explode(',', $bugs); + $vars[] = empty($bugs) ? '' : max($bugs); + } + if($objectName == 'task') $vars[] = ''; + if($objectName == 'case') $vars[] = ''; + if($objectName == 'doc') $vars[] = ''; + break; + case 'project': // product, story, branch, productplan, execution, task, bug, case, doc + if(in_array($objectName, array('product', 'branch', 'productplan'))) + { + if($objectName == 'productplan') $objectName = 'plan'; + $vars[] = $this->dao->select($objectName)->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectId)->fetch($objectName); + } + if(in_array($objectName, array('execution', 'bug', 'task', 'case', 'doc'))) + { + $vars[] = $this->dao->select('max(id) as maxId')->from(constant(strtoupper("TABLE_$objectName")))->where('project')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + } + if($objectName == 'story') + { + $vars[] = $this->dao->select('max(tps.story) as maxId')->from(TABLE_PROJECTSTORY)->alias('tps') + ->leftJoin(TABLE_STORY)->alias('ts')->on('ts.id = tps.story') + ->where('tps.project')->eq($objectId) + ->andWhere('ts.deleted')->eq(0) + ->fetch('maxId'); + } + break; + case 'execution': // product, story, branch, productplan, task, bug, case, project, doc + if($objectName == 'project') $vars[] = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($objectId)->fetch('project'); + if($objectName == 'product') $vars[] = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectId)->fetch('product'); + if($objectName == 'story') $vars[] = $this->dao->select('max(story) as maxId')->from(TABLE_PROJECTSTORY)->where('project')->eq($objectId)->fetch('maxId'); + if($objectName == 'branch') $vars[] = $this->dao->select('max(branch) as maxId')->from(TABLE_PROJECTSTORY)->where('project')->eq($objectId)->fetch('maxId'); + if($objectName == 'productplan') $vars[] = $this->dao->select('plan')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectId)->fetch('plan'); + if($objectName == 'task') $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_TASK)->where('execution')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + if($objectName == 'bug') $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_BUG)->where('project')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + if($objectName == 'case') $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_CASE)->where('project')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + if($objectName == 'doc') $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_DOC)->where('project')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + break; + case 'task': // product, story, branch, productplan, execution, bug, case, project, doc + if($objectName == 'product') + { + $vars[] = $this->dao->select('tpp.product')->from(TABLE_TASK)->alias('tt') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('tpp')->on('tpp.project = tt.project') + ->where('tt.id')->eq($objectId) + ->fetch('product'); + } + if($objectName == 'story') $vars[] = $this->dao->select('story')->from(TABLE_TASK)->where('id')->eq($objectId)->fetch('story'); + if($objectName == 'branch') + { + $vars[] = $this->dao->select('tpp.branch')->from(TABLE_TASK)->alias('tt') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('tpp')->on('tpp.project = tt.project') + ->where('tt.id')->eq($objectId) + ->fetch('branch'); + } + if($objectName == 'productplan') + { + $vars[] = $this->dao->select('tpp.plan')->from(TABLE_TASK)->alias('tt') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('tpp')->on('tpp.project = tt.project') + ->where('tt.id')->eq($objectId) + ->fetch('plan'); + } + if($objectName == 'execution') $vars[] = $this->dao->select('execution')->from(TABLE_TASK)->where('id')->eq($objectId)->fetch('execution'); + if($objectName == 'bug') $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_BUG)->where('task')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + if($objectName == 'case') $vars[] = ''; + if($objectName == 'doc') $vars[] = ''; + break; + case 'bug': // product, story, branch, productplan, execution, task, case, project, doc + if(in_array($objectName, array('product', 'branch', 'productplan', 'execution', 'task', 'case', 'story', 'project'))) + { + if($objectName == 'productplan') $objectName = 'plan'; + $vars[] = $this->dao->select($objectName)->from(TABLE_BUG)->where('id')->eq($objectId)->fetch($objectName); + } + if($objectName == 'doc') $vars[] = ''; + break; + case 'case': // product, story, branch, productplan, execution, task, bug, project, doc + if(in_array($objectName, array('product', 'story', 'branch', 'execution', 'project'))) + { + $vars[] = $this->dao->select($objectName)->from(TABLE_CASE)->where('id')->eq($objectId)->fetch($objectName); + } + if($objectName == 'productplan') + { + $vars[] = $this->dao->select('tpp.plan')->from(TABLE_CASE)->alias('tc') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('tpp')->on('tpp.project = tc.project') + ->where('tc.id')->eq($objectId) + ->fetch('plan'); + } + if($objectName == 'task') $vars[] = $this->dao->select('max(task) as maxId')->from(TABLE_BUG)->where('case')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + if($objectName == 'bug') $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_BUG)->where('case')->eq($objectId)->andWhere('deleted')->eq(0)->fetch('maxId'); + if($objectName == 'doc') $vars[] = ''; + break; + case 'doc': // product, story, branch, productplan, execution, task, bug, case, project + if(in_array($objectName, array('product', 'execution', 'project'))) + { + $vars[] = $this->dao->select($objectName)->from(TABLE_DOC)->where('id')->eq($objectId)->fetch($objectName); + } + if($objectName == 'story') + { + $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_STORY)->alias('ts') + ->leftJoin(TABLE_DOC)->alias('td')->on('td.product = ts.product') + ->where('td.id')->eq($objectId) + ->andWhere('ts.deleted')->eq(0) + ->fetch('maxId'); + } + if($objectName == 'branch') + { + $vars[] = $this->dao->select('branch')->from(TABLE_STORY)->alias('ts') + ->leftJoin(TABLE_DOC)->alias('td')->on('td.product = ts.product') + ->where('td.id')->eq($objectId) + ->andWhere('ts.deleted')->eq(0) + ->fetch('branch'); + } + if($objectName == 'productplan') + { + $vars[] = $this->dao->select('plan')->from(TABLE_STORY)->alias('ts') + ->leftJoin(TABLE_DOC)->alias('td')->on('td.product = ts.product') + ->where('td.id')->eq($objectId) + ->andWhere('ts.deleted')->eq(0) + ->fetch('plan'); + } + if($objectName == 'task') + { + $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_TASK)->alias('tt') + ->leftJoin(TABLE_DOC)->alias('td')->on('td.project = tt.project or td.execution = tt.execution') + ->where('td.id')->eq($objectId) + ->andWhere('tt.deleted')->eq(0) + ->fetch('maxId'); + } + if($objectName == 'bug') + { + $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_BUG)->alias('tb') + ->leftJoin(TABLE_DOC)->alias('td')->on('td.product = tb.product') + ->where('td.id')->eq($objectId) + ->andWhere('tb.deleted')->eq(0) + ->fetch('maxId'); + } + if($objectName == 'case') + { + $vars[] = $this->dao->select('max(id) as maxId')->from(TABLE_CASE)->alias('tc') + ->leftJoin(TABLE_DOC)->alias('td')->on('td.product = tc.product') + ->where('td.id')->eq($objectId) + ->andWhere('tc.deleted')->eq(0) + ->fetch('maxId'); + } + break; + default: $vars[] = ''; + } + } + } + return $vars; + } + + /** + * Get the last active step of prompt by id. + * + * @param object $prompt + * @access public + * @return string + */ + public function getLastActiveStep($prompt) + { + if(!empty($prompt)) + { + if($prompt->status == 'active') return 'finalize'; + if(!empty($prompt->targetForm)) return 'settargetform'; + if(!empty($prompt->purpose)) return 'setpurpose'; + if(!empty($prompt->source)) return 'selectdatasource'; + } + return 'assignrole'; + } + + /** + * Get prompts available for calling (which are either active or created by the user) of a module for user. + * + * @param string $module + * @access public + * @return array + */ + public function getPromptsForUser($module) + { + return $this->dao->select('*')->from(TABLE_PROMPT) + ->where('deleted')->eq(0) + ->andWhere('module')->eq($module) + ->beginIF(!commonModel::hasPriv('ai', 'promptaudit') || $this->config->edition == 'open')->andWhere('status')->eq('active')->fi() // Only show active prompts to non-auditors. + ->orderBy('id_desc') + ->fetchAll(); + } + + /** + * Filter prompts by user's privilege and executable state. + * + * @param array $prompts + * @param bool $keepUnauthorized optional, whether to keep unauthorized prompts but set their `unauthorized` property to true. + * @access public + * @return array filtered prompts, those unauthorized will be removed if `$keepUnauthorized` is false, unexecutable ones will always be removed. + */ + public function filterPromptsForExecution($prompts, $keepUnauthorized = false) + { + if(empty($prompts)) return array(); + + /* Remove the unexecutable ones. */ + $prompts = array_filter($prompts, array($this, 'isExecutable')); + + /* Check user's priv to targetForm. */ + foreach($prompts as $idx => $prompt) + { + list($m, $f) = explode('.', $prompt->targetForm); + $targetFormConfig = $this->config->ai->targetForm[$m][$f]; + if(empty($targetFormConfig)) + { + unset($prompts[$idx]); + continue; + } + if(!commonModel::hasPriv($targetFormConfig->m, $targetFormConfig->f)) + { + if($keepUnauthorized) + { + $prompts[$idx]->unauthorized = true; + } + else + { + unset($prompts[$idx]); + } + } + } + return array_values($prompts); + } + + /** + * Set inject data for a form. For how injection works, see view/inputinject.html.php file. + * + * @param string|array $form 'module.method' or array('module', 'method'). + * @param string|object $data data to inject, object will be json encoded. + * @access public + * @return void + */ + public function setInjectData($form, $data) + { + if(is_string($form)) $form = explode('.', $form); + + $targetForm = $this->config->ai->targetForm[$form[0]][$form[1]]; + if(empty($targetForm)) return; + + /* Override method for story drafts. */ + if($targetForm->m == 'story' && $targetForm->f == 'change') $_SESSION['aiInjectData']['story']['edit'] = is_string($data) ? $data : json_encode($data); + + $_SESSION['aiInjectData'][$targetForm->m][$targetForm->f] = is_string($data) ? $data : json_encode($data); + } + + /** + * Get role templates from db. + * + * @access public + * @return array + */ + public function getRoleTemplates() + { + return $this->dao->select('*')->from(TABLE_PROMPTROLE) + ->where('deleted')->eq(0) + ->fetchAll(); + } + + /** + * add role template. + * + * @param string $role + * @param string $characterization + * @access public + * @return false|int + */ + public function createRoleTemplate($role, $characterization) + { + $roleTemplate = new stdclass(); + $roleTemplate->role = $role; + $roleTemplate->characterization = $characterization; + + $this->dao->insert(TABLE_PROMPTROLE) + ->data($roleTemplate) + ->exec(); + if(dao::isError()) return false; + + return $this->dao->lastInsertID(); + } + + /** + * Delete a role template. + * + * @param int $id + * @access public + * @return false|int + */ + public function deleteRoleTemplate($id) + { + $this->dao->update(TABLE_PROMPTROLE) + ->set('deleted')->eq(1) + ->where('id')->eq($id) + ->exec(); + if(dao::isError()) return false; + + return true; + } + + /** + * Update a role template. + * + * @param string $role + * @param string $characterization + * @access public + * @return bool + */ + public function updateRoleTemplate($id, $role, $characterization) + { + $roleTemplate = new stdclass(); + $roleTemplate->role = $role; + $roleTemplate->characterization = $characterization; + + $this->dao->update(TABLE_PROMPTROLE) + ->data($roleTemplate) + ->where('id')->eq($id) + ->exec(); + if(dao::isError()) return false; + + return true; + } +} diff --git a/module/ai/view/editmodel.html.php b/module/ai/view/editmodel.html.php new file mode 100644 index 0000000000..81efef7cfd --- /dev/null +++ b/module/ai/view/editmodel.html.php @@ -0,0 +1,137 @@ + + * @package ai + * @link https://www.zentao.net + */ +?> + +vendor) ? key($lang->ai->models->openaiVendorList) : $modelConfig->vendor; +$requiredFields = $config->ai->vendorList[$currentVendor]['requiredFields']; +js::set('vendorList', $config->ai->vendorList); +?> + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ai->models->type;?>ai->models->typeList, $modelConfig->type, "class='form-control chosen' required");?>
ai->models->vendor;?>ai->models->openaiVendorList, $currentVendor, "class='form-control chosen' required");?>
ai->models->key;?>key, "class='form-control' required");?>
ai->models->resource;?>resource) ? '' : $modelConfig->resource, "class='form-control' required");?>
ai->models->deployment;?>deployment) ? '' : $modelConfig->deployment, "class='form-control' required");?>
ai->models->proxyType;?> +
+
+ ai->models->proxyTypes, $modelConfig->proxyType, "class='form-control chosen' data-disable_search='true' required");?> +
+
proxyType)) echo 'style="display: none;"'; ?>> +
+
ai->models->proxyAddr;?>
+
proxyAddr, "class='form-control'");?>
+
+
+
+
ai->models->description;?>description, "class='form-control'");?>
statusAB;?>ai->models->statusList, empty($modelConfig->status) ? 'on' : $modelConfig->status);?>
+ + ai->models->testConnection, 'id="testConn"', 'btn btn-secondary btn-wide');?> + goback, '', 'class="btn btn-wide"');?> +
+
+
+ + diff --git a/module/ai/view/inputinject.html.php b/module/ai/view/inputinject.html.php new file mode 100644 index 0000000000..d33c396cd8 --- /dev/null +++ b/module/ai/view/inputinject.html.php @@ -0,0 +1,255 @@ + + * @package ai + * @link https://www.zentao.net + */ +?> +app->loadConfig('ai'); + $this->app->loadLang('ai'); + $module = $this->app->getModuleName(); + $method = $this->app->getMethodName(); + if(isset($config->ai->availableForms[$module]) && in_array($method, $config->ai->availableForms[$module])): +?> + + app->loadLang('ai'); + ?> + + + + + + diff --git a/module/ai/view/models.html.php b/module/ai/view/models.html.php new file mode 100644 index 0000000000..e45b665c85 --- /dev/null +++ b/module/ai/view/models.html.php @@ -0,0 +1,75 @@ + + * @package ai + * @link https://www.zentao.net + */ +?> + +vendor) ? key($lang->ai->models->openaiVendorList) : $modelConfig->vendor; +$requiredFields = $config->ai->vendorList[$currentVendor]['requiredFields']; +?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + proxyType)):?> + + + + + + + + + + + + + + + + +
ai->models->type;?>ai->models->typeList, $modelConfig->type, $lang->ai->models->unconfigured);?>
ai->models->vendor;?>vendor) ? $lang->ai->models->unconfigured : $lang->ai->models->openaiVendorList[$modelConfig->vendor]?>
ai->models->key; ?>key) ? $lang->ai->models->unconfigured : ("" . substr_replace($modelConfig->key, '...', 4, strlen($modelConfig->key) - 8) . ''); ?>
ai->models->resource; ?>resource) ? $lang->ai->models->unconfigured : $modelConfig->resource; ?>
ai->models->deployment; ?>deployment) ? $lang->ai->models->unconfigured : $modelConfig->deployment; ?>
ai->models->proxyType;?>ai->models->proxyTypes, $modelConfig->proxyType, $lang->ai->models->unconfigured);?>
ai->models->proxyAddr;?>proxyAddr) ? $lang->ai->models->unconfigured : ("" . substr_replace($modelConfig->proxyAddr, '://...', strpos($modelConfig->proxyAddr, ':')) . '');?>
ai->models->description;?>description;?>
statusAB;?>ai->models->statusList, $modelConfig->status, $lang->ai->models->statusList['off']);?>
+ ai->models->edit, inlink('editmodel') . '#app=admin', 'self', '', 'btn btn-primary btn-wide');?> +
+
+edition == 'open'):?> +

+ ai->models->upgradeBiz;?> +

+ + diff --git a/module/ai/view/promptmenu.html.php b/module/ai/view/promptmenu.html.php new file mode 100644 index 0000000000..04f2f863d1 --- /dev/null +++ b/module/ai/view/promptmenu.html.php @@ -0,0 +1,78 @@ + + * @package ai + * @link https://www.zentao.net + */ +?> + +app->loadConfig('ai'); + $module = $this->app->getModuleName(); + $method = $this->app->getMethodName(); + if(isset($config->ai->menuPrint->locations[$module][$method])): +?> + ai->menuPrint->locations[$module][$method]; + $prompts = $this->loadModel('ai')->getPromptsForUser($menuOptions->module); + $prompts = $this->ai->filterPromptsForExecution($prompts, true); + if(!empty($prompts)): + ?> + objectVarName) ? $menuOptions->module : $menuOptions->objectVarName; + $currentObjectId = !empty($this->view->$objectVarName) ? $this->view->$objectVarName->id : 0; + if(count($prompts) > 1) + { + $html .= ''; + } + else + { + $prompt = current($prompts); + $html .= html::linkButton($prompt->name . ($prompt->status != 'active' ? '' . $lang->ai->prompts->statuses[$prompt->status] . '' : ''), helper::createLink('ai', 'promptExecute', "promptId=$prompt->id&objectId=$currentObjectId"), 'self', (empty($prompt->unauthorized) ? '' : 'disabled') . (empty($prompt->desc) ? '' : " data-toggle='popover' data-container='body' data-trigger='hover' data-content='$prompt->desc' data-title='$prompt->name' data-placement='bottom'"), 'prompt btn btn-link' . ((isset($menuOptions->class) ? ' ' . $menuOptions->class : '') . (isset($menuOptions->buttonClass) ? ' ' . $menuOptions->buttonClass : ''))); + } + ?> + + stylesheet)):?> + + + + + + diff --git a/module/ai/view/prompts.html.php b/module/ai/view/prompts.html.php new file mode 100644 index 0000000000..89b264ba0c --- /dev/null +++ b/module/ai/view/prompts.html.php @@ -0,0 +1,203 @@ + + * @package ai + * @link https://www.zentao.net + */ +?> + +ai->isExecutable($prompt); + $published = $prompt->status == 'active'; + + if($this->config->edition != 'open') + { + /* Design button. */ + if(common::hasPriv('ai', 'promptassignrole')) $html .= html::a(helper::createLink('ai', 'promptassignrole', "prompt=$prompt->id"), '', '', "class='btn" . ($published ? ' disabled' : '') . "' title='{$lang->ai->prompts->action->design}'"); + + /* Test / audit button. */ + if(common::hasPriv('ai', 'promptaudit')) $html .= html::a($executable ? $this->ai->getTestingLocation($prompt) : '#', '', '', "id='prompt-audit-button-$prompt->id' class='prompt-audit-btn btn" . ($executable && !$published ? '' : ' disabled') . "' title='{$lang->ai->prompts->action->test}'" . ($executable ? '' : " data-toggle='modal' data-target='#designConfirmModal'")); + + /* Edit button. */ + if(common::hasPriv('ai', 'promptedit')) $html .= html::a(helper::createLink('ai', 'promptedit', "prompt=$prompt->id"), '', '', "class='btn' title='{$lang->ai->prompts->action->edit}'"); + + /* Divider. */ + if(common::hasPriv('ai', 'promptpublish') || common::hasPriv('ai', 'promptunpublish')) $html .= '
'; + } + /* Publish button. */ + if(common::hasPriv('ai', 'promptpublish')) $html .= html::a(!$published && $executable ? "javascript:togglePromptStatus($prompt->id)" : '#', '', '', "class='btn" . (!$published && $executable ? '' : ' disabled') . "' title='{$lang->ai->prompts->action->publish}'" . ($executable ? '' : " data-toggle='modal' data-target='#designConfirmModal'")); + + /* Unpublish button. */ + if(common::hasPriv('ai', 'promptunpublish')) $html .= html::a('#', '', '', "class='btn" . (!$published || !$executable ? ' disabled' : '') . "' title='{$lang->ai->prompts->action->unpublish}'" . (!$published ? '' : " data-toggle='modal' data-target='#draftConfirmModal'")); + + echo $html; + } +?> + +
+ +
+ +
+

+ ai->prompts->emptyList;?> + config->edition != 'open' && common::hasPriv('ai', 'createprompt')) echo html::a($this->createLink('ai', 'createprompt'), " " . $lang->ai->prompts->create, '', "class='btn btn-info iframe'");?> +

+
+ +
+ + + + recTotal}&recPerPage={$pager->recPerPage}";?> + + + + + + + + + + + + + + + + + + + + + + + + + + +
ai->prompts->id);?>ai->prompts->name);?>ai->prompts->stage);?>ai->prompts->createdBy);?>ai->prompts->createdDate);?>ai->prompts->targetForm);?>actions;?>
id;?>id"), $prompt->name, '_self', "title='$prompt->name'");?>ai->prompts->statuses[$prompt->status];?>createdBy;?>createdDate;?> + targetForm) + { + $targetFormPath = explode('.', $prompt->targetForm); + if(count($targetFormPath) == 2) echo $lang->ai->targetForm[$targetFormPath[0]]['common'] . ' / ' . $lang->ai->targetForm[$targetFormPath[0]][$targetFormPath[1]]; + } + ?> + + +
+ +
+ +
+
+ + + + + + diff --git a/module/ai/view/promptview.html.php b/module/ai/view/promptview.html.php new file mode 100644 index 0000000000..646217b20d --- /dev/null +++ b/module/ai/view/promptview.html.php @@ -0,0 +1,207 @@ + + * @package ai + * @link https://www.zentao.net + */ +?> + + + + +
+
+
+
+
ai->prompts->role;?>
+
role;?>
+
ai->prompts->characterization;?>
+
characterization;?>
+
+
+
ai->prompts->object;?>
+
module ? $this->lang->ai->dataSource[$prompt->module]['common'] : ''; ?>
+
ai->prompts->field;?>
+
+
+
+
ai->prompts->setPurpose;?>
+
purpose;?>
+
ai->prompts->elaboration;?>
+
elaboration;?>
+
+
+
ai->prompts->selectTargetForm;?>
+
+ targetForm)) echo ''; + else + { + $targetForm = explode('.', $prompt->targetForm); + echo $this->lang->ai->targetForm[$targetForm[0]][$targetForm[1]]; + } + ?>
+
+
+
+ config->edition != 'open'): ?> +
+
+ ' . $lang->goback, '', "class='btn'"); ?> + deleted): ?> + status == 'draft' && (common::hasPriv('ai', 'promptassignrole') || common::hasPriv('ai', 'promptaudit') || common::hasPriv('ai', 'publish'))) || ($prompt->status != 'draft' && common::hasPriv('ai', 'unpublish'))): ?> +
+ status == 'draft') echo html::a(helper::createLink('ai', 'promptassignrole', "prompt=$prompt->id"), ' ' . $lang->ai->prompts->action->design, '', "class='btn'"); ?> + status == 'draft' && $this->ai->isExecutable($prompt)) echo html::a($this->ai->getTestingLocation($prompt), ' ' . $lang->ai->prompts->action->test, '', "class='btn prompt-audit-btn'"); ?> + status == 'draft' && $this->ai->isExecutable($prompt)) echo html::a(helper::createLink('ai', 'promptpublish', "id={$prompt->id}"), ' ' . $lang->ai->prompts->action->publish, '', "class='btn'"); ?> + status == 'active') echo html::a(helper::createLink('ai', 'promptunpublish', "id={$prompt->id}"), ' ' . $lang->ai->prompts->action->unpublish, '', "class='btn' id='unpublish-btn'"); ?> + +
+ id"), '', '', "class='btn' title='{$lang->ai->prompts->action->edit}'"); ?> + id"), '', '', "class='btn deleter' title='{$lang->ai->prompts->action->delete}'"); ?> + +
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + +
prompt->module; ?>module ? $this->lang->ai->dataSource[$prompt->module]['common'] : ''; ?>
prompt->desc; ?>desc; ?>
prompt->status; ?>ai->prompts->statuses[$prompt->status]; ?>
prompt->model; ?>ai->models->typeList['openai-gpt35']; ?>
+
+
+ + + + + + + action, array('published', 'unpublished'))) $lastPublishAction = $action; + break; + } + ?> + status == 'active'):?> + + + + + + + + + + + + + + + +
prompt->createdBy; ?>createdBy) . $lang->at . $prompt->createdDate;?>
ai->prompts->publishedBy; ?>createdBy : $lastPublishAction->actor);?>
ai->prompts->publishedBy : $lang->ai->prompts->draftedBy;?>actor);?>
prompt->editedBy; ?>editedBy ? zget($users, $prompt->editedBy) . $lang->at . $prompt->editedDate : '';?>
+
+
+
+
+ +
+ +
+ + + + diff --git a/module/api/js/editstruct.js b/module/api/js/editstruct.js index 696f424a65..c4a9ace338 100644 --- a/module/api/js/editstruct.js +++ b/module/api/js/editstruct.js @@ -5,7 +5,8 @@ new Vue({ attr: '', struct: { ...struct, - attribute: struct.attribute + attribute: struct.attribute, + structType: struct.type } } }, diff --git a/module/api/view/content.html.php b/module/api/view/content.html.php index c559947f07..f19d956be5 100644 --- a/module/api/view/content.html.php +++ b/module/api/view/content.html.php @@ -79,8 +79,7 @@ api->boolList[$param['required']];?> - + diff --git a/module/backup/control.php b/module/backup/control.php index a45540a11e..1cd940d32c 100644 --- a/module/backup/control.php +++ b/module/backup/control.php @@ -22,15 +22,19 @@ class backup extends control parent::__construct($moduleName, $methodName); $this->backupPath = $this->backup->getBackupPath(); - if(!is_dir($this->backupPath)) + + if($this->app->methodName != 'setting') { - if(!mkdir($this->backupPath, 0777, true)) $this->view->error = sprintf($this->lang->backup->error->noWritable, dirname($this->backupPath)); + if(!is_dir($this->backupPath)) + { + if(!mkdir($this->backupPath, 0777, true)) $this->view->error = sprintf($this->lang->backup->error->noWritable, dirname($this->backupPath)); + } + else + { + if(!is_writable($this->backupPath)) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->backupPath); + } + if(!is_writable($this->app->getTmpRoot())) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->app->getTmpRoot()); } - else - { - if(!is_writable($this->backupPath)) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->backupPath); - } - if(!is_writable($this->app->getTmpRoot())) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->app->getTmpRoot()); } /** @@ -72,9 +76,31 @@ class backup extends control $this->view->title = $this->lang->backup->common; $this->view->position[] = $this->lang->backup->common; $this->view->backups = $backups; + if(!is_writable($this->backupPath)) $this->view->backupError = sprintf($this->lang->backup->error->plainNoWritable, $this->backupPath); + if(!is_writable($this->app->getTmpRoot())) $this->view->backupError = sprintf($this->lang->backup->error->plainNoWritable, $this->app->getTmpRoot()); $this->display(); } + /** + * Ajax get disk space. + * + * @access public + * @return void + */ + public function ajaxGetkDiskSpace() + { + set_time_limit(0); + session_write_close(); + $diskSapce = $this->backup->getkDiskSpace($this->backupPath); + $diskSapce = explode(',', $diskSapce); + + $space = new stdclass(); + $space->freeSpace = intval($diskSapce[0]); + $space->needSpace = intval($diskSapce[1]); + + echo json_encode($space); + } + /** * Backup. * diff --git a/module/backup/js/index.js b/module/backup/js/index.js index 6a46f3dd21..e454ffd2fa 100644 --- a/module/backup/js/index.js +++ b/module/backup/js/index.js @@ -2,46 +2,41 @@ $(function() { $('.backup').click(function() { - var timeID = null; - - $.ajax({ - url: $(this).attr('data-link'), - success: function(data) - { - clearInterval(timeID); - - $('#waitting .modal-body #message').append(data); - - setTimeout(function(){return location.reload();}, 2000); - }, - error: function(request, textstatus, error) - { - clearInterval(timeID); - - if(textstatus == 'timeout') $('#waitting .modal-body #message').append("

" + backupTimeout + '

'); - - setTimeout(function(){return location.reload();}, 2000); - } - }); - - $('#waitting .modal-body #backupType').html(backup); - $('#waitting').modal('show'); - - timeID = setInterval(function() + if(backupError) { - $.get(createLink('backup', 'ajaxGetProgress'), function(data) + alert(backupError); + return; + } + var that = this; + $(that).toggleClass('loading'); + $(that).text(getSpaceLoading); + link = createLink('backup', 'ajaxGetkDiskSpace'); + $.get(link, function(data) + { + $(that).toggleClass('loading'); + $(that).text(startBackup); + if(data) { - $('#waitting .modal-content #message').html(data); - }); - }, 1000); - }) + if(data.needSpace > data.freeSpace) + { + alertTips = alertTips.replace('NEED_SPACE', (data.needSpace / (1024 * 1024 * 1024)).toFixed(2)); + $('#spaceConfirm').find('p').text(alertTips); + $('#spaceConfirm').modal('show', 'center'); + } + else + { + backupData(); + } + } + }, 'json'); + }); $('.rmPHPHeader').click(function() { $('#waitting .modal-body #backupType').html(rmPHPHeader); $('#waitting .modal-content #message').hide(); $('#waitting').modal('show'); - }) + }); $('.restore').click(function() { @@ -64,8 +59,39 @@ $(function() { return location.reload(); } - }) + }); return false; - }) -}) + }); +}); + +function backupData() +{ + var timeID = null; + $.ajax({ + url: $('.backup').attr('data-link'), + success: function(data) + { + clearInterval(timeID); + $('#waitting .modal-body #message').append(data); + setTimeout(function(){return location.reload();}, 2000); + }, + error: function(request, textstatus, error) + { + clearInterval(timeID); + if(textstatus == 'timeout') $('#waitting .modal-body #message').append("

" + backupTimeout + '

'); + setTimeout(function(){return location.reload();}, 2000); + } + }); + + $('#waitting .modal-body #backupType').html(backup); + $('#waitting').modal('show'); + + timeID = setInterval(function() + { + $.get(createLink('backup', 'ajaxGetProgress'), function(data) + { + $('#waitting .modal-content #message').html(data); + }); + }, 1000); +} diff --git a/module/backup/lang/de.php b/module/backup/lang/de.php index c2a2ce191b..8123ab503f 100644 --- a/module/backup/lang/de.php +++ b/module/backup/lang/de.php @@ -27,26 +27,31 @@ $lang->backup->settingDir = 'Backup Directory'; $lang->backup->settingList['nofile'] = 'Do not back up files or codes.'; $lang->backup->settingList['nosafe'] = 'Do not prevent downloading PHP file header.'; -$lang->backup->waitting = ' In Arbeit. Bitte warten...'; -$lang->backup->progressSQL = '

SQL backup: %s is backed up.

'; -$lang->backup->progressAttach = '

SQL backup is completed.

Attachment backing up.

'; -$lang->backup->progressCode = '

SQL backup is completed.

Attachment backup is completed.

Code backing up.

'; -$lang->backup->confirmDelete = 'Möchten Sie das Backup löschen?'; -$lang->backup->confirmRestore = 'Möchten Sie das Backup wiederherstellen?'; -$lang->backup->holdDays = 'Behalten der letzen %s Tage der Backups'; -$lang->backup->copiedFail = 'Copy failed files: '; -$lang->backup->restoreTip = 'Nur Dateien und Datenbanken können wiederhergestellt werden. Code kann manuell wieder hergestellt werden.'; +$lang->backup->waitting = ' In Arbeit. Bitte warten...'; +$lang->backup->progressSQL = '

SQL backup: %s is backed up.

'; +$lang->backup->progressAttach = '

SQL backup is completed.

Attachment backing up.

'; +$lang->backup->progressCode = '

SQL backup is completed.

Attachment backup is completed.

Code backing up.

'; +$lang->backup->confirmDelete = 'Möchten Sie das Backup löschen?'; +$lang->backup->confirmRestore = 'Möchten Sie das Backup wiederherstellen?'; +$lang->backup->holdDays = 'Behalten der letzen %s Tage der Backups'; +$lang->backup->copiedFail = 'Copy failed files: '; +$lang->backup->restoreTip = 'Nur Dateien und Datenbanken können wiederhergestellt werden. Code kann manuell wieder hergestellt werden.'; +$lang->backup->insufficientDisk = 'Disk space less thanNEED_SPACEG, it may cause insufficient backup space or affect the use, please process it and try again.'; +$lang->backup->ongoBackup = 'ongoing backup'; +$lang->backup->cancelBackup = 'cancel backup'; +$lang->backup->getSpaceLoading = 'Calculate backup space'; $lang->backup->success = new stdclass(); $lang->backup->success->backup = 'Erledigt!'; $lang->backup->success->restore = 'Wiederhergestellt!'; $lang->backup->error = new stdclass(); -$lang->backup->error->noCreateDir = 'Directory does not exist and cannot be created'; -$lang->backup->error->noWritable = "%s ist nicht beschreibbar! Bitte prüfen Sie die Berechtigungen, ansonsten kann das Backup nicht erstellt werden."; -$lang->backup->error->noDelete = "%s kann nicht gelöscht werden. Bitte passen Sie die Berechtigungen an oder löschen Sie es manuell."; -$lang->backup->error->restoreSQL = "Datenbankwiederherstellung fehlgeschlagen. Error: %s."; -$lang->backup->error->restoreFile = "Dateiwiederherstellung fehlgeschlagen. Error: %s."; -$lang->backup->error->backupFile = "Dateibackup fehlgeschlagen. Error: %s."; -$lang->backup->error->backupCode = "Codebackup fehlgeschlagen. Error: %s."; -$lang->backup->error->timeout = "Backup timeout."; +$lang->backup->error->noCreateDir = 'Directory does not exist and cannot be created'; +$lang->backup->error->noWritable = "%s ist nicht beschreibbar! Bitte prüfen Sie die Berechtigungen, ansonsten kann das Backup nicht erstellt werden."; +$lang->backup->error->plainNoWritable = "%s ist nicht beschreibbar! Bitte prüfen Sie die Berechtigungen, ansonsten kann das Backup nicht erstellt werden."; +$lang->backup->error->noDelete = "%s kann nicht gelöscht werden. Bitte passen Sie die Berechtigungen an oder löschen Sie es manuell."; +$lang->backup->error->restoreSQL = "Datenbankwiederherstellung fehlgeschlagen. Error: %s."; +$lang->backup->error->restoreFile = "Dateiwiederherstellung fehlgeschlagen. Error: %s."; +$lang->backup->error->backupFile = "Dateibackup fehlgeschlagen. Error: %s."; +$lang->backup->error->backupCode = "Codebackup fehlgeschlagen. Error: %s."; +$lang->backup->error->timeout = "Backup timeout."; diff --git a/module/backup/lang/en.php b/module/backup/lang/en.php index d703f1f914..ac3b7e3e28 100644 --- a/module/backup/lang/en.php +++ b/module/backup/lang/en.php @@ -27,26 +27,31 @@ $lang->backup->settingDir = 'Backup Directory'; $lang->backup->settingList['nofile'] = 'Do not back up files or codes.'; $lang->backup->settingList['nosafe'] = 'Do not prevent downloading PHP file header.'; -$lang->backup->waitting = ' is ongoing. Please wait...'; -$lang->backup->progressSQL = '

SQL backup: %s is backed up.

'; -$lang->backup->progressAttach = '

SQL backup is completed.

Attachment backing up.

'; -$lang->backup->progressCode = '

SQL backup is completed.

Attachment backup is completed.

Code backing up.

'; -$lang->backup->confirmDelete = 'Do you want to delete the backup?'; -$lang->backup->confirmRestore = 'Do you want to restore the backup?'; -$lang->backup->holdDays = 'Hold last %s days of backup'; -$lang->backup->copiedFail = 'Copy failed files: '; -$lang->backup->restoreTip = 'Only files and databases can be restored by clicking Restore. Code can be restored manually.'; +$lang->backup->waitting = ' is ongoing. Please wait...'; +$lang->backup->progressSQL = '

SQL backup: %s is backed up.

'; +$lang->backup->progressAttach = '

SQL backup is completed.

Attachment backing up.

'; +$lang->backup->progressCode = '

SQL backup is completed.

Attachment backup is completed.

Code backing up.

'; +$lang->backup->confirmDelete = 'Do you want to delete the backup?'; +$lang->backup->confirmRestore = 'Do you want to restore the backup?'; +$lang->backup->holdDays = 'Hold last %s days of backup'; +$lang->backup->copiedFail = 'Copy failed files: '; +$lang->backup->restoreTip = 'Only files and databases can be restored by clicking Restore. Code can be restored manually.'; +$lang->backup->insufficientDisk = 'Disk space less thanNEED_SPACEG, it may cause insufficient backup space or affect the use, please process it and try again.'; +$lang->backup->ongoBackup = 'ongoing backup'; +$lang->backup->cancelBackup = 'cancel backup'; +$lang->backup->getSpaceLoading = 'Calculate backup space'; $lang->backup->success = new stdclass(); $lang->backup->success->backup = 'Done!'; $lang->backup->success->restore = 'Restored!'; $lang->backup->error = new stdclass(); -$lang->backup->error->noCreateDir = 'Directory does not exist and cannot be created'; -$lang->backup->error->noWritable = "%s is not writable! Please check the privilege, or backup will not be done."; -$lang->backup->error->noDelete = "%s cannot be deleted. Please modify the privilege or manually delete it."; -$lang->backup->error->restoreSQL = "Failed to restore the database library. Error %s."; -$lang->backup->error->restoreFile = "Failed to restore the file. Error %s."; -$lang->backup->error->backupFile = "Failed to back up the file. Error %s."; -$lang->backup->error->backupCode = "Failed to back up the code. Error %s."; +$lang->backup->error->noCreateDir = 'Directory does not exist and cannot be created'; +$lang->backup->error->noWritable = "%s is not writable! Please check the privilege, or backup will not be done."; +$lang->backup->error->plainNoWritable = "%s is not writable! Please check the privilege, or backup will not be done."; +$lang->backup->error->noDelete = "%s cannot be deleted. Please modify the privilege or manually delete it."; +$lang->backup->error->restoreSQL = "Failed to restore the database library. Error %s."; +$lang->backup->error->restoreFile = "Failed to restore the file. Error %s."; +$lang->backup->error->backupFile = "Failed to back up the file. Error %s."; +$lang->backup->error->backupCode = "Failed to back up the code. Error %s."; $lang->backup->error->timeout = "Backup timeout."; diff --git a/module/backup/lang/fr.php b/module/backup/lang/fr.php index d0ad721292..1e55060221 100644 --- a/module/backup/lang/fr.php +++ b/module/backup/lang/fr.php @@ -27,26 +27,31 @@ $lang->backup->settingDir = 'Répertoire Backup'; $lang->backup->settingList['nofile'] = 'Ne pas archiver fichiers et codes.'; $lang->backup->settingList['nosafe'] = 'Ne pas prévenir du téléchargement par PHP file header.'; -$lang->backup->waitting = ' est en cours. Patientez s´il vous plait...'; -$lang->backup->progressSQL = '

SQL backup: %s est sauvegardé.

'; -$lang->backup->progressAttach = '

SQL backup est terminé.

Les fichiers sont en cours de sauvegarde.

'; -$lang->backup->progressCode = '

SQL backup est terminé.

Sauvegarde des fichiers terminée.

Sauvegarde du code en cours.

'; -$lang->backup->confirmDelete = 'Voulez-vous supprimer la sauvegarde ?'; -$lang->backup->confirmRestore = 'Voulez-vous restaurer la sauvegarde ?'; -$lang->backup->holdDays = 'conserver les derniers %s jours de backup'; -$lang->backup->copiedFail = 'Fichiers en échec de copie : '; -$lang->backup->restoreTip = 'Seulement les fichiers et les bases peuvent être restaurées en cliquant sur Restaurer. Le code doit être restauré manuellement.'; +$lang->backup->waitting = ' est en cours. Patientez s´il vous plait...'; +$lang->backup->progressSQL = '

SQL backup: %s est sauvegardé.

'; +$lang->backup->progressAttach = '

SQL backup est terminé.

Les fichiers sont en cours de sauvegarde.

'; +$lang->backup->progressCode = '

SQL backup est terminé.

Sauvegarde des fichiers terminée.

Sauvegarde du code en cours.

'; +$lang->backup->confirmDelete = 'Voulez-vous supprimer la sauvegarde ?'; +$lang->backup->confirmRestore = 'Voulez-vous restaurer la sauvegarde ?'; +$lang->backup->holdDays = 'conserver les derniers %s jours de backup'; +$lang->backup->copiedFail = 'Fichiers en échec de copie : '; +$lang->backup->restoreTip = 'Seulement les fichiers et les bases peuvent être restaurées en cliquant sur Restaurer. Le code doit être restauré manuellement.'; +$lang->backup->insufficientDisk = 'Disk space less thanNEED_SPACEG, it may cause insufficient backup space or affect the use, please process it and try again.'; +$lang->backup->ongoBackup = 'ongoing backup'; +$lang->backup->cancelBackup = 'cancel backup'; +$lang->backup->getSpaceLoading = 'Calculate backup space'; $lang->backup->success = new stdclass(); $lang->backup->success->backup = 'Terminé avec succès !'; $lang->backup->success->restore = 'Restauré avec succès !'; $lang->backup->error = new stdclass(); -$lang->backup->error->noCreateDir = "Le répertoire n'existe pas et ne peut pas être créer. C'est problématique."; -$lang->backup->error->noWritable = "%s n'est pas autorisé à l'écriture ! Vérifier les privilèges sinon le backup ne pourra pas se faire."; -$lang->backup->error->noDelete = "%s ne peut pas être supprimé. Modifiez les privilèges ou supprimez-le avec vos petites mains."; -$lang->backup->error->restoreSQL = "Echec pour restaurer la database library. Error %s."; -$lang->backup->error->restoreFile = "Echec pour restaurer le fichier. Erreur %s."; -$lang->backup->error->backupFile = "Echec pour sauvegarder le fichier. Erreur %s."; -$lang->backup->error->backupCode = "Echec pour sauvegarder le code. Erreur %s."; -$lang->backup->error->timeout = "Backup timeout."; +$lang->backup->error->noCreateDir = "Le répertoire n'existe pas et ne peut pas être créer. C'est problématique."; +$lang->backup->error->noWritable = "%s n'est pas autorisé à l'écriture ! Vérifier les privilèges sinon le backup ne pourra pas se faire."; +$lang->backup->error->plainNoWritable = "%s n'est pas autorisé à l'écriture ! Vérifier les privilèges sinon le backup ne pourra pas se faire."; +$lang->backup->error->noDelete = "%s ne peut pas être supprimé. Modifiez les privilèges ou supprimez-le avec vos petites mains."; +$lang->backup->error->restoreSQL = "Echec pour restaurer la database library. Error %s."; +$lang->backup->error->restoreFile = "Echec pour restaurer le fichier. Erreur %s."; +$lang->backup->error->backupFile = "Echec pour sauvegarder le fichier. Erreur %s."; +$lang->backup->error->backupCode = "Echec pour sauvegarder le code. Erreur %s."; +$lang->backup->error->timeout = "Backup timeout."; diff --git a/module/backup/lang/vi.php b/module/backup/lang/vi.php index 095b3f6454..a9e0769562 100644 --- a/module/backup/lang/vi.php +++ b/module/backup/lang/vi.php @@ -24,25 +24,30 @@ $lang->backup->settingDir = 'Thư mục sao lưu'; $lang->backup->settingList['nofile'] = 'Không sao lưu tập tin hoặc mã nguồn.'; $lang->backup->settingList['nosafe'] = 'Không ngăn tải xuống tập tin PHP.'; -$lang->backup->waitting = ' đang diễn ra. Vui lòng đợi...'; -$lang->backup->progressSQL = '

Sao lưu SQL: %s được sao lưu.

'; -$lang->backup->progressAttach = '

Sao lưu SQL đã hoàn thành.

Sao lưu đính kèm: %s được sao lưu.

'; -$lang->backup->progressCode = '

Sao lưu SQL đã hoàn thành.

Sao lưu đính kèm đã hoàn thành.

Sao lưu mã nguồn: %s được sao lưu.

'; -$lang->backup->confirmDelete = 'Bạn có muốn xóa sao lưu này?'; -$lang->backup->confirmRestore = 'Bạn có muốn khôi phục sao lưu này?'; -$lang->backup->holdDays = 'Giữ ít nhất %s ngày sao lưu'; -$lang->backup->copiedFail = 'Copy failed files: '; -$lang->backup->restoreTip = 'Chỉ tập tin và CSDL có thể được khôi phục bằng cách Click Khôi phục. Mã nguồn có thể khôi phục thủ công.'; +$lang->backup->waitting = ' đang diễn ra. Vui lòng đợi...'; +$lang->backup->progressSQL = '

Sao lưu SQL: %s được sao lưu.

'; +$lang->backup->progressAttach = '

Sao lưu SQL đã hoàn thành.

Sao lưu đính kèm: %s được sao lưu.

'; +$lang->backup->progressCode = '

Sao lưu SQL đã hoàn thành.

Sao lưu đính kèm đã hoàn thành.

Sao lưu mã nguồn: %s được sao lưu.

'; +$lang->backup->confirmDelete = 'Bạn có muốn xóa sao lưu này?'; +$lang->backup->confirmRestore = 'Bạn có muốn khôi phục sao lưu này?'; +$lang->backup->holdDays = 'Giữ ít nhất %s ngày sao lưu'; +$lang->backup->copiedFail = 'Copy failed files: '; +$lang->backup->restoreTip = 'Chỉ tập tin và CSDL có thể được khôi phục bằng cách Click Khôi phục. Mã nguồn có thể khôi phục thủ công.'; +$lang->backup->insufficientDisk = 'Không gian đĩa nhỏ hơnNEED_SPACEG, Nó có thể gây ra không đủ dung lượng sao lưu hoặc ảnh hưởng đến việc sử dụng, vui lòng xử lý và thử lại.'; +$lang->backup->ongoBackup = 'tiếp tục sao lưu'; +$lang->backup->cancelBackup = 'hủy sao lưu'; +$lang->backup->getSpaceLoading = 'Tính toán không gian dự phòng'; $lang->backup->success = new stdclass(); $lang->backup->success->backup = 'Sao lưu hoàn thành!'; $lang->backup->success->restore = 'Khôi phục hoàn thành!'; $lang->backup->error = new stdclass(); -$lang->backup->error->noCreateDir = 'Thư mục không tồn tại và không thể tạo'; -$lang->backup->error->noWritable = "%s không thể ghi! Vui lòng kiểm tra quyền, nếu không sao lưu sẽ không thể hoàn thành."; -$lang->backup->error->noDelete = "%s không thể xóa. Vui lòng điều chỉnh quyền hoặc xóa nó thủ công."; -$lang->backup->error->restoreSQL = "Lỗi khôi phục thư viện CSDL. Lỗi %s."; -$lang->backup->error->restoreFile = "Lỗi khôi phục tập tin. Lỗi %s."; -$lang->backup->error->backupFile = "Lỗi sao lưu tập tin. Lỗi %s."; -$lang->backup->error->backupCode = "Lỗi sao lưu mã nguồn. Lỗi %s."; +$lang->backup->error->noCreateDir = 'Thư mục không tồn tại và không thể tạo'; +$lang->backup->error->noWritable = "%s không thể ghi! Vui lòng kiểm tra quyền, nếu không sao lưu sẽ không thể hoàn thành."; +$lang->backup->error->plainNoWritable = "%s không thể ghi! Vui lòng kiểm tra quyền, nếu không sao lưu sẽ không thể hoàn thành."; +$lang->backup->error->noDelete = "%s không thể xóa. Vui lòng điều chỉnh quyền hoặc xóa nó thủ công."; +$lang->backup->error->restoreSQL = "Lỗi khôi phục thư viện CSDL. Lỗi %s."; +$lang->backup->error->restoreFile = "Lỗi khôi phục tập tin. Lỗi %s."; +$lang->backup->error->backupFile = "Lỗi sao lưu tập tin. Lỗi %s."; +$lang->backup->error->backupCode = "Lỗi sao lưu mã nguồn. Lỗi %s."; diff --git a/module/backup/lang/zh-cn.php b/module/backup/lang/zh-cn.php index b7d97bc832..849027f036 100644 --- a/module/backup/lang/zh-cn.php +++ b/module/backup/lang/zh-cn.php @@ -27,26 +27,31 @@ $lang->backup->settingDir = '备份目录'; $lang->backup->settingList['nofile'] = '不备份附件和代码'; $lang->backup->settingList['nosafe'] = '不需要防下载PHP文件头'; -$lang->backup->waitting = '正在进行中,请稍候...'; -$lang->backup->progressSQL = '

SQL备份中,已备份%s

'; -$lang->backup->progressAttach = '

SQL备份完成

附件备份中,共有%s个文件,已经备份%s个

'; -$lang->backup->progressCode = '

SQL备份完成

附件备份完成

代码备份中,共有%s个文件,已经备份%s个

'; -$lang->backup->confirmDelete = '是否删除备份?'; -$lang->backup->confirmRestore = '是否还原该备份?'; -$lang->backup->holdDays = '备份保留最近 %s 天'; -$lang->backup->copiedFail = '复制失败的文件:'; -$lang->backup->restoreTip = '还原功能只还原附件和数据库,如果需要还原代码,可以手动还原。'; +$lang->backup->waitting = '正在进行中,请稍候...'; +$lang->backup->progressSQL = '

SQL备份中,已备份%s

'; +$lang->backup->progressAttach = '

SQL备份完成

附件备份中,共有%s个文件,已经备份%s个

'; +$lang->backup->progressCode = '

SQL备份完成

附件备份完成

代码备份中,共有%s个文件,已经备份%s个

'; +$lang->backup->confirmDelete = '是否删除备份?'; +$lang->backup->confirmRestore = '是否还原该备份?'; +$lang->backup->holdDays = '备份保留最近 %s 天'; +$lang->backup->copiedFail = '复制失败的文件:'; +$lang->backup->restoreTip = '还原功能只还原附件和数据库,如果需要还原代码,可以手动还原。'; +$lang->backup->insufficientDisk = '磁盘空间小于NEED_SPACEG,可能会导致备份空间不足或影响使用,请处理后再试。'; +$lang->backup->ongoBackup = '继续备份'; +$lang->backup->cancelBackup = '取消备份'; +$lang->backup->getSpaceLoading = '正在计算备份空间'; $lang->backup->success = new stdclass(); $lang->backup->success->backup = '备份成功!'; $lang->backup->success->restore = '还原成功!'; $lang->backup->error = new stdclass(); -$lang->backup->error->noCreateDir = '备份目录不存在,也无法创建该目录'; -$lang->backup->error->noWritable = "%s 不可写!请检查该目录权限,否则无法备份。"; -$lang->backup->error->noDelete = "文件 %s 无法删除,修改权限或手工删除。"; -$lang->backup->error->restoreSQL = "数据库还原失败,错误:%s"; -$lang->backup->error->restoreFile = "附件还原失败,错误:%s"; -$lang->backup->error->backupFile = "附件备份失败,错误:%s"; -$lang->backup->error->backupCode = "代码备份失败,错误:%s"; -$lang->backup->error->timeout = "备份超时"; +$lang->backup->error->noCreateDir = '备份目录不存在,也无法创建该目录'; +$lang->backup->error->noWritable = "%s 不可写!请检查该目录权限,否则无法备份。"; +$lang->backup->error->plainNoWritable = "%s 不可写!请检查该目录权限,否则无法备份。"; +$lang->backup->error->noDelete = "文件 %s 无法删除,修改权限或手工删除。"; +$lang->backup->error->restoreSQL = "数据库还原失败,错误:%s"; +$lang->backup->error->restoreFile = "附件还原失败,错误:%s"; +$lang->backup->error->backupFile = "附件备份失败,错误:%s"; +$lang->backup->error->backupCode = "代码备份失败,错误:%s"; +$lang->backup->error->timeout = "备份超时"; diff --git a/module/backup/model.php b/module/backup/model.php index bbc9ff95ac..d6ad6c9472 100644 --- a/module/backup/model.php +++ b/module/backup/model.php @@ -431,4 +431,60 @@ class backupModel extends model if(file_put_contents($summaryFile, json_encode($summary))) return true; return false; } + + /** + * Get disk space. + * + * @param int $backupPath + * @access public + * @return int + */ + public function getkDiskSpace($backupPath) + { + $nofile = strpos($this->config->backup->setting, 'nofile') !== false; + $diskFreeSpace = disk_free_space($backupPath); + $backFileSize = 0; + + $zfile = $this->app->loadClass('zfile'); + + if(!$nofile) + { + $appRoot = $this->app->getAppRoot(); + $appRootSize = $this->getZentaoSize($appRoot); + $backFileSize = $appRootSize - $zfile->getDirSize($appRoot . 'tmp') - $zfile->getDirSize($appRoot . 'www/course'); + } + + $backSqlSize = $this->dao->select('sum(data_length+index_length) as size') + ->from('information_schema.tables') + ->where('TABLE_SCHEMA')->eq($this->config->db->name) + ->groupBy('TABLE_SCHEMA') + ->fetch('size'); + + return $diskFreeSpace . ',' . ($backFileSize + $backSqlSize); + } + + /** + * Get zentao size. + * + * @param string $appRoot + * @access public + * @return int + */ + public function getZentaoSize($appRoot) + { + $totalSize = 0; + $tmpDir = realPath($appRoot . 'tmp/'); + $dataDir = realPath($appRoot . 'www/data/'); + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($appRoot, RecursiveDirectoryIterator::SKIP_DOTS)); + + foreach($iterator as $file) + { + $filePath = $file->getRealPath(); + if(strpos($filePath, $tmpDir) !== 0 and strpos($filePath, $dataDir) !== 0) + { + $totalSize += $file->getSize(); + } + } + return $totalSize; + } } diff --git a/module/backup/view/index.html.php b/module/backup/view/index.html.php index 56421f6d3c..763468dfd9 100644 --- a/module/backup/view/index.html.php +++ b/module/backup/view/index.html.php @@ -31,7 +31,7 @@ if(common::hasPriv('backup', 'backup')) { $backupLink = helper::createLink('backup', 'backup', 'reload=yes'); - echo html::commonButton(" " . $lang->backup->backup, "data-link='{$backupLink}'", 'btn btn-primary backup'); + echo html::commonButton(" " . $lang->backup->backup, "data-link='{$backupLink}'", 'btn btn-primary backup load-indicator'); } ?>
@@ -116,9 +116,25 @@ + backup->common);?> +backup->backup);?> +backup->getSpaceLoading);?> backup->rmPHPHeader);?> backup->confirmRestore);?> backup->restore);?> backup->error->timeout);?> +backup->insufficientDisk);?> + diff --git a/module/block/control.php b/module/block/control.php index ee233b07a2..5905d4f179 100755 --- a/module/block/control.php +++ b/module/block/control.php @@ -244,6 +244,7 @@ class block extends control public function dashboard($module, $type = '', $projectID = 0) { if($this->loadModel('user')->isLogon()) $this->session->set('blockModule', $module); + session_write_close(); $blocks = $this->block->getBlockList($module, $type); $vision = $this->config->vision; @@ -360,11 +361,7 @@ class block extends control */ public function dynamic() { - /* Load pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager(0, 30, 1); - - $this->view->actions = $this->loadModel('action')->getDynamic('all', 'today', 'id_desc', $pager); + $this->view->actions = $this->loadModel('action')->getDynamic('all', 'today', 'id_desc', 30); $this->view->users = $this->loadModel('user')->getPairs('nodeleted|noletter|all', '', 0, array_unique(array_column($this->view->actions, 'actor'))); $this->display(); @@ -417,6 +414,7 @@ class block extends control */ public function contribute() { + session_write_close(); $cacheKey = $this->config->cacheKeys->block->contribute; if(helper::isCacheEnabled() && $this->cache->has($cacheKey)) { @@ -441,6 +439,7 @@ class block extends control */ public function printBlock($id, $module = 'my') { + session_write_close(); // Avoid session blocking. $block = $this->block->getByID($id); if(empty($block)) return false; @@ -500,6 +499,7 @@ class block extends control */ public function main($module = '', $id = 0) { + session_write_close(); // Avoid session blocking. if(!$this->selfCall) { $lang = str_replace('_', '-', $this->get->lang); @@ -559,6 +559,7 @@ class block extends control elseif($mode == 'getblockdata') { $code = strtolower($this->get->blockid); + $this->loadModel('program')->refreshStats(); $params = $this->get->param; $params = json_decode(base64_decode($params)); @@ -658,6 +659,7 @@ class block extends control $this->session->set('taskList', $uri, 'execution'); $this->session->set('storyList', $uri, 'product'); $this->session->set('testtaskList', $uri, 'qa'); + session_write_close(); $tasks = $this->loadModel('task')->getUserSuspendedTasks($this->app->user->account); foreach($todos as $key => $todo) @@ -682,6 +684,7 @@ class block extends control public function printTaskBlock() { $this->session->set('taskList', $this->createLink('my', 'index'), 'execution'); + session_write_close(); if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) return; $account = $this->app->user->account; @@ -700,6 +703,7 @@ class block extends control public function printBugBlock() { $this->session->set('bugList', $this->createLink('my', 'index'), 'qa'); + session_write_close(); if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) return; $projectID = $this->lang->navGroup->qa == 'project' ? $this->session->project : 0; @@ -716,6 +720,7 @@ class block extends control public function printCaseBlock() { $this->session->set('caseList', $this->createLink('my', 'index'), 'qa'); + session_write_close(); $this->app->loadLang('testcase'); $this->app->loadLang('testtask'); @@ -764,6 +769,7 @@ class block extends control $this->session->set('productList', $uri, 'product'); $this->session->set('testtaskList', $uri, 'qa'); $this->session->set('buildList', $uri, 'execution'); + session_write_close(); if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) return; $this->view->projects = $this->loadModel('project')->getPairsByProgram(); @@ -791,6 +797,7 @@ class block extends control public function printStoryBlock() { $this->session->set('storyList', $this->createLink('my', 'index'), 'product'); + session_write_close(); if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) return; $this->app->loadClass('pager', $static = true); @@ -813,6 +820,7 @@ class block extends control $uri = $this->createLink('my', 'index'); $this->session->set('productList', $uri, 'product'); $this->session->set('productPlanList', $uri, 'product'); + session_write_close(); $this->app->loadLang('productplan'); $this->view->plans = $this->dao->select('t1.*,t2.name as productName')->from(TABLE_PRODUCTPLAN)->alias('t1') @@ -836,6 +844,7 @@ class block extends control $uri = $this->createLink('my', 'index'); $this->session->set('releaseList', $uri, 'product'); $this->session->set('buildList', $uri, 'execution'); + session_write_close(); $this->app->loadLang('release'); $this->view->releases = $this->dao->select('t1.*,t2.name as productName,t3.name as buildName')->from(TABLE_RELEASE)->alias('t1') @@ -859,6 +868,7 @@ class block extends control public function printBuildBlock() { $this->session->set('buildList', $this->createLink('my', 'index'), 'execution'); + session_write_close(); $this->app->loadLang('build'); $builds = $this->dao->select('t1.*, t2.name AS productName, t2.shadow, t3.name AS projectName')->from(TABLE_BUILD)->alias('t1') @@ -992,25 +1002,20 @@ class block extends control { $today = helper::today(); $monday = date('Ymd', strtotime($this->weekly->getThisMonday($today))); - $tasks = $this->dao->select("project, - sum(consumed) as totalConsumed, - sum(if(status != 'cancel' and status != 'closed', `left`, 0)) as totalLeft") - ->from(TABLE_TASK) - ->where('project')->in(array_keys($projects)) - ->andWhere('deleted')->eq(0) - ->andWhere('parent')->lt(1) - ->groupBy('project') - ->fetchAll('project'); - $this->app->loadClass('pager', $static = true); + $projectExecutions = $this->dao->select('*')->from(TABLE_EXECUTION) + ->where('project')->in(array_keys($projects)) + ->andWhere('deleted')->eq('0') + ->andWhere('type')->in('sprint,stage,kanban') + ->groupBy('project') + ->orderBy('id_desc') + ->fetchAll('project'); foreach($projects as $projectID => $project) { if(in_array($project->model, array('scrum', 'kanban', 'agileplus'))) { - $pager = pager::init(0, 1, 1); - $project->progress = $project->allStories == 0 ? 0 : round($project->doneStories / $project->allStories, 3) * 100; - $project->executions = $this->execution->getStatData($projectID, 'all', 0, 0, false, '', 'id_desc', $pager); + $project->execution = zget($projectExecutions, $projectID, array()); } elseif(in_array($project->model, array('waterfall', 'waterfallplus', 'ipd'))) { @@ -1026,10 +1031,10 @@ class block extends control $project->sv = $this->weekly->getSV($project->ev, $project->pv); $project->cv = $this->weekly->getCV($project->ev, $project->ac); - $progress = isset($tasks[$projectID]) ? (($tasks[$projectID]->totalConsumed + $tasks[$projectID]->totalLeft)) ? round($tasks[$projectID]->totalConsumed / ($tasks[$projectID]->totalConsumed + $tasks[$projectID]->totalLeft), 3) * 100 : 0 : 0; - + $left = (float)$this->weekly->getLeft($project->id, $today); + $project->progress = ($project->ac + $left) ? floor($project->ac / ($project->ac + $left) * 1000) / 1000 * 100 : 0; + $project->progress = $project->progress > 100 ? 100 : $project->progress; $project->current = $current; - $project->progress = $progress; } } @@ -1295,7 +1300,7 @@ class block extends control $this->view->cv = $this->weekly->getCV($this->view->ev, $this->view->ac); $left = (float)$this->weekly->getLeft($this->session->project, $today); - $progress = (!empty($this->view->ac) or !empty($left)) ? floor($this->view->ac / ($this->view->ac + $left) * 1000) / 1000 * 100 : 0; + $progress = ($this->view->ac + $left) ? floor($this->view->ac / ($this->view->ac + $left) * 1000) / 1000 * 100 : 0; $this->view->progress = $progress > 100 ? 100 : $progress; $this->view->current = $current; } @@ -1351,6 +1356,7 @@ class block extends control { $uri = $this->app->tab == 'my' ? $this->createLink('my', 'index') : $this->server->http_referer; $this->session->set('issueList', $uri, 'project'); + session_write_close(); if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) return; $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->issues = $this->loadModel('issue')->getBlockIssues($this->session->project, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy); @@ -1366,6 +1372,7 @@ class block extends control { $uri = $this->app->tab == 'my' ? $this->createLink('my', 'index') : $this->server->http_referer; $this->session->set('riskList', $uri, 'project'); + session_write_close(); $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->risks = $this->loadModel('risk')->getBlockRisks($this->session->project, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy); } @@ -1503,6 +1510,7 @@ class block extends control { $uri = $this->app->tab == 'my' ? $this->createLink('my', 'index') : $this->server->http_referer; $this->session->set('issueList', $uri, 'project'); + session_write_close(); if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) return; $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->issues = $this->loadModel('issue')->getBlockIssues($this->session->project, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy); @@ -1518,6 +1526,7 @@ class block extends control { $uri = $this->app->tab == 'my' ? $this->createLink('my', 'index') : $this->server->http_referer; $this->session->set('riskList', $uri, 'project'); + session_write_close(); $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->risks = $this->loadModel('risk')->getBlockRisks($this->session->project, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy); } @@ -1562,11 +1571,7 @@ class block extends control { $projectID = $this->session->project; - /* Load pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager(0, 30, 1); - - $this->view->actions = $this->loadModel('action')->getDynamic('all', 'all', 'id_desc', $pager, 'all', $projectID); + $this->view->actions = $this->loadModel('action')->getDynamic('all', 'all', 'id_desc', 30, 'all', $projectID); $this->view->users = $this->loadModel('user')->getPairs('noletter', '', 0, array_unique(array_column($this->view->actions, 'actor'))); } @@ -1583,6 +1588,7 @@ class block extends control $uri = $this->app->tab == 'my' ? $this->createLink('my', 'index') : $this->server->http_referer; $this->session->set('releaseList', $uri, 'product'); $this->session->set('productPlanList', $uri, 'product'); + session_write_close(); $products = $this->loadModel('product')->getPairs('', $this->session->project); if(!is_numeric($productID)) $productID = key($products); @@ -1613,6 +1619,7 @@ class block extends control $this->session->set('productList', $uri, 'product'); $this->session->set('projectList', $uri, 'project'); $this->session->set('buildList', $uri, 'execution'); + session_write_close(); $this->app->loadLang('testtask'); $count = zget($this->params, 'count', 10); @@ -1998,6 +2005,7 @@ class block extends control ->fetchAll(); $count['meeting'] = count($meetings); + $objectList += array('meeting' => 'meetings'); $this->view->meetings = $meetings; $this->view->depts = $this->loadModel('dept')->getOptionMenu(); $this->view->users = $this->loadModel('user')->getPairs('all,noletter'); @@ -2009,7 +2017,12 @@ class block extends control $reviews = $this->loadModel('my')->getReviewingList('all', 'time_desc', $pager); if($reviews) { - $hasViewPriv['review'] = true; + $todoPriv = $hasViewPriv['todo']; + unset($hasViewPriv['todo']); + $hasViewPriv = array_merge(array('todo' => $todoPriv, 'review' => true), $hasViewPriv); + + $objectList += array('review' => 'reviews'); + $count['review'] = count($reviews); $this->view->reviews = $reviews; if($this->config->edition == 'max' or $this->config->edition == 'ipd') @@ -2019,6 +2032,12 @@ class block extends control } } + foreach($objectList as $objectType => $object) + { + if($objectType == 'todo') continue; + if(empty($this->view->$object)) $hasViewPriv[$objectType] = false; + } + $this->view->selfCall = $this->selfCall; $this->view->hasViewPriv = $hasViewPriv; $this->view->count = $count; @@ -2089,11 +2108,7 @@ class block extends control */ public function printDocDynamicBlock() { - /* Load pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager(0, 30, 1); - - $this->view->actions = $this->loadModel('doc')->getDynamic($pager); + $this->view->actions = $this->loadModel('doc')->getDynamic(30); $this->view->users = $this->loadModel('user')->getPairs('nodeleted|noletter|all', '', 0, array_unique(array_column($this->view->actions, 'actor'))); } @@ -2187,6 +2202,7 @@ class block extends control { $this->loadModel('doc'); $this->session->set('docList', $this->createLink('doc', 'index'), 'doc'); + session_write_close(); /* Set project status and count. */ $count = isset($this->params->count) ? (int)$this->params->count : 15; @@ -2194,7 +2210,7 @@ class block extends control $involveds = $this->product->getOrderedProducts('involved'); $productIdList = array_merge(array_keys($products), array_keys($involveds)); - $stmt = $this->dao->select('id,product,lib,title,type,addedBy,addedDate,editedDate,status,acl,groups,users,deleted')->from(TABLE_DOC)->alias('t1') + $stmt = $this->dao->select('id,product,lib,title,type,addedBy,addedDate,editedDate,`status`,acl,`groups`,`users`,deleted')->from(TABLE_DOC)->alias('t1') ->where('deleted')->eq(0) ->andWhere('product')->in($productIdList) ->orderBy('product,status,editedDate_desc') @@ -2234,6 +2250,7 @@ class block extends control $this->loadModel('doc'); $this->app->loadLang('project'); $this->session->set('docList', $this->createLink('doc', 'index'), 'doc'); + session_write_close(); /* Set project status and count. */ $count = isset($this->params->count) ? (int)$this->params->count : 15; diff --git a/module/block/model.php b/module/block/model.php index d9b24a9c85..3d4f0545c8 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -220,7 +220,7 @@ class blockModel extends model $delayBugs = array(); foreach($bugs as $bug) { - if($bug->status == 'active' && $bug->deadline && $bug->deadline < $today) $delayBugs[$bug->id] = true; + if($bug->status == 'active' && !helper::isZeroDate($bug->deadline) && $bug->deadline < $today) $delayBugs[$bug->id] = true; $totalBugs[$bug->id] = true; } $data['bugs'] = count($totalBugs); @@ -822,6 +822,10 @@ class blockModel extends model $params->todoCount['default'] = 20; $params->todoCount['control'] = 'input'; + $params->reviewCount['name'] = $this->lang->block->reviewCount; + $params->reviewCount['default'] = 20; + $params->reviewCount['control'] = 'input'; + $params->taskCount['name'] = $this->lang->block->taskCount; $params->taskCount['default'] = 20; $params->taskCount['control'] = 'input'; @@ -862,10 +866,6 @@ class blockModel extends model $params->storyCount['default'] = 20; $params->storyCount['control'] = 'input'; - $params->reviewCount['name'] = $this->lang->block->reviewCount; - $params->reviewCount['default'] = 20; - $params->reviewCount['control'] = 'input'; - return json_encode($params); } diff --git a/module/block/view/printassigntomeblock.html.php b/module/block/view/printassigntomeblock.html.php index 1b8655c1c1..1ea5412974 100644 --- a/module/block/view/printassigntomeblock.html.php +++ b/module/block/view/printassigntomeblock.html.php @@ -21,6 +21,7 @@ $bool):?> + > @@ -49,6 +50,7 @@
$bool):?> +
diff --git a/module/block/view/projectstatisticblock.html.php b/module/block/view/projectstatisticblock.html.php index b19671ee3c..0e56f7fd5f 100755 --- a/module/block/view/projectstatisticblock.html.php +++ b/module/block/view/projectstatisticblock.html.php @@ -197,15 +197,15 @@ $(function()
- executions) and $project->multiple):?> + execution) and $project->multiple):?>

block->last;?>

-
createLink('execution', 'task', "executionID={$project->executions[0]->id}"), $project->executions[0]->name, '', "title='{$project->executions[0]->name}'");?>
+
createLink('execution', 'task', "executionID={$project->execution->id}"), $project->execution->name, '', "title='{$project->name}'");?>
-
- executions[0]->hours->progress) ? $project->executions[0]->hours->progress . '%' : '0%';?> +
+ execution->progress) ? $project->execution->progress . '%' : '0%';?>
diff --git a/module/block/view/reviewblock.html.php b/module/block/view/reviewblock.html.php index 6ade6c5873..6a349be891 100644 --- a/module/block/view/reviewblock.html.php +++ b/module/block/view/reviewblock.html.php @@ -56,8 +56,7 @@ } else { - $class = "class='iframe' data-width='90%'"; - if(strpos(",{$config->my->oaObjectType},", ",{$type},") !== false) $class = "data-toggle='modal'"; + $class = "class='iframe' data-width='90%' data-toggle='modal'"; $titleHtml = html::a($this->createLink($type, 'view', "objectID=$review->id", 'html', true), $review->title, '', $class); } echo $titleHtml; diff --git a/module/bug/control.php b/module/bug/control.php index e6c40bc45c..551a752d3b 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -172,7 +172,7 @@ class bug extends control } else { - $executions = $this->loadModel('execution')->getPairs($this->projectID, 'all', 'empty|withdelete|hideMultiple'); + $executions = $this->loadModel('execution')->fetchPairs($this->projectID, 'all', 'empty|withdelete|hideMultiple'); if($this->config->cache->enable) $this->cache->set($cacheKey, $executions); } @@ -234,7 +234,6 @@ class bug extends control $this->view->position[] = $this->lang->bug->common; $this->view->productID = $productID; $this->view->product = $product; - $this->view->projectProducts = $this->product->getProducts($this->projectID); $this->view->productName = $productName; $this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $branch); $this->view->releasedBuilds = $this->loadModel('release')->getReleasedBuilds($productID, $branch); @@ -1417,6 +1416,11 @@ class bug extends control $this->view->customFields = $customFields; $this->view->showFields = $this->config->bug->custom->batchEditFields; + /* Set users. */ + $users = $this->loadModel('user')->getPairs(); + $limitUsers = $users; + if(count($users) > $this->config->batchMaxCount) $limitUsers = array_slice($users, 0 , $this->config->batchMaxCount); + $branchIdList = array(); $projectIdList = array(); $executionIdList = array(); @@ -1441,7 +1445,38 @@ class bug extends control } } + $bug->assignedToList = array(); + if($this->app->tab == 'project' or $this->app->tab == 'execution') + { + if($bug->execution) + { + $bug->assignedToList = $executionMembers[$bug->execution]; + } + elseif($bug->project) + { + $bug->assignedToList = $projectMembers[$bug->project]; + } + else + { + $bug->assignedToList = $productMembers[$bug->product][$bug->branch]; + if(empty($bug->assignedToList)) + { + $bug->assignedToList = $limitUsers; + if(count($users) > $this->config->batchMaxCount) $this->config->moreLinks["assignedTos[$bug->id]"] = helper::createLink('user', 'ajaxGetMore'); + unset($bug->assignedToList['closed']); + } + } + } + else + { + $bug->assignedToList = $limitUsers; + if(count($users) > $this->config->batchMaxCount) $this->config->moreLinks["assignedTos[$bug->id]"] = helper::createLink('user', 'ajaxGetMore'); + unset($bug->assignedToList['closed']); + } + $bug->assignedToList = array('' => '', 'ditto' => $this->lang->bug->ditto) + array($bug->assignedTo => zget($users, $bug->assignedTo)) + $bug->assignedToList; + $this->config->moreLinks["duplicateBugs[{$bug->id}]"] = inlink('ajaxGetProductBugs', "productID={$bug->product}&bugID={$bug->id}&type=json"); + if(count($users) > $this->config->batchMaxCount) $this->config->moreLinks["resolvedBys[$bug->id]"] = helper::createLink('user', 'ajaxGetMore'); } /* Get assigned to member. */ @@ -1504,10 +1539,6 @@ class bug extends control $this->view->executionMembers = $executionMembers; } - /* Set users. */ - $users = $this->user->getPairs('devfirst'); - $users = array('' => '', 'ditto' => $this->lang->bug->ditto) + $users; - /* Assign. */ $this->view->productID = $productID; $this->view->branchProduct = $branchProduct; @@ -1519,6 +1550,7 @@ class bug extends control $this->view->bugs = $bugs; $this->view->branch = $branch; $this->view->users = $users; + $this->view->limitUsers = $limitUsers; $this->view->modules = $modules; $this->view->branchTagOption = $branchTagOption; $this->view->productBugList = $productBugList; @@ -1934,6 +1966,8 @@ class bug extends control $this->bug->checkBugExecutionPriv($bug); $this->qa->setMenu($this->products, $productID, $bug->branch); + $this->config->moreLinks['duplicateBug'] = inlink('ajaxGetProductBugs', "productID={$productID}&bugID={$bugID}&type=json"); + $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->resolve; $this->view->bug = $bug; $this->view->users = $users; @@ -2591,13 +2625,14 @@ class bug extends control * * @param int $productID * @param int $bugID + * @param string $type * @access public * @return string */ public function ajaxGetProductBugs($productID, $bugID, $type = 'html') { $search = $this->get->search; - $limit = $this->get->limit; + $limit = $this->get->limit ? $this->get->limit : $this->config->maxCount; $product = $this->loadModel('product')->getById($productID); $bug = $this->bug->getById($bugID); $branch = $product->type == 'branch' ? ($bug->branch > 0 ? $bug->branch . ',0' : '0') : ''; diff --git a/module/bug/js/batchedit.js b/module/bug/js/batchedit.js index 5869da870b..c7055e2d23 100644 --- a/module/bug/js/batchedit.js +++ b/module/bug/js/batchedit.js @@ -24,7 +24,7 @@ $(document).on('click', '.chosen-with-drop', function(){oldValue = $(this).prev( /* Set ditto value. */ $(document).on('change', 'select', function() { - if($(this).val() == 'ditto') + if($(this).data('zui.picker').getValue() == 'ditto') { var index = $(this).closest('td').index(); var row = $(this).closest('tr').index(); @@ -38,34 +38,34 @@ $(document).on('change', 'select', function() } var value = ''; + var label = ''; for(i = row - 1; i >= 0; i--) { - value = tbody.children('tr').eq(i).find('td').eq(index).find('select').val(); + value = tbody.children('tr').eq(i).find('td').eq(index).find('select').data('zui.picker').getValue(); + label = tbody.children('tr').eq(i).find('td').eq(index).find('select').data('zui.picker').getListItem(value).text; if(value != 'ditto') break; } isPlans = $(this).attr('name').indexOf('plans') != -1; + $(this).data('zui.picker').updateOptionList([{text: label, value}]); if(isPlans) { var valueStr = ',' + $(this).find('option').map(function(){return $(this).val();}).get().join(',') + ','; if(valueStr.indexOf(',' + value + ',') != -1) { - $(this).val(value); + $(this).data('zui.picker').setValue(value); } else { alert(dittoNotice); - $(this).val(oldValue); + $(this).data('zui.picker').setValue(oldValue); } } else { - $(this).val(value); + $(this).data('zui.picker').setValue(value); } - - $(this).trigger("chosen:updated"); - $(this).trigger("change"); } }) diff --git a/module/bug/js/resolve.js b/module/bug/js/resolve.js index 2dc1d67371..8afea5743c 100644 --- a/module/bug/js/resolve.js +++ b/module/bug/js/resolve.js @@ -2,18 +2,6 @@ function setDuplicate(resolution) { if(resolution == 'duplicate') { - $.ajaxSettings.async = false; - $.get(createLink('bug', 'ajaxGetProductBugs', 'projectID=' + productID + '&bugID=' + bugID),function(data) - { - $('#duplicateBug').replaceWith(data); - $('#pk_duplicateBug-search').parent().parent().remove(); - $('#duplicateBug').picker( - { - disableEmptySearch : true, - dropWidth : 'auto' - }); - }); - $.ajaxSettings.async = true; $('#duplicateBugBox').show(); } else diff --git a/module/bug/model.php b/module/bug/model.php index 14e41568f1..2e56c0dfb2 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -561,7 +561,7 @@ class bugModel extends model $bug = $this->loadModel('file')->replaceImgURL($bug, 'steps'); if($setImgSize) $bug->steps = $this->file->setImgSize($bug->steps); - foreach($bug as $key => $value) if(strpos($key, 'Date') !== false and !(int)substr(is_null($value) ? '' : $value, 0, 4)) $bug->$key = ''; + foreach($bug as $key => $value) if(strpos($key, 'Date') !== false && $value && !(int)substr(is_null($value) ? '' : $value, 0, 4)) $bug->$key = ''; if($bug->duplicateBug) $bug->duplicateBugTitle = $this->dao->findById($bug->duplicateBug)->from(TABLE_BUG)->fields('title')->fetch('title'); if($bug->case) $bug->caseTitle = $this->dao->findById($bug->case)->from(TABLE_CASE)->fields('title')->fetch('title'); @@ -2052,21 +2052,21 @@ class bugModel extends model */ public function getProductBugPairs($productID, $branch = '', $search = '', $limit = 0) { - $bugs = array('' => ''); - $data = $this->dao->select('id, title')->from(TABLE_BUG) + $bugs = $this->dao->select("id, CONCAT(id, ':', title) AS title")->from(TABLE_BUG) ->where('product')->eq((int)$productID) ->beginIF(!$this->app->user->admin)->andWhere('execution')->in('0,' . $this->app->user->view->sprints)->fi() ->beginIF($branch !== '')->andWhere('branch')->in($branch)->fi() - ->beginIF(strlen(trim($search)))->andWhere('title')->like('%' . $search . '%')->fi() + ->beginIF(strlen(trim($search))) + ->andWhere('id', true)->like('%' . $search . '%') + ->orWhere('title')->like('%' . $search . '%') + ->markRight(1) + ->fi() ->andWhere('deleted')->eq(0) ->orderBy('id desc') ->beginIF($limit)->limit($limit)->fi() - ->fetchAll(); - foreach($data as $bug) - { - $bugs[$bug->id] = $bug->id . ':' . $bug->title; - } - return $bugs; + ->fetchPairs(); + + return array('' => '') + $bugs; } /** @@ -2861,7 +2861,8 @@ class bugModel extends model ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() ->andWhere('deleted')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi() - ->orderBy($orderBy)->page($pager) + ->orderBy($orderBy) + ->page($pager) ->fetchAll(); } diff --git a/module/bug/view/batchedit.html.php b/module/bug/view/batchedit.html.php index da22c77db3..f488160779 100644 --- a/module/bug/view/batchedit.html.php +++ b/module/bug/view/batchedit.html.php @@ -101,40 +101,12 @@ product][$bug->branch]) ? $modules[$bug->product][$bug->branch] : array(0 => '/'), $bug->module, "class='form-control picker-select' data-drop-width='auto'");?> ' style='overflow:visible'>plan, "class='form-control picker-select' data-drop-width='auto'");?> - tab == 'project' or $app->tab == 'execution') - { - if($bug->execution) - { - $assignedToList = array('' => '', 'ditto' => $this->lang->bug->ditto) + $executionMembers[$bug->execution]; - } - elseif($bug->project) - { - $assignedToList = array('' => '', 'ditto' => $this->lang->bug->ditto) + $projectMembers[$bug->project]; - } - else - { - $assignedToList = $productMembers[$bug->product][$bug->branch]; - if(empty($assignedToList)) - { - $assignedToList = $users; - unset($assignedToList['closed']); - } - } - } - else - { - $assignedToList = $users; - unset($assignedToList['closed']); - } - ?> - ' style='overflow:visible'>status == 'closed' ? html::input("assignedTos[$bugID]", ucfirst($bug->assignedTo), 'class=form-control disabled') : html::select("assignedTos[$bugID]", $assignedToList, $bug->assignedTo, "class='form-control picker-select' data-drop-width='135px'");?> + ' style='overflow:visible'>status == 'closed' ? html::input("assignedTos[$bugID]", ucfirst($bug->assignedTo), 'class=form-control disabled') : html::select("assignedTos[$bugID]", $bug->assignedToList, $bug->assignedTo, "class='form-control picker-select' data-drop-width='135px'");?> ' style='overflow:visible'>deadline) ? '' : $bug->deadline, "class='form-control form-date'");?> >bug->osList, $bug->os, 'class="form-control chosen" multiple');?> >bug->browserList, $bug->browser, 'class="form-control chosen" multiple');?> >keywords, 'class=form-control');?> - ' style='overflow:visible'>resolvedBy, "class='form-control picker-select' data-drop-width='auto'");?> + ' style='overflow:visible'> '', 'ditto' => $this->lang->bug->ditto) + array($bug->resolvedBy => zget($users, $bug->resolvedBy)) + $limitUsers, $bug->resolvedBy, "class='form-control picker-select' data-drop-width='auto'");?> > diff --git a/module/bug/view/create.html.php b/module/bug/view/create.html.php index 0ec815ea66..c068ccd260 100644 --- a/module/bug/view/create.html.php +++ b/module/bug/view/create.html.php @@ -378,4 +378,5 @@ $('#osBox').next('.table-col').remove(); $('#typeBox').closest('tr').append(''); + diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php index f5e7814ba2..af6ccb2584 100644 --- a/module/bug/view/edit.html.php +++ b/module/bug/view/edit.html.php @@ -329,4 +329,5 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project); + diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index 2a7b230327..fa1088ec69 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -12,6 +12,7 @@ ?> +bug->confirmToStory);?> tab);?> diff --git a/module/build/control.php b/module/build/control.php index ace42efbdc..fd940909fe 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -677,11 +677,11 @@ class build extends control $executionID = $build->execution ? $build->execution : $build->project; if($browseType == 'bySearch') { - $allStories = $this->story->getBySearch($build->product, $build->branch, $queryID, 'id', $executionID, 'story', $build->allStories, $pager); + $allStories = $this->story->getBySearch($build->product, $build->branch, $queryID, 'id', $executionID, 'story', $build->allStories, 'draft,reviewing,changing', $pager); } else { - $allStories = $this->story->getExecutionStories($executionID, $build->product, 0, 't1.`order`_desc', 'byBranch', $build->branch, 'story', $build->allStories, $pager); + $allStories = $this->story->getExecutionStories($executionID, $build->product, 0, 't1.`order`_desc', 'byBranch', $build->branch, 'story', $build->allStories, 'draft,reviewing,changing', $pager); } $this->view->allStories = $allStories; diff --git a/module/build/model.php b/module/build/model.php index ba3a7892eb..99e54efd6d 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -270,7 +270,7 @@ class buildModel extends model ->leftJoin(TABLE_RELEASE)->alias('t3')->on("FIND_IN_SET(t1.id,t3.build)") ->leftJoin(TABLE_PRODUCT)->alias('t4')->on('t1.product = t4.id') ->where('1=1') - ->beginIf(!empty($shaows))->andWhere('t1.id')->notIN($shadows)->fi() + ->beginIf(!empty($shadows))->andWhere('t1.id')->notIN($shadows)->fi() ->beginIF(strpos($params, 'hasdeleted') === false)->andWhere('t1.deleted')->eq(0)->fi() ->beginIF(strpos($params, 'hasproject') !== false)->andWhere('t1.project')->ne(0)->fi() ->beginIF(strpos($params, 'singled') !== false)->andWhere('t1.execution')->ne(0)->fi() diff --git a/module/common/lang/de.php b/module/common/lang/de.php index ddbd613c26..464ea9da64 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -433,10 +433,15 @@ $lang->exportTypeList['all'] = 'Alle'; $lang->exportTypeList['selected'] = 'Ausgewählte'; $lang->visionList = array(); -$lang->visionList['or'] = 'OR & MM Interface'; -$lang->visionList['rnd'] = 'IPD Interface'; +$lang->visionList['rnd'] = 'Full Feature Interface'; $lang->visionList['lite'] = 'Operation Management Interface'; +if($config->edition == 'ipd') +{ + $lang->visionList['or'] = 'OR & MM Interface'; + $lang->visionList['rnd'] = 'IPD Interface'; +} + $lang->createObjects['todo'] = 'Todo'; $lang->createObjects['effort'] = 'Effort'; $lang->createObjects['bug'] = 'Bug'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 59e2596787..258aa19425 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -25,6 +25,7 @@ $lang->ellipsis = '…'; $lang->percent = '%'; $lang->dash = '-'; $lang->and = 'and'; +$lang->separater = ','; $lang->zentaoPMS = 'ZenTao'; $lang->pmsName = 'ALM'; @@ -435,10 +436,15 @@ $lang->exportTypeList['all'] = 'All Data'; $lang->exportTypeList['selected'] = 'Selected Data'; $lang->visionList = array(); -$lang->visionList['or'] = 'OR & MM Interface'; -$lang->visionList['rnd'] = 'IPD Interface'; +$lang->visionList['rnd'] = 'Full Feature Interface'; $lang->visionList['lite'] = 'Operation Management Interface'; +if($config->edition == 'ipd') +{ + $lang->visionList['or'] = 'OR & MM Interface'; + $lang->visionList['rnd'] = 'IPD Interface'; +} + $lang->createObjects['todo'] = 'Todo'; $lang->createObjects['effort'] = 'Effort'; $lang->createObjects['bug'] = 'Bug'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 0608fa8720..3ad7f39806 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -433,10 +433,15 @@ $lang->exportTypeList['all'] = 'Toutes les Données'; $lang->exportTypeList['selected'] = 'Données sélectionnées'; $lang->visionList = array(); -$lang->visionList['or'] = 'OR & MM Interface'; -$lang->visionList['rnd'] = 'IPD Interface'; +$lang->visionList['rnd'] = 'Full Feature Interface'; $lang->visionList['lite'] = 'Operation Management Interface'; +if($config->edition == 'ipd') +{ + $lang->visionList['or'] = 'OR & MM Interface'; + $lang->visionList['rnd'] = 'IPD Interface'; +} + $lang->createObjects['todo'] = 'Todo'; $lang->createObjects['effort'] = 'Effort'; $lang->createObjects['bug'] = 'Bug'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 3925491461..f4445b078d 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -25,6 +25,7 @@ $lang->ellipsis = '…'; $lang->percent = '%'; $lang->dash = '-'; $lang->and = '和'; +$lang->separater = '、'; $lang->zentaoPMS = '禅道'; $lang->pmsName = '开源版'; @@ -433,10 +434,15 @@ $lang->exportTypeList['all'] = '全部记录'; $lang->exportTypeList['selected'] = '选中记录'; $lang->visionList = array(); -$lang->visionList['or'] = '需求与市场管理界面'; -$lang->visionList['rnd'] = 'IPD研发管理界面'; +$lang->visionList['rnd'] = '综合研发界面'; $lang->visionList['lite'] = '运营管理界面'; +if($config->edition == 'ipd') +{ + $lang->visionList['or'] = '需求与市场管理界面'; + $lang->visionList['rnd'] = 'IPD研发管理界面'; +} + $lang->createObjects['todo'] = '待办'; $lang->createObjects['effort'] = '日志'; $lang->createObjects['bug'] = 'Bug'; diff --git a/module/common/model.php b/module/common/model.php index 541c9dfe3f..c3e2038a59 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -996,6 +996,9 @@ class commonModel extends model $app->loadLang('my'); + /* Ensure user has latest rights set. */ + $app->user->rights = $app->control->loadModel('user')->authorize($app->user->account); + $menuOrder = $lang->mainNav->menuOrder; ksort($menuOrder); @@ -1719,6 +1722,7 @@ EOF; /* Add data-app attribute. */ if(strpos($misc, 'data-app') === false) $misc .= ' data-app="' . $app->tab . '"'; + if($onlyBody && strpos($misc, 'data-toggle') === false) $misc .= ' data-toggle="modal"'; /* Judge the $method of $module clickable or not, default is clickable. */ $clickable = true; @@ -2570,7 +2574,8 @@ EOF; * The following pages can be allowed to open in non-iframe, so ignore these pages. */ $module = $this->app->getModuleName(); - $whitelist = '|index|tutorial|install|upgrade|sso|cron|misc|user-login|user-deny|user-logout|user-reset|user-forgetpassword|user-resetpassword|my-changepassword|my-preference|file-read|file-download|file-uploadimages|report-annualdata|misc-captcha|execution-printkanban||traincourse-playvideo|'; + $method = $this->app->getMethodName(); + $whitelist = '|index|tutorial|install|upgrade|sso|cron|misc|user-login|user-deny|user-logout|user-reset|user-forgetpassword|user-resetpassword|my-changepassword|my-preference|file-read|file-download|file-preview|file-uploadimages|file-ajaxwopifiles|report-annualdata|misc-captcha|execution-printkanban|traincourse-ajaxuploadlargefile|traincourse-playvideo|screen-view|zanode-create|screen-ajaxgetchart|'; if(strpos($whitelist, "|{$module}|") !== false || strpos($whitelist, "|{$module}-{$method}|") !== false) return true; /** diff --git a/module/common/view/datatable.fix.html.php b/module/common/view/datatable.fix.html.php index 4a805cd705..02e8c04b9b 100644 --- a/module/common/view/datatable.fix.html.php +++ b/module/common/view/datatable.fix.html.php @@ -36,7 +36,7 @@ $(function() { $dropmenu.append("
  • datatable->custom?>
  • "); } - if(!(currentModule == 'execution' && currentMethod == 'all')) $dropmenu.append("
  • \", true);' id='switchToDatatable'>datatable->switchToDatatable : $lang->datatable->switchToTable;?>
  • "); + if(!(currentModule == 'execution' && (currentMethod == 'all' || currentMethod == 'task'))) $dropmenu.append("
  • \", true);' id='switchToDatatable'>datatable->switchToDatatable : $lang->datatable->switchToTable;?>
  • "); $dropdown.append($dropmenu) .appendTo($btnToolbar) .on('shown.zui.dropdown', function(){$btnToolbar.closest('.table-header').css('z-index', 11);}) @@ -112,7 +112,7 @@ $(function() - + diff --git a/module/common/view/zui3dtable.html.php b/module/common/view/zui3dtable.html.php new file mode 100644 index 0000000000..c60b5e3f32 --- /dev/null +++ b/module/common/view/zui3dtable.html.php @@ -0,0 +1,21 @@ + + + diff --git a/module/company/control.php b/module/company/control.php index 6a84f863e0..0861c045ee 100755 --- a/module/company/control.php +++ b/module/company/control.php @@ -201,10 +201,6 @@ class company extends control $this->session->set('meetingList', $uri, 'project'); $this->session->set('meetingroomList', $uri, 'admin'); - /* Set the pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager($recTotal, $recPerPage = 50, $pageID = 1); - /* Append id for secend sort. */ if($direction == 'next') $orderBy = 'date_desc'; if($direction == 'pre') $orderBy = 'date_asc'; @@ -253,11 +249,11 @@ class company extends control if(!$productID) $productID = 'all'; if(!$projectID) $projectID = 'all'; if(!$executionID) $executionID = 'all'; - $actions = $this->action->getDynamic($account, $browseType, $orderBy, $pager, $productID, $projectID, $executionID, $date, $direction); + $actions = $this->action->getDynamic($account, $browseType, $orderBy, 50, $productID, $projectID, $executionID, $date, $direction); } else { - $actions = $this->action->getDynamicBySearch($products, $projects, $executions, $queryID, $orderBy, $pager, $date, $direction); + $actions = $this->action->getDynamicBySearch($products, $projects, $executions, $queryID, $orderBy, 50, $date, $direction); } /* Build search form. */ @@ -285,6 +281,10 @@ class company extends control $this->config->company->dynamic->search['params']['actor']['values'] = $accountPairs; $this->loadModel('search')->setSearchParams($this->config->company->dynamic->search); + $dateGroups = $this->action->buildDateGroup($actions, $direction, $browseType, $orderBy); + + if(empty($recTotal)) $recTotal = count($dateGroups) < 2 ? count($actions) : $this->action->getDynamicCount(); + /* Assign. */ $this->view->recTotal = $recTotal; $this->view->browseType = $browseType; @@ -295,10 +295,9 @@ class company extends control $this->view->executionID = $executionID; $this->view->queryID = $queryID; $this->view->orderBy = $orderBy; - $this->view->pager = $pager; $this->view->userID = $userID; $this->view->param = $param; - $this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $browseType, $orderBy); + $this->view->dateGroups = $dateGroups; $this->view->direction = $direction; $this->display(); } diff --git a/module/company/view/dynamic.html.php b/module/company/view/dynamic.html.php index 0fe8952af1..9c1c15b96f 100644 --- a/module/company/view/dynamic.html.php +++ b/module/company/view/dynamic.html.php @@ -21,8 +21,7 @@ if($period == $browseType) { $active = 'btn-active-text'; - $pager->recTotal = $recTotal ? $recTotal : $pager->recTotal; - $label .= " {$pager->recTotal}"; + $label .= " {$recTotal}"; } echo html::a(inlink('dynamic', "browseType=$period¶m=&recTotal=0&date=&direction=next&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID&orderBy=$orderBy"), $label, '', "class='btn btn-link $active' id='{$period}'") ?> @@ -116,8 +115,8 @@ $firstDate = date('Y-m-d', strtotime($firstAction->originalDate) + 24 * 3600); $lastDate = substr($action->originalDate, 0, 10); $hasPre = $this->action->hasPreOrNext($firstDate, 'pre'); $hasNext = $this->action->hasPreOrNext($lastDate, 'next'); -$preLink = $hasPre ? inlink('dynamic', "browseType=$browseType¶m=$param&recTotal={$pager->recTotal}&date=" . strtotime($firstDate) . "&direction=pre&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID&orderBy=$orderBy") : 'javascript:;'; -$nextLink = $hasNext ? inlink('dynamic', "browseType=$browseType¶m=$param&recTotal={$pager->recTotal}&date=" . strtotime($lastDate) . "&direction=next&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID&orderBy=$orderBy") : 'javascript:;'; +$preLink = $hasPre ? inlink('dynamic', "browseType=$browseType¶m=$param&recTotal={$recTotal}&date=" . strtotime($firstDate) . "&direction=pre&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID&orderBy=$orderBy") : 'javascript:;'; +$nextLink = $hasNext ? inlink('dynamic', "browseType=$browseType¶m=$param&recTotal={$recTotal}&date=" . strtotime($lastDate) . "&direction=next&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID&orderBy=$orderBy") : 'javascript:;'; ?>
    diff --git a/module/cron/control.php b/module/cron/control.php index bf8be43f5d..c09acfa93e 100644 --- a/module/cron/control.php +++ b/module/cron/control.php @@ -150,13 +150,13 @@ class cron extends control /* make cron status to running. */ $configID = $this->cron->getConfigID(); $configID = $this->cron->markCronStatus('running', $configID); + $this->dao->update(TABLE_CRON)->set('lastTime')->eq(date(DT_DATETIME1))->where('id')->eq(1)->exec(); /* Get and parse crons. */ $crons = $this->cron->getCrons('nostop'); $parsedCrons = $this->cron->parseCron($crons); - /* Update last time. */ - $this->cron->changeStatus(key($parsedCrons), 'normal', true); + $this->cron->logCron("The cron process created.\n"); $this->loadModel('common'); $startedTime = time(); while(true) @@ -166,10 +166,18 @@ class cron extends control /* When cron is null then die. */ if(empty($crons)) break; if(empty($parsedCrons)) break; - if(!$this->cron->getTurnon()) break; + if(!$this->cron->getTurnon()) + { + $this->cron->logCron("The cron process turned off.\n"); + break; + } /* Die old process when restart. */ - if(file_exists($restartTag) and !$restart) return unlink($restartTag); + if(file_exists($restartTag) and !$restart) + { + $this->cron->logCron("The cron process restarted.\n"); + return unlink($restartTag); + } $restart = false; /* Run crons. */ @@ -205,6 +213,11 @@ class cron extends control $return = ''; if($cron['command']) { + /* Save log of executing cron. */ + $time = $now->format('Y-m-d H:i:s'); + $log = "\n$time task " . $id . " executing,\ncommand: $cron[command]\n"; + $this->cron->logCron($log); + if(isset($crons[$id]) and $crons[$id]->type == 'zentao') { parse_str($cron['command'], $params); @@ -220,12 +233,11 @@ class cron extends control if($output) $output = join("\n", $output); } - /* Save log. */ - $log = ''; - $time = $now->format('G:i:s'); - $output = "\n" . $output; + /* Save log of executed cron. */ + $time = $now->format('Y-m-d H:i:s'); + $output = $output; - $log = "$time task " . $id . " executed,\ncommand: $cron[command].\nreturn : $return.\noutput : $output\n"; + $log = "\n$time task " . $id . " executed,\ncommand: $cron[command]\nreturn : $return\noutput : $output\n"; $this->cron->logCron($log); unset($log); } @@ -248,8 +260,6 @@ class cron extends control $sleepTime = 60 - ((time() - strtotime($now->format('Y-m-d H:i:s'))) % 60); sleep($sleepTime); - /* Break while. */ - if('cli' !== PHP_SAPI && connection_status() != CONNECTION_NORMAL) break; if(((time() - $startedTime) / 3600 / 24) >= $this->config->cron->maxRunDays) break; } diff --git a/module/cron/model.php b/module/cron/model.php index e01d59145d..488a50bb76 100644 --- a/module/cron/model.php +++ b/module/cron/model.php @@ -32,14 +32,21 @@ class cronModel extends model */ public function getCrons($params = '') { - return $this->dao->select('*')->from(TABLE_CRON) - ->where('1=1') - ->beginIF(strpos($params, 'nostop') !== false)->andWhere('status')->ne('stop')->fi() - ->beginIF($this->config->edition != 'max') - ->andWhere('command')->ne('moduleName=measurement&methodName=initCrontabQueue') - ->andWhere('command')->ne('moduleName=measurement&methodName=execCrontabQueue') - ->fi() - ->fetchAll('id'); + $validCrons = $this->dao->select('*')->from(TABLE_CRON)->fetchAll('id'); + + $commandInMaxEdition = array( + 'moduleName=measurement&methodName=initCrontabQueue', + 'moduleName=measurement&methodName=execCrontabQueue', + 'moduleName=weekly&methodName=computeWeekly', + ); + foreach($validCrons as $id => $cron) + { + if(strpos($params, 'nostop') !== false and $cron->status == 'stop') unset($validCrons[$id]); + + if($this->config->edition != 'max' and in_array($cron->command, $commandInMaxEdition)) unset($validCrons[$id]); + } + + return $validCrons; } /** @@ -76,7 +83,7 @@ class cronModel extends model } } } - $this->dao->update(TABLE_CRON)->set('lastTime')->eq(date(DT_DATETIME1))->where('lastTime')->eq('0000-00-00 00:00:00')->andWhere('status')->ne('stop')->exec(); + return $parsedCrons; } @@ -134,15 +141,16 @@ class cronModel extends model } /** - * Get last execed time. + * Get the last executed time of cron process. * * @access public - * @return string + * @return string|null */ public function getLastTime() { - $cron = $this->dao->select('*')->from(TABLE_CRON)->orderBy('lastTime desc')->limit(1)->fetch(); - return isset($cron->lastTime) ? $cron->lastTime : '0000-00-00 00:00:00'; + $lastTime = $this->dao->select('lastTime')->from(TABLE_CRON)->where('id')->eq(1)->fetch('lastTime'); + if(!dao::isError()) return $lastTime; + return null; } /** @@ -185,7 +193,7 @@ class cronModel extends model { $cron = fixer::input('post') ->add('status', 'normal') - ->add('lastTime', '0000-00-00 00:00:00') + ->add('lastTime', null) ->skipSpecial('m,h,dom,mon,dow,command') ->get(); @@ -217,7 +225,6 @@ class cronModel extends model public function update($cronID) { $cron = fixer::input('post') - ->add('lastTime', '0000-00-00 00:00:00') ->skipSpecial('m,h,dom,mon,dow,command') ->get(); diff --git a/module/datatable/model.php b/module/datatable/model.php index df3f77cc51..69e67245c9 100644 --- a/module/datatable/model.php +++ b/module/datatable/model.php @@ -99,12 +99,13 @@ class datatableModel extends model $set->order = $order++; $set->id = $id; $set->show = true; - $set->width = $fieldList[$id]['width']; - $set->fixed = $fieldList[$id]['fixed']; - $set->title = $fieldList[$id]['title']; $set->sort = isset($fieldList[$id]['sort']) ? $fieldList[$id]['sort'] : 'yes'; $set->name = isset($fieldList[$id]['name']) ? $fieldList[$id]['name'] : ''; + if(isset($fieldList[$id]['type'])) $set->type = $fieldList[$id]['type']; + if(isset($fieldList[$id]['title'])) $set->title = $fieldList[$id]['title']; + if(isset($fieldList[$id]['fixed'])) $set->fixed = $fieldList[$id]['fixed']; + if(isset($fieldList[$id]['width'])) $set->width = $fieldList[$id]['width']; if(isset($fieldList[$id]['minWidth'])) $set->minWidth = $fieldList[$id]['minWidth']; if(isset($fieldList[$id]['maxWidth'])) $set->maxWidth = $fieldList[$id]['maxWidth']; if(isset($fieldList[$id]['pri'])) $set->pri = $fieldList[$id]['pri']; diff --git a/module/datatable/view/ajaxcustom.html.php b/module/datatable/view/ajaxcustom.html.php index e3a36c661f..8809456ef0 100644 --- a/module/datatable/view/ajaxcustom.html.php +++ b/module/datatable/view/ajaxcustom.html.php @@ -64,12 +64,13 @@ -
    ' data-key='' data-fixed='' data-width=''> +
    ' data-key='' data-fixed='' data-width=''>
    > - datatable->width?> '> + datatable->width?>
    ({$lang->datatable->required})"?> diff --git a/module/dataview/css/browse.css b/module/dataview/css/browse.css index 5c47b3a8c4..865798eef3 100644 --- a/module/dataview/css/browse.css +++ b/module/dataview/css/browse.css @@ -27,3 +27,5 @@ .cell> .panel> .panel-heading {padding: 5px 0px 10px;} .detail-title>.pull-right {position: unset;} .detail-title>.pull-right>a {margin: 0px 10px; font-weight: normal; font-size: 13px;} + +.table-code {margin-left: 12px;} diff --git a/module/dataview/js/browse.js b/module/dataview/js/browse.js index bc7b13b228..a16b1bb8bd 100644 --- a/module/dataview/js/browse.js +++ b/module/dataview/js/browse.js @@ -90,11 +90,12 @@ function buildTable(resp) html += "
    "; for(var field in resp.fields) { - var fieldName = dataview?.fieldSettings?.[field]?.name ? dataview.fieldSettings[field].name : field; - if(dataview?.langs) + var fieldName = field; + if(typeof(dataview) != 'undefined' && typeof(dataview.fieldSettings) != 'undefined' && typeof(dataview.fieldSettings[field]) != 'undefined' && typeof(dataview.fieldSettings[field].name) != 'undefined') fieldName = dataview.fieldSettings[field].name ? dataview.fieldSettings[field].name : field; + if(typeof(dataview.langs) != 'undefined') { var langs = JSON.parse(dataview.langs); - if(langs) fieldName = langs?.[field]?.[clientLang] ? langs[field][clientLang] : fieldName; + if(langs && typeof(langs[field]) != 'undefined' && typeof(langs[field][clientLang]) != 'undefined') fieldName = langs[field][clientLang] ? langs[field][clientLang] : fieldName; } html += ""; @@ -109,7 +110,7 @@ function buildTable(resp) html += ''; for(var field in resp.fields) { - var tdValue = data?.[field] ? data[field] : 'null'; + var tdValue = (typeof(data[field]) != 'undefined' && data[field]) ? data[field] : 'null'; html += ""; } html += ''; @@ -164,3 +165,15 @@ function initPager(pageID, recPerPage, recTotal, fieldCount) $('#queryResult').html(viewResult.replace('%s', recTotal).replace('%s', fieldCount)); } +/** + * Set export show or hidden. + * + * @param string stat show|hide + * @access public + * @return void + */ +function setExport(stat) +{ + if(stat == 'show') $('.dataview-export').removeClass('hidden'); + else $('.dataview-export').addClass('hidden'); +} diff --git a/module/dataview/view/browse.html.php b/module/dataview/view/browse.html.php index 877ca42aed..0942c62fce 100644 --- a/module/dataview/view/browse.html.php +++ b/module/dataview/view/browse.html.php @@ -28,7 +28,7 @@
    - createLink('dataview', 'export', "type=$type&table=$selectedTable", '', true), " {$lang->dataview->export}", '', "class='iframe btn btn-link'");?> + createLink('dataview', 'export', "type=$type&table=$selectedTable", '', true), " {$lang->dataview->export}", '', "class='iframe btn btn-link dataview-export'");?> createLink('dataview', 'create'), "" . $lang->dataview->create . "", '', "class='btn btn-secondary'");?>
    @@ -65,7 +65,7 @@
    -
    +
    $table";?>
    diff --git a/module/dept/css/browse.css b/module/dept/css/browse.css index 2ccff1509d..26901efd33 100644 --- a/module/dept/css/browse.css +++ b/module/dept/css/browse.css @@ -1,5 +1,6 @@ .table.table-form {width: auto;} -.table-form > tbody > tr > td .form-control + .form-control {margin-top: 5px;} +.div-depts {margin-bottom: 5px;} +.clear-margin {margin: 0px;} .tree li.has-list > .tree-actions > .tree-action[data-type="delete"] {display: none;} .tree-toggle {cursor: pointer;} diff --git a/module/dept/view/browse.html.php b/module/dept/view/browse.html.php index 93861a70cb..52fd83f60d 100644 --- a/module/dept/view/browse.html.php +++ b/module/dept/view/browse.html.php @@ -51,9 +51,9 @@ foreach($sons as $sonDept) { if($sonDept->order > $maxOrder) $maxOrder = $sonDept->order; - echo html::input("depts[id$sonDept->id]", $sonDept->name, "class='form-control'"); + echo "
    " . html::input("depts[id$sonDept->id]", $sonDept->name, "class='form-control'") . "
    "; } - for($i = 0; $i < DEPT::NEW_CHILD_COUNT ; $i ++) echo html::input("depts[]", '', "class='form-control'"); + for($i = 0; $i < DEPT::NEW_CHILD_COUNT ; $i ++) echo "
    " . html::input("depts[]", '', "class='form-control'") . "
    "; ?>
    @@ -170,25 +170,28 @@ $(function() }); - $("input[name*='depts']").change(function () + $("input[name*='depts']").on('input', function () { var depts = new Array(); var modifyData = $(this).val(); var changedInput = $(this); - changedInput.wrap(''); - changedInput.closest('span').addClass('dataField'); + changedInput.closest('div').addClass('dataField'); $('input[name^="depts"]').not($(this)).each(function() { if($(this).val()) depts.push($(this).val()); }); - if(depts.indexOf(modifyData) > -1) + if(depts.includes(modifyData)) { - $('.dataField #depts\\[\\]').addClass('intro'); - $('.intro').css({"margin" : "5px 0px 5px 0px", "display" : "inline", "width" : "50%"}); - changedInput.after('' + repeatDepart + ''); + changedInput.after('' + repeatDepart + ''); + changedInput.closest('div').addClass('clear-margin'); + } + else + { + $('.div-depts').removeClass('clear-margin'); + $('.tips').remove(); } }); @@ -196,9 +199,7 @@ $(function() { if($('.dataField').length) { - $('.intro').removeAttr('style'); - $('.intro').unwrap(); - $('#depts\\[\\]').removeClass('intro'); + $('.div-depts').removeClass('clear-margin'); $('.tips').remove(); } }); diff --git a/module/doc/control.php b/module/doc/control.php index 1176336210..c573fa04a4 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -734,17 +734,17 @@ class doc extends control else { $docContent = $this->dao->select('t1.*')->from(TABLE_DOCCONTENT)->alias('t1') - ->leftJoin(TABLE_DOC)->alias('t2')->on('t1.doc=t2.id and t1.version=t2.version') - ->where('t2.id')->eq($docID) - ->fetch(); + ->leftJoin(TABLE_DOC)->alias('t2')->on('t1.doc=t2.id and t1.version=t2.version') + ->where('t2.id')->eq($docID) + ->fetch(); unset($docContent->id); - $docContent->files = trim(str_replace(",{$fileID},", ',', ",{$docContent->files},"), ','); + $docContent->files = trim(str_replace(",{$fileID},", ',', ",{$docContent->files},"), ','); $docContent->version += 1; $this->dao->insert(TABLE_DOCCONTENT)->data($docContent)->exec(); $this->dao->update(TABLE_DOC)->set('version')->eq($docContent->version)->where('id')->eq($docID)->exec(); $file = $this->file->getById($fileID); - $this->action->create($file->objectType, $file->objectID, 'deletedFile', '', $extra = $file->title); + if(in_array($file->extension, $this->config->file->imageExtensions)) $this->action->create($file->objectType, $file->objectID, 'deletedFile', '', $extra = $file->title); return print(js::locate($this->createLink('doc', 'view', "docID=$docID"), 'parent')); } } @@ -1186,12 +1186,13 @@ class doc extends control /* Get the two elements with the highest rank. */ sort($includeHeadElement); - $includeHeadElement = array_slice($includeHeadElement, 0, 2); if($includeHeadElement) { - $outline = '
      '; - $preElement = ''; + $outline = '
      • '; + $preElement = ''; + $currentLevel = 0; + $preLevel = 0; foreach($content as $index => $element) { preg_match('/<(h[1-6])([\S\s]*?)>([\S\s]*?)<\/\1>/', $element, $headElement); @@ -1199,34 +1200,30 @@ class doc extends control /* The current element is existed, the element is in the includeHeadElement, and the text in the element is not null. */ if(isset($headElement[1]) and in_array($headElement[1], $includeHeadElement) and strip_tags($headElement[3]) != '') { - /* The element is the first level. */ - if(array_search($headElement[1], $includeHeadElement) == 0) + $currentLevel = (int)ltrim($headElement[1], 'h'); + + if($currentLevel > $preLevel) { - /* The second level is existed, and previous element is the second level element. */ - if(isset($includeHeadElement[1]) and $preElement == $includeHeadElement[1]) $outline .= '
      '; - if($preElement == $includeHeadElement[0]) $outline .= ''; - - /* Add the anchor to the element. */ - $content[$index] = str_replace('<' . $includeHeadElement[0] . $headElement[2] . '>', '<' . $includeHeadElement[0] . $headElement[2] . " id='anchor{$index}'" . '>', $content[$index]); - $outline .= '
    • ' . html::a('#anchor' . $index, strip_tags($headElement[3]), '', "title='" . strip_tags($headElement[3]) . "'"); - - $preElement = $headElement[1]; + $outline .= str_repeat('
      • ', $currentLevel - $preLevel); } - elseif(array_search($headElement[1], $includeHeadElement) == 1) + elseif($currentLevel < $preLevel) { - if($preElement == '') $outline .= '
        • '; - if($preElement == $includeHeadElement[0]) $outline .= '
            '; - - /* Add the anchor to the element. */ - $content[$index] = str_replace('<' . $includeHeadElement[1] . $headElement[2] . '>', '<' . $includeHeadElement[1] . $headElement[2] . " id='anchor{$index}'" . '>', $content[$index]); - $outline .= '
          • ' . html::a('#anchor' . $index, strip_tags($headElement[3]), '', "title='" . strip_tags($headElement[3]) . "'") . '
          • '; - - $preElement = $includeHeadElement[1]; + $outline .= str_repeat('
          ', $preLevel - $currentLevel) . '
        • '; } + else + { + $outline .= '
        • '; + } + + /* Add the anchor to the element. */ + $content[$index] = str_replace('<' . $headElement[1] . $headElement[2] . '>', '<' . $headElement[1] . $headElement[2] . " id='anchor{$index}'" . '>', $content[$index]); + $outline .= html::a('#anchor' . $index, strip_tags($headElement[3]), '', "title='" . strip_tags($headElement[3]) . "'"); + + $preElement = $headElement[1]; + $preLevel = $currentLevel; } - if(isset($includeHeadElement[1]) and $preElement == $includeHeadElement[1] and !isset($content[$index + 1])) $outline .= '
      • '; } - $outline .= '
      '; + $outline .= str_repeat('
    ', $preLevel) . ''; $doc->content = implode("\n", $content); @@ -1474,7 +1471,7 @@ class doc extends control if($this->config->vision == 'lite') unset($spaceList['api'], $spaceList['product'], $typeList['api']); $products = $this->loadModel('product')->getPairs(); - $projects = $this->project->getPairsByProgram('', 'all', false, 'order_asc', 'kanban'); + $projects = $this->project->getPairsByProgram('', 'all', false, 'order_asc'); $this->view->spaceList = $spaceList; $this->view->typeList = $typeList; diff --git a/module/doc/css/common.css b/module/doc/css/common.css index d4e7888ef1..cca66b6161 100644 --- a/module/doc/css/common.css +++ b/module/doc/css/common.css @@ -107,7 +107,7 @@ ol, ul {margin-bottom: 0} #subHeader .list-group>a.selected {color: #e9f2fb !important;} #pageNav #dropMenu .table-col .list-group .icon-move {display:block; float: left; font-size: 12px; padding: 3px 4px 3px 1px;} -#content .detail-content.article-content {overflow-y: auto; height: calc(100vh - 200px); padding-right: 20px;} +#content .detail-content.article-content {overflow-y: auto; padding-right: 20px;} #content.scrollbar-hover .detail-content.article-content {height: 100%;} #aclBox .acl-tip {color: #838a9d;} #outlineMenu {background: #fff; position: absolute; height: calc(100vh - 180px)!important; overflow-y: auto; top: 50px; right: 25px;} diff --git a/module/doc/css/view.css b/module/doc/css/view.css index dcfb4601c8..ec32c34aa3 100644 --- a/module/doc/css/view.css +++ b/module/doc/css/view.css @@ -14,7 +14,7 @@ .main-col .doc-title .actions i {font-size: 15px; color: #8c8c8c;} .main-col .doc-title .actions a > span {color: #9EA3B0;} -#content .title {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +#content .title {overflow: hidden; text-overflow: clip; white-space: nowrap;} #mainContent .scrollbar-hover {max-height: 2000px; overflow: scroll;} #content .editor-preview {background: #fff} #content .CodeMirror{border: none} @@ -112,7 +112,7 @@ .user-time .icon-star {font-size: 12px; line-height: 1.8;} .user-time .icon-star:before {vertical-align: top;} .btn-limit {position: relative;} -.btn-group {display: flex; align-items: center;} +#main .btn-group {display: flex; align-items: center;} #exchangeDiffBtn {font-size: 24px;} .exchangeDiffGroup .right-dom {display: none;} .exchangeDiffGroup.show-diff .right-dom {display: unset;} @@ -120,3 +120,5 @@ .tree li>.list-toggle {top: 5px; left: -4px;} .flex-left {display: inline-flex; flex: auto} .history-btn:focus {background-color: rgba(255,255,255,.8)} + +#actionbox {margin-left: 30px;} diff --git a/module/doc/js/view.js b/module/doc/js/view.js index 7fa8214a6f..faa0f0db7f 100644 --- a/module/doc/js/view.js +++ b/module/doc/js/view.js @@ -14,6 +14,19 @@ $(function() location.reload(); } }) + + $('#mainContent').on('mouseover', 'li.file', function() + { + $(this).children('span.right-icon').removeClass("hidden"); + $(this).addClass('backgroundColor'); + }); + + $('#mainContent').on('mouseout', 'li.file', function() + { + $(this).children('span.right-icon').addClass("hidden"); + $(this).removeClass('backgroundColor'); + }); + }) /** @@ -46,7 +59,7 @@ function ajaxDeleteDoc(link, replaceID, notice) function deleteFile(fileID) { if(!fileID) return; - hiddenwin.location.href = createLink('file', 'delete', 'fileID=' + fileID); + hiddenwin.location.href = createLink('doc', 'deleteFile', 'docID=' + docID + '&fileID=' + fileID); } /** @@ -95,7 +108,6 @@ function fullScreen() } $('.main-col iframe').css('min-height', $(window).height() + 'px'); - adjustPageTitleWidth(); } /** @@ -113,20 +125,6 @@ function exitFullScreen() $('#content .detail').eq(1).removeClass('hidden'); $('.main-col iframe').css('min-height', '380px'); $.cookie('isFullScreen', 0); - adjustPageTitleWidth(); -} - -/** - * Adjust title width. - * - * @access public - * @return void - */ -function adjustPageTitleWidth() -{ - var $titleContent = $('.detail-title.doc-title'); - var titleWidth = $titleContent.width() - $titleContent.find('.info').width() - $titleContent.find('.actions').width() - $titleContent.find('#editorBox').width(); - $titleContent.find('.flex-left > .title').css('max-width', titleWidth + 'px'); } document.addEventListener('fullscreenchange', function (e) @@ -208,12 +206,10 @@ $(function() $icon.removeClass('text-primary'); $icon.addClass('history-btn'); } - adjustPageTitleWidth(); }).on('click', '#closeBtn', function() { $('#history').addClass('hidden'); $('#hisTrigger').removeClass('text-primary'); - adjustPageTitleWidth(); }); $('#outline li.has-list').addClass('open in'); @@ -229,7 +225,8 @@ $(function() /* Update doc content silently on switch doc version, story #40503 */ $(document).on('click', '.doc-version-menu a, #mainActions .container a', function(event) { - var $tmpDiv = $('
    '); + var $tmpDiv = $('
    '); + var $versionLink = $(this); $tmpDiv.load($(this).data('url') + ' #mainContent', function() { $('#content').html($tmpDiv.find('#content').html()); @@ -267,7 +264,12 @@ $(function() } $('#docExport').attr('href', createLink('doc', exportMethod, 'libID=' + libID + '&moduleID=0&docID=' + docID + '&version=' + $('#content .doc-title .version').data('version'))); if($('.files-list').length) $('#content .detail-content.article-content').css('height', 'calc(100vh - 300px)'); - adjustPageTitleWidth(); + + if($versionLink.data('version') != latestVersion) + { + $("a[id^=renameFile]").addClass('hidden'); + $('ul.files-list .icon.icon-trash').parent().addClass('hidden'); + } }); }) @@ -281,5 +283,8 @@ $(function() $('#outlineMenu').css('display', 'none'); $('.outline-toggle').css('display', 'none'); } - adjustPageTitleWidth(); + + var $titleContent = $('.detail-title.doc-title') + $titleContent.find('.flex-left').css('max-width', 'calc(100% - ' + (180 + $titleContent.find('#editorBox').width()) + 'px)'); + $titleContent.find('.flex-left .title').css('max-width', 'calc(100% - ' + $titleContent.find('.info').width() + 'px)'); }) diff --git a/module/doc/model.php b/module/doc/model.php index d13b199d5f..ff22a35710 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -422,6 +422,7 @@ class docModel extends model $docIDList = $this->dao->select('objectID')->from(TABLE_ACTION) ->where('objectType')->eq('doc') ->andWhere('objectID')->in($hasPrivDocIdList) + ->andWhere('templateType')->eq('') ->andWhere('actor')->eq($this->app->user->account) ->andWhere('action')->eq('edited') ->fetchAll('objectID'); @@ -430,6 +431,7 @@ class docModel extends model ->where('t1.deleted')->eq(0) ->andWhere($query) ->andWhere('t1.lib')->in($allLibIDList) + ->andWhere('t1.templateType')->eq('') ->andWhere('t1.vision')->in($this->config->vision) ->beginIF($this->config->doc->notArticleType)->andWhere('t1.type')->notIN($this->config->doc->notArticleType)->fi() ->andWhere('t1.addedBy', 1)->eq($this->app->user->account) @@ -449,6 +451,7 @@ class docModel extends model ->beginIF($this->config->doc->notArticleType)->andWhere('t1.type')->notIN($this->config->doc->notArticleType)->fi() ->andWhere('t1.addedBy')->eq($this->app->user->account) ->andWhere('t1.vision')->in($this->config->vision) + ->andWhere('t1.templateType')->eq('') ->orderBy($sort) ->page($pager) ->fetchAll('id'); @@ -468,6 +471,7 @@ class docModel extends model ->andWhere('t1.id')->in(array_keys($docIdList)) ->andWhere('t1.lib')->ne('') ->andWhere('t1.vision')->in($this->config->vision) + ->andWhere('t1.templateType')->eq('') ->beginIF($this->config->doc->notArticleType)->andWhere('t1.type')->notIN($this->config->doc->notArticleType)->fi() ->orderBy($sort) ->page($pager) @@ -478,6 +482,7 @@ class docModel extends model $docs = $this->dao->select('*')->from(TABLE_DOC) ->where('deleted')->eq(0) ->andWhere('id')->in($hasPrivDocIdList) + ->andWhere('templateType')->eq('') ->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi() ->andWhere('lib')->in($allLibIDList) ->andWhere('vision')->in($this->config->vision) @@ -491,6 +496,7 @@ class docModel extends model ->leftJoin(TABLE_DOCACTION)->alias('t2')->on("t1.id=t2.doc && t2.action='collect'") ->where('t1.deleted')->eq(0) ->andWhere('t1.lib')->ne('') + ->andWhere('t1.templateType')->eq('') ->andWhere('t1.id')->in($hasPrivDocIdList) ->beginIF($this->config->doc->notArticleType)->andWhere('t1.type')->notIN($this->config->doc->notArticleType)->fi() ->andWhere('t2.actor')->eq($this->app->user->account) @@ -619,6 +625,7 @@ class docModel extends model $docs = $this->dao->select('*')->from(TABLE_DOC) ->where('deleted')->eq(0) ->andWhere('vision')->eq($this->config->vision) + ->andWhere('templateType')->eq('') ->andWhere('id')->in($docIdList) ->beginIF($browseType == 'all')->andWhere("(status = 'normal' or (status = 'draft' and addedBy='{$this->app->user->account}'))")->fi() ->beginIF($browseType == 'draft')->andWhere('status')->eq('draft')->andWhere('addedBy')->eq($this->app->user->account)->fi() @@ -746,6 +753,7 @@ class docModel extends model $modules = $module && $mode == 'children' ? $this->loadModel('tree')->getAllChildID($module) : $module; $stmt = $this->dao->select('*')->from(TABLE_DOC) ->where('vision')->eq($this->config->vision) + ->andWhere('templateType')->eq('') ->beginIF(!empty($modules))->andWhere('module')->in($modules)->fi() ->beginIF($mode == 'normal')->andWhere('deleted')->eq(0)->fi() ->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi() @@ -820,10 +828,11 @@ class docModel extends model $this->dao->update(TABLE_DOC)->set('version')->eq($doc->version)->where('id')->eq($doc->id)->exec(); } - $doc->title = isset($docContent->title) ? $docContent->title : ''; - $doc->digest = isset($docContent->digest) ? $docContent->digest : ''; - $doc->content = isset($docContent->content) ? $docContent->content : ''; - $doc->contentType = isset($docContent->type) ? $docContent->type : ''; + $doc->title = isset($docContent->title) ? $docContent->title : ''; + $doc->digest = isset($docContent->digest) ? $docContent->digest : ''; + $doc->content = isset($docContent->content) ? $docContent->content : ''; + $doc->contentType = isset($docContent->type) ? $docContent->type : ''; + $doc->contentVersion = isset($docContent->version) ? $docContent->version : $version; if($doc->type != 'url' and $doc->contentType != 'markdown') $doc = $this->loadModel('file')->replaceImgURL($doc, 'content,draft'); if($setImgSize) $doc->content = $this->file->setImgSize($doc->content); @@ -959,6 +968,7 @@ class docModel extends model ->setDefault('mailto', '') ->add('editedBy', $account) ->add('editedDate', $now) + ->setIF(strpos(",$oldDoc->editedList,", ",$account,") === false, 'editedList', $oldDoc->editedList . ",$account") ->cleanInt('project,product,execution,lib,module') ->join('groups', ',') ->join('users', ',') @@ -2188,7 +2198,7 @@ class docModel extends model ->andWhere('type')->in('text,word,ppt,excel,url,article') ->andWhere('vision')->eq($this->config->vision) ->fetch('count'); - $statistic->todayEditedDocs = $this->dao->select('count(DISTINCT objectID) as count')->from(TABLE_ACTION)->alias('t1') + $statistic->todayEditedDocs = $this->dao->select('count(DISTINCT objectID) as count')->from(TABLE_ACTIONRECENT)->alias('t1') ->leftJoin(TABLE_DOC)->alias('t2')->on("t1.objectID=t2.id and t1.objectType='doc'") ->where('t1.objectType')->eq('doc') ->andWhere('t1.action')->eq('edited') @@ -2198,15 +2208,11 @@ class docModel extends model ->andWhere('t2.deleted')->eq(0) ->andWhere('t2.type')->in('text,word,ppt,excel,url,article') ->fetch('count'); - $statistic->myEditedDocs = $this->dao->select('count(DISTINCT t1.objectID) as count')->from(TABLE_ACTION)->alias('t1') - ->leftJoin(TABLE_DOC)->alias('t2')->on("t1.objectID=t2.id and t1.objectType='doc'") - ->where('t1.objectType')->eq('doc') - ->andWhere('t1.action')->eq('edited') - ->andWhere('t1.actor')->eq($this->app->user->account) - ->andWhere('t1.vision')->eq($this->config->vision) - ->andWhere('t2.lib')->ne('') - ->andWhere('t2.deleted')->eq(0) - ->andWhere('t2.type')->in('text,word,ppt,excel,url,article') + $statistic->myEditedDocs = $this->dao->select('count(*) as count')->from(TABLE_DOC) + ->where("CONCAT(',', editedList, ',')")->like("%,{$this->app->user->account},%") + ->andWhere('lib')->ne('') + ->andWhere('deleted')->eq(0) + ->andWhere('type')->in('text,word,ppt,excel,url,article') ->fetch('count'); $my = $this->dao->select("count(*) as myDocs, SUM(views) as docViews, SUM(collects) as docCollects")->from(TABLE_DOC) @@ -3448,11 +3454,11 @@ class docModel extends model /** * Get document dynamic. * - * @param object $pager + * @param int $limit * @access public * @return array */ - public function getDynamic($pager = null) + public function getDynamic($limit = 30) { $allLibs = $this->getLibs('hasApi'); $hasPrivDocIdList = $this->getPrivDocs('', 0, 'all'); @@ -3470,7 +3476,7 @@ class docModel extends model ->andWhere('objectID')->in(array_keys($apiList)) ->markRight(2) ->orderBy('date_desc') - ->page($pager) + ->limit($limit) ->fetchAll(); return $this->loadModel('action')->transformActions($actions); diff --git a/module/doc/view/content.html.php b/module/doc/view/content.html.php index 633f88321b..51bc822efd 100644 --- a/module/doc/view/content.html.php +++ b/module/doc/view/content.html.php @@ -1,4 +1,5 @@ doc->confirmDelete);?> +version);?>
    @@ -29,7 +30,7 @@
  • @@ -184,7 +185,7 @@ echo html::a($downloadLink, "", '', "class='btn-icon' style='margin-right: 10px;' title=\"{$lang->doc->download}\""); } ?> - ", '', "class='btn-icon' title=\"{$lang->doc->deleteFile}\" onclick='deleteFile($file->id)'");?> + version == $doc->contentVersion) echo html::a('###', "", '', "class='btn-icon' title=\"{$lang->doc->deleteFile}\" onclick='deleteFile($file->id)'");?>
    files[$file->id]);?> diff --git a/module/doc/view/edittexttype.html.php b/module/doc/view/edittexttype.html.php index c5d67acc03..8e9968a89a 100644 --- a/module/doc/view/edittexttype.html.php +++ b/module/doc/view/edittexttype.html.php @@ -149,4 +149,5 @@ $(function() draft);?> error->notempty, $lang->doc->title));?> + diff --git a/module/doc/view/view.html.php b/module/doc/view/view.html.php index 9b1d0e516d..2ab6725b58 100644 --- a/module/doc/view/view.html.php +++ b/module/doc/view/view.html.php @@ -12,6 +12,7 @@ ?> + diff --git a/module/editor/control.php b/module/editor/control.php index 54c6fc4bf1..b93f5d42e8 100644 --- a/module/editor/control.php +++ b/module/editor/control.php @@ -75,6 +75,8 @@ class editor extends control if($filePath) { $filePath = helper::safe64Decode($filePath); + $filePath = realpath($filePath); + if(strpos(strtolower($filePath), strtolower($this->app->getBasePath())) !== 0) return print($this->lang->editor->editFileError); if($action == 'extendOther' and file_exists($filePath)) $this->view->showContent = file_get_contents($filePath); diff --git a/module/execution/config.php b/module/execution/config.php index ff060de7f4..6432650c26 100644 --- a/module/execution/config.php +++ b/module/execution/config.php @@ -186,9 +186,8 @@ else } $config->execution->datatable->fieldList['id']['title'] = 'idAB'; +$config->execution->datatable->fieldList['id']['type'] = 'checkID'; $config->execution->datatable->fieldList['id']['fixed'] = 'left'; -$config->execution->datatable->fieldList['id']['width'] = '70'; -$config->execution->datatable->fieldList['id']['required'] = 'yes'; $config->execution->datatable->fieldList['id']['sortType'] = true; $config->execution->datatable->fieldList['id']['checkbox'] = true; @@ -205,15 +204,15 @@ $config->execution->datatable->fieldList['name']['required'] = 'yes'; if(isset($config->setCode) and $config->setCode == 1) { $config->execution->datatable->fieldList['code']['title'] = 'execCode'; - $config->execution->datatable->fieldList['code']['width'] = '180'; + $config->execution->datatable->fieldList['code']['type'] = 'text'; + $config->execution->datatable->fieldList['code']['width'] = 180; $config->execution->datatable->fieldList['code']['fixed'] = 'left'; $config->execution->datatable->fieldList['code']['required'] = 'no'; } $config->execution->datatable->fieldList['project']['title'] = 'project'; $config->execution->datatable->fieldList['project']['width'] = '220'; -$config->execution->datatable->fieldList['project']['flex'] = 1; -$config->execution->datatable->fieldList['project']['fixed'] = 'no'; +$config->execution->datatable->fieldList['project']['fixed'] = 'right'; $config->execution->datatable->fieldList['project']['required'] = 'no'; $config->execution->datatable->fieldList['project']['sortType'] = true; @@ -221,71 +220,71 @@ $config->execution->datatable->fieldList['status']['title'] = 'execStatus'; $config->execution->datatable->fieldList['status']['type'] = 'status'; $config->execution->datatable->fieldList['status']['sortType'] = 'true'; $config->execution->datatable->fieldList['status']['width'] = '100'; +$config->execution->datatable->fieldList['status']['fixed'] = 'right'; $config->execution->datatable->fieldList['status']['required'] = 'no'; -$config->execution->datatable->fieldList['status']['fixed'] = 'no'; $config->execution->datatable->fieldList['PM']['title'] = 'owner'; $config->execution->datatable->fieldList['PM']['width'] = '90'; +$config->execution->datatable->fieldList['PM']['fixed'] = 'right'; $config->execution->datatable->fieldList['PM']['required'] = 'no'; -$config->execution->datatable->fieldList['PM']['fixed'] = 'no'; $config->execution->datatable->fieldList['openedDate']['title'] = 'openedDate'; $config->execution->datatable->fieldList['openedDate']['width'] = '85'; $config->execution->datatable->fieldList['openedDate']['sortType'] = 'true'; +$config->execution->datatable->fieldList['openedDate']['fixed'] = 'right'; $config->execution->datatable->fieldList['openedDate']['required'] = 'no'; -$config->execution->datatable->fieldList['openedDate']['fixed'] = 'no'; $config->execution->datatable->fieldList['begin']['title'] = 'begin'; $config->execution->datatable->fieldList['begin']['width'] = '100'; $config->execution->datatable->fieldList['begin']['sortType'] = 'true'; +$config->execution->datatable->fieldList['begin']['fixed'] = 'right'; $config->execution->datatable->fieldList['begin']['required'] = 'no'; -$config->execution->datatable->fieldList['begin']['fixed'] = 'no'; $config->execution->datatable->fieldList['end']['title'] = 'end'; $config->execution->datatable->fieldList['end']['width'] = '90'; +$config->execution->datatable->fieldList['end']['fixed'] = 'right'; $config->execution->datatable->fieldList['end']['required'] = 'no'; $config->execution->datatable->fieldList['end']['sortType'] = 'true'; -$config->execution->datatable->fieldList['end']['fixed'] = 'no'; $config->execution->datatable->fieldList['realBegan']['title'] = 'realBegan'; $config->execution->datatable->fieldList['realBegan']['width'] = '100'; +$config->execution->datatable->fieldList['realBegan']['fixed'] = 'right'; $config->execution->datatable->fieldList['realBegan']['required'] = 'no'; $config->execution->datatable->fieldList['realBegan']['sortType'] = 'true'; -$config->execution->datatable->fieldList['realBegan']['fixed'] = 'no'; $config->execution->datatable->fieldList['realEnd']['title'] = 'realEnd'; $config->execution->datatable->fieldList['realEnd']['width'] = '100'; +$config->execution->datatable->fieldList['realEnd']['fixed'] = 'right'; $config->execution->datatable->fieldList['realEnd']['required'] = 'no'; $config->execution->datatable->fieldList['realEnd']['sortType'] = 'true'; -$config->execution->datatable->fieldList['realEnd']['fixed'] = 'no'; $config->execution->datatable->fieldList['estimate']['title'] = 'estimate'; $config->execution->datatable->fieldList['estimate']['width'] = '70'; +$config->execution->datatable->fieldList['estimate']['fixed'] = 'right'; $config->execution->datatable->fieldList['estimate']['required'] = 'no'; $config->execution->datatable->fieldList['estimate']['sort'] = 'no'; -$config->execution->datatable->fieldList['estimate']['fixed'] = 'no'; $config->execution->datatable->fieldList['consumed']['title'] = 'consumed'; $config->execution->datatable->fieldList['consumed']['width'] = '75'; +$config->execution->datatable->fieldList['consumed']['fixed'] = 'right'; $config->execution->datatable->fieldList['consumed']['required'] = 'no'; $config->execution->datatable->fieldList['consumed']['sort'] = 'no'; -$config->execution->datatable->fieldList['consumed']['fixed'] = 'no'; $config->execution->datatable->fieldList['left']['title'] = 'left'; $config->execution->datatable->fieldList['left']['width'] = '70'; +$config->execution->datatable->fieldList['left']['fixed'] = 'right'; $config->execution->datatable->fieldList['left']['required'] = 'no'; $config->execution->datatable->fieldList['left']['sort'] = 'no'; -$config->execution->datatable->fieldList['left']['fixed'] = 'no'; $config->execution->datatable->fieldList['progress']['title'] = 'progress'; $config->execution->datatable->fieldList['progress']['type'] = 'circleProgress'; $config->execution->datatable->fieldList['progress']['width'] = '70'; +$config->execution->datatable->fieldList['progress']['fixed'] = 'right'; $config->execution->datatable->fieldList['progress']['required'] = 'no'; $config->execution->datatable->fieldList['progress']['sort'] = 'no'; -$config->execution->datatable->fieldList['progress']['fixed'] = 'no'; $config->execution->datatable->fieldList['burn']['title'] = 'burn'; $config->execution->datatable->fieldList['burn']['width'] = '80'; +$config->execution->datatable->fieldList['burn']['fixed'] = 'right'; $config->execution->datatable->fieldList['burn']['required'] = 'no'; $config->execution->datatable->fieldList['burn']['sort'] = 'no'; -$config->execution->datatable->fieldList['burn']['fixed'] = 'no'; diff --git a/module/execution/control.php b/module/execution/control.php index 9f2a50eb37..979cf14e39 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -216,12 +216,6 @@ class execution extends control /* Display of branch label. */ $showBranch = $this->loadModel('branch')->showBranch($productID, $moduleID, $executionID); - /* Build the search form. */ - $actionURL = $this->createLink('execution', 'task', "executionID=$executionID&status=bySearch¶m=myQueryID"); - $this->config->execution->search['onMenuBar'] = 'yes'; - if(!$execution->multiple) unset($this->config->execution->search['fields']['execution']); - $this->execution->buildTaskSearchForm($executionID, $this->executions, $queryID, $actionURL); - /* team member pairs. */ $memberPairs = array(); foreach($this->view->teamMembers as $key => $member) $memberPairs[$key] = $member->realname; @@ -232,6 +226,13 @@ class execution extends control $showModule = !empty($this->config->datatable->executionTask->showModule) ? $this->config->datatable->executionTask->showModule : ''; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($executionID, 'task', $showModule) : array(); + /* Build the search form. */ + $modules = $this->tree->getTaskOptionMenu($executionID, 0, 0, $showAllModule ? 'allModule' : ''); + $actionURL = $this->createLink('execution', 'task', "executionID=$executionID&status=bySearch¶m=myQueryID"); + $this->config->execution->search['onMenuBar'] = 'yes'; + if(!$execution->multiple) unset($this->config->execution->search['fields']['execution']); + $this->execution->buildTaskSearchForm($executionID, $this->executions, $queryID, $actionURL, $modules); + /* Assign. */ $this->view->tasks = $tasks; $this->view->allTasks = $allTasks; @@ -249,7 +250,7 @@ class execution extends control $this->view->execution = $execution; $this->view->productID = $productID; $this->view->product = $product; - $this->view->modules = $this->tree->getTaskOptionMenu($executionID, 0, 0, $showAllModule ? 'allModule' : ''); + $this->view->modules = $modules; $this->view->moduleID = $moduleID; $this->view->moduleTree = $this->tree->getTaskTreeMenu($executionID, $productID, $startModuleID = 0, array('treeModel', 'createTaskLink'), $extra); $this->view->memberPairs = $memberPairs; @@ -837,7 +838,7 @@ class execution extends control if($this->app->getViewType() == 'xhtml') $recPerPage = 10; $pager = new pager($recTotal, $recPerPage, $pageID); - $stories = $this->story->getExecutionStories($executionID, 0, 0, $sort, $type, $param, $storyType, '', $pager); + $stories = $this->story->getExecutionStories($executionID, 0, 0, $sort, $type, $param, $storyType, '', '', $pager); $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', false); @@ -2590,23 +2591,17 @@ class execution extends control $chartData = $this->execution->buildBurnData($executionID, $dateList, $type, 'left', $executionEnd); } - /* Load pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager(0, 30, 1); - $this->executeHooks($executionID); if(!$execution->projectInfo->hasProduct) $this->lang->execution->PO = $this->lang->common->story . $this->lang->execution->owner; $this->view->title = $this->lang->execution->view; - $this->view->position[] = html::a($this->createLink('execution', 'browse', "executionID=$executionID"), $execution->name); - $this->view->position[] = $this->view->title; $this->view->execution = $execution; $this->view->products = $products; $this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products), '', $linkedBranches); $this->view->planGroups = $this->execution->getPlans($products); $this->view->actions = $this->loadModel('action')->getList($this->objectType, $executionID); - $this->view->dynamics = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', $pager, 'all', 'all', $executionID); + $this->view->dynamics = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', 30, 'all', 'all', $executionID); $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->teamMembers = $this->execution->getTeamMembers($executionID); $this->view->docLibs = $this->loadModel('doc')->getLibsByObject('execution', $executionID); @@ -3723,10 +3718,6 @@ class execution extends control /* Set the menu. If the executionID = 0, use the indexMenu instead. */ $this->execution->setMenu($executionID); - /* Set the pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager($recTotal, $recPerPage = 50, $pageID = 1); - /* Set the user and type. */ $account = 'all'; if($type == 'account') @@ -3734,30 +3725,27 @@ class execution extends control $user = $this->loadModel('user')->getById((int)$param, 'id'); if($user) $account = $user->account; } - $period = $type == 'account' ? 'all' : $type; - $date = empty($date) ? '' : date('Y-m-d', $date); - $actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, $pager, 'all', 'all', $executionID, $date, $direction); - if(empty($recTotal)) $recTotal = count($actions); + $period = $type == 'account' ? 'all' : $type; + $date = empty($date) ? '' : date('Y-m-d', $date); + $actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, 50, 'all', 'all', $executionID, $date, $direction); + $dateGroups = $this->action->buildDateGroup($actions, $direction, $type); + + if(empty($recTotal)) $recTotal = count($dateGroups) < 2 ? count($actions) : $this->action->getDynamicCount(); - /* The header and position. */ $execution = $this->execution->getByID($executionID); - $this->view->title = $execution->name . $this->lang->colon . $this->lang->execution->dynamic; - $this->view->position[] = html::a($this->createLink('execution', 'browse', "executionID=$executionID"), $execution->name); - $this->view->position[] = $this->lang->execution->dynamic; - - $this->view->userIdPairs = $this->loadModel('user')->getTeamMemberPairs($executionID, 'execution', 'nodeleted|useid'); - $this->view->accountPairs = $this->loadModel('user')->getPairs('noletter|nodeleted'); /* Assign. */ - $this->view->executionID = $executionID; - $this->view->type = $type; - $this->view->orderBy = $orderBy; - $this->view->pager = $pager; - $this->view->account = $account; - $this->view->param = $param; - $this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $type); - $this->view->direction = $direction; - $this->view->recTotal = $recTotal; + $this->view->title = $execution->name . $this->lang->colon . $this->lang->execution->dynamic; + $this->view->userIdPairs = $this->loadModel('user')->getTeamMemberPairs($executionID, 'execution', 'nodeleted|useid'); + $this->view->accountPairs = $this->loadModel('user')->getPairs('noletter|nodeleted'); + $this->view->executionID = $executionID; + $this->view->type = $type; + $this->view->orderBy = $orderBy; + $this->view->account = $account; + $this->view->param = $param; + $this->view->dateGroups = $dateGroups; + $this->view->direction = $direction; + $this->view->recTotal = $recTotal; $this->display(); } @@ -3839,16 +3827,20 @@ class execution extends control * @param string $module * @param string $method * @param mixed $extra + * @param mixed $type * @access public * @return void */ - public function ajaxGetDropMenu($executionID, $module, $method, $extra) + public function ajaxGetDropMenu($executionID, $module, $method, $extra, $type = '') { + $onlyClosed = $type == 'closed'; + $this->view->link = $this->execution->getLink($module, $method, $extra); $this->view->module = $module; $this->view->method = $method; $this->view->executionID = $executionID; $this->view->extra = $extra; + $this->view->onlyClosed = $onlyClosed; $cacheProjectsKey = $this->config->cacheKeys->execution->ajaxGetDropMenuProjects; $cacheExecutionsKey = $this->config->cacheKeys->execution->ajaxGetDropMenuExecutions; @@ -3868,14 +3860,32 @@ class execution extends control } $projects = $this->loadModel('program')->getProjectList(0, 'all', 0, 'order_asc', null, 0, 0, true); - $executionGroups = $this->dao->select('*')->from(TABLE_EXECUTION) + + $executions = $this->dao->select('id,parent,project,grade,status,name,type,PM,path')->from(TABLE_EXECUTION) ->where('deleted')->eq(0) ->andWhere('multiple')->eq('1') ->andWhere('type')->in('sprint,stage,kanban') ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi() + ->beginIF($onlyClosed) + ->andWhere('status') + ->in('done,closed')->fi() + ->beginIF(!$onlyClosed) + ->andWhere('status') + ->notin('done,closed')->fi() ->andWhere('project')->in(array_keys($projects)) ->orderBy('order_asc') - ->fetchGroup('project', 'id'); + ->fetchAll('id'); + + $executionGroups = array(); + $childExecutions = array(); + foreach($executions as $executionID => $execution) + { + if(!isset($executionGroups[$execution->project])) $executionGroups[$execution->project] = array(); + $executionGroups[$execution->project][$executionID] = $execution; + + if(!isset($childExecutions[$execution->parent])) $childExecutions[$execution->parent] = array(); + $childExecutions[$execution->parent][$executionID] = $execution; + } $teams = $this->dao->select('root,account')->from(TABLE_TEAM) ->where('root')->in($this->app->user->view->sprints) @@ -3897,7 +3907,7 @@ class execution extends control if($execution->grade == 1) $firstGradeExecs[$execution->id] = $execution->id; } - $executions = $this->execution->resetExecutionSorts($executions, $firstGradeExecs); + $executions = $this->execution->resetExecutionSorts($executions, $firstGradeExecs, $childExecutions); foreach($executions as $execution) { /* Only show leaf executions. */ @@ -3927,6 +3937,7 @@ class execution extends control $this->view->projects = $projectPairs; $this->view->projectExecutions = $projectExecutions; + $this->view->namePinyinList = common::convert2Pinyin($nameList); $this->display(); } diff --git a/module/execution/css/all.css b/module/execution/css/all.css index 81bb4a7bde..7ddb6d1502 100755 --- a/module/execution/css/all.css +++ b/module/execution/css/all.css @@ -1,12 +1,12 @@ #main {padding-bottom: 0;} -#myTable .dtable-header, #executionsForm .dtable-rows {z-index: 4;} +#dtable .dtable-header, #executionsForm .dtable-rows {z-index: 4;} .table-header.fixed-right > .btn-toolbar {right: 0; background-color: #f1f5f9;} -#myTable input[type=checkbox] {margin: 0px} +#dtable input[type=checkbox] {margin: 0px} .table-footer {border-top: 1px solid #fff4ea} .table-footer .pager{z-index: 10} -#myTable .scrollbar {z-index: 11} +#dtable .scrollbar {z-index: 11} .dtable {--dtable-checked-bg: #fff4ea; --dtable-border-color: #f4f5f7} .dtable-row {border-bottom-style: solid;} diff --git a/module/execution/css/task.css b/module/execution/css/task.css index e077d455af..3c7e6f31e3 100644 --- a/module/execution/css/task.css +++ b/module/execution/css/task.css @@ -1,13 +1,24 @@ -#int-dropdown {margin-left: -8px; border-radius: 4px; border: 1px solid #0c64eb;} -#projectTaskForm table tbody tr td {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} -.table td.c-estimate, .table td.c-consumed, .table td.c-left {padding-right: 12px;} -.c-estimate {text-align: right;} -.c-consumed {text-align: right;} -.c-deadline {text-align: center;} -.c-left {text-align: right;} -.table-footer {z-index: 1;} -.btn-toolbar > .btn {margin-right: 5px !important;} -#taskList .c-progress{padding-right: 8px; text-align: right;} -#datatable-taskList .c-progress{padding-right: 8px; text-align: right;} -.c-finishedBy, .c-lastEditedBy {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} -#executionTaskForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;} \ No newline at end of file +body {margin-bottom: 25px; overflow: hidden;} +.btn-group a.btn-primary {border-right: 1px solid rgba(255,255,255,0.2);} +.btn-group button.dropdown-toggle.btn-primary {padding:6px;} + +#main {padding-bottom: 0;} +#heading {display: flex;} +#dtable .dtable-header, #executionTaskForm .dtable-rows {z-index: 4;} +.table-header.fixed-right > .btn-toolbar {right: 0; background-color: #f1f5f9;} + +#dtable input[type=checkbox] {margin: 0px} + +.table-footer {border-top: 1px solid #fff4ea; padding-left: 12px;} +.table-footer .pager{z-index: 10} +#dtable .scrollbar, .table-header.fixed-right {z-index: 11} + +.dtable {--dtable-checked-bg: #fff4ea; --dtable-border-color: #f4f5f7} +.dtable-row {border-bottom-style: solid;} +.dtable-cell-html a{color: #2463c7} +.dtable-cell[data-sort='up'] .dtable-sort:before {color: #000; opacity: 1} +.dtable-cell[data-sort='down'] .dtable-sort:after {color: #000; opacity: 1} +.dtable .toggle-icon {border-radius: 50%; border-style: solid;} +.dtable-nested-toggle.is-no-child, .dtable-nested-indent, .dtable-cell-html .icon-angle-double-right {display: none;} + +.dtable-row.is-normal .dtable-cell[data-col="name"] {padding-left: 20px;} diff --git a/module/execution/js/kanban.js b/module/execution/js/kanban.js index 13228c26c6..dfde98533f 100644 --- a/module/execution/js/kanban.js +++ b/module/execution/js/kanban.js @@ -1385,13 +1385,9 @@ function handleSortCards(event) if(window.sortableDisabled || groupBy != 'default' || rdSearchValue != '') return; var newLaneID = event.element.closest('.kanban-lane').data('id'); var newColID = event.element.closest('.kanban-col').data('id'); - var cards = event.element.closest('.kanban-lane-items').data('cards'); - var orders = cards.map(function(card){return card.id}); - var fromID = String(event.element.data('id')); - var toID = String(event.target.data('id')); - - orders.splice(orders.indexOf(fromID), 1); - orders.splice(orders.indexOf(toID) + (event.insert === 'before' ? 0 : 1), 0, fromID); + var cards = event.element.closest('.kanban-lane-items').find('.kanban-item'); + var orders = []; + cards.each(function(){orders.push($(this).data('id'))}); var url = createLink('kanban', 'sortCard', 'kanbanID=' + executionID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(',')); $.getJSON(url, function(response) diff --git a/module/execution/js/task.js b/module/execution/js/task.js index 8a8d1f948f..d540303dc2 100644 --- a/module/execution/js/task.js +++ b/module/execution/js/task.js @@ -1,19 +1,6 @@ $(function() { - if($('#taskList thead th.c-name').width() < 150) $('#taskList thead th.c-name').width(150); - $('#taskList td.has-child .task-toggle').each(function() - { - var $td = $(this).closest('td'); - var labelWidth = 0; - if($td.find('.label').length > 0) labelWidth = $td.find('.label').width(); - $td.find('a').eq(0).css('max-width', $td.width() - labelWidth - 60); - }); - - toggleFold('#executionTaskForm', unfoldTasks, executionID, 'execution'); - adjustTableFooter(); - $('body').on('click', '#toggleFold', adjustTableFooter); - $('body').on('click', '.icon.icon-angle-right', adjustTableFooter); /* The display of the adjusting sidebarHeader is synchronized with the sidebar. */ $(".sidebar-toggle").click(function() @@ -21,6 +8,31 @@ $(function() $("#sidebarHeader").toggle("fast"); }); if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide(); + + $('.table-footer .check-all').on('click', function() + { + var $dtable = zui.DTable.query('#taskList').$; + if($(this).hasClass('checked')) + { + $(this).removeClass('checked'); + $('.has-checkbox').click().removeClass('is-checked'); + $('.dtable-checkbox').removeClass('checked'); + $dtable.toggleCheckRows(false); + } + else + { + $(this).addClass('checked'); + $('.has-checkbox').click().addClass('is-checked'); + $('.dtable-checkbox').addClass('checked'); + $dtable.toggleCheckRows(true); + } + + setStatistics(); + }) + + $('#executionTaskForm').on('click', '[data-form-action]', function() { + $('#executionTaskForm').attr('action', $(this).data('formAction')).submit(); + }); }); $('#module' + moduleID).closest('li').addClass('active'); @@ -42,28 +54,90 @@ function adjustTableFooter() } } -/** - * Ajax refresh. - * - * @access public - * @return void - */ -function ajaxRefresh() +function createSortLink(col) { - var $table = $('#executionTaskForm').closest('[data-ride="table"]'); - if($table.length) - { - var table = $table.data('zui.table'); - if(table) - { - table.options.replaceId = 'executionTaskForm'; - table.reload(); - } - } - $.get(location.href, function(data) - { - var $data = $(data); - $('#mainMenu > div.btn-toolbar.pull-left').html($data.find('#mainMenu > div.btn-toolbar.pull-left').html()); - if($data.find('#mainContent .main-col .table-empty-tip').length) $('#mainContent .main-col').html($data.find('#mainContent .main-col')); - }); + var sort = col.name + '_asc'; + if(sort == orderBy) sort = col.name + '_desc'; + return sortLink.replace('{orderBy}', sort); } + +function setStatistics() +{ + $('input[name^=taskIDList]').remove(); + + var element = zui.DTable.query('#taskList').$; + var checkedIDList = element.getChecks(); + if(checkedIDList.length > 0) + { + $('.table-footer .table-actions').show(); + } + else + { + $('.table-footer .table-actions').hide(); + } + + if(checkedIDList.length == 0) return $('.table-statistic').html(pageSummary); + + let totalLeft = 0; + let totalEstimate = 0; + let totalConsumed = 0; + + let waitCount = 0; + let doingCount = 0; + let totalCount = 0; + $.each(checkedIDList, function(index, id) + { + if(element.getRowInfo(id) == undefined) return true; + + const task = element.getRowInfo(id).data; + + totalEstimate += Number(task.estimateNum); + totalConsumed += Number(task.consumedNum); + if(task.statusCode != 'cancel' && task.statusCode != 'closed') totalLeft += Number(task.leftNum); + + if(task.statusCode == 'wait') + { + waitCount ++; + } + else if(task.statusCode == 'doing') + { + doingCount ++; + } + + totalCount ++; + + $('#executionTaskForm').append(''); + }) + + $('.table-statistic').html(checkedSummary.replace('%total%', totalCount) + .replace('%wait%', waitCount) + .replace('%doing%', doingCount) + .replace('%estimate%', totalEstimate.toFixed(1)) + .replace('%consumed%', totalConsumed.toFixed(1)) + .replace('%left%', totalLeft.toFixed(1)) + ); +} + +cols = JSON.parse(cols); +data = JSON.parse(data); +const options = +{ + striped: true, + plugins: ['nested', 'checkable'], + checkOnClickRow: true, + sortLink: createSortLink, + cols: cols, + data: data, + footer: false, + responsive: true, + onCheckChange: setStatistics, + height: function(height) + { + return Math.min($(window).height() - $('#header').outerHeight() - $('#mainMenu').outerHeight() - $('.table-footer').outerHeight() - 30, height); + }, + checkInfo: function(checkedIDList) + { + return setStatistics(this, checkedIDList); + } +}; +$('#taskList').dtable(options); diff --git a/module/execution/js/taskkanban.js b/module/execution/js/taskkanban.js index 144f326a2f..6cfe206475 100644 --- a/module/execution/js/taskkanban.js +++ b/module/execution/js/taskkanban.js @@ -487,7 +487,8 @@ function createKanban(kanbanID, data, options) var $kanban = $('#kanban-' + kanbanID); if($kanban.length) return updateKanban(kanbanID, data); - $kanban = $('
    ').appendTo('#kanbans'); + $kanban = $('
    '); + $('#kanbans').append($kanban); $kanban.kanban($.extend({data: data, calcColHeight: calcColHeight, displayCards: typeof window.displayCards === 'number' ? window.displayCards : 2}, options)); } @@ -1173,13 +1174,9 @@ function handleSortCards(event) if(groupBy != 'default' || searchValue != '') return; var newLaneID = event.element.closest('.kanban-lane').data('id'); var newColID = event.element.closest('.kanban-col').data('id'); - var cards = event.element.closest('.kanban-lane-items').data('cards'); - var orders = cards.map(function(card){return card.id}); - var fromID = String(event.element.data('id')); - var toID = String(event.target.data('id')); - - orders.splice(orders.indexOf(fromID), 1); - orders.splice(orders.indexOf(toID) + (event.insert === 'before' ? 0 : 1), 0, fromID); + var cards = event.element.closest('.kanban-lane-items').find('.kanban-item'); + var orders = []; + cards.each(function(){orders.push($(this).data('id'))}); var url = createLink('kanban', 'sortCard', 'kanbanID=' + executionID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(',')); $.getJSON(url, function(response) diff --git a/module/execution/model.php b/module/execution/model.php index 0ef664f61f..6908d2076a 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -130,9 +130,11 @@ class executionModel extends model if(!$this->app->user->admin and strpos(",{$this->app->user->view->sprints},", ",$executionID,") === false and !defined('TUTORIAL') and $executionID != 0) return print(js::error($this->lang->execution->accessDenied) . js::locate('back')); - $executions = $this->getPairs(0, 'all', 'nocode'); + $executions = $this->fetchPairs($execution->project, 'all'); if(!$executionID and $this->session->execution) $executionID = $this->session->execution; - if(!$executionID or !in_array($executionID, array_keys($executions))) $executionID = key($executions); + if(!$executionID) $executionID = key($executions); + if($execution->multiple and !isset($executions[$executionID])) $executionID = key($executions); + if($execution->multiple and $executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied(); $this->session->set('execution', $executionID, $this->app->tab); if($execution and $execution->type == 'stage') @@ -157,8 +159,6 @@ class executionModel extends model if(!$features['other']) unset($this->lang->execution->menu->other); if(!$features['story'] and $this->config->edition == 'open') unset($this->lang->execution->menu->view); - if($executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied(); - $moduleName = $this->app->getModuleName(); $methodName = $this->app->getMethodName(); @@ -178,8 +178,8 @@ class executionModel extends model if(isset($this->lang->execution->menu->storyGroup)) unset($this->lang->execution->menu->storyGroup); if(isset($this->lang->execution->menu->story['dropMenu']) and $methodName == 'storykanban') { - unset($this->lang->execution->menu->story['dropMenu']); - $this->lang->execution->menu->story['link'] = str_replace(array($this->lang->common->story, 'story'), array($this->lang->SRCommon, 'storykanban'), $this->lang->execution->menu->story['link']); + $this->lang->execution->menu->story['link'] = str_replace(array($this->lang->common->story, 'story'), array($this->lang->SRCommon, 'storykanban'), $this->lang->execution->menu->story['link']); + $this->lang->execution->menu->story['dropMenu']->story = str_replace('execution|story', 'execution|storykanban', $this->lang->execution->menu->story['dropMenu']->story); } } @@ -219,7 +219,7 @@ class executionModel extends model $currentExecutionName = ''; if(isset($currentExecution->name)) $currentExecutionName = $currentExecution->name; - $output = "
    - - + diff --git a/module/extension/view/erase.html.php b/module/extension/view/erase.html.php index baf8a7b89c..b84185ceb8 100644 --- a/module/extension/view/erase.html.php +++ b/module/extension/view/erase.html.php @@ -33,5 +33,12 @@
    - - + diff --git a/module/extension/view/uninstall.html.php b/module/extension/view/uninstall.html.php index f9ea8fc0ca..847ff8f498 100644 --- a/module/extension/view/uninstall.html.php +++ b/module/extension/view/uninstall.html.php @@ -36,7 +36,7 @@
    " . $lang->extension->uninstallFailed . ""; + echo "

    " . $lang->extension->uninstallFailed . "

    "; echo "

    $error

    "; ?>
    @@ -60,5 +60,12 @@
    - - + diff --git a/module/extension/view/upload.html.php b/module/extension/view/upload.html.php index 6bea5a911d..a3fbf6f384 100644 --- a/module/extension/view/upload.html.php +++ b/module/extension/view/upload.html.php @@ -36,3 +36,12 @@ + diff --git a/module/file/control.php b/module/file/control.php index ffded35d40..1c206247ca 100755 --- a/module/file/control.php +++ b/module/file/control.php @@ -109,6 +109,19 @@ class file extends control return $this->send(array('status' => 'error', 'message' => $this->lang->file->uploadImagesExplain)); } + /** + * Preview a file. + * + * @param int $fileID + * @param string $mouse + * @access public + * @return void + */ + public function preview($fileID, $mouse = '') + { + return print($this->fetch('file', 'download', "fileID=$fileID&mouse=$mouse")); + } + /** * Down a file. * @@ -487,7 +500,7 @@ class file extends control */ public function read($fileID) { - if(!$this->loadModel('user')->isLogon()) return print(js::locate($this->createLink('user', 'login'))); + if(!($this->app->company->guest and $this->app->user->account == 'guest') and !$this->loadModel('user')->isLogon()) return print(js::locate($this->createLink('user', 'login'))); $file = $this->file->getById($fileID); if(empty($file) or !$this->file->fileExists($file)) return false; diff --git a/module/file/lang/de.php b/module/file/lang/de.php index 7fd12bb4a7..8b0f3820d7 100755 --- a/module/file/lang/de.php +++ b/module/file/lang/de.php @@ -32,6 +32,7 @@ $lang->file->exportRange = "Datenbereich"; $lang->file->defaultTPL = "Standardvorlage"; $lang->file->setExportTPL = "Einstellungen"; $lang->file->preview = "Vorschau"; +$lang->file->previewFile = "Vorschau des Anhangs"; $lang->file->addFile = 'Hinzufügen'; $lang->file->beginUpload = 'Upload'; $lang->file->uploadSuccess = 'Hochgeladen!'; diff --git a/module/file/lang/en.php b/module/file/lang/en.php index 6e37d2f23b..c3aa59cb27 100755 --- a/module/file/lang/en.php +++ b/module/file/lang/en.php @@ -32,6 +32,7 @@ $lang->file->exportRange = "Data"; $lang->file->defaultTPL = "Default"; $lang->file->setExportTPL = "Settings"; $lang->file->preview = "Preview"; +$lang->file->previewFile = "Preview File"; $lang->file->addFile = 'Add'; $lang->file->beginUpload = 'Click to Upload'; $lang->file->uploadSuccess = 'Uploaded!'; diff --git a/module/file/lang/fr.php b/module/file/lang/fr.php index 6d80b97422..706179a526 100755 --- a/module/file/lang/fr.php +++ b/module/file/lang/fr.php @@ -32,6 +32,7 @@ $lang->file->exportRange = "Données"; $lang->file->defaultTPL = "Défaut"; $lang->file->setExportTPL = "Paramétrages"; $lang->file->preview = "Apperçu"; +$lang->file->previewFile = "aperçu de la pièce jointe"; $lang->file->addFile = 'Ajouter'; $lang->file->beginUpload = 'Clic pour Charger'; $lang->file->uploadSuccess = 'Chargé !'; diff --git a/module/file/lang/vi.php b/module/file/lang/vi.php index 41d38d115a..a36bee1dc4 100755 --- a/module/file/lang/vi.php +++ b/module/file/lang/vi.php @@ -28,6 +28,7 @@ $lang->file->exportRange = "Data"; $lang->file->defaultTPL = "Default"; $lang->file->setExportTPL = "Thiết lập"; $lang->file->preview = "Preview"; +$lang->file->previewFile = "xem trước tệp đính kèm"; $lang->file->addFile = 'Thêm'; $lang->file->beginUpload = 'Click to Upload'; $lang->file->uploadSuccess = 'Uploaded!'; diff --git a/module/file/lang/zh-cn.php b/module/file/lang/zh-cn.php index 161b4b1a7c..b9b3e55a80 100755 --- a/module/file/lang/zh-cn.php +++ b/module/file/lang/zh-cn.php @@ -32,6 +32,7 @@ $lang->file->exportRange = "要导出的数据"; $lang->file->defaultTPL = "默认模板"; $lang->file->setExportTPL = "设置"; $lang->file->preview = "预览"; +$lang->file->previewFile = "预览附件"; $lang->file->addFile = '添加文件'; $lang->file->beginUpload = '开始上传'; $lang->file->uploadSuccess = '上传成功'; diff --git a/module/file/view/viewfiles.html.php b/module/file/view/viewfiles.html.php index 4ebd743da8..be26583062 100644 --- a/module/file/view/viewfiles.html.php +++ b/module/file/view/viewfiles.html.php @@ -62,10 +62,11 @@ function deleteFile(fileID, obj) * @param int $extension * @param int $imageWidth * @param string $fileTitle + * @param string $type download|preview * @access public * @return void */ -function downloadFile(fileID, extension, imageWidth, fileTitle) +function downloadFile(fileID, extension, imageWidth, fileTitle, type = 'download') { if(!fileID) return; var fileTypes = 'txt,jpg,jpeg,gif,png,bmp'; @@ -73,7 +74,7 @@ function downloadFile(fileID, extension, imageWidth, fileTitle) var width = (windowWidth > imageWidth) ? ((imageWidth < windowWidth * 0.5) ? windowWidth * 0.5 : imageWidth) : windowWidth; var checkExtension = fileTitle.lastIndexOf('.' + extension) == (fileTitle.length - extension.length - 1); - var url = createLink('file', 'download', 'fileID=' + fileID + '&mouse=left'); + var url = createLink('file', type, 'fileID=' + fileID + '&mouse=left'); url += url.indexOf('?') >= 0 ? '&' : '?'; url += ''; @@ -148,7 +149,6 @@ function setFileName(fileID)
      - file->uploadDate . substr($file->addedDate, 0, 10); $fileTitle = "  " . $file->title; @@ -183,8 +183,9 @@ function setFileName(fileID) } $downloadLink = $this->createLink('file', 'download', "fileID=$file->id"); - $downloadLink .= strpos($downloadLink, '?') === false ? '?' : '&'; - $downloadLink .= $sessionString; + $previewLink = $this->createLink('file', 'preview', "fileID=$file->id"); + //$downloadLink .= strpos($downloadLink, '?') === false ? '?' : '&'; + //$downloadLink .= $sessionString; echo "
    • " . html::a($downloadLink, $fileTitle . " ({$fileSize})", '_blank', "id='fileTitle$file->id' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title')\""); $objectType = zget($this->config->file->objectType, $file->objectType); @@ -202,18 +203,18 @@ function setFileName(fileID) } /* For the open source version of the file judgment. */ - if(stripos('txt|jpg|jpeg|gif|png|bmp', $file->extension) !== false) + if(stripos('txt|jpg|jpeg|gif|png|bmp', $file->extension) !== false and common::hasPriv('file', 'preview')) { - echo html::a($downloadLink, "", '_blank', "class='fileAction btn btn-link text-primary' title='{$lang->file->preview}' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title')\""); + echo html::a($previewLink, "", '_blank', "class='fileAction btn btn-link text-primary' title='{$lang->file->preview}' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title', 'preview')\""); } /* For the max version of the file judgment. */ - if(isset($this->config->file->libreOfficeTurnon) and $this->config->file->libreOfficeTurnon == 1) + if(isset($this->config->file->libreOfficeTurnon) and $this->config->file->libreOfficeTurnon == 1 and !($this->config->file->convertType == 'collabora' and $this->config->requestType == 'GET') and common::hasPriv('file', 'preview')) { $officeTypes = 'doc|docx|xls|xlsx|ppt|pptx|pdf'; if(stripos($officeTypes, $file->extension) !== false) { - echo html::a($downloadLink, "", '_blank', "class='fileAction btn btn-link text-primary' title='{$lang->file->preview}' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title')\""); + echo html::a($previewLink, "", '_blank', "class='fileAction btn btn-link text-primary' title='{$lang->file->preview}' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title', 'preview')\""); } } @@ -255,7 +256,6 @@ function setFileName(fileID)
    • -
    diff --git a/module/gitea/control.php b/module/gitea/control.php index c64d8d8c1e..b456373cf3 100644 --- a/module/gitea/control.php +++ b/module/gitea/control.php @@ -245,6 +245,7 @@ class gitea extends control $this->view->recTotal = count($userList); $this->view->userList = $userList; $this->view->userPairs = $userPairs; + $this->view->zentaoUsers = $zentaoUsers; $this->display(); } diff --git a/module/gitea/js/binduser.js b/module/gitea/js/binduser.js new file mode 100644 index 0000000000..014d06eeb1 --- /dev/null +++ b/module/gitea/js/binduser.js @@ -0,0 +1,24 @@ +$(document).ready(function() +{ + $('.gitlab-user-bind').change(function() + { + var user = zentaoUsers[$(this).val()]; + if(user !== undefined) + { + $(this).parent().parent().find('.email').text(user.email) + } + }); + + $(document).on('click', '.zentao-users .chosen-container', function() + { + var $obj = $(this).prev('select'); + var value = $obj.val(); + if($obj.hasClass('filled')) return false; + + $obj.empty(); + $obj.append($('#userList').html()); + $obj.val(value); + $obj.addClass('filled'); + $obj.trigger("chosen:updated"); + }) +}); diff --git a/module/gitea/lang/de.php b/module/gitea/lang/de.php index e73cc56f5a..e7484dabc0 100644 --- a/module/gitea/lang/de.php +++ b/module/gitea/lang/de.php @@ -13,6 +13,7 @@ $lang->gitea->giteaAccount = 'Gitea Account'; $lang->gitea->giteaEmail = 'Email'; $lang->gitea->zentaoAccount = 'Zentao Account'; $lang->gitea->bindingStatus = 'Binding Status'; +$lang->gitea->all = 'All'; $lang->gitea->notBind = 'Not bind'; $lang->gitea->binded = 'Binded'; $lang->gitea->bindDynamic = '%s and Zentao user %s'; diff --git a/module/gitea/lang/en.php b/module/gitea/lang/en.php index 667b7c82b5..046590c667 100644 --- a/module/gitea/lang/en.php +++ b/module/gitea/lang/en.php @@ -13,6 +13,7 @@ $lang->gitea->giteaAccount = 'Gitea Account'; $lang->gitea->giteaEmail = 'Email'; $lang->gitea->zentaoAccount = 'Zentao Account'; $lang->gitea->bindingStatus = 'Binding Status'; +$lang->gitea->all = 'All'; $lang->gitea->notBind = 'Not bind'; $lang->gitea->binded = 'Binded'; $lang->gitea->bindDynamic = '%s and Zentao user %s'; diff --git a/module/gitea/lang/fr.php b/module/gitea/lang/fr.php index e73cc56f5a..e7484dabc0 100644 --- a/module/gitea/lang/fr.php +++ b/module/gitea/lang/fr.php @@ -13,6 +13,7 @@ $lang->gitea->giteaAccount = 'Gitea Account'; $lang->gitea->giteaEmail = 'Email'; $lang->gitea->zentaoAccount = 'Zentao Account'; $lang->gitea->bindingStatus = 'Binding Status'; +$lang->gitea->all = 'All'; $lang->gitea->notBind = 'Not bind'; $lang->gitea->binded = 'Binded'; $lang->gitea->bindDynamic = '%s and Zentao user %s'; diff --git a/module/gitea/lang/zh-cn.php b/module/gitea/lang/zh-cn.php index f160a3e110..144da40f6c 100644 --- a/module/gitea/lang/zh-cn.php +++ b/module/gitea/lang/zh-cn.php @@ -13,6 +13,7 @@ $lang->gitea->giteaAccount = 'Gitea用户'; $lang->gitea->giteaEmail = '邮箱'; $lang->gitea->zentaoAccount = '禅道用户'; $lang->gitea->bindingStatus = '绑定状态'; +$lang->gitea->all = '全部'; $lang->gitea->notBind = '未绑定'; $lang->gitea->binded = '已绑定'; $lang->gitea->bindDynamic = '%s与禅道用户%s'; diff --git a/module/gitea/view/binduser.html.php b/module/gitea/view/binduser.html.php index faddecc316..ec2af2764f 100644 --- a/module/gitea/view/binduser.html.php +++ b/module/gitea/view/binduser.html.php @@ -11,60 +11,66 @@ */ ?> +createLink('gitea', 'browse', ""); ?> +
    -
    -

    gitea->bindUser;?>

    +
    + ' . $lang->goback, $browseLink, 'self', "data-app='{$app->tab}'", 'btn btn-secondary'); + + $allLink = $this->createLink('gitea', 'binduser', "giteaID={$giteaID}&type=all"); + $bindedLink = $this->createLink('gitea', 'binduser', "giteaID={$giteaID}&type=binded"); + $notBindLink = $this->createLink('gitea', 'binduser', "giteaID={$giteaID}&type=notBind"); + if($type == 'all') + { + echo html::linkButton('' . $lang->gitea->all . "" . count($giteaUsers) . "", $allLink, 'self', "data-app='{$app->tab}'", 'btn btn-info active'); + echo html::linkButton('' . $lang->gitea->notBind, $notBindLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gitea->binded, $bindedLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + } + else if($type == 'binded') + { + echo html::linkButton('' . $lang->gitea->all, $allLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gitea->notBind, $notBindLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gitea->binded . "" . count($giteaUsers) . "", $bindedLink, 'self', "data-app='{$app->tab}'", 'btn btn-info active'); + } + else + { + echo html::linkButton('' . $lang->gitea->all, $allLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gitea->notBind . "" . count($giteaUsers) . "", $notBindLink, 'self', "data-app='{$app->tab}'", 'btn btn-info active'); + echo html::linkButton('' . $lang->gitea->binded, $bindedLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + } + ?>
    -
    ' + browser + ' datatable->showAllModuleList, isset($config->execution->task->allModule) ? $config->execution->task->allModule : 0);?>
    datatable->showBranch;?> datatable->showBranchList, isset($config->$currentModule->$currentMethod->showBranch) ? $config->$currentModule->$currentMethod->showBranch : 1);?>
    " + fieldName + "
    " + tdValue + "
    +
    - - + + - zentaoAccount)) continue;?> - account]", $giteaUser->realname);?> + id]", $giteaUser->realname);?> - - - - - - - - zentaoAccount)) continue;?> - account]", $giteaUser->realname);?> - - + + - - - @@ -82,4 +88,12 @@ + diff --git a/module/gitlab/control.php b/module/gitlab/control.php index d86f31e4b2..4c7ffe9a23 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -745,6 +745,7 @@ class gitlab extends control if(!$project->adminer and isset($project->owner) and $project->owner->id == $openID) $project->adminer = true; $project->isMaintainer = $this->gitlab->checkUserAccess($gitlabID, $project->id, $project, $groupIDList, 'maintainer'); + $project->isDeveloper = $this->gitlab->checkUserAccess($gitlabID, $project->id, $project, $groupIDList, 'developer'); } $gitlab = $this->gitlab->getByID($gitlabID); diff --git a/module/gitlab/js/binduser.js b/module/gitlab/js/binduser.js index a4b6cc07c2..014d06eeb1 100644 --- a/module/gitlab/js/binduser.js +++ b/module/gitlab/js/binduser.js @@ -8,4 +8,17 @@ $(document).ready(function() $(this).parent().parent().find('.email').text(user.email) } }); -}); \ No newline at end of file + + $(document).on('click', '.zentao-users .chosen-container', function() + { + var $obj = $(this).prev('select'); + var value = $obj.val(); + if($obj.hasClass('filled')) return false; + + $obj.empty(); + $obj.append($('#userList').html()); + $obj.val(value); + $obj.addClass('filled'); + $obj.trigger("chosen:updated"); + }) +}); diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 09c21884d8..a762bd173e 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -196,9 +196,9 @@ class gitlabModel extends model { foreach($zentaoUsers as $zentaoUser) { - if($gitlabUser->account == $zentaoUser->account) $matches->accounts[$gitlabUser->account][] = $zentaoUser->account; - if($gitlabUser->realname == $zentaoUser->realname) $matches->names[$gitlabUser->realname][] = $zentaoUser->account; - if($gitlabUser->email == $zentaoUser->email) $matches->emails[$gitlabUser->email][] = $zentaoUser->account; + if($gitlabUser->email == $zentaoUser->email) $matches->emails[$gitlabUser->email][] = $zentaoUser->account; + if($gitlabUser->account == $zentaoUser->account) $matches->accounts[$gitlabUser->account][] = $zentaoUser->account; + if($gitlabUser->realname == $zentaoUser->realname) $matches->names[$gitlabUser->realname][] = $zentaoUser->account; } } @@ -219,9 +219,9 @@ class gitlabModel extends model } $matchedZentaoUsers = array(); + if(isset($matches->emails[$gitlabUser->email])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->emails[$gitlabUser->email]); + if(isset($matches->names[$gitlabUser->realname])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->names[$gitlabUser->realname]); if(isset($matches->accounts[$gitlabUser->account])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->accounts[$gitlabUser->account]); - if(isset($matches->emails[$gitlabUser->email])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->emails[$gitlabUser->email]); - if(isset($matches->names[$gitlabUser->realname])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->names[$gitlabUser->realname]); $matchedZentaoUsers = array_unique($matchedZentaoUsers); if(count($matchedZentaoUsers) == 1) diff --git a/module/gitlab/view/binduser.html.php b/module/gitlab/view/binduser.html.php index 8c89ec2f27..7392eb109d 100644 --- a/module/gitlab/view/binduser.html.php +++ b/module/gitlab/view/binduser.html.php @@ -15,7 +15,7 @@
    - ' . $lang->goback, $browseLink, 'self', "data-app='{$app->tab}'", 'btn btn-secondary'); $allLink = $this->createLink('gitlab', 'binduser', "gitlabID={$gitlabID}&type=all"); @@ -55,7 +55,6 @@
    - zentaoAccount)) continue;?> id]", $gitlabUser->realname);?> - - - - - - - zentaoAccount)) continue;?> - id]", $gitlabUser->realname);?> - + + - - - - diff --git a/module/gogs/js/binduser.js b/module/gogs/js/binduser.js new file mode 100644 index 0000000000..014d06eeb1 --- /dev/null +++ b/module/gogs/js/binduser.js @@ -0,0 +1,24 @@ +$(document).ready(function() +{ + $('.gitlab-user-bind').change(function() + { + var user = zentaoUsers[$(this).val()]; + if(user !== undefined) + { + $(this).parent().parent().find('.email').text(user.email) + } + }); + + $(document).on('click', '.zentao-users .chosen-container', function() + { + var $obj = $(this).prev('select'); + var value = $obj.val(); + if($obj.hasClass('filled')) return false; + + $obj.empty(); + $obj.append($('#userList').html()); + $obj.val(value); + $obj.addClass('filled'); + $obj.trigger("chosen:updated"); + }) +}); diff --git a/module/gogs/lang/de.php b/module/gogs/lang/de.php index 622508020a..d25fc0e3e3 100644 --- a/module/gogs/lang/de.php +++ b/module/gogs/lang/de.php @@ -13,6 +13,7 @@ $lang->gogs->gogsAccount = 'Gogs Account'; $lang->gogs->gogsEmail = 'Email'; $lang->gogs->zentaoAccount = 'Zentao Account'; $lang->gogs->bindingStatus = 'Binding Status'; +$lang->gogs->all = 'All'; $lang->gogs->notBind = 'Not bind'; $lang->gogs->binded = 'Binded'; $lang->gogs->bindDynamic = '%s and Zentao user %s'; diff --git a/module/gogs/lang/en.php b/module/gogs/lang/en.php index b3b8fdf0bd..91616167a5 100644 --- a/module/gogs/lang/en.php +++ b/module/gogs/lang/en.php @@ -13,6 +13,7 @@ $lang->gogs->gogsAccount = 'Gogs Account'; $lang->gogs->gogsEmail = 'Email'; $lang->gogs->zentaoAccount = 'Zentao Account'; $lang->gogs->bindingStatus = 'Binding Status'; +$lang->gogs->all = 'All'; $lang->gogs->notBind = 'Not bind'; $lang->gogs->binded = 'Binded'; $lang->gogs->bindDynamic = '%s and Zentao user %s'; diff --git a/module/gogs/lang/fr.php b/module/gogs/lang/fr.php index 622508020a..d25fc0e3e3 100644 --- a/module/gogs/lang/fr.php +++ b/module/gogs/lang/fr.php @@ -13,6 +13,7 @@ $lang->gogs->gogsAccount = 'Gogs Account'; $lang->gogs->gogsEmail = 'Email'; $lang->gogs->zentaoAccount = 'Zentao Account'; $lang->gogs->bindingStatus = 'Binding Status'; +$lang->gogs->all = 'All'; $lang->gogs->notBind = 'Not bind'; $lang->gogs->binded = 'Binded'; $lang->gogs->bindDynamic = '%s and Zentao user %s'; diff --git a/module/gogs/lang/zh-cn.php b/module/gogs/lang/zh-cn.php index 5e4f35564f..9a3833e277 100644 --- a/module/gogs/lang/zh-cn.php +++ b/module/gogs/lang/zh-cn.php @@ -13,6 +13,7 @@ $lang->gogs->gogsAccount = 'Gogs用户'; $lang->gogs->gogsEmail = '邮箱'; $lang->gogs->zentaoAccount = '禅道用户'; $lang->gogs->bindingStatus = '绑定状态'; +$lang->gogs->all = '全部'; $lang->gogs->notBind = '未绑定'; $lang->gogs->binded = '已绑定'; $lang->gogs->bindDynamic = '%s与禅道用户%s'; diff --git a/module/gogs/view/binduser.html.php b/module/gogs/view/binduser.html.php index fe6468104e..150b03a53c 100644 --- a/module/gogs/view/binduser.html.php +++ b/module/gogs/view/binduser.html.php @@ -11,60 +11,66 @@ */ ?> +createLink('gogs', 'browse', ""); ?> +
    -
    -

    gogs->bindUser;?>

    +
    + ' . $lang->goback, $browseLink, 'self', "data-app='{$app->tab}'", 'btn btn-secondary'); + + $allLink = $this->createLink('gogs', 'binduser', "gogsID={$gogsID}&type=all"); + $bindedLink = $this->createLink('gogs', 'binduser', "gogsID={$gogsID}&type=binded"); + $notBindLink = $this->createLink('gogs', 'binduser', "gogsID={$gogsID}&type=notBind"); + if($type == 'all') + { + echo html::linkButton('' . $lang->gogs->all . "" . count($gogsUsers) . "", $allLink, 'self', "data-app='{$app->tab}'", 'btn btn-info active'); + echo html::linkButton('' . $lang->gogs->notBind, $notBindLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gogs->binded, $bindedLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + } + else if($type == 'binded') + { + echo html::linkButton('' . $lang->gogs->all, $allLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gogs->notBind, $notBindLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gogs->binded . "" . count($gogsUsers) . "", $bindedLink, 'self', "data-app='{$app->tab}'", 'btn btn-info active'); + } + else + { + echo html::linkButton('' . $lang->gogs->all, $allLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + echo html::linkButton('' . $lang->gogs->notBind . "" . count($gogsUsers) . "", $notBindLink, 'self', "data-app='{$app->tab}'", 'btn btn-info active'); + echo html::linkButton('' . $lang->gogs->binded, $bindedLink, 'self', "data-app='{$app->tab}'", 'btn btn-info'); + } + ?>
    -
    gitea->giteaAvatar;?> gitea->giteaAccount;?> gitea->giteaEmail;?>gitea->zentaoAccount;?>gitea->zentaoEmail;?>gitea->zentaoAccount;?> gitea->bindingStatus;?>
    avatar, "height=40");?> - realname;?> -
    - account;?> +
    + avatar, "height=20 width=20 class='img-circle'");?> + realname . '@' . $giteaUser->account;?> email;?>account]", $userPairs, '', "class='form-control select chosen'" );?>gitea->notBind;?>
    avatar, "height=40");?>id]", $giteaUser->zentaoUsers, $giteaUser->zentaoAccount, "class='form-control select chosen gitea-user-bind'" );?> - realname;?> -
    - account;?> -
    email;?>account]", $userPairs, $giteaUser->zentaoAccount, "class='form-control select chosen'" );?> - zentaoAccount])):?> - zentaoAccount, '');?> - + binded === 1):?> gitea->binded;?> - + binded === 2):?> ' . $lang->gitea->bindedError . '';?> - - gitea->notBind;?> + ' . $lang->gitea->notBind . '';?>
    @@ -63,30 +62,13 @@ realname . '@' . $gitlabUser->account;?> email;?>id]", $userPairs, '', "class='form-control select chosen gitlab-user-bind'" );?>' . $lang->gitlab->notBind . '';?>
    id]", $gitlabUser->zentaoUsers, $gitlabUser->zentaoAccount, "class='form-control select chosen gitlab-user-bind'" );?> - avatar, "height=20 width=20 class='img-circle'");?> - realname . '@' . $gitlabUser->account;?> - email;?>id]", $userPairs, $gitlabUser->zentaoAccount, "class='form-control select chosen gitlab-user-bind'" );?> - id, $bindedUsers)):?> - zentaoAccount, '');?> - + binded === 1):?> gitlab->binded;?> - + binded === 2):?> ' . $lang->gitlab->bindedError . '';?> - ' . $lang->gitlab->notBind . '';?> @@ -106,4 +88,12 @@ + diff --git a/module/gitlab/view/browseproject.html.php b/module/gitlab/view/browseproject.html.php index 9c6cb05416..60256177af 100644 --- a/module/gitlab/view/browseproject.html.php +++ b/module/gitlab/view/browseproject.html.php @@ -60,19 +60,20 @@ last_activity_at, 0, 10);?> id]) ? '' : 'disabled'; - $adminerClass = $gitlabProject->adminer ? '' : 'disabled'; - $maintainerClass = $gitlabProject->isMaintainer ? '' : 'disabled'; - $defaultBranchClass = $gitlabProject->adminer ? '' : 'disabled'; - echo common::printIcon('gitlab', 'browseBranch', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'treemap', '', $defaultBranchClass, false, '', $this->lang->gitlab->browseBranch); - echo common::printIcon('gitlab', 'browseTag', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag', '', $defaultBranchClass, false, '', $this->lang->gitlab->browseTag); - echo common::printIcon('gitlab', 'manageBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'branch-lock', '', $defaultBranchClass . ' ' . $maintainerClass, false, '', $this->lang->gitlab->browseBranchPriv); - echo common::printIcon('gitlab', 'manageTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag-lock', '', $defaultBranchClass . ' ' . $maintainerClass, false, '', $this->lang->gitlab->browseTagPriv); + $hasRepoClass = isset($repoPairs[$gitlabProject->id]) ? '' : 'disabled'; + $maintainerClass = $gitlabProject->isMaintainer ? '' : 'disabled'; + $developerClass = $gitlabProject->isDeveloper ? '' : 'disabled'; + + $defaultBranchClass = $gitlabProject->adminer || $gitlabProject->isMaintainer ? '' : 'disabled'; + echo common::printIcon('gitlab', 'browseBranch', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'treemap', '', $developerClass, false, '', $this->lang->gitlab->browseBranch); + echo common::printIcon('gitlab', 'browseTag', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag', '', $developerClass, false, '', $this->lang->gitlab->browseTag); + echo common::printIcon('gitlab', 'manageBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'branch-lock', '', $defaultBranchClass, false, '', $this->lang->gitlab->browseBranchPriv); + echo common::printIcon('gitlab', 'manageTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag-lock', '', $defaultBranchClass, false, '', $this->lang->gitlab->browseTagPriv); echo common::printIcon('gitlab', 'manageProjectMembers', 'repoID=' . zget($repoPairs, $gitlabProject->id), '', 'list', 'team', '', $hasRepoClass); echo common::printIcon('gitlab', 'createWebhook', 'repoID=' . zget($repoPairs, $gitlabProject->id), '', 'list', 'change', 'hiddenwin', $hasRepoClass); echo common::printIcon('gitlab', 'importIssue', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'link'); - echo common::printIcon('gitlab', 'editProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'edit', '', $adminerClass); - echo common::printIcon('gitlab', 'deleteProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'trash', 'hiddenwin', $adminerClass); + echo common::printIcon('gitlab', 'editProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'edit', '', $defaultBranchClass); + echo common::printIcon('gitlab', 'deleteProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'trash', 'hiddenwin', $defaultBranchClass); ?>
    +
    - - + + - zentaoAccount)) continue;?> - account]", $gogsUser->realname);?> + id]", $gogsUser->realname);?> - - - - - - - - zentaoAccount)) continue;?> - account]", $gogsUser->realname);?> - - + + - - - @@ -82,4 +88,12 @@ + diff --git a/module/group/control.php b/module/group/control.php index 6e67176ab6..c3fafad9a3 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -193,7 +193,10 @@ class group extends control /** * Manage privleges of a group. * - * @param int $groupID + * @param string $type byPackage|byGroup|byModule + * @param int $param + * @param string $menu + * @param string $version * @access public * @return void */ @@ -254,14 +257,14 @@ class group extends control $privList = $modules; $privMethods = array(); $selectPrivs = array(); - $selectedPrivIdList = array(); - $relatedIdList = array(); - $groupPrivsIdList = $this->group->getPrivsIdListByGroup($groupID); + $selectedPrivList = array(); + $relatedList = array(); + $groupPrivList = $this->group->getPrivListByGroup($groupID); foreach($privs as $priv) { if(!empty($version) and strpos($changelogs, ",{$priv->module}-{$priv->method},") === false) { - unset($groupPrivsIdList[$priv->id]); + unset($groupPrivList["{$priv->module}-{$priv->method}"]); continue; } @@ -280,10 +283,10 @@ class group extends control $selectPrivs[$priv->parentCode][$priv->parent] ++; if(isset($priv->id)) { - $selectedPrivIdList[$priv->id] = $priv->id; + $selectedPrivList["{$priv->module}-{$priv->method}"] = "{$priv->module}-{$priv->method}"; /* New permissions for secondary development are excluded. */ - if(is_numeric($priv->id)) $relatedIdList[$priv->id] = $priv->id; + if(is_numeric($priv->id)) $relatedList["{$priv->module}-{$priv->method}"] = "{$priv->module}-{$priv->method}"; } } } @@ -317,18 +320,18 @@ class group extends control } } - $excludePrivsIdList = array_diff(array_keys($groupPrivsIdList), $selectedPrivIdList); - $relatedPrivData = $this->group->getRelatedPrivs($relatedIdList, '', $excludePrivsIdList); + $excludePrivList = array_diff(array_keys($groupPrivList), $selectedPrivList); + $relatedPrivData = $this->group->getRelatedPrivs($relatedList, '', $excludePrivList); unset($privList['index']); - $this->view->privList = $privList; - $this->view->privMethods = $privMethods; - $this->view->selectPrivs = $selectPrivs; - $this->view->privPackages = $this->group->getPrivManagerPairs('package'); - $this->view->selectedPrivIdList = $selectedPrivIdList; - $this->view->relatedPrivData = $relatedPrivData; - $this->view->excludePrivsIdList = $excludePrivsIdList; + $this->view->privList = $privList; + $this->view->privMethods = $privMethods; + $this->view->selectPrivs = $selectPrivs; + $this->view->privPackages = $this->group->getPrivManagerPairs('package'); + $this->view->selectedPrivList = $selectedPrivList; + $this->view->relatedPrivData = $relatedPrivData; + $this->view->excludePrivList = $excludePrivList; } elseif($type == 'byModule') { @@ -1094,18 +1097,17 @@ class group extends control } /** - * AJAX: Get priv's dependent priv list. + * AJAX: Get priv's related priv list. * - * @param string $privIdList * @access public - * @return bool + * @return int */ public function ajaxGetRelatedPrivs() { - $privIdList = zget($_POST, 'privList'); - $recommedSelect = zget($_POST, 'recommedSelect'); - $excludeIdList = zget($_POST, 'excludeIdList'); - $privList = $this->group->getRelatedPrivs($privIdList, '', $excludeIdList, $recommedSelect); + $privList = zget($_POST, 'privList'); + $recommedSelect = zget($_POST, 'recommedSelect'); + $excludePrivList = zget($_POST, 'excludePrivList'); + $privList = $this->group->getRelatedPrivs($privList, '', $excludePrivList, $recommedSelect); return print(json_encode($privList)); } } diff --git a/module/group/js/managepriv.js b/module/group/js/managepriv.js index a68b434178..71bba978fa 100644 --- a/module/group/js/managepriv.js +++ b/module/group/js/managepriv.js @@ -179,10 +179,10 @@ function updatePrivTree(privList) privList = new Array(); $('tbody .group-item input:checked').each(function() { - var privID = $(this).closest('.group-item').attr('data-id'); - if($(this).closest('popover-content').length == 0 && privList.indexOf(privID) < 0) privList.push(privID); + var priv = $(this).attr('data-id'); + if($(this).closest('popover-content').length == 0 && privList.indexOf(priv) < 0) privList.push(priv); }); - selectedPrivIdList = privList; + selectedPrivList = privList; } $.ajax( @@ -190,7 +190,7 @@ function updatePrivTree(privList) url: createLink('group', 'ajaxGetRelatedPrivs'), dataType: 'json', method: 'post', - data: {"privList" : privList.toString(), "recommedSelect": recommedSelect.toString(), "excludeIdList": Object.values(excludeIdList).toString()}, + data: {"privList" : privList.toString(), "recommedSelect": recommedSelect.toString(), "excludePrivList": Object.values(excludePrivList).toString()}, success: function(data) { if(data.depend == undefined || data.depend.length == 0) @@ -318,15 +318,15 @@ function groupItemChange() var packageID = $(this).closest('.group-item').attr('data-package'); changeParentChecked($(this), moduleName, packageID); - var privID = $(this).closest('.group-item').attr('data-id'); - if(privID != 0) + var priv = $(this).attr('data-id'); + if(priv != '') { - var index = selectedPrivIdList.indexOf(privID); + var index = selectedPrivList.indexOf(priv); - if(privID > 0 && index < 0 && checked) selectedPrivIdList.push(privID); - if(privID > 0 && index > -1 && !checked) selectedPrivIdList.splice(index, 1); + if(priv && index < 0 && checked) selectedPrivList.push(priv); + if(priv && index > -1 && !checked) selectedPrivList.splice(index, 1); - updatePrivTree(selectedPrivIdList); + updatePrivTree(selectedPrivList); } } @@ -377,18 +377,18 @@ function recommendChange($item, checked) $parentItem.closest('.checkbox-primary').find('label').addClass('checkbox-indeterminate-block'); } - var privID = $item.attr('data-relationpriv'); - if(privID != 0) + var priv = $item.attr('data-module') + '-' + $item.attr('data-method'); + if(priv != '-') { - var index = selectedPrivIdList.indexOf(privID); + var index = selectedPrivList.indexOf(priv); - if(privID > 0 && index < 0 && checked) selectedPrivIdList.push(privID); - if(privID > 0 && index > -1 && !checked) selectedPrivIdList.splice(index, 1); + if(priv && index < 0 && checked) selectedPrivList.push(priv); + if(priv && index > -1 && !checked) selectedPrivList.splice(index, 1); - index = recommedSelect.indexOf(privID); + index = recommedSelect.indexOf(priv); - if(privID > 0 && index < 0 && checked) recommedSelect.push(privID); - if(privID > 0 && index > -1 && !checked) recommedSelect.splice(index, 1); + if(priv && index < 0 && checked) recommedSelect.push(priv); + if(priv && index > -1 && !checked) recommedSelect.splice(index, 1); } } @@ -411,7 +411,7 @@ $(function() positionBtn(); $('.main.main-content').resize(positionBtn); - selectedPrivIdList = Object.values(selectedPrivIdList); + selectedPrivList = Object.values(selectedPrivList); recommedSelect = new Array(); @@ -441,7 +441,7 @@ $(function() { recommendChange($(this), checked); } - updatePrivTree(selectedPrivIdList); + updatePrivTree(selectedPrivList); })); $('#privPackageList .package > .priv-toggle.icon').click(function() diff --git a/module/group/lang/changelog.php b/module/group/lang/changelog.php index afa2f340e6..8ec2609f11 100644 --- a/module/group/lang/changelog.php +++ b/module/group/lang/changelog.php @@ -688,3 +688,10 @@ $lang->changelog['18.4.alpha1'][] = 'chart-preview'; $lang->changelog['18.4.alpha1'][] = 'api-addCatalog'; $lang->changelog['18.4.alpha1'][] = 'api-editCatalog'; $lang->changelog['18.4.alpha1'][] = 'api-deleteCatalog'; + +$lang->changelog['18.7'][] = 'ai-models'; // TODO: change version to current version. +$lang->changelog['18.7'][] = 'ai-editmodel'; +$lang->changelog['18.7'][] = 'ai-testconnection'; +$lang->changelog['18.7'][] = 'ai-promptpublish'; +$lang->changelog['18.7'][] = 'ai-promptunpublish'; +$lang->changelog['18.7'][] = 'ai-promptexecute'; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 69116c7e3f..1a7736b4e9 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -1983,6 +1983,18 @@ $lang->resource->api->getModel = 'getModel'; $lang->resource->api->debug = 'debug'; $lang->resource->api->sql = 'sql'; +/* AI methods. */ +$lang->resource->ai = new stdclass(); +$lang->resource->ai->models = 'modelBrowse'; +$lang->resource->ai->editModel = 'modelEdit'; +$lang->resource->ai->testConnection = 'modelTestConnection'; +$lang->resource->ai->promptPublish = 'promptPublish'; +$lang->resource->ai->promptUnpublish = 'promptUnpublish'; +$lang->resource->ai->prompts = 'promptBrowse'; +$lang->resource->ai->promptView = 'promptView'; +$lang->resource->ai->promptExecute = 'promptExecute'; +$lang->resource->ai->promptExecutionReset = 'promptExecutionReset'; + $lang->api->methodOrder[0] = 'index'; $lang->api->methodOrder[5] = 'createLib'; $lang->api->methodOrder[10] = 'editLib'; @@ -2007,16 +2019,18 @@ $lang->api->methodOrder[100] = 'sql'; $lang->resource->file = new stdclass(); $lang->resource->file->download = 'download'; +$lang->resource->file->preview = 'preview'; $lang->resource->file->edit = 'edit'; $lang->resource->file->delete = 'delete'; $lang->resource->file->uploadImages = 'uploadImages'; $lang->resource->file->setPublic = 'setPublic'; $lang->file->methodOrder[5] = 'download'; -$lang->file->methodOrder[10] = 'edit'; -$lang->file->methodOrder[15] = 'delete'; -$lang->file->methodOrder[20] = 'uploadImages'; -$lang->file->methodOrder[25] = 'setPublic'; +$lang->file->methodOrder[10] = 'preview'; +$lang->file->methodOrder[15] = 'edit'; +$lang->file->methodOrder[20] = 'delete'; +$lang->file->methodOrder[25] = 'uploadImages'; +$lang->file->methodOrder[30] = 'setPublic'; $lang->resource->misc = new stdclass(); $lang->resource->misc->ping = 'ping'; diff --git a/module/group/model.php b/module/group/model.php index 5a92e21e34..379fdefc52 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -457,8 +457,11 @@ class groupModel extends model foreach($this->post->actions as $moduleName => $moduleActions) { if(empty($moduleName) or empty($moduleActions)) continue; - $privIdList = $this->dao->select('id')->from(TABLE_PRIV)->where('module')->eq($moduleName)->andWhere('method')->in($moduleActions)->fetchPairs(); - $relationPrivs = $this->getPrivRelationsByIdList($privIdList, 'depend', 'idGroup'); + + $privList = array(); + foreach($moduleActions as $actionName) $privList["{$moduleName}-{$actionName}"] = "{$moduleName}-{$actionName}"; + + $relationPrivs = $this->getPrivRelationsByIdList($privList, 'depend', 'idGroup'); $depentedPrivs = array_merge($depentedPrivs, array_keys(zget($relationPrivs, 'depend', array()))); foreach($moduleActions as $actionName) { @@ -469,33 +472,39 @@ class groupModel extends model $privs[] = $data; } } + $this->insertPrivs($privs); - $depentedPrivs = $this->getPrivByIdList($depentedPrivs); - foreach($depentedPrivs as $privID => $priv) + + foreach($depentedPrivs as $index => $priv) { - if(!empty($_POST['actions'][$priv->module]) and in_array($priv->method, $_POST['actions'][$priv->module])) + list($module, $method) = explode('-', $priv); + + if(!empty($_POST['actions'][$module]) and in_array($method, $_POST['actions'][$module])) { - unset($depentedPrivs[$privID]); + unset($depentedPrivs[$index]); continue; } $data = new stdclass(); $data->group = $groupID; - $data->module = $priv->module; - $data->method = $priv->method; + $data->module = $module; + $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); } - $recommendPrivs = $this->getPrivByIdList(zget($_POST, 'recommendPrivs', '0')); - foreach($recommendPrivs as $privID => $priv) + + $recommendPrivs = zget($_POST, 'recommendPrivs', array()); + foreach($recommendPrivs as $moduleMethod => $priv) { - if(in_array($priv->method, zget($_POST['actions'], $priv->module, array()))) + list($module, $method) = explode('-', $moduleMethod); + + if(in_array($method, zget($_POST['actions'], $module, array()))) { - unset($recommendPrivs[$privID]); + unset($recommendPrivs[$moduleMethod]); continue; } $data = new stdclass(); $data->group = $groupID; - $data->module = $priv->module; - $data->method = $priv->method; + $data->module = $module; + $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); } } @@ -1500,7 +1509,7 @@ class groupModel extends model /** * Super Model: Init views, modules and privileges for IPD. - * + * * @access public * @return bool */ @@ -1909,7 +1918,7 @@ class groupModel extends model public function getPrivRelation($priv, $type = '', $module = '') { $relations = $this->dao->select('t1.type,t2.*,t3.`key`,t3.value')->from(TABLE_PRIVRELATION)->alias('t1') - ->leftJoin(TABLE_PRIV)->alias('t2')->on('t1.relationPriv=t2.id') + ->leftJoin(TABLE_PRIV)->alias('t2')->on("t1.relationPriv=CONCAT(t2.module, '-', t2.method)") ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t2.id=t3.objectID') ->where('t1.priv')->eq($priv) ->andWhere('t2.edition')->like("%,{$this->config->edition},%") @@ -1936,7 +1945,7 @@ class groupModel extends model public function getPrivRelationsByIdList($privs, $type = '', $returnType = 'name') { $privs = $this->dao->select('t1.priv,t3.`key`,t3.value,t1.type,t1.relationPriv')->from(TABLE_PRIVRELATION)->alias('t1') - ->leftJoin(TABLE_PRIV)->alias('t2')->on('t1.relationPriv=t2.id') + ->leftJoin(TABLE_PRIV)->alias('t2')->on("t1.relationPriv=CONCAT(t2.module, '-', t2.method)") ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t2.id=t3.objectID') ->where('t1.priv')->in($privs) ->andWhere('t2.edition')->like("%,{$this->config->edition},%") @@ -2314,7 +2323,7 @@ class groupModel extends model */ public function getCustomPrivs($menu, $privs = array()) { - $allPrivs = $this->dao->select('module,method')->from(TABLE_PRIV)->fetchGroup('module', 'method'); + $allPrivs = $this->dao->select('module,method')->from(TABLE_PRIV)->where('edition')->like("%,{$this->config->edition},%")->andWhere('vision')->like("%,{$this->config->vision},%")->fetchGroup('module', 'method'); foreach($this->lang->resource as $module => $methods) { if(isset($this->lang->$module->menus) and (empty($menu) or $menu == 'general')) @@ -2365,25 +2374,25 @@ class groupModel extends model /** * Get related privs. * - * @param array $privIdList + * @param array $privList * @param string $type * @param array $excludePrivs * @param array $recommedSelect * @access public * @return array */ - public function getRelatedPrivs($privIdList, $type = '', $excludePrivs = array(), $recommedSelect = array()) + public function getRelatedPrivs($privList, $type = '', $excludePrivs = array(), $recommedSelect = array()) { $modulePairs = $this->getPrivManagerPairs('module'); $modules = array_keys($modulePairs); - $privs = $this->dao->select("t1.relationPriv,t1.type,t2.parent,t2.module,t2.method,t2.`order`,t3.`key`,t3.value, IF(t4.type = 'module', t4.code, t5.code) as parentCode")->from(TABLE_PRIVRELATION)->alias('t1') - ->leftJoin(TABLE_PRIV)->alias('t2')->on('t1.relationPriv=t2.id') - ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t1.relationPriv=t3.objectID') + $privs = $this->dao->select("t1.relationPriv,t1.type,t2.parent,t2.module,t2.method,t2.`order`,t3.`key`,t3.value, IF(t4.type = 'module', t4.code, t5.code) as parentCode,CONCAT(t2.module, '-', t2.method) as moduleMethod")->from(TABLE_PRIVRELATION)->alias('t1') + ->leftJoin(TABLE_PRIV)->alias('t2')->on("t1.relationPriv=CONCAT(t2.module, '-', t2.method)") + ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t2.id=t3.objectID') ->leftJoin(TABLE_PRIVMANAGER)->alias('t4')->on('t2.parent=t4.id') ->leftJoin(TABLE_PRIVMANAGER)->alias('t5')->on('t4.parent=t5.id') - ->where('t1.priv')->in($privIdList) + ->where('t1.priv')->in($privList) ->andWhere('t5.code')->in(array_keys($modulePairs)) - ->andWhere('(t1.relationPriv')->notin($privIdList) + ->andWhere('(t1.relationPriv')->notin($privList) ->beginIF(!empty($recommedSelect)) ->orWhere('(t1.relationPriv')->in($recommedSelect) @@ -2450,13 +2459,13 @@ class groupModel extends model } /** - * Get privs id list by group. + * Get privs list by group. * * @param int $groupID * @access public - * @return void + * @return array */ - public function getPrivsIdListByGroup($groupID) + public function getPrivListByGroup($groupID) { $modulePairs = $this->getPrivManagerPairs('module'); $modules = array_keys($modulePairs); @@ -2467,6 +2476,10 @@ class groupModel extends model ->andWhere('edition')->like("%,{$this->config->edition},%") ->andWhere('vision')->like("%,{$this->config->vision},%") ->fetchAll('id'); - return $privIdList; + + $privs = array(); + foreach($privIdList as $priv) $privs["{$priv->module}-{$priv->method}"] = "{$priv->module}-{$priv->method}"; + + return $privs; } } diff --git a/module/group/view/privbygroup.html.php b/module/group/view/privbygroup.html.php index cb460a78ea..37ae99bf65 100644 --- a/module/group/view/privbygroup.html.php +++ b/module/group/view/privbygroup.html.php @@ -129,7 +129,7 @@ ?> - +
    gogs->gogsAvatar;?> gogs->gogsAccount;?> gogs->gogsEmail;?>gogs->zentaoAccount;?>gogs->zentaoEmail;?>gogs->zentaoAccount;?> gogs->bindingStatus;?>
    avatar, "height=40");?> - realname;?> -
    - account;?> +
    + avatar, "height=20 width=20 class='img-circle'");?> + realname . '@' . $gogsUser->account;?> email;?>account]", $userPairs, '', "class='form-control select chosen'" );?>gogs->notBind;?>
    avatar, "height=40");?>id]", $gogsUser->zentaoUsers, $gogsUser->zentaoAccount, "class='form-control select chosen gogs-user-bind'" );?> - realname;?> -
    - account;?> -
    email;?>account]", $userPairs, $gogsUser->zentaoAccount, "class='form-control select chosen'" );?> - zentaoAccount])):?> - zentaoAccount, '');?> - + binded === 1):?> gogs->binded;?> - + binded === 2):?> ' . $lang->gogs->bindedError . '';?> - - gogs->notBind;?> + ' . $lang->gogs->notBind . '';?>
    + +
    @@ -299,4 +301,5 @@ var options = { } $('#planForm tbody.sortable').sortable(options); + diff --git a/module/programplan/view/gantt.html.php b/module/programplan/view/gantt.html.php index 2fd089e67c..f2c8f1da5d 100755 --- a/module/programplan/view/gantt.html.php +++ b/module/programplan/view/gantt.html.php @@ -85,6 +85,7 @@ form {display: block; margin-top: 0em; margin-block-end: 1em;} #mainContent > .pull-left > .btn-group > a > .text{overflow: hidden;display: block;} #mainContent > .pull-right > .button-group .text{margin-left: 0px;} .pull-right .icon-plus.icon-sm:before{vertical-align: 4%;} +#ganttView .gantt_resizer{min-width: unset !important;} createLink('programplan', 'ajaxCustom'));?> @@ -515,6 +516,10 @@ function validateResources(id) return false; } + task.begin = from; + task.deadline = (new Date(to.valueOf() - 1));; + + gantt.updateTask(task.id); var itemID; if(type == 'task') { @@ -613,8 +618,8 @@ $(function() gantt.config.columns.push({name:"custom", label:"", align: "left", width: 40, template: getSubmitBtn}); if(showFields.indexOf('PM') != -1) gantt.config.columns.push({name: 'owner_id', align: 'left', resize: true, width: 80, template: function(task){return getByIdForGantt(gantt.serverList('userList'), task.owner_id)}}) if(showFields.indexOf('status') != -1) gantt.config.columns.push({name: 'status', align: 'center', resize: true, width: 80}); - gantt.config.columns.push({name: 'start_date', align: 'center', resize: true, width: 80}); - if(showFields.indexOf('deadline') != -1) gantt.config.columns.push({name: 'end_date', align: 'center', resize: true, width: 140, template: getDeadlineBtn}); + gantt.config.columns.push({name: 'begin', align: 'center', resize: true, width: 80}); + if(showFields.indexOf('deadline') != -1) gantt.config.columns.push({name: 'deadline', align: 'center', resize: true, width: 140, template: getDeadlineBtn}); gantt.config.columns.push({name: 'duration', align: 'center', resize: true, width: 60}); if(showFields.indexOf('estimate') != -1) gantt.config.columns.push({name: 'estimate', align: 'center', resize: true, width: 60}); if(showFields.indexOf('progress') != -1) gantt.config.columns.push({name: 'percent', align: 'center', resize: true, width:70, template: function(plan){ if(plan.percent) return Math.round(plan.percent) + '%';}}); @@ -627,9 +632,9 @@ $(function() function getDeadlineBtn(task) { - var date = task.end_date; - if(task.type == 'point' && canEditDeadline && (!task.rawStatus || task.rawStatus == 'fail' || task.rawStatus == 'draft')) return "
    " + gridDateToStr(new Date(date.valueOf() - 1)) + ' programplan->edit;?>
    '; - return gridDateToStr(new Date(date.valueOf() - 1)); + var date = task.deadline; + if(task.type == 'point' && canEditDeadline && (!task.rawStatus || task.rawStatus == 'fail' || task.rawStatus == 'draft')) return "
    " + gridDateToStr(new Date(date.valueOf())) + ' programplan->edit;?>
    '; + return date; } function getSubmitBtn(task) @@ -664,7 +669,9 @@ $(function() gantt.locale.labels.column_status = "statusAB;?>"; gantt.locale.labels.column_percent = "programplan->percentAB;?>"; gantt.locale.labels.column_taskProgress = "programplan->taskProgress;?>"; + gantt.locale.labels.column_begin = "programplan->begin;?>"; gantt.locale.labels.column_start_date = "programplan->begin;?>"; + gantt.locale.labels.column_deadline = "programplan->end;?>"; gantt.locale.labels.column_end_date = "programplan->end;?>"; gantt.locale.labels.column_realBegan = "programplan->realBegan;?>"; gantt.locale.labels.column_realEnd = "programplan->realEnd;?>"; diff --git a/module/project/control.php b/module/project/control.php index 9f08b1f880..f8fa91219c 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -408,10 +408,9 @@ class project extends control $this->loadModel('program')->refreshStats(); // Refresh stats fields of projects. $programTitle = $this->loadModel('setting')->getItem('owner=' . $this->app->user->account . '&module=project&key=programTitle'); - $projectStats = $this->program->getProjectStats($programID, $browseType, $queryID, $orderBy, $pager, $programTitle); $this->view->title = $this->lang->project->browse; - $this->view->projectStats = $projectStats; + $this->view->projectStats = $this->program->getProjectStats($programID, $browseType, $queryID, $orderBy, $pager, $programTitle); $this->view->pager = $pager; $this->view->programID = $programID; $this->view->program = $this->program->getByID($programID); @@ -428,7 +427,6 @@ class project extends control $this->view->recPerPage = $recPerPage; $this->view->pageID = $pageID; $this->view->showBatchEdit = $this->cookie->showProjectBatchEdit; - $this->view->allProjectsNum = $this->loadModel('program')->getProjectStats($programID, 'all'); $this->display(); } @@ -900,10 +898,6 @@ class project extends control } } - /* Load pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager(0, 30, 1); - /* Check exist extend fields. */ $isExtended = false; if($this->config->edition != 'open') @@ -926,7 +920,7 @@ class project extends control $this->view->workhour = $this->project->getWorkhour($projectID); $this->view->planGroup = $this->loadModel('execution')->getPlans($products); $this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products), '', $linkedBranches); - $this->view->dynamics = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', $pager, 'all', $projectID); + $this->view->dynamics = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', 30, 'all', $projectID); $this->view->isExtended = $isExtended; $this->display(); @@ -1028,10 +1022,6 @@ class project extends control /* Append id for secend sort. */ $orderBy = $direction == 'next' ? 'date_desc' : 'date_asc'; - /* Set the pager. */ - $this->app->loadClass('pager', $static = true); - $pager = new pager($recTotal, $recPerPage = 50, $pageID = 1); - /* Set the user and type. */ $account = 'all'; if($type == 'account') @@ -1039,30 +1029,27 @@ class project extends control $user = $this->loadModel('user')->getById($param, 'account'); if($user) $account = $user->account; } - $period = $type == 'account' ? 'all' : $type; - $date = empty($date) ? '' : date('Y-m-d', $date); - $actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, $pager, 'all', $projectID, 'all', $date, $direction); - if(empty($recTotal)) $recTotal = count($actions); + $period = $type == 'account' ? 'all' : $type; + $date = empty($date) ? '' : date('Y-m-d', $date); + $actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, 50, 'all', $projectID, 'all', $date, $direction); + $dateGroups = $this->action->buildDateGroup($actions, $direction, $type); + + if(empty($recTotal)) $recTotal = count($dateGroups) < 2 ? count($actions) : $this->action->getDynamicCount(); - /* The header and position. */ $project = $this->project->getByID($projectID); - $this->view->title = $project->name . $this->lang->colon . $this->lang->project->dynamic; - $this->view->position[] = html::a($this->createLink('project', 'browse', "projectID=$projectID"), $project->name); - $this->view->position[] = $this->lang->project->dynamic; - - $this->view->userIdPairs = $this->loadModel('user')->getTeamMemberPairs($projectID, 'project'); - $this->view->accountPairs = $this->user->getPairs('noletter|nodeleted'); /* Assign. */ - $this->view->projectID = $projectID; - $this->view->type = $type; - $this->view->orderBy = $orderBy; - $this->view->pager = $pager; - $this->view->account = $account; - $this->view->param = $param; - $this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $type); - $this->view->direction = $direction; - $this->view->recTotal = $recTotal; + $this->view->title = $project->name . $this->lang->colon . $this->lang->project->dynamic; + $this->view->userIdPairs = $this->loadModel('user')->getTeamMemberPairs($projectID, 'project'); + $this->view->accountPairs = $this->user->getPairs('noletter|nodeleted'); + $this->view->projectID = $projectID; + $this->view->type = $type; + $this->view->orderBy = $orderBy; + $this->view->account = $account; + $this->view->param = $param; + $this->view->dateGroups = $dateGroups; + $this->view->direction = $direction; + $this->view->recTotal = $recTotal; $this->display(); } diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 777bcf91e3..49560909cf 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -269,7 +269,7 @@ $lang->project->currencySymbol['THB'] = '฿'; $lang->project->currencySymbol['SGD'] = 'S$'; $lang->project->modelList[''] = ''; -$lang->project->modelList['ipd'] = "IPD"; +if($config->systemMode == 'PML') $lang->project->modelList['ipd'] = "IPD"; $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 777bcf91e3..49560909cf 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -269,7 +269,7 @@ $lang->project->currencySymbol['THB'] = '฿'; $lang->project->currencySymbol['SGD'] = 'S$'; $lang->project->modelList[''] = ''; -$lang->project->modelList['ipd'] = "IPD"; +if($config->systemMode == 'PML') $lang->project->modelList['ipd'] = "IPD"; $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 777bcf91e3..49560909cf 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -269,7 +269,7 @@ $lang->project->currencySymbol['THB'] = '฿'; $lang->project->currencySymbol['SGD'] = 'S$'; $lang->project->modelList[''] = ''; -$lang->project->modelList['ipd'] = "IPD"; +if($config->systemMode == 'PML') $lang->project->modelList['ipd'] = "IPD"; $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index e5105b2640..44c7e8df31 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -269,7 +269,7 @@ $lang->project->currencySymbol['THB'] = '฿'; $lang->project->currencySymbol['SGD'] = 'S$'; $lang->project->modelList[''] = ""; -$lang->project->modelList['ipd'] = "IPD"; +if($config->systemMode == 'PLM') $lang->project->modelList['ipd'] = "IPD"; $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "瀑布"; $lang->project->modelList['kanban'] = "看板"; diff --git a/module/project/model.php b/module/project/model.php index 736a09f423..d5e3afcb1e 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -239,13 +239,13 @@ class projectModel extends model ->andWhere('status')->notin('done,closed') ->andWhere('deleted')->eq(0) ->orderBy($orderBy) - ->fetchGroup('project'); + ->fetchGroup('project', 'id'); $this->app->loadClass('pager', $static = true); foreach($projects as $projectID => $project) { - $orderBy = $project->model == 'waterfall' ? 'id_asc' : 'id_desc'; - $pager = $project->model == 'waterfall' ? null : new pager(0, 1, 1); + $project->model == 'waterfall' ? ksort($executions[$projectID]) : krsort($executions[$projectID]); + $project->executions = isset($executions[$projectID]) ? $executions[$projectID] : array(); $project->parentName = $projectParentNames[$project->id]; } @@ -395,12 +395,11 @@ class projectModel extends model */ public function getTotalTaskByProject($projectIdList) { - return $this->dao->select("t1.project, count(t1.id) as allTasks, count(if(t1.status = 'wait', 1, null)) as waitTasks, count(if(t1.status = 'doing', 1, null)) as doingTasks, count(if(t1.status = 'done', 1, null)) as doneTasks, count(if(t1.status = 'wait' or t1.status = 'pause' or t1.status = 'cancel', 1, null)) as leftTasks, count(if(t1.status = 'done' or t1.status = 'closed', 1, null)) as litedoneTasks")->from(TABLE_TASK)->alias('t1') - ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution=t2.id') - ->where('t1.project')->in($projectIdList) - ->andWhere('t1.deleted')->eq(0) - ->andWhere('t2.deleted')->eq(0) - ->groupBy('t1.project') + $executionIdList = $this->dao->select('id')->from(TABLE_EXECUTION)->where('project')->in($projectIdList)->andWhere('deleted')->eq(0)->fetchPairs(); + return $this->dao->select("project, count(id) as allTasks, count(if(status = 'wait', 1, null)) as waitTasks, count(if(status = 'doing', 1, null)) as doingTasks, count(if(status = 'done', 1, null)) as doneTasks, count(if(status = 'wait' or status = 'pause' or status = 'cancel', 1, null)) as leftTasks, count(if(status = 'done' or status = 'closed', 1, null)) as litedoneTasks")->from(TABLE_TASK) + ->where('execution')->in($executionIdList) + ->andWhere('deleted')->eq(0) + ->groupBy('project') ->fetchAll('project'); } @@ -533,9 +532,11 @@ class projectModel extends model $workhour = new stdclass(); $workhour->totalHours = $this->dao->select('sum(t1.days * t1.hours) AS totalHours')->from(TABLE_TEAM)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.root=t2.id') + ->leftJoin(TABLE_USER)->alias('t3')->on('t1.account=t3.account') ->where('t2.id')->in($projectID) ->andWhere('t2.deleted')->eq(0) ->andWhere('t1.type')->eq('project') + ->andWhere('t3.deleted')->eq(0) ->fetch('totalHours'); $workhour->totalEstimate = $total->totalEstimate; $workhour->totalConsumed = $totalConsumed; @@ -2412,7 +2413,9 @@ class projectModel extends model { $this->loadModel('user'); - $members = array_keys($this->getTeamMembers($projectID)); + $teams = array_keys($this->getTeamMembers($projectID)); + $stakeholders = array_keys($this->loadModel('stakeholder')->getStakeHolderPairs($projectID)); + $members = array_merge($teams, $stakeholders); /* Link products of other programs. */ if(!empty($_POST['otherProducts'])) @@ -2860,7 +2863,7 @@ class projectModel extends model } if(isset($lang->project->menu->storyGroup)) unset($lang->project->menu->storyGroup); - if($model != 'ipd' and $project->hasProduct) unset($lang->project->menu->settings['subMenu']->module); + if($model != 'ipd' and isset($project->hasProduct) and $project->hasProduct) unset($lang->project->menu->settings['subMenu']->module); if(empty($project->hasProduct)) unset($lang->project->menu->settings['subMenu']->products); /* Reset project priv. */ diff --git a/module/project/view/browsebylist.html.php b/module/project/view/browsebylist.html.php index 234b0437cb..2646657534 100644 --- a/module/project/view/browsebylist.html.php +++ b/module/project/view/browsebylist.html.php @@ -80,13 +80,11 @@ $closedCount = 0;

    project->empty;?> - ' . $lang->project->create, '', 'class="btn btn-info" data-toggle="modal"');?> ' . $lang->execution->create, '', 'class="btn btn-info"');?> -

    diff --git a/module/project/view/dynamic.html.php b/module/project/view/dynamic.html.php index 24cab33978..7f7389fbfc 100755 --- a/module/project/view/dynamic.html.php +++ b/module/project/view/dynamic.html.php @@ -1,12 +1,12 @@ dynamic view file of dashboard module of ZenTaoPMS. + * The dynamic view file of project module of ZenTaoPMS. * * @copyright Copyright 2009-2015 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com) * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html) * @author Chunsheng Wang - * @package dashboard - * @version $Id: action->dynamic.html.php 1477 2011-03-01 15:25:50Z wwccss $ + * @package project + * @version $Id: dynamic.html.php 1477 2011-03-01 15:25:50Z wwccss $ * @link http://www.zentao.net */ ?> @@ -106,8 +106,8 @@ $firstDate = date('Y-m-d', strtotime($firstAction->originalDate) + 24 * 3600); $lastDate = substr($action->originalDate, 0, 10); $hasPre = $this->action->hasPreOrNext($firstDate, 'pre'); $hasNext = $this->action->hasPreOrNext($lastDate, 'next'); -$preLink = $hasPre ? inlink('dynamic', "projectID=$projectID&type=$type¶m=$param&recTotal={$pager->recTotal}&date=" . strtotime($firstDate) . '&direction=pre') : 'javascript:;'; -$nextLink = $hasNext ? inlink('dynamic', "projectID=$projectID&type=$type¶m=$param&recTotal={$pager->recTotal}&date=" . strtotime($lastDate) . '&direction=next') : 'javascript:;'; +$preLink = $hasPre ? inlink('dynamic', "projectID=$projectID&type=$type¶m=$param&recTotal={$recTotal}&date=" . strtotime($firstDate) . '&direction=pre') : 'javascript:;'; +$nextLink = $hasNext ? inlink('dynamic', "projectID=$projectID&type=$type¶m=$param&recTotal={$recTotal}&date=" . strtotime($lastDate) . '&direction=next') : 'javascript:;'; ?>
    diff --git a/module/project/view/execution.html.php b/module/project/view/execution.html.php index c42c4fd590..0297533e9d 100644 --- a/module/project/view/execution.html.php +++ b/module/project/view/execution.html.php @@ -12,7 +12,6 @@ execution->checkedExecSummary);?> execution->pageExecSummary);?> execution->executionSummary);?> -execution->checkedExecutions);?> model == 'ipd') js::set('reviewPoints', json_encode($reviewPoints));?> + app->tab != 'project'):?> switchBranch'> + switchBranch'>
    @@ -90,8 +92,7 @@ foreach(explode(',', $config->story->create->requiredFields) as $field) - - + switchBranch' > product->branchName[$product->type];?>
    @@ -125,7 +126,6 @@ foreach(explode(',', $config->story->create->requiredFields) as $field) - @@ -248,7 +248,7 @@ foreach(explode(',', $config->story->create->requiredFields) as $field) story->parent : $lang->story->requirement;?>
    - +
    story->loadAllStories, "class='btn btn-default' onclick='loadURS()' data-toggle='tooltip'");?>
    @@ -455,4 +455,5 @@ setTimeout(() => { }, 600); + diff --git a/module/story/view/edit.html.php b/module/story/view/edit.html.php index 6a82ac69ad..e9f5eec4fe 100644 --- a/module/story/view/edit.html.php +++ b/module/story/view/edit.html.php @@ -150,7 +150,8 @@ story->product;?>
    - product, "onchange='loadProduct(this.value);' class='form-control chosen control-product'");?> + + product, "onchange='loadProduct(this.value);' class='form-control chosen control-product $class'");?> type != 'normal') echo html::select('branch', $branchTagOption, $story->branch, "onchange='loadBranch();' class='form-control chosen control-branch'");?>
    diff --git a/module/story/view/header.html.php b/module/story/view/header.html.php index d014cb0b45..f5d8184f3b 100644 --- a/module/story/view/header.html.php +++ b/module/story/view/header.html.php @@ -100,6 +100,16 @@ function loadProductBranches(productID) if(storyType == 'story' && page == 'create') { var newProductType = data ? 'normal' : 'branch'; + + if(newProductType == 'normal') + { + $('.table-form tr:first').append($('#assignedToBox')); + } + else + { + $('.sourceBox').prev('tr').append($('#assignedToBox')); + } + if(originProductType != newProductType) { $('.switchBranch').toggleClass('hidden'); @@ -255,8 +265,7 @@ function loadProductReviewers(productID) } $reviewer.replaceWith(data); $reviewer = $('#reviewer'); - if($reviewer.data('pickertype')) $reviewer.picker({chosenMode: true}); - else $reviewer.chosen(); + $reviewer.picker({chosenMode: true}); if(needNotReview == 'checked') $('#reviewer').attr('disabled', 'disabled').trigger('chosen:updated'); } }); diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 8891ff919a..e9e9a2db13 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -12,6 +12,7 @@ ?> + session->storyList ? $app->session->storyList : $this->createLink('product', 'browse', "productID=$story->product");?> type);?> diff --git a/module/task/config.php b/module/task/config.php index 09eca6121d..f476e00d21 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -53,177 +53,167 @@ $config->task->excludeCheckFileds = ',pri,estStartedDitto,deadlineDitto,parent,r $config->task->datatable = new stdclass(); $config->task->datatable->defaultField = array('id', 'name', 'pri', 'assignedTo', 'status', 'finishedBy', 'deadline', 'estimate', 'consumed', 'left', 'progress', 'actions'); -global $lang; +global $app, $lang; $config->task->datatable->fieldList['id']['title'] = 'idAB'; $config->task->datatable->fieldList['id']['fixed'] = 'left'; $config->task->datatable->fieldList['id']['width'] = '70'; $config->task->datatable->fieldList['id']['required'] = 'yes'; +$config->task->datatable->fieldList['id']['type'] = 'checkID'; +$config->task->datatable->fieldList['id']['sortType'] = true; +$config->task->datatable->fieldList['id']['checkbox'] = true; -$config->task->datatable->fieldList['name']['title'] = 'name'; -$config->task->datatable->fieldList['name']['fixed'] = 'left'; -$config->task->datatable->fieldList['name']['width'] = 'auto'; -$config->task->datatable->fieldList['name']['required'] = 'yes'; +$config->task->datatable->fieldList['name']['title'] = 'name'; +$config->task->datatable->fieldList['name']['fixed'] = 'left'; +$config->task->datatable->fieldList['name']['width'] = 'auto'; +$config->task->datatable->fieldList['name']['required'] = 'yes'; +$config->task->datatable->fieldList['name']['width'] = '356'; +$config->task->datatable->fieldList['name']['type'] = 'html'; +$config->task->datatable->fieldList['name']['fixed'] = 'left'; +$config->task->datatable->fieldList['name']['sortType'] = true; +$config->task->datatable->fieldList['name']['nestedToggle'] = true; +$config->task->datatable->fieldList['name']['iconRender'] = true; $config->task->datatable->fieldList['pri']['title'] = 'priAB'; $config->task->datatable->fieldList['pri']['fixed'] = 'left'; -$config->task->datatable->fieldList['pri']['width'] = '35'; +$config->task->datatable->fieldList['pri']['type'] = 'html'; +$config->task->datatable->fieldList['pri']['width'] = '45'; $config->task->datatable->fieldList['pri']['required'] = 'no'; +$config->task->datatable->fieldList['pri']['sortType'] = true; $config->task->datatable->fieldList['pri']['name'] = $lang->task->pri; $config->task->datatable->fieldList['assignedTo']['title'] = 'assignedTo'; -$config->task->datatable->fieldList['assignedTo']['fixed'] = 'no'; $config->task->datatable->fieldList['assignedTo']['width'] = '100'; +$config->task->datatable->fieldList['assignedTo']['type'] = 'html'; $config->task->datatable->fieldList['assignedTo']['required'] = 'no'; -$config->task->datatable->fieldList['assignedTo']['control'] = 'select'; -$config->task->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' => 'getTeamMemberPairs', 'params' => '$executionID&execution'); +$config->task->datatable->fieldList['assignedTo']['currentUser'] = $app->user->account; +$config->task->datatable->fieldList['assignedTo']['assignLink'] = array('module' => 'task', 'method' => 'assignTo', 'params' => 'executionID={execution}&taskID={id}'); +$config->task->datatable->fieldList['assignedTo']['sortType'] = true; $config->task->datatable->fieldList['assignedDate']['title'] = 'assignedDate'; -$config->task->datatable->fieldList['assignedDate']['fixed'] = 'no'; +$config->task->datatable->fieldList['assignedDate']['type'] = 'date'; $config->task->datatable->fieldList['assignedDate']['width'] = '110'; $config->task->datatable->fieldList['assignedDate']['required'] = 'no'; $config->task->datatable->fieldList['type']['title'] = 'typeAB'; -$config->task->datatable->fieldList['type']['fixed'] = 'no'; +$config->task->datatable->fieldList['type']['type'] = 'category'; $config->task->datatable->fieldList['type']['width'] = '80'; $config->task->datatable->fieldList['type']['required'] = 'no'; +$config->task->datatable->fieldList['type']['map'] = $lang->task->typeList; $config->task->datatable->fieldList['status']['title'] = 'statusAB'; -$config->task->datatable->fieldList['status']['fixed'] = 'no'; +$config->task->datatable->fieldList['status']['type'] = 'html'; $config->task->datatable->fieldList['status']['width'] = '60'; $config->task->datatable->fieldList['status']['required'] = 'no'; $config->task->datatable->fieldList['finishedBy']['title'] = 'finishedByAB'; -$config->task->datatable->fieldList['finishedBy']['fixed'] = 'no'; +$config->task->datatable->fieldList['finishedBy']['type'] = 'user'; $config->task->datatable->fieldList['finishedBy']['width'] = '80'; $config->task->datatable->fieldList['finishedBy']['required'] = 'no'; $config->task->datatable->fieldList['deadline']['title'] = 'deadlineAB'; -$config->task->datatable->fieldList['deadline']['fixed'] = 'no'; +$config->task->datatable->fieldList['deadline']['type'] = 'date'; $config->task->datatable->fieldList['deadline']['width'] = '70'; $config->task->datatable->fieldList['deadline']['required'] = 'no'; -$config->task->datatable->fieldList['deadline']['control'] = 'date'; $config->task->datatable->fieldList['estimate']['title'] = 'estimateAB'; -$config->task->datatable->fieldList['estimate']['fixed'] = 'no'; -$config->task->datatable->fieldList['estimate']['width'] = '65'; +$config->task->datatable->fieldList['estimate']['width'] = '85'; +$config->task->datatable->fieldList['estimate']['sortType'] = true; $config->task->datatable->fieldList['estimate']['required'] = 'no'; $config->task->datatable->fieldList['consumed']['title'] = 'consumedAB'; -$config->task->datatable->fieldList['consumed']['fixed'] = 'no'; -$config->task->datatable->fieldList['consumed']['width'] = '65'; +$config->task->datatable->fieldList['consumed']['width'] = '85'; +$config->task->datatable->fieldList['consumed']['sortType'] = true; $config->task->datatable->fieldList['consumed']['required'] = 'no'; $config->task->datatable->fieldList['left']['title'] = 'leftAB'; -$config->task->datatable->fieldList['left']['fixed'] = 'no'; -$config->task->datatable->fieldList['left']['width'] = '65'; +$config->task->datatable->fieldList['left']['width'] = '85'; +$config->task->datatable->fieldList['left']['sortType'] = true; $config->task->datatable->fieldList['left']['required'] = 'no'; $config->task->datatable->fieldList['progress']['title'] = 'progressAB'; -$config->task->datatable->fieldList['progress']['fixed'] = 'no'; $config->task->datatable->fieldList['progress']['width'] = '75'; +$config->task->datatable->fieldList['progress']['type'] = 'progress'; $config->task->datatable->fieldList['progress']['required'] = 'no'; -$config->task->datatable->fieldList['progress']['sort'] = 'no'; $config->task->datatable->fieldList['progress']['name'] = $lang->task->progress; $config->task->datatable->fieldList['openedBy']['title'] = 'openedByAB'; -$config->task->datatable->fieldList['openedBy']['fixed'] = 'no'; +$config->task->datatable->fieldList['openedBy']['type'] = 'user'; $config->task->datatable->fieldList['openedBy']['width'] = '90'; $config->task->datatable->fieldList['openedBy']['required'] = 'no'; $config->task->datatable->fieldList['openedDate']['title'] = 'openedDate'; -$config->task->datatable->fieldList['openedDate']['fixed'] = 'no'; +$config->task->datatable->fieldList['openedDate']['type'] = 'date'; $config->task->datatable->fieldList['openedDate']['width'] = '110'; $config->task->datatable->fieldList['openedDate']['required'] = 'no'; $config->task->datatable->fieldList['estStarted']['title'] = 'estStarted'; -$config->task->datatable->fieldList['estStarted']['fixed'] = 'no'; +$config->task->datatable->fieldList['estStarted']['type'] = 'date'; $config->task->datatable->fieldList['estStarted']['width'] = '90'; $config->task->datatable->fieldList['estStarted']['required'] = 'no'; $config->task->datatable->fieldList['estStarted']['control'] = 'date'; $config->task->datatable->fieldList['realStarted']['title'] = 'realStarted'; -$config->task->datatable->fieldList['realStarted']['fixed'] = 'no'; +$config->task->datatable->fieldList['realStarted']['type'] = 'date'; $config->task->datatable->fieldList['realStarted']['width'] = '95'; $config->task->datatable->fieldList['realStarted']['required'] = 'no'; $config->task->datatable->fieldList['finishedDate']['title'] = 'finishedDateAB'; -$config->task->datatable->fieldList['finishedDate']['fixed'] = 'no'; +$config->task->datatable->fieldList['finishedDate']['type'] = 'date'; $config->task->datatable->fieldList['finishedDate']['width'] = '105'; $config->task->datatable->fieldList['finishedDate']['required'] = 'no'; $config->task->datatable->fieldList['canceledBy']['title'] = 'canceledBy'; -$config->task->datatable->fieldList['canceledBy']['fixed'] = 'no'; +$config->task->datatable->fieldList['canceledBy']['type'] = 'user'; $config->task->datatable->fieldList['canceledBy']['width'] = '110'; $config->task->datatable->fieldList['canceledBy']['required'] = 'no'; $config->task->datatable->fieldList['canceledDate']['title'] = 'canceledDate'; -$config->task->datatable->fieldList['canceledDate']['fixed'] = 'no'; +$config->task->datatable->fieldList['canceledDate']['type'] = 'date'; $config->task->datatable->fieldList['canceledDate']['width'] = '115'; $config->task->datatable->fieldList['canceledDate']['required'] = 'no'; $config->task->datatable->fieldList['closedBy']['title'] = 'closedBy'; -$config->task->datatable->fieldList['closedBy']['fixed'] = 'no'; +$config->task->datatable->fieldList['closedBy']['type'] = 'user'; $config->task->datatable->fieldList['closedBy']['width'] = '100'; $config->task->datatable->fieldList['closedBy']['required'] = 'no'; $config->task->datatable->fieldList['closedDate']['title'] = 'closedDate'; -$config->task->datatable->fieldList['closedDate']['fixed'] = 'no'; -$config->task->datatable->fieldList['closedDate']['width'] = '95'; +$config->task->datatable->fieldList['closedDate']['type'] = 'date'; +$config->task->datatable->fieldList['closedDate']['width'] = '115'; $config->task->datatable->fieldList['closedDate']['required'] = 'no'; -$config->task->datatable->fieldList['closedReason']['title'] = 'closedReason'; -$config->task->datatable->fieldList['closedReason']['fixed'] = 'no'; -$config->task->datatable->fieldList['closedReason']['width'] = '120'; -$config->task->datatable->fieldList['closedReason']['required'] = 'no'; -$config->task->datatable->fieldList['closedReason']['dataSource'] = array('lang' => 'reasonList'); +$config->task->datatable->fieldList['closedReason']['title'] = 'closedReason'; +$config->task->datatable->fieldList['closedReason']['type'] = 'category'; +$config->task->datatable->fieldList['closedReason']['width'] = '120'; +$config->task->datatable->fieldList['closedReason']['required'] = 'no'; +$config->task->datatable->fieldList['closedReason']['map'] = $lang->task->reasonList; $config->task->datatable->fieldList['lastEditedBy']['title'] = 'lastEditedBy'; -$config->task->datatable->fieldList['lastEditedBy']['fixed'] = 'no'; $config->task->datatable->fieldList['lastEditedBy']['width'] = '95'; $config->task->datatable->fieldList['lastEditedBy']['required'] = 'no'; $config->task->datatable->fieldList['lastEditedDate']['title'] = 'lastEditedDate'; -$config->task->datatable->fieldList['lastEditedDate']['fixed'] = 'no'; $config->task->datatable->fieldList['lastEditedDate']['width'] = '120'; +$config->task->datatable->fieldList['lastEditedDate']['type'] = 'date'; $config->task->datatable->fieldList['lastEditedDate']['required'] = 'no'; $config->task->datatable->fieldList['activatedDate']['title'] = 'activatedDate'; -$config->task->datatable->fieldList['activatedDate']['fixed'] = 'no'; $config->task->datatable->fieldList['activatedDate']['width'] = '90'; +$config->task->datatable->fieldList['activatedDate']['type'] = 'date'; $config->task->datatable->fieldList['activatedDate']['required'] = 'no'; $config->task->datatable->fieldList['story']['title'] = "storyAB"; -$config->task->datatable->fieldList['story']['fixed'] = 'no'; $config->task->datatable->fieldList['story']['width'] = '80'; $config->task->datatable->fieldList['story']['required'] = 'no'; $config->task->datatable->fieldList['story']['name'] = $lang->task->story; -$config->task->datatable->fieldList['story']['control'] = 'select'; -$config->task->datatable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getExecutionStoryPairs', 'params' => '$executionID&0&all&&&active'); +$config->task->datatable->fieldList['story']['type'] = 'html'; $config->task->datatable->fieldList['mailto']['title'] = 'mailto'; -$config->task->datatable->fieldList['mailto']['fixed'] = 'no'; $config->task->datatable->fieldList['mailto']['width'] = '100'; $config->task->datatable->fieldList['mailto']['required'] = 'no'; -$config->task->datatable->fieldList['module']['title'] = 'idAB'; -$config->task->datatable->fieldList['module']['control'] = 'select'; -$config->task->datatable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getTaskOptionMenu', 'params' => '$executionID'); - -$config->task->datatable->fieldList['execution']['title'] = 'idAB'; -$config->task->datatable->fieldList['execution']['control'] = 'hidden'; -$config->task->datatable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs'); - -$config->task->datatable->fieldList['project']['title'] = 'idAB'; -$config->task->datatable->fieldList['project']['control'] = 'hidden'; -$config->task->datatable->fieldList['project']['dataSource'] = array('module' => 'project', 'method' => 'getPairs'); - -$config->task->datatable->fieldList['mode']['title'] = 'idAB'; -$config->task->datatable->fieldList['mode']['control'] = 'hidden'; - -$config->task->datatable->fieldList['desc']['title'] = 'idAB'; -$config->task->datatable->fieldList['desc']['control'] = 'textarea'; - $config->task->datatable->fieldList['actions']['title'] = 'actions'; +$config->task->datatable->fieldList['actions']['type'] = 'html'; $config->task->datatable->fieldList['actions']['fixed'] = 'right'; $config->task->datatable->fieldList['actions']['width'] = '180'; $config->task->datatable->fieldList['actions']['required'] = 'yes'; diff --git a/module/task/control.php b/module/task/control.php index e4f061950f..bf54124b9c 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -232,6 +232,7 @@ class task extends control $response['message'] = $this->lang->task->successSaved . $this->lang->task->afterChoices['continueAdding']; $response['locate'] = $this->createLink('task', 'create', "executionID=$executionID&storyID={$storyParam}&moduleID=$moduleID"); + if($this->app->tab == 'project') $response['locate'] = 'reload'; return $this->send($response); } elseif($this->post->after == 'toTaskList') @@ -538,6 +539,8 @@ class task extends control /* Set menu. */ $this->execution->setMenu($this->view->execution->id); + if(!$this->view->execution->multiple) $this->loadModel('project')->setMenu($this->view->task->project); + $this->view->position[] = html::a($this->createLink('execution', 'browse', "execution={$this->view->task->execution}"), $this->view->execution->name); } diff --git a/module/task/model.php b/module/task/model.php index 8af6776dff..538713f28c 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -170,6 +170,12 @@ class taskModel extends model $requiredFields = str_replace(',estimate,', ',', $requiredFields); } + if(strpos($requiredFields, ',estStarted,') !== false and !isset($task->estStarted)) dao::$errors['estStarted'] = sprintf($this->lang->error->notempty, $this->lang->task->estStarted); + if(strpos($requiredFields, ',deadline,') !== false and !isset($task->deadline)) dao::$errors['deadline'] = sprintf($this->lang->error->notempty, $this->lang->task->deadline); + if(isset($task->estStarted) and isset($task->deadline) and !helper::isZeroDate($task->deadline) and $task->deadline <= $task->estStarted) dao::$errors['deadline'] = sprintf($this->lang->error->ge, $this->lang->task->deadline, $task->estStarted); + + if(dao::isError()) return false; + $requiredFields = trim($requiredFields, ','); /* Fix Bug #2466 */ @@ -2403,12 +2409,12 @@ class taskModel extends model ->andWhere('t1.vision')->eq($this->config->vision) ->fetch(); if(!$task) return false; - $task->openedDate = substr($task->openedDate, 0, 19); - $task->finishedDate = substr($task->finishedDate, 0, 19); - $task->canceledDate = substr($task->canceledDate, 0, 19); - $task->closedDate = substr($task->closedDate, 0, 19); - $task->lastEditedDate = substr($task->lastEditedDate, 0, 19); - $task->realStarted = substr($task->realStarted, 0, 19); + if($task->openedDate) $task->openedDate = substr($task->openedDate, 0, 19); + if($task->finishedDate) $task->finishedDate = substr($task->finishedDate, 0, 19); + if($task->canceledDate) $task->canceledDate = substr($task->canceledDate, 0, 19); + if($task->closedDate) $task->closedDate = substr($task->closedDate, 0, 19); + if($task->lastEditedDate) $task->lastEditedDate = substr($task->lastEditedDate, 0, 19); + if($task->realStarted) $task->realStarted = substr($task->realStarted, 0, 19); $children = $this->dao->select('*')->from(TABLE_TASK)->where('parent')->eq($taskID)->andWhere('deleted')->eq(0)->fetchAll('id'); $task->children = $children; @@ -2516,8 +2522,8 @@ class taskModel extends model { if(is_string($type)) $type = strtolower($type); $orderBy = str_replace('pri_', 'priOrder_', $orderBy); - $fields = "DISTINCT t1.*, t2.id AS storyID, t2.title AS storyTitle, t2.product, t2.branch, t2.version AS latestStoryVersion, t2.status AS storyStatus, t3.realname AS assignedToRealName, IF(t1.`pri` = 0, {$this->config->maxPriValue}, t1.`pri`) as priOrder"; - ($this->config->edition == 'max' or $this->config->edition == 'ipd') && $fields .= ', t6.name as designName, t6.version as latestDesignVersion'; + $fields = "DISTINCT t1.*, t2.id AS storyID, t2.title AS storyTitle, t2.product, t2.branch, t2.version AS latestStoryVersion, t2.status AS storyStatus, IF(t1.`pri` = 0, {$this->config->maxPriValue}, t1.`pri`) as priOrder"; + ($this->config->edition == 'max' or $this->config->edition == 'ipd') && $fields .= ', t5.name as designName, t5.version as latestDesignVersion'; $actionIDList = array(); if($type == 'assignedbyme') $actionIDList = $this->dao->select('objectID')->from(TABLE_ACTION)->where('objectType')->eq('task')->andWhere('action')->eq('assigned')->andWhere('actor')->eq($this->app->user->account)->fetchPairs('objectID', 'objectID'); @@ -2525,21 +2531,20 @@ class taskModel extends model $tasks = $this->dao->select($fields) ->from(TABLE_TASK)->alias('t1') ->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id') - ->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account') - ->leftJoin(TABLE_TASKTEAM)->alias('t4')->on('t4.task = t1.id') - ->leftJoin(TABLE_MODULE)->alias('t5')->on('t1.module = t5.id') - ->beginIF($this->config->edition == 'max' or $this->config->edition == 'ipd')->leftJoin(TABLE_DESIGN)->alias('t6')->on('t1.design= t6.id')->fi() + ->leftJoin(TABLE_TASKTEAM)->alias('t3')->on('t3.task = t1.id') + ->beginIF($productID)->leftJoin(TABLE_MODULE)->alias('t4')->on('t1.module = t4.id')->fi() + ->beginIF($this->config->edition == 'max' or $this->config->edition == 'ipd')->leftJoin(TABLE_DESIGN)->alias('t5')->on('t1.design= t5.id')->fi() ->where('t1.execution')->eq((int)$executionID) ->beginIF($type == 'myinvolved') - ->andWhere("((t4.`account` = '{$this->app->user->account}') OR t1.`assignedTo` = '{$this->app->user->account}' OR t1.`finishedby` = '{$this->app->user->account}')") + ->andWhere("((t3.`account` = '{$this->app->user->account}') OR t1.`assignedTo` = '{$this->app->user->account}' OR t1.`finishedby` = '{$this->app->user->account}')") ->fi() - ->beginIF($productID)->andWhere("((t5.root=" . (int)$productID . " and t5.type='story') OR t2.product=" . (int)$productID . ")")->fi() + ->beginIF($productID)->andWhere("((t4.root=" . (int)$productID . " and t4.type='story') OR t2.product=" . (int)$productID . ")")->fi() ->beginIF($type == 'undone')->andWhere('t1.status')->notIN('done,closed')->fi() ->beginIF($type == 'needconfirm')->andWhere('t2.version > t1.storyVersion')->andWhere("t2.status = 'active'")->fi() - ->beginIF($type == 'assignedtome')->andWhere("(t1.assignedTo = '{$this->app->user->account}' or (t1.mode = 'multi' and t4.`account` = '{$this->app->user->account}' and t1.status != 'closed' and t4.status != 'done') )")->fi() + ->beginIF($type == 'assignedtome')->andWhere("(t1.assignedTo = '{$this->app->user->account}' or (t1.mode = 'multi' and t3.`account` = '{$this->app->user->account}' and t1.status != 'closed' and t3.status != 'done') )")->fi() ->beginIF($type == 'finishedbyme') ->andWhere('t1.finishedby', 1)->eq($this->app->user->account) - ->orWhere('t4.status')->eq("done") + ->orWhere('t3.status')->eq("done") ->markRight(1) ->fi() ->beginIF($type == 'delayed')->andWhere('t1.deadline')->gt('1970-1-1')->andWhere('t1.deadline')->lt(date(DT_DATE1))->andWhere('t1.status')->in('wait,doing')->fi() @@ -2571,11 +2576,13 @@ class taskModel extends model { if($task->parent > 0) $parents[$task->parent] = $task->parent; } - $parents = $this->dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id'); + $parents = $this->dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id'); + $userList = $this->dao->select('account,realname')->from(TABLE_USER)->fetchPairs('account'); if($this->config->vision == 'lite') $tasks = $this->appendLane($tasks); foreach($tasks as $task) { + $task->assignedToRealName = zget($userList, $task->assignedTo); if($task->parent > 0) { if(isset($tasks[$task->parent])) @@ -3894,7 +3901,7 @@ class taskModel extends model echo round($task->progress, 2) . '%'; break; case 'deadline': - if(substr($task->deadline, 0, 4) > 0) echo '' . substr($task->deadline, 5, 6) . ''; + if(!helper::isZeroDate($task->deadline)) echo '' . substr($task->deadline, 5, 6) . ''; break; case 'openedBy': echo zget($users, $task->openedBy); @@ -3982,10 +3989,11 @@ class taskModel extends model * * @param object $task * @param array $users + * @param bool $output * @access public * @return void */ - public function printAssignedHtml($task, $users) + public function printAssignedHtml($task, $users, $output = true) { $btnTextClass = ''; $btnClass = ''; @@ -4019,9 +4027,12 @@ class taskModel extends model $btnClass .= $task->assignedTo == 'closed' ? ' disabled' : ''; $btnClass .= ' iframe btn btn-icon-left btn-sm'; $assignToLink = $task->assignedTo == 'closed' ? '#' : helper::createLink('task', 'assignTo', "executionID=$task->execution&taskID=$task->id", '', true); - $assignToHtml = html::a($assignToLink, " {$assignedToText}", '', "class='$btnClass'"); + $assignToHtml = html::a($assignToLink, " {$assignedToText}", '', "class='$btnClass' data-toggle='modal'"); - echo !common::hasPriv('task', 'assignTo', $task) ? "{$assignedToText}" : $assignToHtml; + $html = !common::hasPriv('task', 'assignTo', $task) ? "{$assignedToText}" : $assignToHtml; + + if(!$output) return $html; + echo $html; } /** @@ -4236,7 +4247,9 @@ class taskModel extends model { if($task->deleted) return ''; - if($this->config->systemMode == 'PLM') + $isPLMMode = $this->config->systemMode == 'PLM'; + + if($isPLMMode) { $execution = $this->loadModel('execution')->getByID($task->execution); $execution = $this->loadModel('execution')->canStageStart($execution); @@ -4251,11 +4264,12 @@ class taskModel extends model $menu .= $this->buildMenu('task', 'assignTo', "executionID=$task->execution&taskID=$task->id", $task, 'button', '', '', 'iframe', true, '', $this->lang->task->assignTo); - if(!empty($execution['canStart'])) $menu .= $this->buildMenu('task', 'start', $params, $task, 'view', '', '', 'iframe showinonlybody', true); - if(!empty($execution['canStart'])) $menu .= $this->buildMenu('task', 'restart', $params, $task, 'view', '', '', 'iframe showinonlybody', true); - if(!empty($execution['canStart'])) $menu .= $this->buildMenu('task', 'recordEstimate', $params, $task, 'view', '', '', 'iframe showinonlybody', true); + $plmCanStart = !($isPLMMode and empty($execution['canStart'])); + if($plmCanStart) $menu .= $this->buildMenu('task', 'start', $params, $task, 'view', '', '', 'iframe showinonlybody', true); + if($plmCanStart) $menu .= $this->buildMenu('task', 'restart', $params, $task, 'view', '', '', 'iframe showinonlybody', true); + if($plmCanStart) $menu .= $this->buildMenu('task', 'recordEstimate', $params, $task, 'view', '', '', 'iframe showinonlybody', true); $menu .= $this->buildMenu('task', 'pause', $params, $task, 'view', '', '', 'iframe showinonlybody', true); - if(!empty($execution['canStart'])) $menu .= $this->buildMenu('task', 'finish', $params, $task, 'view', '', '', 'iframe showinonlybody text-success', true); + if($plmCanStart) $menu .= $this->buildMenu('task', 'finish', $params, $task, 'view', '', '', 'iframe showinonlybody text-success', true); $menu .= $this->buildMenu('task', 'activate', $params, $task, 'view', '', '', 'iframe showinonlybody text-success', true); $menu .= $this->buildMenu('task', 'close', $params, $task, 'view', '', '', 'iframe showinonlybody', true); $menu .= $this->buildMenu('task', 'cancel', $params, $task, 'view', '', '', 'iframe showinonlybody', true); @@ -4295,17 +4309,17 @@ class taskModel extends model $canEdit = common::hasPriv('task', 'edit'); $canBatchCreate = ($this->config->vision == 'rnd' and common::hasPriv('task', 'batchCreate')); - if($task->status != 'pause') $menu .= $this->buildMenu('task', 'start', $params, $task, 'browse', '', '', 'iframe', true); - if($task->status == 'pause') $menu .= $this->buildMenu('task', 'restart', $params, $task, 'browse', '', '', 'iframe', true); - $menu .= $this->buildMenu('task', 'finish', $params, $task, 'browse', '', '', 'iframe', true); - $menu .= $this->buildMenu('task', 'close', $params, $task, 'browse', '', '', 'iframe', true); + if($task->status != 'pause') $menu .= $this->buildMenu('task', 'start', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"'); + if($task->status == 'pause') $menu .= $this->buildMenu('task', 'restart', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"'); + $menu .= $this->buildMenu('task', 'finish', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"'); + $menu .= $this->buildMenu('task', 'close', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"'); if(($canStart or $canRestart or $canFinish or $canClose) and ($canRecordEstimate or $canEdit or $canBatchCreate)) { $menu .= "
    "; } - $menu .= $this->buildMenu('task', 'recordEstimate', $params, $task, 'browse', 'time', '', 'iframe', true); + $menu .= $this->buildMenu('task', 'recordEstimate', $params, $task, 'browse', 'time', '', 'iframe', true, 'data-toggle="modal"'); $menu .= $this->buildMenu('task', 'edit', $params, $task, 'browse'); if($this->config->vision == 'rnd') { @@ -4544,4 +4558,177 @@ class taskModel extends model if(!empty($deadline) and !helper::isZeroDate($deadline) and $deadline > $execution->end) dao::$errors['deadline'][] = $pre . sprintf($this->lang->task->error->endGtExecution, $this->lang->execution->common, $execution->end); if(!empty($deadline) and !helper::isZeroDate($deadline) and $deadline < $execution->begin) dao::$errors['deadline'][] = $pre . sprintf($this->lang->task->error->endLtExecution, $this->lang->execution->common, $execution->begin); } + + /** + * Generate col for dtable. + * + * @param string $orderBy + * @access public + * @return void + */ + public function generateCol($orderBy = '') + { + $setting = $this->loadModel('datatable')->getSetting('execution'); + $fieldList = $this->config->task->datatable->fieldList; + + foreach($fieldList as $field => $items) + { + if(isset($items['title'])) continue; + + $title = $field == 'id' ? 'ID' : zget($this->lang->task, $field, zget($this->lang, $field, $field)); + $fieldList[$field]['title'] = $title; + } + + if(empty($setting)) + { + $setting = $this->config->task->datatable->defaultField; + $order = 1; + foreach($setting as $key => $value) + { + $set = new stdclass();; + $set->id = $value; + $set->order = $order ++; + $set->show = true; + $setting[$key] = $set; + } + } + + foreach($setting as $key => $set) + { + if(empty($set->show)) + { + unset($setting[$key]); + continue; + } + + $sortType = ''; + if(!strpos($orderBy, ',') && strpos($orderBy, $set->id) !== false) + { + $sort = str_replace("{$set->id}_", '', $orderBy); + $sortType = $sort == 'asc' ? 'up' : 'down'; + } + + $set->name = $set->id; + $set->title = $fieldList[$set->id]['title']; + + if(isset($fieldList[$set->id]['checkbox'])) $set->checkbox = $fieldList[$set->id]['checkbox']; + if(isset($fieldList[$set->id]['nestedToggle'])) $set->nestedToggle = $fieldList[$set->id]['nestedToggle']; + if(isset($fieldList[$set->id]['fixed'])) $set->fixed = $fieldList[$set->id]['fixed']; + if(isset($fieldList[$set->id]['type'])) $set->type = $fieldList[$set->id]['type']; + if(isset($fieldList[$set->id]['sortType'])) $set->sortType = $fieldList[$set->id]['sortType']; + if(isset($fieldList[$set->id]['flex'])) $set->flex = $fieldList[$set->id]['flex']; + if(isset($fieldList[$set->id]['minWidth'])) $set->minWidth = $fieldList[$set->id]['minWidth']; + if(isset($fieldList[$set->id]['maxWidth'])) $set->maxWidth = $fieldList[$set->id]['maxWidth']; + if(isset($fieldList[$set->id]['pri'])) $set->pri = $fieldList[$set->id]['pri']; + if(isset($fieldList[$set->id]['map'])) $set->map = $fieldList[$set->id]['map']; + + if($sortType) $set->sortType = $sortType; + + if(isset($set->fixed) && $set->fixed == 'no') unset($set->fixed); + if(isset($set->width)) $set->width = str_replace('px', '', $set->width); + unset($set->id); + } + + usort($setting, array('datatableModel', 'sortCols')); + return $setting; + } + + /** + * Generate row for dtable. + * + * @param array $tasks + * @param array $users + * @access public + * @return array + */ + public function generateRow($tasks, $users) + { + $userFields = array('assignedTo', 'openedBy', 'closedBy', 'lastEditedBy', 'finishedBy'); + $dateFields = array('assignedDate', 'openedDate', 'deadline', 'finishedDate', 'closedDate', 'lastEditedDate', 'canceledDate', 'activatedDate', 'estStarted', 'realStarted', 'replacetypeDate'); + $canView = common::hasPriv('task', 'view'); + $rows = array(); + foreach($tasks as $task) + { + $task->assignedTo = $this->printAssignedHtml($task, $users, false); + $task->actions = '
    ' . $this->buildOperateBrowseMenu($task) . '
    '; + + $taskName = ''; + $taskLink = helper::createLink('task', 'view', "taskID=$task->id", '', $this->config->vision == 'lite' ? true : false); + $linkClass = $this->config->vision == 'lite' ? 'class="iframe"' : ''; + + if($task->parent > 0 and isset($task->parentName)) $task->name = "{$task->parentName} / {$task->name}"; + if($task->module and isset($modulePairs[$task->module])) $taskName .= "" . $modulePairs[$task->module] . ' '; + if($task->parent > 0) $taskName .= '' . $this->lang->task->childrenAB . ' '; + if(!empty($task->team)) $taskName .= '' . $this->lang->task->multipleAB . ' '; + + $taskName .= $canView ? html::a($taskLink, $task->name, null, "$linkClass style='color: $task->color' title='$task->name'") : "$task->name"; + if(!empty($task->children)) $taskName .= ''; + if($task->fromBug) $taskName .= html::a(helper::createLink('bug', 'view', "id=$task->fromBug"), "[BUG#$task->fromBug]", '', "class='bug'"); + $task->name = $taskName; + + $priClass = $task->pri ? "label-pri label-pri-{$task->pri}" : ''; + $task->pri = "" . zget($this->lang->task->priList, $task->pri) . ''; + + $task->statusCode = $task->status; + $storyChanged = (!empty($task->storyStatus) && $task->storyStatus == 'active' && $task->latestStoryVersion > $task->storyVersion && !in_array($task->status, array('cancel', 'closed'))); + $task->status = $storyChanged ? "{$this->lang->story->changed}" : " " . $this->processStatus('task', $task) . ""; + + $task->estimateNum = round($task->estimate, 1); + $task->consumedNum = round($task->consumed, 1); + $task->leftNum = round($task->left, 1); + + $task->estimate = round($task->estimate, 1) . $this->lang->execution->workHourUnit; + $task->consumed = round($task->consumed, 1) . $this->lang->execution->workHourUnit; + $task->left = round($task->left, 1) . $this->lang->execution->workHourUnit; + + $task->design = ''; + $task->story = ''; + if(!empty($task->storyID)) + { + if(common::hasPriv('story', 'view')) + { + $task->story = html::a(helper::createLink('story', 'view', "storyid=$task->storyID", 'html', true), "", '', "class='iframe' data-width='1050' title='{$task->storyTitle}' data-toggle='modal' data-size='lg'"); + } + else + { + $task->story = ""; + } + } + + $mailto = explode(',', $task->mailto); + foreach($mailto as $key => $account) + { + $account = trim($account); + if(empty($account)) + { + unset($mailto[$key]); + continue; + } + + $mailto[$key] = zget($users, $account); + } + $task->mailto = implode('  ', $mailto); + + foreach($userFields as $field) $task->$field = zget($users, $task->$field); + foreach($dateFields as $field) $task->$field = empty($task->$field) || helper::isZeroDate($task->$field) ? '' : $task->$field; + + $children = isset($task->children) ? $task->children : array(); + unset($task->children); + + $task->isParent = false; + if($task->parent == -1) + { + $task->isParent = true; + $task->parent = 0; + } + + $rows[] = $task; + + if(!empty($children)) + { + $rows = array_merge($rows, $this->generateRow($children, $users)); + } + } + return $rows; + } } diff --git a/module/task/view/batchcreate.html.php b/module/task/view/batchcreate.html.php index 5ad5835485..6edc0a2e44 100755 --- a/module/task/view/batchcreate.html.php +++ b/module/task/view/batchcreate.html.php @@ -186,8 +186,8 @@ $colspan = count($visibleFields) + 3; - - + + @@ -344,4 +344,5 @@ $(function() + diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index ba763dfdb1..cf4f9167f3 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -354,4 +354,5 @@ foreach(explode(',', $config->task->create->requiredFields) as $field) + diff --git a/module/task/view/edit.html.php b/module/task/view/edit.html.php index 1cadb8d650..3d80dae3b3 100644 --- a/module/task/view/edit.html.php +++ b/module/task/view/edit.html.php @@ -308,4 +308,5 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field)
    id);?> + diff --git a/module/task/view/view.html.php b/module/task/view/view.html.php index 36b6b27265..f1ddf659d3 100644 --- a/module/task/view/view.html.php +++ b/module/task/view/view.html.php @@ -12,6 +12,7 @@ ?> + session->taskList != false ? $app->session->taskList : $this->createLink('execution', 'browse', "executionID=$task->execution");?> diff --git a/module/testcase/config.php b/module/testcase/config.php index ac692ac5d9..32edc0ffb5 100644 --- a/module/testcase/config.php +++ b/module/testcase/config.php @@ -88,54 +88,45 @@ $config->testcase->datatable->fieldList['id']['title'] = 'idAB'; $config->testcase->datatable->fieldList['id']['fixed'] = 'left'; $config->testcase->datatable->fieldList['id']['width'] = '70'; $config->testcase->datatable->fieldList['id']['required'] = 'yes'; -$config->testcase->datatable->fieldList['id']['sort'] = 'no'; $config->testcase->datatable->fieldList['product']['title'] = 'priAB'; $config->testcase->datatable->fieldList['product']['control'] = 'hidden'; $config->testcase->datatable->fieldList['product']['dataSource'] = array('module' => 'product', 'method' => 'getPairs', 'params' => '&0&&all'); -$config->testcase->datatable->fieldList['product']['sort'] = 'no'; $config->testcase->datatable->fieldList['module']['title'] = 'module'; $config->testcase->datatable->fieldList['module']['control'] = 'select'; $config->testcase->datatable->fieldList['module']['dataSource'] = array('module' => 'testcase', 'method' => 'getDatatableModules', 'params' => '$productID'); -$config->testcase->datatable->fieldList['module']['sort'] = 'no'; $config->testcase->datatable->fieldList['scene']['title'] = 'scene'; $config->testcase->datatable->fieldList['scene']['control'] = 'select'; $config->testcase->datatable->fieldList['scene']['dataSource'] = array('module' => 'testcase', 'method' => 'getSceneMenu', 'params' => '$productID&0'); -$config->testcase->datatable->fieldList['scene']['sort'] = 'no'; $config->testcase->datatable->fieldList['title']['title'] = 'title'; $config->testcase->datatable->fieldList['title']['fixed'] = 'left'; $config->testcase->datatable->fieldList['title']['width'] = 'auto'; $config->testcase->datatable->fieldList['title']['required'] = 'yes'; -$config->testcase->datatable->fieldList['title']['sort'] = 'no'; $config->testcase->datatable->fieldList['branch']['title'] = 'branch'; $config->testcase->datatable->fieldList['branch']['fixed'] = 'left'; $config->testcase->datatable->fieldList['branch']['width'] = '100'; $config->testcase->datatable->fieldList['branch']['required'] = 'no'; $config->testcase->datatable->fieldList['branch']['dataSource'] = array('module' => 'branch', 'method' => 'getPairs', 'params' => '$productID'); -$config->testcase->datatable->fieldList['branch']['sort'] = 'no'; $config->testcase->datatable->fieldList['pri']['title'] = 'priAB'; $config->testcase->datatable->fieldList['pri']['fixed'] = 'left'; $config->testcase->datatable->fieldList['pri']['width'] = '40'; $config->testcase->datatable->fieldList['pri']['required'] = 'no'; $config->testcase->datatable->fieldList['pri']['name'] = $lang->testcase->pri; -$config->testcase->datatable->fieldList['pri']['sort'] = 'no'; $config->testcase->datatable->fieldList['type']['title'] = 'type'; $config->testcase->datatable->fieldList['type']['fixed'] = 'no'; $config->testcase->datatable->fieldList['type']['width'] = '80'; $config->testcase->datatable->fieldList['type']['required'] = 'no'; -$config->testcase->datatable->fieldList['type']['sort'] = 'no'; $config->testcase->datatable->fieldList['assignedTo']['title'] = 'assignedTo'; $config->testcase->datatable->fieldList['assignedTo']['fixed'] = 'no'; $config->testcase->datatable->fieldList['assignedTo']['width'] = '90'; $config->testcase->datatable->fieldList['assignedTo']['required'] = 'no'; -$config->testcase->datatable->fieldList['assignedTo']['sort'] = 'no'; $config->testcase->datatable->fieldList['status']['title'] = 'statusAB'; if($app->rawMethod == 'cases') @@ -148,38 +139,32 @@ else } $config->testcase->datatable->fieldList['status']['fixed'] = 'no'; $config->testcase->datatable->fieldList['status']['required'] = 'no'; -$config->testcase->datatable->fieldList['status']['sort'] = 'no'; $config->testcase->datatable->fieldList['openedBy']['title'] = 'openedByAB'; $config->testcase->datatable->fieldList['openedBy']['fixed'] = 'no'; $config->testcase->datatable->fieldList['openedBy']['width'] = '80'; $config->testcase->datatable->fieldList['openedBy']['required'] = 'no'; -$config->testcase->datatable->fieldList['openedBy']['sort'] = 'no'; $config->testcase->datatable->fieldList['openedDate']['title'] = 'openedDate'; $config->testcase->datatable->fieldList['openedDate']['fixed'] = 'no'; $config->testcase->datatable->fieldList['openedDate']['width'] = '90'; $config->testcase->datatable->fieldList['openedDate']['required'] = 'no'; -$config->testcase->datatable->fieldList['openedDate']['sort'] = 'no'; $config->testcase->datatable->fieldList['stage']['title'] = 'stage'; $config->testcase->datatable->fieldList['stage']['fixed'] = 'no'; $config->testcase->datatable->fieldList['stage']['width'] = '110'; $config->testcase->datatable->fieldList['stage']['required'] = 'no'; $config->testcase->datatable->fieldList['stage']['control'] = 'multiple'; -$config->testcase->datatable->fieldList['stage']['sort'] = 'no'; $config->testcase->datatable->fieldList['precondition']['title'] = 'precondition'; $config->testcase->datatable->fieldList['precondition']['fixed'] = 'no'; $config->testcase->datatable->fieldList['precondition']['width'] = '120'; $config->testcase->datatable->fieldList['precondition']['required'] = 'no'; -$config->testcase->datatable->fieldList['precondition']['sort'] = 'no'; $config->testcase->datatable->fieldList['keywords']['title'] = 'keywords'; $config->testcase->datatable->fieldList['keywords']['fixed'] = 'no'; $config->testcase->datatable->fieldList['keywords']['width'] = '100'; $config->testcase->datatable->fieldList['keywords']['required'] = 'no'; -$config->testcase->datatable->fieldList['keywords']['sort'] = 'no'; $config->testcase->datatable->fieldList['story']['title'] = 'story'; $config->testcase->datatable->fieldList['story']['fixed'] = 'no'; @@ -187,55 +172,46 @@ $config->testcase->datatable->fieldList['story']['width'] = '90'; $config->testcase->datatable->fieldList['story']['required'] = 'no'; $config->testcase->datatable->fieldList['story']['control'] = 'select'; $config->testcase->datatable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getProductStoryPairs', 'params' => '$productID&$branch'); -$config->testcase->datatable->fieldList['story']['sort'] = 'no'; $config->testcase->datatable->fieldList['reviewedBy']['title'] = 'reviewedBy'; $config->testcase->datatable->fieldList['reviewedBy']['fixed'] = 'no'; $config->testcase->datatable->fieldList['reviewedBy']['width'] = '80'; $config->testcase->datatable->fieldList['reviewedBy']['required'] = 'no'; -$config->testcase->datatable->fieldList['reviewedBy']['sort'] = 'no'; $config->testcase->datatable->fieldList['reviewedDate']['title'] = 'reviewedDate'; $config->testcase->datatable->fieldList['reviewedDate']['fixed'] = 'no'; $config->testcase->datatable->fieldList['reviewedDate']['width'] = '90'; $config->testcase->datatable->fieldList['reviewedDate']['required'] = 'no'; -$config->testcase->datatable->fieldList['reviewedDate']['sort'] = 'no'; $config->testcase->datatable->fieldList['lastRunner']['title'] = 'lastRunner'; $config->testcase->datatable->fieldList['lastRunner']['fixed'] = 'no'; $config->testcase->datatable->fieldList['lastRunner']['width'] = '70'; $config->testcase->datatable->fieldList['lastRunner']['required'] = 'no'; -$config->testcase->datatable->fieldList['lastRunner']['sort'] = 'no'; $config->testcase->datatable->fieldList['lastRunDate']['title'] = 'lastRunDate'; $config->testcase->datatable->fieldList['lastRunDate']['fixed'] = 'no'; $config->testcase->datatable->fieldList['lastRunDate']['width'] = '90'; $config->testcase->datatable->fieldList['lastRunDate']['required'] = 'no'; -$config->testcase->datatable->fieldList['lastRunDate']['sort'] = 'no'; $config->testcase->datatable->fieldList['lastRunResult']['title'] = 'lastRunResult'; $config->testcase->datatable->fieldList['lastRunResult']['fixed'] = 'no'; $config->testcase->datatable->fieldList['lastRunResult']['width'] = '70'; $config->testcase->datatable->fieldList['lastRunResult']['required'] = 'no'; -$config->testcase->datatable->fieldList['lastRunResult']['sort'] = 'no'; $config->testcase->datatable->fieldList['lastEditedBy']['title'] = 'lastEditedBy'; $config->testcase->datatable->fieldList['lastEditedBy']['fixed'] = 'no'; $config->testcase->datatable->fieldList['lastEditedBy']['width'] = '92'; $config->testcase->datatable->fieldList['lastEditedBy']['required'] = 'no'; -$config->testcase->datatable->fieldList['lastEditedBy']['sort'] = 'no'; $config->testcase->datatable->fieldList['lastEditedDate']['title'] = 'lastEditedDate'; $config->testcase->datatable->fieldList['lastEditedDate']['fixed'] = 'no'; $config->testcase->datatable->fieldList['lastEditedDate']['width'] = '90'; $config->testcase->datatable->fieldList['lastEditedDate']['required'] = 'no'; -$config->testcase->datatable->fieldList['lastEditedDate']['sort'] = 'no'; $config->testcase->datatable->fieldList['version']['title'] = 'version'; $config->testcase->datatable->fieldList['version']['fixed'] = 'no'; $config->testcase->datatable->fieldList['version']['width'] = '60'; $config->testcase->datatable->fieldList['version']['required'] = 'no'; -$config->testcase->datatable->fieldList['version']['sort'] = 'no'; $config->testcase->datatable->fieldList['bugs']['title'] = 'B'; $config->testcase->datatable->fieldList['bugs']['fixed'] = 'no'; @@ -270,7 +246,10 @@ $config->testcase->search['fields']['scene'] = $lang->testcase->iScene; $config->testcase->search['params']['scene'] = array('operator' => 'belong', 'control' => 'select', 'values' => ''); $config->testcase->createscene = new stdclass(); -$config->testcase->createscene->requiredFields = 'title'; +$config->testcase->createscene->requiredFields = 'product,title'; + +$config->testcase->editscene = new stdclass(); +$config->testcase->editscene->requiredFields = 'product,title'; $config->testcase->customBatchCreateFields = 'module,scene,stage,story,pri,precondition,keywords,review'; $config->testcase->customBatchEditFields = 'module,scene,story,stage,precondition,status,pri,keywords'; diff --git a/module/testcase/control.php b/module/testcase/control.php index 8755d20e29..89b2d5a73c 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -87,7 +87,7 @@ class testcase extends control * @access public * @return void */ - public function browse($productID = 0, $branch = '', $browseType = 'all', $param = 0, $caseType = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1, $projectID = 0) + public function browse($productID = 0, $branch = '', $browseType = 'all', $param = 0, $caseType = '', $orderBy = 'sort_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1, $projectID = 0) { $this->loadModel('datatable'); $this->app->loadLang('zanode'); @@ -147,60 +147,76 @@ class testcase extends control $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); $sort = common::appendOrder($orderBy); - /* Get test cases. */ - $cases = $this->testcase->getTestCases($productID, $branch, $browseType, $browseType == 'bysearch' ? $queryID : $suiteID, $moduleID, $caseType, $sort, null); - $caseIdList = array(); - if(!empty($cases)) + $cases = array(); + $scenes = array(); + if($browseType == 'all') { - foreach($cases as $case) $caseIdList[] = $case->id; - } - /* Get top level cases and scenes.*/ - $productParam = $productID; - if(intval($productID) <= 0) - { - $productParam = array_keys($this->products); - if(count($productParam) > 1) unset($productParam[0]); - } + $pager->pageID = $pageID; // 场景和用例混排,$pageID 可能大于场景分页后的总页数。在 pager 构造函数中会被设为 1,这里要重新赋值。 - $queryCondition = ''; - $topObjects = $this->testcase->getList($productParam,$branch, $moduleID, $caseIdList, $pager, 'top', array(), $browseType); + $scenes = $this->testcase->getSceneGroups($productID, $branch, $moduleID, $caseType, $sort, $pager); // 获取包含子场景和用例的顶级场景树。 - /* Get children cases and scenes.*/ - $scenes = $this->testcase->getList($productParam, $branch,$moduleID, $caseIdList, null, 'child', array_keys($topObjects), $browseType, $queryCondition); - if(empty($topObjects) and $pageID > 1) - { - $pager = pager::init(0, $recPerPage, 1); - $topObjects = $this->testcase->getList($productParam, $branch, $moduleID, $caseIdList, $pager, 'top', array(),$browseType); - $scenes = $this->testcase->getList($productParam, $branch, $moduleID, $caseIdList, null, 'child', array_keys($topObjects), $browseType, $queryCondition); - } + if(!$this->cookie->onlyScene) + { + $recPerPage = $pager->recPerPage; + $sceneTotal = $pager->recTotal; + $sceneCount = count($scenes); - /* save session .*/ - $this->loadModel('common')->saveQueryCondition($queryCondition, 'testcase', false); + /* 场景条数小于每页记录数,继续获取用例。 */ + if($sceneCount < $recPerPage) + { + /* 重置 $pager 属性,只获取需要的用例条数。*/ + $pager->recTotal = 0; + $pager->pageID = 1; // 查询用例时的分页起始偏移量单独计算,每次查询的页码都设为 1 即可,后面会重新设置页码。 + $pager->recPerPage = $recPerPage - $sceneCount; // 可能存在场景没排满一页,需要用例补全的情况。这里只查询需要补全的记录数。 - /* Get summary. */ - $indCount = 0; - $topCount = 0; - $casesCount = 0; - foreach($scenes as $scene) - { - if($scene->isCase == '2' and $scene->parent == 0) $topCount ++; - if($scene->isCase == '1' and $scene->parent == 0) $indCount ++; - if($scene->isCase == '1') $casesCount ++; - } + if($sceneCount == 0) $pager->offset = $recPerPage * ($pageID - 1) - $sceneTotal; // 场景数为 0 表示本页查询只显示用例,需要计算用例分页的起始偏移量。 - if($this->cookie->onlyScene) - { - $summary = sprintf($this->lang->testcase->summaryScene, $topCount); + $cases = $this->testcase->getTestCases($productID, $branch, $browseType, $browseType == 'bysearch' ? $queryID : $suiteID, $moduleID, $caseType, $sort, $pager); + $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', false); + } + else + { + /* 场景和用例混排,总记录数需要合并后显示,这里是为了获取用例的总记录数。*/ + $cases = $this->testcase->getTestCases($productID, $branch, $browseType, $browseType == 'bysearch' ? $queryID : $suiteID, $moduleID, $caseType, $sort, $pager); + $cases = array(); + } + + /* 合并场景和用例的总记录数,并重新计算总页数和当前页码。*/ + $pager->recTotal += $sceneTotal; + $pager->recPerPage = $recPerPage; + $pager->pageTotal = ceil($pager->recTotal / $recPerPage); + $pager->pageID = $pageID; + } } else { - $summary = sprintf($this->lang->testcase->summary, $topCount, $indCount); + $cases = $this->testcase->getTestCases($productID, $branch, $browseType, $browseType == 'bysearch' ? $queryID : $suiteID, $moduleID, $caseType, $sort, $pager); + $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', false); + } + + $sceneCount = count($scenes); + $caseCount = count($cases); + if($this->cookie->onlyScene) + { + $summary = sprintf($this->lang->testcase->summaryScene, $sceneCount); + } + else + { + $summary = sprintf($this->lang->testcase->summary, $sceneCount, $caseCount); } /* Process case for check story changed. */ - $scenes = $this->loadModel('story')->checkNeedConfirm($scenes); - $scenes = $this->testcase->appendData($scenes); + $cases = $this->loadModel('story')->checkNeedConfirm($cases); + $cases = $this->testcase->appendData($cases); + foreach($cases as $case) + { + $case->id = 'case_' . $case->id; // Add a prefix to avoid duplication with the scene ID. + $case->parent = 0; + $case->grade = 1; + $case->path = ',' . $case->id . ','; + $case->isScene = false; + } /* Build the search form. */ $currentModule = $this->app->tab == 'project' ? 'project' : 'testcase'; @@ -253,7 +269,7 @@ class testcase extends control $this->view->product = $product; $this->view->productName = $this->products[$productID]; $this->view->modules = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $branch == 'all' ? '0' : $branch); - $this->view->iscenes = $this->testcase->getSceneMenu($productID, $moduleID, $viewType = 'case', $startSceneID = 0, 0); + $this->view->scenes = $this->testcase->getSceneMenu($productID, $moduleID, $viewType = 'case', $startSceneID = 0, 0); $this->view->moduleTree = $moduleTree; $this->view->moduleName = $moduleID ? $tree->name : $this->lang->tree->all; $this->view->moduleID = $moduleID; @@ -265,7 +281,7 @@ class testcase extends control $this->view->browseType = $browseType; $this->view->param = $param; $this->view->caseType = $caseType; - $this->view->cases = $cases; + $this->view->cases = array_merge($scenes, $cases); $this->view->branch = (!empty($product) and $product->type != 'normal') ? $branch : 0; $this->view->branchOption = $branchOption; $this->view->branchTagOption = $branchTagOption; @@ -276,8 +292,6 @@ class testcase extends control $this->view->showBranch = $showBranch; $this->view->libraries = $this->loadModel('caselib')->getLibraries(); $this->view->automation = $this->loadModel('zanode')->getAutomationByProduct($productID); - $this->view->scenes = $scenes; - $this->view->casesCount = $casesCount; $this->display(); } @@ -1111,7 +1125,8 @@ class testcase extends control public function batchEdit($productID = 0, $branch = 0, $type = 'case', $tab = '') { if(!$this->post->caseIDList) return print(js::locate($this->session->caseList)); - $caseIDList = array_unique($this->post->caseIDList); + + $caseIDList = array_filter($this->post->caseIDList); $testtasks = $this->loadModel('testtask')->getGroupByCases($caseIDList); if($this->post->title) { @@ -1328,11 +1343,11 @@ class testcase extends control */ public function batchReview($result) { - if(!$this->post->caseIDList) return print(js::locate($this->session->caseList, 'parent')); - $caseIdList = array_unique($this->post->caseIDList); - $actions = $this->testcase->batchReview($caseIdList, $result); - - if(dao::isError()) return print(js::error(dao::getError())); + if($this->post->caseIDList) + { + $this->testcase->batchReview($this->post->caseIDList, $result); + if(dao::isError()) return print(js::error(dao::getError())); + } echo js::locate($this->session->caseList, 'parent'); } @@ -1389,20 +1404,12 @@ class testcase extends control */ public function batchDelete($productID = 0) { - if(!$this->post->caseIDList) return print(js::locate($this->session->caseList)); - $caseIDList = array_unique($this->post->caseIDList); - - foreach($caseIDList as $caseID) + $this->post->caseIDList = $this->post->caseIDList ? $this->post->caseIDList : array(); + $this->post->sceneIDList = $this->post->sceneIDList ? $this->post->sceneIDList : array(); + if($this->post->caseIDList || $this->post->sceneIDList) { - $vs = $this->dao->findById((int)$caseID)->from(VIEW_SCENECASE)->fetch(); - if($vs->isCase == 2) - { - $this->testcase->delete(TABLE_SCENE, $caseID-CHANGEVALUE); - } - else - { - $this->testcase->delete(TABLE_CASE, $caseID); - } + $this->testcase->batchDelete($this->post->caseIDList, $this->post->sceneIDList); + if(dao::isError()) return print(js::error(dao::getError())); } echo js::locate($this->session->caseList); } @@ -1416,19 +1423,10 @@ class testcase extends control */ public function batchChangeBranch($branchID) { - if($this->post->caseIDList) + if($this->post->caseIDList || $this->post->sceneIDList) { - $caseIDList = $this->post->caseIDList; - $caseIDList = array_unique($caseIDList); - unset($_POST['caseIDList']); - $allChanges = $this->testcase->batchChangeBranch($caseIDList, $branchID); + $this->testcase->batchChangeBranch($this->post->caseIDList, $this->post->sceneIDList, $branchID); if(dao::isError()) return print(js::error(dao::getError())); - foreach($allChanges as $caseID => $changes) - { - $this->loadModel('action'); - $actionID = $this->action->create('case', $caseID, 'Edited'); - $this->action->logHistory($actionID, $changes); - } } echo js::locate($this->session->caseList, 'parent'); @@ -1443,33 +1441,10 @@ class testcase extends control */ public function batchChangeModule($moduleID) { - if($this->post->caseIDList) + if($this->post->caseIDList || $this->post->sceneIDList) { - $caseIDList = $this->post->caseIDList; - $caseIDList = array_unique($caseIDList); - unset($_POST['caseIDList']); - $allChanges = $this->testcase->batchChangeModule($caseIDList, $moduleID); + $this->testcase->batchChangeModule($this->post->caseIDList, $this->post->sceneIDList, $moduleID); if(dao::isError()) return print(js::error(dao::getError())); - - if (!empty($allChanges[1])) - { - foreach($allChanges[1] as $caseID => $changes) - { - $this->loadModel('action'); - $actionID = $this->action->create('case', $caseID, 'Edited'); - $this->action->logHistory($actionID, $changes); - } - } - - if (!empty($allChanges[0])) - { - foreach($allChanges[0] as $sceneID => $changes) - { - $this->loadModel('action'); - $actionID = $this->action->create('scene', $sceneID, 'Edited'); - $this->action->logHistory($actionID, $changes); - } - } } echo js::locate($this->session->caseList, 'parent'); @@ -1478,17 +1453,17 @@ class testcase extends control /** * Batch review case. * - * @param string $result + * @param string $type * @access public * @return void */ - public function batchCaseTypeChange($result) + public function batchCaseTypeChange($type) { - if(!$this->post->caseIDList) return print(js::locate($this->session->caseList, 'parent')); - $caseIdList = array_unique($this->post->caseIDList); - $this->testcase->batchCaseTypeChange($caseIdList, $result); - - if(dao::isError()) return print(js::error(dao::getError())); + if($this->post->caseIDList) + { + $this->testcase->batchCaseTypeChange($this->post->caseIDList, $type); + if(dao::isError()) return print(js::error(dao::getError())); + } echo js::locate($this->session->caseList, 'parent'); } @@ -1713,10 +1688,11 @@ class testcase extends control */ public function batchConfirmStoryChange($productID = 0) { - if(!$this->post->caseIDList) return print(js::locate($this->session->caseList)); - $caseIDList = array_unique($this->post->caseIDList); - - foreach($caseIDList as $caseID) $this->confirmStoryChange($caseID,false); + if($this->post->caseIDList) + { + $caseIDList = array_filter($this->post->caseIDList); + foreach($caseIDList as $caseID) $this->confirmStoryChange($caseID,false); + } echo js::locate($this->session->caseList); } @@ -2565,42 +2541,26 @@ class testcase extends control } /** - * Create scene. + * Create a scene. * * @param int $productID - * @param int $branch + * @param string $branch * @param int $moduleID - * @param string $from - * @param string $param - * @param int $storyID - * @param string $extras * @access public * @return void */ - public function createScene($productID, $branch = '', $moduleID = 0, $from = '', $param = 0, $storyID = 0, $extras = '') + public function createScene($productID, $branch = '', $moduleID = 0) { - if(!empty($_POST)) + if($_POST) { - $response['result'] = 'success'; setcookie('lastCaseScene', (int)$this->post->parent, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, false); - $sceneResult = $this->testcase->createScene(); - if(!$sceneResult or dao::isError()) - { - $response['result'] = 'fail'; - $response['message'] = dao::getError(); - return $this->send($response); - } + $sceneID = $this->testcase->createScene(); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - $sceneID = $sceneResult['id']; - $this->loadModel('action'); - $this->action->create('scene', $sceneID, 'Opened'); - - $useSession = $this->app->tab != 'qa' and $this->session->caseList and strpos($this->session->caseList, 'dynamic') === false; - $response['locate'] = $useSession ? $this->session->caseList : $this->createLink('testcase', 'browse', "root={$this->post->product}&branch=$branch&type=byModule¶m=" . $this->post->module); - $response['message'] = $this->lang->saveSuccess; - - return $this->send($response); + $useSession = $this->app->tab != 'qa' && $this->session->caseList && strpos($this->session->caseList, 'dynamic') === false; + $locate = $useSession ? $this->session->caseList : inlink('browse', "productID={$this->post->product}&branch={$this->post->branch}&browseType=all¶m={$this->post->module}"); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate)); } /* Set menu. */ @@ -2617,43 +2577,26 @@ class testcase extends control /* Set branch. */ $product = $this->product->getById($productID); if(!isset($this->products[$productID])) $this->products[$productID] = $product->name; - if($this->app->tab == 'execution' or $this->app->tab == 'project') + if($this->app->tab == 'execution' || $this->app->tab == 'project') { $objectID = $this->app->tab == 'project' ? $this->session->project : $executionID; - $productBranches = (isset($product->type) and $product->type != 'normal') ? $this->loadModel('execution')->getBranchByProduct($productID, $objectID, 'noclosed|withMain') : array(); + $productBranches = (isset($product->type) && $product->type != 'normal') ? $this->loadModel('execution')->getBranchByProduct($productID, $objectID, 'noclosed|withMain') : array(); $branches = isset($productBranches[$productID]) ? $productBranches[$productID] : array(); $branch = key($branches); } else { - $branches = (isset($product->type) and $product->type != 'normal') ? $this->loadModel('branch')->getPairs($productID, 'active') : array(); + $branches = (isset($product->type) && $product->type != 'normal') ? $this->loadModel('branch')->getPairs($productID, 'active') : array(); } - $currentModuleID = $moduleID ? (int)$moduleID : (int)$this->cookie->lastCaseModule; - $currentParentID = (int)$this->cookie->lastCaseScene; - - $modules = array(); - if($currentModuleID) - { - $productModules = $this->tree->getOptionMenu($productID, 'story'); - $storyModuleID = array_key_exists($currentModuleID, $productModules) ? $currentModuleID : 0; - $modules = $this->loadModel('tree')->getStoryModule($storyModuleID); - $modules = $this->tree->getAllChildID($modules); - } - - $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testcase->newScene; - $this->view->productID = $productID; - $this->view->currentModuleID = $currentModuleID; - $this->view->currentParentID = $currentParentID; - $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('testcase', 'browse', "productID=$productID") : ''; - $this->view->showFields = $this->config->testcase->custom->createFields; - $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, ($branch === 'all' or !isset($branches[$branch])) ? 0 : $branch); - $this->view->branch = $branch; - $this->view->product = $product; - $this->view->branches = $branches; - $this->view->sceneTitle = ''; - $this->view->sceneOptionMenu = $this->testcase->getSceneMenu($productID, $moduleID, $viewType = 'case', $startSceneID = 0, ($branch === 'all' or !isset($branches[$branch])) ? 0 : $branch); - + $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testcase->newScene; + $this->view->modules = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, ($branch === 'all' || !isset($branches[$branch])) ? 0 : $branch); + $this->view->scenes = $this->testcase->getSceneMenu($productID, $moduleID, $viewType = 'case', $startSceneID = 0, ($branch === 'all' || !isset($branches[$branch])) ? 0 : $branch); + $this->view->moduleID = $moduleID ? (int)$moduleID : (int)$this->cookie->lastCaseModule; + $this->view->parent = (int)$this->cookie->lastCaseScene; + $this->view->product = $product; + $this->view->branch = $branch; + $this->view->branches = $branches; $this->display(); } @@ -2663,301 +2606,116 @@ class testcase extends control * @param int $productID * @param int $branch * @param int $moduleID - * @param int $stype - * @param int $storyID - * @param bool $onlyOption - * @param string $status - * @param string $limit - * @param string $type - * @param int $hasParent - * @param string $number - * @param int $currentScene + * @param string $element + * @param int $sceneID + * @param int $number + * @param int $ditto * @access public * @return void */ - public function ajaxGetModuleScenes($productID, $branch = 0, $moduleID = 0, $stype = 1, $storyID = 0, $onlyOption = 'false', $status = '', $limit = 0, $type = 'full', $hasParent = 1, $number = '', $currentScene = 0) + public function ajaxGetScenes($productID, $branch = 0, $moduleID = 0, $element = 'scene', $sceneID = 0, $number = 0, $ditto = 0) { - $optionMenu = $this->testcase->getSceneMenu($productID, $moduleID, 'case', 0, $branch, $currentScene); - $output = ($stype == 1) ? html::select("parent", $optionMenu, "", "class='form-control'") : $output = html::select("scene".$number, $optionMenu, array('' => ''), "class='form-control'"); + $scenes = $this->testcase->getSceneMenu($productID, $moduleID, 'case', 0, $branch, $sceneID); - die($output); - } + if($ditto) $scenes['ditto'] = $this->lang->testcase->ditto; - /** - * Ajax get option menu. - * - * @param int $rootID - * @param string $viewType - * @param int $branch - * @param int $rootModuleID - * @param string $returnType - * @param string $fieldID - * @param bool $needManage - * @param string $extra - * @param int $currentModuleID - * @access public - * @return void - */ - public function ajaxGetOptionMenu($rootID, $viewType = 'story', $branch = 0, $rootModuleID = 0, $returnType = 'html', $fieldID = '', $needManage = false, $extra = '', $currentModuleID = 0) - { - $this->loadModel('tree'); - - if($viewType == 'task') - { - $optionMenu = $this->tree->getTaskOptionMenu($rootID, 0, 0, $extra); - } - else - { - $optionMenu = $this->tree->getOptionMenu($rootID, $viewType, $rootModuleID, $branch); - } - - if($returnType == 'html') - { - if($viewType == 'line') - { - $lineID = $this->dao->select('id')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq(0)->orderBy('id_desc')->limit(1)->fetch('id'); - $output = html::select("line", $optionMenu, $lineID, "class='form-control'"); - $output .= ""; - $output .= html::a($this->createLink('tree', 'browse', "rootID=$rootID&view=$viewType¤tModuleID=0&branch=$branch", '', true), $viewType == 'line' ? $this->lang->tree->manageLine : $this->lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'"); - $output .= ''; - } - else - { - $changeFunc = ''; - if($viewType == 'bug' or $viewType == 'case') $changeFunc = "onchange='loadModuleRelatedNew()'"; - if($viewType == 'task') $changeFunc = ""; - $field = $fieldID ? "modules[$fieldID]" : 'module'; - - $currentModule = $this->tree->getById($currentModuleID); - $currentModuleID = (isset($currentModule->branch) and $currentModule->branch == 0) ? $currentModuleID : 0; - - $output = html::select("$field", $optionMenu, $currentModuleID, "class='form-control' $changeFunc"); - if(count($optionMenu) == 1 and $needManage) - { - $output .= ""; - $output .= html::a($this->createLink('tree', 'browse', "rootID=$rootID&view=$viewType¤tModuleID=0&branch=$branch", '', true), $this->lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'"); - $output .= '  '; - $output .= html::a("javascript:void(0)", $this->lang->refreshIcon, '', "class='refresh' onclick='loadProductModulesNew($rootID)'"); - $output .= ''; - } - } - die($output); - } - - if($returnType == 'mhtml') - { - $changeFunc = ''; - if($viewType == 'bug' or $viewType == 'case') $changeFunc = "onchange='loadModuleRelatedNew()'"; - if($viewType == 'task') $changeFunc = ""; - $field = $fieldID ? "modules[$fieldID]" : 'module'; - $output = html::select("$field", $optionMenu, '', "class='input' $changeFunc"); - die($output); - } - - if($returnType == 'json') die(json_encode($optionMenu)); - } - - /** - * Ajax get scenes. - * - * @param int $productID - * @param int $branch - * @param int $moduleID - * @param int $stype - * @param int $storyID - * @param bool $onlyOption - * @param string $status - * @param string $limit - * @param string $type - * @param int $hasParent - * @param string $number - * @param int $currentScene - * @access public - * @return void - */ - public function ajaxGetScenesForBC($productID, $branch = 0, $moduleID = 0, $stype = 1, $storyID = 0, $onlyOption = 'false', $status = '', $limit = 0, $type = 'full', $hasParent = 1, $number = '', $currentScene = 0) - { - $optionMenu = $this->testcase->getSceneMenu($productID, $moduleID, 'case', 0, $branch, $currentScene); - $optionMenu['ditto'] = $this->lang->testcase->ditto; - - if($stype == 1) - { - $output = html::select("parent", $optionMenu, "", "class='form-control'"); - } - else - { - $output = html::select("scene" . $number, $optionMenu, array('' => ''), "class='form-control'"); - } - - die($output); + die(html::select($number ? "{$element}[{$number}]" : $element, $scenes, '', "class='form-control'")); } /** * Batch change scene. * - * @param int $sceneId + * @param int $sceneID * @access public * @return void */ - public function batchChangeScene($sceneId) + public function batchChangeScene($sceneID) { if($this->post->caseIDList) { - $caseIDList = $this->post->caseIDList; - $caseIDList = array_unique($caseIDList); - unset($_POST['caseIDList']); - $allChanges = $this->testcase->batchChangeScene($caseIDList, $sceneId); + $this->testcase->batchChangeScene($this->post->caseIDList, $sceneID); if(dao::isError()) return print(js::error(dao::getError())); - - if(!empty($allChanges[1])) - { - foreach($allChanges[1] as $caseID => $changes) - { - $this->loadModel('action'); - $actionID = $this->action->create('case', $caseID, 'Edited'); - } - } - - if(!empty($allChanges[0])) - { - foreach($allChanges[0] as $sceneID => $changes) - { - $this->loadModel('action'); - $actionID = $this->action->create('scene', $sceneID - CHANGEVALUE, 'Edited'); - } - } } echo js::locate($this->session->caseList, 'parent'); } /** - * Change scene. + * Change scene of a case or change parent of a scene. * * @access public - * @return void + * @return bool */ public function changeScene() { - $now = helper::now(); - $currentID = $this->post->sourceId; - $targetId = $this->post->targetId; + $sourceID = $this->post->sourceID; + $sceneID = $this->post->targetID; + if($sourceID == $sceneID) return false; - $targetScene = $this->dao->findById((int)$targetId)->from(VIEW_SCENECASE)->fetch(); - $currentScene = $this->dao->findById((int)$currentID)->from(VIEW_SCENECASE)->fetch(); - - $product = $targetScene->product; - $module = $targetScene->module; - if($targetScene->isCase == 2) + if(strpos($sourceID, 'case_') !== false) { - if($currentScene->isCase == 2) - { - $childPath = $targetScene->path . "$currentID,"; - $grade = $targetScene->grade + 1; + $caseID = str_replace('case_', '', $sourceID); + $oldCase = $this->dao->select('scene')->from(TABLE_CASE)->where('id')->eq($caseID)->fetch(); + if($oldCase->scene == $sceneID) return false; - $this->dao->update(TABLE_SCENE)->set('parent')->eq($targetId) - ->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->set('product')->eq($product) - ->set('module')->eq($module) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq($now) - ->where('id')->eq($currentID-CHANGEVALUE) - ->exec(); + $this->dao->update(TABLE_CASE)->set('scene')->eq($sceneID)->where('id')->eq($caseID)->exec(); + if(dao::isError()) return false; - $children = $this->dao->select('*')->from(VIEW_SCENECASE) - ->where('deleted')->eq(0) - ->andWhere('path')->like("%,$currentID,%") - ->orderBy('grade') - ->fetchAll('id'); + $newCase = new stdclass(); + $newCase->scene = $sceneID; - foreach($children as $id => $childScene) - { - if($id && $id != $currentID) - { - if($childScene->parent) - { - $parentScene = $this->dao->findById((int)$childScene->parent-CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - if($childScene->isCase == 2) - { - if($childScene->grade > $currentScene->grade) - { - $childPath = $parentScene->path . "$id,"; - $grade = $parentScene->grade + 1; + $changes = common::createChanges($oldCase, $newCase); + $actionID = $this->loadModel('action')->create('case', $caseID, 'edited'); + $this->action->logHistory($actionID, $changes); - $this->dao->update(TABLE_SCENE)->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->set('product')->eq($parentScene->product) - ->set('module')->eq($parentScene->module) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq($now) - ->where('id')->eq($id - CHANGEVALUE) - ->exec(); - } - } - else - { - $this->dao->update(TABLE_CASE) - ->set('product')->eq($parentScene->product) - ->set('module')->eq($parentScene->module) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq($now) - ->where('id')->eq($id) - ->exec(); - } - } - } - } - } - else - { - $this->dao->update(TABLE_CASE)->set('scene')->eq($targetId) - ->set('product')->eq($product) - ->set('module')->eq($module) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq($now) - ->where('id')->eq($currentID) - ->exec(); - } + return !dao::isError(); } + + $oldScene = $this->testcase->getSceneByID($sourceID); + $newScene = $this->testcase->getSceneByID($sceneID); + $oldParentPath = substr($oldScene->path, 0, strpos($oldScene->path, ",{$oldScene->id},") + strlen(",{$oldScene->id},")); + + $this->dao->update(TABLE_SCENE)->set('parent')->eq($sceneID)->where('id')->eq($oldScene->id)->exec(); + $this->dao->update(TABLE_SCENE) + ->set('product')->eq($newScene->product) + ->set('branch')->eq($newScene->branch) + ->set('module')->eq($newScene->module) + ->set("grade=grade + {$newScene->grade} + 1 - {$oldScene->grade}") + ->set("path=REPLACE(path, '{$oldParentPath}', '{$newScene->path}{$oldScene->id},')") + ->where('path')->like("{$oldScene->path}%") + ->exec(); + + return !dao::isError(); } /** - * Delete scene. + * Delete a scene. * - * @param int $sceneId + * @param int $sceneID * @param string $confirm * @access public * @return void */ public function deleteScene($sceneID, $confirm = 'no') { - $scene = $this->dao->select('*')->from(VIEW_SCENECASE)->where('id')->eq($sceneID)->andWhere('isCase')->eq(2)->fetch(); + $scene = $this->testcase->getSceneByID($sceneID); if($confirm == 'no') return print(js::confirm(sprintf($this->lang->testcase->confirmDeleteScene,addslashes($scene->title)), $this->createLink('testcase', 'deleteScene', "sceneID=$sceneID&confirm=yes"))); - $childrenCount = $this->dao->select('count(*) as count')->from(VIEW_SCENECASE)->where('parent')->eq($sceneID)->andWhere('deleted')->eq(0)->fetch('count'); + $childrenCount = $this->dao->select('COUNT(*) AS count')->from(TABLE_SCENE)->where('deleted')->eq('0')->andWhere('parent')->eq($sceneID)->fetch('count'); if($childrenCount) { if($confirm != "wait") return print(js::confirm(sprintf($this->lang->testcase->hasChildren), $this->createLink('testcase', 'deleteScene', "sceneID=$sceneID&confirm=wait"))); - $all = $this->dao->select('id,isCase')->from(VIEW_SCENECASE)->where('path')->like($scene->path . '%')->andWhere('deleted')->eq(0)->fetchAll(); - foreach($all as $v) - { - if($v->isCase == 2) - { - $this->testcase->delete(TABLE_SCENE, $v->id - CHANGEVALUE); - } - else - { - $this->testcase->delete(TABLE_CASE, $v->id); - } - } + $scenes = $this->dao->select('id')->from(TABLE_SCENE)->where('deleted')->eq('0')->andWhere('path')->like($scene->path . '%')->fetchPairs(); + $this->dao->update(TABLE_SCENE)->set('deleted')->eq('1')->where('deleted')->eq(0)->andWhere('path')->like($scene->path . '%')->exec(); + + $this->loadModel('action'); + foreach($scenes as $sceneID) $this->action->create('scene', $sceneID, 'deleted', '', $extra = ACTIONMODEL::CAN_UNDELETED); } else { - - $this->testcase->delete(TABLE_SCENE, $sceneID-CHANGEVALUE); + $this->testcase->delete(TABLE_SCENE, $sceneID); } echo js::reload('parent'); @@ -2966,123 +2724,58 @@ class testcase extends control /** * Edit scene. * - * @param int $sceneId - * @param int $executionID + * @param int $sceneID * @access public * @return void */ - public function editScene($sceneID, $executionID = 0) + public function editScene($sceneID) { - $this->loadModel('story'); + $scene = $this->testcase->getSceneByID($sceneID); + if(!$scene) return print(js::error($this->lang->notFound) . js::locate('back')); - /* Update scene. */ - if(!empty($_POST)) + if($_POST) { - $changes = array(); - $files = array(); - - $sceneResult = $this->testcase->updateScene($sceneID); - if(!$sceneResult or dao::isError()) - { - $response['result'] = 'fail'; - $response['message'] = dao::getError(); - return $this->send($response); - } - - $this->loadModel('action'); - $sceneID = $sceneResult['id']; - - $this->action->create('scene', $sceneID - CHANGEVALUE, 'Edited'); - $this->executeHooks($sceneID); + $this->testcase->updateScene($sceneID); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'success', 'data' => $sceneID)); - $scene = $this->dao->findById((int)$sceneID - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $product = $scene->product; - $this->executeHooks($product); - - setcookie('caseModule', $scene->module, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); - - if(!$scene->module) return print(js::locate($this->createLink('testcase', 'browse', "productID=$product"), 'parent')); - - return print(js::locate($this->createLink('testcase', 'browse', "root=$product&branch=0&type=byModule¶m={$scene->module}"), 'parent')); + $useSession = $this->app->tab != 'qa' && $this->session->caseList && strpos($this->session->caseList, 'dynamic') === false; + $locate = $useSession ? $this->session->caseList : inlink('browse', "productID={$this->post->product}&branch={$this->post->branch}&browseType=all¶m={$this->post->module}"); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate)); } - /* Get scene. */ - $scene = $this->dao->select('*')->from(VIEW_SCENECASE)->where('id')->eq($sceneID)->andWhere('isCase')->eq(2)->fetch(); - - if(!$scene) return print(js::error($this->lang->notFound) . js::locate('back')); - $productID = $scene->product; - $product = $this->product->getById($productID); + $product = $this->product->getByID($productID); if(!isset($this->products[$productID])) $this->products[$productID] = $product->name; - $title = $this->products[$productID] . $this->lang->colon . $this->lang->testcase->editScene; - $position[] = html::a($this->createLink('testcase', 'browse', "productID=$productID"), $this->products[$productID]); - /* Set menu. */ if($this->app->tab == 'project') $this->loadModel('project')->setMenu(null); if($this->app->tab == 'qa') $this->testcase->setMenu($this->products, $productID, $scene->branch); /* Display status of branch. */ - $branches = $this->loadModel('branch')->getList($productID, isset($objectID) ? $objectID : 0, 'all'); - $branchTagOption = array(); - foreach($branches as $branchInfo) + $branches = array(); + $branchList = $this->loadModel('branch')->getList($productID, 0, 'all'); + foreach($branchList as $branch) $branches[$branch->id] = $branch->name . ($branch->status == 'closed' ? ' (' . $this->lang->branch->statusList['closed'] . ')' : ''); + if(!isset($branches[$scene->branch])) { - $branchTagOption[$branchInfo->id] = $branchInfo->name . ($branchInfo->status == 'closed' ? ' (' . $this->lang->branch->statusList['closed'] . ')' : ''); + $caseBranch = $this->branch->getByID($scene->branch, $scene->product, ''); + if($caseBranch) $branches[$scene->branch] = $caseBranch->name . ($caseBranch->status == 'closed' ? ' (' . $this->lang->branch->statusList['closed'] . ')' : ''); } - if(!isset($branchTagOption[$scene->branch])) - { - $caseBranch = $this->branch->getById($scene->branch, $scene->product, ''); - $branchTagOption[$scene->branch] = $scene->branch == BRANCH_MAIN ? $caseBranch : ($caseBranch->name . ($caseBranch->status == 'closed' ? ' (' . $this->lang->branch->statusList['closed'] . ')' : '')); - } + $modules = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $scene->branch); + if(!isset($modules[$scene->module])) $modules += $this->tree->getModulesName($scene->module); - $moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $scene->branch); - - if(!isset($moduleOptionMenu[$scene->module])) $moduleOptionMenu += $this->tree->getModulesName($scene->module); - - if($scene->module) - { - $sceneOptionMenu = $this->testcase->getSceneMenu($productID, $scene->module, $viewType = 'case', $startSceneID = 0, $scene->branch, $sceneID); - } - else - { - $sceneOptionMenu = $this->testcase->getSceneMenu($productID, 0, $viewType = 'case', $startSceneID = 0, $scene->branch, $sceneID); - } - - if(!isset($sceneOptionMenu[$scene->parent])) $sceneOptionMenu += $this->testcase->getScenesName($scene->parent); - - /* Get product and branches. */ - if($this->app->tab == 'execution' or $this->app->tab == 'project') - { - $objectID = $this->app->tab == 'project' ? $scene->project : $executionID; - } - - $this->view->productID = $productID; - $this->view->product = $product; - $this->view->products = $this->products; - $this->view->branchTagOption = $branchTagOption; - $this->view->productName = $this->products[$productID]; - $this->view->moduleOptionMenu = $moduleOptionMenu; - $this->view->sceneOptionMenu = $sceneOptionMenu; - $this->view->stories = $this->story->getProductStoryPairs($productID, $scene->branch, 0, 'all','id_desc', 0, 'full', 'story', false); - - $forceNotReview = $this->testcase->forceNotReview(); - if($forceNotReview) unset($this->lang->testcase->statusList['wait']); - - $this->view->title = $title; - $this->view->branch = 0; - $this->view->currentModuleID = $scene->module; - $this->view->currentParentID = $scene->parent; - $this->view->users = $this->user->getPairs('noletter'); - - $this->view->actions = $this->loadModel('action')->getList('case', $sceneID); - $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('testcase', 'browse', "productID=$productID") : ''; - $this->view->forceNotReview = $forceNotReview; - $this->view->scene = $scene; - $this->view->executionID = $executionID; + $scenes = $this->testcase->getSceneMenu($productID, $scene->module, $viewType = 'case', $startSceneID = 0, $scene->branch, $sceneID); + if(!isset($scenes[$scene->parent])) $scenes += $this->testcase->getScenesName($scene->parent); + $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testcase->editScene; + $this->view->products = $this->products; + $this->view->product = $product; + $this->view->branches = $branches; + $this->view->modules = $modules; + $this->view->scenes = $scenes; + $this->view->scene = $scene; $this->display(); } @@ -3094,37 +2787,46 @@ class testcase extends control */ public function updateOrder() { - $idList = explode(',', trim($this->post->scenes, ',')); - $orderBy = $this->post->orderBy; - if(strpos($orderBy, 'sort') === false) return false; - /* Get list of original scenes and cases, and sort with orderBy param. */ - $scenesMap = $this->dao->select('id,sort,isCase')->from(VIEW_SCENECASE)->where('id')->in($idList)->orderBy($orderBy)->fetchAll('id'); + $type = $this->post->type; + $sourceID = $this->post->sourceID; + $targetID = $this->post->targetID; + $dataList = $this->post->dataList; + if(!$type || !$sourceID || !$targetID || !$dataList) return false; + if($sourceID == $targetID) return false; - foreach($scenesMap as $scene) + $idList = array_map(function($data){return $data['id'];}, $dataList); + $orderList = array_map(function($data){return $data['order'];}, $dataList); + $sourceIndex = array_search($sourceID, $idList); + $targetIndex = array_search($targetID, $idList); + + if($sourceIndex === false || $targetIndex === false) return false; + + if($sourceIndex > $targetIndex) { - /* Compare with sorted list from front-end. */ - $newID = array_shift($idList); - if($scene->id == $newID) continue; - - /* Change sort value of scene. */ - if ($scenesMap[$newID]->isCase == 2) + $idList = array_slice($idList, $targetIndex, $sourceIndex - $targetIndex + 1); + $orderList = array_slice($orderList, $targetIndex, $sourceIndex - $targetIndex + 1); + array_unshift($idList, array_pop($idList)); + } + else + { + $idList = array_slice($idList, $sourceIndex, $targetIndex - $sourceIndex + 1); + $orderList = array_slice($orderList, $sourceIndex, $targetIndex - $sourceIndex + 1); + if(count($idList) == 2) { - $this->dao->update(TABLE_SCENE) - ->set('sort')->eq($scene->sort) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq(helper::now()) - ->where('id')->eq($newID - CHANGEVALUE) - ->exec(); - continue; + $idList = array_reverse($idList); } + else + { + array_splice($idList, -1, 0, array_shift($idList)); + } + } - /* Change sort value of case. */ - $this->dao->update(TABLE_CASE) - ->set('sort')->eq($scene->sort) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq(helper::now()) - ->where('id')->eq($newID) - ->exec(); + $table = $type == 'case' ? TABLE_CASE : TABLE_SCENE; + + foreach($idList as $key => $id) + { + if(!isset($orderList[$key])) continue; + $this->dao->update($table)->set('sort')->eq($orderList[$key])->where('id')->eq($id)->exec(); } } diff --git a/module/testcase/js/batchcreate.js b/module/testcase/js/batchcreate.js index 63af5d7798..bce6d7b4a7 100644 --- a/module/testcase/js/batchcreate.js +++ b/module/testcase/js/batchcreate.js @@ -96,7 +96,7 @@ function loadScenes(productID, moduleID, num) var branchID = $(branchIDName + num).val(); if(!branchID) branchID = 0; - var sceneLink = createLink('testcase', 'ajaxGetScenesForBC', 'productID=' + productID + '&branch=' + branchID + '&moduleID=' + moduleID + '&stype=2&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1&number=' + num); + var sceneLink = createLink('testcase', 'ajaxGetScenes', 'productID=' + productID + '&branch=' + branchID + '&moduleID=' + moduleID + '&element=scene&sceneID=0&number=' + num + '&ditto=1'); $.get(sceneLink, function(scenes) { if(!scenes) scenes = ''; @@ -104,21 +104,13 @@ function loadScenes(productID, moduleID, num) { for(var i = num; i <= rowIndex ; i ++) { - //if(i != num && $('#scene' + i).val() != 'ditto') break; - var nowScenes = scenes.replaceAll('scene' + num, 'scene' + i); $('#scene' + i).replaceWith(nowScenes); if(canSceneDitto(i) == false) $('#scene' + i).find("option:last").remove(); $('#scene' + i + "_chosen").remove(); $('#scene' + i).next('.picker').remove(); $('#scene' + i).attr('name', 'scene[' + i + ']'); - $('#scene' + i).picker(); - - if (i != num) - { - var myPicker = $('#scene' + i).data('zui.picker'); - myPicker && myPicker.setValue("ditto"); - } + $('#scene' + i).chosen(); } } else @@ -127,7 +119,7 @@ function loadScenes(productID, moduleID, num) $('#scene' + num + "_chosen").remove(); $('#scene' + num).next('.picker').remove(); $('#scene' + num).attr('name', 'scene[' + num + ']'); - $('#scene' + num).picker(); + $('#scene' + num).chosen(); } }); } diff --git a/module/testcase/js/batchedit.js b/module/testcase/js/batchedit.js index 19a84bd7d1..8427c5aa00 100644 --- a/module/testcase/js/batchedit.js +++ b/module/testcase/js/batchedit.js @@ -162,9 +162,8 @@ $(document).on('change', 'select', function() function loadStories2(productID, moduleID, num) { - var branchIDName = (config.currentMethod == 'batchcreate' || config.currentMethod == 'showimport') ? '#branch' : '#branches'; - var branchID = $(branchIDName + num).val(); - var storyLink = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branchID + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1&objectID=0&number=' + num); + var branch = $('#branches' + num).val(); + var storyLink = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1&objectID=0&number=' + num); $.get(storyLink, function(stories) { if(!stories) stories = ''; @@ -191,8 +190,8 @@ function loadStories2(productID, moduleID, num) } }); - branch = 0; - link = createLink('testcase', 'ajaxGetModuleScenes', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&stype=2&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1&number=' + num); + const sceneID = $('#scene' + num).val(); + const link = createLink('testcase', 'ajaxGetScenes', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&element=scene&sceneID=' + sceneID + '&number=' + num); $.get(link, function(scenes){ if(!scenes) scenes = ''; if(config.currentMethod == 'batchcreate') diff --git a/module/testcase/js/browse.js b/module/testcase/js/browse.js index 84aa8406b6..f35b0d0e20 100644 --- a/module/testcase/js/browse.js +++ b/module/testcase/js/browse.js @@ -1,3 +1,12 @@ +window.setCheckedCookie = function() { + var checkeds = []; + var $checkboxes = $('#mainContent .main-table tbody>tr input[type="checkbox"][name^=caseIDList]:checked'); + $checkboxes.each(function() { + checkeds.push($(this).val()); + }); + $.cookie('checkedItem', checkeds.join(','), {expires: config.cookieLife, path: config.webRoot}); +}; + /** * Confirm batch delete cases. * @@ -24,11 +33,11 @@ $(function() $('#importToLib').on('click', function() { - var storyIdList = ''; + var caseIdList = ''; $("input[name^='caseIDList']:checked").each(function() { - storyIdList += $(this).val() + ','; - $('#caseIdList').val(storyIdList); + caseIdList += $(this).val() + ','; + $('#caseIdList').val(caseIdList); }); }); @@ -61,12 +70,13 @@ var DtSort = {}; DtSort.defaultConfig = { idAttrName: 'data-id', parentAttrName: 'data-parent', - dataNestedAttrName: 'data-nested', + productAttrName: 'data-product', + orderAttrName: 'data-order', nestPathAttrName: 'data-nest-path', - dataTypeAttrName: 'data-itype', + isSceneAttrName: 'data-is-scene', moveBuffer: 2, - canAccept: function(source, target,sameLevel, sourceMgr, targetMgr){return target.dataNested == "true";}, - canMove: function(source, sourceMgr){return source.dataNested != "true";}, + canMove: function(source, sourceMgr){return true;}, + canAccept: function(source, target,sameLevel, sourceMgr, targetMgr){return true;}, finish: function(source, target, sameLevel , sourceMgr, targetMgr){}, movingClass: 'tr-moving', acceptableClass: 'tr-acceptable', @@ -145,9 +155,10 @@ DtSort.Table.prototype.measure = function() var rowIndex = i; var id = $row.attr(this.options.idAttrName); var parent = $row.attr(this.options.parentAttrName); - var dataNested = $row.attr(this.options.dataNestedAttrName); + var product = $row.attr(this.options.productAttrName); + var order = $row.attr(this.options.orderAttrName); var nestPath = $row.attr(this.options.nestPathAttrName); - var dataType = $row.attr(this.options.dataTypeAttrName); + var isScene = $row.attr(this.options.isSceneAttrName); var pos = DtSort.tools.elementPos($rows[i]); var size = DtSort.tools.elementSize($rows[i]); @@ -157,16 +168,17 @@ DtSort.Table.prototype.measure = function() size = {w:this.rowList[0].boundary.w, h:this.rowList[0].boundary.h}; } - if(dataNested == "true" && nestPath == undefined) + if(isScene == 1 && nestPath == undefined) nestPath = "," + id + ","; this.rowList.push({ id: id, index: i, parent: parent, - dataNested: dataNested, + product: product, + order: order, nestPath: nestPath, - dateType: dataType, + isScene: isScene, boundary: {x:pos.x, y:pos.y, w:size.w, h:size.h}, $dom: $row }); @@ -205,15 +217,15 @@ DtSort.Table.prototype.pick = function(pos) } if(boundary.y <= pos.y && pos.y < maxH) { - hitIndex = i; - break; + hitIndex = i; + break; } } if(hitIndex < 0) return undefined; var hitRow = this.rowList[hitIndex]; - if(this.rowList[hitIndex].dataNested == "true") + if(this.rowList[hitIndex].isScene == 1) { var hitRows = [hitRow] for(var i=hitIndex+1; i" + caseModule + ""); $inputGroup.fixInputGroup(); setStories(); + setScenes(); }); } /** - * Load module. + * Load modules of a caselib and a branch. * * @param int $libID * @access public @@ -115,11 +124,101 @@ function loadLibModules(libID, branch) link = createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + libID + '&viewtype=caselib&branch=' + branch + '&rootModuleID=0&returnType=html&fieldID=&needManage=true'); $('#moduleIdBox').load(link, function() { - $(this).find('select').chosen() - if(typeof(caseModule) == 'string') $('#moduleIdBox').prepend("" + caseModule + "") + $(this).find('select').chosen(); + if(typeof(caseModule) == 'string') $('#moduleIdBox').prepend("" + caseModule + ""); }); } +/** + * Load stories and scenes. + * + * @access public + * @return void + */ +function loadModuleRelated() +{ + setStories(); + setScenes(); +} + +/** + * Load stories of a product and a module. + * + * @param int productID + * @param int moduleID + * @param int num + * @access public + * @return void + */ +function loadStories(productID, moduleID, num) +{ + var branchIDName = (config.currentMethod == 'batchcreate' || config.currentMethod == 'showimport') ? '#branch' : '#branches'; + var branchID = $(branchIDName + num).val(); + if(!branchID) branchID = 0; + + var storyLink = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branchID + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=0&type=full&hasParent=1&objectID=0&number=' + num); + $.get(storyLink, function(stories) + { + if(!stories) stories = ''; + if(config.currentMethod == 'batchcreate') + { + for(var i = num; i <= rowIndex ; i ++) + { + if(i != num && $('#module' + i).val() != 'ditto') break; + var nowStories = stories.replaceAll('story' + num, 'story' + i); + $('#story' + i).replaceWith(nowStories); + $('#story' + i + "_chosen").remove(); + $('#story' + i).next('.picker').remove(); + $('#story' + i).attr('name', 'story[' + i + ']'); + $('#story' + i).picker(); + } + } + else + { + $('#story' + num).replaceWith(stories); + $('#story' + num + "_chosen").remove(); + $('#story' + num).next('.picker').remove(); + $('#story' + num).attr('name', 'story[' + num + ']'); + $('#story' + num).picker(); + } + }); +} + +/** + * Set modules. + * + * @param int $productID + * @param int $branchID + * @param int $num + * @access public + * @return void + */ +function setModules(productID, branchID, num) +{ + moduleLink = createLink('tree', 'ajaxGetModules', 'productID=' + productID + '&viewType=case&branch=' + branchID + '&num=' + num); + $.get(moduleLink, function(modules) + { + if(!modules) modules = ''; + $('#module' + num).replaceWith(modules); + $("#module" + num + "_chosen").remove(); + $("#module" + num).next('.picker').remove(); + $("#module" + num).attr('onchange', "loadStories("+ productID + ", this.value, " + num + ")").chosen(); + }); + + loadStories(productID, 0, num); + + /* If the branch of the current row is inconsistent with the one below, clear the module and story of the nex row. */ + var nextBranchID = $('#branch' + (num + 1)).val(); + if(nextBranchID != branchID) + { + $('#module' + (num + 1)).find("option[value='ditto']").remove(); + $('#module' + (num + 1)).trigger("chosen:updated"); + + $('#plan' + (num + 1)).find("option[value='ditto']").remove(); + $('#plan' + (num + 1)).trigger("chosen:updated"); + } +} + /** * Set story field. * @@ -128,9 +227,11 @@ function loadLibModules(libID, branch) */ function setStories() { - moduleID = $('#module').val(); + if($('#story').length == 0) return false; + productID = $('#product').val(); branch = $('#branch').val(); + moduleID = $('#module').val(); if(typeof(branch) == 'undefined') branch = 0; link = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=0&type=full&hasParent=0&objectID=' + objectID); @@ -146,6 +247,46 @@ function setStories() }); } +/* Set the story priview link. */ +function setPreview() +{ + if($('#story').val() == 0) + { + $('#preview').addClass('hidden'); + } + else + { + storyLink = createLink('story', 'view', "storyID=" + $('#story').val()); + if(!isonlybody) + { + var concat = storyLink.indexOf('?') < 0 ? '?' : '&'; + storyLink = storyLink + concat + 'onlybody=yes'; + } + + $('#preview').addClass('iframe'); + $('#preview').removeClass('hidden'); + $('#preview').attr('href', storyLink); + } +} + +function setScenes() +{ + if($('#sceneIdBox').length == 0) return false; + + productID = $('#product').val(); + branch = $('#branch').val(); + moduleID = $('#module').val(); + if(typeof(branch) == 'undefined') branch = 0; + if(typeof(sceneID) == 'undefined') sceneID = 0; + element = (config.currentMethod == 'createscene' || config.currentMethod == 'editscene') ? 'parent' : 'scene'; + link = createLink('testcase', 'ajaxGetScenes', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&element=' + element + '&sceneID=' + sceneID); + + $('#sceneIdBox').load(link, function() + { + $(this).find('select').chosen(); + }); +} + /** * Init testcase steps in form * @@ -351,81 +492,3 @@ function updateStepID() var i = 1; $('.stepID').each(function(){$(this).html(i ++)}); } - -/** - * Set stories. - * - * @param int productID - * @param int moduleID - * @param int num - * @access public - * @return void - */ -function loadStories(productID, moduleID, num) -{ - var branchIDName = (config.currentMethod == 'batchcreate' || config.currentMethod == 'showimport') ? '#branch' : '#branches'; - var branchID = $(branchIDName + num).val(); - if(!branchID) branchID = 0; - - var storyLink = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branchID + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=0&type=full&hasParent=1&objectID=0&number=' + num); - $.get(storyLink, function(stories) - { - if(!stories) stories = ''; - if(config.currentMethod == 'batchcreate') - { - for(var i = num; i <= rowIndex ; i ++) - { - if(i != num && $('#module' + i).val() != 'ditto') break; - var nowStories = stories.replaceAll('story' + num, 'story' + i); - $('#story' + i).replaceWith(nowStories); - $('#story' + i + "_chosen").remove(); - $('#story' + i).next('.picker').remove(); - $('#story' + i).attr('name', 'story[' + i + ']'); - $('#story' + i).picker(); - } - } - else - { - $('#story' + num).replaceWith(stories); - $('#story' + num + "_chosen").remove(); - $('#story' + num).next('.picker').remove(); - $('#story' + num).attr('name', 'story[' + num + ']'); - $('#story' + num).picker(); - } - }); -} - -/** - * Set modules. - * - * @param int $branchID - * @param int $productID - * @param int $num - * @access public - * @return void - */ -function setModules(branchID, productID, num) -{ - moduleLink = createLink('tree', 'ajaxGetModules', 'productID=' + productID + '&viewType=case&branch=' + branchID + '&num=' + num); - $.get(moduleLink, function(modules) - { - if(!modules) modules = ''; - $('#module' + num).replaceWith(modules); - $("#module" + num + "_chosen").remove(); - $("#module" + num).next('.picker').remove(); - $("#module" + num).attr('onchange', "loadStories("+ productID + ", this.value, " + num + ")").chosen(); - }); - - loadStories(productID, 0, num); - - /* If the branch of the current row is inconsistent with the one below, clear the module and story of the nex row. */ - var nextBranchID = $('#branch' + (num + 1)).val(); - if(nextBranchID != branchID) - { - $('#module' + (num + 1)).find("option[value='ditto']").remove(); - $('#module' + (num + 1)).trigger("chosen:updated"); - - $('#plan' + (num + 1)).find("option[value='ditto']").remove(); - $('#plan' + (num + 1)).trigger("chosen:updated"); - } -} diff --git a/module/testcase/js/create.js b/module/testcase/js/create.js index 481f5fb464..9c790e2ddb 100644 --- a/module/testcase/js/create.js +++ b/module/testcase/js/create.js @@ -1,25 +1,3 @@ -/* Set the story priview link. */ -function setPreview() -{ - if($('#story').val() == 0) - { - $('#preview').addClass('hidden'); - } - else - { - storyLink = createLink('story', 'view', "storyID=" + $('#story').val()); - if(!isonlybody) - { - var concat = storyLink.indexOf('?') < 0 ? '?' : '&'; - storyLink = storyLink + concat + 'onlybody=yes'; - } - - $('#preview').addClass('iframe'); - $('#preview').removeClass('hidden'); - $('#preview').attr('href', storyLink); - } -} - $(function() { var $searchStories = $('#searchStories'); @@ -175,76 +153,3 @@ $(function() return false; }); }); - - -function loadAllNew(productID) -{ - loadProductBranchesNew(productID); -} - -function loadProductBranchesNew(productID) -{ - $('#branch').remove(); - - var param = page == 'create' ? 'active' : 'all'; - var oldBranch = page == 'edit' ? caseBranch : 0; - var param = "productID=" + productID + "&oldBranch=" + oldBranch + "¶m=" + param; - if(typeof(tab) != 'undefined' && (tab == 'execution' || tab == 'project')) param += "&projectID=" + objectID; - $.get(createLink('branch', 'ajaxGetBranches', param), function(data) - { - if(data) - { - $('#product').closest('.input-group').append(data); - $('#branch').css('width', config.currentMethod == 'create' ? '120px' : '95px'); - } - - loadProductModulesNew(productID); - setStories(); - }) -} - -function loadProductModulesNew(productID, branch) -{ - if(typeof(branch) == 'undefined') branch = $('#branch').val(); - if(!branch) branch = 0; - var currentModuleID = config.currentMethod == 'edit' ? $('#module').val() : 0; - link = createLink('testcase', 'ajaxGetOptionMenu', 'productID=' + productID + '&viewtype=case&branch=' + branch + '&rootModuleID=0&returnType=html&fieldID=&needManage=true&extra=¤tModuleID=' + currentModuleID); - $('#moduleIdBox').load(link, function() - { - var $inputGroup = $(this); - $inputGroup.find('select').chosen() - if(typeof(caseModule) == 'string') $('#moduleIdBox').prepend("" + caseModule + ""); - $inputGroup.fixInputGroup(); - }); - setScenes(); - setStories(); -} - -function setScenes() -{ - moduleID = $('#module').val(); - productID = $('#product').val(); - branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - link = createLink('testcase', 'ajaxGetModuleScenes', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&stype=2&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1'); - - $('#sceneIdBox').load(link, function() - { - $(this).find('select').chosen() - }); -} - -function loadBranchNew() -{ - var branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - loadProductModulesNew($('#product').val(), branch); - - setStories(); -} - -function loadModuleRelatedNew() -{ - setScenes(); - setStories(); -} diff --git a/module/testcase/js/edit.js b/module/testcase/js/edit.js index 8cce84d8fb..0a5fe239bf 100644 --- a/module/testcase/js/edit.js +++ b/module/testcase/js/edit.js @@ -1,18 +1,3 @@ -/** - * Get story list. - * - * @param string $module - * @access public - * @return void - */ -function getList() -{ - productID = $('#product').get(0).value; - storyID = $('#story').get(0).value; - link = createLink('search', 'select', 'productID=' + productID + '&projectID=0&module=story&moduleID=' + storyID); - $('#storyListIdBox a').attr("href", link); -} - $(document).ready(function() { /* Set secondary menu highlighting. */ @@ -39,127 +24,3 @@ $(document).ready(function() initSteps(); }); - -/** - * Load lib modules. - * - * @param int $libID - * @access public - * @return void - */ -function loadLibModules(libID) -{ - link = createLink('tree', 'ajaxGetOptionMenu', 'libID=' + libID + '&viewtype=caselib&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=true'); - $('#moduleIdBox').load(link, function() - { - $(this).find('select').chosen() - if(typeof(caseModule) == 'string') $('#moduleIdBox').prepend("" + caseModule + "") - }); -} - -/** - * Load by branch. - * - * @param int oldBranch - * @access public - * @return void - */ -function loadBranch(oldBranch) -{ - var branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - - var result = true; - if(branch) - { - for(taskID in testtasks) - { - if(branch != oldBranch && testtasks[taskID]['branch'] != branch) - { - var tip = confirmUnlinkTesttask.replace("%s", caseID); - result = confirm(tip); - if(!result) $('#branch').val(oldBranch).trigger("chosen:updated"); - break; - } - } - } - - if(result) - { - loadProductModules($('#product').val(), branch); - setStories(); - } -} - -function loadAllNew(productID) -{ - loadProductBranchesNew(productID); -} - -function loadProductBranchesNew(productID) -{ - $('#branch').remove(); - - var param = page == 'create' ? 'active' : 'all'; - var oldBranch = page == 'edit' ? caseBranch : 0; - var param = "productID=" + productID + "&oldBranch=" + oldBranch + "¶m=" + param; - if(typeof(tab) != 'undefined' && (tab == 'execution' || tab == 'project')) param += "&projectID=" + objectID; - $.get(createLink('branch', 'ajaxGetBranches', param), function(data) - { - if(data) - { - $('#product').closest('.input-group').append(data); - $('#branch').css('width', config.currentMethod == 'create' ? '120px' : '95px'); - } - - loadProductModulesNew(productID); - setStories(); - }) -} - -function loadProductModulesNew(productID, branch) -{ - if(typeof(branch) == 'undefined') branch = $('#branch').val(); - if(!branch) branch = 0; - var currentModuleID = config.currentMethod == 'edit' ? $('#module').val() : 0; - link = createLink('testcase', 'ajaxGetOptionMenu', 'productID=' + productID + '&viewtype=case&branch=' + branch + '&rootModuleID=0&returnType=html&fieldID=&needManage=true&extra=¤tModuleID=' + currentModuleID); - $('#moduleIdBox').load(link, function() - { - var $inputGroup = $(this); - $inputGroup.find('select').chosen() - if(typeof(caseModule) == 'string') $('#moduleIdBox').prepend("" + caseModule + ""); - $inputGroup.fixInputGroup(); - }); - setScenes(); - setStories(); -} - -function setScenes() -{ - moduleID = $('#module').val(); - productID = $('#product').val(); - branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - link = createLink('testcase', 'ajaxGetModuleScenes', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&stype=2&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1'); - - $('#sceneIdBox').load(link, function() - { - $(this).find('select').chosen() - }); -} - - -function loadBranchNew() -{ - var branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - loadProductModulesNew($('#product').val(), branch); - - setStories(); -} - -function loadModuleRelatedNew() -{ - setScenes(); - setStories(); -} diff --git a/module/testcase/js/editscene.js b/module/testcase/js/editscene.js index 9bfb5f9cf0..e69de29bb2 100644 --- a/module/testcase/js/editscene.js +++ b/module/testcase/js/editscene.js @@ -1,66 +0,0 @@ -function loadAllNew(productID) -{ - loadProductBranchesNew(productID); -} - -function loadProductBranchesNew(productID) -{ - $('#branch').remove(); - - var param = page == 'create' ? 'active' : 'all'; - var oldBranch = page == 'edit' ? caseBranch : 0; - var param = "productID=" + productID + "&oldBranch=" + oldBranch + "¶m=" + param; - if(typeof(tab) != 'undefined' && (tab == 'execution' || tab == 'project')) param += "&projectID=" + objectID; - $.get(createLink('branch', 'ajaxGetBranches', param), function(data) - { - if(data) - { - $('#product').closest('.input-group').append(data); - $('#branch').css('width', config.currentMethod == 'create' ? '120px' : '95px'); - } - - loadProductModulesNew(productID); - }) -} - -function loadProductModulesNew(productID, branch) -{ - if(typeof(branch) == 'undefined') branch = $('#branch').val(); - if(!branch) branch = 0; - var currentModuleID = config.currentMethod == 'edit' ? $('#module').val() : 0; - link = createLink('testcase', 'ajaxGetOptionMenu', 'productID=' + productID + '&viewtype=case&branch=' + branch + '&rootModuleID=0&returnType=html&fieldID=&needManage=true&extra=¤tModuleID=' + currentModuleID); - $('#moduleIdBox').load(link, function() - { - var $inputGroup = $(this); - $inputGroup.find('select').chosen() - if(typeof(caseModule) == 'string') $('#moduleIdBox').prepend("" + caseModule + ""); - $inputGroup.fixInputGroup(); - }); - setScenes(); -} - -function setScenes() -{ - moduleID = $('#module').val(); - productID = $('#product').val(); - branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - link = createLink('testcase', 'ajaxGetModuleScenes', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&stype=1&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1&number=¤tScene=' + sceneId); - - $('#sceneIdBox').load(link, function() - { - $(this).find('select').chosen() - }); -} - -function loadBranchNew() -{ - var branch = $('#branch').val(); - if(typeof(branch) == 'undefined') branch = 0; - loadProductModulesNew($('#product').val(), branch); -} - -function loadModuleRelatedNew() -{ - setScenes(); -} diff --git a/module/testcase/js/showxmindimport.js b/module/testcase/js/showxmindimport.js index 5420118fcf..aabae92a42 100644 --- a/module/testcase/js/showxmindimport.js +++ b/module/testcase/js/showxmindimport.js @@ -64,10 +64,6 @@ $(document).ready(function() }) }); -function setStories(){ - //do nothing -} - if(window.ztmindmap == undefined) window.ztmindmap = {}; ztmindmap.ModuleManager = function(wraper){ this.wraper = wraper;} diff --git a/module/testcase/model.php b/module/testcase/model.php index 0df1e5557f..67a5fe8560 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -273,6 +273,7 @@ class testcaseModel extends model ->beginIF($this->app->tab == 'project')->andWhere('t3.project')->eq($this->session->project)->fi() ->beginIF($branch !== 'all')->andWhere('t1.branch')->eq($branch)->fi() ->beginIF($moduleIdList)->andWhere('t1.module')->in($moduleIdList)->fi() + ->beginIF($browseType == 'all')->andWhere('t1.scene')->eq(0)->fi() ->beginIF($browseType == 'wait')->andWhere('t1.status')->eq($browseType)->fi() ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() @@ -311,6 +312,7 @@ class testcaseModel extends model ->beginIF(!empty($productID))->andWhere('t2.product')->eq((int)$productID)->fi() ->beginIF(!empty($productID) and $branch !== 'all')->andWhere('t2.branch')->eq($branch)->fi() ->beginIF($moduleIdList)->andWhere('t2.module')->in($moduleIdList)->fi() + ->beginIF($browseType == 'all')->andWhere('t2.scene')->eq(0)->fi() ->beginIF($browseType == 'wait')->andWhere('t2.status')->eq($browseType)->fi() ->beginIF($auto == 'unit')->andWhere('t2.auto')->eq('unit')->fi() ->beginIF($auto != 'unit')->andWhere('t2.auto')->ne('unit')->fi() @@ -318,7 +320,7 @@ class testcaseModel extends model ->beginIF($caseType)->andWhere('t2.type')->eq($caseType)->fi() ->andWhere('t2.deleted')->eq('0') ->orderBy($orderBy) - ->page($pager, 't1.case') + ->page($pager, 't1.`case`') ->fetchAll('id'); } @@ -461,7 +463,7 @@ class testcaseModel extends model { $case = $this->dao->findById($caseID)->from(TABLE_CASE)->fetch(); if(!$case) return false; - foreach($case as $key => $value) if(strpos($key, 'Date') !== false and !(int)substr(is_null($value) ? '' : $value, 0, 4)) $case->$key = ''; + foreach($case as $key => $value) if(strpos($key, 'Date') !== false and helper::isZeroDate($value)) $case->$key = ''; /* Get project and execution. */ if($this->app->tab == 'project') @@ -519,14 +521,16 @@ class testcaseModel extends model * Get case list. * * @param int|array|string $caseIDList + * @param string $query * @access public * @return array */ - public function getByList($caseIDList = 0) + public function getByList($caseIDList = 0, $query = '') { return $this->dao->select('*')->from(TABLE_CASE) ->where('deleted')->eq(0) ->beginIF($caseIDList)->andWhere('id')->in($caseIDList)->fi() + ->beginIF($query)->andWhere($query)->fi() ->fetchAll('id'); } @@ -652,11 +656,10 @@ class testcaseModel extends model if($this->app->tab == 'project') $caseQuery = str_replace('`product`', 't2.`product`', $caseQuery); /* Search criteria under compatible project. */ - $sql = $this->dao->select('*')->from(VIEW_SCENECASE)->alias('t1'); + $sql = $this->dao->select('*')->from(TABLE_CASE)->alias('t1'); if($this->app->tab == 'project') $sql->leftJoin(TABLE_PROJECTCASE)->alias('t2')->on('t1.id=t2.case'); $cases = $sql ->where($caseQuery) - ->andWhere('t1.isCase')->eq(1) ->beginIF($this->app->tab == 'project' and $this->config->systemMode == 'new')->andWhere('t2.project')->eq($this->session->project)->fi() ->beginIF($this->app->tab == 'project' and !empty($productID) and $queryProductID != 'all')->andWhere('t2.product')->eq($productID)->fi() ->beginIF($this->app->tab != 'project' and !empty($productID) and $queryProductID != 'all')->andWhere('t1.product')->eq($productID)->fi() @@ -1056,31 +1059,39 @@ class testcaseModel extends model * * @param array $caseIDList * @access public - * @return array + * @return bool */ - public function batchReview($caseIdList, $result) + public function batchReview($caseIDList, $result) { - $now = helper::now(); - $actions = array(); + $caseIDList = array_filter($caseIDList); + if(!$caseIDList) return false; + + $oldCases = $this->getByList($caseIDList, "status = 'wait'"); + + $now = helper::now(); + $case = new stdClass(); + $case->reviewedBy = $this->app->user->account; + $case->reviewedDate = substr($now, 0, 10); + $case->lastEditedBy = $this->app->user->account; + $case->lastEditedDate = $now; + if($result == 'pass') $case->status = 'normal'; + + $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('status')->eq('wait')->andWhere('id')->in($caseIDList)->exec(); + if(dao::isError()) return false; + $this->loadModel('action'); - $oldCases = $this->getByList($caseIdList); - foreach($caseIdList as $caseID) + foreach($oldCases as $oldCase) { - $oldCase = $oldCases[$caseID]; - if($oldCase->status != 'wait') continue; - - $case = new stdClass(); - $case->reviewedBy = $this->app->user->account; - $case->reviewedDate = substr($now, 0, 10); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - if($result == 'pass') $case->status = 'normal'; - $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('id')->eq($caseID)->exec(); - $actions[$caseID] = $this->action->create('case', $caseID, 'Reviewed', '', ucfirst($result)); + $changes = common::createChanges($oldCase, $case); + if($changes) + { + $actionID = $this->action->create('case', $oldCase->id, 'Reviewed', '', ucfirst($result)); + $this->action->logHistory($actionID, $changes); + } } - return $actions; + return !dao::isError(); } /** @@ -1267,182 +1278,259 @@ class testcaseModel extends model return $allChanges; } + /** + * Batch delete cases or scenes. + * + * @param array $caseIDList + * @param array $sceneIDList + * @access public + * @return bool + */ + public function batchDelete($caseIDList, $sceneIDList) + { + $caseIDList = array_filter($caseIDList); + $sceneIDList = array_filter($sceneIDList); + if(!$caseIDList && !$sceneIDList) return false; + + $this->loadModel('action'); + + if($caseIDList) + { + $this->dao->update(TABLE_CASE)->set('deleted')->eq('1')->where('id')->in($caseIDList)->exec(); + foreach($caseIDList as $caseID) $this->action->create('case', $caseID, 'deleted', '', $extra = ACTIONMODEL::CAN_UNDELETED); + } + + if($sceneIDList) + { + $this->dao->update(TABLE_SCENE)->set('deleted')->eq('1')->where('id')->in($sceneIDList)->exec(); + foreach($sceneIDList as $sceneID) $this->action->create('scene', $sceneID, 'deleted', '', $extra = ACTIONMODEL::CAN_UNDELETED); + } + + return !dao::isError(); + } + /** * Batch change branch. * * @param array $caseIDList + * @param array $sceneIDList + * @param int $branchID + * @access public + * @return bool + */ + public function batchChangeBranch($caseIDList, $sceneIDList, $branchID) + { + $caseIDList = array_filter($caseIDList); + $sceneIDList = array_filter($sceneIDList); + if(!$caseIDList && !$sceneIDList) return false; + + $this->batchChangeCaseBranch($caseIDList, $branchID); + $this->batchChangeSceneBranch($sceneIDList, $branchID); + + return !dao::isError(); + } + + /** + * Batch change branch of cases. + * + * @param array $caseIDList * @param int $branchID * @access public - * @return array + * @return bool */ - public function batchChangeBranch($caseIDList, $branchID) + public function batchChangeCaseBranch($caseIDList, $branchID) { - $now = helper::now(); - $allChanges = array(); - $oldCases = $this->getByList($caseIDList); - foreach($caseIDList as $caseID) + $oldCases = $this->getByList($caseIDList, "branch != '{$branchID}'"); + + $case = new stdclass(); + $case->branch = $branchID; + $case->lastEditedBy = $this->app->user->account; + $case->lastEditedDate = helper::now(); + + $this->dao->update(TABLE_CASE)->data($case)->where('branch')->ne($branchID)->andWhere('id')->in($caseIDList)->exec(); + if(dao::isError()) return false; + + $this->loadModel('action'); + + foreach($oldCases as $oldCase) { - $oldCase = $oldCases[$caseID]; - if($branchID == $oldCase->branch) continue; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - $case->branch = $branchID; - - $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('id')->eq((int)$caseID)->exec(); - if(!dao::isError()) $allChanges[$caseID] = common::createChanges($oldCase, $case); + $changes = common::createChanges($oldCase, $case); + if($changes) + { + $actionID = $this->action->create('case', $oldCase->id, 'edited'); + $this->action->logHistory($actionID, $changes); + } } - return $allChanges; + return !dao::isError(); } /** - * Batch change the module of case. + * Batch change branch of scenes. + * + * @param array $sceneIDList + * @param int $branchID + * @access public + * @return bool + */ + public function batchChangeSceneBranch($sceneIDList, $branchID) + { + $oldScenes = $this->dao->select('id, branch')->from(TABLE_SCENE)->where('branch')->ne($branchID)->andWhere('id')->in($sceneIDList)->fetchAll(); + + $scene = new stdclass(); + $scene->branch = $branchID; + $scene->lastEditedBy = $this->app->user->account; + $scene->lastEditedDate = helper::now(); + + $this->dao->update(TABLE_SCENE)->data($scene)->where('branch')->ne($branchID)->andWhere('id')->in($sceneIDList)->exec(); + if(dao::isError()) return false; + + $this->loadModel('action'); + + foreach($oldScenes as $oldScene) + { + $changes = common::createChanges($oldScene, $scene); + if($changes) + { + $actionID = $this->action->create('scene', $oldScene->id, 'edited'); + $this->action->logHistory($actionID, $changes); + } + } + + return !dao::isError(); + } + + /** + * Batch change module. + * + * @param array $caseIDList + * @param array $sceneIDList + * @param int $moduleID + * @access public + * @return bool + */ + public function batchChangeModule($caseIDList, $sceneIDList, $moduleID) + { + $caseIDList = array_filter($caseIDList); + $sceneIDList = array_filter($sceneIDList); + if(!$caseIDList && !$sceneIDList) return false; + + $this->batchChangeCaseModule($caseIDList, $moduleID); + $this->batchChangeSceneModule($sceneIDList, $moduleID); + + return !dao::isError(); + } + + /** + * Batch change module of cases. * * @param array $caseIDList * @param int $moduleID * @access public - * @return array + * @return bool */ - public function batchChangeModule($caseIDList, $moduleID) + public function batchChangeCaseModule($caseIDList, $moduleID) { - $now = helper::now(); - $allChanges = array(); - $oldCases = $this->dao->select('*')->from(VIEW_SCENECASE) - ->where('deleted')->eq(0) - ->beginIF($caseIDList)->andWhere('id')->in($caseIDList)->fi() - ->fetchAll('id'); + if(!$caseIDList) return false; - /* Split selected nodes into 2 arrays. */ - /* Top level nodes. */ - $finalOldCases1 = array(); - /* Non-top level nodes. */ - $finalOldCases2 = array(); - if(!empty($oldCases)) + $oldCases = $this->getByList($caseIDList, "module != '{$moduleID}'"); + + $case = new stdclass(); + $case->module = $moduleID; + $case->lastEditedBy = $this->app->user->account; + $case->lastEditedDate = helper::now(); + + $this->dao->update(TABLE_CASE)->data($case)->where('module')->ne($moduleID)->andWhere('id')->in($caseIDList)->exec(); + if(dao::isError()) return false; + + $this->loadModel('action'); + + foreach($oldCases as $oldCase) { - foreach($oldCases as $k => $v) + $changes = common::createChanges($oldCase, $case); + if($changes) { - $flag = 0; - foreach($oldCases as $k2 => $v2) - { - $resFlag = strpos($v->path,$v2->path); - - /* v2 is ancestor. */ - if (($resFlag || $resFlag === 0) && $v->grade > $v2->grade ) $flag = 1; - } - if($flag == 0) - { - /* None selected node is its ancestor, assign to this array. */ - $finalOldCases1[$k] = $v; - } - else - { - /* As one selected node is its ancestor, assign to this array. */ - $finalOldCases2[$k] = $v; - } + $actionID = $this->action->create('case', $oldCase->id, 'edited'); + $this->action->logHistory($actionID, $changes); } } - /* Process all top level nodes of selected nodes. */ - foreach($caseIDList as $caseID) + return !dao::isError(); + } + + /** + * Batch change module of scenes. + * + * @param array $sceneIDList + * @param int $moduleID + * @access public + * @return bool + */ + public function batchChangeSceneModule($sceneIDList, $moduleID) + { + if(!$sceneIDList) return false; + + $oldScenes = $this->dao->select('id, module')->from(TABLE_SCENE)->where('module')->ne($moduleID)->andWhere('id')->in($sceneIDList)->fetchAll(); + + $scene = new stdclass(); + $scene->module = $moduleID; + $scene->lastEditedBy = $this->app->user->account; + $scene->lastEditedDate = helper::now(); + + $this->dao->update(TABLE_SCENE)->data($scene)->where('module')->ne($moduleID)->andWhere('id')->in($sceneIDList)->exec(); + if(dao::isError()) return false; + + $this->loadModel('action'); + + foreach($oldScenes as $oldScene) { - if(!isset($finalOldCases1[$caseID])) continue; - - $oldCase = $finalOldCases1[$caseID]; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - $case->module = $moduleID; - - if($oldCase->isCase == 2) + $changes = common::createChanges($oldScene, $scene); + if($changes) { - $case->parent = 0; - $case->path = ",$caseID,"; - $case->grade = 1; - - $this->dao->update(TABLE_SCENE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID - CHANGEVALUE) - ->exec(); - if(!dao::isError()) $allChanges[0][$caseID] = common::createChanges($oldCase, $case); - } - else - { - $case->scene = 0; - $this->dao->update(TABLE_CASE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID) - ->exec(); - if(!dao::isError()) $allChanges[1][$caseID] = common::createChanges($oldCase, $case); + $actionID = $this->action->create('scene', $oldScene->id, 'edited'); + $this->action->logHistory($actionID, $changes); } } - /* Process non-top level nodes of selected nodes. */ - foreach($caseIDList as $caseID) - { - if(!isset($finalOldCases2[$caseID])) continue; - - $oldCase = $finalOldCases2[$caseID]; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - $case->module = $moduleID; - - if($oldCase->isCase == 2) - { - $resultScene = $this->dao->findById((int)$oldCase->parent - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $case->path = $resultScene->path . "$caseID,"; - $case->grade = $resultScene->grade + 1; - - $this->dao->update(TABLE_SCENE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID - CHANGEVALUE) - ->exec(); - if(!dao::isError()) $allChanges[0][$caseID] = common::createChanges($oldCase, $case); - } - else - { - $this->dao->update(TABLE_CASE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID) - ->exec(); - if(!dao::isError()) $allChanges[1][$caseID] = common::createChanges($oldCase, $case); - } - } - - return $allChanges; + return !dao::isError(); } /** * Batch case type change. * * @param array $caseIDList - * @param string $result + * @param string $type * @access public * @return array */ - public function batchCaseTypeChange($caseIdList, $result) + public function batchCaseTypeChange($caseIDList, $type) { - $now = helper::now(); - $actions = array(); + $caseIDList = array_filter($caseIDList); + if(!$caseIDList) return false; + + $oldCases = $this->getByList($caseIDList, "type != '{$type}'"); + + $case = new stdClass(); + $case->type = $type; + $case->lastEditedBy = $this->app->user->account; + $case->lastEditedDate = helper::now(); + + $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('type')->ne($type)->andWhere('id')->in($caseIDList)->exec(); + if(dao::isError()) return false; + $this->loadModel('action'); - $oldCases = $this->getByList($caseIdList); - foreach($caseIdList as $caseID) + foreach($oldCases as $oldCase) { - $case = new stdClass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - $case->type = $result; - - $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('id')->eq($caseID)->exec(); - $actionID = $this->action->create('case', $caseID, 'Edited', '', ucfirst($result)); - $changes = common::createChanges($oldCases[$caseID], $case); - $this->action->logHistory($actionID, $changes); + $changes = common::createChanges($oldCase, $case); + if($changes) + { + $actionID = $this->action->create('case', $oldCase->id, 'Edited', '', ucfirst($result)); + $this->action->logHistory($actionID, $changes); + } } + + return !dao::isError(); } /** @@ -1917,12 +2005,12 @@ class testcaseModel extends model */ public function importToLib($caseIdList = 0) { - if(empty($caseIdList)) $caseIdList = $this->post->caseIdList; - $caseIdList = explode(',' , $caseIdList); - $libID = $this->post->lib; - + $libID = $this->post->lib; if(empty($libID)) return dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->testcase->caselib); + if(!$caseIdList) $caseIdList = $this->post->caseIdList; + $caseIdList = array_filter(explode(',' , $caseIdList)); + $this->loadModel('action'); $cases = $this->dao->select('*')->from(TABLE_CASE)->where('deleted')->eq(0)->andWhere('id')->in($caseIdList)->fetchAll('id'); $caseSteps = $this->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->in($caseIdList)->orderBy('id')->fetchGroup('case'); @@ -2142,11 +2230,62 @@ class testcaseModel extends model if(!$this->config->testcase->needReview) unset($this->config->testcase->search['params']['status']['values']['wait']); $this->config->testcase->search['actionURL'] = $actionURL; $this->config->testcase->search['queryID'] = $queryID; - $this->config->testcase->search['module'] = $this->app->rawModule; $this->loadModel('search')->setSearchParams($this->config->testcase->search); } + /** + * Print rows of cases. + * + * @param array $cases + * @param array $setting + * @param array $users + * @param array $branchOption + * @param array $modulePairs + * @param string $browseType + * @param string $mode + * @access public + * @return int + */ + public function printRow($cases, $setting, $users, $branchOption, $modulePairs, $browseType, $mode) + { + foreach($cases as $case) + { + $trClass = ''; + $trAttrs = "data-id='{$case->id}' data-auto='" . zget($case, 'auto', '') . "' data-order='{$case->sort}' data-parent='{$case->parent}' data-product='{$case->product}'"; + if($case->isScene) + { + $trAttrs .= " data-nested='true'"; + $trClass .= $case->parent == '0' ? ' is-top-level table-nest-child-hide' : ' table-nest-hide'; + } + + if($case->parent) + { + if(!$case->isScene) $trClass .= ' is-nest-child'; + $trClass .= ' table-nest-hide'; + $trAttrs .= " data-nest-parent='{$case->parent}' data-nest-path='{$case->path}'"; + } + elseif(!$case->isScene) + { + $trClass .= ' no-nest'; + } + $trAttrs .= " class='row-case $trClass'"; + + $case->id = str_replace(array('case_', 'scene_'), '', $case->id); // Remove the prefix of case id. + + $isScene = $case->isScene ? 1 : 0; + echo ""; + foreach($setting as $key => $value) $this->printCell($value, $case, $users, $branchOption, $modulePairs, $browseType, $mode); + echo ''; + + if(!empty($case->children) || !empty($case->cases)) + { + if(!empty($case->children)) $this->printRow($case->children, $setting, $users, $branchOption, $modulePairs, $browseType, $mode); + if(!empty($case->cases)) $this->printRow($case->cases, $setting, $users, $branchOption, $modulePairs, $browseType, $mode); + } + } + } + /** * Print cell data * @@ -2154,11 +2293,16 @@ class testcaseModel extends model * @param object $case * @param array $users * @param array $branches + * @param array $modulePairs + * @param string $browseType + * @param string $mode datatable|table * @access public * @return void */ - public function printCell($col, $case, $users, $branches, $modulePairs = array(), $browseType = '', $mode = 'datatable', $isCase = 1) + public function printCell($col, $case, $users, $branches, $modulePairs = array(), $browseType = '', $mode = 'datatable') { + $isScene = $case->isScene; + /* Check the product is closed. */ $canBeChanged = common::canBeChanged('case', $case); @@ -2194,10 +2338,22 @@ class testcaseModel extends model if($id == 'actions') $class .= ' c-actions'; if($id == 'lastRunResult') $class .= " {$case->lastRunResult}"; if(strpos(',stage,precondition,keywords,story,', ",{$id},") !== false) $class .= ' text-ellipsis'; + if($id == 'reviewedBy') + { + $reviewed = ''; + $reviewedBy = explode(',', $case->reviewedBy); + foreach($reviewedBy as $account) + { + $account = trim($account); + if(empty($account)) continue; + $reviewed .= zget($users, $account) . "  "; + } + $title = "title='{$reviewed}'"; + } if($id == 'title') { - if($isCase == 2) + if($isScene) { echo ""; } @@ -2210,38 +2366,31 @@ class testcaseModel extends model { echo ""; } + if($this->config->edition != 'open') $this->loadModel('flow')->printFlowCell('testcase', $case, $id); switch($id) { case 'id': - $showid = ""; - if($isCase == 2) - { - $showid = substr($case->id,1); - $showid = preg_replace('/^0+/', '', $showid); - } - else - { - $showid = $case->id; - } + $showID = ($browseType == 'all' && !$this->cookie->onlyScene && $case->isScene) ? '': sprintf('%03d', $case->id); if($canBatchAction) { $disabled = $canBeChanged ? '' : 'disabled'; - if($isCase == 1){ - echo html::checkbox('caseIDList', array($case->id => ''), '', $disabled) . html::a(helper::createLink('testcase', 'view', "caseID=$case->id"), sprintf('%03d', $showid), '', "data-app='{$this->app->tab}'"); + if(!$isScene) + { + echo html::checkbox('caseIDList', array($case->id => ''), '', $disabled) . html::a(helper::createLink('testcase', 'view', "caseID=$case->id"), $showID, '', "data-app='{$this->app->tab}'"); } else { - echo html::checkbox('caseIDList', array($case->id => ''), '', $disabled) . sprintf('%03d', $showid); + echo html::checkbox('sceneIDList', array($case->id => ''), '', $disabled) . $showID; } } else { - printf('%03d', $showid); + echo $showID; } break; case 'pri': - if($isCase != 2) + if(!$isScene) { echo ""; echo zget($this->lang->testcase->priList, $case->pri, $case->pri); @@ -2249,7 +2398,7 @@ class testcaseModel extends model } break; case 'title': - if($isCase == 1){ + if(!$isScene){ if($this->app->tab == 'project') { $showBranch = isset($this->config->project->testcase->showBranch) ? $this->config->project->testcase->showBranch : 1; @@ -2259,7 +2408,7 @@ class testcaseModel extends model $showBranch = isset($this->config->testcase->browse->showBranch) ? $this->config->testcase->browse->showBranch : 1; } - $autoIcon = $case->auto == 'auto' ? " " : ''; + $autoIcon = $case->auto == 'auto' ? " " : ''; if(isset($branches[$case->branch]) and $showBranch) echo "{$branches[$case->branch]} "; if($modulePairs and $case->module and isset($modulePairs[$case->module])) echo "{$modulePairs[$case->module]} "; echo $canView ? html::a($caseLink, $case->title, null, "style='color: $case->color' data-app='{$this->app->tab}'") @@ -2287,6 +2436,7 @@ class testcaseModel extends model echo "$stages"; break; case 'status': + if($isScene) break; if($case->needconfirm) { print("{$this->lang->story->changed}"); @@ -2312,7 +2462,7 @@ class testcaseModel extends model echo $case->keywords; break; case 'version': - if($isCase == 1) echo $case->version; + if(!$isScene) echo $case->version; break; case 'openedBy': echo zget($users, $case->openedBy); @@ -2321,7 +2471,7 @@ class testcaseModel extends model echo substr($case->openedDate, 5, 11); break; case 'reviewedBy': - echo zget($users, $case->reviewedBy); + echo $reviewed; break; case 'reviewedDate': echo helper::isZeroDate($case->reviewedDate) ? '' : substr($case->reviewedDate, 5, 11); @@ -2339,23 +2489,24 @@ class testcaseModel extends model if(!helper::isZeroDate($case->lastRunDate)) echo substr($case->lastRunDate, 5, 11); break; case 'lastRunResult': - if ($isCase == 1) { + if(!$isScene) + { $class = 'result-' . $case->lastRunResult; $lastRunResultText = $case->lastRunResult ? zget($this->lang->testcase->resultList, $case->lastRunResult, $case->lastRunResult) : $this->lang->testcase->unexecuted; echo "" . $lastRunResultText . ""; } break; case 'bugs': - if ($isCase == 1) echo (common::hasPriv('testcase', 'bugs') and $case->bugs) ? html::a(helper::createLink('testcase', 'bugs', "runID=0&caseID={$case->id}"), $case->bugs, '', "class='iframe'") : $case->bugs; + if(!$isScene) echo (common::hasPriv('testcase', 'bugs') and $case->bugs) ? html::a(helper::createLink('testcase', 'bugs', "runID=0&caseID={$case->id}"), $case->bugs, '', "class='iframe'") : $case->bugs; break; case 'results': - if ($isCase == 1) echo (common::hasPriv('testtask', 'results') and $case->results) ? html::a(helper::createLink('testtask', 'results', "runID=0&caseID={$case->id}"), $case->results, '', "class='iframe'") : $case->results; + if(!$isScene) echo (common::hasPriv('testtask', 'results') and $case->results) ? html::a(helper::createLink('testtask', 'results', "runID=0&caseID={$case->id}"), $case->results, '', "class='iframe'") : $case->results; break; case 'stepNumber': - if ($isCase == 1) echo $case->stepNumber; + if(!$isScene) echo $case->stepNumber; break; case 'actions': - if ($isCase == 1) + if(!$isScene) { $case->browseType = $browseType; echo $this->buildOperateMenu($case, 'browse'); @@ -2895,261 +3046,38 @@ class testcaseModel extends model * Batch change scene. * * @param array $caseIDList - * @param int $sceneId + * @param int $sceneID * @access public - * @return array + * @return bool */ - public function batchChangeScene($caseIDList, $sceneId) + public function batchChangeScene($caseIDList, $sceneID) { - $now = helper::now(); - $allChanges = array(); + $caseIDList = array_filter($caseIDList); + if(!$caseIDList) return false; - $ioldCases = $this->dao->select('*')->from(VIEW_SCENECASE) - ->where('deleted')->eq(0) - ->beginIF($caseIDList)->andWhere('id')->in($caseIDList)->fi() - ->fetchAll('id'); + $oldCases = $this->getByList($caseIDList, "scene != '{$sceneID}'"); - /* If the target node is root. */ - if(!$sceneId) + $case = new stdclass(); + $case->scene = $sceneID; + $case->lastEditedBy = $this->app->user->account; + $case->lastEditedDate = helper::now(); + + $this->dao->update(TABLE_CASE)->data($case)->where('scene')->ne($sceneID)->andWhere('id')->in($caseIDList)->exec(); + if(dao::isError()) return false; + + $this->loadModel('action'); + + foreach($oldCases as $oldCase) { - $oldCases = $ioldCases; - - /* Split selected nodes into 2 arrays. */ - $finalOldCases1 = array(); /* Parent Scenes. */ - $finalOldCases2 = array(); /* Cases and leaf Scenes. */ - if(!empty($oldCases)) + $changes = common::createChanges($oldCase, $case); + if($changes) { - foreach($oldCases as $k => $v) - { - $flag = 0; - foreach($oldCases as $k2 => $v2) - { - $resFlag = strpos($v->path,$v2->path); - - /* $v2 is the ancestor of $v. */ - if(($resFlag || $resFlag === 0) && $v->grade > $v2->grade ) $flag = 1; - } - - if($flag == 0) - { - /* None selected node is its ancestor, then assign to this array. */ - $finalOldCases1[$k] = $v; - } - else - { - /* As one selected node is ancestor, then assign to this array. */ - $finalOldCases2[$k] = $v; - } - } - } - - /* Process all top level nodes (all parent scenes) of selected nodes. */ - foreach($caseIDList as $caseID) - { - if(!isset($finalOldCases1[$caseID])) continue; - - $oldCase = $finalOldCases1[$caseID]; - if($sceneId == $oldCase->parent) continue; - if($sceneId == $oldCase->id) continue; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - - if($oldCase->isCase == 2) - { - $case->parent = 0; - $case->path = ",$caseID,"; - $case->grade = 1; - - $this->dao->update(TABLE_SCENE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID - CHANGEVALUE) - ->exec(); - if(!dao::isError()) $allChanges[0][$caseID] = common::createChanges($oldCase, $case); - } - else - { - $case->scene = 0; - - $this->dao->update(TABLE_CASE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID) - ->exec(); - if(!dao::isError()) $allChanges[1][$caseID] = common::createChanges($oldCase, $case); - } - } - - /* Process all non-top level nodes of selected nodes. */ - foreach($caseIDList as $caseID) - { - if (!isset($finalOldCases2[$caseID])) continue; - - $oldCase = $finalOldCases2[$caseID]; - if($sceneId == $oldCase->parent) continue; - if($sceneId == $oldCase->id) continue; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - - if($oldCase->isCase == 2) - { - $case->parent = $sceneId; - $resultScene = $this->dao->findById((int)$oldCase->parent - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $case->path = $resultScene->path . "$caseID,"; - $case->grade = $resultScene->grade + 1; - - $this->dao->update(TABLE_SCENE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID - CHANGEVALUE) - ->exec(); - if(!dao::isError()) $allChanges[0][$caseID] = common::createChanges($oldCase, $case); - } - else - { - $case->scene = $sceneId; - $this->dao->update(TABLE_CASE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID) - ->exec(); - if(!dao::isError()) $allChanges[1][$caseID] = common::createChanges($oldCase, $case); - } - } - } - else - { - $sceneRow = $this->dao->findById((int)$sceneId)->from(VIEW_SCENECASE)->fetch(); - - /* Remove ancestors of target node. Won't change ancestors' scene to be target scene. */ - $oldCases = array(); - if(!empty($ioldCases)) - { - foreach($ioldCases as $k => $v) - { - $resFlag = strpos($sceneRow->path,$v->path); - if(($resFlag || $resFlag === 0) && $sceneRow->grade > $v->grade ) - { - /* The ancestors of the target node. */ - } - else - { - $oldCases[$k] = $v; - } - } - } - - /* These selected nodes removed ancestors are split into 2 arrays. */ - $finalOldCases1 = array(); - $finalOldCases2 = array(); - if (!empty($oldCases)) - { - foreach($oldCases as $k => $v) - { - $flag = 0; - foreach($oldCases as $k2 => $v2) - { - $resFlag = strpos($v->path,$v2->path); - - /* v2 is ancestor. */ - if (($resFlag || $resFlag === 0) && $v->grade > $v2->grade ) $flag = 1; - } - - if($flag == 0) - { - /* None selected node is its ancestor, then assign it to this array. */ - $finalOldCases1[$k] = $v; - } - else - { - /* As one selected node is its ancestor, then assign it to this array. */ - $finalOldCases2[$k] = $v; - } - } - } - - /* Process all top level of selected nodes. */ - foreach($caseIDList as $caseID) - { - if(isset($finalOldCases1[$caseID])) - { - $oldCase = $finalOldCases1[$caseID]; - if($sceneId == $oldCase->parent) continue; - if($sceneId == $oldCase->id) continue; - - $resFlag = strpos($sceneRow->path,$oldCase->path); - /* Target node is child. */ - if(($resFlag || $resFlag === 0) && $sceneRow->grade > $oldCase->grade ) continue; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - $case->product = $sceneRow->product; - $case->module = $sceneRow->module; - - if($oldCase->isCase == 2) - { - $case->parent = $sceneId; - $case->path = $sceneRow->path . "$caseID,"; - $case->grade = $sceneRow->grade + 1; - - $this->dao->update(TABLE_SCENE)->data($case)->autoCheck()->where('id')->eq((int)$caseID-CHANGEVALUE)->exec(); - if(!dao::isError()) $allChanges[0][$caseID] = common::createChanges($oldCase, $case); - - } - else - { - $case->scene = $sceneId; - - $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('id')->eq((int)$caseID)->exec(); - if(!dao::isError()) $allChanges[1][$caseID] = common::createChanges($oldCase, $case); - } - } - } - - /* Process all non-top level nodes of selected nodes. */ - foreach($caseIDList as $caseID) - { - if(!isset($finalOldCases2[$caseID])) continue; - - $oldCase = $finalOldCases2[$caseID]; - if($sceneId == $oldCase->parent) continue; - if($sceneId == $oldCase->id) continue; - - $resFlag = strpos($sceneRow->path,$oldCase->path); - /* Target node is child. */ - if(($resFlag || $resFlag === 0) && $sceneRow->grade > $oldCase->grade) continue; - - $case = new stdclass(); - $case->lastEditedBy = $this->app->user->account; - $case->lastEditedDate = $now; - $case->product = $sceneRow->product; - $case->module = $sceneRow->module; - - if($oldCase->isCase == 2) - { - $resultScene = $this->dao->findById((int)$oldCase->parent - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $case->path = $resultScene->path . "$caseID,"; - $case->grade = $resultScene->grade + 1; - - $this->dao->update(TABLE_SCENE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID - CHANGEVALUE) - ->exec(); - if(!dao::isError()) $allChanges[0][$caseID] = common::createChanges($oldCase, $case); - } - else - { - $this->dao->update(TABLE_CASE)->data($case) - ->autoCheck() - ->where('id')->eq((int)$caseID) - ->exec(); - if(!dao::isError()) $allChanges[1][$caseID] = common::createChanges($oldCase, $case); - } + $actionID = $this->action->create('case', $oldCase->id, 'edited'); + $this->action->logHistory($actionID, $changes); } } - return $allChanges; + return !dao::isError(); } /** @@ -3169,17 +3097,16 @@ class testcaseModel extends model $startScenePath = ''; if($startScene > 0) { - $startScene = $this->dao->findById((int)$startScene)->from(VIEW_SCENECASE)->fetch(); + $startScene = $this->getSceneByID($startScene); if($startScene) $startScenePath = $startScene->path . '%'; } - return $this->dao->select('*')->from(VIEW_SCENECASE) + return $this->dao->select('*')->from(TABLE_SCENE) ->where('deleted')->eq(0) ->beginIF($rootID)->andWhere('product')->eq((int)$rootID)->fi() ->beginIF(intval($moduleID) > 0)->andWhere('module')->eq((int)$moduleID)->fi() ->beginIF($startScenePath)->andWhere('path')->like($startScenePath)->fi() ->beginIF($branch !== 'all' and $branch !== '' and $branch !== false)->andWhere('branch')->eq((int)$branch)->fi() - ->andWhere('isCase')->eq(2) ->orderBy('grade desc, sort') ->get(); } @@ -3308,65 +3235,63 @@ class testcaseModel extends model } } + /** + * Get a scene by id. + * + * @param int $sceneID + * @access public + * @return object + */ + public function getSceneByID($sceneID) + { + return $this->dao->select('*')->from(TABLE_SCENE)->where('id')->eq($sceneID)->fetch(); + } + /** * Create scene. * * @access public - * @return array + * @return false|int */ public function createScene() { - $now = helper::now(); $scene = fixer::input('post') - ->setDefault('openedBy', $this->app->user->account) - ->setDefault('openedDate', $now) - ->setDefault('parent', $this->post->scene === false ? 0 : $this->post->scene) - ->cleanInt('product,module,branch') - ->remove('scene') + ->add('openedBy', $this->app->user->account) + ->add('openedDate', helper::now()) + ->cleanInt('product,module,branch,parent') ->get(); $this->dao->insert(TABLE_SCENE)->data($scene) ->autoCheck() ->batchCheck($this->config->testcase->createscene->requiredFields, 'notempty') - ->check('title', 'unique') + ->check('title', 'unique', "product = {$scene->product}") ->checkFlow() ->exec(); + if($this->dao->isError()) return false; - if(!$this->dao->isError()) + $sceneID = $this->dao->lastInsertID(); + if($scene->parent) { - $sceneID = $this->dao->lastInsertID(); - $childPath = ""; - $grade = ""; - $viewSceneID = intval($sceneID) + CHANGEVALUE; + $parent = $this->getSceneByID($scene->parent); - if($scene->parent) - { - $resultScene = $this->dao->findById((int)$scene->parent - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $childPath = $resultScene->path . $viewSceneID . ','; - $grade = $resultScene->grade + 1; - $this->dao->update(TABLE_SCENE) - ->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->set('product')->eq($resultScene->product) - ->set('module')->eq($resultScene->module) - ->set('sort')->eq(intval($sceneID) + CHANGEVALUE) - ->where('id')->eq($sceneID)->limit(1) - ->exec(); - } - else - { - $childPath = ",$viewSceneID,"; - $grade = 1; - $this->dao->update(TABLE_SCENE) - ->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->set('sort')->eq(intval($sceneID) + CHANGEVALUE) - ->where('id')->eq($sceneID)->limit(1) - ->exec(); - } - - return array('status' => 'created', 'id' => $sceneID); + $scene->path = $parent->path . $sceneID . ','; + $scene->grade = ++$parent->grade; + $scene->product = $parent->product; + $scene->branch = $parent->branch; + $scene->module = $parent->module; } + else + { + $scene->path = ',' . $sceneID . ','; + $scene->grade = 1; + } + + $this->dao->update(TABLE_SCENE)->data($scene)->where('id')->eq($sceneID)->exec(); + if($this->dao->isError()) return false; + + $this->loadModel('action')->create('scene', $sceneID, 'Opened'); + + return $sceneID; } /** @@ -3380,208 +3305,111 @@ class testcaseModel extends model { if($sceneID == 0) return array(); - $scene = $this->dao->findById((int)$sceneID)->from(VIEW_SCENECASE)->fetch(); + $scene = $this->getSceneByID($sceneID); if(empty($scene)) return array(); - return $this->dao->select('id')->from(VIEW_SCENECASE) + return $this->dao->select('id')->from(TABLE_SCENE) ->where('path')->like($scene->path . '%') ->andWhere('deleted')->eq(0) ->fetchPairs(); } /** - * Search cases has scene. + * Get scene list include sub scenes and cases. * * @param int $productID - * @param int $queryID + * @param int $branch + * @param int $moduleID + * @param string $caseType * @param string $orderBy * @param object $pager - * @param int $branch - * @param string $auto - * @access public - * @return object - */ - public function getBySearchHasScene($productID, $queryID, $orderBy, $pager = null, $branch = 0, $auto = 'no') - { - if($queryID) - { - $query = $this->loadModel('search')->getQuery($queryID); - if($query) - { - $this->session->set('testcaseQuery', $query->sql); - $this->session->set('testcaseForm', $query->form); - } - else - { - $this->session->set('testcaseQuery', ' 1 = 1'); - } - } - else - { - if($this->session->testcaseQuery == false) $this->session->set('testcaseQuery', ' 1 = 1'); - } - - $queryProductID = $productID; - $allProduct = "`product` = 'all'"; - $caseQuery = '(' . $this->session->testcaseQuery; - if(strpos($this->session->testcaseQuery, $allProduct) !== false) - { - $products = $this->app->user->view->products; - $caseQuery = str_replace($allProduct, '1', $caseQuery); - $caseQuery = $caseQuery . ' AND `product` ' . helper::dbIN($products); - $queryProductID = 'all'; - } - - $allBranch = "`branch` = 'all'"; - if($branch !== 'all' and strpos($caseQuery, '`branch` =') === false) $caseQuery .= " AND `branch` in('$branch')"; - if(strpos($caseQuery, $allBranch) !== false) $caseQuery = str_replace($allBranch, '1', $caseQuery); - $caseQuery .= ')'; - $caseQuery = str_replace('`version`', 't1.`version`', $caseQuery); - - if($this->app->tab == 'project') $caseQuery = str_replace('`product`', 't2.`product`', $caseQuery); - - /* Search criteria under compatible project. */ - $sql = $this->dao->select('*')->from(VIEW_SCENECASE)->alias('t1'); - if($this->app->tab == 'project') $sql->leftJoin(TABLE_PROJECTCASE)->alias('t2')->on('t1.id=t2.case'); - $cases = $sql - ->where($caseQuery) - ->andWhere('isCase')->eq(1) - ->beginIF($this->app->tab == 'project')->andWhere('t2.project')->eq($this->session->project)->fi() - ->beginIF($this->app->tab == 'project' and !empty($productID) and $queryProductID != 'all')->andWhere('t2.product')->eq($productID)->fi() - ->beginIF($this->app->tab != 'project' and !empty($productID) and $queryProductID != 'all')->andWhere('t1.product')->eq($productID)->fi() - ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() - ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() - ->andWhere('t1.deleted')->eq(0) - ->orderBy($orderBy)->page($pager)->fetchAll('id'); - - return $cases; - } - - /** - * Get scenes and cases list. - * - * @param int|array $productID int|array - * @param string $branch number|all - * @param int $moduleID - * @param array $caseIdArr - * @param object $pager object|null - * @param string $type - * @param array $topIdList - * @param string $browseType - * @param string $executionSql * @access public * @return array */ - public function getList($productID, $branch, $moduleID, $caseIdArr, $pager = null, $type = '', $topIdList = array(), $browseType = '', &$executionSql = null) + public function getSceneGroups($productID, $branch = 0, $moduleID = 0, $caseType = '', $orderBy = 'id_desc', $pager = null) { - /* Get list of module and its children module. */ $modules = $moduleID ? $this->loadModel('tree')->getAllChildId($moduleID) : '0'; - - /* Get scenes and all cases in $caseIdArr. */ - $cases = $this->dao->select('id,path')->from(VIEW_SCENECASE) - ->where('id')->in($caseIdArr) - ->beginIF($browseType != 'bysearch')->orWhere('( isCase')->eq(2)->fi() - ->beginIF($browseType == 'bysearch')->andWhere('( 1')->eq(1)->fi() - ->beginIF(is_array($productID))->andWhere('product')->in($productID)->fi() - ->beginIF(!is_array($productID) and intval($productID) > 0)->andWhere('product')->eq($productID)->fi() - ->beginIF($branch != 'all')->andWhere('branch')->eq($branch)->fi() - ->beginIF(intval($moduleID) > 0)->andWhere('module')->in($modules)->fi() - ->markRight(1) - ->fetchPairs('id','path'); - - $sceneIdArr = array(); - foreach($cases as $path) - { - $tmpArr = explode(',', trim($path, ',')); - $sceneIdArr = array_merge($sceneIdArr,$tmpArr); - } - $sceneIdArr = array_unique($sceneIdArr); - - /* Get path list. */ - $pathList = $this->dao->select('id,path')->from(VIEW_SCENECASE) - ->where('deleted')->eq(0) - ->beginIF(is_array($productID))->andWhere('product')->in($productID)->fi() - ->beginIF(!is_array($productID) and intval($productID) > 0)->andWhere('product')->eq($productID)->fi() - ->andWhere('id')->in($sceneIdArr) + $scenes = $this->dao->select('*')->from(TABLE_SCENE) + ->where('deleted')->eq('0') + ->andWhere('product')->eq($productID) + ->beginIF($branch !== 'all')->andWhere('branch')->eq($branch)->fi() ->beginIF($modules)->andWhere('module')->in($modules)->fi() - ->beginIF($this->cookie->onlyScene)->andWhere('isCase')->eq(2)->fi() - ->orderBy('id_asc') - ->fetchPairs('id'); + ->orderBy('grade_desc, sort_asc') + ->fetchAll('id'); - /* Get all IDs list. */ - $objectIdList = array(); - foreach($pathList as $path) + $pager->recTotal = 0; + + if(!$scenes) return array(); + + $cases = array(); + if($scenes && !$this->cookie->onlyScene) { - if($type == 'child' and !empty($topIdList)) - { - $paths = explode(',', trim($path, ',')); - $topID = $paths[0]; + $stmt = $this->dao->select('t1.*')->from(TABLE_CASE)->alias('t1'); - if(!in_array($topID, $topIdList)) continue; + if($this->app->tab == 'project') $stmt = $stmt->leftJoin(TABLE_PROJECTCASE)->alias('t2')->on('t1.id=t2.case'); + + $caseList = $stmt->where('t1.deleted')->eq('0') + ->andWhere('t1.scene')->ne(0) + ->andWhere('t1.product')->eq($productID) + ->beginIF($this->app->tab == 'project')->andWhere('t2.project')->eq($this->session->project)->fi() + ->beginIF($branch !== 'all')->andWhere('t1.branch')->eq($branch)->fi() + ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() + ->beginIF($this->cookie->showAutoCase)->andWhere('t1.auto')->ne('unit')->fi() + ->beginIF(!$this->cookie->showAutoCase)->andWhere('t1.auto')->notIN('unit,auto')->fi() + ->beginIF($caseType)->andWhere('t1.type')->eq($caseType)->fi() + ->orderBy($orderBy) + ->fetchAll('id'); + + $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', false); + $caseList = $this->loadModel('story')->checkNeedConfirm($caseList); + $caseList = $this->appendData($caseList); + foreach($caseList as $case) $cases[$case->scene][$case->id] = $case; + } + + $this->dao->setTable(TABLE_CASE); + $fieldTypes = $this->dao->getFieldsType(); + + foreach($scenes as $id => $scene) + { + /* Set default value for the fields exist in TABLE_CASE but not in TABLE_SCENE. */ + foreach($fieldTypes as $field => $type) + { + if(isset($scene->$field)) continue; + $scene->$field = $type['rule'] == 'int' ? '0' : ''; } - foreach(explode(',', trim($path, ',')) as $pathID) $objectIdList[$pathID] = $pathID; + $scene->bugs = 0; + $scene->results = 0; + $scene->caseFails = 0; + $scene->stepNumber = 0; + $scene->isScene = true; + + if(isset($cases[$id])) + { + foreach($cases[$id] as $case) + { + $case->id = 'case_' . $case->id; + $case->parent = $id; + $case->grade = $scene->grade + 1; + $case->path = $scene->path . $case->id . ','; + $case->isScene = false; + + $scene->cases[$case->id] = $case; + } + } + + if(!isset($scenes[$scene->parent])) continue; + + $parent = $scenes[$scene->parent]; + $parent->children[$id] = $scene; + + unset($scenes[$id]); } - /* Sort by product ID for project list. */ - $orderBy = 'product_desc,sort_desc'; + $pager->recTotal = count($scenes); + $pager->pageTotal = ceil($pager->recTotal / $pager->recPerPage); - /* Get sql for batch execution. */ - if($executionSql !== null) $executionSql = $this->buildQuery($modules, $type, $objectIdList, $branch)->andWhere('isCase')->eq(1)->orderBy($orderBy)->get(); - - return $this->buildQuery($modules, $type, $objectIdList, $branch)->orderBy($orderBy)->page($pager)->fetchAll('id'); - } - - /** - * Get paginated data with all IDs list. - * - * @param string $modules - * @param string $type - * @param string|array $objectIdList - * @param string $branch - * @access public - * @return object - */ - private function buildQuery($modules, $type, $objectIdList, $branch) - { - $this->dao->reset(); - $rawMethod = $this->app->rawMethod; - $rawModule = $this->app->rawModule; - return $this->dao->select('*')->from(VIEW_SCENECASE) - ->where('deleted')->eq(0) - ->beginIF($this->cookie->onlyScene)->andWhere('isCase')->eq(2)->fi() - ->beginIF($modules)->andWhere('module')->in($modules)->fi() - ->beginIF($rawMethod == 'browse' and $type === 'top')->andWhere('parent')->eq(0)->andWhere('id')->in($objectIdList)->fi() - ->beginIF($rawMethod == 'browse' and $type === 'child')->andWhere('id')->in($objectIdList)->fi() - ->beginIF($rawModule == 'project' and $rawMethod == 'testcase' and intval($branch) > 0)->andWhere('branch')->eq($branch)->fi() - ->beginIF($rawModule == 'project' and $rawMethod == 'testcase' and $type === 'top')->andWhere('parent')->eq(0)->andWhere('id')->in($objectIdList)->fi() - ->beginIF($rawModule == 'project' and $rawMethod == 'testcase' and $type === 'child')->andWhere('id')->in($objectIdList)->fi(); - } - - /** - * Search cases has scene. - * - * @param int $viewID - * @access public - * @return string - */ - public function getParents($viewID) - { - if($viewID == 0) return '/'; - - $path = $this->dao->select('path')->from(VIEW_SCENECASE)->where('id')->eq((int)$viewID)->fetch('path'); - $path = trim($path, ','); - if(!$path) return '/'; - - $pathArr = explode(',', $path); - $scenePath = ""; - foreach ($pathArr as $vid) - { - $title = $this->dao->select('title')->from(VIEW_SCENECASE)->where('id')->eq((int)$vid)->fetch('title'); - $scenePath .= '  '.$title; - } - - return substr($scenePath,34); + return array_slice($scenes, $pager->recPerPage * ($pager->pageID - 1), $pager->recPerPage); } /** @@ -3665,123 +3493,44 @@ class testcaseModel extends model /** * Get scene name. * - * @param array $moduleIdList - * @param bool $allPath + * @param array $sceneIDList + * @param bool $fullPath * @param bool $branchPath * @access public * @return array */ - public function getScenesName($moduleIdList, $allPath = true, $branchPath = false) + public function getScenesName($sceneIDList, $fullPath = true, $branchPath = false) { - if(!$allPath) return $this->dao->select('id, title')->from(VIEW_SCENECASE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchPairs('id', 'title'); + if(!$fullPath) return $this->dao->select('id, title')->from(TABLE_SCENE)->where('deleted')->eq('0')->andWhere('id')->in($sceneIDList)->fetchPairs(); - $modules = $this->dao->select('id, title, path, branch')->from(VIEW_SCENECASE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchAll('path'); - $allModules = $this->dao->select('id, title')->from(VIEW_SCENECASE)->where('id')->in(join(array_keys($modules)))->andWhere('deleted')->eq(0)->fetchPairs('id', 'title'); + $scenes = $this->dao->select('id, title, path, branch')->from(TABLE_SCENE)->where('deleted')->eq('0')->andWhere('id')->in($sceneIDList)->fetchAll('path'); + $allScenes = $this->dao->select('id, title')->from(TABLE_SCENE)->where('deleted')->eq('0')->andWhere('id')->in(join(array_keys($scenes)))->fetchPairs(); $branchIDList = array(); - $modulePairs = array(); - foreach($modules as $module) + $scenePairs = array(); + foreach($scenes as $scene) { - $paths = explode(',', trim($module->path, ',')); - $moduleName = ''; - foreach($paths as $path) $moduleName .= '/' . $allModules[$path]; - $modulePairs[$module->id] = $moduleName; + $title = ''; + $path = explode(',', trim($scene->path, ',')); + foreach($path as $sceneID) $title .= '/' . $allScenes[$sceneID]; - if($module->branch) $branchIDList[$module->branch] = $module->branch; + $scenePairs[$scene->id] = $title; + + if($scene->branch) $branchIDList[] = $scene->branch; } - if(!$branchPath) return $modulePairs; + if(!$branchPath) return $scenePairs; - $branchs = $this->dao->select('id, title')->from(VIEW_SCENECASE)->where('id')->in($branchIDList)->andWhere('deleted')->eq(0)->fetchALL('id'); - foreach($modules as $module) + $branchs = $this->dao->select('id, title')->from(TABLE_SCENE)->where('deleted')->eq('0')->andWhere('id')->in($branchIDList)->fetchPairs(); + foreach($scenes as $scene) { - if(isset($modulePairs[$module->id])) - { - $branchName = isset($branchs[$module->branch]) ? '/' . $branchs[$module->branch]->name : ''; - $modulePairs[$module->id] = $branchName . $modulePairs[$module->id]; - } + if(!isset($scenePairs[$scene->id])) continue; + + $branchName = isset($branchs[$scene->branch]) ? '/' . $branchs[$scene->branch] : ''; + $scenePairs[$scene->id] = $branchName . $scenePairs[$scene->id]; } - return $modulePairs; - } - - /** - * Get cases which has scene. - * - * @param int $productID - * @param int $branch - * @param string $browseType - * @param int $queryID - * @param int $moduleID - * @param string $sort - * @param object $pager - * @param string $auto - * @access public - * @return array - */ - public function getTestCaseHasScene($productID, $branch, $browseType, $queryID, $moduleID, $sort, $pager, $auto = 'no') - { - /* Set modules and browse type. */ - $modules = $moduleID ? $this->loadModel('tree')->getAllChildId($moduleID) : '0'; - $browseType = ($browseType == 'bymodule' and $this->session->caseBrowseType and $this->session->caseBrowseType != 'bysearch') ? $this->session->caseBrowseType : $browseType; - $group = $this->lang->navGroup->testcase; - - /* By module or all cases. */ - $cases = array(); - if($browseType == 'bymodule' or $browseType == 'all' or $browseType == 'wait') - { - if($this->app->tab == 'project') - { - $cases = $this->getModuleProjectCases($productID, $branch, $modules, $sort, $pager, $browseType, $auto); - } - else - { - $cases = $this->getModuleCases($productID, $branch, $modules, $sort, $pager, $browseType, $auto); - } - } - /* Cases need confirmed. */ - elseif($browseType == 'needconfirm') - { - $cases = $this->dao->select('distinct t1.*, t2.title AS storyTitle')->from(TABLE_CASE)->alias('t1') - ->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id') - ->leftJoin(TABLE_PROJECTCASE)->alias('t3')->on('t1.id = t3.case') - ->where("t2.status = 'active'") - ->andWhere('t1.deleted')->eq(0) - ->andWhere('t2.version > t1.storyVersion') - ->beginIF(!empty($productID))->andWhere('t1.product')->eq($productID)->fi() - ->beginIF($this->app->tab == 'project')->andWhere('t3.project')->eq($this->session->project)->fi() - ->beginIF($branch !== 'all')->andWhere('t1.branch')->eq($branch)->fi() - ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() - ->beginIF($auto != 'unit')->andWhere('t1.auto')->ne('unit')->fi() - ->beginIF($auto == 'unit')->andWhere('t1.auto')->eq('unit')->fi() - ->orderBy($sort) - ->page($pager, 't1.id') - ->fetchAll(); - } - elseif($browseType == 'bysuite') - { - $cases = $this->getBySuite($productID, $branch, $queryID, $modules, $sort, $pager, $auto); - } - /* By search. */ - elseif($browseType == 'bysearch') - { - $cases = $this->getBySearchHasScene($productID, $queryID, $sort, $pager, $branch, $auto); - } - - return $cases; - } - - /** - * Substr string. - * - * @param string $text - * @param int $length - * @access public - * @return string - */ - public function istrcut($text, $length) - { - return (mb_strlen($text, 'utf8') > $length) ? mb_substr($text, 0, $length, 'utf8').'...' : $text; + return $scenePairs; } /** @@ -3857,123 +3606,62 @@ class testcaseModel extends model } /** - * Update scene. + * Update a scene. * - * @param int $sceneID + * @param int $sceneID * @access public - * @return string + * @return bool */ public function updateScene($sceneID) { - /* Get original data. */ - $scene = $this->dao->findById((int)$sceneID)->from(VIEW_SCENECASE)->fetch(); - $now = helper::now(); - - /* Collect changed data. */ - $scenePost = fixer::input('post') - ->add('id', $sceneID - CHANGEVALUE) - ->setDefault('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->cleanInt('product,module') + $oldScene = $this->getSceneByID($sceneID); + $scene = fixer::input('post') + ->add('lastEditedBy', $this->app->user->account) + ->add('lastEditedDate', helper::now()) + ->cleanInt('product,branch,module,parent') ->get(); - /* Update scene with changed data. */ - $this->dao->update(TABLE_SCENE)->data($scenePost) - ->batchCheck($this->config->testcase->createscene->requiredFields, 'notempty') - ->where('id')->eq((int)$sceneID - CHANGEVALUE) + $this->dao->update(TABLE_SCENE)->data($scene) + ->batchCheck($this->config->testcase->editscene->requiredFields, 'notempty') + ->check('title', 'unique', "product = {$scene->product} AND id != {$sceneID}") + ->where('id')->eq($sceneID) ->checkFlow() ->exec(); + if(dao::isError()) return false; - /* Verify database error. */ - if($this->dao->isError()) return; - - $sceneNew = $this->dao->findById((int)$sceneID - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $childPath = ""; - $grade = ""; - $viewSceneID = $sceneID; - - /* Not change key fields. */ - if($scene->parent == $sceneNew->parent and $scene->product == $sceneNew->product and $scene->branch == $sceneNew->branch and $scene->module == $sceneNew->module) return array('status' => 'updated', 'id' => $sceneID);; - - if($sceneNew->parent) + if($scene->parent != $oldScene->parent) { - /* Update product, module, branch, path and grade field with parent scene. */ - $resultScene = $this->dao->findById((int)$sceneNew->parent - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - $childPath = $resultScene->path . $viewSceneID . ','; - $grade = $resultScene->grade + 1; - $this->dao->update(TABLE_SCENE) - ->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->set('product')->eq($resultScene->product) - ->set('module')->eq($resultScene->module) - ->set('branch')->eq($resultScene->branch) - ->where('id')->eq($sceneID - CHANGEVALUE) - ->exec(); - } - else - { - /* Update path and grade field without parent scene. */ - $childPath = ",$viewSceneID,"; - $grade = 1; - $this->dao->update(TABLE_SCENE) - ->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->where('id')->eq($sceneID - CHANGEVALUE) - ->exec(); - } - - /* Get children scenes and cases. */ - $children = $this->dao->select('*')->from(VIEW_SCENECASE) - ->where('deleted')->eq(0) - ->andWhere('(path')->like($scene->path.'%') - ->orWhere('path')->like(",$sceneID,%") - ->markRight(1) - ->orderBy('grade asc') - ->fetchAll('id'); - - foreach($children as $id => $childScene) - { - if(!$id or $id == $sceneID or !$childScene->parent) continue; - - /* Get grade of child with parent scene. */ - $parentScene = $this->dao->findById($childScene->parent - CHANGEVALUE)->from(TABLE_SCENE)->fetch(); - - /* Update sub-scene. */ - if($childScene->isCase == 2) + if($scene->parent) { - /* The grade of child node must be greater than parent node. */ - if($childScene->grade <= $scene->grade) continue; + $parent = $this->getSceneByID($scene->parent); - $viewID = $id; - $childPath = $parentScene->path . $viewID . ','; - $grade = $parentScene->grade + 1; - - $this->dao->update(TABLE_SCENE) - ->set('path')->eq($childPath) - ->set('grade')->eq($grade) - ->set('product')->eq($parentScene->product) - ->set('module')->eq($parentScene->module) - ->set('branch')->eq($parentScene->branch) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq($now) - ->where('id')->eq($id - CHANGEVALUE) - ->exec(); - - continue; + $scene->path = $parent->path . $sceneID . ','; + $scene->grade = ++$parent->grade; + $scene->product = $parent->product; + $scene->branch = $parent->branch; + $scene->module = $parent->module; + } + else + { + $scene->path = ',' . $sceneID . ','; + $scene->grade = 1; } - /* Update case. */ - $this->dao->update(TABLE_CASE) - ->set('product')->eq($parentScene->product) - ->set('module')->eq($parentScene->module) - ->set('branch')->eq($parentScene->branch) - ->set('lastEditedBy')->eq($this->app->user->account) - ->set('lastEditedDate')->eq($now) - ->where('id')->eq($id) + $this->dao->update(TABLE_SCENE)->data($scene)->where('id')->eq($sceneID)->exec(); + $this->dao->update(TABLE_SCENE)->set("path = REPLACE(path, '{$oldScene->path}', '{$scene->path}')") + ->where('id')->ne($sceneID) + ->andWhere('path')->like("{$oldScene->path}%") ->exec(); } - return array('status' => 'updated', 'id' => $sceneID); + $changes = common::createChanges($oldScene, $scene); + if($changes) + { + $actionID = $this->loadModel('action')->create('scene', $sceneID, 'edited'); + $this->action->logHistory($actionID, $changes); + } + + return true; } /** @@ -4056,7 +3744,7 @@ class testcaseModel extends model if(isset($sceneIds[$tmpPId])) { $pScene = $sceneIds[$tmpPId]; - $scene = $pScene["id"] + CHANGEVALUE; + $scene = $pScene["id"]; } $id = isset($testcaseData["id"]) ? $testcaseData["id"] : -1; @@ -4212,10 +3900,7 @@ class testcaseModel extends model $this->dao->insert(TABLE_SCENE)->data($scene)->autoCheck()->exec(); $sceneID = $this->dao->lastInsertID(); - $order = new stdclass(); - $order->sort = ($sceneID + CHANGEVALUE); - - $this->dao->update(TABLE_SCENE)->data($order)->where('id')->eq((int)$sceneID)->exec(); + $this->dao->update(TABLE_SCENE)->set('sort')->eq($sceneID)->where('id')->eq((int)$sceneID)->exec(); } else { @@ -4238,18 +3923,16 @@ class testcaseModel extends model $pScene = isset($sceneIds[$tmpPId]) ? $sceneIds[$tmpPId] : array(); $parent = 0; $grade = 1; - $path = ",".($sceneID + CHANGEVALUE).","; + $path = ",{$sceneID},"; if(isset($sceneIds[$tmpPId])) { $parent = $pScene["id"]; $parentScene = $this->dao->findById((int)$parent)->from(TABLE_SCENE)->fetch(); - $path = $parentScene->path . ($sceneID + CHANGEVALUE).","; + $path = $parentScene->path . $sceneID . ','; $grade = $parentScene->grade + 1; } - if($parent != 0) $parent = $parent + CHANGEVALUE; - $this->dao->update(TABLE_SCENE) ->set('parent')->eq($parent) ->set('path')->eq($path) @@ -4343,7 +4026,7 @@ class testcaseModel extends model $caseList = $this->dao->select($fields)->from(TABLE_CASE)->alias('t1') ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') ->leftJoin(TABLE_MODULE)->alias('t3')->on('t1.module = t3.id') - ->leftJoin(TABLE_SCENE)->alias('t4')->on('t1.scene = t4.id+' . CHANGEVALUE) + ->leftJoin(TABLE_SCENE)->alias('t4')->on('t1.scene = t4.id') ->where('t1.deleted')->eq(0) ->andWhere('t1.product')->eq($productID) ->beginIF($moduleID > 0)->andWhere('t1.module')->eq($moduleID)->fi() diff --git a/module/testcase/view/batchcreate.html.php b/module/testcase/view/batchcreate.html.php index 16d042dc8a..ad4ed00d50 100644 --- a/module/testcase/view/batchcreate.html.php +++ b/module/testcase/view/batchcreate.html.php @@ -90,7 +90,7 @@ ?> - branchBox'> + branchBox'> moduleBox' style='overflow:visible'> ' style='overflow:visible;'> storyBox' style='overflow:visible'> id : '', 'class="form-control picker-select"');?> @@ -142,7 +142,7 @@ %s - branchBox'> + branchBox'> moduleBox' style='overflow:visible'> ' style='overflow:visible'> storyBox' style='overflow:visible'> @@ -182,7 +182,7 @@ - + diff --git a/module/testcase/view/browse.html.php b/module/testcase/view/browse.html.php index adae070fd3..7ec8077473 100644 --- a/module/testcase/view/browse.html.php +++ b/module/testcase/view/browse.html.php @@ -58,34 +58,40 @@ js::set('langNormal', $lang->testcase->normal);
    '>
    - - + +

    - cookie->onlyScene): ?> - testcase->noScene;?> - - - createLink('testcase', 'createScene', "productID=$productID&branch=$branch&moduleID=$initModule"), " " . $lang->testcase->newScene, '', "class='btn btn-info' data-app='{$this->app->tab}'");?> - - - testcase->noCase;?> - - - createLink('testcase', 'create', "productID=$productID&branch=$branch&moduleID=$initModule"), " " . $lang->testcase->create, '', "class='btn btn-info' data-app='{$this->app->tab}'");?> - + cookie->onlyScene) + { + echo "{$lang->testcase->noScene}"; + if((empty($productID) || common::canModify('product', $product)) && common::hasPriv('testcase', 'createScene') && $browseType != 'bysuite') + { + $initModule = isset($moduleID) ? (int)$moduleID : 0; + if($productID) echo html::a($this->createLink('testcase', 'createScene', "productID=$productID&branch=$branch&moduleID=$initModule"), " " . $lang->testcase->newScene, '', "class='btn btn-info' data-app='{$this->app->tab}'"); + } + } + else + { + echo "{$lang->testcase->noCase}"; + if((empty($productID) || common::canModify('product', $product)) && common::hasPriv('testcase', 'create') && $browseType != 'bysuite') + { + $initModule = isset($moduleID) ? (int)$moduleID : 0; + echo html::a($this->createLink('testcase', 'create', "productID=$productID&branch=$branch&moduleID=$initModule"), " " . $lang->testcase->create, '', "class='btn btn-info' data-app='{$this->app->tab}'"); + } - - createLink('testsuite', 'linkCase', "suiteID=$param"), " " . $lang->testsuite->linkCase, '', "class='btn btn-info' data-app='{$this->app->tab}'");?> - - + if(common::hasPriv('testsuite', 'linkCase') && $browseType == 'bysuite') + { + echo html::a($this->createLink('testsuite', 'linkCase', "suiteID=$param"), " " . $lang->testsuite->linkCase, '', "class='btn btn-info' data-app='{$this->app->tab}'"); + } + } + ?>

    - moduleName . ucfirst($this->methodName); - $useDatatable = (!empty($config->testcase->useDatatable) and isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable'); - ?> + moduleName . ucfirst($this->methodName);?> + testcase->useDatatable) && isset($config->datatable->$datatableId->mode) && $config->datatable->$datatableId->mode == 'datatable');?>
    >
    @@ -97,7 +103,7 @@ js::set('langNormal', $lang->testcase->normal); if($useDatatable) include '../../common/view/datatable.html.php'; else include '../../common/view/tablesorter.html.php'; - if($config->testcase->needReview or !empty($config->testcase->forceReview)) $config->testcase->datatable->fieldList['actions']['width'] = '190'; + if($config->testcase->needReview || !empty($config->testcase->forceReview)) $config->testcase->datatable->fieldList['actions']['width'] = '190'; $setting = $this->datatable->getSetting('testcase'); $widths = $this->datatable->setFixedFieldWidth($setting); $columns = 0; @@ -109,7 +115,7 @@ js::set('langNormal', $lang->testcase->normal); $canBatchConfirmStoryChange = common::hasPriv('testcase', 'batchConfirmStoryChange'); $canBatchChangeModule = common::hasPriv('testcase', 'batchChangeModule'); $canImportToLib = common::hasPriv('testcase', 'importToLib'); - $canBatchAction = ($canBatchRun or $canBatchEdit or $canBatchDelete or $canBatchCaseTypeChange or $canBatchConfirmStoryChange or $canBatchChangeModule or $canImportToLib); + $canBatchAction = ($canBatchRun || $canBatchEdit || $canBatchDelete || $canBatchCaseTypeChange || $canBatchConfirmStoryChange || $canBatchChangeModule || $canImportToLib); ?> ';?>
    ' id='caseList' data-fixed-left-width='' data-fixed-right-width='' data-checkbox-name='caseIDList[]'> @@ -128,35 +134,7 @@ js::set('langNormal', $lang->testcase->normal); - - $scene):?> - id' data-auto='$scene->auto' data-order='$scene->sort' data-parent='$scene->parent' data-product='$scene->product'"; - if($scene->isCase == 2) - { - $trAttrs .= " data-nested='true'"; - $trClass .= $scene->parent == '0' ? ' is-top-level table-nest-child-hide' : ' table-nest-hide'; - } - - if($scene->parent and isset($scenes[$scene->parent])) - { - if($scene->isCase != 2) $trClass .= ' is-nest-child'; - if(empty($scene->path)) $scene->path = $scenes[$scene->parent]->path . "$scene->id,"; - $trClass .= ' table-nest-hide'; - $trAttrs .= " data-nest-parent='$scene->parent' data-nest-path='$scene->path'"; - } - elseif($scene->isCase != 2) - { - $trClass .= ' no-nest'; - } - $trAttrs .= " class='row-case $trClass'"; - $originOrders[] = $scene->id; - ?> - > - $value) $this->testcase->printCell($value, $scene, $users, $branchOption, $modulePairs, $browseType, $useDatatable ? 'datatable' : 'table',$scene->isCase);?> - - + testcase->printRow($cases, $setting, $users, $branchOption, $modulePairs, $browseType, $useDatatable ? 'datatable' : 'table');?>
    ';?> @@ -209,7 +187,7 @@ js::set('langNormal', $lang->testcase->normal); unset($lang->testcase->typeList['']); foreach($lang->testcase->typeList as $key => $result) { - $actionLink = $this->createLink('testcase', 'batchCaseTypeChange', "result=$key"); + $actionLink = $this->createLink('testcase', 'batchCaseTypeChange', "type=$key"); echo '
  • ' . html::a('#', $result, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#caseList')\"") . '
  • '; } echo ''; @@ -292,7 +270,7 @@ js::set('langNormal', $lang->testcase->normal);
    - 6;?> + 6;?>