You are here

function photos_access_update_8401 in Album Photos 6.0.x

Same name and namespace in other branches
  1. 8.5 photos_access/photos_access.install \photos_access_update_8401()
  2. 8.4 photos_access/photos_access.install \photos_access_update_8401()

Add collaborate column to {photos_access_user}.

File

photos_access/photos_access.install, line 91
Install, update, and uninstall functions for the Photos Access module.

Code

function photos_access_update_8401() {

  // @todo test update, update code, test migration...
  // @todo test, how will this affect migration?
  // - Either update migration or backport this update to 7.x.
  // Add collaborate column to {'photos_access_user'}.
  $schema = Database::getConnection()
    ->schema();
  $spec = [
    'type' => 'int',
    'size' => 'tiny',
    'length' => 1,
    'default' => 0,
  ];
  $schema
    ->addField('photos_access_user', 'collaborate', $spec);

  // Update {'photos_access_user'}.collaborate to match
  // {'photos_access_album'}.updateid.
  // Attempt to clean up {photos_access_album} duplicate entries.
  // Update {photos_access_user}.id to match the correct
  // {photos_access_album}.id for nid.
  $new_id = [];
  $db = \Drupal::database();
  $results = $db
    ->select('photos_access_album', 'a')
    ->fields('a')
    ->execute();
  foreach ($results as $result) {
    if (isset($new_id[$result->nid])) {
      $id = $new_id[$result->nid];

      // Update {photos_access_user}.id.
      $db
        ->update('photos_access_user')
        ->fields([
        'id' => $id,
        'collaborate' => $result->updateid,
      ])
        ->condition('id', $result->id)
        ->execute();

      // Make sure new records are not set to open by default.
      if ($result->viewid > 0) {
        $db
          ->update('photos_access_album')
          ->fields([
          'viewid' => $result->viewid,
        ])
          ->condition('id', $id)
          ->execute();
      }

      // Preserve album passwords.
      if ($result->pass != 1) {
        $db
          ->update('photos_access_album')
          ->fields([
          'pass' => $result->pass,
        ])
          ->condition('id', $id)
          ->execute();
      }

      // Delete duplicate entries in {photos_access_album}.
      $db
        ->delete('photos_access_album')
        ->condition('id', $result->id)
        ->execute();
    }
    else {
      $new_id[$result->nid] = $result->id;
      $db
        ->update('photos_access_user')
        ->fields([
        'collaborate' => $result->updateid,
      ])
        ->condition('id', $result->id)
        ->execute();
    }
  }

  // Remove updateid from {'photos_access_album'}.
  $schema
    ->dropField('photos_access_album', 'updateid');

  // Rebuild permissions.
  node_access_rebuild(TRUE);
}