// file : brep/repository-details.cxx -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #include #include #include // make_shared() #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace odb::core; namespace brep { using namespace cli; void repository_details:: init (scanner& s) { MODULE_DIAG; options_ = make_shared ( s, unknown_mode::fail, unknown_mode::fail); db_ = shared_database (options_->db_host (), options_->db_port ()); } void repository_details:: handle (request&, response& rs) { using namespace web::xhtml; MODULE_DIAG; // The module options object is not changed after being created once per // server process. // static const dir_path& rt (options_->root ()); xml::serializer s (rs.content (), "About"); const string& title (s.output_name ()); static const path sp ("repository-details.css"); s << HTML << HEAD << TITLE << title << ~TITLE << CSS_LINKS (sp, rt) << ~HEAD << BODY << DIV_HEADER (rt) << DIV(ID="content"); transaction t (db_->begin ()); using query = query; auto rp (db_->query (query::internal + "ORDER BY name")); for (const auto& r: rp) { string id (id_attribute (r.name)); s << H1(ID=id) << A(HREF="#" + web::mime_url_encode (id)) << r.name << ~A << ~H1; if (r.email) s << A << HREF << "mailto:" << *r.email << ~HREF << *r.email << ~A; if (r.summary) s << H2 << *r.summary << ~H2; if (r.description) s << P_DESCRIPTION (*r.description, false); } t.commit (); s << ~DIV << ~BODY << ~HTML; } }