Beispiel #1
0
def bulk_add_domain(request):
    """
    Bulk add domains via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add domains request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of domains
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded domains. This may include information
            such as domains that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(AddDomainForm(request.user))
    user = request.user

    if request.method == "POST" and request.is_ajax():
        if user.has_access_to(DomainACL.WRITE):
            response = process_bulk_add_domain(request, formdict)
        else:
            response = {
                "success": False,
                "message": "User does not have permission to add domains."
            }

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        if user.has_access_to(DomainACL.WRITE):
            objectformdict = form_to_dict(AddObjectForm(request.user))
            return render_to_response(
                'bulk_add_default.html', {
                    'formdict': formdict,
                    'objectformdict': objectformdict,
                    'title': "Bulk Add Domains",
                    'table_name': 'domain',
                    'local_validate_columns': [form_consts.Domain.DOMAIN_NAME],
                    'custom_js': "domain_handsontable.js",
                    'is_bulk_add_objects': True
                }, RequestContext(request))
        else:
            response = {
                "success": False,
                "message": "User does not have permission to add domains."
            }
            return HttpResponse(json.dumps(response, default=json_handler),
                                content_type="application/json")
Beispiel #2
0
def bulk_add_domain(request):
    """
    Bulk add domains via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add domains request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of domains
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded domains. This may include information
            such as domains that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(AddDomainForm(request.user))
    user = request.user

    if request.method == "POST" and request.is_ajax():
        if user.has_access_to(DomainACL.WRITE):
            response = process_bulk_add_domain(request, formdict)
        else:
            response = {"success":False,
                        "message":"User does not have permission to add domains."}


        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        if user.has_access_to(DomainACL.WRITE):
            objectformdict = form_to_dict(AddObjectForm(request.user))
            return render_to_response('bulk_add_default.html',
                                     {'formdict': formdict,
                                      'objectformdict': objectformdict,
                                      'title': "Bulk Add Domains",
                                      'table_name': 'domain',
                                      'local_validate_columns': [form_consts.Domain.DOMAIN_NAME],
                                      'custom_js': "domain_handsontable.js",
                                      'is_bulk_add_objects': True},
                                      RequestContext(request));
        else:
            response = {"success":False,
                        "message":"User does not have permission to add domains."}
            return HttpResponse(json.dumps(response,
                                default=json_handler),
                                content_type="application/json")
Beispiel #3
0
def bulk_add_ip(request):
    """
    Bulk add IPs via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add IPs request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of IPs
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded IPs. This may include information
            such as IPs that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(AddIPForm(request.user, None))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_ip(request, formdict)

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response('bulk_add_default.html', {'formdict': formdict,
                                                            'title': "Bulk Add IPs",
                                                            'table_name': 'ip',
                                                            'local_validate_columns': [form_consts.IP.IP_ADDRESS],
                                                            'is_bulk_add_objects': True}, RequestContext(request))
Beispiel #4
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        acl = get_acl_object(request.POST['otype'])
        user = request.user
        if user.has_access_to(acl.OBJECTS_ADD):
            response = parse_bulk_upload(request,
                                         parse_row_to_bound_object_form,
                                         add_new_handler_object_via_bulk,
                                         formdict)
        else:
            response = {
                'success': False,
                'message': 'User does not have permission to add objects'
            }

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response(
            'bulk_add_default.html', {
                'formdict': formdict,
                'title': "Bulk Add Objects",
                'table_name': 'object'
            }, RequestContext(request))
Beispiel #5
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        response = parse_bulk_upload(
            request,
            parse_row_to_bound_object_form,
            add_new_handler_object_via_bulk,
            formdict)

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response('bulk_add_default.html',
                                  {'formdict': formdict,
                                  'title': "Bulk Add Objects",
                                  'table_name': 'object'},
                                  RequestContext(request))
Beispiel #6
0
def bulk_add_ip(request):
    """
    Bulk add IPs via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add IPs request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of IPs
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded IPs. This may include information
            such as IPs that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(AddIPForm(request.user, None))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_ip(request, formdict)

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response(
            'bulk_add_default.html', {
                'formdict': formdict,
                'title': "Bulk Add IPs",
                'table_name': 'ip',
                'local_validate_columns': [form_consts.IP.IP_ADDRESS],
                'is_bulk_add_objects': True
            }, RequestContext(request))
