You are here

function.mailto.php in Quiz 6.5

Same filename and directory in other branches
  1. 6.6 includes/moodle/lib/smarty/plugins/function.mailto.php

File

includes/moodle/lib/smarty/plugins/function.mailto.php
View source
<?php

/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * Smarty {mailto} function plugin
 *
 * Type:     function<br>
 * Name:     mailto<br>
 * Date:     May 21, 2002
 * Purpose:  automate mailto address link creation, and optionally
 *           encode them.<br>
 * Input:<br>
 *         - address = e-mail address
 *         - text = (optional) text to display, default is address
 *         - encode = (optional) can be one of:
 *                * none : no encoding (default)
 *                * javascript : encode with javascript
 *                * javascript_charcode : encode with javascript charcode
 *                * hex : encode with hexidecimal (no javascript)
 *         - cc = (optional) address(es) to carbon copy
 *         - bcc = (optional) address(es) to blind carbon copy
 *         - subject = (optional) e-mail subject
 *         - newsgroups = (optional) newsgroup(s) to post to
 *         - followupto = (optional) address(es) to follow up to
 *         - extra = (optional) extra tags for the href link
 *
 * Examples:
 * <pre>
 * {mailto address="me@domain.com"}
 * {mailto address="me@domain.com" encode="javascript"}
 * {mailto address="me@domain.com" encode="hex"}
 * {mailto address="me@domain.com" subject="Hello to you!"}
 * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
 * {mailto address="me@domain.com" extra='class="mailto"'}
 * </pre>
 * @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
 *          (Smarty online manual)
 * @version  1.2
 * @author   Monte Ohrt <monte at ohrt dot com>
 * @author   credits to Jason Sweat (added cc, bcc and subject functionality)
 * @param    array
 * @param    Smarty
 * @return   string
 */
function smarty_function_mailto($params, &$smarty) {
  $extra = '';
  if (empty($params['address'])) {
    $smarty
      ->trigger_error("mailto: missing 'address' parameter");
    return;
  }
  else {
    $address = $params['address'];
  }
  $text = $address;

  // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
  // so, don't encode it.
  $mail_parms = array();
  foreach ($params as $var => $value) {
    switch ($var) {
      case 'cc':
      case 'bcc':
      case 'followupto':
        if (!empty($value)) {
          $mail_parms[] = $var . '=' . str_replace('%40', '@', rawurlencode($value));
        }
        break;
      case 'subject':
      case 'newsgroups':
        $mail_parms[] = $var . '=' . rawurlencode($value);
        break;
      case 'extra':
      case 'text':
        ${$var} = $value;
      default:
    }
  }
  $mail_parm_vals = '';
  for ($i = 0; $i < count($mail_parms); $i++) {
    $mail_parm_vals .= 0 == $i ? '?' : '&';
    $mail_parm_vals .= $mail_parms[$i];
  }
  $address .= $mail_parm_vals;
  $encode = empty($params['encode']) ? 'none' : $params['encode'];
  if (!in_array($encode, array(
    'javascript',
    'javascript_charcode',
    'hex',
    'none',
  ))) {
    $smarty
      ->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
    return;
  }
  if ($encode == 'javascript') {
    $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
    $js_encode = '';
    for ($x = 0; $x < strlen($string); $x++) {
      $js_encode .= '%' . bin2hex($string[$x]);
    }
    return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>';
  }
  elseif ($encode == 'javascript_charcode') {
    $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
    for ($x = 0, $y = strlen($string); $x < $y; $x++) {
      $ord[] = ord($string[$x]);
    }
    $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
    $_ret .= "<!--\n";
    $_ret .= "{document.write(String.fromCharCode(";
    $_ret .= implode(',', $ord);
    $_ret .= "))";
    $_ret .= "}\n";
    $_ret .= "//-->\n";
    $_ret .= "</script>\n";
    return $_ret;
  }
  elseif ($encode == 'hex') {
    preg_match('!^(.*)(\\?.*)$!', $address, $match);
    if (!empty($match[2])) {
      $smarty
        ->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
      return;
    }
    $address_encode = '';
    for ($x = 0; $x < strlen($address); $x++) {
      if (preg_match('!\\w!', $address[$x])) {
        $address_encode .= '%' . bin2hex($address[$x]);
      }
      else {
        $address_encode .= $address[$x];
      }
    }
    $text_encode = '';
    for ($x = 0; $x < strlen($text); $x++) {
      $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
    }
    $mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
    return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
  }
  else {

    // no encoding
    return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
  }
}

/* vim: set expandtab: */

Functions

Namesort descending Description
smarty_function_mailto Smarty {mailto} function plugin