Begin dynamic content generators
This commit is contained in:
parent
a4a45d9add
commit
a524674149
8
dynamic/dynamiccontent.cpp
Normal file
8
dynamic/dynamiccontent.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "dynamiccontent.h"
|
||||||
|
|
||||||
|
DynamicContent::DynamicContent(Template &templ, Database &database, UrlProvider &provider)
|
||||||
|
{
|
||||||
|
this->templ = &templ;
|
||||||
|
this->database = &database;
|
||||||
|
this->urlProvider = &provider;
|
||||||
|
}
|
22
dynamic/dynamiccontent.h
Normal file
22
dynamic/dynamiccontent.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef DYNAMICCONTENT_H
|
||||||
|
#define DYNAMICCONTENT_H
|
||||||
|
#include <string>
|
||||||
|
#include "../database/database.h"
|
||||||
|
#include "../template.h"
|
||||||
|
#include "../urlprovider.h"
|
||||||
|
class DynamicContent
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
Template *templ;
|
||||||
|
Database *database;
|
||||||
|
UrlProvider *urlProvider;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DynamicContent(Template &templ, Database &database, UrlProvider &urlProvider);
|
||||||
|
virtual std::string render() = 0;
|
||||||
|
virtual ~DynamicContent()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DYNAMICCONTENT_H
|
43
dynamic/dynamiccontentpostlist.cpp
Normal file
43
dynamic/dynamiccontentpostlist.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include <chrono>
|
||||||
|
#include "dynamiccontentpostlist.h"
|
||||||
|
|
||||||
|
void DynamicContentPostList::setCategory(std::string catname)
|
||||||
|
{
|
||||||
|
this->catname = catname;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string DynamicContentPostList::render()
|
||||||
|
{
|
||||||
|
auto categoryDao = this->database->createCategoryDao();
|
||||||
|
auto pageDao = this->database->createPageDao();
|
||||||
|
auto revisionDao = this->database->createRevisionDao();
|
||||||
|
QueryOption option;
|
||||||
|
auto members = categoryDao->fetchMembers(this->catname, option);
|
||||||
|
std::vector<std::pair<std::string, time_t>> pageList;
|
||||||
|
for(std::string &member : members)
|
||||||
|
{
|
||||||
|
auto revision = revisionDao->getRevisionForPage(member, 1);
|
||||||
|
pageList.push_back({member, revision->timestamp});
|
||||||
|
}
|
||||||
|
std::sort(pageList.begin(), pageList.end(),
|
||||||
|
[](std::pair<std::string, time_t> &a, std::pair<std::string, time_t> &b) { return a.second > b.second; });
|
||||||
|
|
||||||
|
std::string postListBegin = this->templ->loadResolvedPart("dynamic/postlistbegin");
|
||||||
|
std::string postListEnd = this->templ->loadResolvedPart("dynamic/postlistend");
|
||||||
|
std::string postLink = this->templ->loadResolvedPart("dynamic/postlistlink");
|
||||||
|
std::stringstream stream;
|
||||||
|
stream << postListBegin;
|
||||||
|
for(auto &pair : pageList)
|
||||||
|
{
|
||||||
|
std::string link = this->urlProvider->page(pair.first);
|
||||||
|
std::string date = utils::toISODate(pair.second);
|
||||||
|
Varreplacer replacer{"{"};
|
||||||
|
replacer.addKeyValue("url", link);
|
||||||
|
replacer.addKeyValue("date", date);
|
||||||
|
replacer.addKeyValue("page", pair.first);
|
||||||
|
|
||||||
|
stream << replacer.parse(postLink);
|
||||||
|
}
|
||||||
|
stream << postListEnd;
|
||||||
|
return stream.str();
|
||||||
|
}
|
16
dynamic/dynamiccontentpostlist.h
Normal file
16
dynamic/dynamiccontentpostlist.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef DYNAMICCONTENTPOSTLIST_H
|
||||||
|
#define DYNAMICCONTENTPOSTLIST_H
|
||||||
|
|
||||||
|
#include "dynamiccontent.h"
|
||||||
|
class DynamicContentPostList : public DynamicContent
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::string catname;
|
||||||
|
|
||||||
|
public:
|
||||||
|
using DynamicContent::DynamicContent;
|
||||||
|
void setCategory(std::string catname);
|
||||||
|
std::string render() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DYNAMICCONTENTPOSTLIST_H
|
@ -1,5 +1,6 @@
|
|||||||
#ifndef HANDLER_H
|
#ifndef HANDLER_H
|
||||||
#define HANDLER_H
|
#define HANDLER_H
|
||||||
|
#include <memory>
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
#include "../response.h"
|
#include "../response.h"
|
||||||
#include "../request.h"
|
#include "../request.h"
|
||||||
@ -9,6 +10,8 @@
|
|||||||
#include "../database/queryoption.h"
|
#include "../database/queryoption.h"
|
||||||
#include "../logger.h"
|
#include "../logger.h"
|
||||||
#include "../cache/icache.h"
|
#include "../cache/icache.h"
|
||||||
|
#include "../dynamic/dynamiccontent.h"
|
||||||
|
|
||||||
class Handler
|
class Handler
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
@ -53,6 +56,12 @@ class Handler
|
|||||||
virtual ~Handler()
|
virtual ~Handler()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class T> inline std::shared_ptr<T> createDynamic()
|
||||||
|
{
|
||||||
|
return std::make_shared<T>(*this->templ, *this->database, *this->urlProvider);
|
||||||
|
}
|
||||||
|
|
||||||
Response errorResponse(std::string errortitle, std::string errormessage, int status = 200);
|
Response errorResponse(std::string errortitle, std::string errormessage, int status = 200);
|
||||||
std::string createPageTitle(std::string append);
|
std::string createPageTitle(std::string append);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user