You are here

function _subscriptions_content_type_form in Subscriptions 2.0.x

Same name and namespace in other branches
  1. 7 subscriptions_content.admin.inc \_subscriptions_content_type_form()

Build the Content Types subscriptions form at user/UID/subscriptions/type.

Parameters

array $form:

int $uid: ID of a user if >0 or of a role if <0.

Return value

array

1 call to _subscriptions_content_type_form()
subscriptions_content_page_type in subscriptions_content/subscriptions_content.module
Subscriptions page callback: Lists content types subscriptions.

File

subscriptions_content/subscriptions_content.admin.inc, line 251
Subscriptions Content module (admin functions).

Code

function _subscriptions_content_type_form(array $form, $uid) {
  $subscriptions = [];
  $bulk_op = empty($_SESSION['subscriptions']['bulk_op']) ? '' : $_SESSION['subscriptions']['bulk_op'];
  if ($bulk_op) {

    // No initialization for bulk subscription.
    $uid = -DRUPAL_AUTHENTICATED_RID;
  }
  else {
    $query = db_select('subscriptions', 's', [
      'fetch' => PDO::FETCH_ASSOC,
    ]);
    $nt_alias = $query
      ->join('node_type', 'nt', 's.value = nt.type');
    $result = $query
      ->fields('s', [
      'value',
      'send_interval',
      'author_uid',
      'send_comments',
      'send_updates',
    ])
      ->fields($nt_alias, [
      'type',
      'name',
    ])
      ->condition('s.module', 'node')
      ->condition('s.field', 'type')
      ->condition('s.recipient_uid', $uid)
      ->addTag('node_type_access')
      ->orderBy('s.author_uid')
      ->execute();
    foreach ($result as $s) {
      $subscriptions[$s['value']][$s['author_uid']] = $s;
    }
  }
  $unlisteds = variable_get('subscriptions_unlisted_content_types', []);

  /** @var array $blockeds */
  $blockeds = variable_get('subscriptions_blocked_content_types', []);
  $omits = array_merge($unlisteds, $blockeds);
  $form[0] = [
    '#theme' => 'subscriptions_form_table',
  ];
  $defaults = [];
  $tr = 't';
  foreach (node_type_get_types() as $type) {

    // Add the active subscriptions.
    $type_name = check_plain($type->name);
    if (in_array($type->type, $omits)) {
      if (user_access('subscribe to all content types') || user_access('administer site configuration')) {
        if (in_array($type->type, $blockeds)) {
          $type_name = '<span class="error" title="' . t('This content type is blocked.') . '">' . $type_name . '</span>&nbsp;' . SUBSCRIPTIONS_UNAVAILABLE;
        }
        else {
          $type_name = $type_name . '&nbsp;' . SUBSCRIPTIONS_UNAVAILABLE;
        }
      }
      else {
        continue;
      }
    }
    if (!isset($subscriptions[$type->type][-1])) {

      // author-less item is missing -- add it here:
      $subscriptions[$type->type][-1] = [
        'send_interval' => _subscriptions_get_setting('send_interval', $uid),
        'send_comments' => _subscriptions_get_setting('send_comments', $uid),
        'send_updates' => _subscriptions_get_setting('send_updates', $uid),
        'author_uid' => FALSE,
      ];
    }
    foreach ($subscriptions[$type->type] as $author_uid => $subscription) {
      subscriptions_form_helper($form[0], $defaults, $author_uid, $type->type, $type_name, $subscription);
    }
  }
  if (isset($form[0]['checkboxes'])) {
    $form[0]['defaults'] = [
      '#type' => 'value',
      '#value' => $defaults,
    ];
    subscriptions_form_column_filter($form[0], $uid);
  }
  else {
    $form = [
      [
        '#markup' => t('There are no available content types.'),
      ],
    ];
  }
  return $form;
}