lfapi

annotate 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
rev   line source
bsw@0 1 config = require('../config.js');
bsw@0 2 exports.config = config;
bsw@0 3
bsw@0 4 // ==========================================================================
bsw@0 5 // Handle generic request parameters
bsw@0 6 // --------------------------------------------------------------------------
bsw@0 7
bsw@0 8
bsw@0 9 exports.addLimitAndOffset = function (query, params) {
bsw@0 10 var limit = params.limit ? parseInt(params.limit) : config.settings.result_row_limit.default
bsw@0 11 if (limit > config.settings.result_row_limit.max) {
bsw@0 12 limit = config.settings.result_row_limit.default;
bsw@0 13 }
bsw@0 14 query.limit(limit);
bsw@0 15 query.offset(params.offset ? parseInt(params.offset) : 0);
bsw@0 16 }
bsw@0 17
bsw@0 18 // add member related options to a db query according to parameters given by client
bsw@0 19 exports.addMemberOptions = function (req, query, params, relation) {
bsw@0 20 var table_name = 'member';
bsw@0 21 if (relation) {
bsw@0 22 table_name = relation + '_member';
bsw@0 23 };
bsw@0 24 var member_id = params[relation ? relation + '_member_id' : 'member_id'];
bsw@0 25 var member_disabled = params[relation ? relation + '_member_disabled' : 'member_disabled'] ? true : false;
bsw@0 26 var member_search = params[relation ? relation + '_member_search' : 'member_search'];
bsw@0 27 var member_order_by_name = parseInt(params[relation ? relation + '_member_order_by_name' : 'member_order_by_name']);
bsw@0 28 var member_order_by_created = parseInt(params[relation ? relation + '_member_order_by_created' : 'member_order_by_created']);
bsw@0 29
bsw@0 30 if (member_id) {
bsw@0 31 query.addWhere(['"' + table_name + '"."id" IN (??)', member_id.split(',')]);
bsw@0 32 };
bsw@0 33 if (member_disabled) {
bsw@0 34 query.addWhere('"' + table_name + '"."active" = FALSE');
bsw@0 35 } else {
bsw@0 36 query.addWhere('"' + table_name + '"."active" = TRUE OR "' + table_name + '"."active" ISNULL');
bsw@0 37 };
bsw@0 38 if (member_search) {
bsw@0 39 query.addWhere(['"' + table_name + '"."text_search_data" @@ text_search_query(?)', member_search]);
bsw@0 40 };
bsw@0 41 if (member_order_by_name) {
bsw@0 42 query.addOrderBy('"' + table_name + '"."name"')
bsw@0 43 }
bsw@0 44 if (member_order_by_created) {
bsw@0 45 query.addOrderBy('"' + table_name + '"."created" DESC')
bsw@0 46 }
bsw@0 47 };
bsw@0 48
bsw@0 49 // add policy related options to a db query according to parameters given by client
bsw@0 50 exports.addPolicyOptions = function (req, query, params) {
bsw@0 51 if (params.policy_id) {
bsw@0 52 query.addWhere(['policy.id IN (??)', params.policy_id.split(',')]);
bsw@0 53 }
bsw@0 54 if (params.policy_order_by_name) {
bsw@0 55 query.addOrderBy('"policy"."name"')
bsw@0 56 }
bsw@0 57 };
bsw@0 58
bsw@0 59 // add unit related options to a db query according to parameters given by client
bsw@0 60 exports.addUnitOptions = function (req, query, params) {
bsw@0 61 if (params.unit_id) {
bsw@0 62 query.addWhere(['"unit"."id" IN (??)', params.unit_id.split(',')]);
bsw@0 63 }
bsw@0 64 if (params.unit_parent_id) {
bsw@0 65 query.addWhere(['"unit"."parent_id" = ?', params.unit_parent_id]);
bsw@0 66 }
bsw@0 67 if (params.unit_without_parent) {
bsw@0 68 query.addWhere('"unit"."parent_id" ISNULL');
bsw@0 69 }
bsw@0 70 if (params.unit_disabled) {
bsw@0 71 query.addWhere('"unit"."active" = FALSE');
bsw@0 72 } else {
bsw@0 73 query.addWhere('"unit"."active" = TRUE');
bsw@0 74 }
bsw@0 75 if (params.unit_order_by_name) {
bsw@0 76 query.addOrderBy('"unit"."name"')
bsw@0 77 }
bsw@0 78 }
bsw@0 79
bsw@0 80 // add area related options to a db query according to parameters given by client
bsw@0 81 exports.addAreaOptions = function (req, query, params) {
bsw@0 82 exports.addUnitOptions(req, query, params);
bsw@0 83 if (params.area_id) {
bsw@0 84 query.addWhere(['"area"."id" IN (??)', params.area_id.split(',')]);
bsw@0 85 }
bsw@0 86 if (params.area_disabled) {
bsw@0 87 query.addWhere('"area"."active" = FALSE');
bsw@0 88 } else {
bsw@0 89 query.addWhere('"area"."active" = TRUE');
bsw@0 90 }
bsw@0 91 if (req.current_access_level == 'member' && params.area_my) {
bsw@0 92 query.addWhere(['"area"."id" IN (SELECT "area_id" FROM "membership" WHERE "member_id" = ?)', req.current_member_id]);
bsw@0 93 }
bsw@0 94 if (params.area_order_by_name) {
bsw@0 95 query.addOrderBy('"area"."name"')
bsw@0 96 }
bsw@0 97 }
bsw@0 98
bsw@0 99 // add issue related options to a db query according to parameters given by client
bsw@0 100 exports.addIssueOptions = function (req, query, params) {
bsw@0 101 exports.addAreaOptions(req, query, params);
bsw@0 102 exports.addPolicyOptions(req, query, params);
bsw@0 103
bsw@0 104 if (params.issue_id) query.addWhere(['issue.id IN (??)', params.issue_id.split(',')]);
bsw@0 105
bsw@0 106 if (params.issue_state) {
bsw@0 107 var issue_state_string;
bsw@0 108 if (params.issue_state == 'open') {
bsw@0 109 issue_states = ['admission', 'discussion', 'verification', 'voting'];
bsw@0 110 } else if (params.issue_state == 'closed') {
bsw@0 111 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'];
bsw@0 112 } else {
bsw@0 113 issue_states = params.issue_state.split(',');
bsw@0 114 }
bsw@0 115 query.addWhere('"issue"."state" IN (??)', issue_states);
bsw@0 116 };
bsw@0 117
bsw@0 118 if (params.issue_accepted) query.addWhere('"issue"."accepted" NOTNULL');
bsw@0 119 if (params.issue_half_frozen) query.addWhere('"issue"."half_frozen" NOTNULL');
bsw@0 120 if (params.issue_fully_frozen) query.addWhere('"issue"."fully_frozen" NOTNULL');
bsw@0 121 if (params.issue_closed) query.addWhere('"issue"."closed" NOTNULL');
bsw@0 122 if (params.issue_cleaned) query.addWhere('"issue"."cleaned" NOTNULL');
bsw@0 123
bsw@0 124 if (params.issue_created_after) query.addWhere(['"issue"."created" >= ?', params.issue_created_after]);
bsw@0 125 if (params.issue_created_before) query.addWhere(['"issue"."created" < ?', params.issue_created_before]);
bsw@0 126 if (params.issue_accepted_after) query.addWhere(['"issue"."accepted" >= ?', params.issue_accepted_after]);
bsw@0 127 if (params.issue_accepted_before) query.addWhere(['"issue"."accepted" < ?', params.issue_accepted_before]);
bsw@0 128 if (params.issue_half_frozen_after) query.addWhere(['"issue"."half_frozen" >= ?', params.issue_half_frozen_after]);
bsw@0 129 if (params.issue_half_frozen_before) query.addWhere(['"issue"."half_frozen" < ?', params.issue_half_frozen_before]);
bsw@0 130 if (params.issue_fully_frozen_after) query.addWhere(['"issue"."fully_frozen" >= ?', params.issue_fully_frozen_after]);
bsw@0 131 if (params.issue_fully_frozen_before) query.addWhere(['"issue"."fully_frozen" < ?', params.issue_fully_frozen_before]);
bsw@0 132 if (params.issue_closed_after) query.addWhere(['"issue"."closed" >= ?', params.issue_closed_after]);
bsw@0 133 if (params.issue_closed_before) query.addWhere(['"issue"."closed" < ?', params.issue_closed_before]);
bsw@0 134 if (params.issue_cleaned_after) query.addWhere(['"issue."cleaned" >= ?', params.issue_cleaned_after]);
bsw@0 135 if (params.issue_cleaned_before) query.addWhere(['"issue"."cleaned" < ?', params.issue_cleaned_before]);
bsw@0 136
bsw@0 137 if (params.issue_state_time_left_below) {
bsw@0 138 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]);
bsw@0 139 };
bsw@0 140
bsw@0 141 if (params.issue_order_by_id) query.addOrderBy('"issue"."id"');
bsw@0 142 }
bsw@0 143
bsw@0 144 // add initiative related options to a db query according to parameters given by client
bsw@0 145 exports.addInitiativeOptions = function (req, query, params) {
bsw@0 146 exports.addIssueOptions(req, query, params);
bsw@0 147 if (params.initiative_id) {
bsw@0 148 query.addWhere(['initiative.id IN (??)', params.initiative_id.split(',')]);
bsw@0 149 }
bsw@0 150 // TODO
bsw@0 151 //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');
bsw@0 152 //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');
bsw@0 153 //exports.addMemberOptions(query, params, 'initiator');
bsw@0 154 //exports.addMemberOptions(query, params, 'supporter');
bsw@0 155
bsw@0 156 if (params.initiative_revoked) query.addWhere('initiative.revoked NOTNULL');
bsw@0 157 if (params.initiative_revoked_after) query.addWhere(['initiative.revoked >= ?', params.initiative_revoked_after]);
bsw@0 158 if (params.initiative_revoked_before) query.addWhere(['initiative.revoked < ?', params.initiative_revoked_before]);
bsw@0 159 if (params.initiative_revoked_by_member_id) query.addWhere(['initiative.revoked_by_member_id = ?', params.initiative_revoked_by_member_id]);
bsw@0 160 if (params.initiative_suggested_initiative_id) query.addWhere(['initiative.suggested_initiative_id = ?', params.initiative_suggested_initiative_id]);
bsw@0 161
bsw@0 162 if (params.initiative_admitted) query.addWhere('initiative.admitted NOTNULL');
bsw@0 163 if (params.initiative_created_after) query.addWhere(['initiative.created >= ?', params.initiative_created_after]);
bsw@0 164 if (params.initiative_created_before) query.addWhere(['initiative.created < ?',params.initiative_created_before]);
bsw@0 165 if (params.initiative_admitted_after) query.addWhere(['initiative.admitted >= ?', params.initiative_admitted_after]);
bsw@0 166 if (params.initiative_admitted_before) query.addWhere(['initiative.admitted < ?', params.initiative_admitted_before]);
bsw@0 167
bsw@0 168 if (params.initiative_supporter_count_below) query.addWhere(['initiative.supporter_count < ?', params.initiative_supporter_count_below]);
bsw@0 169 if (params.initiative_supporter_count_above) query.addWhere(['initiative.supporter_count >= ?', params.initiative_supporter_count_above]);
bsw@0 170
bsw@0 171 if (params.initiative_attainable) query.addWhere('initiative.attainable');
bsw@0 172 if (params.initiative_favored) query.addWhere('initiative.favored');
bsw@0 173 if (params.initiative_unfavored) query.addWhere('initiative.unfavored');
bsw@0 174
bsw@0 175 if (params.initiative_max_preliminary_rank) query.addWhere(['initiative.preliminary_rank <= ?', params.initiative_max_preliminary_rank]);
bsw@0 176 if (params.initiative_max_final_rank) query.addWhere(['initiative.preliminary_rank <= ?', params.initiative_max_final_rank]);
bsw@0 177
bsw@0 178 if (params.initiative_disqualified) query.addWhere('initiative.disqualified');
bsw@0 179 if (params.initiative_winner) query.addWhere('initiative.winner');
bsw@0 180
bsw@0 181 if (params.initiative_search) {
bsw@0 182 query.addWhere(['initiative.text_search_data @@ text_search_query(?)', params.initiative_search]);
bsw@0 183 };
bsw@0 184 if (params.initiative_order_by_id) {
bsw@0 185 query.addOrderBy('initiative.id');
bsw@0 186 }
bsw@0 187 }
bsw@0 188
bsw@0 189 // add suggestion related options to a db query according to parameters given by client
bsw@0 190 exports.addSuggestionOptions = function (req, query, params) {
bsw@0 191 exports.addInitiativeOptions(req, query, params);
bsw@0 192 if (params.suggestion_id) {
bsw@0 193 query.addWhere(['suggestion.id IN (??)', params.suggestion_id]);
bsw@0 194 }
bsw@0 195 if (params.suggestion_search) {
bsw@0 196 query.addWhere(['suggestion.text_search_data @@ text_search_query(?)', params.suggestion_search]);
bsw@0 197 };
bsw@0 198 if (params.include_suggestion) {
bsw@0 199 addObjectFields(query, 'suggestion');
bsw@0 200 };
bsw@0 201 }

Impressum / About Us