You are here

asset_wizard.module in Asset 5.2

Same filename and directory in other branches
  1. 6 asset_wizard.module

Wizard-style interface for Asset.

File

asset_wizard.module
View source
<?php

/**
 * @file
 * Wizard-style interface for Asset.
 */

/**
 * @addtogroup asset
 * @{
 */

/**
 * Implementation of hook_perm().
 */
function asset_wizard_perm() {
  return array(
    'access asset wizard',
  );
}

/**
 * Implementation of hook_menu().
 */
function asset_wizard_menu($may_cache) {
  $items = array();
  if ($may_cache) {
    $items[] = array(
      'path' => 'asset/wizard',
      'title' => t('Asset Wizard'),
      'type' => MENU_CALLBACK,
      'callback' => 'asset_wizard_main',
      'access' => user_access('access asset wizard'),
    );
    foreach (asset_get_types() as $type) {
      $type_url_str = str_replace('_', '-', $type->type);
      $items[] = array(
        'path' => 'asset/wizard/add/' . $type_url_str,
        'title' => drupal_ucfirst($type->name),
        'access' => asset_access('create', $type->type),
        'type' => MENU_CALLBACK,
        'callback' => 'asset_wizard_add',
        'callback arguments' => array(
          $type,
        ),
      );
    }
  }
  else {
    if (arg(0) == 'asset' && arg(1) == 'wizard') {

      //      $items[] = array(
      //        'path' => 'asset/wizard/browse',
      //        'title' => t('Asset Wizard - Browse'),
      //        'type' => MENU_CALLBACK,
      //        'callback' => 'asset_wizard_browse',
      //        'callback arguments' => array(),
      //        'access' => user_access('access asset wizard'),
      //      );
      foreach (asset_wizard_methods() as $key => $method) {
        $items[] = array(
          'path' => 'asset/wizard/method/' . $key,
          'title' => t('Asset Wizard') . ' - ' . $method['name'],
          'type' => MENU_CALLBACK,
          'callback' => $method['callback'],
          'access' => user_access('access asset wizard'),
        );
      }
      if (is_numeric(arg(2))) {
        $aid = arg(2);
        $asset = asset_load($aid);
        if (!$asset || $asset->type == 'directory') {
          $items[] = array(
            'path' => 'asset/wizard/' . $aid,
            'title' => t('Asset Wizard - Browse'),
            'type' => MENU_CALLBACK,
            'callback' => 'asset_wizard_browse',
            'callback arguments' => array(
              $asset,
            ),
            'access' => user_access('access asset wizard'),
          );
        }
        else {
          $items[] = array(
            'path' => 'asset/wizard/' . $aid,
            'title' => t('Asset Wizard - Select Format'),
            'type' => MENU_CALLBACK,
            'callback' => 'asset_wizard_formats',
            'callback arguments' => array(
              $asset,
            ),
            'access' => user_access('access asset wizard'),
          );
          $format = arg(3);
          if ($format && $asset->formatters[$format]) {
            $attr = array();
            if ($macro = arg(4)) {
              $macros = asset_get_macros($macro);
              $attr = $macros[$macro];
            }
            else {
              $attr = array(
                'format' => $format,
              );
            }
            $items[] = array(
              'path' => 'asset/wizard/' . $aid . '/' . $format,
              'title' => t('Asset Wizard - Options'),
              'type' => MENU_CALLBACK,
              'callback' => 'asset_wizard_format_options',
              'callback arguments' => array(
                $asset,
                $attr,
              ),
              'access' => user_access('access asset wizard'),
            );
          }
          if (arg(3) == 'finish') {
            $macro = urldecode(arg(4));
            $items[] = array(
              'path' => 'asset/wizard/' . $aid . '/finish',
              'title' => t('Asset Wizard - Finish'),
              'type' => MENU_CALLBACK,
              'callback' => 'asset_wizard_preview',
              'callback arguments' => array(
                $asset,
                $macro,
              ),
              'access' => user_access('access asset wizard'),
            );
          }
        }
      }
    }
    elseif (arg(0) == 'assetfield' && is_numeric(arg(1))) {
      $asset = asset_load(arg(1));
      $items[] = array(
        'path' => 'assetfield/' . $asset->aid,
        'type' => MENU_CALLBACK,
        'callback' => 'assetfield_js_callback',
        'callback arguments' => array(
          $asset,
        ),
        'access' => user_access('access asset wizard'),
      );
    }
  }
  return $items;
}

