You are here

function apigee_edge_apiproduct_rbac_form_apigee_edge_api_product_access_control_form_submit in Apigee Edge 8

Saves RBAC settings on the API product access control form.

See also

apigee_edge_apiproduct_rbac_form_apigee_edge_api_product_access_control_form_alter()

1 string reference to 'apigee_edge_apiproduct_rbac_form_apigee_edge_api_product_access_control_form_submit'
apigee_edge_apiproduct_rbac_form_apigee_edge_api_product_access_control_form_alter in modules/apigee_edge_apiproduct_rbac/apigee_edge_apiproduct_rbac.module
Implements hook_form_FORM_ID_alter().

File

modules/apigee_edge_apiproduct_rbac/apigee_edge_apiproduct_rbac.module, line 245
Copyright 2018 Google Inc.

Code

function apigee_edge_apiproduct_rbac_form_apigee_edge_api_product_access_control_form_submit(array $form, FormStateInterface $form_state) {
  $config = Drupal::configFactory()
    ->getEditable(APIGEE_EDGE_APIPRODUCT_RBAC_CONFIG_SETTINGS);
  $config
    ->set('attribute_name', $form_state
    ->getValue([
    'rbac',
    'attribute_name',
  ]))
    ->set('grant_access_if_attribute_missing', (bool) $form_state
    ->getValue([
    'rbac',
    'grant_access_if_attribute_missing',
  ], FALSE))
    ->save();

  /** @var \Apigee\Edge\Api\Management\Controller\ApiProductControllerInterface $controller */
  $rid_product_map = [];
  foreach ($form_state
    ->getValue([
    'rbac',
    'role_names',
  ], []) as $rid => $name) {

    // Do not store roles with by pass permission in the attribute
    // unnecessarily.
    if (!$form_state
      ->getValue([
      'rbac',
      'roles_with_bypass',
      $rid,
    ], FALSE)) {
      $rid_product_map[$rid] = array_filter($form_state
        ->getValue([
        'rbac',
        $rid,
      ], []));
    }
  }
  $product_rid_map = [];
  foreach ($rid_product_map as $rid => $products) {
    foreach (array_keys($products) as $product) {
      $product_rid_map[$product][$rid] = $rid;
    }
  }
  _apigee_edge_apiproduct_rbac_batch($form_state
    ->getValue([
    'rbac',
    'api_products',
    'product_names',
  ]), $product_rid_map, $config
    ->get('attribute_name'), $form_state
    ->getValue([
    'rbac',
    'original_attribute_name',
  ]));
}