blob: fee128fd9dc49dc29c12e69587cf253d3c0d08f3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Project_Unite.Models
{
public class AddWikiPageViewModel : AddWikiCategoryViewModel
{
public AddWikiPageViewModel() : base()
{
Parents.Remove(Parents.FirstOrDefault(x => x.Value == "none"));
}
[AllowHtml]
[Required(ErrorMessage = "Please enter content for your page.")]
public string Content { get; set; }
public string PageId { get; set; }
}
public class AddWikiCategoryViewModel
{
public AddWikiCategoryViewModel()
{
var db = new ApplicationDbContext();
Parents = new List<SelectListItem>();
Parents.Add(new SelectListItem
{
Value = "none",
Text = "No parent"
});
foreach(var cat in db.WikiCategories)
{
Parents.Add(new SelectListItem
{
Value = cat.Id,
Text = cat.Name
});
}
db.Dispose();
}
public List<SelectListItem> Parents { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage ="Please name your category/page.")]
[MinLength(5, ErrorMessage ="Your category/page's name must be at least 5 characters long.")]
[MaxLength(25, ErrorMessage ="Your category/page's name must be at most 25 characters long.")]
public string Name { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Please select a parent category.")]
public string ParentId { get; set; }
}
public class WikiCategory
{
public string Id { get; set; }
public string Name { get; set; }
public string Parent { get; set; }
public WikiCategory[] Children
{
get
{
var db = new ApplicationDbContext();
return db.WikiCategories.Where(x => x.Parent == this.Id).ToArray();
}
}
public WikiPage[] Pages
{
get
{
var db = new ApplicationDbContext();
return db.WikiPages.Where(w => w.CategoryId == this.Id).ToArray();
}
}
}
public class WikiViewModel
{
public IEnumerable<WikiCategory> Categories { get; set; }
public WikiPage Page { get; set; }
}
public class WikiPage
{
public string Id { get; set; }
public string Name { get; set; }
public string CategoryId { get; set; }
//I stole this feature from wikipedia lol. I like the idea of disambiguation of multiple pages with the same name.
public WikiPage[] AmbiguousReferences
{
get
{
var db = new ApplicationDbContext();
var ambiguous1 = db.WikiPages.Where(w => w.Id != this.Id && w.Name.ToLower().Contains(this.Name.ToLower())).ToArray();
var ambiguous2 = db.WikiPages.Where(w => w.Id != this.Id && this.Name.ToLower().Contains(w.Name.ToLower())).ToArray();
var list = new List<WikiPage>();
list.AddRange(ambiguous1);
list.AddRange(ambiguous2);
return list.ToArray();
}
}
public Like[] Likes
{
get
{
return new ApplicationDbContext().Likes.Where(x => x.Topic == this.Id && x.IsDislike == false).ToArray();
}
}
public Like[] Dislikes
{
get
{
return new ApplicationDbContext().Likes.Where(x => x.Topic == this.Id && x.IsDislike == true).ToArray();
}
}
public string Contents { get; set; }
public ForumPostEdit[] EditHistory
{
get
{
var db = new ApplicationDbContext();
return db.ForumPostEdits.Where(x => x.Parent == this.Id).ToArray();
}
}
}
}
|