47 خطوط
1.7 KiB
C++
47 خطوط
1.7 KiB
C++
#include <chrono>
|
|
#include "dynamiccontentpostlist.h"
|
|
|
|
std::string DynamicContentPostList::render()
|
|
{
|
|
auto categoryDao = this->database->createCategoryDao();
|
|
auto pageDao = this->database->createPageDao();
|
|
auto revisionDao = this->database->createRevisionDao();
|
|
auto permissionDao = this->database->createPermissionsDao();
|
|
|
|
QueryOption option;
|
|
option.includeInvisible = false;
|
|
auto members = categoryDao->fetchMembers(this->argument, option);
|
|
std::vector<std::pair<std::string, time_t>> pageList;
|
|
for(const Page &member : members)
|
|
{
|
|
Permissions perms = permissionDao->find(member.name, this->userSession->user.login)
|
|
.value_or(this->userSession->user.permissions);
|
|
if(perms.canRead()) /* TODO: Maybe add canList() */
|
|
{
|
|
auto revision = revisionDao->getRevisionForPage(member.name, 1);
|
|
pageList.push_back({member.name, 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("title", pageDao->find(pair.first)->title);
|
|
|
|
stream << replacer.parse(postLink);
|
|
}
|
|
stream << postListEnd;
|
|
return stream.str();
|
|
}
|