diff --git a/actions/challengeRegistration.js b/actions/challengeRegistration.js index 8f73c9020..791121d3f 100644 --- a/actions/challengeRegistration.js +++ b/actions/challengeRegistration.js @@ -869,9 +869,12 @@ exports.registerChallenge = { if (error) { console.log("error: " + error); cb(error); - } else { - console.log("error11: " + error); - api.dataAccess.executeQuery('check_challenge_exists', {challengeId: challengeId}, connection.dbConnectionMap, cb); + } else { + api.helper.checkUserActivated(connection.caller.handle, api, connection.dbConnectionMap, function (err, inactive) { + var fail = err || inactive; + if (fail) cb(fail); + else api.dataAccess.executeQuery('check_challenge_exists', {challengeId: challengeId}, connection.dbConnectionMap, cb); + }, "You must activate your account in order to participate. Please check your e-mail in order to complete the activation process, or contact support@topcoder.com if you did not receive an e-mail."); } }, function (result, cb) { if (result.length > 0) { diff --git a/actions/challenges.js b/actions/challenges.js index e03414f49..88fb6b460 100755 --- a/actions/challenges.js +++ b/actions/challenges.js @@ -125,7 +125,9 @@ var QUERY_PATH = './queries/'; */ var TECHNOLOGY_FILTER = ' AND EXISTS (SELECT DISTINCT 1 FROM comp_technology ct WHERE ct.comp_vers_id = pi1.value ' + 'AND ct.technology_type_id IN (@filter@))'; - + +var EXT_TECHNOLOGY_FILTER = ' AND (pn.value LIKE ("%@tech@%") OR EXISTS (SELECT DISTINCT 1 FROM comp_technology ct WHERE ct.comp_vers_id = pi1.value ' + + 'AND ct.technology_type_id IN (@filter@)))'; /** * The platform filter for challenges api. * @since 1.23 @@ -745,7 +747,7 @@ function transferResultV2(src, helper) { * @param {String} content - the content that need in template. * @since 1.23 */ -var editSql = function (sql, template, content) { +var editSql = function (sql, template, content, tech) { // For empty sql just return it. if (sql.length === 0) { return sql; @@ -753,6 +755,7 @@ var editSql = function (sql, template, content) { var index = sql.toLowerCase().indexOf('order by'); if (!_.isUndefined(template)) { template = template.replace('@filter@', content); + template = template.replace('@tech@', tech); } return sql.slice(0, index) + template + sql.slice(index, sql.length); }; @@ -776,8 +779,13 @@ var addFilter = function (sql, filter, isMyChallenges, helper, caller) { if (_.isDefined(filter.technologies)) { technology = filter.technologies.join(', '); - sql.count = editSql(sql.count, TECHNOLOGY_FILTER, technology); - sql.data = editSql(sql.data, TECHNOLOGY_FILTER, technology); + if (filter.tech) { + sql.count = editSql(sql.count, EXT_TECHNOLOGY_FILTER, technology, filter.tech); + sql.data = editSql(sql.data, EXT_TECHNOLOGY_FILTER, technology, filter.tech); + } else { + sql.count = editSql(sql.count, TECHNOLOGY_FILTER, technology); + sql.data = editSql(sql.data, TECHNOLOGY_FILTER, technology); + } } if (_.isDefined(filter.challengeType)) { @@ -3708,6 +3716,10 @@ var getChallenges = function (api, connection, listType, isMyChallenges, next) { }, function (cb) { validateInputParameterV2(helper, caller, type, query, filter, pageIndex, pageSize, sortColumn, sortOrder, listType, dbConnectionMap, cb); + + if (filter.technologies) { + filter.tech = filter.technologies.split(',')[0]; + } }, function (cb) { if (pageIndex === -1) { pageIndex = 1; diff --git a/apiary.apib b/apiary.apib index 955a88fc9..f7dd6dcd6 100644 --- a/apiary.apib +++ b/apiary.apib @@ -9946,7 +9946,7 @@ Request } ## Register for a software/studio challenge [/challenges/{challengeId}/register] -### Register for a software/studio challenge [GET] +### Register for a software/studio challenge [POST] + Parameters + challengeId (required, number, `1234567`) ... The challenge for which to register diff --git a/initializers/helper.js b/initializers/helper.js index 466d970b1..198a9f05d 100644 --- a/initializers/helper.js +++ b/initializers/helper.js @@ -1625,7 +1625,7 @@ helper.checkUserExists = function (handle, api, dbConnectionMap, callback) { * @param {Object} dbConnectionMap - the database connection map * @param {Function} callback - the callback function */ -helper.checkUserActivated = function (handle, api, dbConnectionMap, callback) { +helper.checkUserActivated = function (handle, api, dbConnectionMap, callback, textResponse) { api.dataAccess.executeQuery('check_user_activated', { handle: handle }, dbConnectionMap, function (err, result) { if (err) { callback(err, null); @@ -1634,7 +1634,8 @@ helper.checkUserActivated = function (handle, api, dbConnectionMap, callback) { if (result && result[0] && result[0].status === 'A') { callback(err, null); } else { - callback(err, new BadRequestError('User is not activated.')); + var message = textResponse || 'User is not activated.'; + callback(err, new BadRequestError(message)); } }); };