- <?php
- * @file
- * Plugin to provide access control based upon entity bundle.
- */
- class EntityBundleLayoutAccess extends LayoutAccess {
-
-
- * @var string
- */
- protected $entity_type;
-
-
- * Constructor for a Layout access rule.
- */
- function __construct($plugin_name, array $data = array()) {
- parent::__construct($plugin_name, $data);
- $this->settings += array(
- 'bundles' => array()
- );
-
-
- $info = layout_get_access_info($plugin_name);
- $this->entity_type = $info['entity_type'];
- }
-
-
- * {@inheritdoc}
- */
- function form(&$form, &$form_state) {
- parent::form($form, $form_state);
-
- $options = array();
- $entity_info = entity_get_info($this->entity_type);
- foreach ($entity_info['bundles'] as $type => $info) {
- $options[$type] = check_plain($info['label']);
- }
-
- $form['bundles'] = array(
- '#title' => t('@entity @bundle', array('@entity' => $entity_info['label'], '@bundle' => $entity_info['bundle label'])),
- '#type' => 'checkboxes',
- '#options' => $options,
- '#default_value' => $this->settings['bundles'],
- );
- }
-
-
- * {@inheritdoc}
- */
- function formSubmit($form, &$form_state) {
- parent::formSubmit($form, $form_state);
- $this->settings['bundles'] = array_keys(array_filter($form_state['values']['bundles']));
- }
-
-
- * {@inheritdoc}
- */
- function summary() {
- $entity_info = entity_get_info($this->entity_type);
-
- $names = array();
- foreach (array_filter($this->settings['bundles']) as $bundle) {
- $names[] = check_plain($entity_info['bundles'][$bundle]['label']);
- }
-
- if (empty($names)) {
- return t('Entity is a specific type.');
- }
-
- return format_plural(count($names), '@entity is %bundles', '@entity is one of: %bundles', array('@entity' => $entity_info['bundle label'], '%bundles' => implode(', ', $names)));
- }
-
-
- * {@inheritdoc}
- */
- function checkAccess() {
- if (!$this->settings['bundles']) {
- return FALSE;
- }
-
-
- $entity = $this->contexts[$this->entity_type]->data;
-
-
-
- if (!is_object($entity)) {
- $entity = entity_load($this->entity_type, $entity);
- }
- $bundle = $entity->bundle();
- if (!in_array($bundle, $this->settings['bundles'])) {
- return FALSE;
- }
-
- return TRUE;
- }
- }