/**
 * Implementation of hook_elements
 * This is where we add the link to textareas
 */
function asset_wizard_elements() {
  $type['textarea'] = array(
    '#process' => array(
      'asset_wizard_textarea' => array(),
    ),
  );
  $type['textfield'] = array(
    '#process' => array(
      'asset_wizard_textfield' => array(),
    ),
    '#asset_return_type' => FALSE,
    '#asset_config' => 'id',
  );
  $type['assetfield'] = array(
    '#input' => TRUE,
    '#size' => 10,
  );
  return $type;
}

/**
 * Format an assetfield.
 *
 * @param $element
 *   An associative array containing the properties of the element.
 *   Properties used:  title, value, description, size, maxlength, required, attributes autocomplete_path
 * @return
 *   A themed HTML string representing the assetfield.
 */
function theme_assetfield($element) {
  $class = array(
    'form-asset',
  );
  $output = '';
  _form_set_class($element, $class);
  if ($element['#value']) {
    $asset = asset_load($element['#value']);
    $preview = '<span class="icon">' . asset_icon($asset, 64) . '</span>';
    $title = $asset->title;
  }
  else {
    $preview = '<span class="icon">' . theme('image', drupal_get_path('module', 'asset_Wizard') . '/icons/missing.png', NULL, NULL, array(
      'width' => 64,
    ), FALSE) . '</span>';
    $title = '';
  }
  $output .= '<div class="assetfield-icon">' . theme('asset_wizard_textarea_link', $element, $preview) . '</div>';
  $output .= '<div class="assetfield-detail">';
  $output .= '<div class="assetfield-title">' . $title . '</div>';
  $output .= '<input type="text" maxlength="10" size="10" name="' . $element['#name'] . '" id="' . $element['#id'] . '" value="' . check_plain($element['#value']) . '"' . drupal_attributes($element['#attributes']) . ' />';
  $output .= '</div>';
  $output = '<div class="assetfield-container clear-block">' . $output . '</div>';
  return theme('form_element', $element, $output);
}
function assetfield_js_callback($asset) {
  $data = array(
    'title' => $asset->title,
  );
  $icon = asset_type_invoke($asset, 'icon');
  if (!$icon) {
    $icon = drupal_get_path('module', 'asset') . '/icons/file.png';
  }
  $data['icon'] = base_path() . $icon;
  print drupal_to_js($data);
  exit;
}

/**
 * The #process callback function for the textareas
 */
function asset_wizard_textarea($element) {
  if (_asset_wizard_element_match($element) && _asset_wizard_page_match()) {
    $output = theme('asset_wizard_textarea_link', $element);
    $element['#suffix'] .= $output;
  }
  return $element;
}

/**
 * The #process callback function for the textfield
 */
function asset_wizard_textfield2($element) {
  $config = asset_wizard_get_config($element['#asset_config']);
  if ($config['return type'] == 'macro') {
    return asset_wizard_textarea($element);
  }
  elseif ($config['return type'] == 'id') {

    //    $output = theme('asset_wizard_textarea_link', $element);
    //    $element['#field_suffix'] .= $output;
    $preview = theme('asset_wizard_textfield_preview', $element);
    $element['#field_prefix'] .= '<div class="clear-block"><div class="asset-textfield-preview">' . $preview . '</div>';
    $element['#field_suffix'] .= '</div>';
  }
  return $element;
}
function theme_asset_wizard_textfield_preview($element) {
  if ($element['#value']) {
    $asset = asset_load($element['#value']);
    $text = theme('asset_icon', $asset);
    $text = '<span class="icon">' . asset_icon($asset, 100) . '</span><br/>' . '<span class="caption">' . ($asset->link_title ? $asset->link_title : $asset->title) . '</span>';
  }
  else {
    $path = drupal_get_path('module', 'asset_wizard') . '/icons/select.png';
    $alt = t('Click to start');
    $icon = theme('image', $path, $alt, $alt);
    $text = '<div class="icon-empty">' . $icon . '</div>' . '<div class="caption">' . t('Click to start') . '</div>';
  }
  return theme('asset_wizard_textarea_link', $element, $text);
}

