post.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*
  2. post Controller (esp-html-skeleton)
  3. */
  4. #include "esp.h"
  5. /*
  6. Create a new resource in the database
  7. */
  8. static void createPost() {
  9. if (updateRec(createRec("post", params("fields")))) {
  10. feedback("info", "New post Created");
  11. renderView("post/list");
  12. } else {
  13. feedback("error", "Cannot Create Post");
  14. renderView("post/edit");
  15. }
  16. }
  17. /*
  18. Prepare an edit template with the resource
  19. */
  20. static void editPost() {
  21. readRec("post", param("id"));
  22. }
  23. /*
  24. Get a resource
  25. */
  26. static void getPost() {
  27. readRec("post", param("id"));
  28. renderView("post/edit");
  29. }
  30. /*
  31. Initialize a new resource for the client to complete
  32. */
  33. static void initPost() {
  34. createRec("post", 0);
  35. renderView("post/edit");
  36. }
  37. /*
  38. List the resources in this group
  39. */
  40. static void listPost() {
  41. renderView("post/list");
  42. }
  43. /*
  44. Remove a resource identified by the "id" parameter
  45. */
  46. static void removePost() {
  47. if (removeRec("post", param("id"))) {
  48. feedback("info", "Post Removed");
  49. }
  50. redirect(".");
  51. }
  52. /*
  53. Update an existing resource in the database
  54. If "id" is not defined, this is the same as a create
  55. Also we tunnel delete here if the user clicked delete
  56. */
  57. static void updatePost() {
  58. if (smatch(param("submit"), "Delete")) {
  59. removePost();
  60. } else {
  61. if (updateFields("post", params("fields"))) {
  62. feedback("info", "Post Updated Successfully");
  63. redirect(".");
  64. } else {
  65. feedback("error", "Cannot Update Post");
  66. renderView("post/edit");
  67. }
  68. }
  69. }
  70. /*
  71. Redirect to get a properly terminated URL. Essential for relative URL references.
  72. */
  73. static void redirectPost() {
  74. redirect(sjoin(getUri(), "/", NULL));
  75. }
  76. static void commonPost(HttpStream *stream) {
  77. }
  78. /*
  79. Dynamic module initialization
  80. */
  81. ESP_EXPORT int esp_controller_demo_post(HttpRoute *route, MprModule *module) {
  82. espDefineBase(route, commonPost);
  83. espDefineAction(route, "post/create", createPost);
  84. espDefineAction(route, "post/remove", removePost);
  85. espDefineAction(route, "post/edit", editPost);
  86. espDefineAction(route, "post/get", getPost);
  87. espDefineAction(route, "post/init", initPost);
  88. espDefineAction(route, "post/list", listPost);
  89. espDefineAction(route, "post/update", updatePost);
  90. espDefineAction(route, "post/", listPost);
  91. espDefineAction(route, "post", redirectPost);
  92. #if SAMPLE_VALIDATIONS
  93. Edi *edi = espGetRouteDatabase(route);
  94. ediAddValidation(edi, "present", "post", "title", 0);
  95. ediAddValidation(edi, "unique", "post", "title", 0);
  96. ediAddValidation(edi, "banned", "post", "body", "(swear|curse)");
  97. ediAddValidation(edi, "format", "post", "phone", "/^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/");
  98. #endif
  99. return 0;
  100. }