| @@ -34,71 +34,137 @@ Class CategoriesController_Class | |||||
| m_title = v | m_title = v | ||||
| End Property | End Property | ||||
| '--------------------------------------------------------------- | |||||
| ' Action: Index | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Index() | |||||
| ' TODO: Implement Index action | |||||
| Response.Write "Index action called" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Show | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Show(id) | |||||
| ' TODO: Implement Show action | |||||
| Response.Write "<strong>Show called</strong><br>" | |||||
| Response.Write "Parameters:<br>" | |||||
| Response.Write "id = " & Server.HTMLEncode(CStr(id)) & "<br>" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: New | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub NewForm() | |||||
| ' TODO: Implement NewForm action | |||||
| Response.Write "NewForm action called" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Create | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Create() | |||||
| ' TODO: Implement Create action | |||||
| Response.Write "Create action called" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Edit | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Edit(id) | |||||
| ' TODO: Implement Edit action | |||||
| Response.Write "<strong>Edit called</strong><br>" | |||||
| Response.Write "Parameters:<br>" | |||||
| Response.Write "id = " & Server.HTMLEncode(CStr(id)) & "<br>" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Update | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Update(id) | |||||
| ' TODO: Implement Update action | |||||
| Response.Write "<strong>Update called</strong><br>" | |||||
| Response.Write "Parameters:<br>" | |||||
| Response.Write "id = " & Server.HTMLEncode(CStr(id)) & "<br>" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Delete | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Delete(id) | |||||
| ' TODO: Implement Delete action | |||||
| Response.Write "<strong>Delete called</strong><br>" | |||||
| Response.Write "Parameters:<br>" | |||||
| Response.Write "id = " & Server.HTMLEncode(CStr(id)) & "<br>" | |||||
| End Sub | |||||
| End Class | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Index | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Index() | |||||
| Dim categories | |||||
| Set categories = CategoriesRepository().FindAll | |||||
| %> | |||||
| <!--#include file="../views/Categories/index.asp" --> | |||||
| <% | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Show | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Show(ByVal id) | |||||
| Dim category | |||||
| On Error Resume Next | |||||
| Set category = CategoriesRepository().FindByID(id) | |||||
| If Err.Number <> 0 Then | |||||
| Err.Clear | |||||
| On Error GoTo 0 | |||||
| Response.Status = "404 Not Found" | |||||
| %> | |||||
| <!--#include file="../views/Error/NotFound.asp" --> | |||||
| <% | |||||
| Exit Sub | |||||
| End If | |||||
| On Error GoTo 0 | |||||
| %> | |||||
| <!--#include file="../views/Categories/show.asp" --> | |||||
| <% | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: New | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub NewForm() | |||||
| %> | |||||
| <!--#include file="../views/Categories/new.asp" --> | |||||
| <% | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Create | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Create() | |||||
| Dim name : name = Trim(Request.Form("Name")) | |||||
| If Len(name) = 0 Then | |||||
| Flash().AddError "Name is required." | |||||
| Response.Redirect "/categories/new" | |||||
| Exit Sub | |||||
| End If | |||||
| Dim category | |||||
| Set category = New POBO_Categories | |||||
| category.Name = name | |||||
| category.Slug = Request.Form("Slug") | |||||
| category.Description = Request.Form("Description") | |||||
| CategoriesRepository().AddNew category | |||||
| Flash().Success = "Category created." | |||||
| Response.Redirect "/categories" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Edit | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Edit(ByVal id) | |||||
| Dim category | |||||
| On Error Resume Next | |||||
| Set category = CategoriesRepository().FindByID(id) | |||||
| If Err.Number <> 0 Then | |||||
| Err.Clear | |||||
| On Error GoTo 0 | |||||
| Response.Status = "404 Not Found" | |||||
| %> | |||||
| <!--#include file="../views/Error/NotFound.asp" --> | |||||
| <% | |||||
| Exit Sub | |||||
| End If | |||||
| On Error GoTo 0 | |||||
| %> | |||||
| <!--#include file="../views/Categories/edit.asp" --> | |||||
| <% | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Update | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Update(ByVal id) | |||||
| Dim category | |||||
| On Error Resume Next | |||||
| Set category = CategoriesRepository().FindByID(id) | |||||
| If Err.Number <> 0 Then | |||||
| Err.Clear | |||||
| On Error GoTo 0 | |||||
| Response.Status = "404 Not Found" | |||||
| %> | |||||
| <!--#include file="../views/Error/NotFound.asp" --> | |||||
| <% | |||||
| Exit Sub | |||||
| End If | |||||
| On Error GoTo 0 | |||||
| Dim name : name = Trim(Request.Form("Name")) | |||||
| If Len(name) = 0 Then | |||||
| Flash().AddError "Name is required." | |||||
| Response.Redirect "/categories/" & Server.URLEncode(CStr(id)) & "/edit" | |||||
| Exit Sub | |||||
| End If | |||||
| category.Name = name | |||||
| category.Slug = Request.Form("Slug") | |||||
| category.Description = Request.Form("Description") | |||||
| CategoriesRepository().Update category | |||||
| Flash().Success = "Category updated." | |||||
| Response.Redirect "/categories" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Delete | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Delete(ByVal id) | |||||
| CategoriesRepository().Delete id | |||||
| Flash().Success = "Category deleted." | |||||
| Response.Redirect "/categories" | |||||
| End Sub | |||||
| End Class | |||||
| ' Singleton instance | ' Singleton instance | ||||
| Dim CategoriesController_Class__Singleton | Dim CategoriesController_Class__Singleton | ||||
| @@ -34,25 +34,68 @@ Class CommentsController_Class | |||||
| m_title = v | m_title = v | ||||
| End Property | End Property | ||||
| '--------------------------------------------------------------- | |||||
| ' Action: Create | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Create() | |||||
| ' TODO: Implement Create action | |||||
| Response.Write "Create action called" | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Delete | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Delete(id) | |||||
| ' TODO: Implement Delete action | |||||
| Response.Write "<strong>Delete called</strong><br>" | |||||
| Response.Write "Parameters:<br>" | |||||
| Response.Write "id = " & Server.HTMLEncode(CStr(id)) & "<br>" | |||||
| End Sub | |||||
| End Class | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Create | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Create() | |||||
| Dim comment | |||||
| Set comment = New POBO_Comments | |||||
| comment.PostID = FormNumberOrZero(Request.Form("PostID")) | |||||
| comment.AuthorName = Request.Form("AuthorName") | |||||
| comment.AuthorEmail = Request.Form("AuthorEmail") | |||||
| comment.Body = Request.Form("Body") | |||||
| comment.CreatedDate = Now() | |||||
| comment.IsApproved = 0 | |||||
| CommentsRepository().AddNew comment | |||||
| Flash().Success = "Comment submitted for approval." | |||||
| Dim slug : slug = ResolvePostSlug(comment.PostID) | |||||
| If Len(slug) > 0 Then | |||||
| Response.Redirect "/posts/" & Server.URLEncode(slug) | |||||
| Else | |||||
| Response.Redirect "/posts" | |||||
| End If | |||||
| End Sub | |||||
| '--------------------------------------------------------------- | |||||
| ' Action: Delete | |||||
| '--------------------------------------------------------------- | |||||
| Public Sub Delete(ByVal id) | |||||
| CommentsRepository().Delete id | |||||
| Flash().Success = "Comment deleted." | |||||
| Dim returnUrl : returnUrl = Request.ServerVariables("HTTP_REFERER") | |||||
| If Len(returnUrl) = 0 Then returnUrl = "/posts" | |||||
| Response.Redirect returnUrl | |||||
| End Sub | |||||
| Private Function FormNumberOrZero(ByVal value) | |||||
| If IsNumeric(value) Then | |||||
| FormNumberOrZero = CLng(value) | |||||
| Else | |||||
| FormNumberOrZero = 0 | |||||
| End If | |||||
| End Function | |||||
| Private Function ResolvePostSlug(ByVal postID) | |||||
| Dim slug : slug = Trim(Request.Form("Slug")) | |||||
| If Len(slug) = 0 Then slug = Trim(Request.Form("PostSlug")) | |||||
| If Len(slug) = 0 And CLng(postID) > 0 Then | |||||
| Dim post | |||||
| On Error Resume Next | |||||
| Set post = PostsRepository().FindByID(postID) | |||||
| If Err.Number = 0 Then slug = CStr(post.Slug) | |||||
| Err.Clear | |||||
| On Error GoTo 0 | |||||
| End If | |||||
| ResolvePostSlug = slug | |||||
| End Function | |||||
| End Class | |||||
| ' Singleton instance | ' Singleton instance | ||||
| Dim CommentsController_Class__Singleton | Dim CommentsController_Class__Singleton | ||||
| @@ -23,11 +23,15 @@ Class CategoriesRepository_Class | |||||
| Destroy rs | Destroy rs | ||||
| End Function | End Function | ||||
| Public Function GetAll(orderBy) | |||||
| Set GetAll = Find(Empty, orderBy) | |||||
| End Function | |||||
| Public Function Find(where_kvarray, order_string_or_array) | |||||
| Public Function GetAll(orderBy) | |||||
| Set GetAll = Find(Empty, orderBy) | |||||
| End Function | |||||
| Public Function FindAll() | |||||
| Set FindAll = Find(Empty, "Name") | |||||
| End Function | |||||
| Public Function Find(where_kvarray, order_string_or_array) | |||||
| Dim sql : sql = "Select [CategoryID], [Description], [Name], [Slug] FROM [Categories]" | Dim sql : sql = "Select [CategoryID], [Description], [Name], [Slug] FROM [Categories]" | ||||
| Dim where_keys, where_values, i | Dim where_keys, where_values, i | ||||
| If Not IsEmpty(where_kvarray) Then | If Not IsEmpty(where_kvarray) Then | ||||
| @@ -0,0 +1,35 @@ | |||||
| <div class="row"> | |||||
| <div class="col-lg-8"> | |||||
| <div class="card shadow-sm"> | |||||
| <div class="card-body"> | |||||
| <h1 class="h3 mb-4">Edit Category</h1> | |||||
| <form method="post" action="/categories/<%= H(category.CategoryID) %>"> | |||||
| <div class="mb-3"> | |||||
| <label class="form-label" for="Name">Name</label> | |||||
| <input class="form-control" type="text" id="Name" name="Name" value="<%= H(category.Name) %>" required> | |||||
| </div> | |||||
| <div class="mb-3"> | |||||
| <label class="form-label" for="Slug">Slug</label> | |||||
| <input class="form-control" type="text" id="Slug" name="Slug" value="<%= H(category.Slug) %>"> | |||||
| </div> | |||||
| <div class="mb-4"> | |||||
| <label class="form-label" for="Description">Description</label> | |||||
| <textarea class="form-control" id="Description" name="Description" rows="5"><%= H(category.Description) %></textarea> | |||||
| </div> | |||||
| <div class="d-flex flex-wrap gap-2"> | |||||
| <button class="btn btn-primary" type="submit">Update Category</button> | |||||
| <a class="btn btn-outline-secondary" href="/categories">Cancel</a> | |||||
| </div> | |||||
| </form> | |||||
| <form method="post" action="/categories/<%= H(category.CategoryID) %>/delete" class="mt-3"> | |||||
| <button class="btn btn-outline-danger" type="submit">Delete Category</button> | |||||
| </form> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| @@ -0,0 +1,43 @@ | |||||
| <div class="d-flex align-items-center justify-content-between mb-4"> | |||||
| <div> | |||||
| <h1 class="h3 mb-1">Categories</h1> | |||||
| <p class="text-muted mb-0">Browse post categories from ASPBlogBrainOrdure.</p> | |||||
| </div> | |||||
| <a class="btn btn-primary" href="/categories/new">New Category</a> | |||||
| </div> | |||||
| <% | |||||
| Dim categoryIter, categoryItem | |||||
| Set categoryIter = categories.Iterator() | |||||
| If categories.Count = 0 Then | |||||
| %> | |||||
| <div class="alert alert-secondary">No categories are available yet.</div> | |||||
| <% | |||||
| Else | |||||
| %> | |||||
| <div class="row gy-3"> | |||||
| <% | |||||
| Do While categoryIter.HasNext | |||||
| Set categoryItem = categoryIter.GetNext() | |||||
| %> | |||||
| <div class="col-12"> | |||||
| <article class="card shadow-sm"> | |||||
| <div class="card-body"> | |||||
| <h2 class="h5 mb-2"> | |||||
| <a href="/categories/<%= Server.URLEncode(CStr(categoryItem.CategoryID)) %>" class="text-decoration-none"> | |||||
| <%= H(categoryItem.Name) %> | |||||
| </a> | |||||
| </h2> | |||||
| <p class="text-muted mb-3"><%= H(categoryItem.Description) %></p> | |||||
| <a class="btn btn-sm btn-outline-primary" href="/categories/<%= Server.URLEncode(CStr(categoryItem.CategoryID)) %>">View</a> | |||||
| </div> | |||||
| </article> | |||||
| </div> | |||||
| <% | |||||
| Loop | |||||
| %> | |||||
| </div> | |||||
| <% | |||||
| End If | |||||
| %> | |||||
| @@ -0,0 +1,31 @@ | |||||
| <div class="row"> | |||||
| <div class="col-lg-8"> | |||||
| <div class="card shadow-sm"> | |||||
| <div class="card-body"> | |||||
| <h1 class="h3 mb-4">New Category</h1> | |||||
| <form method="post" action="/categories"> | |||||
| <div class="mb-3"> | |||||
| <label class="form-label" for="Name">Name</label> | |||||
| <input class="form-control" type="text" id="Name" name="Name" required> | |||||
| </div> | |||||
| <div class="mb-3"> | |||||
| <label class="form-label" for="Slug">Slug</label> | |||||
| <input class="form-control" type="text" id="Slug" name="Slug"> | |||||
| </div> | |||||
| <div class="mb-4"> | |||||
| <label class="form-label" for="Description">Description</label> | |||||
| <textarea class="form-control" id="Description" name="Description" rows="5"></textarea> | |||||
| </div> | |||||
| <div class="d-flex gap-2"> | |||||
| <button class="btn btn-primary" type="submit">Create Category</button> | |||||
| <a class="btn btn-outline-secondary" href="/categories">Cancel</a> | |||||
| </div> | |||||
| </form> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| @@ -0,0 +1,17 @@ | |||||
| <article class="card shadow-sm"> | |||||
| <div class="card-body"> | |||||
| <div class="mb-3"> | |||||
| <a href="/categories" class="small text-decoration-none">← Back to categories</a> | |||||
| </div> | |||||
| <h1 class="h2 mb-3"><%= H(category.Name) %></h1> | |||||
| <p class="fs-5 text-muted mb-4"><%= H(category.Description) %></p> | |||||
| <div class="d-flex flex-wrap gap-2"> | |||||
| <a class="btn btn-outline-primary" href="/categories/<%= Server.URLEncode(CStr(category.CategoryID)) %>/edit">Edit Category</a> | |||||
| <form method="post" action="/categories/<%= H(category.CategoryID) %>/delete"> | |||||
| <button class="btn btn-outline-danger" type="submit">Delete Category</button> | |||||
| </form> | |||||
| </div> | |||||
| </div> | |||||
| </article> | |||||
Powered by TurnKey Linux.