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 +}

Impressum / About Us