-
Notifications
You must be signed in to change notification settings - Fork 0
/
post_loop.C
105 lines (86 loc) · 2.82 KB
/
post_loop.C
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
/******************************************************
FileName: post_loop.C
Description: Holds the definition of class for posts widget
Authors: Gauravjeet Singh, Shaina Sabarwal, Inderpreet Singh, Amitoj Singh
License GNU GPL V3
***********************************************************/
#include "post_loop.h"
#include "add_theme.h"
#include <Wt/WLink>
string loopTemplate, postTemplate;
PostLoop::PostLoop(WContainerWidget *parent)
:WContainerWidget(parent)
{
postContainer = new WContainerWidget(this);
categoryCollection = new WContainerWidget(this);
{
dbo::Transaction T(session_);
allPosts = session_.find<Post>();
theLoop();
T.commit();
}
}
void PostLoop::theLoop()
{
handleThemeFile();
categoryCollection = new WContainerWidget(this);
categoryCollection->setStyleClass("category-container");
for (auto i:allPosts)
{
singlePostName = new WAnchor(WLink(WLink::InternalPath,(i)->permalink), (i)->postName, postContainer);
WTemplate* loop = new WTemplate(postContainer);
loop->setTemplateText(loopTemplate);
loop->bindString("post-date", i->postDate);
loop->bindWidget("post-title", singlePostName);
loop->bindString("post-content", i->postContent);
for(auto k:i->categories)
{
category = new WAnchor(WLink(WLink::InternalPath, k->categoryLink), k->categoryname + " ", categoryCollection);
category->setStyleClass("post-content");
}
}
}
void PostLoop::handlePath()
{
pathString = WApplication::instance()->internalPath();
postContainer->clear();
categoryCollection->clear();
try
{
categoryFilter();
}
catch(std::exception &e)
{
permalinkFilter();
}
}
void PostLoop::permalinkFilter()
{
{
dbo::Transaction t(session_);
dbo::ptr<Post> postPtr = session_.find<Post>().where("permalink = ?").bind(pathString);
singlePostTemplate = new WTemplate(this);
singlePostTemplate->setTemplateText(postTemplate);
singlePostTemplate->bindString("post-name", postPtr->postName);
singlePostTemplate->bindString("post-content", postPtr->postContent);
singlePostTemplate->bindString("post-date", postPtr->postDate);
t.commit();
}
}
void PostLoop::categoryFilter()
{
postContainer->clear();
{
dbo::Transaction t(session_);
dbo::ptr<Category> categoryPtr = session_.find<Category>().where("categoryLink = ?").bind(pathString);
for (auto x: categoryPtr->posts)
{
WTemplate *filterLoop = new WTemplate(this);
filterLoop->setTemplateText(loopTemplate);
filterLoop->bindString("post-date", x->postDate);
filterLoop->bindString("post-title", x->postName);
filterLoop->bindString("post-content", x->postContent);
}
t.commit();
}
}