public function PanelizerEntityDefault::settings_form in Panelizer 7.3
Same name and namespace in other branches
- 7.2 plugins/entity/PanelizerEntityDefault.class.php \PanelizerEntityDefault::settings_form()
Add entity specific form to the Panelizer settings form.
This is primarily to allow bundle selection per entity type.
Overrides PanelizerEntityInterface::settings_form
1 call to PanelizerEntityDefault::settings_form()
- PanelizerEntityComment::settings_form in plugins/
entity/ PanelizerEntityComment.class.php - Add entity specific form to the Panelizer settings form.
1 method overrides PanelizerEntityDefault::settings_form()
- PanelizerEntityComment::settings_form in plugins/
entity/ PanelizerEntityComment.class.php - Add entity specific form to the Panelizer settings form.
File
- plugins/
entity/ PanelizerEntityDefault.class.php, line 2966 - Base class for the Panelizer Entity plugin.
Class
- PanelizerEntityDefault
- Base class for the Panelizer Entity plugin.
Code
public function settings_form(&$form, &$form_state) {
// Add entity settings
// @todo change theme function name
$form['entities'][$this->entity_type] = array(
'#theme' => 'panelizer_settings_page_table',
'#header' => array(
array(
'data' => $this
->entity_bundle_label(),
'style' => 'white-space:nowrap;',
),
t('Panelize'),
t('Substitute view mode'),
t('Provide initial display'),
t('Allow panel choice'),
t('Default panel'),
t('Update existing entities to use this display'),
array(
'data' => t('Operations'),
'style' => 'white-space:nowrap;',
),
),
'#columns' => array(
'title',
'status',
'substitute',
'default',
'choice',
'selection',
'default revert',
'links',
),
);
$entity_info = entity_get_info($this->entity_type);
$bundles = $entity_info['bundles'];
drupal_alter('panelizer_default_types', $bundles, $this->entity_type);
foreach ($bundles as $bundle => $bundle_info) {
$view_mode_settings = array();
if (!empty($bundle)) {
$view_mode_settings = field_view_mode_settings($this->entity_type, $bundle);
}
$base_url = 'admin/structure/panelizer/' . $this->entity_type . '/' . $bundle;
$bundle_id = str_replace(array(
'][',
'_',
' ',
), '-', '#edit-entities-' . $this->entity_type . '-' . $bundle . '-0');
// Add the widgets that apply only to the bundle.
$form['entities'][$this->entity_type][$bundle][0]['title'] = array(
'#markup' => '<strong>' . $bundle_info['label'] . '</strong>',
);
$form['entities'][$this->entity_type][$bundle][0]['status'] = array(
'#type' => 'checkbox',
'#title' => t('Panelize: @label', array(
'@label' => $bundle_info['label'],
)),
'#title_display' => 'invisible',
'#default_value' => !empty($this->plugin['bundles'][$bundle]['status']),
);
$form['entities'][$this->entity_type][$bundle][0]['help'] = array(
'#type' => 'hidden',
'#default_value' => !empty($this->plugin['bundles'][$bundle]['help']) ? $this->plugin['bundles'][$bundle]['help'] : '',
);
// Set proper allowed content link for entire bundle based on status
if (!empty($this->plugin['bundles'][$bundle]['status'])) {
$links_array = array();
if (!empty($bundle_info['admin']['real path'])) {
$links_array['displays'] = array(
'title' => t('manage display'),
'href' => $bundle_info['admin']['real path'] . '/display',
);
}
$links_array['settings'] = array(
'title' => t('allowed content'),
'href' => $base_url . '/allowed',
);
$links = theme('links', array(
'links' => $links_array,
'attributes' => array(
'class' => array(
'links',
'inline',
),
),
));
}
else {
$links = t('Save to access allowed content');
}
$form['entities'][$this->entity_type][$bundle][0]['links']['basic'] = array(
'#type' => 'item',
'#title' => $links,
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
),
),
);
$view_modes = $this
->get_available_view_modes($bundle);
foreach ($view_modes as $view_mode => $view_mode_label) {
$view_mode_info = $this->plugin['view modes'][$view_mode];
$base_id = str_replace(array(
'][',
'_',
' ',
), '-', '#edit-entities-' . $this->entity_type . '-' . $bundle . '-' . $view_mode);
$base_url = 'admin/structure/panelizer/' . $this->entity_type . '/' . $bundle . '.' . $view_mode;
if (!empty($this->plugin['bundles'][$bundle]['view modes'][$view_mode]) && is_array($this->plugin['bundles'][$bundle]['view modes'][$view_mode])) {
$settings = $this->plugin['bundles'][$bundle]['view modes'][$view_mode];
}
else {
$settings = array(
'status' => FALSE,
'default' => FALSE,
'choice' => FALSE,
);
}
if (empty($view_mode_info['panelizer special'])) {
$form['entities'][$this->entity_type][$bundle][$view_mode]['title'] = array(
'#markup' => ' ' . $view_mode_label,
);
}
else {
$form['entities'][$this->entity_type][$bundle][$view_mode]['title'] = array(
'#markup' => '<strong>' . $bundle_info['label'] . '</strong>',
);
}
$form['entities'][$this->entity_type][$bundle][$view_mode]['status'] = array(
'#type' => 'checkbox',
'#default_value' => !empty($settings['status']),
'#title' => t('Panelize: @label, @bundle', array(
'@label' => $bundle_info['label'],
'@bundle' => $view_mode_label,
)),
'#title_display' => 'invisible',
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
),
),
);
$options = array(
'' => t('- Ignore this option -'),
) + $view_modes;
unset($options[$view_mode]);
$form['entities'][$this->entity_type][$bundle][$view_mode]['substitute'] = array(
'#type' => 'select',
'#options' => $options,
'#default_value' => $this
->get_substitute($view_mode, $bundle),
'#title' => t('Substitute view mode: @label, @bundle', array(
'@label' => $bundle_info['label'],
'@bundle' => $view_mode_label,
)),
'#title_display' => 'invisible',
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
),
),
);
$form['entities'][$this->entity_type][$bundle][$view_mode]['default'] = array(
'#type' => 'checkbox',
'#default_value' => !empty($settings['default']),
'#title' => t('Provide initial display: @label, @bundle', array(
'@label' => $bundle_info['label'],
'@bundle' => $view_mode_label,
)),
'#title_display' => 'invisible',
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-substitute' => array(
'value' => '',
),
),
),
);
$form['entities'][$this->entity_type][$bundle][$view_mode]['choice'] = array(
'#type' => 'checkbox',
'#default_value' => !empty($settings['choice']),
'#title' => t('Allow panel choice: @label, @bundle', array(
'@label' => $bundle_info['label'],
'@bundle' => $view_mode_label,
)),
'#title_display' => 'invisible',
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-substitute' => array(
'value' => '',
),
),
),
);
// Obtain a list of all available panels for this view mode / bundle.
$panelizers = $this
->get_default_panelizer_objects($bundle . '.' . $view_mode);
$options = array();
if (!empty($panelizers)) {
foreach ($panelizers as $name => $panelizer) {
// Don't show disabled displays.
if (empty($panelizer->disabled)) {
$options[$name] = $panelizer->title;
}
}
}
if (!empty($options)) {
ksort($options);
}
// The default display to be used if nothing found.
$default_name = implode(':', array(
$this->entity_type,
$bundle,
'default',
));
$variable_name = 'panelizer_' . $this->entity_type . ':' . $bundle . ':' . $view_mode . '_selection';
if ($view_mode != 'page_manager') {
$default_name .= ':' . $view_mode;
}
// If this has not been set previously, use the 'default' as the default
// selection.
$default_value = variable_get($variable_name, FALSE);
if (empty($default_value)) {
$default_value = $default_name;
}
// First time this is displayed there won't be any defaults assigned, so
// show a placeholder indicating the page needs to be saved before they
// will show.
if (count($options) == 0) {
if ($default_value == $default_name) {
$options = array(
'' => t('Save to access selector'),
);
}
else {
$options = array(
'' => t('No displays created yet'),
);
}
}
// Indicate which item is actually the default.
if (count($options) > 1 && isset($options[$default_value])) {
$options[$default_value] .= ' (' . t('default') . ')';
}
$form['entities'][$this->entity_type][$bundle][$view_mode]['selection'] = array(
'#type' => 'select',
'#options' => $options,
'#default_value' => $default_value,
'#title' => t('Default panel: @label, @bundle', array(
'@label' => $bundle_info['label'],
'@bundle' => $view_mode_label,
)),
'#title_display' => 'invisible',
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-substitute' => array(
'value' => '',
),
),
),
'#disabled' => count($options) == 1,
);
$form['entities'][$this->entity_type][$bundle][$view_mode]['default revert'] = array(
'#type' => 'checkbox',
'#default_value' => FALSE,
'#title' => t('Update existing entities to use this display: @label, @bundle', array(
'@label' => $bundle_info['label'],
'@bundle' => $view_mode_label,
)),
'#title_display' => 'invisible',
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-substitute' => array(
'value' => '',
),
),
),
'#disabled' => count($options) == 1,
);
$form['entities'][$this->entity_type][$bundle][$view_mode]['links'] = array(
'#prefix' => '<div class="container-inline">',
'#suffix' => '</div>',
);
// Panelize is enabled and a default display will be provided.
if (!empty($settings['status']) && !empty($settings['default']) && empty($settings['choice'])) {
$links_array = array();
foreach (panelizer_operations() as $path => $operation) {
$links_array[$path] = array(
'title' => $operation['link title'],
'href' => $base_url . '/' . $path,
);
}
$links = theme('links', array(
'links' => $links_array,
'attributes' => array(
'class' => array(
'links',
'inline',
),
),
));
}
else {
$links = t('Save to access default panel');
}
$form['entities'][$this->entity_type][$bundle][$view_mode]['links']['default'] = array(
'#type' => 'item',
'#title' => $links,
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-default' => array(
'checked' => TRUE,
),
$base_id . '-choice' => array(
'checked' => FALSE,
),
$base_id . '-substitute' => array(
'value' => '',
),
),
),
);
if (!empty($settings['status']) && !empty($settings['choice'])) {
$links_array = array(
'list' => array(
'title' => t('list'),
'href' => $base_url . '/list',
),
);
$links = theme('links', array(
'links' => $links_array,
'attributes' => array(
'class' => array(
'links',
'inline',
),
),
));
}
else {
$links = t('Save to access display list');
}
$form['entities'][$this->entity_type][$bundle][$view_mode]['links']['default2'] = array(
'#type' => 'item',
'#title' => $links,
'#states' => array(
'show' => array(
$bundle_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-status' => array(
'checked' => TRUE,
),
$base_id . '-choice' => array(
'checked' => TRUE,
),
$base_id . '-substitute' => array(
'value' => '',
),
),
),
);
// Additional messages if this display is enabled.
if (empty($form_state['input']) && $view_mode == 'page_manager' && !empty($settings['status'])) {
$this
->check_page_manager_status();
}
}
}
$form['#attached'] = array(
'js' => array(
ctools_attach_js('states-show'),
),
);
}