def cut(json):
    file = File.get(json['params']['id'])
    if not file or not File.if_action_allowed(
            'upload',
            get_company_from_folder(json['params']['id']).id):
        return False
    return file.move_to(json['params']['folder_id'])
def send(parent_id):
    parent = File.get(parent_id)
    root = parent.root_folder_id
    if parent.mime == 'root':
        root = parent.id
    company = db(Company, journalist_folder_file_id=root).one()
    if File.if_action_allowed('upload', company.id) == False:
        return jsonify({'error': True })
    data = request.form
    uploaded_file = request.files['file']
    name = File.get_unique_name(urllib.parse.unquote(uploaded_file.filename).replace(
        '"', '_').replace('*', '_').replace('/', '_').replace('\\', '_'), data.get('ftype'), parent.id)
    data.get('ftype')
    if re.match('^video/.*', data.get('ftype')):
        body = {'title': uploaded_file.filename,
                'description': '',
                'status': 'public'}
        youtube = YoutubeApi(body_dict=body,
                             video_file=uploaded_file.stream.read(-1),
                             chunk_info=dict(chunk_size=int(data.get('chunkSize')),
                                             chunk_number=int(data.get('chunkNumber')),
                                             total_size=int(data.get('totalSize'))),
                             company_id=company.id,
                             root_folder_id=company.journalist_folder_file_id,
                             parent_folder_id=parent_id)
        file = youtube.upload()
    else:
        file = File.upload(name, data, parent.id, root, company, content=uploaded_file.stream.read(-1))
    return jsonify({'result': {'size': 0}, 'error': True if file=='error' else False, 'file_id':file})
def createdir(json):
    if not File.if_action_allowed(
            'upload',
            get_company_from_folder(json['params']['root_id']).id):
        return False
    return File.createdir(name=json['params']['name'],
                          root_folder_id=json['params']['root_id'],
                          parent_id=json['params']['folder_id'])
def list(json):
    ancestors = File.ancestors(json['params']['folder_id'])
    company = db(Company, journalist_folder_file_id=ancestors[0]).first()
    if json['params'].get('search_text'):
        list = File.list(json['params']['folder_id'], json['params']['file_manager_called_for'],
                         json['params']['search_text'], company_id=company.id)
    else:
        list = File.list(json['params']['folder_id'], json['params']['file_manager_called_for'],company_id=company.id)
    return {'list': list, 'ancestors': ancestors, 'can_upload': File.if_action_allowed('upload', company.id)}
def set_properties(json):
    file = File.get(json['params']['id'])
    if not file or not File.if_action_allowed(
            'upload',
            get_company_from_folder(json['params']['id']).id):
        return False
    return File.set_properties(
        file,
        json['params']['add_all'],
        name=json['params']['name'],
        copyright_author_name=json['params']['author_name'],
        description=json['params']['description'])
def send(parent_id):
    parent = File.get(parent_id)
    root = parent.root_folder_id
    if parent.mime == 'root':
        root = parent.id
    company = db(Company, journalist_folder_file_id=root).one()
    if File.if_action_allowed('upload', company.id) == False:
        return jsonify({'error': True})
    data = request.form
    uploaded_file = request.files['file']
    name = File.get_unique_name(
        urllib.parse.unquote(uploaded_file.filename).replace('"', '_').replace(
            '*', '_').replace('/', '_').replace('\\', '_'), data.get('ftype'),
        parent.id)
    data.get('ftype')
    if re.match('^video/.*', data.get('ftype')):
        body = {
            'title': uploaded_file.filename,
            'description': '',
            'status': 'public'
        }
        youtube = YoutubeApi(body_dict=body,
                             video_file=uploaded_file.stream.read(-1),
                             chunk_info=dict(
                                 chunk_size=int(data.get('chunkSize')),
                                 chunk_number=int(data.get('chunkNumber')),
                                 total_size=int(data.get('totalSize'))),
                             company_id=company.id,
                             root_folder_id=company.journalist_folder_file_id,
                             parent_folder_id=parent_id)
        file = youtube.upload()
    else:
        file = File.upload(name,
                           data,
                           parent.id,
                           root,
                           company,
                           content=uploaded_file.stream.read(-1))
    return jsonify({
        'result': {
            'size': 0
        },
        'error': True if file == 'error' else False,
        'file_id': file
    })
def filemanager():
    last_visit_root_name = ''
    if 'last_root' in request.cookies:
        last_root_id = request.cookies['last_root']
    else:
        last_root_id = ''

    library = []
    members, main_companies = Company.get_members_for_company()
    uniq = set()
    for n, user_company in enumerate(g.user.employer_assoc):
        if user_company.has_rights(UserCompany.RIGHT_AT_COMPANY.FILES_BROWSE):
            library.insert(
                n,
                File.folder_dict(
                    user_company.employer, {
                        'can_upload':
                        File.if_action_allowed(File.ACTIONS['upload'],
                                               user_company.company_id)
                    }))
            uniq.update({user_company.employer.name})
            if user_company.employer.journalist_folder_file_id == last_root_id:
                last_visit_root_name = user_company.employer.name + " files"
            if user_company.employer.name in members:
                for member in members[user_company.employer.name]:
                    if member.company.name not in uniq and member.company.name not in main_companies:
                        library.append(
                            File.folder_dict(
                                member.company, {
                                    'can_upload':
                                    File.if_action_allowed(
                                        File.ACTIONS['upload'],
                                        member.company.id)
                                }))
                        uniq.update({member.company.name})
                        if member.company.journalist_folder_file_id == last_root_id:
                            last_visit_root_name = member.company.name + " files"
    # library.sort(key=lambda k: k['name'])
    file_manager_called_for = request.args[
        'file_manager_called_for'] if 'file_manager_called_for' in request.args else ''
    file_manager_on_action = jsonmodule.loads(
        request.args['file_manager_on_action']
    ) if 'file_manager_on_action' in request.args else {}
    file_manager_default_action = request.args[
        'file_manager_default_action'] if 'file_manager_default_action' in request.args else 'download'
    get_root = request.args['get_root'] if 'get_root' in request.args else None
    if get_root:
        root = Company.get(get_root)
        last_visit_root_name = (root.name + " files") if root else ''
        last_root_id = root.journalist_folder_file_id if root else ''
    err = True if len(library) == 0 else False
    return render_template(
        'filemanager.html',
        library=json.dumps(library),
        err=err,
        last_visit_root=last_visit_root_name.replace('"', '_').replace(
            '*', '_').replace('/', '_').replace('\\', '_').replace('\'', '_'),
        last_root_id=last_root_id,
        file_manager_called_for=file_manager_called_for,
        file_manager_on_action=file_manager_on_action,
        file_manager_default_action=file_manager_default_action)