You are here

record_shorten.module in Shorten URLs 7

Same filename and directory in other branches
  1. 6 record_shorten.module
  2. 7.2 record_shorten.module

Records shortened URLs.

File

record_shorten.module
View source
<?php

/**
 * @file
 *   Records shortened URLs.
 */

/**
 * Implements hook_menu().
 */
function record_shorten_menu() {
  $items = array();
  $items['admin/reports/shorten'] = array(
    'title' => 'Shortened URLs',
    'description' => 'Lists shortened URLs.',
    'page callback' => 'theme',
    'page arguments' => array(
      'record_shorten_records',
    ),
    'access arguments' => array(
      'administer site configuration',
    ),
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}

/**
 * Implements hook_theme().
 */
function record_shorten_theme($existing, $type, $theme, $path) {
  return array(
    'record_shorten_records' => array(
      'variables' => array(),
    ),
  );
}

/**
 * Implements hook_shorten_create().
 */
function record_shorten_shorten_create($old, $new, $service) {
  $array = array(
    'original' => $old,
    'short' => $new,
    'service' => $service,
    'uid' => $GLOBALS['user']->uid,
    'hostname' => ip_address(),
    'created' => REQUEST_TIME,
  );
  drupal_write_record('record_shorten', $array);
}

/**
 * Builds a list of shortened URLs.
 */
function theme_record_shorten_records() {
  $total = db_query("SELECT COUNT(sid) FROM {record_shorten}")
    ->fetchField();
  $output = '<p>' . format_plural($total, '1 shortened URL has been recorded.', '@count shortened URLs have been recorded.');
  $output .= record_shorten_records_table();
  $output .= '<br />';
  $form = drupal_get_form('record_shorten_clear_all');
  $output .= drupal_render($form);
  return $output;
}

/**
 * Clear all records form.
 */
function record_shorten_clear_all($form, $form_state) {
  $form['warning'] = array(
    '#markup' => '<p><strong>' . t('Warning: there is no confirmation page. Cleared records are permanently deleted.') . '</strong></p>',
  );
  $form['note'] = array(
    '#markup' => '<p>' . t('Note: clearing records does not clear the Shorten URLs cache.') . ' ' . t('Also, URLs already in the cache are not recorded again.') . '</p>',
  );
  $form['clear'] = array(
    '#type' => 'submit',
    '#value' => t('Clear all records'),
  );
  return $form;
}

/**
 * Submit callback for clear all records form.
 */
function record_shorten_clear_all_submit($form, &$form_state) {
  db_query("TRUNCATE TABLE {record_shorten}");
}

/**
 * Builds a list of shortened URLs.
 */
function record_shorten_records_table() {
  if (module_exists('views')) {
    return views_embed_view('record_shorten', 'default');
  }
  $header = array(
    t('Original'),
    t('Short'),
    t('Service'),
  );
  $rows = array();

  // SELECT original, short, service FROM {record_shorten} ORDER BY sid DESC
  $result = db_select('record_shorten', 'rs')
    ->extend('PagerDefault')
    ->limit(10)
    ->fields('rs', array(
    'original',
    'short',
    'service',
  ))
    ->orderBy('rs.sid', 'DESC')
    ->execute();
  foreach ($result as $row) {

    // Sigh... DBTNG doesn't have a ->fetchAsNonAssocArray()
    $rows[] = array(
      check_plain($row->original),
      check_plain($row->short),
      check_plain($row->service),
    );
  }
  $output = theme('table', array(
    'header' => $header,
    'rows' => $rows,
  ));

  // Oddly, theme_pager($vars) has no defaults for $vars.
  $output .= theme('pager', array(
    'tags' => array(),
    'element' => 0,
    'parameters' => array(),
    'quantity' => 9,
  ));
  return $output;
}

/**
 * Implements hook_views_api().
 */
function record_shorten_views_api() {
  return array(
    'api' => 3,
  );
}

Functions

Namesort descending Description
record_shorten_clear_all Clear all records form.
record_shorten_clear_all_submit Submit callback for clear all records form.
record_shorten_menu Implements hook_menu().
record_shorten_records_table Builds a list of shortened URLs.
record_shorten_shorten_create Implements hook_shorten_create().
record_shorten_theme Implements hook_theme().
record_shorten_views_api Implements hook_views_api().
theme_record_shorten_records Builds a list of shortened URLs.