You are here

function private_files_download_permission_get_directory_form_submit in Private files download permission 7.2

(Form callback.) Submits the directory form.

File

./private_files_download_permission.module, line 361
Handles both module settings and its behaviour.

Code

function private_files_download_permission_get_directory_form_submit($form, &$form_state) {
  $transaction = db_transaction();
  try {

    // Retrieve form values.
    $did = $form_state['values']['did'];
    $path = $form_state['values']['path'];
    $bypass = $form_state['values']['bypass'];
    $grant_file_owners = $form_state['values']['grant_file_owners'];
    if (variable_get('private_files_download_permission_by_user_checks')) {
      $users = array();
    }
    $roles = array();
    foreach ($form_state['values'] as $key => $value) {
      if (variable_get('private_files_download_permission_by_user_checks')) {
        if (0 === strpos($key, 'user_')) {
          $uid = drupal_substr($key, drupal_strlen('user_'));
          $users[$uid] = $value;
        }
      }
      if (0 === strpos($key, 'role_')) {
        $rid = drupal_substr($key, drupal_strlen('role_'));
        $roles[$rid] = $value;
      }
    }

    // Write directory record.
    $directory_record = array(
      'did' => $did,
      'path' => $path,
      'bypass' => $bypass,
      'grant_file_owners' => $grant_file_owners,
    );
    if (NULL === $did) {
      drupal_write_record('private_files_download_permission_directory', $directory_record);
    }
    else {
      drupal_write_record('private_files_download_permission_directory', $directory_record, array(
        'did',
      ));
    }

    // Retrieve last record id.
    if (NULL === $did) {
      $did = $directory_record['did'];
    }

    // Delete old user permissions and write new ones.
    if (variable_get('private_files_download_permission_by_user_checks')) {
      db_delete('private_files_download_permission_directory_user')
        ->condition('did', $did)
        ->execute();
      foreach ($users as $uid => $value) {
        if (TRUE == $value) {
          db_insert('private_files_download_permission_directory_user')
            ->fields(array(
            'did' => $did,
            'uid' => $uid,
          ))
            ->execute();
        }
      }
    }

    // Delete old role permissions and write new ones.
    db_delete('private_files_download_permission_directory_role')
      ->condition('did', $did)
      ->execute();
    foreach ($roles as $rid => $value) {
      if (TRUE == $value) {
        db_insert('private_files_download_permission_directory_role')
          ->fields(array(
          'did' => $did,
          'rid' => $rid,
        ))
          ->execute();
      }
    }
  } catch (Exception $e) {
    $transaction
      ->rollback();
    drupal_set_message(t('An error occurred while saving directory to the control list. Possible duplication? Please check the log for details.'), 'error');
  }

  // Purge directory list from cache.
  drupal_static_reset('private_files_download_permission_get_directory_list');

  // Set form redirection.
  $form_state['redirect'] = 'admin/config/media/private-files-download-permission';
}