def download(_ids): user = get_user(required=True) _format = flask.request.args.get('format', 'text') item_type = get_type() items = [get_entity_or_404(_id, item_type) for _id in _ids.split(',')] _file = io.BytesIO() formatter = app.download_formatters[_format]['formatter'] mimetype = None attachment_filename = '%s-newsroom.zip' % utcnow().strftime('%Y%m%d%H%M') if len(items) == 1: item = items[0] parse_dates(item) # fix for old items _file.write(formatter.format_item(item, item_type=item_type)) _file.seek(0) mimetype = formatter.get_mimetype(item) attachment_filename = secure_filename(formatter.format_filename(item)) else: with zipfile.ZipFile(_file, mode='w') as zf: for item in items: parse_dates(item) # fix for old items zf.writestr(secure_filename(formatter.format_filename(item)), formatter.format_item(item, item_type=item_type)) _file.seek(0) update_action_list(_ids.split(','), 'downloads', force_insert=True) app.data.insert('history', items, action='download', user=user, section=request.args.get('type', 'wire')) return flask.send_file(_file, mimetype=mimetype, attachment_filename=attachment_filename, as_attachment=True)
def share(): current_user = get_user(required=True) item_type = get_type() data = get_json_or_400() assert data.get('users') assert data.get('items') items = [get_entity_or_404(_id, item_type) for _id in data.get('items')] with app.mail.connect() as connection: for user_id in data['users']: user = superdesk.get_resource_service('users').find_one( req=None, _id=user_id) subject = items[0]['headline'] if item_type == 'items' else items[ 0].get('name') if not user or not user.get('email'): continue template_kwargs = { 'recipient': user, 'sender': current_user, 'items': items, 'message': data.get('message'), } send_email( [user['email']], gettext('From %s: %s' % (app.config['SITE_NAME'], subject)), text_body=flask.render_template( 'share_{}.txt'.format(item_type), **template_kwargs), html_body=flask.render_template( 'share_{}.html'.format(item_type), **template_kwargs), sender=current_user['email'], connection=connection) update_action_list(data.get('items'), 'shares', item_type=item_type) return flask.jsonify(), 201
def copy(_id): item_type = get_type() item = get_entity_or_404(_id, item_type) update_action_list([_id], 'copies', item_type=item_type) get_resource_service('history').create_history_record([item], 'copy', get_user(), request.args.get( 'type', 'wire')) return flask.jsonify(), 200
def download(_ids): user = get_user(required=True) _format = flask.request.args.get('format', 'text') item_type = get_type() items = get_items_for_user_action(_ids.split(','), item_type) _file = io.BytesIO() formatter = app.download_formatters[_format]['formatter'] mimetype = None attachment_filename = '%s-newsroom.zip' % utcnow().strftime('%Y%m%d%H%M') if formatter.get_mediatype() == 'picture': if len(items) == 1: try: picture = formatter.format_item(items[0], item_type=item_type) return flask.redirect( url_for('upload.get_upload', media_id=picture['media'], filename='baseimage%s' % picture['file_extension'])) except ValueError: return flask.abort(404) else: with zipfile.ZipFile(_file, mode='w') as zf: for item in items: try: picture = formatter.format_item(item, item_type=item_type) file = flask.current_app.media.get( picture['media'], ASSETS_RESOURCE) zf.writestr('baseimage%s' % picture['file_extension'], file.read()) except ValueError: pass _file.seek(0) elif len(items) == 1 or _format == 'monitoring': item = items[0] args_item = item if _format != 'monitoring' else items parse_dates(item) # fix for old items _file.write(formatter.format_item(args_item, item_type=item_type)) _file.seek(0) mimetype = formatter.get_mimetype(item) attachment_filename = secure_filename(formatter.format_filename(item)) else: with zipfile.ZipFile(_file, mode='w') as zf: for item in items: parse_dates(item) # fix for old items zf.writestr(secure_filename(formatter.format_filename(item)), formatter.format_item(item, item_type=item_type)) _file.seek(0) update_action_list(_ids.split(','), 'downloads', force_insert=True) get_resource_service('history').create_history_record( items, 'download', user, request.args.get('type', 'wire')) return flask.send_file(_file, mimetype=mimetype, attachment_filename=attachment_filename, as_attachment=True)
def share(): current_user = get_user(required=True) item_type = get_type() data = get_json_or_400() assert data.get('users') assert data.get('items') items = get_items_for_user_action(data.get('items'), item_type) for user_id in data['users']: user = superdesk.get_resource_service('users').find_one(req=None, _id=user_id) subject = items[0].get('headline') # If it's an event, 'name' is the subject if items[0].get('event'): subject = items[0]['name'] if not user or not user.get('email'): continue template_kwargs = { 'recipient': user, 'sender': current_user, 'items': items, 'message': data.get('message'), 'section': request.args.get('type', 'wire') } if item_type == 'agenda': template_kwargs['maps'] = data.get('maps') template_kwargs['dateStrings'] = [ get_agenda_dates(item) for item in items ] template_kwargs['locations'] = [ get_location_string(item) for item in items ] template_kwargs['contactList'] = [ get_public_contacts(item) for item in items ] template_kwargs['linkList'] = [get_links(item) for item in items] template_kwargs['is_admin'] = is_admin_or_internal(user) send_email( [user['email']], gettext('From %s: %s' % (app.config['SITE_NAME'], subject)), text_body=flask.render_template('share_{}.txt'.format(item_type), **template_kwargs), html_body=flask.render_template('share_{}.html'.format(item_type), **template_kwargs), ) update_action_list(data.get('items'), 'shares', item_type=item_type) get_resource_service('history').create_history_record( items, 'share', current_user, request.args.get('type', 'wire')) return flask.jsonify(), 201
def copy(_id): item_type = get_type() get_entity_or_404(_id, item_type) update_action_list([_id], 'copies', item_type=item_type) return flask.jsonify(), 200