Fork de wikipp, le moteur de wiki en c++, basé sur cppcms. Le fork ajoute la langue française
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

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