From 9f7c09be036526fdbf944c347782804c14bf9ec4 Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Sat, 9 Mar 2024 09:43:56 +0530 Subject: [PATCH 01/11] Step 1: Create the Django model Define a Django model named 'Monitor' with fields such as 'url', 'keyword', 'last_checked_time', 'status', and 'user'. #1897 --- website/models.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/website/models.py b/website/models.py index 6c6e87705b..c3ee372dd2 100644 --- a/website/models.py +++ b/website/models.py @@ -534,3 +534,20 @@ class ContributorStats(models.Model): def __str__(self): return self.username + + +class Monitor(models.Model): + url = models.URLField() + keyword = models.CharField(max_length=255) + last_checked_time = models.DateTimeField(auto_now=True) + status = models.CharField( + max_length=20, + choices=[ + ("UP", "Up"), + ("DOWN", "Down"), + ], + ) + user = models.ForeignKey(User, on_delete=models.CASCADE) + + def __str__(self): + return f"Monitor for {self.url} by {self.user}" From 0f3146b61ec82681e3eeb8d2f964cd993488114a Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Sat, 9 Mar 2024 11:36:37 +0530 Subject: [PATCH 02/11] made migration --- website/migrations/0087_monitor.py | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 website/migrations/0087_monitor.py diff --git a/website/migrations/0087_monitor.py b/website/migrations/0087_monitor.py new file mode 100644 index 0000000000..32b367869d --- /dev/null +++ b/website/migrations/0087_monitor.py @@ -0,0 +1,45 @@ +# Generated by Django 5.0.2 on 2024-03-09 06:06 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("website", "0086_merge_20240308_1030"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Monitor", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("url", models.URLField()), + ("keyword", models.CharField(max_length=255)), + ("last_checked_time", models.DateTimeField(auto_now=True)), + ( + "status", + models.CharField( + choices=[("UP", "Up"), ("DOWN", "Down")], max_length=20 + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + ), + ] From e3348abd4ed09ae4cda54921f0d45d56a829a2d5 Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Sat, 9 Mar 2024 12:15:59 +0530 Subject: [PATCH 03/11] formating issue --- website/migrations/0087_monitor.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/website/migrations/0087_monitor.py b/website/migrations/0087_monitor.py index 32b367869d..56e3e51797 100644 --- a/website/migrations/0087_monitor.py +++ b/website/migrations/0087_monitor.py @@ -29,9 +29,7 @@ class Migration(migrations.Migration): ("last_checked_time", models.DateTimeField(auto_now=True)), ( "status", - models.CharField( - choices=[("UP", "Up"), ("DOWN", "Down")], max_length=20 - ), + models.CharField(choices=[("UP", "Up"), ("DOWN", "Down")], max_length=20), ), ( "user", From 254c04f2a9a55e1ed33fd2b88b5d6fae5beb4c21 Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Wed, 13 Mar 2024 23:24:04 +0530 Subject: [PATCH 04/11] added the form --- blt/urls.py | 2 ++ website/forms.py | 8 ++++- website/templates/Monitor.html | 64 ++++++++++++++++++++++++++++++++++ website/views.py | 34 +++++++++++++++++- 4 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 website/templates/Monitor.html diff --git a/blt/urls.py b/blt/urls.py index a1a228b792..ed3b128597 100644 --- a/blt/urls.py +++ b/blt/urls.py @@ -69,6 +69,7 @@ UserProfileDetailsView, UserProfileDetailView, contributors_view, + create_monitor, dislike_issue2, facebook_callback, flag_issue2, @@ -492,6 +493,7 @@ ContributorStatsView.as_view(today=True), name="today-contributor-stats", ), + path("create_monitor/", create_monitor, name="create_monitor"), ] if settings.DEBUG: diff --git a/website/forms.py b/website/forms.py index 012802296e..86e33bb559 100644 --- a/website/forms.py +++ b/website/forms.py @@ -2,7 +2,7 @@ from django import forms from mdeditor.fields import MDTextFormField -from .models import UserProfile +from .models import Monitor, UserProfile class UserProfileForm(forms.ModelForm): @@ -37,3 +37,9 @@ class QuickIssueForm(forms.Form): url = forms.CharField() label = forms.CharField() description = forms.CharField() + + +class MonitorForm(forms.ModelForm): + class Meta: + model = Monitor + fields = ["url", "keyword", "status"] diff --git a/website/templates/Monitor.html b/website/templates/Monitor.html new file mode 100644 index 0000000000..238d1b61c6 --- /dev/null +++ b/website/templates/Monitor.html @@ -0,0 +1,64 @@ + + + + Codestin Search App + + + +
+

