You are here

permission_csv_export.inc in Permissions Csv Export 7

Menu callbacks and other related code.

File

includes/permission_csv_export.inc
View source
<?php

/**
 * @file
 * Menu callbacks and other related code.
 */

/**
 * Menu callback for csv import file logs.
 *
 * @return string
 *   Table formatted output in html.
 */
function permission_csv_export_file_logs() {
  $roles = user_roles();
  $header = [
    'S.N.',
    'Filename',
    'Imported By',
    'Status',
    'Processed on',
    'Import on',
    'Imported for',
    'Download',
  ];
  $data = [];
  $result = db_query("SELECT id, fid, uid, import_roles, status, created, updated FROM {permissions_csv_export_logs} order by updated")
    ->fetchAll();
  if (count($result)) {
    $i = 1;
    foreach ($result as $value) {
      $url = ($uri = permission_csv_export_get_file_uri_from_fid($value->fid)) && file_exists(drupal_realpath($uri)) ? urldecode(file_create_url($uri)) : '';
      $username = db_query("select name from {users} where uid = :uid", [
        ':uid' => $value->uid,
      ])
        ->fetchField();
      $status = permission_csv_export_get_file_status($value->status);
      $download = l(t('Download'), $url, [
        'attributes' => [
          'target' => '_blank',
        ],
      ]);
      $imported_for = unserialize($value->import_roles);
      foreach ($imported_for as $k => $rid) {
        $imported_for[$k] = $roles[$rid];
      }
      $data[] = [
        $i,
        basename($url),
        $username,
        $status,
        date('m-d-Y h:i:s', $value->created),
        date('m-d-Y h:i:s', $value->updated),
        implode("<br />", $imported_for),
        $download,
      ];
      $i++;
    }
    $output = '<div class="action-links"><p>' . l(t("Delete All Logs"), PERMISSION_CSV_EXPORT_DELETE_LOGS) . '</p></div>';
    $output .= theme('table', [
      'header' => $header,
      'rows' => $data,
    ]);
    return $output;
  }
  return "<h3>There is no import log available right now.</h3>";
}

/**
 * Logs delete confirm form.
 *
 * @see permission_csv_export_log_delete_confirm_submit
 */
function permission_csv_export_log_delete_confirm($form) {
  return confirm_form($form, t('Are you sure you want to delete all logs, remember you will not able to see any logs after this.'), PERMISSION_CSV_EXPORT_LOGS_MENU, t('This action cannot be undone.'), t('Delete'), t('Cancel'));
}

/**
 * Submit callback for logs confirm delete form.
 *
 * @see permission_csv_export_log_delete_confirm_validate
 */
function permission_csv_export_log_delete_confirm_submit($form, &$form_state) {
  db_truncate('permissions_csv_export_logs')
    ->execute();
  drupal_set_message(t('All import csv logs deleted successfully.'));
  drupal_goto(PERMISSION_CSV_EXPORT_LOGS_MENU);
}

/**
 * Form constructor for revert permissions form.
 *
 * @see permission_csv_export_revert_permissions_form_submit()
 *
 * @ingroup forms
 */
