Fork de wikipp, le moteur de wiki en c++, basé sur cppcms. Le fork ajoute la langue française
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

wiki.cpp 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "wiki.h"
  2. #include <booster/regex.h>
  3. #include <cppcms/url_dispatcher.h>
  4. #include <cppcms/http_context.h>
  5. namespace apps {
  6. wiki::wiki(cppcms::service &srv) :
  7. cppcms::application(srv),
  8. conn(settings().get<std::string>("wikipp.connection_string")),
  9. page(*this),
  10. options(*this),
  11. users(*this),
  12. index(*this)
  13. {
  14. add(page);
  15. add(options);
  16. add(users);
  17. add(index);
  18. script=settings().get<std::string>("wikipp.script");
  19. cppcms::json::object langs = settings().at("wikipp.languages").object();
  20. for(cppcms::json::object::const_iterator p=langs.begin();p!=langs.end();++p) {
  21. lang_map[p->first]=p->second.str();
  22. }
  23. this->language_default = settings().at("wikipp.language_default").str();
  24. }
  25. std::string wiki::root(std::string l)
  26. {
  27. if(l.empty()) l=locale_name;
  28. return script+"/"+l;
  29. }
  30. static const booster::regex lang_regex("^/(\\w+)(/.*)?$");
  31. void wiki::main(std::string url)
  32. {
  33. booster::smatch res;
  34. options.reset();
  35. users.reset();
  36. if(booster::regex_match(url,res,lang_regex)) {
  37. std::map<std::string,std::string>::const_iterator p = lang_map.find(std::string(res[1]));
  38. if(p==lang_map.end()) {
  39. locale_name = this->language_default ;
  40. page.redirect( this->language_default );
  41. }
  42. else {
  43. locale_name = p->first;
  44. context().locale(p->second);
  45. if(!dispatcher().dispatch(res[2]))
  46. page.redirect(locale_name);
  47. }
  48. }
  49. else
  50. page.redirect( this->language_default );
  51. }
  52. } // apps