Dodata nova pitanja, promenjena neka stara, dodate instrukcije
Dodata nova pitanja, promenjena neka stara, dodate instrukcije
This commit is contained in:
@@ -10,11 +10,40 @@ class OrganizationForm(forms.ModelForm):
|
||||
'network_infrastructure', 'remote_workforce_percentage', 'third_party_vendor_access',
|
||||
'internal_software_development', 'geographic_scope', 'customer_base', 'customer_type',
|
||||
'product_portfolio', 'supplier_base', 'it_infrastructure', 'intellectual_property',
|
||||
'sensitive_data', 'integration_level'
|
||||
'sensitive_data','sensitive_data_types', 'integration_level', 'ip_value', 'change_rate', 'threat_actors'
|
||||
]
|
||||
widgets = {
|
||||
'compliance_frameworks': forms.CheckboxSelectMultiple(),
|
||||
'it_infrastructure': forms.CheckboxSelectMultiple(),
|
||||
'intellectual_property': forms.CheckboxSelectMultiple(),
|
||||
'sensitive_data': forms.CheckboxSelectMultiple(),
|
||||
'threat_actors': forms.CheckboxSelectMultiple(),
|
||||
'sensitive_data_types': forms.CheckboxSelectMultiple(),
|
||||
}
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
# Handle compliance_frameworks "Other"
|
||||
frameworks = cleaned_data.get('compliance_frameworks', [])
|
||||
other_framework = self.data.get('compliance_frameworks_other', '').strip()
|
||||
if 'other' in frameworks and other_framework:
|
||||
frameworks = [fw for fw in frameworks if fw != 'other']
|
||||
frameworks.append(other_framework)
|
||||
cleaned_data['compliance_frameworks'] = frameworks
|
||||
|
||||
# Handle industry_sector "Other"
|
||||
sector = cleaned_data.get('industry_sector')
|
||||
sector_other = self.data.get('industry_sector_other', '').strip()
|
||||
if sector == 'other' and sector_other:
|
||||
cleaned_data['industry_sector'] = sector_other
|
||||
|
||||
# Handle sensitive_data_types
|
||||
types = cleaned_data.get('sensitive_data_types') or []
|
||||
other_type = self.data.get('sensitive_data_types_other', '').strip()
|
||||
if 'other' in types and other_type:
|
||||
types = [t for t in types if t != 'other']
|
||||
types.append(other_type)
|
||||
cleaned_data['sensitive_data_types'] = types
|
||||
|
||||
return cleaned_data
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 5.1.3 on 2025-04-23 15:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0009_documentriskcontrol_likelihood_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='organization',
|
||||
name='change_rate',
|
||||
field=models.CharField(blank=True, max_length=20, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='organization',
|
||||
name='ip_value',
|
||||
field=models.CharField(blank=True, max_length=20, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='organization',
|
||||
name='threat_actors',
|
||||
field=models.JSONField(blank=True, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='it_dependency',
|
||||
field=models.CharField(help_text='On a scale from 1-10, how dependent is your business operations on technology?', max_length=255),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.3 on 2025-04-23 15:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0010_organization_change_rate_organization_ip_value_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='data_sensitivity',
|
||||
field=models.CharField(blank=True, help_text='...', max_length=20, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.3 on 2025-04-23 15:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0011_alter_organization_data_sensitivity'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='organization',
|
||||
name='sensitive_data_types',
|
||||
field=models.JSONField(blank=True, help_text='What type of sensitive data does your organization handle?', null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,40 @@
|
||||
# Generated by Django 5.1.3 on 2025-04-23 17:08
|
||||
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0012_organization_sensitive_data_types'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='change_rate',
|
||||
field=models.CharField(blank=True, help_text='How frequently does your organization undergo significant technology or business changes?', max_length=20, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='data_sensitivity',
|
||||
field=models.CharField(default=django.utils.timezone.now, help_text='Overall Sensitivity Level of Data Processed: Subjective rating of the value and impact of the data your organization processes.', max_length=20),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='ip_value',
|
||||
field=models.CharField(blank=True, help_text="Intellectual Property (IP) Value: Select best description of IP's importance to the business model.", max_length=20, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='network_infrastructure',
|
||||
field=models.CharField(blank=True, help_text="What best describes your organization's network infrastructure model?", max_length=20, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='threat_actors',
|
||||
field=models.JSONField(blank=True, help_text='Which types of threat actors are most relevant to your organization (e.g., cybercriminals, insiders, nation-states)?', null=True),
|
||||
),
|
||||
]
|
||||
@@ -51,9 +51,8 @@ class Organization(models.Model):
|
||||
critical_applications = models.CharField(max_length=20, help_text="How many critical business applications do your employees use daily?")
|
||||
compliance_frameworks = models.JSONField(help_text="Which regulatory frameworks is your organization required to comply with?") # Stores selected compliance frameworks as a list
|
||||
industry_sector = models.CharField(max_length=255,help_text="What is your primary industry sector?")
|
||||
it_dependency = models.IntegerField(help_text="On a scale from 1-10, how dependent is your business operations on technology?")
|
||||
data_sensitivity = models.CharField(max_length=20, help_text="What level of sensitive data does your organization process?")
|
||||
network_infrastructure = models.CharField(max_length=20, help_text="What best describes your organization's network infrastructure model?")
|
||||
it_dependency = models.CharField(max_length=255, help_text="On a scale from 1-10, how dependent is your business operations on technology?")
|
||||
data_sensitivity = models.CharField(max_length=20, help_text="Overall Sensitivity Level of Data Processed: Subjective rating of the value and impact of the data your organization processes.")
|
||||
remote_workforce_percentage = models.CharField(max_length=20, help_text="What percentage of your workforce operates remotely?")
|
||||
third_party_vendor_access = models.CharField(max_length=20, help_text="How many third-party vendors have access to your systems?")
|
||||
internal_software_development = models.CharField(max_length=20, help_text="What is the extent of your internal software development activities?")
|
||||
@@ -66,7 +65,11 @@ class Organization(models.Model):
|
||||
intellectual_property = models.JSONField(null=True, blank=True, help_text="How does your organization protect and manage intellectual property?") # Stores selected IP protection types as a list
|
||||
sensitive_data = models.JSONField(null=True, blank=True, help_text="What type of sensitive data does your organization handle?") # Stores selected sensitive data types as a list
|
||||
integration_level = models.CharField(max_length=20, null=True, blank=True, help_text="How integrated are your critical business systems?")
|
||||
|
||||
network_infrastructure = models.CharField(max_length=20, null=True, blank=True, help_text="What best describes your organization's network infrastructure model?")
|
||||
ip_value = models.CharField(max_length=20, null=True, blank=True, help_text="Intellectual Property (IP) Value: Select best description of IP's importance to the business model.")
|
||||
change_rate = models.CharField(max_length=20, null=True, blank=True, help_text="How frequently does your organization undergo significant technology or business changes?")
|
||||
threat_actors = models.JSONField(null=True, blank=True, help_text="Which types of threat actors are most relevant to your organization (e.g., cybercriminals, insiders, nation-states)?")
|
||||
sensitive_data_types = models.JSONField(null=True, blank=True, help_text="What type of sensitive data does your organization handle?")
|
||||
risks = models.ManyToManyField('Risk', related_name='organizations', blank=True)
|
||||
|
||||
def __str__(self):
|
||||
|
||||
@@ -2,6 +2,18 @@ document.addEventListener('DOMContentLoaded', (event) => {
|
||||
const form = document.querySelector('form');
|
||||
const formElements = form.elements;
|
||||
|
||||
const instructionsModal = new bootstrap.Modal(document.getElementById('instructionsModal'));
|
||||
instructionsModal.show();
|
||||
|
||||
document.getElementById('startModalBtn').addEventListener('click', function() {
|
||||
hideNavElementsAndQuestions();
|
||||
document.currentQuestion = 0;
|
||||
showQuestion('q0');
|
||||
setButtonVisiblity('next', true);
|
||||
setButtonVisiblity('back', true);
|
||||
setNextButtonAvailability();
|
||||
});
|
||||
|
||||
// Load saved form state
|
||||
/* loadFormState(formElements);
|
||||
|
||||
@@ -76,24 +88,32 @@ function setNextButtonAvailability() {
|
||||
const submitButton = document.getElementById('submit');
|
||||
// check if any input in the current question is checked, or filled in case it is a text input
|
||||
let nextEnabled = false;
|
||||
const inputs = currentQuestion.querySelectorAll('input, select, textarea');
|
||||
for (let input of inputs) {
|
||||
// if the input is not visible, skip it
|
||||
if (input.checkVisibility() === false) {
|
||||
continue;
|
||||
if (document.currentQuestion === 0) {
|
||||
const name = document.getElementById('name');
|
||||
const email = document.getElementById('email');
|
||||
if (name && email && name.value.trim() && email.value.trim()) {
|
||||
nextEnabled = true;
|
||||
}
|
||||
if (input.type === 'checkbox' || input.type === 'radio') {
|
||||
if (input.checked) {
|
||||
nextEnabled = true;
|
||||
break;
|
||||
} else {
|
||||
const inputs = currentQuestion.querySelectorAll('input, select, textarea');
|
||||
for (let input of inputs) {
|
||||
if (input.checkVisibility() === false){
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (input.value) {
|
||||
nextEnabled = true;
|
||||
break;
|
||||
if (input.type === 'checkbox' || input.type === 'radio') {
|
||||
if (input.checked) {
|
||||
nextEnabled = true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (input.value) {
|
||||
nextEnabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nextButton.disabled = !nextEnabled;
|
||||
submitButton.disabled = !nextEnabled;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user