Beispiel #7
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        acl = get_acl_object(request.POST['otype'])
        user = request.user
        if user.has_access_to(acl.OBJECTS_ADD):
            response = parse_bulk_upload(
                request,
                parse_row_to_bound_object_form,
                add_new_handler_object_via_bulk,
                formdict)
        else:
            response = {'success':False,
                        'message':'User does not have permission to add objects'}

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        return render_to_response('bulk_add_default.html',
                                  {'formdict': formdict,
                                  'title': "Bulk Add Objects",
                                  'table_name': 'object'},
                                  RequestContext(request))
Beispiel #8
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    all_obj_type_choices = [
        (c[0], c[0], {"datatype": c[1].keys()[0], "datatype_value": c[1].values()[0]})
        for c in get_object_types(False, query={"datatype.file": {"$exists": 0}})
    ]

    formdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

    if request.method == "POST" and request.is_ajax():
        response = parse_bulk_upload(request, parse_row_to_bound_object_form, add_new_handler_object_via_bulk, formdict)

        return HttpResponse(json.dumps(response, default=json_handler), mimetype="application/json")
    else:
        return render_to_response(
            "bulk_add_default.html",
            {"formdict": formdict, "title": "Bulk Add Objects", "table_name": "object"},
            RequestContext(request),
        )
Beispiel #9
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    all_obj_type_choices = [(c[0],
                            c[0],
                            {'datatype':c[1].keys()[0],
                            'datatype_value':c[1].values()[0]}
                            ) for c in get_object_types(False, query={'datatype.file':{'$exists':0}})]

    formdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

    if request.method == "POST" and request.is_ajax():
        response = parse_bulk_upload(request, parse_row_to_bound_object_form, add_new_handler_object_via_bulk, formdict)

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            mimetype='application/json')
    else:
        return render_to_response('bulk_add_default.html',
                                  {'formdict': formdict,
                                  'title': "Bulk Add Objects",
                                  'table_name': 'object'},
                                  RequestContext(request))
Beispiel #10
0
def validate_and_add_new_handler_object(data, rowData, request, errors,
                                        row_counter, is_validate_only=False,
                                        is_sort_relationships=False,
                                        cache={}, obj=None):
    """
    Validate an object and then add it to the database.

    :param data: The data for the object.
    :type data: dict
    :param rowData: Data from the row if using mass object upload.
    :type rowData: dict
    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :param errors: List of existing errors to append to.
    :type errors: list
    :param row_counter: Which row we are working on (for error tracking).
    :type row_counter: int
    :param is_validate_only: Only validate.
    :type is_validate_only: bool
    :param cache: Cached data, typically for performance enhancements
                  during bulk operations.
    :type cache: dict
    :returns: tuple of (<result>, <errors>, <retVal>)
    """

    result = False
    retVal = {}

    bound_form = parse_row_to_bound_object_form(request, rowData, cache)

    if bound_form.is_valid():
        (result,
         retVal) = add_new_handler_object(data, rowData, request, obj=obj,
                                          is_validate_only=is_validate_only,
                                          is_sort_relationships=is_sort_relationships)
        if not result and 'message' in retVal:
            errors.append("%s #%s - %s" % (form_consts.Common.OBJECTS_DATA,
                                           str(row_counter),
                                           retVal['message']))
    else:
        formdict = cache.get("object_formdict")

        if formdict == None:
            object_form = AddObjectForm(request.user)
            formdict = form_to_dict(object_form)
            cache['object_formdict'] = formdict

        for name, errorMessages in bound_form.errors.items():
            entry = get_field_from_label(name, formdict)
            if entry == None:
                continue
            for message in errorMessages:
                errors.append("%s #%s - %s - %s" % (form_consts.Common.OBJECTS_DATA,
                                                    str(row_counter),
                                                    name,
                                                    message))
        result = False

    return result, errors, retVal
