diff --git a/README.md b/README.md index 28a6b9518..7a763bd5c 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,9 @@ In this configuration, we'll run the direct app in a docker container locally bu --- +## Test Users + +direct_user/topcoder2001 (Use this user to login to Direct and create challenges in the Topcoder DEV environment. You can alsoo use this user to manipulate challenges in Online Review) ## **old** instructions diff --git a/components/project_management/src/java/main/com/topcoder/management/project/ProjectPropertyType.java b/components/project_management/src/java/main/com/topcoder/management/project/ProjectPropertyType.java index 267736d28..4e2784e41 100644 --- a/components/project_management/src/java/main/com/topcoder/management/project/ProjectPropertyType.java +++ b/components/project_management/src/java/main/com/topcoder/management/project/ProjectPropertyType.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 - 2016 TopCoder Inc., All Rights Reserved. + * Copyright (C) 2006 - 2017 TopCoder Inc., All Rights Reserved. */ package com.topcoder.management.project; @@ -44,8 +44,13 @@ * - Add property {@link #PRIVATE_PROJECT} *

* + *

+ * Version 1.2.7 (TOPCODER DIRECT - ADD OPTIONAL CHALLENGE PROPERTY - PRODUCT) + * - Add property {@link #PRODUCT_SKU} + *

+ * * @author tuenm, iamajia, flytoj2ee, tangzx, GreatKevin, TCSCODER - * @version 1.2.6 + * @version 1.2.7 * @since 1.0 */ public class ProjectPropertyType implements Serializable { @@ -366,6 +371,13 @@ public class ProjectPropertyType implements Serializable { */ public static final String PRIVATE_PROJECT = "Private Project Status"; + /** + * Represent "Product SKU" project property type + * + * @since 1.2.7 + */ + public static final String PRODUCT_SKU = "Product SKU"; + /** * Represents the id of this instance. Only values greater than zero is * allowed. This variable is initialized in the constructor and can be diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 6ce41e720..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,23 +0,0 @@ -version: '2' -services: - tc-informix: - image: "appiriodevops/informix:1.2" - ports: - - "2021:2021" - tc-direct: - build: ./docker/local-setup/direct-app-base - #image: "tc-direct" - #image: "appiriodevops/direct-app-base:latest" - links: - - "tc-informix" - volumes: - - ".:/root/direct" - hostname: cockpit.cloud.topcoder.com - command: sh -c "cd /root/direct && ant first_deploy && /root/jboss-4.2.3.GA/bin/run.sh -b 0.0.0.0 -Djboss.remoting.version=1" - ports: - - "443:443" - - "8180:8180" - - "1199:1199" - - "1198:1198" - - "3973:3973" - diff --git a/services/project_service/src/java/main/com/topcoder/service/project/impl/ProjectServiceBean.java b/services/project_service/src/java/main/com/topcoder/service/project/impl/ProjectServiceBean.java index e82233f79..c28ec8cc6 100644 --- a/services/project_service/src/java/main/com/topcoder/service/project/impl/ProjectServiceBean.java +++ b/services/project_service/src/java/main/com/topcoder/service/project/impl/ProjectServiceBean.java @@ -1996,8 +1996,6 @@ private void checkProjectData(ProjectData projectData, boolean isCreate) throws throw logException(new IllegalArgumentFault("The name attribute of the project data can not be null.")); } else if (name.trim().length() == 0) { throw logException(new IllegalArgumentFault("The name attribute of the project data can not be empty.")); - } else if (!Pattern.matches(NAME_PATTERN, name)) { - throw logException(new IllegalArgumentFault("The name attribute of the project data is not following pattern as - " + NAME_PATTERN)); } String description = projectData.getDescription(); @@ -2005,8 +2003,6 @@ private void checkProjectData(ProjectData projectData, boolean isCreate) throws throw logException(new IllegalArgumentFault("The description attribute of the project data can not be null.")); } else if (description.trim().length() == 0) { throw logException(new IllegalArgumentFault("The description attribute of the project data can not be empty.")); - } else if (!Pattern.matches(NAME_PATTERN, description)) { - throw logException(new IllegalArgumentFault("The description attribute of the project data is not following pattern as - " + NAME_PATTERN)); } //added in version 2.2 diff --git a/src/java/main/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java b/src/java/main/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java index 04dfeae71..b8c0e52b1 100644 --- a/src/java/main/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java +++ b/src/java/main/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 - 2016 TopCoder Inc., All Rights Reserved. + * Copyright (C) 2010 - 2017 TopCoder Inc., All Rights Reserved. */ package com.topcoder.direct.services.view.action.contest.launch; @@ -265,8 +265,16 @@ *
  • Updated {@link #executeAction()}
  • * *

    - * @author fabrizyo, FireIce, Veve, isv, GreatKevin, flexme, frozenfx, bugbuka, GreatKevin, Veve - * @version 2.3 + * + *

    + * Version 2.4 (TOPCODER DIRECT - SUPPORT CHALLENGES WITH ZERO PRIZE): + *

    + *

    + * + * @author fabrizyo, FireIce, Veve, isv, GreatKevin, flexme, frozenfx, bugbuka, TCSCODER + * @version 2.4 */ public class SaveDraftContestAction extends ContestAction { /** @@ -964,7 +972,7 @@ public boolean evaluate(Object object) { List newPrizes = new ArrayList(); if (prizes != null) { for (Prize prize : prizes) { - if (prize.getPrizeAmount() > 0) { + if (prize.getPrizeAmount() >= 0) { if (projectId > 0) { prize.setProjectId(projectId); } else { @@ -1037,6 +1045,11 @@ public boolean evaluate(Object object) { } } } + if ((softwareCompetition.getProjectHeader().getProperty(ProjectPropertyType.PRODUCT_SKU) == null || + "".equals(softwareCompetition.getProjectHeader().getProperty(ProjectPropertyType.PRODUCT_SKU))) && + softwareCompetition.getProjectHeader().getProperties().containsKey(ProjectPropertyType.PRODUCT_SKU)){ + softwareCompetition.getProjectHeader().getProperties().remove(ProjectPropertyType.PRODUCT_SKU); + } } /** diff --git a/src/web/WEB-INF/includes/contest/editTab.jsp b/src/web/WEB-INF/includes/contest/editTab.jsp index 759e5a047..d401d249b 100644 --- a/src/web/WEB-INF/includes/contest/editTab.jsp +++ b/src/web/WEB-INF/includes/contest/editTab.jsp @@ -96,6 +96,7 @@ Billing Account : + <%-- Private Group @@ -118,6 +119,13 @@ : +<%-- + + Product + : + + +--%> Copilot : @@ -251,7 +259,15 @@ -

    +


    + <%-- + Product + + + + +

    + --%>

    diff --git a/src/web/WEB-INF/includes/contest/editTabMarathon.jsp b/src/web/WEB-INF/includes/contest/editTabMarathon.jsp index 1a4afba3e..51ea087d9 100644 --- a/src/web/WEB-INF/includes/contest/editTabMarathon.jsp +++ b/src/web/WEB-INF/includes/contest/editTabMarathon.jsp @@ -87,6 +87,13 @@ : +<%-- + + Product + : + + +--%> Copilot : @@ -206,7 +213,15 @@
    -

    +


    +<%-- + Product + + + + +

    +--%>

    Copilot diff --git a/src/web/WEB-INF/includes/contest/editTabSoftware.jsp b/src/web/WEB-INF/includes/contest/editTabSoftware.jsp index db1553d8b..60ced1c87 100644 --- a/src/web/WEB-INF/includes/contest/editTabSoftware.jsp +++ b/src/web/WEB-INF/includes/contest/editTabSoftware.jsp @@ -139,6 +139,13 @@ : +<%-- + + Product + : + + +--%> Copilot : @@ -274,8 +281,15 @@
    - - +

    + <%-- + Product + + + + +

    +---%>
    Copilot diff --git a/src/web/WEB-INF/includes/launch/contestSelection.jsp b/src/web/WEB-INF/includes/launch/contestSelection.jsp index 85aa40eda..ec9625523 100644 --- a/src/web/WEB-INF/includes/launch/contestSelection.jsp +++ b/src/web/WEB-INF/includes/launch/contestSelection.jsp @@ -158,6 +158,13 @@ Manage Project Milestones
    + +<%-- +
    + + +
    +--%>
    diff --git a/src/web/scripts/common.js b/src/web/scripts/common.js index 93ae9321e..8c5247d83 100644 --- a/src/web/scripts/common.js +++ b/src/web/scripts/common.js @@ -130,9 +130,6 @@ function limitContestProjectNameChars(maxChars) { var textArea = $(this); var content = textArea.val(); var invalid = false; - if (content.search(invalidCharsRegExp, '') > -1) { - invalid = true; - } if (content.length <= maxChars && !invalid) { ori = content; } diff --git a/src/web/scripts/launch/contestDetailSoftware.js b/src/web/scripts/launch/contestDetailSoftware.js index 971dfeac2..9743d2853 100644 --- a/src/web/scripts/launch/contestDetailSoftware.js +++ b/src/web/scripts/launch/contestDetailSoftware.js @@ -1222,7 +1222,13 @@ function populateTypeSection() { $('#chkboxCCA').attr('checked', mainWidget.softwareCompetition.projectHeader.isLccchecked()); - //display + //product + /* + if (mainWidget.softwareCompetition.projectHeader.properties[PRODUCT_SKU] != null){ + $("#rProduct").text(mainWidget.softwareCompetition.projectHeader.properties[PRODUCT_SKU]); + $("#productName").val(mainWidget.softwareCompetition.projectHeader.properties[PRODUCT_SKU]); + } + */ $('#rContestTypeName').text($("#contestTypes option[value=" + mainWidget.competitionType + mainWidget.softwareCompetition.projectHeader.projectCategory.id +"]").text()); loadReviewScorecardList(null); @@ -1513,7 +1519,7 @@ function validateFieldsTypeSection() { if (categoryId == SOFTWARE_CATEGORY_ID_F2F) { // set review scorecard. mainWidget.softwareCompetition.projectHeader.iterativeReviewScorecardId = parseInt($('select#reviewScorecardSelects').val()); - } else { + } else if (categoryId != ALGORITHM_CATEGORY_ID_MARATHON){ // set iterative review scorecard mainWidget.softwareCompetition.projectHeader.reviewScorecardId = parseInt($('select#reviewScorecardSelects').val()); } diff --git a/src/web/scripts/launch/entity.js b/src/web/scripts/launch/entity.js index 7919bd6b1..033d344d7 100644 --- a/src/web/scripts/launch/entity.js +++ b/src/web/scripts/launch/entity.js @@ -194,6 +194,8 @@ var STUDIO_IDEA_GENERATION = 22; var DRAFT_STATUS = "Draft"; var ACTIVE_STATUS = "Active"; +var PRODUCT_SKU ="Product SKU"; + var projectCategoryArray = [ {id:SOFTWARE_CATEGORY_ID_CONCEPT, name:'CONCEPTUALIZATION', label:'Software Conceptualization', typeId:2, typeName:'Application', hasMulti:true, hideInDropdown: true}, {id:SOFTWARE_CATEGORY_ID_SPEC, name:'SPECIFICATION', label:'Software Specification', typeId:2, typeName:'Application', hasMulti:true, hideInDropdown: true}, diff --git a/src/web/scripts/launch/main.js b/src/web/scripts/launch/main.js index 3405c4ba0..e0dc614e3 100644 --- a/src/web/scripts/launch/main.js +++ b/src/web/scripts/launch/main.js @@ -1039,7 +1039,13 @@ function saveAsDraftRequest() { mainWidget.softwareCompetition.projectHeader.properties['Review Type'] = reviewType; } - +/* + if ($("#productName").val().trim().length > 0) { + mainWidget.softwareCompetition.projectHeader.properties[PRODUCT_SKU] = $("#productName").val().trim(); + }else{ + mainWidget.softwareCompetition.projectHeader.properties[PRODUCT_SKU] = ""; + } +*/ var request;