def store_additional_questionnaire_answers(session, tid, tip_id, answers, language): itip = session.query(models.InternalTip) \ .filter(models.InternalTip.id == tip_id, models.InternalTip.tid == tid).one() if not itip.additional_questionnaire_id: return steps = db_get_questionnaire(session, tid, itip.additional_questionnaire_id, None)['steps'] questionnaire_hash = db_archive_questionnaire_schema(session, steps) if itip.crypto_tip_pub_key: answers = base64.b64encode( GCE.asymmetric_encrypt(itip.crypto_tip_pub_key, json.dumps(answers).encode())).decode() else: db_save_questionnaire_answers(session, tid, itip.id, answers) db_set_internaltip_answers(session, itip.id, questionnaire_hash, answers, False) itip.additional_questionnaire_id = ''
def update_identity_information(session, tid, tip_id, identity_field_id, identity_field_answers, language): internaltip = models.db_get(session, models.InternalTip, models.InternalTip.id == tip_id, models.InternalTip.tid == tid) if internaltip.identity_provided: return aqs = session.query(models.ArchivedSchema).filter( models.ArchivedSchema.hash == internaltip.questionnaire_hash).one() questionnaire = db_serialize_archived_questionnaire_schema( session, aqs.schema, language) for step in questionnaire: for field in step['children']: if field['id'] == identity_field_id and field[ 'id'] == 'whistleblower_identity': db_save_questionnaire_answers( session, tid, internaltip.id, {identity_field_id: [identity_field_answers]}) now = datetime_now() internaltip.update_date = now internaltip.wb_last_access = now internaltip.identity_provided = True internaltip.identity_provided_date = now return
def update_identity_information(store, tip_id, identity_field_id, identity_field_answers, language): wbtip = db_access_wbtip(store, tip_id) internaltip = wbtip.internaltip identity_provided = internaltip.identity_provided if not identity_provided: questionnaire = db_get_archived_questionnaire_schema(store, internaltip.questionnaire_hash, language) for step in questionnaire: for field in step['children']: if field['id'] == identity_field_id and field['key'] == 'whistleblower_identity': db_save_questionnaire_answers(store, internaltip.id, {identity_field_id: [identity_field_answers]}) now = datetime_now() internaltip.update_date = now internaltip.identity_provided = True internaltip.identity_provided_date = now return
def update_identity_information(store, tip_id, identity_field_id, identity_field_answers, language): internaltip = models.db_get(store, models.InternalTip, id=tip_id) if internaltip.identity_provided: return questionnaire = db_serialize_archived_questionnaire_schema(store, internaltip.questionnaire_hash, language) for step in questionnaire: for field in step['children']: if field['id'] == identity_field_id and field['id'] == 'whistleblower_identity': db_save_questionnaire_answers(store, internaltip.id, {identity_field_id: [identity_field_answers]}) now = datetime_now() internaltip.update_date = now internaltip.identity_provided = True internaltip.identity_provided_date = now return
def store_additional_questionnaire_answers(session, tid, tip_id, answers, language): internaltip = session.query(models.InternalTip) \ .filter(models.InternalTip.id == tip_id, models.InternalTip.tid == tid).one() if not internaltip.additional_questionnaire_id: return steps = db_get_questionnaire(session, tid, internaltip.additional_questionnaire_id, None)['steps'] questionnaire_hash = db_archive_questionnaire_schema(session, steps) db_save_questionnaire_answers(session, tid, internaltip.id, answers) db_set_internaltip_answers(session, internaltip.id, questionnaire_hash, answers, False) internaltip.additional_questionnaire_id = ''
def handle_internaltip_fixes(self, new_obj, old_obj): old_node = self.store_old.find(self.model_from['Node']).one() new_archivedschema_model = self.model_to['ArchivedSchema'] questionnaire, answers = self.extract_answers_from_wb_steps( old_obj.wb_steps) new_obj.questionnaire_hash = sha256(json.dumps(questionnaire)) aqs = self.store_new.find( new_archivedschema_model, new_archivedschema_model.hash == unicode( new_obj.questionnaire_hash), new_archivedschema_model.type == u'questionnaire', new_archivedschema_model.language == unicode( old_node.default_language)).one() if not aqs: for lang in old_node.languages_enabled: aqs = new_archivedschema_model() aqs.hash = new_obj.questionnaire_hash aqs.type = u'questionnaire' aqs.language = lang aqs.schema = questionnaire self.store_new.add(aqs) preview = [] for s in aqs.schema: for f in s['children']: if f['preview']: preview.append(f) aqsp = new_archivedschema_model() aqsp.hash = new_obj.questionnaire_hash aqsp.type = u'preview' aqsp.language = lang aqsp.schema = preview self.store_new.add(aqsp) db_save_questionnaire_answers(self.store_new, new_obj.id, answers) new_obj.preview = extract_answers_preview(questionnaire, answers)
def handle_internaltip_fixes(self, new_obj, old_obj): old_node = self.store_old.find(self.model_from['Node']).one() new_archivedschema_model = self.model_to['ArchivedSchema'] questionnaire, answers = self.extract_answers_from_wb_steps(old_obj.wb_steps) new_obj.questionnaire_hash = sha256(json.dumps(questionnaire)) aqs = self.store_new.find(new_archivedschema_model, new_archivedschema_model.hash == unicode(new_obj.questionnaire_hash), new_archivedschema_model.type == u'questionnaire', new_archivedschema_model.language == unicode(old_node.default_language)).one() if not aqs: for lang in old_node.languages_enabled: aqs = new_archivedschema_model() aqs.hash = new_obj.questionnaire_hash aqs.type = u'questionnaire' aqs.language = lang aqs.schema = questionnaire self.store_new.add(aqs) preview = [] for s in aqs.schema: for f in s['children']: if f['preview']: preview.append(f) aqsp = new_archivedschema_model() aqsp.hash = new_obj.questionnaire_hash aqsp.type = u'preview' aqsp.language = lang aqsp.schema = preview self.store_new.add(aqsp) db_save_questionnaire_answers(self.store_new, new_obj.id, answers) new_obj.preview = extract_answers_preview(questionnaire, answers)