PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/core/Forms/bootstrap.php

https://github.com/scogle/cockpit
PHP | 130 lines | 83 code | 42 blank | 5 comment | 17 complexity | b3b16ac2541d34d460512d3ff449959f MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. // API
  3. $app->bind("/api/forms/submit/:form", function($params) use($app){
  4. $form = $params["form"];
  5. // Security check
  6. if($formhash = $app->param("__csrf", false)) {
  7. if($formhash != $app->hash($form)) {
  8. return false;
  9. }
  10. } else {
  11. return false;
  12. }
  13. $frm = $app->db->findOne("common/forms", ["name"=>$form]);
  14. if(!$frm) {
  15. return false;
  16. }
  17. if($formdata = $app->param("form", false)) {
  18. if(isset($frm["email"]) && filter_var($frm["email"], FILTER_VALIDATE_EMAIL)) {
  19. $body = array();
  20. foreach ($formdata as $key => $value) {
  21. $body[] = "<b>{$key}:</b>\n<br>";
  22. $body[] = (is_string($value) ? $value:json_encode($value))."\n<br>";
  23. }
  24. $app->mailer->mail($frm["email"], $app->param("__mailsubject", "New form data for: ".$form), implode("\n<br>", $body));
  25. }
  26. if(isset($frm["entry"]) && $frm["entry"]) {
  27. $collection = "form".$frm["_id"];
  28. $entry = ["data" => $formdata, "created"=>time()];
  29. $app->db->insert("forms/{$collection}", $entry);
  30. }
  31. return json_encode($formdata);
  32. } else {
  33. return "false";
  34. }
  35. });
  36. $this->module("forms")->extend([
  37. "form" => function($name, $options = []) use($app) {
  38. $options = array_merge(array(
  39. "id" => uniqid("form"),
  40. "class" => "",
  41. "csrf" => $app->hash($name)
  42. ), $options);
  43. $app->renderView("forms:views/api/form.php", compact('name', 'options'));
  44. },
  45. "collectionById" => function($formId) use($app) {
  46. $entrydb = "form{$formId}";
  47. return $app->db->getCollection("forms/{$entrydb}");
  48. }
  49. ]);
  50. if (!function_exists('form')) {
  51. function form($name, $options = []) {
  52. cockpit("forms")->form($name, $options);
  53. }
  54. }
  55. // ADMIN
  56. if(COCKPIT_ADMIN && !COCKPIT_REST) {
  57. $app->on("admin.init", function() use($app){
  58. if(!$app->module("auth")->hasaccess("Forms", ['manage.forms', 'manage.entries'])) return;
  59. $app->bindClass("Forms\\Controller\\Forms", "forms");
  60. $app->bindClass("Forms\\Controller\\Api", "api/forms");
  61. $app("admin")->menu("top", [
  62. "url" => $app->routeUrl("/forms"),
  63. "label" => '<i class="uk-icon-inbox"></i>',
  64. "title" => $app("i18n")->get("Forms"),
  65. "active" => (strpos($app["route"], '/forms') === 0)
  66. ], 5);
  67. // handle global search request
  68. $app->on("cockpit.globalsearch", function($search, $list) use($app){
  69. foreach ($app->db->find("common/forms") as $f) {
  70. if(stripos($f["name"], $search)!==false){
  71. $list[] = [
  72. "title" => '<i class="uk-icon-inbox"></i> '.$f["name"],
  73. "url" => $app->routeUrl('/forms/form/'.$f["_id"])
  74. ];
  75. }
  76. }
  77. });
  78. });
  79. $app->on("admin.dashboard.aside", function() use($app){
  80. if(!$app->module("auth")->hasaccess("Forms", ['manage.forms', 'manage.entries'])) return;
  81. $title = $app("i18n")->get("Forms");
  82. $badge = $app->db->getCollection("common/forms")->count();
  83. $forms = $app->db->find("common/forms", ["limit"=> 3, "sort"=>["created"=>-1] ])->toArray();
  84. $app->renderView("forms:views/dashboard.php with cockpit:views/layouts/dashboard.widget.php", compact('title', 'badge', 'forms'));
  85. });
  86. // acl
  87. $app("acl")->addResource("Forms", ['manage.forms', 'manage.entries']);
  88. }