* @version $Id$ */ /** * eGroupWare eTemplate Extension - Email addresses * * The value is an RFC822 email address or an interger account_id. * If the value is empty or 0, the content of the options field is used instead. * The address get displayed as name with the email as tooltip and a link to compose a mail. */ class email_widget { /** * exported methods of this class * * @var array */ var $public_functions = array( 'pre_process' => True, ); /** * availible extensions and there names for the editor * @var string */ var $human_name = array( 'email-address' => 'email address', ); /** * Constructor of the extension * * @param string $ui '' for html */ function select_widget($ui) { $this->ui = $ui; } /** * pre-processing of the extension * * This function is called before the extension gets rendered * * @param string $name form-name of the control * @param mixed &$value value / existing content, can be modified * @param array &$cell array with the widget, can be modified for ui-independent widgets * @param array &$readonlys names of widgets as key, to be made readonly * @param mixed &$extension_data data the extension can store persisten between pre- and post-process * @param object &$tmpl reference to the template we belong too * @return boolean true if extra label is allowed, false otherwise */ function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl) { if (!$value) $value = $cell['size']; if (is_numeric($value)) { $email = $GLOBALS['egw']->accounts->id2name($value,'account_email'); $value = $GLOBALS['egw']->accounts->id2name($value,'account_fullname'); } elseif (preg_match('/^(.*) ?<(.*)>/',$value,$matches)) { $value = $matches[1]; $email = $matches[2]; } elseif (strpos($email=$value,'@') !== false) { list($value) = explode('@',$value); // cut the domain off to get a shorter name, we show the complete email as tooltip $value .= '@...'; } $link = $this->email2link($email); //echo "

value='$value', email='$email', link=".print_r($link,true)."

\n"; $cell['type'] = 'label'; $cell['size'] = ','.$link.',,,,'.($link[0]=='f'?'700x750':'').($value != $email ? ','.$email : ''); $cell['no_lang'] = 1; return True; // extra Label Ok } /** * convert email-address in compose link * * @param string $email email-addresse * @return array/string array with get-params or mailto:$email, or '' or no mail addresse */ function email2link($email) { if (strpos($email,'@') == false) return ''; if($GLOBALS['egw_info']['user']['apps']['felamimail']) { return 'felamimail.uicompose.compose&send_to='.base64_encode($email); } if($GLOBALS['egw_info']['user']['apps']['email']) { return 'email.uicompose.compose&to='.$email; } return 'mailto:' . $email; } }