function stripSlashesArray($array) { $result = array(); $rvalue = null; foreach ($array as $key => $value) { /* 去除值的引号 */ if (is_array($value)) { $rvalue = stripSlashesArray($value); } else { $rvalue = stripslashes($value); } /* 去除键的引号 */ if (is_numeric($key)) { $result[$key] = $rvalue; } else { $result[stripslashes($key)] = $rvalue; } } return $result; }
function loadMessageData($msgid) { $default = array('from' => getConfig('message_from_address'), 'google_track' => getConfig('always_add_googletracking')); if (empty($default['from'])) { $default['from'] = getConfig('admin_address'); } if (!isset($GLOBALS['MD']) || !is_array($GLOBALS['MD'])) { $GLOBALS['MD'] = array(); } if (isset($GLOBALS['MD'][$msgid])) { return $GLOBALS['MD'][$msgid]; } ## when loading an old message that hasn't got data stored in message data, load it from the message table $prevMsgData = Sql_Fetch_Assoc_Query(sprintf('select * from %s where id = %d', $GLOBALS['tables']['message'], $msgid)); $finishSending = time() + DEFAULT_MESSAGEAGE; $messagedata = array('template' => getConfig('defaultmessagetemplate'), 'sendformat' => 'HTML', 'message' => '', 'forwardmessage' => '', 'textmessage' => '', 'rsstemplate' => '', 'embargo' => array('year' => date('Y'), 'month' => date('m'), 'day' => date('d'), 'hour' => date('H'), 'minute' => date('i')), 'repeatinterval' => 0, 'repeatuntil' => array('year' => date('Y'), 'month' => date('m'), 'day' => date('d'), 'hour' => date('H'), 'minute' => date('i')), 'requeueinterval' => 0, 'requeueuntil' => array('year' => date('Y'), 'month' => date('m'), 'day' => date('d'), 'hour' => date('H'), 'minute' => date('i')), 'finishsending' => array('year' => date('Y', $finishSending), 'month' => date('m', $finishSending), 'day' => date('d', $finishSending), 'hour' => date('H', $finishSending), 'minute' => date('i', $finishSending)), 'fromfield' => '', 'subject' => '', 'forwardsubject' => '', 'footer' => getConfig('messagefooter'), 'forwardfooter' => getConfig('forwardfooter'), 'status' => '', 'tofield' => '', 'replyto' => '', 'targetlist' => '', 'criteria_match' => '', 'sendurl' => '', 'sendmethod' => 'inputhere', 'testtarget' => '', 'notify_start' => getConfig('notifystart_default'), 'notify_end' => getConfig('notifyend_default'), 'google_track' => $default['google_track'] == 'true' || $default['google_track'] === true || $default['google_track'] == '1', 'excludelist' => array(), 'sentastest' => 0); if (is_array($prevMsgData)) { foreach ($prevMsgData as $key => $val) { $messagedata[$key] = $val; } } if (!empty($GLOBALS['commandline']) && $_GET['page'] == 'send') { $messagedata['fromfield'] = $_POST['from']; $messagedata['subject'] = $_POST['subject']; $messagedata['message'] = $_POST['message']; $messagedata['targetlist'] = $_POST['targetlist']; } if ($messagedata['subject'] == '(no title)') { $messagedata['subject'] = '(no subject)'; } $msgdata_req = Sql_Query(sprintf('select * from %s where id = %d', $GLOBALS['tables']['messagedata'], $msgid)); while ($row = Sql_Fetch_Assoc($msgdata_req)) { if (strpos($row['data'], 'SER:') === 0) { $data = stripSlashesArray(unserialize(substr($row['data'], 4))); } else { $data = stripslashes($row['data']); } if (!in_array($row['name'], array('astext', 'ashtml', 'astextandhtml', 'aspdf', 'astextandpdf'))) { ## don't overwrite counters in the message table from the data table $messagedata[stripslashes($row['name'])] = $data; } } foreach (array('embargo', 'repeatuntil', 'requeueuntil') as $datefield) { if (!is_array($messagedata[$datefield])) { $messagedata[$datefield] = array('year' => date('Y'), 'month' => date('m'), 'day' => date('d'), 'hour' => date('H'), 'minute' => date('i')); } } // Load lists that were targetted with message... $result = Sql_Query(sprintf('select list.name,list.id from ' . $GLOBALS['tables']['listmessage'] . ' listmessage,' . $GLOBALS['tables']['list'] . ' list where listmessage.messageid = %d and listmessage.listid = list.id', $msgid)); while ($lst = Sql_fetch_array($result)) { $messagedata['targetlist'][$lst['id']] = 1; } ## backwards, check that the content has a url and use it to fill the sendurl if (empty($messagedata['sendurl'])) { ## can't do "ungreedy matching, in case the URL has placeholders, but this can potentially ## throw problems if (preg_match('/\\[URL:(.*)\\]/i', $messagedata['message'], $regs)) { $messagedata['sendurl'] = $regs[1]; } } if (empty($messagedata['sendurl']) && !empty($messagedata['message'])) { # if there's a message and no url, make sure to show the editor, and not the URL input $messagedata['sendmethod'] = 'inputhere'; } ### parse the from field into it's components - email and name if (preg_match('/([^ ]+@[^ ]+)/', $messagedata['fromfield'], $regs)) { # if there is an email in the from, rewrite it as "name <email>" $messagedata['fromname'] = str_replace($regs[0], '', $messagedata['fromfield']); $messagedata['fromemail'] = $regs[0]; # if the email has < and > take them out here $messagedata['fromemail'] = str_replace('<', '', $messagedata['fromemail']); $messagedata['fromemail'] = str_replace('>', '', $messagedata['fromemail']); # make sure there are no quotes around the name $messagedata['fromname'] = str_replace('"', '', ltrim(rtrim($messagedata['fromname']))); } elseif (strpos($messagedata['fromfield'], ' ')) { # if there is a space, we need to add the email $messagedata['fromname'] = $messagedata['fromfield']; # $cached[$messageid]["fromemail"] = "listmaster@$domain"; $messagedata['fromemail'] = $default['from']; } else { $messagedata['fromemail'] = $default['from']; $messagedata['fromname'] = $messagedata['fromfield']; } // disallow an email address in the name if (preg_match('/([^ ]+@[^ ]+)/', $messagedata['fromname'], $regs)) { $messagedata['fromname'] = str_replace($regs[0], '', $messagedata['fromname']); } // clean up $messagedata['fromemail'] = str_replace(',', '', $messagedata['fromemail']); $messagedata['fromname'] = str_replace(',', '', $messagedata['fromname']); $messagedata['fromname'] = trim($messagedata['fromname']); # erase double spacing while (strpos($messagedata['fromname'], ' ')) { $messagedata['fromname'] = str_replace(' ', ' ', $messagedata['fromname']); } ## if the name ends up being empty, copy the email if (empty($messagedata['fromname'])) { $messagedata['fromname'] = $messagedata['fromemail']; } if (isset($messagedata['targetlist']['unselect'])) { unset($messagedata['targetlist']['unselect']); } if (isset($messagedata['excludelist']['unselect'])) { unset($messagedata['excludelist']['unselect']); } if (empty($messagedata['campaigntitle'])) { if ($messagedata['subject'] != '(no subject)') { $messagedata['campaigntitle'] = $messagedata['subject']; } else { $messagedata['campaigntitle'] = '(no title)'; } } ## copy subject to title if ($messagedata['campaigntitle'] == '(no title)' && $messagedata['subject'] != '(no subject)') { $messagedata['campaigntitle'] = $messagedata['subject']; } $GLOBALS['MD'][$msgid] = $messagedata; # var_dump($messagedata); return $messagedata; }