You are here

public function GroupRoleController::save in Group 7

Save a group role.

Overrides EntityAPIControllerExportable::save

See also

EntityAPIController::save()

File

classes/group_role.controller.inc, line 41
Defines the Entity API CRUD class for group roles.

Class

GroupRoleController
Controller for group role entities.

Code

public function save($group_role, DatabaseTransaction $transaction = NULL) {
  $is_new = !empty($group_role->is_new);
  $is_special = in_array($group_role->name, array(
    'anonymous',
    'outsider',
    'member',
  ));

  // Invalidate the parent type's GroupRole cache whenever we save a new
  // group role or alter a special group role (anonymous, outsider or
  // member). The latter case is required because special group roles are
  // never actually saved to the db and thus need to be rebuilt after every
  // change to avoid serving outdated special roles from the cache.
  if ($is_new || $is_special) {
    $group_role
      ->invalidateTypeCache();
  }

  // If we save a special group role (anonymous, outsider or member), we
  // don't actually save the role but attach its permissions back onto the
  // group type.
  if ($is_special) {
    $key = $group_role->name . '_permissions';
    $group_type = group_type_load($group_role->type);
    $group_type->{$key} = $group_role->permissions;
    $group_type
      ->save();
    return;
  }

  // If we save a group role we call GroupRole::flagTypeCustom() which in turn
  // will check whether or not there is a parent group type that needs to be
  // flagged as ENTITY_CUSTOM.
  $group_role
    ->flagTypeCustom();

  // Add Internationalization module support.
  if (module_exists('i18n_string')) {
    i18n_string_object_update('group_role', $group_role);
  }
  return parent::save($group_role, $transaction);
}