Never been to TextSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

zem_contact_reborn plugin

// PHP Code des Mail plugins, das seit dem Serverumzug nicht mehr funktioniert.

function zem_contact($atts, $thing = '')
{
        global $sitename, $prefs, $production_status, $zem_contact_from,
                $zem_contact_recipient, $zem_contact_error, $zem_contact_submit,
                $zem_contact_form, $zem_contact_labels, $zem_contact_values;

        extract(zem_contact_lAtts(array(
                'copysender'  => 0,
                'form'                => '',
                'from'                => '',
                'from_form'   => '',
                'label'               => zem_contact_gTxt('contact'),
                'redirect'    => '',
                'show_error'  => 1,
                'show_input'  => 1,
                'send_article'        => 0,
                'subject'     => zem_contact_gTxt('email_subject', html_entity_decode($sitename,ENT_QUOTES)),
                'subject_form'        => '',
                'to'          => '',
                'to_form'     => '',
                'thanks'      => graf(zem_contact_gTxt('email_thanks')),
                'thanks_form' => ''
        ), $atts));

        unset($atts['show_error'], $atts['show_input']);
        $zem_contact_form_id = md5(serialize($atts).preg_replace('/[\t\s\r\n]/','',$thing));
        $zem_contact_submit = (ps('zem_contact_submit') and ps('zem_contact_form_id') == $zem_contact_form_id);

        if (!is_callable('mail'))
        {
                return ($production_status == 'live') ?
                        zem_contact_gTxt('mail_sorry') :
                        gTxt('warn_mail_unavailable');
        }

        static $headers_sent = false;
        if (!$headers_sent) {
                header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()-3600*24*7).' GMT');
                header('Expires: '.gmdate('D, d M Y H:i:s',time()+600).' GMT');
                header('Cache-Control: no-cache, must-revalidate');
                $headers_sent = true;
        }

        $nonce   = mysql_real_escape_string(ps('zem_contact_nonce'));
        $renonce = false;

        if ($zem_contact_submit)
        {
                safe_delete('txp_discuss_nonce', 'issue_time < date_sub(now(), interval 10 minute)');
                if ($rs = safe_row('used', 'txp_discuss_nonce', "nonce = '$nonce'"))
                {
                        if ($rs['used'])
                        {
                                unset($zem_contact_error);
                                $zem_contact_error[] = zem_contact_gTxt('form_used');
                                $renonce = true;
                                $_POST = array();
                                $_POST['zem_contact_submit'] = 1;
                                $_POST['zem_contact_form_id'] = $zem_contact_form_id;
                                $_POST['zem_contact_nonce'] = $nonce;
                        }
                }
                else
                {
                        $zem_contact_error[] = zem_contact_gTxt('form_expired');
                        $renonce = true;
                }
        }

        if ($zem_contact_submit and $nonce and !$renonce)
        {
                $zem_contact_nonce = $nonce;
        }

        elseif (!$show_error or $show_input)
        {
                $zem_contact_nonce = md5(uniqid(rand(), true));
                safe_insert('txp_discuss_nonce', "issue_time = now(), nonce = '$zem_contact_nonce'");
        }

        $form = ($form) ? fetch_form($form) : $thing;

        if (empty($form))
        {
                $form = '
'.zem_contact_gTxt('name').'" />

'. ($send_article ? ''.zem_contact_gTxt('recipient').'" />
' : ''). '
'; } $form = parse($form); if ($to_form) { $to = parse(fetch_form($to_form)); } if (!$to and !$send_article) { return zem_contact_gTxt('to_missing'); } $out = ''; if (!$zem_contact_submit) { # don't show errors or send mail } elseif (!empty($zem_contact_error)) { if ($show_error or !$show_input) { $out .= n.'
    '; foreach (array_unique($zem_contact_error) as $error) { $out .= n.t.'
  • '.$error.'
  • '; } $out .= n.'
'; if (!$show_input) return $out; } } elseif ($show_input and is_array($zem_contact_form)) { /// load and check spam plugins/ callback_event('zemcontact.submit'); $evaluation =& get_zemcontact_evaluator(); $clean = $evaluation->get_zemcontact_status(); if ($clean != 0) { return zem_contact_gTxt('spam'); } if ($from_form) { $from = parse(fetch_form($from_form)); } if ($subject_form) { $subject = parse(fetch_form($subject_form)); } $sep = !is_windows() ? "\n" : "\r\n"; $msg = array(); foreach ($zem_contact_labels as $name => $label) { $msg[] = $label.': '.$zem_contact_values[$name]; } if ($send_article) { global $thisarticle; $subject = str_replace('&', '&', $thisarticle['title']); $msg[] = permlinkurl($thisarticle); $msg[] = $subject; $s_ar = array('', '', '', '', '', '', '', '', '', '', '×', '', '®', '©', '<', '>', '"', '&', '&', "\t", ''); if ($prefs['override_emailcharset'] and is_callable('utf8_decode')) { $r_ar = array("'", "'", '"', '"', "'", "'", '"', '...', '-', '--', 'x', '[tm]', '(r)', '(c)', '<', '>', '"', '&', '&', ' ', "\n"); } else { $r_ar = array('', '', '', '', '', '', '', '', '', '', '×', '', '®', '©', '<', '>', '"', '&', '&', ' ', "\n"); } $msg[] = trim(strip_tags(str_replace($s_ar,$r_ar,(trim(strip_tags($thisarticle['excerpt'])) ? $thisarticle['excerpt'] : $thisarticle['body'])))); if (empty($zem_contact_recipient)) { return zem_contact_gTxt('field_missing', htmlspecialchars(zem_contact_gTxt('recipient'))); } else { $to = $zem_contact_recipient; } } $msg = join("\n\n", $msg); $msg = str_replace("\r\n", "\n", $msg); $msg = str_replace("\r", "\n", $msg); $msg = str_replace("\n", $sep, $msg); if ($from) { $reply = $zem_contact_from; } else { $from = $zem_contact_from; $reply = ''; } $from = zem_contact_strip($from); $to = zem_contact_strip($to); $subject = zem_contact_strip($subject); $reply = zem_contact_strip($reply); $msg = zem_contact_strip($msg, FALSE); if ($prefs['override_emailcharset'] and is_callable('utf8_decode')) { $charset = 'ISO-8599-1'; $to = utf8_decode($to); $subject = utf8_decode($subject); $msg = utf8_decode($msg); $from = utf8_decode($from); $reply = utf8_decode($reply); } else { $charset = 'UTF-8'; } $subject = zem_contact_mailheader($subject, 'text'); $headers = 'From: '.$from. ($reply ? ($sep.'Reply-To: '.$reply) : ''). $sep.'X-Mailer: Textpattern (zem_contact_reborn)'. $sep.'X-Originating-IP: '.(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'].' via ' : '').$_SERVER['REMOTE_ADDR']. $sep.'Content-Transfer-Encoding: 8bit'. $sep.'Content-Type: text/plain; charset="'.$charset.'"'; safe_update('txp_discuss_nonce', "used = '1', issue_time = now()", "nonce = '$nonce'"); if (mail($to, $subject, $msg, $headers)) { $_POST = array(); if ($copysender and $zem_contact_from) { mail($from, $subject, $msg, $headers); } if ($redirect) { while (@ob_end_clean()); $uri = hu.ltrim($redirect,'/'); if (empty($_SERVER['FCGI_ROLE']) and empty($_ENV['FCGI_ROLE'])) { txp_status_header('303 See Other'); header('Location: '.$uri); header('Connection: close'); header('Content-Length: 0'); } else { $uri = htmlspecialchars($uri); $refresh = zem_contact_gTxt('refresh'); echo <<<END DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>$sitenametitle> /html; charset=utf-8" /> "refresh" content="0;url=$uri" /> "$uri">$refresh END; } exit; } else { return '
"zemThanks" id="zcr'.$zem_contact_form_id.'">' . ($thanks_form ? fetch_form($thanks_form) : $thanks) . '
'; } } else { $out .= graf(zem_contact_gTxt('mail_sorry')); } } if ($show_input and !$send_article or gps('zem_contact_send_article')) { return '
"post"'.((!$show_error and $zem_contact_error) ? '' : ' id="zcr'.$zem_contact_form_id.'"').' class="zemContactForm" action="'.serverSet('REQUEST_URI').'#zcr'.$zem_contact_form_id.'">'. ( $label ? n.'
' : n.'
' ). ( $label ? n.''.$label.'' : '' ). $out. n.''.$zem_contact_nonce.'" />'. n.''.$zem_contact_form_id.'" />'. $form. callback_event('zemcontact.form'). ( $label ? (n.'
') : (n.'
') ). n.''; } return ''; } function zem_contact_strip($str, $header = TRUE) { if ($header) $str = strip_rn($str); return preg_replace('/[\x00]/', ' ', $str); } function zem_contact_text($atts) { global $zem_contact_error, $zem_contact_submit; extract(zem_contact_lAtts(array( 'break' => br, 'default' => '', 'isError' => '', 'label' => zem_contact_gTxt('text'), 'max' => 100, 'min' => 0, 'name' => '', 'required' => 1, 'size' => '' ), $atts)); $min = intval($min); $max = intval($max); $size = intval($size); if (empty($name)) $name = zem_contact_label2name($label); if ($zem_contact_submit) { $value = ps($name); $utf8len = preg_match_all("/./su", $value, $utf8ar); $hlabel = htmlspecialchars($label); if (strlen($value)) { if (!$utf8len) { $zem_contact_error[] = zem_contact_gTxt('invalid_utf8', $hlabel); $isError = "errorElement"; } elseif ($min and $utf8len < $min) { $zem_contact_error[] = zem_contact_gTxt('min_warning', $hlabel, $min); $isError = "errorElement"; } elseif ($max and $utf8len > $max) { $zem_contact_error[] = zem_contact_gTxt('max_warning', $hlabel, $max); $isError = "errorElement"; #$value = join('',array_slice($ar[0],0,$max)); } else { zem_contact_store($name, $label, $value); } } elseif ($required) { $zem_contact_error[] = zem_contact_gTxt('field_missing', $hlabel); $isError = "errorElement"; } } else { $value = $default; } $size = ($size) ? ' size="'.$size.'"' : ''; $maxlength = ($max) ? ' maxlength="'.$max.'"' : ''; $zemRequired = $required ? 'zemRequired' : ''; return '$name.'" class="zemText '.$zemRequired.$isError.' '.$name.'">'.$label.''.$break. ''.$name.'" class="zemText '.$zemRequired.$isError.'" name="'.$name.'" value="'.htmlspecialchars($value).'"'.$size.$maxlength.' />'; } function zem_contact_textarea($atts) { global $zem_contact_error, $zem_contact_submit; extract(zem_contact_lAtts(array( 'break' => br, 'cols' => 58, 'default' => '', 'isError' => '', 'label' => zem_contact_gTxt('message'), 'max' => 10000, 'min' => 0, 'name' => '', 'required' => 1, 'rows' => 8 ), $atts)); $min = intval($min); $max = intval($max); $cols = intval($cols); $rows = intval($rows); if (empty($name)) $name = zem_contact_label2name($label); if ($zem_contact_submit) { $value = ps($name); $utf8len = preg_match_all("/./su", $value, $utf8ar); $hlabel = htmlspecialchars($label); if (strlen($value)) { if (!$utf8len) { $zem_contact_error[] = zem_contact_gTxt('invalid_utf8', $hlabel); $isError = "errorElement"; } elseif ($min and $utf8len < $min) { $zem_contact_error[] = zem_contact_gTxt('min_warning', $hlabel, $min); $isError = "errorElement"; } elseif ($max and $utf8len > $max) { $zem_contact_error[] = zem_contact_gTxt('max_warning', $hlabel, $max); $isError = "errorElement"; #$value = join('',array_slice($utf8ar[0],0,$max)); } else { zem_contact_store($name, $label, $value); } } elseif ($required) { $zem_contact_error[] = zem_contact_gTxt('field_missing', $hlabel); $isError = "errorElement"; } } else { $value = $default; } $zemRequired = $required ? 'zemRequired' : ''; return '$name.'" class="zemTextarea '.$zemRequired.$isError.' '.$name.'">'.$label.''.$break. ''; } function zem_contact_email($atts) { global $zem_contact_error, $zem_contact_submit, $zem_contact_from, $zem_contact_recipient; extract(zem_contact_lAtts(array( 'default' => '', 'isError' => '', 'label' => zem_contact_gTxt('email'), 'max' => 100, 'min' => 0, 'name' => '', 'required' => 1, 'break' => br, 'size' => '', 'send_article' => 0 ), $atts)); if (empty($name)) $name = zem_contact_label2name($label); $email = $zem_contact_submit ? ps($name) : $default; if ($zem_contact_submit and strlen($email)) { if (!preg_match('/^[\w._-]+@([\w-]+\.)+[\w-]+$/', $email)) { $zem_contact_error[] = zem_contact_gTxt('invalid_email', htmlspecialchars($email)); $isError = "errorElement"; } else { preg_match("/@(.+)$/", $email, $match); $domain = $match[1]; if (is_callable('checkdnsrr') and checkdnsrr('textpattern.com.','A') and !checkdnsrr($domain.'.','MX') and !checkdnsrr($domain.'.','A')) { $zem_contact_error[] = zem_contact_gTxt('invalid_host', htmlspecialchars($domain)); $isError = "errorElement"; } else { if ($send_article) { $zem_contact_recipient = $email; } else { $zem_contact_from = $email; } } } } return zem_contact_text(array( 'default' => $email, 'isError' => $isError, 'label' => $label, 'max' => $max, 'min' => $min, 'name' => $name, 'required' => $required, 'break' => $break, 'size' => $size )); } function zem_contact_select($atts) { global $zem_contact_error, $zem_contact_submit; extract(zem_contact_lAtts(array( 'name' => '', 'break' => ' ', 'delimiter' => ',', 'isError' => '', 'label' => zem_contact_gTxt('option'), 'list' => zem_contact_gTxt('general_inquiry'), 'required' => 1, 'selected' => '' ), $atts)); if (empty($name)) $name = zem_contact_label2name($label); $list = array_map('trim', split($delimiter, preg_replace('/[\r\n\t\s]+/', ' ',$list))); if ($zem_contact_submit) { $value = trim(ps($name)); if (strlen($value)) { if (in_array($value, $list)) { zem_contact_store($name, $label, $value); } else { $zem_contact_error[] = zem_contact_gTxt('invalid_value', htmlspecialchars($label), htmlspecialchars($value)); $isError = "errorElement"; } } elseif ($required) { $zem_contact_error[] = zem_contact_gTxt('field_missing', htmlspecialchars($label)); $isError = "errorElement"; } } else { $value = $selected; } $out = ''; foreach ($list as $item) { $out .= n.t.''.($item == $value ? ' selected="selected">' : '>').(strlen($item) ? htmlspecialchars($item) : ' ').''; } $zemRequired = $required ? 'zemRequired' : ''; return '$name.'" class="zemSelect '.$zemRequired.$isError.' '.$name.'">'.$label.''.$break. n.''; } function zem_contact_checkbox($atts) { global $zem_contact_error, $zem_contact_submit; extract(zem_contact_lAtts(array( 'break' => ' ', 'checked' => 0, 'isError' => '', 'label' => zem_contact_gTxt('checkbox'), 'name' => '', 'required' => 1 ), $atts)); if (empty($name)) $name = zem_contact_label2name($label); if ($zem_contact_submit) { $value = (bool) ps($name); if ($required and !$value) { $zem_contact_error[] = zem_contact_gTxt('field_missing', htmlspecialchars($label)); $isError = "errorElement"; } else { zem_contact_store($name, $label, $value ? gTxt('yes') : gTxt('no')); } } else { $value = $checked; } $zemRequired = $required ? 'zemRequired' : ''; return ''.$name.'" class="zemCheckbox '.$zemRequired.$isError.'" name="'.$name.'"'. ($value ? ' checked="checked"' : '').' />'.$break. '$name.'" class="zemCheckbox '.$zemRequired.$isError.' '.$name.'">'.$label.''; } function zem_contact_serverinfo($atts) { global $zem_contact_submit; extract(zem_contact_lAtts(array( 'label' => '', 'name' => '' ), $atts)); if (empty($name)) $name = zem_contact_label2name($label); if (strlen($name) and $zem_contact_submit) { if (!$label) $label = $name; zem_contact_store($name, $label, serverSet($name)); } } function zem_contact_secret($atts, $thing = '') { global $zem_contact_submit; extract(zem_contact_lAtts(array( 'name' => '', 'label' => zem_contact_gTxt('secret'), 'value' => '' ), $atts)); $name = zem_contact_label2name($name ? $name : $label); if ($zem_contact_submit) { if ($thing) $value = trim(parse($thing)); zem_contact_store($name, $label, $value); } return ''; } function zem_contact_radio($atts) { global $zem_contact_error, $zem_contact_submit, $zem_contact_values; extract(zem_contact_lAtts(array( 'break' => ' ', 'checked' => 0, 'group' => '', 'label' => zem_contact_gTxt('option'), 'name' => '' ), $atts)); static $cur_name = ''; static $cur_group = ''; if (!$name and !$group and !$cur_name and !$cur_group) { $cur_group = zem_contact_gTxt('radio'); $cur_name = $cur_group; } if ($group and !$name and $group != $cur_group) $name = $group; if ($name) $cur_name = $name; else $name = $cur_name; if ($group) $cur_group = $group; else $group = $cur_group; $id = 'q'.md5($name.'=>'.$label); $name = zem_contact_label2name($name); if ($zem_contact_submit) { $is_checked = (ps($name) == $id); if ($is_checked or $checked and !isset($zem_contact_values[$name])) { zem_contact_store($name, $group, $label); } } else { $is_checked = $checked; } return ''.$id.'" type="radio" id="'.$id.'" class="zemRadio '.$name.'" name="'.$name.'"'. ( $is_checked ? ' checked="checked" />' : ' />').$break. '$id.'" class="zemRadio '.$name.'">'.$label.''; } function zem_contact_send_article($atts) { if (!isset($_REQUEST['zem_contact_send_article'])) { $linktext = (empty($atts['linktext'])) ? zem_contact_gTxt('send_article') : $atts['linktext']; $join = (empty($_SERVER['QUERY_STRING'])) ? '?' : '&'; $href = $_SERVER['REQUEST_URI'].$join.'zem_contact_send_article=yes'; return ''.$href.'">'.$linktext.''; } return; } function zem_contact_submit($atts, $thing) { extract(zem_contact_lAtts(array( 'button' => 0, 'label' => zem_contact_gTxt('send') ), $atts)); if ($button or strlen($thing)) { return ''; } else { return ''.$label.'" />'; } } function zem_contact_lAtts($arr, $atts) { foreach(array('button', 'copysender', 'checked', 'required', 'send_article', 'show_input', 'show_error') as $key) { if (isset($atts[$key])) { if ($atts[$key] == 'yes') $atts[$key] = 1; elseif ($atts[$key] == 'no') $atts[$key] = 0; else $atts[$key] = intval($atts[$key]); } } if (isset($atts['break']) and $atts['break'] == 'br') $atts['break'] = '
'; return lAtts($arr, $atts); } class zemcontact_evaluation { var $status; function zemcontact_evaluation() { $this->status = 0; } function add_zemcontact_status($check) { $this->status += $check; } function get_zemcontact_status() { return $this->status; } } function &get_zemcontact_evaluator() { static $instance; if(!isset($instance)) { $instance = new zemcontact_evaluation(); } return $instance; } function zem_contact_label2name($label) { $label = trim($label); if (strlen($label) == 0) return 'invalid'; if (strlen($label) <= 32 and preg_match('/^[a-zA-Z][A-Za-z0-9:_-]*$/', $label)) return $label; else return 'q'.md5($label); } function zem_contact_store($name, $label, $value) { global $zem_contact_form, $zem_contact_labels, $zem_contact_values; $zem_contact_form[$label] = $value; $zem_contact_labels[$name] = $label; $zem_contact_values[$name] = $value; } function zem_contact_mailheader($string, $type) { global $prefs; if (!strstr($string,'=?') and !preg_match('/[\x00-\x1F\x7F-\xFF]/', $string)) { if ("phrase" == $type) { if (preg_match('/[][()<>@,;:".\x5C]/', $string)) { $string = '"'. strtr($string, array("\\" => "\\\\", '"' => '\"')) . '"'; } } elseif ("text" != $type) { trigger_error('Unknown encode_mailheader type', E_USER_WARNING); } return $string; } if ($prefs['override_emailcharset']) { $start = '=?ISO-8859-1?B?'; $pcre = '/.{1,42}/s'; } else { $start = '=?UTF-8?B?'; $pcre = '/.{1,45}(?=[\x00-\x7F\xC0-\xFF]|$)/s'; } $end = '?='; $sep = is_windows() ? "\r\n" : "\n"; preg_match_all($pcre, $string, $matches); return $start . join($end.$sep.' '.$start, array_map('base64_encode',$matches[0])) . $end; }

You need to create an account or log in to post comments to this site.