page_manager_context.inc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. /**
  3. * @file
  4. * A page_manager cache indirection mechanism that just attaches context
  5. * caching to the larger page cache.
  6. */
  7. $plugin = array(
  8. // Cache plugins are the rare plugin types that have no real UI but
  9. // we're providing a title just in case.
  10. 'title' => t('Page manager context'),
  11. 'cache get' => 'page_manager_cache_page_manager_context_cache_get',
  12. 'cache set' => 'page_manager_cache_page_manager_context_cache_set',
  13. 'cache finalize' => 'page_manager_cache_page_manager_context_cache_finalize',
  14. // We don't support a clear because the general uses of clear have no effect
  15. // on us.
  16. );
  17. function page_manager_cache_page_manager_context_cache_get($data, $key) {
  18. $page = page_manager_get_page_cache($data);
  19. if ($page) {
  20. if (!empty($page->context_cache[$key])) {
  21. return $page->context_cache[$key];
  22. }
  23. else {
  24. ctools_include('context-task-handler');
  25. if ($key == 'temp') {
  26. $handler = $page->new_handler;
  27. }
  28. else {
  29. $handler = $page->handlers[$key];
  30. }
  31. return ctools_context_handler_get_task_object($page->task, $page->subtask, $handler);
  32. }
  33. }
  34. }
  35. function page_manager_cache_page_manager_context_cache_set($data, $key, $object) {
  36. $page = page_manager_get_page_cache($data);
  37. if ($page) {
  38. $page->context_cache[$key] = $object;
  39. return page_manager_set_page_cache($page);
  40. }
  41. }
  42. /**
  43. * Copy temporary data from the page manager cache.
  44. */
  45. function page_manager_cache_page_manager_context_cache_finalize($data, $key, $object) {
  46. // Statically cached so there shouldn't be any worries. It's an object so
  47. // referencing ensures that we'll get the right one.
  48. $page = page_manager_get_page_cache($data);
  49. if ($page) {
  50. if ($key == 'temp') {
  51. $handler = $page->new_handler;
  52. }
  53. else {
  54. $handler = $page->handlers[$key];
  55. }
  56. $handler->conf['contexts'] = $object->contexts;
  57. $handler->conf['relationships'] = $object->relationships;
  58. if (isset($page->context_cache[$key])) {
  59. unset($page->context_cache[$key]);
  60. }
  61. return page_manager_set_page_cache($page);
  62. }
  63. }