You are here

function campaignmonitor_admin_settings_lists in Campaign Monitor 7

Same name and namespace in other branches
  1. 8 includes/campaignmonitor_lists.admin.inc \campaignmonitor_admin_settings_lists()

Builds an overview table with basic information about the list.

Adds action links that can be used to update/delete lists.

Return value

string Rendered output.

1 string reference to 'campaignmonitor_admin_settings_lists'
campaignmonitor_menu in ./campaignmonitor.module
Implements hook_menu().

File

includes/campaignmonitor_lists.admin.inc, line 16
Manage the different Campaign Monitor lists.

Code

function campaignmonitor_admin_settings_lists() {
  $account = variable_get('campaignmonitor_account', FALSE);
  if (!$account) {
    drupal_set_message(t('You have not entered your account information yet, hence lists from Campaign Monitor can not be downloaded.'), 'error');
    return '';
  }

  // Download list information from Campaign Monitor.
  $cm = CampaignMonitor::getConnector();
  $lists = $cm
    ->getLists();
  $error = $cm
    ->getLatestError();
  if ($error['code'] != 1) {
    drupal_set_message($error['message'], 'error');
  }
  $header = [
    [
      'data' => t('Title'),
      'field' => 'title',
      'sort' => 'asc',
    ],
    [
      'data' => t('List ID'),
      'field' => 'id',
    ],
    [
      'data' => t('Subscribed / Unsubscribed'),
      'field' => 'status',
    ],
    [
      'data' => t('Operations'),
      'field' => 'Operations',
    ],
  ];
  $rows = [];
  if ($lists) {
    foreach ($lists as $id => $list) {

      // Define supported operations.
      $operations = [
        'Edit' => l(t('Edit'), 'admin/config/services/campaignmonitor/lists/' . $id . '/edit', [
          'query' => [
            'token' => drupal_get_token(),
          ],
        ]),
        'Delete' => l(t('Delete'), 'admin/config/services/campaignmonitor/lists/' . $id . '/delete', [
          'query' => [
            'token' => drupal_get_token(),
          ],
        ]),
      ];

      // Load local list options.
      $list_options = variable_get('campaignmonitor_list_' . $id, []);
      if (isset($list_options['status']['enabled']) && !$list_options['status']['enabled']) {

        // Add enable operation.
        $class = 'campaignmonitor-list-disabled';
        $operations['enable'] = l(t('Enable'), 'admin/config/services/campaignmonitor/lists/' . $id . '/enable', [
          'query' => [
            'token' => drupal_get_token(),
          ],
        ]);
      }
      else {

        // Add disable operation.
        $class = 'campaignmonitor-list-enabled';
        $operations['disable'] = l(t('Disable'), 'admin/config/services/campaignmonitor/lists/' . $id . '/disable', [
          'query' => [
            'token' => drupal_get_token(),
          ],
        ]);
      }

      // Allow other modules to add more operations.
      drupal_alter('campaignmonitor_operations', $operations);
      $stats = $cm
        ->getListStats($id);
      $rows[] = [
        'data' => [
          $list['name'],
          $id,
          $stats['TotalActiveSubscribers'] . ' / ' . $stats['TotalUnsubscribes'],
          implode(' ', $operations),
        ],
        'class' => [
          'class' => $class,
        ],
      ];
    }
  }

  // Theme the information as a table.
  $html = theme('table', [
    'header' => $header,
    'rows' => $rows,
    'sticky' => TRUE,
    'empty' => t('Lists not found or not yet created...'),
  ]);

  // Add a pager to the table, for sites that have a great many lists.
  $html .= theme('pager', [
    'tags' => [],
  ]);

  // Give it some styling.
  drupal_add_css(drupal_get_path('module', 'campaignmonitor') . '/css/campaignmonitor.admin.css');
  return $html;
}