/**
 * Theme the textarea link
 */
function theme_asset_wizard_textarea_link($element, $text = NULL) {
  $path = drupal_get_path('module', 'asset_wizard');

  // add thickbox stuff
  drupal_add_js($path . '/js/thickbox/jquery.thickbox.js');
  drupal_add_css($path . '/js/thickbox/thickbox.css');

  // provide an accurate loadingAnimation path
  drupal_add_js('tb_pathToImage = "' . base_path() . $path . '/js/thickbox/loadingAnimation.gif";', 'inline', 'footer');

  // jquery form plugin
  drupal_add_js($path . '/js/form/jquery.form.js');

  // asset wizard stuff
  drupal_add_css($path . '/asset_wizard.css');
  drupal_add_js($path . '/js/asset_wizard.js');
  asset_wizard_js_settings();
  if ($element['#asset_return_type']) {
    $params = 'return=' . $element['#asset_return_type'];
    $params .= '&config=' . ($element['#asset_config'] ? $element['#asset_config'] : 'macro');
  }
  $text = $text ? $text : t('Asset Wizard');
  $link = tbl($text, 'asset/wizard', array(
    'id' => 'asset-wizard-' . $element['#id'],
    'class' => 'asset-wizard-start',
    'title' => 'Asset Wizard',
  ), $params, NULL, FALSE, TRUE);
  return $link;
}

/**
 * always ignore certain textareas based on element attributes (mainly #id)
 */
function _asset_wizard_element_match($element) {
  $ignore = array(
    'edit-log',
  );
  if (in_array($element['#id'], $ignore)) {
    return false;
  }
  return true;
}

/**
 * Should we show the insert asset link, determined by admin setting 
 * Borrowed from tinymce.module
 *
 * @return
 *   TRUE if can render, FALSE if not allowed.
 */
function _asset_wizard_page_match() {
  $page_match = FALSE;
  $access_option = variable_get('asset_wizard_access_option', 1);
  $access_pages = variable_get('asset_wizard_access_pages', "node/add/*\nnode/*/edit");
  if ($access_pages) {

    // If the PHP option wasn't selected
    if ($access_option < 2) {
      $path = drupal_get_path_alias($_GET['q']);
      $regexp = '/^(' . preg_replace(array(
        '/(\\r\\n?|\\n)/',
        '/\\\\\\*/',
        '/(^|\\|)\\\\<front\\\\>($|\\|)/',
      ), array(
        '|',
        '.*',
        '\\1' . preg_quote(variable_get('site_frontpage', 'node'), '/') . '\\2',
      ), preg_quote($access_pages, '/')) . ')$/';
      $page_match = !($access_option xor preg_match($regexp, $path));
    }
    else {
      $page_match = drupal_eval($access_pages);
    }
  }
  else {
    $page_match = TRUE;
  }
  return $page_match;
}
function asset_wizard_methods() {
  static $methods;
  if (!isset($methods)) {
    $methods['browse'] = array(
      'name' => t('Browse'),
      'callback' => 'asset_wizard_browse',
      'description' => t('Choose from a list of existing assets.'),
    );
    $methods = $methods + module_invoke_all('asset_wizard', 'info');
  }
  return $methods;
}

/**
 * Load the current asset wizard config array, passed in throught $_GET['config']
 * Options for config are 'macro' (default), 'id', or the name of a cck field
 */