Create Monitor

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
+ + diff --git a/website/views.py b/website/views.py index 9c9e74b8c5..61c0c80ca3 100644 --- a/website/views.py +++ b/website/views.py @@ -91,7 +91,14 @@ Winner, ) -from .forms import CaptchaForm, HuntForm, QuickIssueForm, UserDeleteForm, UserProfileForm +from .forms import ( + CaptchaForm, + HuntForm, + MonitorForm, + QuickIssueForm, + UserDeleteForm, + UserProfileForm, +) WHITELISTED_IMAGE_TYPES = { "jpeg": "image/jpeg", @@ -2436,6 +2443,19 @@ def create_wallet(request): return JsonResponse("Created", safe=False) +def monitor_create_view(request): + if request.method == "POST": + form = MonitorForm(request.POST) + if form.is_valid(): + monitor = form.save(commit=False) + monitor.user = request.user # Assuming you have a logged-in user + monitor.save() + # Redirect to a success page or render a success message + else: + form = MonitorForm() + return render(request, "Moniter.html", {"form": form}) + + def issue_count(request): open_issue = Issue.objects.filter(status="open").count() close_issue = Issue.objects.filter(status="closed").count() @@ -4063,3 +4083,15 @@ def get_context_data(self, **kwargs): context["end_date"] = datetime.now().date().isoformat() return context + + +def create_monitor(request): + if request.method == "POST": + form = MonitorForm(request.POST) + if form.is_valid(): + form.save() # This will create a new Monitor instance + messages.success(request, "Form submitted successfully!") + else: + form = MonitorForm() + + return render(request, "Monitor.html", {"form": form}) From 56b943a57769152dd604691fe1c160e16961274f Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Wed, 13 Mar 2024 23:50:47 +0530 Subject: [PATCH 05/11] html issues --- website/templates/Monitor.html | 120 +++++++++++++++------------------ 1 file changed, 56 insertions(+), 64 deletions(-) diff --git a/website/templates/Monitor.html b/website/templates/Monitor.html index 238d1b61c6..c36eaaaf8f 100644 --- a/website/templates/Monitor.html +++ b/website/templates/Monitor.html @@ -1,64 +1,56 @@ - - - - Codestin Search App - - - -
-

Create Monitor

-
- {% csrf_token %} - {{ form.as_p }} - -
-
- - + +
+

Create Monitor

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
From 0433ae1d52b64159821f11c15dd08a28576c98f9 Mon Sep 17 00:00:00 2001 From: Sarthak5598 <108613416+Sarthak5598@users.noreply.github.com> Date: Thu, 21 Mar 2024 21:08:08 +0530 Subject: [PATCH 06/11] Update website/views.py Co-authored-by: Arkadii Yakovets --- website/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views.py b/website/views.py index e0e98cc559..294f27384b 100644 --- a/website/views.py +++ b/website/views.py @@ -2455,7 +2455,7 @@ def monitor_create_view(request): # Redirect to a success page or render a success message else: form = MonitorForm() - return render(request, "Moniter.html", {"form": form}) + return render(request, "monitor.html", {"form": form}) def issue_count(request): From b31af3a8d92fdfbc11f2f4d91a8f28a3d03dde26 Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Thu, 21 Mar 2024 23:16:40 +0530 Subject: [PATCH 07/11] added new feilds --- website/forms.py | 28 +++++++++++++++++++ .../0088_monitor_created_monitor_modified.py | 24 ++++++++++++++++ website/models.py | 2 ++ website/templates/Monitor.html | 14 +++++++++- website/views.py | 23 ++++++--------- 5 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 website/migrations/0088_monitor_created_monitor_modified.py diff --git a/website/forms.py b/website/forms.py index 86e33bb559..7011d502cd 100644 --- a/website/forms.py +++ b/website/forms.py @@ -39,7 +39,35 @@ class QuickIssueForm(forms.Form): description = forms.CharField() +from datetime import datetime + + class MonitorForm(forms.ModelForm): + created = forms.DateTimeField(widget=forms.HiddenInput(), required=False, label="Created") + modified = forms.DateTimeField(widget=forms.HiddenInput(), required=False, label="Modified") + class Meta: model = Monitor fields = ["url", "keyword", "status"] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not self.instance.pk: + self.initial["created"] = "2024-03-21 22:55:10" + self.initial["modified"] = datetime.now() + + def clean_created(self): + return self.instance.created if self.instance else None + + def clean_modified(self): + return ( + datetime.now() + ) # Set modified field to current datetime every time the form is submitted + + def save(self, commit=True): + if not self.instance.pk: # Check if instance is new + self.instance.created = self.initial[ + "created" + ] # Set created field to the initial value if new + self.instance.modified = datetime.now() # Update modified field before saving + return super().save(commit) diff --git a/website/migrations/0088_monitor_created_monitor_modified.py b/website/migrations/0088_monitor_created_monitor_modified.py new file mode 100644 index 0000000000..9ba6e7e193 --- /dev/null +++ b/website/migrations/0088_monitor_created_monitor_modified.py @@ -0,0 +1,24 @@ +# Generated by Django 5.0.2 on 2024-03-21 04:29 + +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("website", "0087_monitor"), + ] + + operations = [ + migrations.AddField( + model_name="monitor", + name="created", + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name="monitor", + name="modified", + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/website/models.py b/website/models.py index 62fc618c4f..ed59994f4f 100644 --- a/website/models.py +++ b/website/models.py @@ -539,6 +539,8 @@ def __str__(self): class Monitor(models.Model): url = models.URLField() keyword = models.CharField(max_length=255) + created = models.DateTimeField(auto_now_add=True) + modified = models.DateTimeField(auto_now=True) last_checked_time = models.DateTimeField(auto_now=True) status = models.CharField( max_length=20, diff --git a/website/templates/Monitor.html b/website/templates/Monitor.html index c36eaaaf8f..300f2b7fb6 100644 --- a/website/templates/Monitor.html +++ b/website/templates/Monitor.html @@ -26,7 +26,7 @@ color: #333; } form input[type="text"], - form textarea { + form textarea{ width: 100%; padding: 8px; margin-bottom: 10px; @@ -45,6 +45,16 @@ form button:hover { background-color: #c82333; } + .created-field, + .modified-field{ + width: 100%; + padding: 8px; + margin-bottom: 10px; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + text-align:center; + }

Create Monitor

@@ -53,4 +63,6 @@

Create Monitor

{{ form.as_p }} +

Created: {{ form.created.value }}

+

Modified: {{ form.modified.value }}

diff --git a/website/views.py b/website/views.py index e0e98cc559..f3f806217b 100644 --- a/website/views.py +++ b/website/views.py @@ -2445,19 +2445,6 @@ def create_wallet(request): return JsonResponse("Created", safe=False) -def monitor_create_view(request): - if request.method == "POST": - form = MonitorForm(request.POST) - if form.is_valid(): - monitor = form.save(commit=False) - monitor.user = request.user # Assuming you have a logged-in user - monitor.save() - # Redirect to a success page or render a success message - else: - form = MonitorForm() - return render(request, "Moniter.html", {"form": form}) - - def issue_count(request): open_issue = Issue.objects.filter(status="open").count() close_issue = Issue.objects.filter(status="closed").count() @@ -4279,12 +4266,20 @@ def get_context_data(self, **kwargs): return context +from django.contrib.auth.decorators import login_required + + +@login_required def create_monitor(request): if request.method == "POST": form = MonitorForm(request.POST) if form.is_valid(): - form.save() # This will create a new Monitor instance + monitor = form.save(commit=False) + monitor.user = request.user # Set the user field to the current user + monitor.save() messages.success(request, "Form submitted successfully!") + else: + messages.error(request, "Form submission failed. Please correct the errors.") else: form = MonitorForm() From 04713d92e3bc8ff56be5430594d5105824d904cd Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Thu, 21 Mar 2024 23:24:21 +0530 Subject: [PATCH 08/11] removed unnecasry lines --- website/views.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/website/views.py b/website/views.py index d1967f5e0c..3c35e1b5ae 100644 --- a/website/views.py +++ b/website/views.py @@ -4278,10 +4278,6 @@ def get_context_data(self, **kwargs): return context - -from django.contrib.auth.decorators import login_required - - @login_required def create_monitor(request): if request.method == "POST": From 304b5391be2b315533c7dc6964265e5b12830af6 Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Thu, 21 Mar 2024 23:43:52 +0530 Subject: [PATCH 09/11] identation issue --- website/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/website/views.py b/website/views.py index 4db6366cf7..94c9e9f2f8 100644 --- a/website/views.py +++ b/website/views.py @@ -4281,6 +4281,7 @@ def get_context_data(self, **kwargs): return context + @login_required def create_monitor(request): if request.method == "POST": From 3f3825a13f8d9fdc3eddf85b459dba0e5c789504 Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Thu, 21 Mar 2024 23:55:39 +0530 Subject: [PATCH 10/11] added merge --- website/migrations/0089_merge_20240321_2353.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 website/migrations/0089_merge_20240321_2353.py diff --git a/website/migrations/0089_merge_20240321_2353.py b/website/migrations/0089_merge_20240321_2353.py new file mode 100644 index 0000000000..db6c8be92b --- /dev/null +++ b/website/migrations/0089_merge_20240321_2353.py @@ -0,0 +1,13 @@ +# Generated by Django 5.0.2 on 2024-03-21 18:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("website", "0087_issue_cve_score"), + ("website", "0088_monitor_created_monitor_modified"), + ] + + operations = [] From e040312c568c394902eaa227ed13f9397fc9697c Mon Sep 17 00:00:00 2001 From: Sarthak5598 Date: Fri, 22 Mar 2024 00:23:18 +0530 Subject: [PATCH 11/11] indentation --- website/migrations/0089_merge_20240321_2353.py | 1 - 1 file changed, 1 deletion(-) diff --git a/website/migrations/0089_merge_20240321_2353.py b/website/migrations/0089_merge_20240321_2353.py index db6c8be92b..f47ede59bc 100644 --- a/website/migrations/0089_merge_20240321_2353.py +++ b/website/migrations/0089_merge_20240321_2353.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("website", "0087_issue_cve_score"), ("website", "0088_monitor_created_monitor_modified"),