Beispiel #11
0
def validate_and_add_new_handler_object(data, rowData, request, errors,
                                        row_counter, is_validate_only=False,
                                        is_sort_relationships=False,
                                        cache={}, obj=None):
    """
    Validate an object and then add it to the database.

    :param data: The data for the object.
    :type data: dict
    :param rowData: Data from the row if using mass object upload.
    :type rowData: dict
    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :param errors: List of existing errors to append to.
    :type errors: list
    :param row_counter: Which row we are working on (for error tracking).
    :type row_counter: int
    :param is_validate_only: Only validate.
    :type is_validate_only: bool
    :param cache: Cached data, typically for performance enhancements
                  during bulk operations.
    :type cache: dict
    :returns: tuple of (<result>, <errors>, <retVal>)
    """

    result = False
    retVal = {}

    bound_form = parse_row_to_bound_object_form(request, rowData, cache)

    if bound_form.is_valid():
        (result,
         retVal) = add_new_handler_object(data, rowData, request, obj=obj,
                                          is_validate_only=is_validate_only,
                                          is_sort_relationships=is_sort_relationships)
        if not result and 'message' in retVal:
            errors.append("%s #%s - %s" % (form_consts.Common.OBJECTS_DATA,
                                           str(row_counter),
                                           retVal['message']))
    else:
        formdict = cache.get("object_formdict")

        if formdict == None:
            object_form = AddObjectForm(request.user)
            formdict = form_to_dict(object_form)
            cache['object_formdict'] = formdict

        for name, errorMessages in bound_form.errors.items():
            entry = get_field_from_label(name, formdict)
            if entry == None:
                continue
            for message in errorMessages:
                errors.append("%s #%s - %s - %s" % (form_consts.Common.OBJECTS_DATA,
                                                    str(row_counter),
                                                    name,
                                                    message))
        result = False

    return result, errors, retVal
Beispiel #12
0
def bulk_add_domain(request):
    """
    Bulk add domains via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add domains request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of domains
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded domains. This may include information
            such as domains that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    all_obj_type_choices = [(c[0],
                            c[0],
                            {'datatype':c[1].keys()[0],
                            'datatype_value':c[1].values()[0]}
                            ) for c in get_object_types(False)]

    formdict = form_to_dict(AddDomainForm(request.user))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_domain(request, formdict);

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            mimetype='application/json')
    else:
        objectformdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

        return render_to_response('bulk_add_default.html',
                                 {'formdict': formdict,
                                  'objectformdict': objectformdict,
                                  'title': "Bulk Add Domains",
                                  'table_name': 'domain',
                                  'local_validate_columns': [form_consts.Domain.DOMAIN_NAME],
                                  'custom_js': "domain_handsontable.js",
                                  'is_bulk_add_objects': True},
                                  RequestContext(request));
Beispiel #13
0
def bulk_add_domain(request):
    """
    Bulk add domains via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add domains request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of domains
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk uploaded domains. This may include information
            such as domains that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    all_obj_type_choices = [
        (c[0], c[0], {"datatype": c[1].keys()[0], "datatype_value": c[1].values()[0]}) for c in get_object_types(False)
    ]

    formdict = form_to_dict(AddDomainForm(request.user))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_domain(request, formdict)

        return HttpResponse(json.dumps(response, default=json_handler), mimetype="application/json")
    else:
        objectformdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

        return render_to_response(
            "bulk_add_default.html",
            {
                "formdict": formdict,
                "objectformdict": objectformdict,
                "title": "Bulk Add Domains",
                "table_name": "domain",
                "local_validate_columns": [form_consts.Domain.DOMAIN_NAME],
                "custom_js": "domain_handsontable.js",
                "is_bulk_add_objects": True,
            },
            RequestContext(request),
        )