function asset_wizard_get_config($cfg_name = NULL) {
  static $configs = array();
  $cfg_name = $cfg_name ? $cfg_name : ($_GET['config'] ? $_GET['config'] : 'default');
  $config = array();
  if (!isset($config[$cfg_name])) {

    // build an array of asset cck fields
    $asset_fields = array();
    if (module_exists('content')) {
      $fields = content_fields();
      foreach ($fields as $name => $field) {
        if ($field['type'] == 'asset') {
          $asset_fields[$name] = $field;
        }
      }
    }

    // asset field config
    if ($asset_fields[$cfg_name]) {
      $config = $asset_fields[$cfg_name];
      $config['return type'] = 'id';
    }
    elseif ($cfg_name == 'id') {
      $config = array(
        'return type' => 'id',
      );
    }
    else {
      $config = array(
        'return type' => 'macro',
      );
    }
    $configs[$cfg_name] = $config;
  }
  return $configs[$cfg_name];
}
function asset_wizard_main() {
  $config = asset_wizard_get_config();
  $items = array();
  foreach (asset_wizard_methods() as $key => $method) {
    $items[] = tbl($method['name'], 'asset/wizard/method/' . $key) . '<br/>' . $method['description'];
  }
  $create = array();
  foreach (asset_get_types() as $type) {
    if (!$config['allowed_types'] || $config['allowed_types'][$type->type] && asset_access('create', $type->type)) {
      $type_url_str = str_replace('_', '-', $type->type);
      $text = t('New !type', array(
        '!type' => drupal_ucfirst($type->name),
      ));
      $create[] = tbl($text, 'asset/wizard/add/' . $type_url_str, array(), NULL, NULL, FALSE, TRUE) . '<br />' . $type->description;
    }
  }
  $items[] = array(
    'data' => '<h3>' . t('Create...') . '</h3>',
    'children' => $create,
  );
  $content = theme('asset_wizard_main', $items);
  return theme('asset_wizard_page', $content);
}

/**
 * Step 1: Display a browsable list of assets
 */
function asset_wizard_browse($asset = NULL) {
  $config = asset_wizard_get_config();
  if (!$asset) {
    $asset = asset_load(0);
  }
  $items = array();
  if ($asset->aid) {
    $parent = asset_load($asset->pid);
    $parent->link_title = '..';
    $items[] = $parent;
  }
  $types = array();
  $query = 'SELECT aid FROM {asset} WHERE pid=%d';
  $args[] = $asset->aid;
  if ($config['allowed_types']) {
    foreach ($config['allowed_types'] as $type) {
      if ($type) {
        $types[] = $type;
      }
    }
    if ($types) {
      $query .= ' AND type IN ("%s")';
      $args[] = implode('","', $types);
    }
  }
  $result = db_query($query, $args);
  while ($row = db_fetch_object($result)) {

    //$items[$row->aid] = $row->title;
    $items[] = asset_load($row->aid);
  }
  $content = theme('asset_wizard_browse', $items);
  return theme('asset_wizard_page', $content);
}

/**
 * Step 2: Display a list of available formats for a given asset
 */
function asset_wizard_formats($asset) {

  // at this point we need to check if we should continue ($_GET['return']=='macro')
  // or simply return the id
  if ($_GET['return'] == 'id') {
    return drupal_goto('asset/wizard/' . $asset->aid . '/finish/' . $asset->aid);
  }
  $content = theme('asset_wizard_formats', $asset, $asset->formatters);
  return theme('asset_wizard_page', $content);
}

/**
 * Step 3: Display the options form
 */
function asset_wizard_format_options($asset, $attr) {
  $content = '<h3>' . ${$attr}['format'] . '</h3>';
  $content .= drupal_get_form('asset_wizard_format_options_form', $asset, $attr);
  return theme('asset_wizard_page', $content);
}

/**
 * Form Builder for Step 3
 */
function asset_wizard_format_options_form($asset, $attr) {
  $format = $asset->formatters[$attr['format']];
  $options = module_invoke($format->module, 'asset_formatter', 'form', $asset, $attr);
  if (!$options) {
    $macro = asset_build_macro(array(
      'aid' => $asset->aid,
      'format' => $format->format,
    ));
    drupal_goto('asset/wizard/' . $asset->aid . '/finish/' . $macro);
  }
  $form = array();
  $form['options'] = $options;
  $form['options']['#tree'] = TRUE;
  $form['options']['aid'] = array(
    '#type' => 'value',
    '#value' => $asset->aid,
  );
  $form['options']['format'] = array(
    '#type' => 'value',
    '#value' => $format->format,
  );
  $form['buttons'] = array(
    '#tree' => FALSE,
    '#theme' => 'asset_wizard_form_buttons',
  );
  $form['buttons'][] = array(
    '#type' => 'submit',
    '#value' => t('Preview'),
  );
  $form['#type'] = 'form';
  if ($_GET['return']) {
    $form['#action'] = url($_GET['q'], 'return=' . $_GET['return']);
  }
  return $form;
}

