/*
* There are seven types of panels plugins at present: context, relationships,
* arguments, content_types, styles, layouts, cache; Panels provides an API that
* allows any module to implement these, but there's a starter set that comes
* with Panels itself. They're found in the various subdirectories that live under
* the Panels directory.
*
* All of them (but for our purposes more importantly, content types) start with
* a 'plugin declaration' function like this one. ALL this function does is return
* an associative array with a bunch of information for the Panels API to process.
* The Panels API looks for certain keys in that array - exactly which keys depends
* on the plugin type - and essentially treats the value in that key as a directive
* governing how the plugin should behave. Here's what all that concretely means
* for content types:
*
* Yes, there is some unnecessary duplication with this set of callbacks; they were
* implemented in this way in order to keep from changing the Panels2 API. They will
* be made consistent & elegant in Panels3.
*/
function panels_SAMPLE_CT_panels_content_types() {
$items['SAMPLE_CT'] =
array(
// title (string): SETTING. The title that will be used for this pane on the 'Add Content' modal
// form, and in the display content editor in general. This is a purely internal setting;
// normal users will never see it.
'title' =>
t('Sample Content Type'),
// weight (int): SETTING. Standard drupal weighting concept at work here; all it determines is the
// position of this content type's icon relative to the other content type icons on the
// 'Add Content' modal form.
'weight' => -10,
// single (bool): SETTING. Indicates that this content type plugin provides only a single content
// type. This doesn't have to be included, it's almost more of a note to humans than to
// the Panels API. Check out panels_admin_content_types_block() to see how one callback
// can be used to define multiple content types (technically, types AND subtypes).
// Defaults to FALSE.
'single' => TRUE,
// content_types (string): CALLBACK. The Panels API calls this function to get
// basic information about the content types this plugin provides. See the callback
// for details.
'content_types' => 'panels_admin_content_types_SAMPLE_CT',
// render callback (string): CALLBACK. The Panels API calls this function when it's
// trying to render the pane for viewing. See the callback for details.
'render callback' => 'panels_content_SAMPLE_CT',
// add callback (string): CALLBACK. This function gets called when the user
// clicks an icon to add a new pane (from the 'Add Content' modal form).
// See the callback for details; note that it is often possible to use the
// same, or nearly the same, callback for this as for the 'edit callback.'
'add callback' => 'panels_admin_add_SAMPLE_CT',
// edit callback (string): CALLBACK. This function gets called when the user
// clicks the 'Configure' button; it partially governs what appears on the
// configuration modal form that pops up.
'edit callback' => 'panels_admin_edit_SAMPLE_CT',
// (add|edit) validate callback (string): CALLBACK. Defines a callback to be
// used as a FAPI validator, but only for the $form_values set by form items
// defined in the 'add/edit callback'.
'add validate callback' => 'panels_admin_add_validate_SAMPLE_CT',
'edit validate callback' => 'panels_admin_edit_validate_SAMPLE_CT',
// (add|edit) submit callback (string): CALLBACK. Defines a callback to be
// used as a FAPI submit handler, but only for the $form_values set by form
// items defined in the 'add/edit callback'.
'add submit callback' => 'panels_admin_add_submit_SAMPLE_CT',
'edit submit callback' => 'panels_admin_edit_submit_SAMPLE_CT',
// title callback (string): CALLBACK. This function determines the title that
// the pane will use, both in the admin interface and for general viewing. Note
// that this can almost always be overridden
'title callback' => 'panels_admin_title_SAMPLE_CT',
// visibility control (string): CALLBACK. This function gets called at the same
// time as the add/edit callbacks. Use it to create a form widget that allowing the
// user to select values that will make sense when passed to your 'visibility check'
// callback.
'visibility control' => 'panels_admin_visibility_control_SAMPLE_CT',
// visibility submit (string): CALLBACK. The custom submit handler you define
// for your content type's visibility settings. This function is passed
// whatever selection the user makes on the form widget defined by the
// 'visibility control' callback. Implement this if you need to wrangle that
// data before the Panels API's data storage routines kick in, or if the API's
// built-in routines are inadequate and you need to build a custom storage
// mechanism. See panels_content_config_form() and panels_content_config_form_submit()
// to grok the logic behind if/when/how this callback is triggered.
'visibility submit' => 'panels_admin_visibility_submit_SAMPLE_CT',
// visibility check (string): CALLBACK. The Panels API calls this function during
// the pane accessibility checking routine - that's done in panels_pane_access().
// Define the logic governing your content type's visibility here.
'visibility check' => 'panels_content_visibility_SAMPLE_CT',
// visibility serialize (bool): SETTING. Set this to 'true' if the contents of
// $pane->visibility need to be serialized before being written to the database.
// Set this to TRUE if, for example, your visibility form widget uses checkboxes
// (and therefore generates an array), as opposed to if your widget uses radios
// (and therefore generates an integer that can be stored directly). See
// panels_content_config_form_submit() and panels_save_display() to better
// understand how this works.
// Defaults to FALSE.
'visibility serialize' => TRUE,
// role-based access (bool): SETTING. Boolean setting to indicate whether you
// want the your content type to utilize the Panels API's built-in access
// system, which is based on drupal user roles. Set this to FALSE to disable
// role-based access. Note that this will automatically be set to FALSE if
// a 'visibility control' callback is defined.
// Defaults to TRUE.
'role-based access' => FALSE,
// roles and visibility (bool): SETTING. If you want your content type to use
// both your custom visibility logic and Panels' built-in roles-based access
// system, then set this to TRUE. Setting 'role-based access' to TRUE is not
// sufficient; see panels_ajax_ct_preconfigure() to understand how this works.
// If you use both systems, panels_pane_access() will AND the results together
// when determining pane visibility.
'roles and visibility' => TRUE,
// form control (string): CALLBACK. If the other callbacks governing the add/edit
// form ('add/edit callback', 'visibility control') aren't enough for your needs,
// then implement this callback. The callback will be passed a fully-built $form object
// by reference, and you can alter it as you see fit. Use with caution.
'form control' => 'panels_admin_form_control_node_content',
);
return $items;
}