[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/Smarty/libs/plugins/ -> function.mailto.php (source)

   1  <?php
   2  /**
   3   * Smarty plugin
   4   *
   5   * @package Smarty
   6   * @subpackage PluginsFunction
   7   */
   8  
   9  /**
  10   * Smarty {mailto} function plugin
  11   *
  12   * Type:     function<br>
  13   * Name:     mailto<br>
  14   * Date:     May 21, 2002
  15   * Purpose:  automate mailto address link creation, and optionally encode them.<br>
  16   * Params:
  17   * <pre>
  18   * - address    - (required) - e-mail address
  19   * - text       - (optional) - text to display, default is address
  20   * - encode     - (optional) - can be one of:
  21   *                             * none : no encoding (default)
  22   *                             * javascript : encode with javascript
  23   *                             * javascript_charcode : encode with javascript charcode
  24   *                             * hex : encode with hexidecimal (no javascript)
  25   * - cc         - (optional) - address(es) to carbon copy
  26   * - bcc        - (optional) - address(es) to blind carbon copy
  27   * - subject    - (optional) - e-mail subject
  28   * - newsgroups - (optional) - newsgroup(s) to post to
  29   * - followupto - (optional) - address(es) to follow up to
  30   * - extra      - (optional) - extra tags for the href link
  31   * </pre>
  32   * Examples:
  33   * <pre>
  34   * {mailto address="[email protected]"}
  35   * {mailto address="[email protected]" encode="javascript"}
  36   * {mailto address="[email protected]" encode="hex"}
  37   * {mailto address="[email protected]" subject="Hello to you!"}
  38   * {mailto address="[email protected]" cc="[email protected],[email protected]"}
  39   * {mailto address="[email protected]" extra='class="mailto"'}
  40   * </pre>
  41   *
  42   * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
  43   *          (Smarty online manual)
  44   * @version 1.2
  45   * @author Monte Ohrt <monte at ohrt dot com>
  46   * @author credits to Jason Sweat (added cc, bcc and subject functionality)
  47   * @param array                    $params   parameters
  48   * @param Smarty_Internal_Template $template template object
  49   * @return string
  50   */
  51  function smarty_function_mailto($params, $template)
  52  {
  53      static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
  54      $extra = '';
  55  
  56      if (empty($params['address'])) {
  57          trigger_error("mailto: missing 'address' parameter",E_USER_WARNING);
  58          return;
  59      } else {
  60          $address = $params['address'];
  61      }
  62  
  63      $text = $address;
  64      // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
  65      // so, don't encode it.
  66      $search = array('%40', '%2C');
  67      $replace = array('@', ',');
  68      $mail_parms = array();
  69      foreach ($params as $var => $value) {
  70          switch ($var) {
  71              case 'cc':
  72              case 'bcc':
  73              case 'followupto':
  74                  if (!empty($value))
  75                      $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
  76                  break;
  77  
  78              case 'subject':
  79              case 'newsgroups':
  80                  $mail_parms[] = $var . '=' . rawurlencode($value);
  81                  break;
  82  
  83              case 'extra':
  84              case 'text':
  85                  $$var = $value;
  86  
  87              default:
  88          }
  89      }
  90  
  91      if ($mail_parms) {
  92          $address .= '?' . join('&', $mail_parms);
  93      }
  94      
  95      $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
  96      if (!isset($_allowed_encoding[$encode])) {
  97          trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
  98          return;
  99      }
 100      // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed!
 101      if ($encode == 'javascript') {
 102          $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
 103  
 104          $js_encode = '';
 105          for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
 106              $js_encode .= '%' . bin2hex($string[$x]);
 107          }
 108  
 109          return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>';
 110      } elseif ($encode == 'javascript_charcode') {
 111          $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
 112  
 113          for($x = 0, $y = strlen($string); $x < $y; $x++) {
 114              $ord[] = ord($string[$x]);
 115          }
 116  
 117          $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n"
 118              . "{document.write(String.fromCharCode("
 119              . implode(',', $ord)
 120              . "))"
 121              . "}\n"
 122              . "</script>\n";
 123  
 124          return $_ret;
 125      } elseif ($encode == 'hex') {
 126          preg_match('!^(.*)(\?.*)$!', $address, $match);
 127          if (!empty($match[2])) {
 128              trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING);
 129              return;
 130          }
 131          $address_encode = '';
 132          for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
 133              if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
 134                  $address_encode .= '%' . bin2hex($address[$x]);
 135              } else {
 136                  $address_encode .= $address[$x];
 137              }
 138          }
 139          $text_encode = '';
 140          for ($x = 0, $_length = strlen($text); $x < $_length; $x++) {
 141              $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
 142          }
 143  
 144          $mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
 145          return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
 146      } else {
 147          // no encoding
 148          return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
 149      }
 150  }
 151  
 152  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1