/**
 * Sumbit handler for Step 3
 */
function asset_wizard_format_options_form_submit($form_id, $form_values) {
  $aid = $form_values['options']['aid'];
  $macro = asset_build_macro($form_values['options']);
  return 'asset/wizard/' . $aid . '/finish/' . urlencode($macro);
}

/**
 * Step 4: Display a preview of the formatted asset
 */
function asset_wizard_preview($asset, $macro) {
  if (is_numeric($macro)) {
    $preview = asset_view($asset);
  }
  else {
    $macros = asset_get_macros($macro);
    $format = $macros[$macro];
    $preview = asset_render_macro($format);
  }
  $content = theme('asset_wizard_preview', $asset, $preview, $macro);
  return theme('asset_wizard_page', $content);
}
function asset_wizard_add($type) {
  $output = asset_add($type->type);
  return theme('asset_wizard_page', $output);
}

/**
 * Set breadcrumb based on asset heirarchy
 */
function asset_wizard_set_breadcrumb() {
  $breadcrumb[] = tbl(t('Step 1: Start'), 'asset/wizard');
  if (arg(2) && !is_numeric(arg(2))) {
    $breadcrumb[] = tbl(t('Step 2: Selection'), 'asset/wizard/browse');
  }
  elseif (is_numeric(arg(2))) {
    $asset = asset_load(arg(2));
    if ($asset->type == 'directory') {
      $breadcrumb[] = tbl(t('Step 2: Selection'), 'asset/wizard/' . $asset->aid);
    }
    else {
      $breadcrumb[] = tbl(t('Step 2: Selection'), 'asset/wizard/' . $asset->pid);
      $breadcrumb[] = tbl(t('Step 3: Formatting'), 'asset/wizard/' . $asset->aid);
    }
  }
  drupal_set_breadcrumb($breadcrumb);
}
function asset_wizard_get_path() {
  $asset = is_numeric(arg(2)) ? asset_load(arg(2), TRUE) : NULL;
  $breadcrumb = array();

  //  if (in_array(arg(3), array_keys($asset->formatters))) {
  //    $breadcrumb[] = tbl(_asset_wizard_truncate($asset->formatters[arg(3)]['name'], 30), 'asset/wizard/'. $asset->aid .'/'. arg(3));
  //  }
  if ($asset->aid) {
    $breadcrumb[] = tbl(_asset_wizard_truncate($asset->title, 30), 'asset/wizard/' . $asset->aid);
  }
  while ($pid = $asset->pid) {
    $asset = asset_load($pid);
    $breadcrumb[] = tbl(_asset_wizard_truncate($asset->title, 20), 'asset/wizard/' . $asset->aid);
  }
  $breadcrumb[] = tbl(t('Assets'), 'asset/wizard/browse');
  return join(' / ', array_reverse($breadcrumb));
}
function _asset_wizard_truncate($text, $max_chars) {
  if (strlen($text) > $max_chars) {
    $text = substr($text, 0, $max_chars);
    $last_word = strrchr($text, ' ');
    if ($last_word == ' ') {
      $text = substr($text, 0, strlen($text) - 1) . '...';
    }
    else {
      $text = preg_replace('/' . preg_quote($last_word, '/') . '$/', '...', $text);
    }
  }
  return $text;
}

/*******************************************************************************
 * thickbox theming
 ******************************************************************************/
function theme_asset_wizard_main($items = array()) {
  return '<div class="asset-wizard-main">' . theme('item_list', $items) . '</div>';
}

/**
 * Wizard Step 1: Display the icon list for browsing
 */