function permission_csv_export_revert_permissions_form($form, &$form_state) {
  $is_backup_exist = permission_csv_export_get_number_of_results('permissions_csv_export_last_bakup');
  $form['pce'] = [
    '#type' => 'fieldset',
    '#title' => t('Revert last active permissions'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
  ];
  if ($is_backup_exist) {
    $form['pce']['info'] = [
      '#markup' => "<p>If you want to revert the last active permissions then please click on 'Revert Permissions', and if you want to download the last active permissions then click on 'Download as CSV'.</p>",
    ];
    $form['pce']['submit'] = [
      '#type' => 'submit',
      '#value' => t('Revert Permissions'),
    ];
    $form['pce']['download'] = [
      '#type' => 'submit',
      '#value' => t('Download as CSV'),
    ];
  }
  else {
    $form['pce']['info'] = [
      '#markup' => "<p>There is no backup found in the system right now.</p>",
    ];
  }
  return $form;
}

/**
 * Submit callback of permission revert form.
 *
 * @see permission_csv_export_revert_permissions_form
 */
function permission_csv_export_revert_permissions_form_submit($form, $form_state) {
  $results = permission_csv_export_get_number_of_results('permissions_csv_export_last_bakup');
  if ($form_state['values']['op'] == 'Download as CSV') {
    $roles = user_roles();
    if (count($results)) {
      $csv_header = [
        'permission',
      ];
      $query = db_select('permissions_csv_export_last_bakup');
      $query
        ->fields('permissions_csv_export_last_bakup', [
        'rids',
      ]);
      $query
        ->range(0, 1);
      $rids = array_keys(unserialize($query
        ->execute()
        ->fetchField()));
      foreach ($rids as $value) {
        $csv_header = array_merge($csv_header, [
          $roles[$value],
        ]);
      }
      $csv_data = [];
      $query = db_select('permissions_csv_export_last_bakup');
      $query
        ->fields('permissions_csv_export_last_bakup');
      $rows = $query
        ->execute()
        ->fetchAll();
      foreach ($rows as $value) {
        $row_data = [
          $value->permission,
        ];
        $rids = unserialize($value->rids);
        foreach ($csv_header as $key => $header) {
          if ($header == 'permission') {
            continue;
          }
          $row_data[$key] = $rids[array_search($header, $roles)];
        }
        $csv_data[] = $row_data;
      }
      permission_csv_export_generate_csv(array_merge([
        $csv_header,
      ], $csv_data), PERMISSION_CSV_EXPORT_BACKUP_FILENAME);
    }
  }
  else {
    for ($i = 0; $i < $results;) {
      $start = $i;
      $i = $results < $i + PERMISSION_CSV_EXPORT_IMPORT_PROCESS_LIMIT ? $results : $i + PERMISSION_CSV_EXPORT_IMPORT_PROCESS_LIMIT;
      $rows = permission_csv_export_get_results_from_table('permissions_csv_export_last_bakup', $start, $i);
      $operations_permissions[] = [
        'permission_csv_export_revert_permissions_batch_processing',
        [
          $rows,
        ],
      ];
    }
    db_truncate('permissions_csv_export_last_bakup')
      ->execute();

    // Once everything is gathered and ready to be processed.
    $batch = [
      'title' => t('Reverting Permissions...'),
      'operations' => $operations_permissions,
      'finished' => 'permission_csv_export_revert_permissions_batch_processing_finished',
      'error_message' => t('The revert permissions has encountered an error.'),
      'progress_message' => t('Reverted @current of @total rows.'),
      'file' => drupal_get_path('module', 'permission_csv_export') . '/includes/permission_csv_export.inc',
    ];
    batch_set($batch);
    db_truncate('permissions_csv_export_data')
      ->execute();
  }
}

/**
 * Batch function to revert permissions.
 *
 * @see permission_csv_export_revert_permissions_form_submit()
 */
function permission_csv_export_revert_permissions_batch_processing($data) {
  if (count($data)) {
    $rid_revoke = [];
    $rid_grant = [];
    foreach ($data as $value) {
      $rids = unserialize($value->rids);
      foreach ($rids as $rid => $access) {
        if ($access == 'Y' || $access == 'y' || $access == 1) {
          $rid_grant[$rid][] = $value->permission;
        }
        if ($access == 'N' || $access == 'n' || $access == 0) {
          $rid_revoke[$rid][] = $value->permission;
        }
      }
    }
    foreach ($rid_revoke as $rid => $permissions) {
      user_role_revoke_permissions($rid, $permissions);
    }
    foreach ($rid_grant as $rid => $permissions) {
      user_role_grant_permissions($rid, $permissions);
    }
  }
}

/**
 * This function runs when the batch processing will completed.
 *
 * @see permission_csv_export_revert_permissions_form_submit()
 */
function permission_csv_export_revert_permissions_batch_processing_finished() {
  drupal_set_message(t('Permissions reverted Successfully'));
}

Functions

Namesort descending Description
permission_csv_export_file_logs Menu callback for csv import file logs.
permission_csv_export_log_delete_confirm Logs delete confirm form.
permission_csv_export_log_delete_confirm_submit Submit callback for logs confirm delete form.
permission_csv_export_revert_permissions_batch_processing Batch function to revert permissions.
permission_csv_export_revert_permissions_batch_processing_finished This function runs when the batch processing will completed.
permission_csv_export_revert_permissions_form Form constructor for revert permissions form.
permission_csv_export_revert_permissions_form_submit Submit callback of permission revert form.