diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index d4cf6d75..17980699 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -628,6 +628,14 @@ public: Tmpl["User"] = pUser->GetUserName(); Tmpl["Network"] = pNetwork->GetName(); + CTemplate& breadUser = Tmpl.AddRow("BreadCrumbs"); + breadUser["Text"] = "Edit User [" + pUser->GetUserName() + "]"; + breadUser["URL"] = GetWebPath() + "edituser?user=" + pUser->GetUserName(); + CTemplate& breadNet = Tmpl.AddRow("BreadCrumbs"); + breadNet["Text"] = "Edit Network [" + pNetwork->GetName() + "]"; + breadNet["URL"] = GetWebPath() + "editnetwork?user=" + pUser->GetUserName() + "&network=" + pNetwork->GetName(); + CTemplate& breadChan = Tmpl.AddRow("BreadCrumbs"); + if (pChan) { Tmpl["Action"] = "editchan"; Tmpl["Edit"] = "true"; @@ -636,6 +644,7 @@ public: Tmpl["BufferCount"] = CString(pChan->GetBufferCount()); Tmpl["DefModes"] = pChan->GetDefaultModes(); Tmpl["Key"] = pChan->GetKey(); + breadChan["Text"] = "Edit Channel [" + pChan->GetName() + "]"; if (pChan->InConfig()) { Tmpl["InConfig"] = "true"; @@ -646,6 +655,7 @@ public: Tmpl["BufferCount"] = CString(pUser->GetBufferCount()); Tmpl["DefModes"] = CString(pUser->GetDefaultChanModes()); Tmpl["InConfig"] = "true"; + breadChan["Text"] = "Add Channel"; } // o1 used to be AutoCycle which was removed @@ -822,6 +832,11 @@ public: } } + CTemplate& breadUser = Tmpl.AddRow("BreadCrumbs"); + breadUser["Text"] = "Edit User [" + pUser->GetUserName() + "]"; + breadUser["URL"] = GetWebPath() + "edituser?user=" + pUser->GetUserName(); + CTemplate& breadNet = Tmpl.AddRow("BreadCrumbs"); + if (pNetwork) { Tmpl["Action"] = "editnetwork"; Tmpl["Edit"] = "true"; @@ -843,6 +858,8 @@ public: Tmpl["IRCConnectEnabled"] = CString(pNetwork->GetIRCConnectEnabled()); + breadNet["Text"] = "Edit Network [" + pNetwork->GetName() + "]"; + const vector& vServers = pNetwork->GetServers(); for (unsigned int a = 0; a < vServers.size(); a++) { CTemplate& l = Tmpl.AddRow("ServerLoop"); @@ -888,6 +905,7 @@ public: Tmpl["FloodRate"] = "1.0"; Tmpl["FloodBurst"] = "4"; Tmpl["JoinDelay"] = "0"; + breadNet["Text"] = "Add Network"; } FOR_EACH_MODULE(i, make_pair(pUser, pNetwork)) { diff --git a/src/WebModules.cpp b/src/WebModules.cpp index 1c1c5e93..f4bd46ba 100644 --- a/src/WebModules.cpp +++ b/src/WebModules.cpp @@ -483,12 +483,19 @@ CWebSock::EPageReqResult CWebSock::PrintTemplate(const CString& sPageName, CStri if (pModule) { CUser* pUser = pModule->GetUser(); - m_Template["ModUser"] = pUser ? pUser->GetUserName() : ""; m_Template["ModName"] = pModule->GetModName(); if (m_Template.find("Title") == m_Template.end()) { m_Template["Title"] = pModule->GetWebMenuTitle(); } + + std::vector* breadcrumbs = m_Template.GetLoop("BreadCrumbs"); + if (breadcrumbs->size() == 1 && m_Template["Title"] != pModule->GetModName()) { + // Module didn't add its own breadcrumbs, so add a generic one... + // But it'll be useless if it's the same as module name + CTemplate& bread = m_Template.AddRow("BreadCrumbs"); + bread["Text"] = m_Template["Title"]; + } } if (!m_bPathsSet) { @@ -777,6 +784,10 @@ CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CS } else { SetPaths(pModule, true); + CTemplate& breadModule = m_Template.AddRow("BreadCrumbs"); + breadModule["Text"] = pModule->GetModName(); + breadModule["URL"] = pModule->GetWebPath(); + /* if a module returns false from OnWebRequest, it does not want the template to be printed, usually because it did a redirect. */ if (pModule->OnWebRequest(*this, m_sPage, m_Template)) { diff --git a/webskins/_default_/tmpl/BreadCrumbs.tmpl b/webskins/_default_/tmpl/BreadCrumbs.tmpl index 7ed1b50c..0c7a0429 100644 --- a/webskins/_default_/tmpl/BreadCrumbs.tmpl +++ b/webskins/_default_/tmpl/BreadCrumbs.tmpl @@ -1,5 +1,11 @@ -