changes to display loading routine to accomodate new show/hide pane feature

  1. /**
  2.  * Load and fill the requested $display object(s).
  3.  *
  4.  * Helper function primarily for for panels_load_display().
  5.  *
  6.  * @param array $dids
  7.  *  An indexed array of dids to be loaded from the database.
  8.  * @return $displays
  9.  *  An array of displays, keyed by their display dids.
  10.  */
  11. function panels_load_displays($dids, $load_hidden = TRUE) {
  12.   $displays = array();
  13.   if (empty($dids) || !is_array($dids)) {
  14.     return $displays;
  15.   }
  16.  
  17.   $subs = implode(', ', array_fill(0, count($dids), '%d'));
  18.  
  19.   $result = db_query("SELECT * FROM {panels_display} WHERE did IN ($subs)", $dids);
  20.  
  21.   $all_pids = array();
  22.   while ($obj = db_fetch_array($result)) {
  23.     $display = new panels_display();
  24.  
  25.     foreach ($obj as $key => $value) {
  26.       $display->$key = $value;
  27.     }
  28.    
  29.     // unserialize important bits:
  30.     $display->layout_settings = empty($display->layout_settings) ? array() : unserialize($display->layout_settings);
  31.     $display->panel_settings = empty($display->panel_settings) ? array() : unserialize($display->panel_settings);
  32.     $display->cache = empty($display->cache) ? array() : unserialize($display->cache);
  33.  
  34.     $display->panels = $display->content = array();
  35.  
  36.     $displays[$display->did] = $display;
  37.     $all_pids = array_merge($all_pids, $display->shown);
  38.   }
  39.  
  40.   $all_pids = array_unique($all_pids);
  41.   $pid_subs = $load_hidden ? '' : "AND pid IN (" . implode(', ', array_fill(0, count($all_pids), '%d')) . ") ";
  42.   $result = db_query("SELECT * FROM {panels_pane} WHERE did IN ($subs) {$pid_subs}ORDER BY did, panel, position", array_merge($dids, $all_pids));
  43.  
  44.   while ($pane = db_fetch_object($result)) {
  45.     $pane->configuration = unserialize($pane->configuration);
  46.     $pane->cache = empty($pane->cache) ? array() : unserialize($pane->cache);
  47.     $pane->access = ($pane->access ? explode(', ', $pane->access) : array());
  48.  
  49.     $displays[$pane->did]->panels[$pane->panel][] = $pane->pid;
  50.     $displays[$pane->did]->content[$pane->pid] = $pane;
  51.   }
  52.   return $displays;
  53. }