lfapi
diff lfapi/general_params.js @ 0:ce6f95d23e1c
Initial checkin
author | bsw |
---|---|
date | Sat Sep 10 23:31:20 2011 +0200 (2011-09-10) |
parents | |
children | 9fe872cc376d |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/lfapi/general_params.js Sat Sep 10 23:31:20 2011 +0200 1.3 @@ -0,0 +1,201 @@ 1.4 +config = require('../config.js'); 1.5 +exports.config = config; 1.6 + 1.7 +// ========================================================================== 1.8 +// Handle generic request parameters 1.9 +// -------------------------------------------------------------------------- 1.10 + 1.11 + 1.12 +exports.addLimitAndOffset = function (query, params) { 1.13 + var limit = params.limit ? parseInt(params.limit) : config.settings.result_row_limit.default 1.14 + if (limit > config.settings.result_row_limit.max) { 1.15 + limit = config.settings.result_row_limit.default; 1.16 + } 1.17 + query.limit(limit); 1.18 + query.offset(params.offset ? parseInt(params.offset) : 0); 1.19 +} 1.20 + 1.21 +// add member related options to a db query according to parameters given by client 1.22 +exports.addMemberOptions = function (req, query, params, relation) { 1.23 + var table_name = 'member'; 1.24 + if (relation) { 1.25 + table_name = relation + '_member'; 1.26 + }; 1.27 + var member_id = params[relation ? relation + '_member_id' : 'member_id']; 1.28 + var member_disabled = params[relation ? relation + '_member_disabled' : 'member_disabled'] ? true : false; 1.29 + var member_search = params[relation ? relation + '_member_search' : 'member_search']; 1.30 + var member_order_by_name = parseInt(params[relation ? relation + '_member_order_by_name' : 'member_order_by_name']); 1.31 + var member_order_by_created = parseInt(params[relation ? relation + '_member_order_by_created' : 'member_order_by_created']); 1.32 + 1.33 + if (member_id) { 1.34 + query.addWhere(['"' + table_name + '"."id" IN (??)', member_id.split(',')]); 1.35 + }; 1.36 + if (member_disabled) { 1.37 + query.addWhere('"' + table_name + '"."active" = FALSE'); 1.38 + } else { 1.39 + query.addWhere('"' + table_name + '"."active" = TRUE OR "' + table_name + '"."active" ISNULL'); 1.40 + }; 1.41 + if (member_search) { 1.42 + query.addWhere(['"' + table_name + '"."text_search_data" @@ text_search_query(?)', member_search]); 1.43 + }; 1.44 + if (member_order_by_name) { 1.45 + query.addOrderBy('"' + table_name + '"."name"') 1.46 + } 1.47 + if (member_order_by_created) { 1.48 + query.addOrderBy('"' + table_name + '"."created" DESC') 1.49 + } 1.50 +}; 1.51 + 1.52 +// add policy related options to a db query according to parameters given by client 1.53 +exports.addPolicyOptions = function (req, query, params) { 1.54 + if (params.policy_id) { 1.55 + query.addWhere(['policy.id IN (??)', params.policy_id.split(',')]); 1.56 + } 1.57 + if (params.policy_order_by_name) { 1.58 + query.addOrderBy('"policy"."name"') 1.59 + } 1.60 +}; 1.61 + 1.62 +// add unit related options to a db query according to parameters given by client 1.63 +exports.addUnitOptions = function (req, query, params) { 1.64 + if (params.unit_id) { 1.65 + query.addWhere(['"unit"."id" IN (??)', params.unit_id.split(',')]); 1.66 + } 1.67 + if (params.unit_parent_id) { 1.68 + query.addWhere(['"unit"."parent_id" = ?', params.unit_parent_id]); 1.69 + } 1.70 + if (params.unit_without_parent) { 1.71 + query.addWhere('"unit"."parent_id" ISNULL'); 1.72 + } 1.73 + if (params.unit_disabled) { 1.74 + query.addWhere('"unit"."active" = FALSE'); 1.75 + } else { 1.76 + query.addWhere('"unit"."active" = TRUE'); 1.77 + } 1.78 + if (params.unit_order_by_name) { 1.79 + query.addOrderBy('"unit"."name"') 1.80 + } 1.81 +} 1.82 + 1.83 +// add area related options to a db query according to parameters given by client 1.84 +exports.addAreaOptions = function (req, query, params) { 1.85 + exports.addUnitOptions(req, query, params); 1.86 + if (params.area_id) { 1.87 + query.addWhere(['"area"."id" IN (??)', params.area_id.split(',')]); 1.88 + } 1.89 + if (params.area_disabled) { 1.90 + query.addWhere('"area"."active" = FALSE'); 1.91 + } else { 1.92 + query.addWhere('"area"."active" = TRUE'); 1.93 + } 1.94 + if (req.current_access_level == 'member' && params.area_my) { 1.95 + query.addWhere(['"area"."id" IN (SELECT "area_id" FROM "membership" WHERE "member_id" = ?)', req.current_member_id]); 1.96 + } 1.97 + if (params.area_order_by_name) { 1.98 + query.addOrderBy('"area"."name"') 1.99 + } 1.100 +} 1.101 + 1.102 +// add issue related options to a db query according to parameters given by client 1.103 +exports.addIssueOptions = function (req, query, params) { 1.104 + exports.addAreaOptions(req, query, params); 1.105 + exports.addPolicyOptions(req, query, params); 1.106 + 1.107 + if (params.issue_id) query.addWhere(['issue.id IN (??)', params.issue_id.split(',')]); 1.108 + 1.109 + if (params.issue_state) { 1.110 + var issue_state_string; 1.111 + if (params.issue_state == 'open') { 1.112 + issue_states = ['admission', 'discussion', 'verification', 'voting']; 1.113 + } else if (params.issue_state == 'closed') { 1.114 + issue_state_string = ['canceled_revoked_before_accepted', 'canceled_issue_not_accepted', 'canceled_after_revocation_during_discussion', 'canceled_after_revocation_during_verification', 'calculation', 'canceled_no_initiative_admitted', 'finished_without_winner', 'finished_with_winner']; 1.115 + } else { 1.116 + issue_states = params.issue_state.split(','); 1.117 + } 1.118 + query.addWhere('"issue"."state" IN (??)', issue_states); 1.119 + }; 1.120 + 1.121 + if (params.issue_accepted) query.addWhere('"issue"."accepted" NOTNULL'); 1.122 + if (params.issue_half_frozen) query.addWhere('"issue"."half_frozen" NOTNULL'); 1.123 + if (params.issue_fully_frozen) query.addWhere('"issue"."fully_frozen" NOTNULL'); 1.124 + if (params.issue_closed) query.addWhere('"issue"."closed" NOTNULL'); 1.125 + if (params.issue_cleaned) query.addWhere('"issue"."cleaned" NOTNULL'); 1.126 + 1.127 + if (params.issue_created_after) query.addWhere(['"issue"."created" >= ?', params.issue_created_after]); 1.128 + if (params.issue_created_before) query.addWhere(['"issue"."created" < ?', params.issue_created_before]); 1.129 + if (params.issue_accepted_after) query.addWhere(['"issue"."accepted" >= ?', params.issue_accepted_after]); 1.130 + if (params.issue_accepted_before) query.addWhere(['"issue"."accepted" < ?', params.issue_accepted_before]); 1.131 + if (params.issue_half_frozen_after) query.addWhere(['"issue"."half_frozen" >= ?', params.issue_half_frozen_after]); 1.132 + if (params.issue_half_frozen_before) query.addWhere(['"issue"."half_frozen" < ?', params.issue_half_frozen_before]); 1.133 + if (params.issue_fully_frozen_after) query.addWhere(['"issue"."fully_frozen" >= ?', params.issue_fully_frozen_after]); 1.134 + if (params.issue_fully_frozen_before) query.addWhere(['"issue"."fully_frozen" < ?', params.issue_fully_frozen_before]); 1.135 + if (params.issue_closed_after) query.addWhere(['"issue"."closed" >= ?', params.issue_closed_after]); 1.136 + if (params.issue_closed_before) query.addWhere(['"issue"."closed" < ?', params.issue_closed_before]); 1.137 + if (params.issue_cleaned_after) query.addWhere(['"issue."cleaned" >= ?', params.issue_cleaned_after]); 1.138 + if (params.issue_cleaned_before) query.addWhere(['"issue"."cleaned" < ?', params.issue_cleaned_before]); 1.139 + 1.140 + if (params.issue_state_time_left_below) { 1.141 + query.addWhere(['(case issue.state when \'admission\' then issue.created + issue.admission_time when \'discussion\' then issue.accepted + issue.discussion_time when \'verification\' then issue.half_frozen + issue.verification_time when \'voting\' then issue.fully_frozen + issue.voting_time end) - now() < ?', params.issue_state_time_left_below]); 1.142 + }; 1.143 + 1.144 + if (params.issue_order_by_id) query.addOrderBy('"issue"."id"'); 1.145 +} 1.146 + 1.147 +// add initiative related options to a db query according to parameters given by client 1.148 +exports.addInitiativeOptions = function (req, query, params) { 1.149 + exports.addIssueOptions(req, query, params); 1.150 + if (params.initiative_id) { 1.151 + query.addWhere(['initiative.id IN (??)', params.initiative_id.split(',')]); 1.152 + } 1.153 + // TODO 1.154 + //query.from.push('JOIN initiator AS initiative_initiator ON initiative_initiator.initiative_id = initiative.id AND initiative_initiator.accepted JOIN member AS initiator_member ON initiator_member.id = initiative_initiator.member_id'); 1.155 + //query.from.push('JOIN supporter AS initiative_supporter ON initiative_supporter.initiative_id = initiative.id JOIN member AS supporter_member ON supporter_member.id = initiative_supporter.member_id'); 1.156 + //exports.addMemberOptions(query, params, 'initiator'); 1.157 + //exports.addMemberOptions(query, params, 'supporter'); 1.158 + 1.159 + if (params.initiative_revoked) query.addWhere('initiative.revoked NOTNULL'); 1.160 + if (params.initiative_revoked_after) query.addWhere(['initiative.revoked >= ?', params.initiative_revoked_after]); 1.161 + if (params.initiative_revoked_before) query.addWhere(['initiative.revoked < ?', params.initiative_revoked_before]); 1.162 + if (params.initiative_revoked_by_member_id) query.addWhere(['initiative.revoked_by_member_id = ?', params.initiative_revoked_by_member_id]); 1.163 + if (params.initiative_suggested_initiative_id) query.addWhere(['initiative.suggested_initiative_id = ?', params.initiative_suggested_initiative_id]); 1.164 + 1.165 + if (params.initiative_admitted) query.addWhere('initiative.admitted NOTNULL'); 1.166 + if (params.initiative_created_after) query.addWhere(['initiative.created >= ?', params.initiative_created_after]); 1.167 + if (params.initiative_created_before) query.addWhere(['initiative.created < ?',params.initiative_created_before]); 1.168 + if (params.initiative_admitted_after) query.addWhere(['initiative.admitted >= ?', params.initiative_admitted_after]); 1.169 + if (params.initiative_admitted_before) query.addWhere(['initiative.admitted < ?', params.initiative_admitted_before]); 1.170 + 1.171 + if (params.initiative_supporter_count_below) query.addWhere(['initiative.supporter_count < ?', params.initiative_supporter_count_below]); 1.172 + if (params.initiative_supporter_count_above) query.addWhere(['initiative.supporter_count >= ?', params.initiative_supporter_count_above]); 1.173 + 1.174 + if (params.initiative_attainable) query.addWhere('initiative.attainable'); 1.175 + if (params.initiative_favored) query.addWhere('initiative.favored'); 1.176 + if (params.initiative_unfavored) query.addWhere('initiative.unfavored'); 1.177 + 1.178 + if (params.initiative_max_preliminary_rank) query.addWhere(['initiative.preliminary_rank <= ?', params.initiative_max_preliminary_rank]); 1.179 + if (params.initiative_max_final_rank) query.addWhere(['initiative.preliminary_rank <= ?', params.initiative_max_final_rank]); 1.180 + 1.181 + if (params.initiative_disqualified) query.addWhere('initiative.disqualified'); 1.182 + if (params.initiative_winner) query.addWhere('initiative.winner'); 1.183 + 1.184 + if (params.initiative_search) { 1.185 + query.addWhere(['initiative.text_search_data @@ text_search_query(?)', params.initiative_search]); 1.186 + }; 1.187 + if (params.initiative_order_by_id) { 1.188 + query.addOrderBy('initiative.id'); 1.189 + } 1.190 +} 1.191 + 1.192 +// add suggestion related options to a db query according to parameters given by client 1.193 +exports.addSuggestionOptions = function (req, query, params) { 1.194 + exports.addInitiativeOptions(req, query, params); 1.195 + if (params.suggestion_id) { 1.196 + query.addWhere(['suggestion.id IN (??)', params.suggestion_id]); 1.197 + } 1.198 + if (params.suggestion_search) { 1.199 + query.addWhere(['suggestion.text_search_data @@ text_search_query(?)', params.suggestion_search]); 1.200 + }; 1.201 + if (params.include_suggestion) { 1.202 + addObjectFields(query, 'suggestion'); 1.203 + }; 1.204 +}