function theme_asset_wizard_browse($items = array()) {
  $size = 64;
  $links = array();
  foreach ($items as $asset) {
    $icon = theme('asset_icon', $asset, $size);
    $links[] = tbl($icon, 'asset/wizard/' . $asset->aid, array(), NULL, NULL, FALSE, TRUE);
  }
  $output .= '<ul class="asset-wizard-browse clear-block">';
  foreach ($links as $link) {
    $output .= '<li>' . $link . '</li>';
  }
  $output .= '</ul>';
  return $output;
}

/**
 * Wizard Step 2: Display the list of available formats
 */
function theme_asset_wizard_formats($asset, $formats) {
  $items = array();
  foreach ($formats as $format) {
    $items[] = tbl($format->name, 'asset/wizard/' . $asset->aid . '/' . $format->format) . '<br/>' . $format->description;
  }
  $output .= theme('item_list', $items);
  return $output;
}

/**
 * Wizard Step 3: Display a preview
 */
function theme_asset_wizard_preview($asset, $preview, $value) {
  $button = '<button value="' . $value . '" onclick="Drupal.assetWizard.insert(\'' . $value . '\');">Finish</button>';
  $output .= '<div class="asset-wizard-preview">' . $preview . '</div>';
  $output .= theme('asset_wizard_form_buttons', $button);
  return $output;
}
function theme_asset_wizard_form_buttons($form) {
  $output = is_array($form) ? drupal_render($form) : $form;
  return '<div class="wizard-buttons">' . $output . '</div>';
}
function asset_wizard_js_settings() {
  static $run = FALSE;
  if ($run) {
    return;
  }
  $settings = array(
    'height' => 400,
    'width' => 560,
    'url' => url('asset/wizard'),
    'title' => t('Asset Wizard'),
    'assetUrl' => url('asset'),
    'noIcon' => base_path() . drupal_get_path('module', 'asset_Wizard') . '/icons/missing.png',
  );
  drupal_add_js(array(
    'assetWizard' => $settings,
  ), 'setting');
  $run = TRUE;
}

/**
 * Wrapper for l() function to add thickbox class and query params
 */
function tbl($text, $path, $attributes = array(), $query = NULL, $fragment = NULL, $absolute = FALSE, $html = FALSE) {
  if (isset($attributes['class'])) {
    $attributes['class'] .= ' thickbox';
  }
  else {
    $attributes['class'] = 'thickbox';
  }
  if (!isset($attributes['title'])) {
    $attributes['title'] = t('Asset Wizard');
  }
  if ($_GET['return']) {
    $query .= ($query ? '&' : '') . 'return=' . $_GET['return'];
    if ($_GET['config']) {
      $query .= '&config=' . $_GET['config'];
    }
  }
  $query .= '&height=400&width=560&modal=true';
  return l($text, $path, $attributes, $query, $fragment, $absolute, $html);
}
function theme_asset_wizard_page($content) {
  $title = drupal_get_title();
  asset_wizard_set_breadcrumb();
  $breadcrumb = theme('breadcrumb', drupal_get_breadcrumb());
  $messages = theme('status_messages');
  $help = theme('help');
  $links = theme('asset_wizard_links');
  $selected = theme('asset_wizard_selected');
  print <<<EOD
  <div id="asset-wizard">

    <h1>Asset Wizard</h1>

    <div class="wizard-sidebar">
      {<span class="php-variable">$links</span>}
      {<span class="php-variable">$selected</span>}
    </div>

    <div class="wizard-main">
      <h2>{<span class="php-variable">$title</span>}</h2>
      <div class="wizard-content">
        {<span class="php-variable">$messages</span>}
        {<span class="php-variable">$help</span>}
        {<span class="php-variable">$content</span>}
      </div>
    </div>

  </div>

EOD;
  exit;
}
function theme_asset_wizard_selected() {
  if (is_numeric(arg(2))) {
    $asset = asset_load(arg(2));
    $output = '<div class="wizard-selected"><h2>Selected Asset</h2>' . '<div class="content">' . theme('asset_icon', $asset) . '</div></div>';
    return $output;
  }
}
function theme_asset_wizard_links() {

  // figure out the step we are on
  $step = 0;
  if (arg(2) && !is_numeric(arg(2))) {
    $step = 1;
  }
  elseif (arg(2)) {
    $asset = asset_load(arg(2));
    if ($asset->type == 'directory') {
      $step = 1;
    }
    else {
      if (arg(3) == 'finish') {
        $step = 4;
      }
      elseif (arg(3)) {
        $step = 3;
      }
      else {
        $step = 2;
      }
    }
  }

  // build the links/spans based on what step we're on
  $links = array();
  $aid = is_numeric(arg(2)) ? arg(2) : 0;
  if ($_GET['return'] == 'id') {
    $steps = array(
      'asset/wizard' => t('Start'),
      'asset/wizard/browse' => t('Select an Asset'),
      'asset/wizard/' . $aid . '/finish/' . arg(4) => t('Preview'),
    );
  }
  else {
    $steps = array(
      'asset/wizard' => t('Start'),
      'asset/wizard/browse' => t('Select an Asset'),
      'asset/wizard/' . $aid => t('Select a Format'),
      'asset/wizard/' . $aid . '/' . arg(3) => t('Formatting Options'),
      'asset/wizard/' . $aid . '/finish/' . arg(4) => t('Preview'),
    );
  }
  $i = 0;
  foreach ($steps as $path => $text) {
    if ($step == $i) {
      $links[] = '<span class="active">' . $text . '</span>';
    }
    elseif ($step > $i) {
      $links[] = tbl($text, $path);
    }
    else {
      $links[] = '<span>' . $text . '</span>';
    }
    $i++;
  }
  return '<ul><li>' . join('</li><li>', $links) . '</li></ul>';
}
function asset_wizard_help($section) {
  $aid = arg(2);
  switch ($section) {
    case 'asset/wizard':
      return '<p>' . t('The asset wizard allows you to create and select digital assets to use in the context of this site.  To get started, select a method for choosing the appropriate asset.') . '</p>';
    case 'asset/wizard/' . $aid . '/finish':
      return '<p>' . t('Here is the preview of your formatted asset.  You can click any of the links in the sidebar to make changes, or click Finish to insert this into the document.') . '</p>';
    case 'asset/wizard/browse':
      return '<p>' . t('Select the asset you wish to use.') . '</p>';
    case 'asset/wizard/' . $aid:
      return '<p>' . t('Select from the list of available formats.') . '</p>';
  }
}

