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.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. }
  24. std::string wiki::root(std::string l)
  25. {
  26. if(l.empty()) l=locale_name;
  27. return script+"/"+l;
  28. }
  29. static const booster::regex lang_regex("^/(\\w+)(/.*)?$");
  30. void wiki::main(std::string url)
  31. {
  32. booster::smatch res;
  33. options.reset();
  34. users.reset();
  35. if(booster::regex_match(url,res,lang_regex)) {
  36. std::map<std::string,std::string>::const_iterator p = lang_map.find(std::string(res[1]));
  37. if(p==lang_map.end()) {
  38. page.redirect();
  39. }
  40. else {
  41. locale_name = p->first;
  42. context().locale(p->second);
  43. if(!dispatcher().dispatch(res[2]))
  44. page.redirect(locale_name);
  45. }
  46. }
  47. else
  48. page.redirect();
  49. }
  50. } // apps