PageRenderTime 52ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/htdocs/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger_manager.php

https://github.com/Fishgate/privatecollectionswp
PHP | 284 lines | 225 code | 42 blank | 17 comment | 29 complexity | 51955cb6348e57313d00e855aac06c4c MD5 | raw file
  1. <?php
  2. /**
  3. * The Trigger Manager displays "trigger buttons" for a displayed gallery.
  4. *
  5. * Each display type can register a "handler", which is a class with a render method, which is used
  6. * to render the display of the trigger buttons.
  7. *
  8. * Each trigger button is registered with a handler, which is also a class with a render() method.
  9. * Class C_Displayed_Gallery_Trigger_Manager
  10. */
  11. class C_Displayed_Gallery_Trigger_Manager
  12. {
  13. static $_instance = NULL;
  14. private $_triggers = array();
  15. private $_trigger_order = array();
  16. private $_display_type_handlers = array();
  17. private $_default_display_type_handler = NULL;
  18. private $css_class = 'ngg-trigger-buttons';
  19. private $_default_image_types = array(
  20. 'photocrati-nextgen_basic_thumbnails',
  21. 'photocrati-nextgen_basic_singlepic',
  22. 'photocrati-nextgen_pro_thumbnail_grid',
  23. 'photocrati-nextgen_pro_blog_gallery',
  24. 'photocrati-nextgen_pro_film'
  25. );
  26. /**
  27. * @return C_Displayed_Gallery_Trigger_Manager
  28. */
  29. static function get_instance()
  30. {
  31. if (!self::$_instance) {
  32. $klass = get_class();
  33. self::$_instance = new $klass;
  34. }
  35. return self::$_instance;
  36. }
  37. function __construct()
  38. {
  39. $this->_default_display_type_handler = 'C_Displayed_Gallery_Trigger_Handler';
  40. foreach ($this->_default_image_types as $display_type) {
  41. $this->register_display_type_handler($display_type, 'C_Displayed_Gallery_Image_Trigger_Handler');
  42. }
  43. }
  44. function register_display_type_handler($display_type, $klass)
  45. {
  46. $this->_display_type_handlers[$display_type] = $klass;
  47. }
  48. function deregister_display_type_handler($display_type)
  49. {
  50. unset($this->_display_type_handlers[$display_type]);
  51. }
  52. function add($name, $handler)
  53. {
  54. $this->_triggers[$name] = $handler;
  55. $this->_trigger_order[] = $name;
  56. return $this;
  57. }
  58. function remove($name)
  59. {
  60. $order = array();
  61. unset($this->_triggers[$name]);
  62. foreach ($this->_trigger_order as $trigger) {
  63. if ($trigger != $name) $order[] = $trigger;
  64. }
  65. $this->_trigger_order = $order;
  66. return $this;
  67. }
  68. function _rebuild_index()
  69. {
  70. $order = array();
  71. foreach ($this->_trigger_order as $name) {
  72. $order[] = $name;
  73. }
  74. $this->_trigger_order = $order;
  75. return $this;
  76. }
  77. function increment_position($name)
  78. {
  79. if (($current_index = array_search($name, $this->_trigger_order)) !== FALSE) {
  80. $next_index = $current_index += 1;
  81. // 1,2,3,4,5 => 1,2,4,3,5
  82. if (isset($this->_trigger_order[$next_index])) {
  83. $next = $this->_trigger_order[$next_index];
  84. $this->_trigger_order[$next_index] = $name;
  85. $this->_trigger_order[$current_index] = $next;
  86. }
  87. }
  88. return $this->position_of($name);
  89. }
  90. function decrement_position($name)
  91. {
  92. if (($current_index = array_search($name, $this->_trigger_order)) !== FALSE) {
  93. $previous_index = $current_index -= 1;
  94. if (isset($this->_trigger_order[$previous_index])) {
  95. $previous = $this->_trigger_order[$previous_index];
  96. $this->_trigger_order[$previous_index] = $name;
  97. $this->_trigger_order[$current_index] = $previous;
  98. }
  99. }
  100. return $this->position_of($name);
  101. }
  102. function position_of($name)
  103. {
  104. return array_search($name, $this->_trigger_order);
  105. }
  106. function move_to_position($name, $position_index)
  107. {
  108. if (($current_index = $this->position_of($name)) !== FALSE) {
  109. $func = 'increment_position';
  110. if ($current_index < $position_index) $func = 'decrement_position';
  111. while ($this->position_of($name) != $position_index) {
  112. $this->$func($name);
  113. }
  114. }
  115. return $this->position_of($name);
  116. }
  117. function move_to_start($name)
  118. {
  119. if (($index = $this->position_of($name))) {
  120. unset($this->_trigger_order[$index]);
  121. array_unshift($this->_trigger_order, $name);
  122. $this->_rebuild_index();
  123. }
  124. return $this->position_of($name);
  125. }
  126. function count()
  127. {
  128. return count($this->_trigger_order);
  129. }
  130. function move_to_end($name)
  131. {
  132. $index = $this->position_of($name);
  133. if ($index !== FALSE OR $index != $this->count()-1) {
  134. unset($this->_trigger_order[$index]);
  135. $this->_trigger_order[] = $name;
  136. $this->_rebuild_index();
  137. }
  138. return $this->position_of($name);
  139. }
  140. function get_handler_for_displayed_gallery($displayed_gallery)
  141. {
  142. // Find the trigger handler for the current display type.
  143. // First, check the display settings for the displayed gallery. Some third-party
  144. // display types might specify their own handler
  145. $klass = NULL;
  146. if (isset($displayed_gallery->display_settings['trigger_handler'])) {
  147. $klass = $displayed_gallery->display_settings['trigger_handler'];
  148. }
  149. // Check if a handler has been registered
  150. else {
  151. $klass = $this->_default_display_type_handler;
  152. if (isset($this->_display_type_handlers[$displayed_gallery->display_type])) {
  153. $klass = $this->_display_type_handlers[$displayed_gallery->display_type];
  154. }
  155. }
  156. return $klass;
  157. }
  158. function render($view, $displayed_gallery)
  159. {
  160. if (($klass = $this->get_handler_for_displayed_gallery($displayed_gallery))) {
  161. $handler = new $klass;
  162. $handler->view = $view;
  163. $handler->displayed_gallery = $displayed_gallery;
  164. $handler->manager = $this;
  165. if (method_exists($handler, 'render')) {
  166. $handler->render();
  167. }
  168. }
  169. return $view;
  170. }
  171. function render_trigger($name, $view, $displayed_gallery)
  172. {
  173. $retval = '';
  174. if (isset($this->_triggers[$name])) {
  175. $klass = $this->_triggers[$name];
  176. if (call_user_func(array($klass, 'is_renderable'), $name, $displayed_gallery)) {
  177. $handler = new $klass;
  178. $handler->name = $name;
  179. $handler->view = $this->view = $view;
  180. $handler->displayed_gallery = $displayed_gallery;
  181. $retval = $handler->render();
  182. }
  183. }
  184. return $retval;
  185. }
  186. function render_triggers($view, $displayed_gallery)
  187. {
  188. $output = FALSE;
  189. $css_class = esc_attr($this->css_class);
  190. $retval = array("<div class='{$css_class}'>");
  191. foreach ($this->_trigger_order as $name) {
  192. if (($markup = $this->render_trigger($name, $view, $displayed_gallery))) {
  193. $output = TRUE;
  194. $retval[] = $markup;
  195. }
  196. }
  197. if ($output) {
  198. $retval[] = "</div>";
  199. $retval = implode("\n", $retval);
  200. }
  201. else {
  202. $retval = '';
  203. }
  204. return $retval;
  205. }
  206. function enqueue_resources($displayed_gallery)
  207. {
  208. if (($handler = $this->get_handler_for_displayed_gallery($displayed_gallery))) {
  209. wp_enqueue_style('fontawesome');
  210. wp_enqueue_style('ngg_trigger_buttons');
  211. if (method_exists($handler, 'enqueue_resources')) {
  212. call_user_func(array($handler, 'enqueue_resources'), $displayed_gallery);
  213. foreach ($this->_trigger_order as $name) {
  214. $handler = $this->_triggers[$name];
  215. $renderable = TRUE;
  216. if (method_exists($handler, 'is_renderable')) {
  217. $renderable = call_user_func($handler, 'is_renderable', $name, $displayed_gallery);
  218. }
  219. if ($renderable && method_exists($handler, 'enqueue_resources')) {
  220. call_user_func(array($handler, 'enqueue_resources', $name, $displayed_gallery));
  221. }
  222. }
  223. }
  224. }
  225. }
  226. }
  227. class C_Displayed_Gallery_Image_Trigger_Handler
  228. {
  229. function render()
  230. {
  231. foreach ($this->view->find('nextgen_gallery.image', true) as $image_element) {
  232. $image_element->append($this->manager->render_triggers($image_element, $this->displayed_gallery));
  233. }
  234. }
  235. }
  236. class C_Displayed_Gallery_Trigger_Handler
  237. {
  238. function render()
  239. {
  240. $this->view->append($this->manager->render_triggers($this->view, $this->displayed_gallery));
  241. }
  242. }