diff options
| author | Adam <Adam@anope.org> | 2014-11-24 14:27:23 -0500 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2014-11-24 14:27:23 -0500 |
| commit | 42238034490fb5479d787bd1695750387d508200 (patch) | |
| tree | c93c62e0e1c936e656ae5b9ee1b62380ce2a194c /modules/webcpanel/pages/nickserv/alist.cpp | |
| parent | d492923610d9c9146b2a2b63de38deab2cfd4ca7 (diff) | |
Rewrite serializable to have field level granularity
Represent serializable objects in a digraph, and as a result made most
object relationships implicitly defined, and use the graph to trace
references between objects to determine relationships. Edges may
also be marked as having a dependency of the object they point to,
which allows for automatic cleanup and deletion of most objects when
no longer needed.
Additionally, this allows not having to require in-memory copies of
everything when using external databases. db_sql has been rewritten
for this and now always requires a database to function. db_sql with
MySQL now requires InnoDB to make use of transactions and foreign
key constraints.
Diffstat (limited to 'modules/webcpanel/pages/nickserv/alist.cpp')
| -rw-r--r-- | modules/webcpanel/pages/nickserv/alist.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/modules/webcpanel/pages/nickserv/alist.cpp b/modules/webcpanel/pages/nickserv/alist.cpp index 04d1d1cd4..105f1c117 100644 --- a/modules/webcpanel/pages/nickserv/alist.cpp +++ b/modules/webcpanel/pages/nickserv/alist.cpp @@ -9,7 +9,7 @@ static bool ChannelSort(ChanServ::Channel *ci1, ChanServ::Channel *ci2) { - return ci::less()(ci1->name, ci2->name); + return ci::less()(ci1->GetName(), ci2->GetName()); } WebCPanel::NickServ::Alist::Alist(const Anope::string &cat, const Anope::string &u) : WebPanelProtectedPage(cat, u) @@ -18,34 +18,31 @@ WebCPanel::NickServ::Alist::Alist(const Anope::string &cat, const Anope::string bool WebCPanel::NickServ::Alist::OnRequest(HTTPProvider *server, const Anope::string &page_name, HTTPClient *client, HTTPMessage &message, HTTPReply &reply, ::NickServ::Nick *na, TemplateFileServer::Replacements &replacements) { - std::deque<::ChanServ::Channel *> queue; - na->nc->GetChannelReferences(queue); - std::sort(queue.begin(), queue.end(), ChannelSort); + std::vector<::ChanServ::Channel *> chans = na->GetAccount()->GetRefs<::ChanServ::Channel *>(::ChanServ::channel); + std::sort(chans.begin(), chans.end(), ChannelSort); int chan_count = 0; - for (unsigned q = 0; q < queue.size(); ++q) + for (::ChanServ::Channel *ci : chans) { - ::ChanServ::Channel *ci = queue[q]; - - if (ci->GetFounder() == na->nc) + if (ci->GetFounder() == na->GetAccount()) { ++chan_count; replacements["NUMBERS"] = stringify(chan_count); - replacements["CHANNELS"] = (ci->HasExt("CS_NO_EXPIRE") ? "!" : "") + ci->name; + replacements["CHANNELS"] = (ci->HasFieldS("CS_NO_EXPIRE") ? "!" : "") + ci->GetName(); replacements["ACCESSES"] = "Founder"; continue; } - ::ChanServ::AccessGroup access = ci->AccessFor(na->nc); + ::ChanServ::AccessGroup access = ci->AccessFor(na->GetAccount()); if (access.empty()) continue; ++chan_count; replacements["NUMBERS"] = stringify(chan_count); - replacements["CHANNELS"] = (ci->HasExt("CS_NO_EXPIRE") ? "!" : "") + ci->name; + replacements["CHANNELS"] = (ci->HasFieldS("CS_NO_EXPIRE") ? "!" : "") + ci->GetName(); Anope::string access_str; for (unsigned i = 0; i < access.size(); ++i) access_str += ", " + access[i]->AccessSerialize(); |
