/plugins/breezyarchives/trunk/breezyarchiveshandler.php

https://github.com/somefool/habari-extras · PHP · 132 lines · 89 code · 14 blank · 29 comment · 4 complexity · 1d25eb08e30ed95aeffd0be3ebb148a9 MD5 · raw file

  1. <?php
  2. class BreezyArchivesHandler extends ActionHandler
  3. {
  4. public $theme = null;
  5. /**
  6. * Constructor for the default theme handler. Here, we
  7. * automatically load the active theme for the installation,
  8. * and create a new Theme instance.
  9. */
  10. public function __construct()
  11. {
  12. $this->theme = Themes::create();
  13. }
  14. /**
  15. * Helper function which automatically assigns all handler_vars
  16. * into the theme and displays a theme template
  17. *
  18. * @param template_name Name of template to display (note: not the filename)
  19. */
  20. protected function display($template_name)
  21. {
  22. /*
  23. * Assign internal variables into the theme (and therefore into the theme's template
  24. * engine. See Theme::assign().
  25. */
  26. foreach ($this->handler_vars as $key => $value) {
  27. $this->theme->assign($key, $value);
  28. }
  29. try {
  30. $this->theme->display($template_name);
  31. }
  32. catch(Error $e) {
  33. EventLog::log($e->humane_error(), 'error', 'plugin', $this->handler_vars['class_name'], print_r($e, 1));
  34. }
  35. }
  36. private function get_params($user_filters = array())
  37. {
  38. $default_filters = array(
  39. 'content_type' => Post::type('entry'),
  40. 'status' => Post::status('published'),
  41. 'limit' => Options::get($this->handler_vars['class_name'] . '__posts_per_page'),
  42. 'page' => 1,
  43. 'orderby' => Options::get($this->handler_vars['class_name'] . '__show_newest_first') ? 'pubdate DESC' : 'pubdate ASC'
  44. );
  45. $paramarray = new SuperGlobal($default_filters);
  46. $paramarray = $paramarray->merge($user_filters, $this->handler_vars);
  47. unset($paramarray['entire_match']);
  48. unset($paramarray['class_name']);
  49. return $paramarray;
  50. }
  51. /**
  52. * Helper function: Display the posts for a specific date
  53. * @param array $user_filters Additional arguments used to get the page content
  54. */
  55. public function act_display_breezyarchives_by_month($user_filters = array())
  56. {
  57. $paramarray = $this->get_params($user_filters);
  58. $cache_name = array($this->handler_vars['class_name'], 'month_' . $paramarray['year'] . $paramarray['month'] . '_page_' . $paramarray['page']);
  59. if (Cache::has($cache_name)) {
  60. echo Cache::get($cache_name);
  61. } else {
  62. $posts = Posts::get($paramarray);
  63. $this->theme->assign('posts', $posts);
  64. $this->theme->assign('page_total', Utils::archive_pages($posts->count_all(), $paramarray['limit']));
  65. $this->theme->assign('current_page', $paramarray['page']);
  66. $this->theme->assign('prev_page_text', Options::get($this->handler_vars['class_name'] . '__prev_page_text'));
  67. $this->theme->assign('prev_page_link', URL::get('display_breezyarchives_by_month', array('class_name' => $this->handler_vars['class_name'], 'year' => $paramarray['year'], 'month' => $paramarray['month'], 'page' => $paramarray['page'] - 1)));
  68. $this->theme->assign('next_page_text', Options::get($this->handler_vars['class_name'] . '__next_page_text'));
  69. $this->theme->assign('next_page_link', URL::get('display_breezyarchives_by_month', array('class_name' => $this->handler_vars['class_name'], 'year' => $paramarray['year'], 'month' => $paramarray['month'], 'page' => $paramarray['page'] + 1)));
  70. $this->theme->assign('show_comment_count', Options::get($this->handler_vars['class_name'] . '__posts_per_page'));
  71. $this->theme->assign('year', $paramarray['year']);
  72. $this->theme->assign('month', $paramarray['month']);
  73. $ret = $this->theme->fetch('breezyarchives_month');
  74. Cache::set($cache_name, $ret);
  75. echo $ret;
  76. }
  77. }
  78. /**
  79. * Helper function: Display the posts for a specific tag
  80. * @param array $user_filters Additional arguments used to get the page content
  81. */
  82. public function act_display_breezyarchives_by_tag($user_filters = array())
  83. {
  84. $paramarray = $this->get_params($user_filters);
  85. $cache_name = array($this->handler_vars['class_name'], 'tag_' . $this->handler_vars['tag_slug'] . '_page_' . $paramarray['page']);
  86. if (Cache::has($cache_name)) {
  87. echo Cache::get($cache_name);
  88. } else {
  89. $posts = Posts::get($paramarray);
  90. $this->theme->assign('posts', $posts);
  91. $this->theme->assign('page_total', Utils::archive_pages($posts->count_all(), $paramarray['limit']));
  92. $this->theme->assign('current_page', $paramarray['page']);
  93. $this->theme->assign('prev_page_text', Options::get($this->handler_vars['class_name'] . '__prev_page_text'));
  94. $this->theme->assign('prev_page_link', URL::get('display_breezyarchives_by_tag', array('class_name' => $this->handler_vars['class_name'], 'tag_slug' => $this->handler_vars['tag_slug'], 'page' => $paramarray['page'] - 1)));
  95. $this->theme->assign('next_page_text', Options::get($this->handler_vars['class_name'] . '__next_page_text'));
  96. $this->theme->assign('next_page_link', URL::get('display_breezyarchives_by_tag', array('class_name' => $this->handler_vars['class_name'], 'tag_slug' => $this->handler_vars['tag_slug'], 'page' => $paramarray['page'] + 1)));
  97. $this->theme->assign('show_comment_count', Options::get($this->handler_vars['class_name'] . '__posts_per_page'));
  98. $ret = $this->theme->fetch('breezyarchives_tag');
  99. Cache::set($cache_name, $ret);
  100. echo $ret;
  101. }
  102. }
  103. /**
  104. * Helper function: Display the JavaScript for Breezy Archives
  105. */
  106. public function act_display_breezyarchives_js()
  107. {
  108. ob_clean();
  109. header('Content-type: text/javascript');
  110. // header('ETag: ' . md5($out));
  111. // header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 315360000) . ' GMT');
  112. // header('Cache-Control: max-age=315360000');
  113. $this->theme->assign('habari_url', Site::get_url('habari', TRUE));
  114. $this->theme->assign('class_name', $this->handler_vars['class_name']);
  115. $this->display('breezyarchives_js');
  116. }
  117. }
  118. ?>