You are here

function enterprise_base_apps_structures_blocks_form in Enterprise Base 7

Same name and namespace in other branches
  1. 7.3 enterprise_base.admin.inc \enterprise_base_apps_structures_blocks_form()
1 string reference to 'enterprise_base_apps_structures_blocks_form'
enterprise_base_menu in ./enterprise_base.module

File

./enterprise_base.admin.inc, line 57
Administration pages for widget settings.

Code

function enterprise_base_apps_structures_blocks_form($form, &$form_state, $app_structures) {
  drupal_add_css(drupal_get_path('module', 'enterprise_base') . '/css/enterprise_base.admin.css');
  $form = array();
  $theme = variable_get('theme_default', 'bartik');

  // Fetch and sort blocks.
  require_once drupal_get_path('module', 'block') . '/block.admin.inc';
  $app_block_deltas = array();
  foreach ($app_structures['blocks'] as $key => $block_struc) {
    list($module, $delta) = explode(':', $key);

    // check if views is using a hash
    if ($module == 'views' && strlen($delta) >= 32) {
      $hash = md5($delta);
      $app_structures['blocks']['views:' . $hash] = $app_structures['blocks'][$key];
      $delta = $hash;
      unset($app_structures['blocks'][$key]);
    }
    $app_block_deltas[$delta] = 1;
  }
  $blocks = block_admin_display_prepare_blocks($theme);
  $app_blocks = array();
  foreach ($blocks as $block) {
    if (isset($app_block_deltas[$block['delta']])) {
      $app_blocks[] = $block;
    }
  }

  //dsm($blocks);

  //dsm($app_structures);

  //dsm($app_blocks);
  $block_regions = system_region_list($theme);
  $form['app_structures'] = array(
    '#type' => 'value',
    '#value' => $app_structures,
  );
  $form['#tree'] = TRUE;
  foreach ($app_blocks as $i => $block) {
    $key = $block['module'] . '_' . $block['delta'];
    $app_blocks_struc = $app_structures['blocks'][$block['module'] . ':' . $block['delta']];
    $block['node_types'] = db_query("SELECT type FROM {block_node_type} WHERE module = :module AND delta = :delta", array(
      ':module' => $block['module'],
      ':delta' => $block['delta'],
    ))
      ->fetchCol();
    $result = db_query("SELECT * FROM {block_views} WHERE module = :module AND delta = :delta", array(
      ':module' => $block['module'],
      ':delta' => $block['delta'],
    ))
      ->fetchAll();
    $block['views'] = array();
    if (is_array($result)) {
      foreach ($result as $row) {
        $block['views'][] = "{$row->view}:{$row->display}";
      }
    }
    $block['pages_array'] = array();
    if (trim($block['pages'])) {
      $block['pages_array'] = explode("\n", $block['pages']);
    }
    $form['blocks'][$key] = array(
      '#type' => 'fieldset',
      '#title' => t('@block', array(
        '@block' => $block['info'],
      )),
      '#description' => isset($app_blocks_struc['description']) ? $app_blocks_struc['description'] : '',
    );
    $form['blocks'][$key]['module'] = array(
      '#type' => 'value',
      '#value' => $block['module'],
    );
    $form['blocks'][$key]['delta'] = array(
      '#type' => 'value',
      '#value' => $block['delta'],
    );
    $form['blocks'][$key]['theme'] = array(
      '#type' => 'value',
      '#value' => $theme,
    );
    $form['blocks'][$key]['weight'] = array(
      '#type' => 'value',
      '#value' => $block['weight'],
    );
    $form['blocks'][$key]['region'] = array(
      '#type' => 'select',
      '#default_value' => $block['region'] != BLOCK_REGION_NONE ? $block['region'] : NULL,
      '#empty_value' => BLOCK_REGION_NONE,
      '#title' => t('Region'),
      '#options' => $block_regions,
    );
    $options = array();
    $defaults = array();
    $checks = array(
      'path',
      'node_type',
      'views',
    );
    $custom = $block;
    if (isset($app_blocks_struc['visibility']) && !empty($app_blocks_struc['visibility'])) {
      foreach ($app_blocks_struc['visibility'] as $k => $b) {
        $options[$k] = $b['title'];
        $b += array(
          'path' => array(
            'pages' => array(),
            'visibility' => 0,
          ),
          'node_type' => array(
            'types' => array(),
          ),
          'views' => array(
            'views' => array(),
          ),
        );
        $bc = $b;

        //dsm($b);

        //dsm($block);
        if ($b['path']['visibility'] == $block['visibility']) {
          foreach ($block['pages_array'] as $i => $page) {
            if ($bci = array_search($page, $b['path']['pages'])) {
              unset($bc['path']['pages'][$bci]);
              unset($custom['pages'][$i]);
            }
          }
        }
        foreach ($block['node_types'] as $i => $type) {

          //dsm($type);
          $bci = array_search($type, $b['node_type']['types']);
          if ($bci !== FALSE) {

            //dsm($bci);
            unset($bc['node_type']['types'][$bci]);
            unset($custom['node_types'][$i]);
          }
        }
        foreach ($block['views'] as $i => $view) {
          $bci = array_search($view, $b['views']['views']);
          if ($bci !== FALSE) {
            unset($bc['views']['views'][$bci]);
            unset($custom['views'][$i]);
          }
        }

        //dsm($bc);
        if (empty($bc['path']['pages']) && empty($bc['node_type']['types']) && empty($bc['views']['views'])) {
          $defaults[] = $k;
        }
      }

      //dsm($custom);

      //dsm($options);
      $description_extra = '';
      if (!empty($custom['pages_array']) || !empty($custom['node_types']) || !empty($custom['views'])) {
        $options['custom'] = t('Keep existing custom settings');
        $defaults[] = 'custom';
        $custom_preset = array(
          'path' => array(
            'pages' => $custom['pages_array'],
            'visibility' => 0,
          ),
          'node_type' => array(
            'types' => $custom['node_types'],
          ),
          'views' => array(
            'views' => $custom['views'],
          ),
        );
        $form['blocks'][$key]['custom_preset'] = array(
          '#type' => 'value',
          '#value' => $custom_preset,
        );
        $description_extra = ' ' . t('There are some existing custom visibility settings. These settings may conflict with presets. To keep the existing settings leave "Keep existing..." option selected.');
      }
      if ($block['region'] == -1 && isset($app_blocks_struc['defaults']['visibility'])) {
        $defaults = $app_blocks_struc['defaults']['visibility'];
      }
      $description_extra .= ' ' . t('For advanced settings see the !link.', array(
        '!link' => l(t('block configure form'), 'admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', array(
          'attributes' => array(
            'target' => '_blank',
          ),
        )),
      ));
      $form['blocks'][$key]['visiblity_presets'] = array(
        '#type' => 'checkboxes',
        '#default_value' => $defaults,
        '#title' => t('Visiblity'),
        '#options' => $options,
        '#description' => t('Use the check boxes to display the block only on specific pages within your site. Leave all selections unchecked to show on all pages.') . $description_extra,
        '#attributes' => array(
          'class' => array(
            'scrollable',
          ),
        ),
      );
      $form['blocks'][$key]['visiblity_presets_default'] = array(
        '#type' => 'value',
        '#value' => $defaults,
      );
    }
  }
  $form['blocks']['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Save',
  );

  // Use the default block admin form submit.

  //$form['#submit'][] = 'enterprise_base_apps_structures_blocks_form_submit';

  //$form['#submit'][] = 'block_admin_display_form_submit';
  return $form;
}