def send_test(service_id, template_id): session['recipient'] = None session['placeholders'] = {} session['send_test_letter_page_count'] = None db_template = current_service.get_template_with_user_permission_or_403( template_id, current_user) if db_template['template_type'] == 'letter': session['sender_id'] = None if email_or_sms_not_enabled(db_template['template_type'], current_service.permissions): return redirect( url_for('.action_blocked', service_id=service_id, notification_type=db_template['template_type'], return_to='view_template', template_id=template_id)) return redirect( url_for( { 'main.send_test': '.send_test_step', 'main.send_one_off': '.send_one_off_step', }[request.endpoint], service_id=service_id, template_id=template_id, step_index=0, help=get_help_argument(), ))
def send_test(service_id, template_id): session["recipient"] = None session["placeholders"] = {} session["send_test_letter_page_count"] = None db_template = current_service.get_template_with_user_permission_or_403( template_id, current_user) if db_template["template_type"] == "letter": session["sender_id"] = None if email_or_sms_not_enabled(db_template["template_type"], current_service.permissions): return redirect( url_for( ".action_blocked", service_id=service_id, notification_type=db_template["template_type"], return_to="view_template", template_id=template_id, )) return redirect( url_for( { "main.send_test": ".send_test_step", "main.send_one_off": ".send_one_off_step", }[request.endpoint], service_id=service_id, template_id=template_id, step_index=0, help=get_help_argument(), ))
def _add_template_by_type(template_type, template_folder_id): if template_type == 'copy-existing': return redirect( url_for( '.choose_template_to_copy', service_id=current_service.id, )) if template_type == 'letter': blank_letter = service_api_client.create_service_template( 'New letter template', 'letter', 'Body', current_service.id, 'Main heading', 'normal', template_folder_id) return redirect( url_for( '.view_template', service_id=current_service.id, template_id=blank_letter['data']['id'], )) if email_or_sms_not_enabled(template_type, current_service.permissions): return redirect( url_for('.action_blocked', service_id=current_service.id, notification_type=template_type, return_to='add_new_template', template_id='0')) else: return redirect( url_for( '.add_service_template', service_id=current_service.id, template_type=template_type, template_folder_id=template_folder_id, ))
def send_messages(service_id, template_id): session['sender_id'] = None db_template = service_api_client.get_service_template(service_id, template_id)['data'] if email_or_sms_not_enabled(db_template['template_type'], current_service['permissions']): return redirect(url_for( '.action_blocked', service_id=service_id, notification_type=db_template['template_type'], return_to='view_template', template_id=template_id )) template = get_template( db_template, current_service, show_recipient=True, expand_emails=True, letter_preview_url=url_for( '.view_letter_template_preview', service_id=service_id, template_id=template_id, filetype='png', page_count=get_page_count_for_letter(db_template), ), ) form = CsvUploadForm() if form.validate_on_submit(): try: upload_id = s3upload( service_id, Spreadsheet.from_file(form.file.data, filename=form.file.data.filename).as_dict, current_app.config['AWS_REGION'] ) session['upload_data'] = { "template_id": template_id, "original_file_name": form.file.data.filename } return redirect(url_for('.check_messages', service_id=service_id, upload_id=upload_id, template_type=template.template_type)) except (UnicodeDecodeError, BadZipFile, XLRDError): flash('Couldn’t read {}. Try using a different file format.'.format( form.file.data.filename )) column_headings = first_column_headings[template.template_type] + list(template.placeholders) return render_template( 'views/send.html', template=template, column_headings=list(ascii_uppercase[:len(column_headings)]), example=[column_headings, get_example_csv_rows(template)], form=form )
def add_template_by_type(service_id): form = ChooseTemplateType( include_letters=current_service.has_permission('letter'), include_copy=any(( service_api_client.count_service_templates(service_id) > 0, len(user_api_client.get_service_ids_for_user(current_user)) > 1, )), ) if form.validate_on_submit(): if form.template_type.data == 'copy-existing': return redirect( url_for( '.choose_template_to_copy', service_id=service_id, )) if form.template_type.data == 'letter': blank_letter = service_api_client.create_service_template( 'Untitled', 'letter', 'Body', service_id, 'Main heading', 'normal', ) return redirect( url_for( '.view_template', service_id=service_id, template_id=blank_letter['data']['id'], )) if email_or_sms_not_enabled(form.template_type.data, current_service.permissions): return redirect( url_for('.action_blocked', service_id=service_id, notification_type=form.template_type.data, return_to='add_new_template', template_id='0')) else: return redirect( url_for( '.add_service_template', service_id=service_id, template_type=form.template_type.data, )) return render_template('views/templates/add.html', form=form)
def add_service_template(service_id, template_type, template_folder_id=None): if not current_service.has_permission('letter') and template_type == 'letter': abort(403) form = form_objects[template_type]() if form.validate_on_submit(): if form.process_type.data == 'priority': abort_403_if_not_admin_user() try: new_template = service_api_client.create_service_template( form.name.data, template_type, form.template_content.data, service_id, form.subject.data if hasattr(form, 'subject') else None, form.process_type.data, template_folder_id ) except HTTPError as e: if ( e.status_code == 400 and 'content' in e.message and any(['character count greater than' in x for x in e.message['content']]) ): form.template_content.errors.extend(e.message['content']) else: raise e else: return redirect( url_for('.view_template', service_id=service_id, template_id=new_template['data']['id']) ) if email_or_sms_not_enabled(template_type, current_service.permissions): return redirect(url_for( '.action_blocked', service_id=service_id, notification_type=template_type, template_folder_id=template_folder_id, return_to='templates', )) else: return render_template( 'views/edit-{}-template.html'.format(template_type), form=form, template_type=template_type, template_folder_id=template_folder_id, heading_action='New', )
def _add_template_by_type(template_type, template_folder_id): if template_type == "copy-existing": return redirect( url_for( ".choose_template_to_copy", service_id=current_service.id, )) if template_type == "letter": blank_letter = service_api_client.create_service_template( "New letter template", "letter", "Body", current_service.id, "Main heading", "normal", template_folder_id, ) return redirect( url_for( ".view_template", service_id=current_service.id, template_id=blank_letter["data"]["id"], )) if email_or_sms_not_enabled(template_type, current_service.permissions): return redirect( url_for( ".action_blocked", service_id=current_service.id, notification_type=template_type, return_to="add_new_template", template_id="0", )) else: return redirect( url_for( ".add_service_template", service_id=current_service.id, template_type=template_type, template_folder_id=template_folder_id, ))
def add_template_by_type(service_id): form = ChooseTemplateType( include_letters='letter' in current_service['permissions']) if form.validate_on_submit(): if form.template_type.data == 'letter': blank_letter = service_api_client.create_service_template( 'Untitled', 'letter', 'Body', service_id, 'Main heading', 'normal', ) return redirect( url_for( '.view_template', service_id=service_id, template_id=blank_letter['data']['id'], )) if email_or_sms_not_enabled(form.template_type.data, current_service['permissions']): return redirect( url_for('.action_blocked', service_id=service_id, notification_type=form.template_type.data, return_to='add_new_template', template_id='0')) else: return redirect( url_for( '.add_service_template', service_id=service_id, template_type=form.template_type.data, )) return render_template('views/templates/add.html', form=form)
def send_messages(service_id, template_id): # if there's lots of data in the session, lets log it for debugging purposes # TODO: Remove this once we're confident we have session size under control if len(session.get('file_uploads', {}).keys()) > 2: current_app.logger.info( 'session contains large file_uploads - json_len {}, keys: {}'. format(len(json.dumps(session['file_uploads'])), session['file_uploads'].keys())) db_template = current_service.get_template_with_user_permission_or_403( template_id, current_user) email_reply_to = None sms_sender = None if db_template['template_type'] == 'email': email_reply_to = get_email_reply_to_address_from_session() elif db_template['template_type'] == 'sms': sms_sender = get_sms_sender_from_session() if email_or_sms_not_enabled(db_template['template_type'], current_service.permissions): return redirect( url_for('.action_blocked', service_id=service_id, notification_type=db_template['template_type'], return_to='view_template', template_id=template_id)) template = get_template( db_template, current_service, show_recipient=True, letter_preview_url=url_for( '.view_letter_template_preview', service_id=service_id, template_id=template_id, filetype='png', page_count=get_page_count_for_letter(db_template), ), email_reply_to=email_reply_to, sms_sender=sms_sender, ) form = CsvUploadForm() if form.validate_on_submit(): try: upload_id = s3upload( service_id, Spreadsheet.from_file( form.file.data, filename=form.file.data.filename).as_dict, current_app.config['AWS_REGION']) return redirect( url_for( '.check_messages', service_id=service_id, upload_id=upload_id, template_id=template.id, original_file_name=form.file.data.filename, )) except (UnicodeDecodeError, BadZipFile, XLRDError): flash( 'Couldn’t read {}. Try using a different file format.'.format( form.file.data.filename)) except (XLDateError): flash(( '{} contains numbers or dates that Notification can’t understand. ' 'Try formatting all columns as ‘text’ or export your file as CSV.' ).format(form.file.data.filename)) column_headings = get_spreadsheet_column_headings_from_template(template) return render_template( 'views/send.html', template=template, column_headings=list(ascii_uppercase[:len(column_headings)]), example=[column_headings, get_example_csv_rows(template)], form=form)
def edit_service_template(service_id, template_id): template = service_api_client.get_service_template(service_id, template_id)['data'] template['template_content'] = template['content'] form = form_objects[template['template_type']](**template) if form.validate_on_submit(): if form.process_type.data != template['process_type']: abort_403_if_not_admin_user() subject = form.subject.data if hasattr(form, 'subject') else None new_template = get_template( { 'name': form.name.data, 'content': form.template_content.data, 'subject': subject, 'template_type': template['template_type'], 'id': template['id'], 'process_type': form.process_type.data, 'reply_to_text': template['reply_to_text'] }, current_service) template_change = get_template( template, current_service).compare_to(new_template) if template_change.placeholders_added and not request.form.get( 'confirm'): example_column_headings = ( first_column_headings[new_template.template_type] + list(new_template.placeholders)) return render_template( 'views/templates/breaking-change.html', template_change=template_change, new_template=new_template, column_headings=list( ascii_uppercase[:len(example_column_headings)]), example_rows=[ example_column_headings, get_example_csv_rows(new_template), get_example_csv_rows(new_template) ], form=form) try: service_api_client.update_service_template( template_id, form.name.data, template['template_type'], form.template_content.data, service_id, subject, form.process_type.data) except HTTPError as e: if e.status_code == 400: if 'content' in e.message and any([ 'character count greater than' in x for x in e.message['content'] ]): form.template_content.errors.extend(e.message['content']) else: raise e else: raise e else: return redirect( url_for('.view_template', service_id=service_id, template_id=template_id)) db_template = service_api_client.get_service_template( service_id, template_id)['data'] if email_or_sms_not_enabled(db_template['template_type'], current_service['permissions']): return redirect( url_for('.action_blocked', service_id=service_id, notification_type=db_template['template_type'], return_to='view_template', template_id=template_id)) else: return render_template('views/edit-{}-template.html'.format( template['template_type']), form=form, template_id=template_id, template_type=template['template_type'], heading_action='Edit')
def edit_service_template(service_id, template_id): template = current_service.get_template_with_user_permission_or_403( template_id, current_user) template["template_content"] = template["content"] form = form_objects[template["template_type"]](**template) if form.validate_on_submit(): if form.process_type.data != template["process_type"]: abort_403_if_not_admin_user() subject = form.subject.data if hasattr(form, "subject") else None new_template_data = { "name": form.name.data, "content": form.template_content.data, "subject": subject, "template_type": template["template_type"], "id": template["id"], "process_type": form.process_type.data, "reply_to_text": template["reply_to_text"], } new_template = get_template(new_template_data, current_service) template_change = get_template( template, current_service).compare_to(new_template) if template_change.placeholders_added and not request.form.get( "confirm"): example_column_headings = first_column_headings[ new_template.template_type] + list(new_template.placeholders) return render_template( "views/templates/breaking-change.html", template_change=template_change, new_template=new_template, column_headings=list( ascii_uppercase[:len(example_column_headings)]), example_rows=[ example_column_headings, get_example_csv_rows(new_template), get_example_csv_rows(new_template), ], form=form, ) try: service_api_client.update_service_template( template_id, form.name.data, template["template_type"], form.template_content.data, service_id, subject, form.process_type.data, ) except HTTPError as e: if e.status_code == 400: if "content" in e.message and any([ "character count greater than" in x for x in e.message["content"] ]): form.template_content.errors.extend(e.message["content"]) else: raise e else: raise e else: flash( _("'{}' template saved").format(form.name.data), "default_with_tick") return redirect( url_for(".view_template", service_id=service_id, template_id=template_id)) if email_or_sms_not_enabled(template["template_type"], current_service.permissions): return redirect( url_for( ".action_blocked", service_id=service_id, notification_type=template["template_type"], return_to="view_template", template_id=template_id, )) else: return render_template( f"views/edit-{template['template_type']}-template.html", form=form, template=template, heading=_l("Edit email template") if template["template_type"] == "email" else _l("Edit text message template"), )
def add_service_template(service_id, template_type, template_folder_id=None): if template_type not in ["sms", "email", "letter"]: abort(404) if not current_service.has_permission( "letter") and template_type == "letter": abort(403) form = form_objects[template_type]() if form.validate_on_submit(): if form.process_type.data != "normal": abort_403_if_not_admin_user() try: new_template = service_api_client.create_service_template( form.name.data, template_type, form.template_content.data, service_id, form.subject.data if hasattr(form, "subject") else None, form.process_type.data, template_folder_id, ) except HTTPError as e: if (e.status_code == 400 and "content" in e.message and any([ "character count greater than" in x for x in e.message["content"] ])): form.template_content.errors.extend(e.message["content"]) else: raise e else: flash( _("'{}' template saved").format(form.name.data), "default_with_tick") return redirect( url_for( ".view_template", service_id=service_id, template_id=new_template["data"]["id"], )) if email_or_sms_not_enabled(template_type, current_service.permissions): return redirect( url_for( ".action_blocked", service_id=service_id, notification_type=template_type, template_folder_id=template_folder_id, return_to="templates", template_id="0", )) else: return render_template( f"views/edit-{template_type}-template.html", form=form, template_type=template_type, template_folder_id=template_folder_id, service_id=service_id, heading=_l("New email template") if template_type == "email" else _l("New text message template"), )
def edit_service_template(service_id, template_id): template = current_service.get_template_with_user_permission_or_403( template_id, current_user) template['template_content'] = template['content'] form = form_objects[template['template_type']](**template) if form.validate_on_submit(): if form.process_type.data != template['process_type']: abort_403_if_not_admin_user() subject = form.subject.data if hasattr(form, 'subject') else None new_template_data = { 'name': form.name.data, 'content': form.template_content.data, 'subject': subject, 'template_type': template['template_type'], 'id': template['id'], 'process_type': form.process_type.data, 'reply_to_text': template['reply_to_text'], } new_template = get_template(new_template_data, current_service) template_change = get_template( template, current_service).compare_to(new_template) if (template_change.placeholders_added and not request.form.get('confirm') and current_service.api_keys): return render_template( 'views/templates/breaking-change.html', template_change=template_change, new_template=new_template, form=form, ) try: service_api_client.update_service_template( template_id, form.name.data, template['template_type'], form.template_content.data, service_id, subject, form.process_type.data, ) except HTTPError as e: if e.status_code == 400: if 'content' in e.message and any([ 'character count greater than' in x for x in e.message['content'] ]): form.template_content.errors.extend(e.message['content']) else: raise e else: raise e else: return redirect( url_for('.view_template', service_id=service_id, template_id=template_id)) if email_or_sms_not_enabled(template['template_type'], current_service.permissions): return redirect( url_for('.action_blocked', service_id=service_id, notification_type=template['template_type'], return_to='view_template', template_id=template_id)) else: return render_template( 'views/edit-{}-template.html'.format(template['template_type']), form=form, template=template, heading_action='Edit', )
def s3_send(service_id, template_id): # if there's lots of data in the session, lets log it for debugging purposes # TODO: Remove this once we're confident we have session size under control if len(session.get("file_uploads", {}).keys()) > 2: current_app.logger.info( "session contains large file_uploads - json_len {}, keys: {}". format(len(json.dumps(session["file_uploads"])), session["file_uploads"].keys())) db_template = current_service.get_template_with_user_permission_or_403( template_id, current_user) email_reply_to = None sms_sender = None if db_template["template_type"] == "email": email_reply_to = get_email_reply_to_address_from_session() elif db_template["template_type"] == "sms": sms_sender = get_sms_sender_from_session() is_email_or_sms_not_enabled = email_or_sms_not_enabled( db_template["template_type"], current_service.permissions) if is_email_or_sms_not_enabled or not service_can_bulk_send(service_id): return redirect( url_for( ".action_blocked", service_id=service_id, notification_type=db_template["template_type"], return_to="view_template", template_id=template_id, )) template = get_template( db_template, current_service, show_recipient=True, letter_preview_url=url_for( ".view_letter_template_preview", service_id=service_id, template_id=template_id, filetype="png", page_count=get_page_count_for_letter(db_template), ), email_reply_to=email_reply_to, sms_sender=sms_sender, ) s3_objects = list_bulk_send_uploads() form = SelectCsvFromS3Form( choices=[(x.key, x.key) for x in s3_objects], # (value, label) label="Select a file from Amazon S3", ) if form.validate_on_submit(): try: upload_id = copy_bulk_send_file_to_uploads( service_id, form.s3_files.data, ) return redirect( url_for( ".check_messages", service_id=service_id, upload_id=upload_id, template_id=template.id, original_file_name=form.s3_files.data, )) except (UnicodeDecodeError, BadZipFile, XLRDError): flash( _("Could not read {}. Try using a different file format."). format(form.s3_files.data)) except (XLDateError): flash( _("{} contains numbers or dates that GC Notify can’t understand. " "Try formatting all columns as ‘text’ or export your file as CSV." ).format(form.s3_files.data)) column_headings = get_spreadsheet_column_headings_from_template(template) return render_template( "views/s3-send.html", template=template, column_headings=list(ascii_uppercase[:len(column_headings)]), example=[column_headings, get_example_csv_rows(template)], form=form, )