Using visit to enumerate users
This commit is contained in:
@@ -71,66 +71,66 @@ namespace lms::ui
|
|||||||
|
|
||||||
auto transaction{ LmsApp->getDbSession().createReadTransaction() };
|
auto transaction{ LmsApp->getDbSession().createReadTransaction() };
|
||||||
|
|
||||||
const User::IdType currentUserId{ LmsApp->getUser() };
|
const UserId currentUserId{ LmsApp->getUserId() };
|
||||||
for (const UserId userId : User::find(LmsApp->getDbSession(), User::FindParameters{}).results)
|
User::find(LmsApp->getDbSession(), User::FindParameters{}, [&](const User::pointer& user)
|
||||||
{
|
|
||||||
const User::pointer user{ User::find(LmsApp->getDbSession(), userId) };
|
|
||||||
|
|
||||||
Wt::WTemplate* entry{ _container->addNew<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.Users.template.entry")) };
|
|
||||||
|
|
||||||
entry->bindString("name", user->getLoginName(), Wt::TextFormat::Plain);
|
|
||||||
|
|
||||||
// Create tag
|
|
||||||
if (user->isAdmin() || user->isDemo())
|
|
||||||
{
|
{
|
||||||
entry->setCondition("if-tag", true);
|
const UserId userId{ user->getId() };
|
||||||
entry->bindString("tag", Wt::WString::tr(user->isAdmin() ? "Lms.Admin.Users.admin" : "Lms.Admin.Users.demo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't edit ourself this way
|
Wt::WTemplate* entry{ _container->addNew<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.Users.template.entry")) };
|
||||||
if (user->getId() == currentUserId)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
entry->setCondition("if-edit", true);
|
entry->bindString("name", user->getLoginName(), Wt::TextFormat::Plain);
|
||||||
Wt::WPushButton* editBtn = entry->bindNew<Wt::WPushButton>("edit-btn", Wt::WString::tr("Lms.template.edit-btn"), Wt::TextFormat::XHTML);
|
|
||||||
editBtn->setToolTip(Wt::WString::tr("Lms.edit"));
|
// Create tag
|
||||||
editBtn->clicked().connect([=]()
|
if (user->isAdmin() || user->isDemo())
|
||||||
{
|
{
|
||||||
LmsApp->setInternalPath("/admin/user/" + userId.toString(), true);
|
entry->setCondition("if-tag", true);
|
||||||
});
|
entry->bindString("tag", Wt::WString::tr(user->isAdmin() ? "Lms.Admin.Users.admin" : "Lms.Admin.Users.demo"));
|
||||||
|
}
|
||||||
|
|
||||||
Wt::WPushButton* delBtn = entry->bindNew<Wt::WPushButton>("del-btn", Wt::WString::tr("Lms.template.trash-btn"), Wt::TextFormat::XHTML);
|
// Don't edit ourself this way
|
||||||
delBtn->setToolTip(Wt::WString::tr("Lms.delete"));
|
if (user->getId() == currentUserId)
|
||||||
delBtn->clicked().connect([this, userId, entry]
|
return;
|
||||||
{
|
|
||||||
auto modal{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.Users.template.delete-user")) };
|
|
||||||
modal->addFunction("tr", &Wt::WTemplate::Functions::tr);
|
|
||||||
Wt::WWidget* modalPtr{ modal.get() };
|
|
||||||
|
|
||||||
auto* delBtn{ modal->bindNew<Wt::WPushButton>("del-btn", Wt::WString::tr("Lms.delete")) };
|
entry->setCondition("if-edit", true);
|
||||||
delBtn->clicked().connect([=, this]
|
Wt::WPushButton* editBtn = entry->bindNew<Wt::WPushButton>("edit-btn", Wt::WString::tr("Lms.template.edit-btn"), Wt::TextFormat::XHTML);
|
||||||
{
|
editBtn->setToolTip(Wt::WString::tr("Lms.edit"));
|
||||||
|
editBtn->clicked().connect([userId]()
|
||||||
|
{
|
||||||
|
LmsApp->setInternalPath("/admin/user/" + userId.toString(), true);
|
||||||
|
});
|
||||||
|
|
||||||
|
Wt::WPushButton* delBtn = entry->bindNew<Wt::WPushButton>("del-btn", Wt::WString::tr("Lms.template.trash-btn"), Wt::TextFormat::XHTML);
|
||||||
|
delBtn->setToolTip(Wt::WString::tr("Lms.delete"));
|
||||||
|
delBtn->clicked().connect([this, userId, entry]
|
||||||
|
{
|
||||||
|
auto modal{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.Users.template.delete-user")) };
|
||||||
|
modal->addFunction("tr", &Wt::WTemplate::Functions::tr);
|
||||||
|
Wt::WWidget* modalPtr{ modal.get() };
|
||||||
|
|
||||||
|
auto* delBtn{ modal->bindNew<Wt::WPushButton>("del-btn", Wt::WString::tr("Lms.delete")) };
|
||||||
|
delBtn->clicked().connect([=, this]
|
||||||
{
|
{
|
||||||
auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
|
{
|
||||||
|
auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
|
||||||
|
|
||||||
User::pointer user{ User::find(LmsApp->getDbSession(), userId) };
|
User::pointer user{ User::find(LmsApp->getDbSession(), userId) };
|
||||||
if (user)
|
if (user)
|
||||||
user.remove();
|
user.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
_container->removeWidget(entry);
|
_container->removeWidget(entry);
|
||||||
|
|
||||||
LmsApp->getModalManager().dispose(modalPtr);
|
LmsApp->getModalManager().dispose(modalPtr);
|
||||||
});
|
});
|
||||||
|
|
||||||
auto* cancelBtn{ modal->bindNew<Wt::WPushButton>("cancel-btn", Wt::WString::tr("Lms.cancel")) };
|
auto* cancelBtn{ modal->bindNew<Wt::WPushButton>("cancel-btn", Wt::WString::tr("Lms.cancel")) };
|
||||||
cancelBtn->clicked().connect([=]
|
cancelBtn->clicked().connect([=]
|
||||||
{
|
{
|
||||||
LmsApp->getModalManager().dispose(modalPtr);
|
LmsApp->getModalManager().dispose(modalPtr);
|
||||||
});
|
});
|
||||||
|
|
||||||
LmsApp->getModalManager().show(std::move(modal));
|
LmsApp->getModalManager().show(std::move(modal));
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
} // namespace lms::ui
|
} // namespace lms::ui
|
||||||
|
|||||||
Reference in New Issue
Block a user