Beispiel #14
0
def bulk_add_md5_sample(request):
    """
    Bulk add samples via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of domains
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk add. This may include information
            such as items that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """
    all_obj_type_choices = [(c[0],
                            c[0],
                            {'datatype':c[1].keys()[0],
                            'datatype_value':c[1].values()[0]}
                            ) for c in get_object_types(False)]

    formdict = form_to_dict(UploadFileForm(request.user, request.POST, request.FILES))
    objectformdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_md5_sample(request, formdict);

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            mimetype='application/json')
    else:
        return render_to_response('bulk_add_default.html',
                                  {'formdict': formdict,
                                  'objectformdict': objectformdict,
                                  'title': "Bulk Add Samples",
                                  'table_name': 'sample',
                                  'local_validate_columns': [form_consts.Sample.MD5],
                                  'is_bulk_add_objects': True},
                                  RequestContext(request));
Beispiel #15
0
def bulk_add_md5_sample(request):
    """
    Bulk add samples via a bulk upload form.

    Args:
        request: The Django context which contains information about the
            session and key/value pairs for the bulk add request

    Returns:
        If the request is not a POST and not a Ajax call then:
            Returns a rendered HTML form for a bulk add of domains
        If the request is a POST and a Ajax call then:
            Returns a response that contains information about the
            status of the bulk add. This may include information
            such as items that failed or successfully added. This may
            also contain helpful status messages about each operation.
    """

    formdict = form_to_dict(
        UploadFileForm(request.user, request.POST, request.FILES))
    objectformdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        response = process_bulk_add_md5_sample(request, formdict)

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        return render(
            request,
            'bulk_add_default.html',
            {
                'formdict': formdict,
                'objectformdict': objectformdict,
                'title': "Bulk Add Samples",
                'table_name': 'sample',
                'local_validate_columns': [form_consts.Sample.MD5],
                'is_bulk_add_objects': True
            },
        )
