/application/Controllers/BlogController.php

https://github.com/xmeltrut/SocietasPro · PHP · 129 lines · 69 code · 28 blank · 32 comment · 9 complexity · 54ae214affa4de06e3b7f3956b7750e5 MD5 · raw file

  1. <?php
  2. /**
  3. * Blog administration.
  4. *
  5. * @author Chris Worfolk <chris@societaspro.org>
  6. * @package SocietasPro
  7. * @subpackage Admin
  8. */
  9. namespace Controllers;
  10. use Model\BlogPostsModel;
  11. use Framework\Core\Controller;
  12. use Framework\Utilities\Pagination;
  13. use Framework\Utilities\ArrayUtilities;
  14. use Framework\Http\FrontController;
  15. use Framework\Forms\FormBuilder;
  16. class BlogController extends Controller {
  17. private $model;
  18. function __construct () {
  19. parent::__construct();
  20. // create a model
  21. $this->model = new BlogPostsModel();
  22. }
  23. /**
  24. * Create a new blog post
  25. */
  26. public function create ($request) {
  27. // check actions
  28. if ($request->set("action") == "create") {
  29. $this->model->write($_REQUEST);
  30. $this->engine->setMessage($this->model->getMessage());
  31. }
  32. // output page
  33. $this->engine->assign("form", $this->standardForm("create"));
  34. $this->engine->display("blog/create.tpl");
  35. }
  36. /**
  37. * Edit an event
  38. */
  39. public function edit ($request) {
  40. // check for actions
  41. if ($request->set("action") == "edit") {
  42. $this->model->write($_REQUEST, FrontController::getParam(0));
  43. $this->engine->setMessage($this->model->getMessage());
  44. }
  45. // get the object
  46. $post = $this->model->getById(FrontController::getParam(0));
  47. if ($post === false) { throw new \HttpErrorException(404); }
  48. // output page
  49. $this->engine->assign("form", $this->standardForm("edit", $post->getAllData()));
  50. $this->engine->display("blog/edit.tpl");
  51. }
  52. /**
  53. * Default page
  54. */
  55. public function index ($request) {
  56. // check for actions
  57. if ($request->set("action") == "mass") {
  58. if ($info = $this->determineMassAction()) {
  59. switch ($info["action"]) {
  60. case "delete":
  61. $this->model->deleteById($info["ids"], 18);
  62. break;
  63. }
  64. }
  65. $this->engine->setMessage($this->model->getMessage());
  66. }
  67. // gather page variables
  68. $pageNum = Pagination::pageNum(FrontController::getParam(0));
  69. $totalPages = Pagination::totalPages($this->model->count());
  70. $posts = $this->model->get($pageNum);
  71. // output page
  72. $this->engine->assign("posts", $posts);
  73. $this->engine->assign("pageNum", $pageNum);
  74. $this->engine->assign("totalPages", $totalPages);
  75. $this->engine->display("blog/index.tpl");
  76. }
  77. /**
  78. * Create a standard form for editing posts
  79. *
  80. * @param string $action Form variable
  81. * @param array $data Default values
  82. */
  83. private function standardForm ($action, $data = array()) {
  84. // status values
  85. $statusValues = array (
  86. "Published" => LANG_PUBLISHED,
  87. "Draft" => LANG_DRAFT
  88. );
  89. $form = new FormBuilder();
  90. $form->addInput("name", LANG_NAME, ArrayUtilities::set($data, "postName"));
  91. $form->addInput("slug", LANG_URL, ArrayUtilities::set($data, "postSlug"));
  92. $form->addSelect("status", LANG_STATUS, $statusValues, ArrayUtilities::set($data, "postStatus"));
  93. $form->addDateTime("date", LANG_DATE, ArrayUtilities::set($data, "postDate"));
  94. $form->addVisualEditor("content", ArrayUtilities::set($data, "postContent"));
  95. $form->addHidden("id", ArrayUtilities::set($data, "postID"));
  96. $form->addHidden("action", $action);
  97. $form->addSubmit();
  98. $form->setDefaultElement("name");
  99. return $form->build();
  100. }
  101. }