/**
 * @} End of "addtogroup asset".
 */

Functions

Namesort descending Description
assetfield_js_callback
asset_wizard_add
asset_wizard_browse Step 1: Display a browsable list of assets
asset_wizard_elements Implementation of hook_elements This is where we add the link to textareas
asset_wizard_formats Step 2: Display a list of available formats for a given asset
asset_wizard_format_options Step 3: Display the options form
asset_wizard_format_options_form Form Builder for Step 3
asset_wizard_format_options_form_submit Sumbit handler for Step 3
asset_wizard_get_config Load the current asset wizard config array, passed in throught $_GET['config'] Options for config are 'macro' (default), 'id', or the name of a cck field
asset_wizard_get_path
asset_wizard_help
asset_wizard_js_settings
asset_wizard_main
asset_wizard_menu Implementation of hook_menu().
asset_wizard_methods
asset_wizard_perm Implementation of hook_perm().
asset_wizard_preview Step 4: Display a preview of the formatted asset
asset_wizard_set_breadcrumb Set breadcrumb based on asset heirarchy
asset_wizard_textarea The #process callback function for the textareas
asset_wizard_textfield2 The #process callback function for the textfield
tbl Wrapper for l() function to add thickbox class and query params
theme_assetfield Format an assetfield.
theme_asset_wizard_browse Wizard Step 1: Display the icon list for browsing
theme_asset_wizard_formats Wizard Step 2: Display the list of available formats
theme_asset_wizard_form_buttons
theme_asset_wizard_links
theme_asset_wizard_main
theme_asset_wizard_page
theme_asset_wizard_preview Wizard Step 3: Display a preview
theme_asset_wizard_selected
theme_asset_wizard_textarea_link Theme the textarea link
theme_asset_wizard_textfield_preview
_asset_wizard_element_match always ignore certain textareas based on element attributes (mainly #id)
_asset_wizard_page_match Should we show the insert asset link, determined by admin setting Borrowed from tinymce.module
_asset_wizard_truncate