Beispiel #16
0
def bulk_add_object(request):
    """
    Bulk add objects.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        response = parse_bulk_upload(request, parse_row_to_bound_object_form,
                                     add_new_handler_object_via_bulk, formdict)

        return HttpResponse(json.dumps(response, default=json_handler),
                            mimetype='application/json')
    else:
        return render_to_response(
            'bulk_add_default.html', {
                'formdict': formdict,
                'title': "Bulk Add Objects",
                'table_name': 'object'
            }, RequestContext(request))
Beispiel #17
0
def bulk_add_object_inline(request):
    """
    Bulk add objects inline.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        user = request.user
        acl = get_acl_object(request.POST['otype'])

        if user.has_access_to(acl.OBJECTS_ADD):
            response = parse_bulk_upload(
                request,
                parse_row_to_bound_object_form,
                add_new_handler_object_via_bulk,
                formdict)

            secondary_data_array = response.get('secondary')
            if secondary_data_array:
                latest_secondary_data = secondary_data_array[-1]
                class_type = class_from_id(
                    latest_secondary_data['type'],
                    latest_secondary_data['id'])

                subscription = {'type': latest_secondary_data['type'],
                                'id': latest_secondary_data['id'],
                                'value': latest_secondary_data['id']}

                object_listing_html = render_to_string('objects_listing_widget.html',
                                                       {'objects': class_type.sort_objects(),
                                                        'subscription': subscription},
                                                       RequestContext(request))

                response['html'] = object_listing_html

                is_relationship_made = False
                for secondary_data in secondary_data_array:
                    if secondary_data.get('relationships'):
                        is_relationship_made = True
                        break

                if is_relationship_made == True:
                    rel_html = render_to_string('relationships_listing_widget.html',
                                                {'relationship': subscription,
                                                 'relationships': class_type.sort_relationships(request.user, meta=True)},
                                                RequestContext(request))

                    response['rel_msg'] = rel_html
                    response['rel_made'] = True

        return HttpResponse(json.dumps(response,
                            default=json_handler),
                            content_type="application/json")
    else:
        is_prevent_initial_table = request.GET.get('isPreventInitialTable', False)
        is_use_item_source = request.GET.get('useItemSource', False)

        if is_use_item_source == True or is_use_item_source == "true":
            otype = request.GET.get('otype')
            oid = request.GET.get('oid')

            # Get the item with the type and ID from the database
            obj = class_from_id(otype, oid)

            if obj:
                source_field_name = get_source_field_for_class(otype)
                if source_field_name:

                    # If the item has a source, then use the source value
                    # to set as the default source
                    if hasattr(obj, "source"):
                        source_field = get_field_from_label("source", formdict)
                        earliest_source = None
                        earliest_date = None

                        # Get the earliest source, compared by date
                        for source in obj.source:
                            for source_instance in source.instances:
                                if earliest_source == None or source_instance.date < earliest_date:
                                    earliest_date = source_instance.date
                                    earliest_source = source

                        if earliest_source:
                            source_field['initial'] = earliest_source.name

        return render_to_response('bulk_add_object_inline.html',
                                  {'formdict': formdict,
                                   'title': "Bulk Add Objects",
                                   'is_prevent_initial_table': is_prevent_initial_table,
                                   'table_name': 'object_inline'},
                                  RequestContext(request))
Beispiel #18
0
def bulk_add_object_inline(request):
    """
    Bulk add objects inline.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """

    formdict = form_to_dict(AddObjectForm(request.user))

    if request.method == "POST" and request.is_ajax():
        user = request.user
        acl = get_acl_object(request.POST['otype'])

        if user.has_access_to(acl.OBJECTS_ADD):
            response = parse_bulk_upload(request,
                                         parse_row_to_bound_object_form,
                                         add_new_handler_object_via_bulk,
                                         formdict)

            secondary_data_array = response.get('secondary')
            if secondary_data_array:
                latest_secondary_data = secondary_data_array[-1]
                class_type = class_from_id(latest_secondary_data['type'],
                                           latest_secondary_data['id'])

                subscription = {
                    'type': latest_secondary_data['type'],
                    'id': latest_secondary_data['id'],
                    'value': latest_secondary_data['id']
                }

                object_listing_html = render_to_string(
                    'objects_listing_widget.html', {
                        'objects': class_type.sort_objects(),
                        'subscription': subscription
                    }, RequestContext(request))

                response['html'] = object_listing_html

                is_relationship_made = False
                for secondary_data in secondary_data_array:
                    if secondary_data.get('relationships'):
                        is_relationship_made = True
                        break

                if is_relationship_made == True:
                    rel_html = render_to_string(
                        'relationships_listing_widget.html', {
                            'relationship':
                            subscription,
                            'relationships':
                            class_type.sort_relationships(request.user,
                                                          meta=True)
                        }, RequestContext(request))

                    response['rel_msg'] = rel_html
                    response['rel_made'] = True

        return HttpResponse(json.dumps(response, default=json_handler),
                            content_type="application/json")
    else:
        is_prevent_initial_table = request.GET.get('isPreventInitialTable',
                                                   False)
        is_use_item_source = request.GET.get('useItemSource', False)

        if is_use_item_source == True or is_use_item_source == "true":
            otype = request.GET.get('otype')
            oid = request.GET.get('oid')

            # Get the item with the type and ID from the database
            obj = class_from_id(otype, oid)

            if obj:
                source_field_name = get_source_field_for_class(otype)
                if source_field_name:

                    # If the item has a source, then use the source value
                    # to set as the default source
                    if hasattr(obj, "source"):
                        source_field = get_field_from_label("source", formdict)
                        earliest_source = None
                        earliest_date = None

                        # Get the earliest source, compared by date
                        for source in obj.source:
                            for source_instance in source.instances:
                                if earliest_source == None or source_instance.date < earliest_date:
                                    earliest_date = source_instance.date
                                    earliest_source = source

                        if earliest_source:
                            source_field['initial'] = earliest_source.name

        return render_to_response(
            'bulk_add_object_inline.html', {
                'formdict': formdict,
                'title': "Bulk Add Objects",
                'is_prevent_initial_table': is_prevent_initial_table,
                'table_name': 'object_inline'
            }, RequestContext(request))
