Code exclusively used on admin pages can be found in panels_page.admin.inc.
Definition in file panels_page.module.
Go to the source code of this file.
Functions | |
| _panels_page_create_menu_item (&$items, $panel_page, $path, $args=array()) | |
| _panels_page_get_title ($panel_page, $op, $default_title) | |
| _panels_page_menu_item ($path, $title, $panel_page, $args, $access, $type, $weight=NULL) | |
| _panels_page_menu_type ($panel_page) | |
| panels_move_menu_tabs ($path, $tab) | |
| panels_page_access ($panel_page, $account=NULL) | |
| panels_page_admin_menu_items (&$items, $base, $page) | |
| panels_page_default_panels () | |
| panels_page_delete ($panel_page) | |
| panels_page_export ($panel_page, $prefix= '') | |
| panels_page_fetch_alternate_display (&$panel_page, $id) | |
| panels_page_fetch_display (&$panel_page, $id=NULL) | |
| panels_page_fetch_display_from_info (&$panel_page, $info, $id) | |
| panels_page_fetch_primary_display (&$panel_page) | |
| panels_page_fields () | |
| panels_page_get_current ($page=NULL) | |
| panels_page_get_title ($panel_page, $context= 'page', $default_title=NULL) | |
| panels_page_get_url ($panel_page, $args=NULL) | |
| panels_page_help ($section= '') | |
| panels_page_load ($pid, $load_display=FALSE) | |
| panels_page_load_all ($names=array(), $page_size=0) | |
| panels_page_menu ($may_cache) | |
| panels_page_panels_exportables ($op= 'list', $panels=NULL, $name= 'foo') | |
| panels_page_passthru () | |
| panels_page_perm () | |
| panels_page_sanitize (&$page) | |
| panels_page_settings () | |
| panels_page_view_page ($panel_page, $admin) | |
| theme_panels_page_render_form ($form) | |
| _panels_page_create_menu_item | ( | &$ | items, | |
| $ | panel_page, | |||
| $ | path, | |||
| $ | args = array() | |||
| ) |
Create a menu item for a panel page.
Definition at line 358 of file panels_page.module.
References _panels_page_menu_item(), _panels_page_menu_type(), panels_page_access(), and panels_page_get_title().
Referenced by panels_page_menu().
00358 { 00359 $access = panels_page_access($panel_page); 00360 $title = filter_xss_admin(panels_page_get_title($panel_page, 'menu')); 00361 $type = _panels_page_menu_type($panel_page); 00362 00363 if ($type == MENU_LOCAL_TASK || $type == MENU_DEFAULT_LOCAL_TASK) { 00364 $weight = $panel_page->menu_tab_weight; 00365 } 00366 $items[] = _panels_page_menu_item($path, $title, $panel_page, $args, $access, $type, isset($weight) ? $weight : NULL); 00367 00368 if ($type == MENU_DEFAULT_LOCAL_TASK && dirname($path) && dirname($path) != '.') { 00369 switch ($panel_page->menu_tab_default_parent_type) { 00370 case 'tab': 00371 $parent_type = MENU_LOCAL_TASK; 00372 break; 00373 00374 case 'normal': 00375 $parent_type = MENU_NORMAL_ITEM; 00376 break; 00377 00378 default: 00379 case 'existing': 00380 $parent_type = 0; 00381 break; 00382 } 00383 if ($parent_type) { 00384 $title = filter_xss_admin(panels_page_get_title($panel_page, 'menu-parent')); 00385 $weight = $panel_page->menu_parent_tab_weight; 00386 $items[] = _panels_page_menu_item(dirname($path), $title, $panel_page, $args, $access, $parent_type, $weight); 00387 } 00388 } 00389 }
| _panels_page_get_title | ( | $ | panel_page, | |
| $ | op, | |||
| $ | default_title | |||
| ) |
Definition at line 470 of file panels_page.module.
Referenced by panels_page_get_title().
00470 { 00471 if ($op == 'menu-parent' && $panel_page->menu_parent_title) { 00472 return $panel_page->menu_parent_title; 00473 } 00474 00475 if (in_array($op, array('menu', 'menu-parent')) && $panel_page->menu_title) { 00476 return $panel_page->menu_title; 00477 } 00478 00479 // Context has the highest priority 00480 if (!empty($panel_page->context)) { 00481 $title = NULL; 00482 foreach ($panel_page->context as $context) { 00483 if (empty($context->data)) { 00484 // Empty contexts can't provide titles 00485 continue; 00486 } 00487 if ($page_title = $context->get_page_title()) { 00488 $title = $page_title; 00489 } 00490 } 00491 if ($title) { 00492 return $title; 00493 } 00494 } 00495 00496 // If no context returned a title use the display title configured in layout 00497 // settings 00498 if (!empty($panel_page->display->title)) { 00499 return $panel_page->display->title; 00500 } 00501 00502 // Fall back on the panel default title 00503 if (!empty($panel_page->title)) { 00504 return $panel_page->title; 00505 } 00506 00507 if (is_null($default_title)) { 00508 return t('No title'); 00509 } 00510 else { 00511 return $default_title; 00512 } 00513 }
| _panels_page_menu_item | ( | $ | path, | |
| $ | title, | |||
| $ | panel_page, | |||
| $ | args, | |||
| $ | access, | |||
| $ | type, | |||
| $ | weight = NULL | |||
| ) |
Helper function to create a menu item for a panel.
Definition at line 394 of file panels_page.module.
Referenced by _panels_page_create_menu_item().
00394 { 00395 $retval = array('path' => $path, 00396 'title' => $title, 00397 'callback' => 'panels_page_view_page', 00398 'callback arguments' => $args, 00399 'access' => user_access('access content') && $access, 00400 'type' => $type, 00401 ); 00402 if ($weight !== NULL) { 00403 $retval['weight'] = $weight; 00404 } 00405 return $retval; 00406 }
| _panels_page_menu_type | ( | $ | panel_page | ) |
Determine what menu type a panel needs to use.
Definition at line 411 of file panels_page.module.
Referenced by _panels_page_create_menu_item().
00411 { 00412 if ($panel_page->menu) { 00413 if ($panel_page->menu_tab_default) { 00414 $type = MENU_DEFAULT_LOCAL_TASK; 00415 } 00416 else if ($panel_page->menu_tab) { 00417 $type = MENU_LOCAL_TASK; 00418 } 00419 else { 00420 $type = MENU_NORMAL_ITEM; 00421 } 00422 } 00423 else { 00424 $type = MENU_CALLBACK; 00425 } 00426 return $type; 00427 }
| panels_move_menu_tabs | ( | $ | path, | |
| $ | tab | |||
| ) |
Definition at line 571 of file panels_page.module.
Referenced by panels_page_view_page().
00571 { 00572 global $_menu; 00573 00574 // Get my menu item. 00575 $my_mid = menu_get_active_item(); 00576 00577 // Get my parent menu item. 00578 $my_parent = $_menu['items'][$my_mid]['pid']; 00579 00580 // Check the existing children to see if there is a default local task 00581 // already. 00582 if (!isset($_menu['items'][$my_parent]['children'])) { 00583 $_menu['items'][$my_parent]['children'] = array(); 00584 } 00585 $local_tasks = FALSE; 00586 00587 if ($my_parent != 1) { 00588 // We do not run this loop if the parent is the top level menu item 00589 // since that way lies madness. 00590 foreach ($_menu['items'][$my_parent]['children'] as $child_mid) { 00591 if ($_menu['items'][$child_mid]['type'] & MENU_IS_LOCAL_TASK) { 00592 $local_tasks = TRUE; 00593 break; 00594 } 00595 } 00596 } 00597 00598 if (!$local_tasks) { 00599 // Move the administrative items from the admin menu to here. 00600 $admin_item = $_menu['path index'][$path]; 00601 $_menu['items'][$my_mid]['children'] = $_menu['items'][$admin_item]['children']; 00602 } 00603 else { 00604 // But if we do have tabs, just add the admin item itself to the tabs. 00605 // Get the menu item we want to move us to. 00606 $path .= $tab; 00607 $admin_item = $_menu['path index'][$path]; 00608 00609 $_menu['items'][$my_parent]['children'][] = $admin_item; 00610 $_menu['items'][$admin_item]['title'] = t('Edit panel'); 00611 $_menu['items'][$admin_item]['weight'] += 50; 00612 $_menu['items'][$admin_item]['type'] = MENU_LOCAL_TASK; 00613 } 00614 }
| panels_page_access | ( | $ | panel_page, | |
| $ | account = NULL | |||
| ) |
Determine if the specified user has access to a panel.
Definition at line 432 of file panels_page.module.
Referenced by _panels_page_create_menu_item().
00432 { 00433 if (!$account) { 00434 global $user; 00435 $account = $user; 00436 } 00437 00438 // Administrator privileges 00439 if (user_access('access all panel-pages', $account)) { 00440 return TRUE; 00441 } 00442 00443 // All views with an empty access setting are available to all roles. 00444 if (!$panel_page->access || !is_array($panel_page->access)) { 00445 return TRUE; 00446 } 00447 00448 // Otherwise, check roles 00449 static $roles = array(); 00450 if (!isset($roles[$account->uid])) { 00451 $roles[$account->uid] = array_keys($account->roles); 00452 $roles[$account->uid][] = $account->uid ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID; 00453 } 00454 00455 return array_intersect($panel_page->access, $roles[$account->uid]); 00456 }
| panels_page_admin_menu_items | ( | &$ | items, | |
| $ | base, | |||
| $ | page | |||
| ) |
Helper function to add a menu item for a panel.
Definition at line 191 of file panels_page.module.
Referenced by panels_page_menu().
00191 { 00192 $access = user_access('create panel-pages'); 00193 00194 $items[] = array( 00195 'path' => $base, 00196 'title' => t('Preview'), 00197 'access' => $access, 00198 'callback' => 'panels_page_view_page', 00199 'callback arguments' => array($page->name, TRUE), 00200 'weight' => -10, 00201 'type' => MENU_CALLBACK, 00202 ); 00203 00204 $items[] = array( 00205 'path' => $base . '/preview', 00206 'title' => t('Preview'), 00207 'access' => $access, 00208 'callback' => 'panels_page_view_page', 00209 'callback arguments' => array($page->name, TRUE), 00210 'weight' => -10, 00211 'type' => MENU_DEFAULT_LOCAL_TASK, 00212 ); 00213 00214 // Set up for the 'default' display. 00215 $items[] = array( 00216 'path' => $base . '/edit/layout', 00217 'title' => t('Layout'), 00218 'access' => $access, 00219 'callback' => 'panels_page_passthru', 00220 'callback arguments' => array('panels_page_edit_layout', $page->name), 00221 'weight' => -9, 00222 'type' => MENU_LOCAL_TASK, 00223 ); 00224 00225 $items[] = array( 00226 'path' => $base . '/edit/general', 00227 'title' => t('Settings'), 00228 'access' => $access, 00229 'callback' => 'panels_page_passthru', 00230 'callback arguments' => array('panels_page_edit', $page->name), 00231 'weight' => -7, 00232 'type' => MENU_LOCAL_TASK, 00233 ); 00234 00235 $items[] = array( 00236 'path' => $base . '/edit/settings', 00237 'title' => t('Layout settings'), 00238 'access' => $access, 00239 'callback' => 'panels_page_passthru', 00240 'callback arguments' => array('panels_page_edit_layout_settings', $page->name, NULL), 00241 'weight' => -5, 00242 'type' => MENU_LOCAL_TASK, 00243 ); 00244 00245 $items[] = array( 00246 'path' => $base . '/edit/advanced', 00247 'title' => t('Advanced'), 00248 'access' => $access, 00249 'callback' => 'panels_page_passthru', 00250 'callback arguments' => array('panels_page_edit_advanced', $page->name), 00251 'weight' => -3, 00252 'type' => MENU_LOCAL_TASK, 00253 ); 00254 00255 $items[] = array( 00256 'path' => $base . '/edit/context', 00257 'title' => t('Context'), 00258 'access' => $access, 00259 'callback' => 'panels_page_passthru', 00260 'callback arguments' => array('panels_page_edit_context', $page->name), 00261 'weight' => -2, 00262 'type' => MENU_LOCAL_TASK, 00263 ); 00264 00265 $items[] = array( 00266 'path' => $base . '/edit/content', 00267 'title' => t('Content'), 00268 'access' => $access, 00269 'callback' => 'panels_page_passthru', 00270 'callback arguments' => array('panels_page_edit_content', $page->name), 00271 'weight' => -1, 00272 'type' => MENU_LOCAL_TASK, 00273 ); 00274 00275 $items[] = array( 00276 'path' => $base . '/edit/layout/default', 00277 'title' => t('Default'), 00278 'access' => $access, 00279 'callback' => 'panels_page_passthru', 00280 'callback arguments' => array('panels_page_edit_layout', $page->name), 00281 'weight' => -1, 00282 'type' => MENU_DEFAULT_LOCAL_TASK, 00283 ); 00284 00285 $items[] = array( 00286 'path' => $base . '/edit/settings/default', 00287 'title' => t('Default'), 00288 'access' => $access, 00289 'callback' => 'panels_page_passthru', 00290 'callback arguments' => array('panels_page_edit_layout_settings', $page->name, NULL), 00291 'weight' => -1, 00292 'type' => MENU_DEFAULT_LOCAL_TASK, 00293 ); 00294 00295 $items[] = array( 00296 'path' => $base . '/edit/content/default', 00297 'title' => t('Default'), 00298 'access' => $access, 00299 'callback' => 'panels_page_passthru', 00300 'callback arguments' => array('panels_page_edit_content', $page->name), 00301 'weight' => -1, 00302 'type' => MENU_DEFAULT_LOCAL_TASK, 00303 ); 00304 00305 if (!empty($page->displays)) { 00306 foreach ($page->displays as $display_id => $info) { 00307 $items[] = array( 00308 'path' => $base . '/edit/layout/' . $display_id, 00309 'title' => $info['title'], 00310 'access' => $access, 00311 'callback' => 'panels_page_passthru', 00312 'callback arguments' => array('panels_page_edit_layout', $page->name, $display_id), 00313 'type' => MENU_LOCAL_TASK, 00314 ); 00315 00316 $items[] = array( 00317 'path' => $base . '/edit/settings/' . $display_id, 00318 'title' => $info['title'], 00319 'access' => $access, 00320 'callback' => 'panels_page_passthru', 00321 'callback arguments' => array('panels_page_edit_layout_settings', $page->name, $display_id), 00322 'type' => MENU_LOCAL_TASK, 00323 ); 00324 00325 $items[] = array( 00326 'path' => $base . '/edit/content/' . $display_id, 00327 'title' => $info['title'], 00328 'access' => $access, 00329 'callback' => 'panels_page_passthru', 00330 'callback arguments' => array('panels_page_edit_content', $page->name, $display_id), 00331 'type' => MENU_LOCAL_TASK, 00332 ); 00333 } 00334 } 00335 00336 $items[] = array( 00337 'path' => $base . '/export', 00338 'title' => t('Export'), 00339 'access' => $access, 00340 'callback' => 'panels_page_passthru', 00341 'callback arguments' => array('drupal_get_form', 'panels_page_edit_export', $page->name), 00342 'weight' => 0, 00343 'type' => MENU_LOCAL_TASK, 00344 ); 00345 $items[] = array( 00346 'path' => $base . '/delete', 00347 'title' => t('Delete panel page'), 00348 'access' => $access, 00349 'callback' => 'panels_page_passthru', 00350 'callback arguments' => array('drupal_get_form', 'panels_page_delete_confirm', $page->name), 00351 'type' => MENU_CALLBACK, 00352 ); 00353 }
| panels_page_delete | ( | $ | panel_page | ) |
Delete a panel page and its associated displays.
Definition at line 1035 of file panels_page.module.
References panels_delete_display().
Referenced by panels_page_delete_confirm_submit().
01035 { 01036 // Delete the panel page. 01037 db_query("DELETE FROM {panels_page} WHERE pid = %d", $panel_page->pid); 01038 menu_rebuild(); 01039 01040 // Delete the primary display. 01041 panels_delete_display($panel_page->did); 01042 01043 // Delete all secondary displays. 01044 if (!empty($panel_page->displays)) { 01045 foreach ($panel_page->displays as $info) { 01046 if ($info['did'] !== 'new') { 01047 panels_delete_display($info['did']); 01048 } 01049 } 01050 } 01051 }
| panels_page_export | ( | $ | panel_page, | |
| $ | prefix = '' | |||
| ) |
Export a panel page into PHP code for use in import.
The code returned from can be used directly in panels_page_save().
Definition at line 1058 of file panels_page.module.
References panels_export_display(), panels_load_display(), panels_page_fields(), and panels_var_export().
Referenced by panels_page_edit_export(), and panels_page_panels_exportables().
01058 { 01059 $output = ''; 01060 $fields = panels_page_fields(); 01061 $output .= $prefix . '$page = new stdClass()' . ";\n"; 01062 $output .= $prefix . '$page->pid = \'new\'' . ";\n"; 01063 foreach (array_keys($fields) as $field) { 01064 if (!isset($panel_page->$field) || in_array($field, array('displays', 'contexts', 'display'))) { 01065 continue; 01066 } 01067 $output .= $prefix . ' $page->' . $field . ' = ' . panels_var_export($panel_page->$field, ' ') . ";\n"; 01068 } 01069 // Export the contexts. 01070 $output .= $prefix . '$page->contexts = array()' . ";\n"; 01071 foreach ($panel_page->contexts as $id => $info) { 01072 $output .= $prefix . ' $page->contexts[\'' . $id . "'] = array(\n"; 01073 foreach ($info as $key => $value) { 01074 $output .= $prefix . " '$key' => " . panels_var_export($value, ' ') . ",\n"; 01075 } 01076 $output .= $prefix . " );\n"; 01077 } 01078 01079 // Export the primary display 01080 $display = !empty($panel_page->display) ? $panel_page->display : panels_load_display($panel_page->did); 01081 $output .= panels_export_display($display, $prefix); 01082 $output .= $prefix . '$page->display = $display' . ";\n"; 01083 01084 // Export all secondary displays 01085 $output .= $prefix . '$page->displays = array()' . ";\n"; 01086 foreach ($panel_page->displays as $did => $info) { 01087 $output .= $prefix . ' $page->displays[\'' . $did . "']['title'] = '" . check_plain($info['title']) . "';\n"; 01088 $output .= $prefix . ' $page->displays[\'' . $did . "']['argument_id'] = '" . check_plain($info['argument_id']) . "';\n"; 01089 $display = !empty($info['display']) ? $info['display'] : panels_load_display($info['did']); 01090 $output .= panels_export_display($display, $prefix . ' '); 01091 $output .= $prefix . ' $page->displays[\'' . $did . "']['display'] = \$display;\n"; 01092 } 01093 return $output; 01094 }
| panels_page_fetch_alternate_display | ( | &$ | panel_page, | |
| $ | id | |||
| ) |
Definition at line 832 of file panels_page.module.
References panels_page_fetch_display_from_info(), and panels_page_fetch_primary_display().
Referenced by panels_page_fetch_display().
00832 { 00833 // Get the metadata abpit the requested display. 00834 $info = $panel_page->displays[$id]; 00835 // Using the metadata, determine if the desired display exists. 00836 $requested_display_exists = panels_page_fetch_display_from_info($panel_page, $info, $id); 00837 if ($requested_display_exists) { 00838 // The requested display exists. Drop the $id into $current and bug out. 00839 $panel_page->current = $id; 00840 return; 00841 } 00842 00843 // The requested display does not exist - determine the fallback display. We 00844 // save the $id into the object because we'll need it later for updating 00845 // the metadata if we export & save the default we fetch here. 00846 $panel_page->export = $id; 00847 // First, check for a default display for the context we're switching on, 00848 // and try to load that. 00849 if (!empty($info['default']) && !empty($panel_page->displays[$info['default']])) { 00850 // A default has been defined - figure out if it actually has a display 00851 // associated with it. 00852 if (!panels_page_fetch_display_from_info($panel_page, $panel_page->displays[$info['default']], $id)) { 00853 // No display is associated with the switched default either, so double 00854 // fall back to the primary display. Load it if it's not already. 00855 panels_page_fetch_primary_display($panel_page); 00856 } 00857 } 00858 // There's no default display defined for the context we're switching on, so 00859 // just use the primary display as the default. Load it if it's not already. 00860 else { 00861 panels_page_fetch_primary_display($panel_page); 00862 } 00863 }
| panels_page_fetch_display | ( | &$ | panel_page, | |
| $ | id = NULL | |||
| ) |
Load a display into the 'current display' position, $panel_page->current.
The family of panels_page_fetch*() functions are specifically dedicated to retrieving a particular display and placing them in $panels_page->display, which is the 'current' display upon which all other operations act. via reference to its permanent home in the $panels_page object. The permanent homes vary:
The structure of this function family essentially means that no other panels_page function should ever act on anything except $panel_page->display.
| object | $panel_page | |
| string | $id A string of the format generated by panels_argument_get_display(). |
Definition at line 805 of file panels_page.module.
References panels_page_fetch_alternate_display(), and panels_page_fetch_primary_display().
Referenced by panels_page_edit_content(), panels_page_edit_layout(), panels_page_edit_layout_settings(), and panels_page_view_page().
00805 { 00806 // Redirect to the appropriate fetcher depending on whether $id is provided 00807 if (empty($id)) { 00808 panels_page_fetch_primary_display($panel_page); 00809 } 00810 else { 00811 panels_page_fetch_alternate_display($panel_page, $id); 00812 } 00813 }
| panels_page_fetch_display_from_info | ( | &$ | panel_page, | |
| $ | info, | |||
| $ | id | |||
| ) |
Get a display based on whether it's already in code or needs to be loaded.
Definition at line 868 of file panels_page.module.
References panels_load_display().
Referenced by panels_page_fetch_alternate_display().
00868 { 00869 // If the 'display' is set it's the result of an export/default 00870 if (isset($info['display'])) { 00871 $panel_page->display = $info['display']; 00872 return TRUE; 00873 } 00874 00875 // If the $did is numeric, it corresponds to an existing display - load it. 00876 if (is_numeric($info['did'])) { 00877 $panel_page->display = panels_load_display($info['did']); 00878 return TRUE; 00879 } 00880 00881 return FALSE; 00882 }
| panels_page_fetch_primary_display | ( | &$ | panel_page | ) |
Internal panels_page API function; directs the current display ($panel_page->display) to the primary display ($panel_page->primary), loading the primary display if necessary.
| object | $panel_page |
Definition at line 822 of file panels_page.module.
References panels_load_display().
Referenced by panels_page_fetch_alternate_display(), and panels_page_fetch_display().
00822 { 00823 // Commented out is a more precise way of telling, but it's probably moot. 00824 // if (empty($panel_page->primary) || !is_a($panel_page->primary, 'panels_display')) { 00825 if (empty($panel_page->primary) || !is_object($panel_page->primary)) { 00826 $panel_page->primary = panels_load_display($panel_page->did); 00827 } 00828 $panel_page->display = &$panel_page->primary; 00829 $panel_page->current = 'primary'; 00830 }
| panels_page_fields | ( | ) |
A list of the fields used in the panel_page table.
Definition at line 992 of file panels_page.module.
Referenced by _panels_page_insert(), _panels_page_update(), and panels_page_export().
00992 { 00993 return array( 00994 "name" => "'%s'", 00995 "title" => "'%s'", 00996 "arguments" => "'%s'", 00997 "displays" => "'%s'", 00998 "contexts" => "'%s'", 00999 "relationships" => "'%s'", 01000 "access" => "'%s'", 01001 "path" => "'%s'", 01002 "css_id" => "'%s'", 01003 "css" => "'%s'", 01004 "no_blocks" => "%d", 01005 "switcher_type" => "'%s'", 01006 "switcher_name" => "'%s'", 01007 "switcher_options" => "'%s'", 01008 "menu" => "%d", 01009 "menu_tab" => "%d", 01010 "menu_tab_weight" => "%d", 01011 "menu_title" => "'%s'", 01012 "menu_tab_default" => "%d", 01013 "menu_tab_default_parent_type" => "'%s'", 01014 "menu_parent_title" => "'%s'", 01015 "menu_parent_tab_weight" => "%d", 01016 ); 01017 }
| panels_page_get_current | ( | $ | page = NULL |
) |
Figure out if a panel is the current page; mostly useful in theming.
Definition at line 539 of file panels_page.module.
Referenced by panels_page_view_page().
00539 { 00540 static $cache = NULL; 00541 if (isset($page)) { 00542 $cache = $page; 00543 } 00544 00545 return $cache; 00546 }
| panels_page_get_title | ( | $ | panel_page, | |
| $ | context = 'page', |
|||
| $ | default_title = NULL | |||
| ) |
Get the title for a panel page, given a context.
Definition at line 462 of file panels_page.module.
References _panels_page_get_title().
Referenced by _panels_page_create_menu_item(), panels_page_delete_confirm(), panels_page_edit(), panels_page_edit_advanced(), panels_page_edit_content(), panels_page_edit_context(), panels_page_edit_layout(), panels_page_edit_layout_settings(), panels_page_list_page(), panels_page_panels_exportables(), and panels_page_view_page().
00462 { 00463 $title = _panels_page_get_title($panel_page, $context, $default_title); 00464 if (!empty($panel_page->keywords)) { 00465 $title = strtr($title, $panel_page->keywords); 00466 } 00467 return $title; 00468 }
| panels_page_get_url | ( | $ | panel_page, | |
| $ | args = NULL | |||
| ) |
Get the actual URL of a panel page given the passed in arguments.
Definition at line 518 of file panels_page.module.
Referenced by panels_page_admin_view().
00518 { 00519 if (!isset($args)) { 00520 $args = $panel_page->args; 00521 } 00522 00523 $parts = explode('/', $panel_page->path); 00524 $url = array(); 00525 foreach ($parts as $part) { 00526 if ($part == '%') { 00527 $url[] = array_shift($args); 00528 } 00529 else { 00530 $url[] = $part; 00531 } 00532 } 00533 return implode('/', array_merge($url, $args)); 00534 }
| panels_page_help | ( | $ | section = '' |
) |
Implementation of hook_help().
Definition at line 17 of file panels_page.module.
00017 { 00018 switch ($section) { 00019 case 'admin/panels/panel-page': 00020 case 'admin/panels/panel-page/list': 00021 $output = '<p>'; 00022 $output .= t('You may peruse a list of your current panels layouts and edit them, or click add to create a new page.'); 00023 $output .= '</p>'; 00024 break; 00025 00026 case 'admin/panels/panel-page/add': 00027 $output = '<p>'; 00028 $output .= t('Choose a layout for your new page from the list below.'); 00029 $output .= '</p>'; 00030 break; 00031 } 00032 return $output; 00033 }
| panels_page_load | ( | $ | pid, | |
| $ | load_display = FALSE | |||
| ) |
Load a panel page.
Definition at line 941 of file panels_page.module.
References panels_load_display(), panels_page_default_panels(), and panels_page_sanitize().
Referenced by panels_page_delete_confirm(), panels_page_edit(), panels_page_edit_advanced(), panels_page_edit_content(), panels_page_edit_context(), panels_page_edit_export(), panels_page_edit_layout(), panels_page_edit_layout_settings(), and panels_page_view_page().
00941 { 00942 static $cache = array(); 00943 00944 if (array_key_exists($pid, $cache)) { 00945 if ($load_display && empty($cache[$pid]->display)) { 00946 $cache[$pid]->display = panels_load_display($cache[$pid]->did); 00947 } 00948 return $cache[$pid]; 00949 } 00950 00951 if (!is_numeric($pid)) { 00952 $where = "name = '%s'"; 00953 } 00954 else { 00955 $where = 'pid = %d'; 00956 } 00957 $page = db_fetch_object(db_query("SELECT * FROM {panels_page} WHERE $where", $pid)); 00958 if (!$page) { 00959 $defaults = panels_page_default_panels(); 00960 if (isset($defaults[$pid])) { 00961 $page = $cache[$pid] = $defaults[$pid]; 00962 $page->primary = $page->display; 00963 return $page; 00964 } 00965 return; 00966 } 00967 00968 $page->access = ($page->access ? explode(', ', $page->access) : array()); 00969 $page->arguments = (!empty($page->arguments)) ? unserialize($page->arguments) : array(); 00970 $page->displays = (!empty($page->displays)) ? unserialize($page->displays) : array(); 00971 $page->contexts = (!empty($page->contexts)) ? unserialize($page->contexts) : array(); 00972 $page->relationships = (!empty($page->relationships)) ? unserialize($page->relationships) : array(); 00973 $page->switcher_options = (!empty($page->switcher_options)) ? unserialize($page->switcher_options) : array(); 00974 00975 if ($load_display) { 00976 $page->display = panels_load_display($page->did); 00977 } 00978 00979 $cache[$pid] = panels_page_sanitize($page); 00980 // Make sure that we've statically cached the loaded page for both possible 00981 // unique identifiers - $page->pid AND $page->name. 00982 $other_id = is_numeric($pid) || $pid == 'new' ? $page->name : $page->pid; 00983 $cache[$other_id] =& $cache[$pid]; 00984 00985 00986 return $cache[$pid]; 00987 }
| panels_page_load_all | ( | $ | names = array(), |
|
| $ | page_size = 0 | |||
| ) |
Fetch all panel pages in the system.
This function does not cache.
Definition at line 892 of file panels_page.module.
References panels_page_default_panels(), and panels_page_sanitize().
Referenced by panels_page_list_page(), panels_page_menu(), panels_page_panels_exportables(), and panels_page_view_page().
00892 { 00893 $pages = $dids = array(); 00894 $query = "SELECT * FROM {panels_page}"; 00895 00896 if ($names) { 00897 $query .= " WHERE name IN (" . implode(', ', array_fill(0, sizeof($names), "'%s'")) . ")"; 00898 } 00899 00900 if ($page_size) { 00901 $result = pager_query($query, $page_size, 0, $names); 00902 } 00903 else { 00904 $result = db_query($query, $names); 00905 } 00906 00907 while ($page = db_fetch_object($result)) { 00908 $page->access = ($page->access ? explode(', ', $page->access) : array()); 00909 $page->arguments = (!empty($page->arguments)) ? unserialize($page->arguments) : array(); 00910 $page->displays = (!empty($page->displays)) ? unserialize($page->displays) : array(); 00911 $page->contexts = (!empty($page->contexts)) ? unserialize($page->contexts) : array(); 00912 $page->relationships = (!empty($page->relationships)) ? unserialize($page->relationships) : array(); 00913 $page->switcher_options = (!empty($page->switcher_options)) ? unserialize($page->switcher_options) : array(); 00914 00915 $page->type = t('Local'); 00916 $pages[$page->name] = panels_page_sanitize($page); 00917 } 00918 00919 $status = variable_get('panel_page_defaults', array()); 00920 foreach (panels_page_default_panels() as $page) { 00921 // Determine if default panel is enabled or disabled. 00922 if (isset($status[$page->name])) { 00923 $page->disabled = $status[$page->name]; 00924 } 00925 00926 if (!empty($pages[$page->name])) { 00927 $pages[$page->name]->type = t('Overridden'); 00928 } 00929 else { 00930 $page->type = t('Default'); 00931 $page->primary = $page->display; 00932 $pages[$page->name] = $page; 00933 } 00934 } 00935 return $pages; 00936 }
| panels_page_menu | ( | $ | may_cache | ) |
Implementation of hook_menu().
Definition at line 45 of file panels_page.module.
References _panels_page_create_menu_item(), panels_argument_context_id(), panels_argument_get_context(), panels_load_include(), panels_page_admin_menu_items(), and panels_page_load_all().
00045 { 00046 $items = array(); 00047 $panels = panels_page_load_all(); 00048 if ($may_cache) { 00049 $access = user_access('create panel-pages'); 00050 $items[] = array( 00051 'path' => 'admin/panels/panel-page', 00052 'title' => t('Panel pages'), 00053 'access' => $access, 00054 'callback' => 'panels_page_passthru', 00055 'callback arguments' => array('panels_page_list_page'), 00056 'description' => t('Create and administer panel-pages (complex layout pages with URLs).'), 00057 ); 00058 $items[] = array( 00059 'path' => 'admin/panels/panel-page/list', 00060 'title' => t('List'), 00061 'access' => $access, 00062 'callback' => 'panels_page_passthru', 00063 'callback arguments' => array('panels_page_list_page'), 00064 'weight' => -10, 00065 'type' => MENU_DEFAULT_LOCAL_TASK, 00066 ); 00067 $items[] = array( 00068 'path' => 'admin/panels/panel-page/add', 00069 'title' => t('Add'), 00070 'access' => $access, 00071 'callback' => 'panels_page_passthru', 00072 'callback arguments' => array('panels_page_add_page'), 00073 'type' => MENU_LOCAL_TASK, 00074 ); 00075 $items[] = array( 00076 'path' => 'admin/panels/panel-page/import', 00077 'title' => t('Import'), 00078 'access' => $access, 00079 'callback' => 'panels_page_passthru', 00080 'callback arguments' => array('panels_page_import_page'), 00081 'type' => MENU_LOCAL_TASK, 00082 ); 00083 $items[] = array( 00084 'path' => 'admin/panels/panel-page/settings', 00085 'title' => t('Settings'), 00086 'access' => $access, 00087 'callback' => 'panels_page_settings', 00088 'weight' => 5, 00089 'type' => MENU_LOCAL_TASK, 00090 ); 00091 $items[] = array( 00092 'path' => 'admin/panels/panel-page/disable', 00093 'access' => $access, 00094 'callback' => 'panels_page_passthru', 00095 'callback arguments' => array('panels_page_disable_page'), 00096 'weight' => -1, 00097 'type' => MENU_CALLBACK, 00098 ); 00099 $items[] = array( 00100 'path' => 'admin/panels/panel-page/enable', 00101 'access' => $access, 00102 'callback' => 'panels_page_passthru', 00103 'callback arguments' => array('panels_page_enable_page'), 00104 'weight' => -1, 00105 'type' => MENU_CALLBACK, 00106 ); 00107 00108 // Get all panels and, if enabled, create menu items. 00109 foreach ($panels as $panel_page) { 00110 if (empty($panel_page->disabled)) { 00111 // Only create menu items based on the path if it's not a variable path. 00112 if (strpos($panel_page->path, '%') === FALSE) { 00113 _panels_page_create_menu_item($items, $panel_page, $panel_page->path, array($panel_page->name, FALSE)); 00114 // DEBUG: Above is now creating only the basic menu item, not the admin items. 00115 } 00116 panels_page_admin_menu_items($items, 'admin/panels/panel-page/' . $panel_page->name, $panel_page); 00117 } 00118 } 00119 } 00120 else { 00121 // Look for panels with variable arguments. 00122 // Build an array of $urls because 'real' URLs will take precedence over 00123 // argument filled URLs 00124 $urls = array(); 00125 foreach ($panels as $panel_page) { 00126 $url[$panel_page->path] = TRUE; 00127 } 00128 00129 $plugins_loaded = FALSE; 00130 foreach ($panels as $panel_page) { 00131 if (!empty($panel_page->disabled)) { 00132 continue; 00133 } 00134 if (strpos($panel_page->path, '%') !== FALSE) { 00135 $path = explode('/', $panel_page->path); 00136 00137 // First pass: 00138 // Check if the current path sufficiently matches $panel_page->path, 00139 // which means: all fixed parts that come before the last %-wildcard 00140 // need to match, while trailing fixed parts don't matter. 00141 // We start with the last part and take up checking after reaching a %. 00142 $check = FALSE; 00143 foreach (array_reverse($path, TRUE) as $id => $chunk) { 00144 if ($chunk == '%') { 00145 $check = TRUE; 00146 continue; 00147 } 00148 if ($check && $chunk != arg($id)) { 00149 // Skip outer foreach loop to continue with the next $panel_page. 00150 continue 2; 00151 } 00152 } 00153 00154 $args = array($panel_page, FALSE); 00155 00156 // Second pass: 00157 $argument = reset($panel_page->arguments); // Get first argument. 00158 foreach ($path as $id => $chunk) { 00159 if ($chunk != '%') { 00160 continue; 00161 } 00162 // For arguments that are embedded in the URL, we require the 00163 // argument handler to return a context, if there is an argument handler. 00164 if ($argument) { 00165 // Try to avoid loading the plugins code unless necessary. 00166 if (!$plugins_loaded) { 00167 panels_load_include('plugins'); 00168 $plugins_loaded = TRUE; 00169 } 00170 $context = panels_argument_get_context($argument, arg($id)); 00171 if (!$context) { 00172 break; 00173 } 00174 $panel_page->context[panels_argument_context_id($argument)] = $context; 00175 } 00176 $path[$id] = arg($id); 00177 $args[] = arg($id); 00178 $argument = next($panel_page->arguments); // Get next argument. 00179 } 00180 _panels_page_create_menu_item($items, $panel_page, implode('/', $path), $args); 00181 // DEBUG: Above is now creating only the basic menu item, not the admin items. 00182 } 00183 } 00184 } 00185 return $items; 00186 }
| panels_page_panels_exportables | ( | $ | op = 'list', |
|
| $ | panels = NULL, |
|||
| $ | name = 'foo' | |||
| ) |
Implementation of hook_panels_exportables().
Definition at line 1113 of file panels_page.module.
References panels_page_export(), panels_page_get_title(), and panels_page_load_all().
01113 { 01114 static $all_panels = NULL; 01115 if ($op == 'list') { 01116 if (empty($all_panels)) { 01117 $all_panels = panels_page_load_all(); 01118 } 01119 01120 foreach ($all_panels as $name => $panel) { 01121 $return[$name] = check_plain($name) . ' (' . check_plain(panels_page_get_title($panel)) . ')'; 01122 } 01123 return $return; 01124 } 01125 01126 if ($op == 'export') { 01127 $code = "/**\n"; 01128 $code .= " * Implementation of hook_default_panel_pages()\n"; 01129 $code .= " */\n"; 01130 $code .= "function " . $name . "_default_panel_pages() {\n"; 01131 foreach ($panels as $panel => $truth) { 01132 $code .= panels_page_export($all_panels[$panel], ' '); 01133 $code .= ' $pages[\'' . check_plain($panel) . '\'] = $page;' . "\n\n\n"; 01134 } 01135 $code .= " return \$pages;\n"; 01136 $code .= "}\n"; 01137 return $code; 01138 } 01139 }
| panels_page_passthru | ( | ) |
Pass-through to admin.inc.
Definition at line 562 of file panels_page.module.
References panels_load_include().
00562 { 00563 $args = func_get_args(); 00564 $callback = array_shift($args); 00565 00566 panels_load_include('panels_page.admin', 'panels_page/'); 00567 panels_load_include('plugins'); 00568 return call_user_func_array($callback, $args); 00569 }
| panels_page_perm | ( | ) |
| panels_page_sanitize | ( | &$ | page | ) |
Sanitize a panel prior to saving it.
Definition at line 1022 of file panels_page.module.
Referenced by panels_page_add_page(), panels_page_load(), panels_page_load_all(), and panels_page_save().
01022 { 01023 foreach (array('arguments', 'displays', 'contexts', 'relationships', 'switcher_options') as $id) { 01024 if (!is_array($page->$id)) { 01025 $page->$id = array(); 01026 } 01027 } 01028 01029 return $page; 01030 }
| panels_page_settings | ( | ) |
Settings for panel pages.
Definition at line 554 of file panels_page.module.
References panels_load_include().
00554 { 00555 panels_load_include('common'); 00556 return drupal_get_form('panels_common_settings', 'panels_page'); 00557 }
| panels_page_view_page | ( | $ | panel_page, | |
| $ | admin | |||
| ) |
Page callback to view a panel page.
Definition at line 622 of file panels_page.module.
References panels_argument_get_display(), panels_argument_load_contexts(), panels_context_get_form(), panels_context_get_keywords(), panels_context_load_contexts(), panels_get_switchers(), panels_load_include(), panels_move_menu_tabs(), panels_page_compress_css(), panels_page_default_panels(), panels_page_disassemble_css(), panels_page_fetch_display(), panels_page_filter_css(), panels_page_get_current(), panels_page_get_title(), panels_page_load(), panels_page_load_all(), panels_render_display(), and panels_switcher_switch().
00622 { 00623 if (!is_object($panel_page)) { 00624 $panel_page = panels_page_load($panel_page); 00625 } 00626 if (!$panel_page) { 00627 return drupal_not_found(); 00628 } 00629 00630 panels_load_include('plugins'); 00631 00632 $switchers = panels_get_switchers(); 00633 if ($switchers) { 00634 $list = array(); 00635 $candidates = array(); 00636 $result = db_query("SELECT name FROM {panels_page} WHERE switcher_name = '%s'", $panel_page->name); 00637 // get a list of all pages that might switch for this one 00638 while ($candidate = db_fetch_object($result)) { 00639 $list[] = $candidate->name; 00640 } 00641 // Add default panels that apply to the list as well 00642 foreach (panels_page_default_panels() as $page) { 00643 if ($page->switcher_name == $panel_page->name) { 00644 $candidates[$page->name] = $page; 00645 } 00646 } 00647 00648 if ($list) { 00649 $candidates += (count($list) > 1) ? panels_page_load_all($list) : array(panels_page_load($list[0])); 00650 } 00651 00652 if ($candidates) { 00653 // separate them based on switcher type 00654 $pages = array(); 00655 foreach ($candidates as $candidate) { 00656 $pages[$candidate->switcher_type][$candidate->name] = $candidate; 00657 } 00658 00659 // go through switcher types and switch the first one that matches. 00660 foreach ($pages as $plugin => $candidates) { 00661 if ($page = panels_switcher_switch($plugin, 'panel_page', $panel_page->name, $candidates)) { 00662 $panel_page = $page; 00663 break; 00664 } 00665 } 00666 } 00667 } 00668 00669 $args = func_get_args(); 00670 // remove the name. 00671 array_shift($args); 00672 // remove the admin flag. 00673 array_shift($args); 00674 00675 $output = ''; 00676 if ($admin) { 00677 // Display an admin form to make it easy to set up arguments. 00678 panels_load_include('panels_page.admin', 'panels_page/'); 00679 $output .= drupal_get_form('panels_page_admin_view', $panel_page, $args); 00680 } 00681 else { 00682 // This piece of code goes deep into the menu system, finds the 00683 // administrative link for this panel and puts it between us and 00684 // whatever menu item is our parent. This causes the tabs to follow us 00685 // around without losing our previous menu context. 00686 panels_move_menu_tabs("admin/panels/panel-page/$panel_page->name", "/edit/general"); 00687 } 00688 00689 if (empty($panel_page->context)) { 00690 $panel_page->context = array(); 00691 } 00692 00693 if ($panel_page->arguments) { 00694 if (!panels_argument_load_contexts($panel_page->arguments, $panel_page->context, $args)) { 00695 if ($admin) { 00696 return $output . t('Page reports "Page not found" due to argument restrictions'); 00697 } 00698 else { 00699 return drupal_not_found(); 00700 } 00701 } 00702 } 00703 00704 $panel_page->context = panels_context_load_contexts($panel_page, FALSE, $panel_page->context); 00705 $panel_page->keywords = panels_context_get_keywords($panel_page->context); 00706 00707 // Figure out which display to use. 00708 $display_id = panels_argument_get_display($panel_page->arguments, $panel_page->context); 00709 00710 panels_page_fetch_display($panel_page, $display_id); 00711 $display = $panel_page->display; 00712 00713 // Figure out if these contexts include a form; will be NULL if there 00714 // isn't one, or the context if there is. 00715 $form = panels_context_get_form($panel_page->context); 00716 00717 // This is the first point at which it is safe to add items to the display 00718 // as the argument handling, above, may choose which display is actually 00719 // used. 00720 $display->args = $args; 00721 $display->context = $panel_page->context; 00722 $display->keywords = $panel_page->keywords; 00723 $display->css_id = $panel_page->css_id; 00724 $display->owner = $panel_page; 00725 // unique id of this display's owner. 00726 $display->owner->id = $panel_page->name; 00727 $display->type = 'panel_page'; 00728 00729 // Set this as 'current' so that other stuff can utilize it. 00730 panels_page_get_current($panel_page); 00731 00732 if ($form) { 00733 $form->form['#theme'] = 'panels_page_render_form'; 00734 $form->form['#display'] = $display; 00735 $output .= drupal_render_form($form->form_id, $form->form); 00736 } 00737 else { 00738 $output .= panels_render_display($display); 00739 } 00740 00741 // set title afterward to ensure title is retained. 00742 if ($output == NULL) { 00743 return drupal_not_found(); 00744 } 00745 00746 if (!$display->hide_title && $title = filter_xss_admin(panels_page_get_title($panel_page, 'page', ''))) { 00747 drupal_set_title($title); 00748 } 00749 else { 00750 drupal_set_title(''); 00751 } 00752 00753 if ($panel_page->css) { 00754 panels_load_include('panels_page.css_filter', 'panels_page/'); 00755 $css = panels_page_filter_css(panels_page_disassemble_css($panel_page->css)); 00756 // If the custom css didn't survive filtering, don't bother adding it. 00757 if (!empty($css)) { 00758 drupal_set_html_head("<style type=\"text/css\" media=\"all\">" . panels_page_compress_css($css) . "</style>\n"); 00759 } 00760 } 00761 if ($panel_page->no_blocks) { 00762 print theme('page', $output, FALSE); 00763 } 00764 else { 00765 return $output; 00766 } 00767 }
| theme_panels_page_render_form | ( | $ | form | ) |
Theme function to render our panel as a form.
We need to do this so that the entire display is inside the form.
Definition at line 774 of file panels_page.module.
References panels_render_display().
00774 { 00775 $form['#children'] = panels_render_display($form['#display']); 00776 return theme('form', $form); 00777 }
1.5.6