Beispiel #19
0
def bulk_add_object_inline(request):
    """
    Bulk add objects inline.

    :param request: The Django request.
    :type request: :class:`django.http.HttpRequest`
    :returns: :class:`django.http.HttpResponse`
    """
    all_obj_type_choices = [
        (c[0], c[0], {"datatype": c[1].keys()[0], "datatype_value": c[1].values()[0]})
        for c in get_object_types(False, query={"datatype.file": {"$exists": 0}})
    ]

    formdict = form_to_dict(AddObjectForm(request.user, all_obj_type_choices))

    if request.method == "POST" and request.is_ajax():
        response = parse_bulk_upload(request, parse_row_to_bound_object_form, add_new_handler_object_via_bulk, formdict)

        secondary_data_array = response.get("secondary")
        if secondary_data_array:
            latest_secondary_data = secondary_data_array[-1]
            class_type = class_from_id(latest_secondary_data["type"], latest_secondary_data["id"])

            subscription = {
                "type": latest_secondary_data["type"],
                "id": latest_secondary_data["id"],
                "value": latest_secondary_data["id"],
            }

            object_listing_html = render_to_string(
                "objects_listing_widget.html",
                {"objects": class_type.sort_objects(), "subscription": subscription},
                RequestContext(request),
            )

            response["html"] = object_listing_html

            is_relationship_made = False
            for secondary_data in secondary_data_array:
                if secondary_data.get("relationships"):
                    is_relationship_made = True
                    break

            if is_relationship_made == True:
                rel_html = render_to_string(
                    "relationships_listing_widget.html",
                    {
                        "relationship": subscription,
                        "relationships": class_type.sort_relationships(request.user, meta=True),
                    },
                    RequestContext(request),
                )

                response["rel_msg"] = rel_html
                response["rel_made"] = True

        return HttpResponse(json.dumps(response, default=json_handler), mimetype="application/json")
    else:
        is_prevent_initial_table = request.GET.get("isPreventInitialTable", False)
        is_use_item_source = request.GET.get("useItemSource", False)

        if is_use_item_source == True or is_use_item_source == "true":
            otype = request.GET.get("otype")
            oid = request.GET.get("oid")

            # Get the item with the type and ID from the database
            obj = class_from_id(otype, oid)

            if obj:
                source_field_name = get_source_field_for_class(otype)
                if source_field_name:

                    # If the item has a source, then use the source value
                    # to set as the default source
                    if hasattr(obj, "source"):
                        source_field = get_field_from_label("source", formdict)
                        earliest_source = None
                        earliest_date = None

                        # Get the earliest source, compared by date
                        for source in obj.source:
                            for source_instance in source.instances:
                                if earliest_source == None or source_instance.date < earliest_date:
                                    earliest_date = source_instance.date
                                    earliest_source = source

                        if earliest_source:
                            source_field["initial"] = earliest_source.name

        return render_to_response(
            "bulk_add_object_inline.html",
            {
                "formdict": formdict,
                "title": "Bulk Add Objects",
                "is_prevent_initial_table": is_prevent_initial_table,
                "table_name": "object_inline",
            },
            RequestContext(request),
        )