function ParseMimeifiedPages($data) { if (!($headers = ParseRFC822Headers($data)) || empty($headers['content-type'])) { //trigger_error( sprintf(_("Can't find %s"),'content-type header'), // E_USER_WARNING ); return false; } $typeheader = $headers['content-type']; if (!(list($type, $subtype, $params) = ParseMimeContentType($typeheader))) { trigger_error(sprintf("Can't parse %s: (%s)", 'content-type', $typeheader), E_USER_WARNING); return false; } if ("{$type}/{$subtype}" == 'multipart/mixed') { return ParseMimeMultipart($data, $params['boundary']); } else { if ("{$type}/{$subtype}" != 'application/x-phpwiki') { trigger_error(sprintf("Bad %s", "content-type: {$type}/{$subtype}"), E_USER_WARNING); return false; } } // FIXME: more sanity checking? $page = array(); $pagedata = array(); $versiondata = array(); $pagedata['date'] = strtotime($headers['date']); //DONE: support owner and acl foreach ($params as $key => $value) { if (empty($value)) { continue; } $value = rawurldecode($value); switch ($key) { case 'pagename': case 'version': $page[$key] = $value; break; case 'flags': if (preg_match('/PAGE_LOCKED/', $value)) { $pagedata['locked'] = 'yes'; } break; case 'owner': case 'created': case 'hits': $pagedata[$key] = $value; break; case 'acl': case 'perm': if (class_exists('PagePermission')) { $pagedata['perm'] = ParseMimeifiedPerm($value); } break; case 'lastmodified': $versiondata['mtime'] = $value; break; case 'author': case 'author_id': case 'summary': case 'markup': case 'pagetype': $versiondata[$key] = $value; break; } } // FIXME: do we need to try harder to find a pagename if we // haven't got one yet? if (!isset($versiondata['author'])) { global $request; if (is_object($request)) { $user = $request->getUser(); $versiondata['author'] = $user->getId(); //FIXME:? } } $encoding = strtolower($headers['content-transfer-encoding']); if ($encoding == 'quoted-printable') { $data = QuotedPrintableDecode($data); } else { if ($encoding && $encoding != 'binary') { ExitWiki(sprintf("Unknown %s", 'encoding type: $encoding')); } } $data .= GenerateFootnotesFromRefs($params); $page['content'] = preg_replace('/[ \\t\\r]*\\n/', "\n", chop($data)); $page['pagedata'] = $pagedata; $page['versiondata'] = $versiondata; return array($page); }
function ParseMimeifiedPages($data) { if (!($headers = ParseRFC822Headers($data)) || !($typeheader = $headers['content-type'])) { //warn("Can't find content-type header"); return false; } if (!(list($type, $subtype, $params) = ParseMimeContentType($typeheader))) { warn("Can't parse content-type: (" . htmlspecialchars($typeheader) . ")"); return false; } if ("{$type}/{$subtype}" == 'multipart/mixed') { return ParseMimeMultipart($data, $params['boundary']); } else { if ("{$type}/{$subtype}" != 'application/x-phpwiki') { warn("Bad content-type: {$type}/{$subtype}"); return false; } } // FIXME: more sanity checking? $pagehash = array('pagename' => rawurldecode($params['pagename']), 'author' => rawurldecode($params['author']), 'version' => $params['version'], 'lastmodified' => $params['lastmodified'], 'created' => $params['created']); $pagehash['flags'] = 0; if (preg_match('/PAGE_LOCKED/', $params['flags'])) { $pagehash['flags'] |= FLAG_PAGE_LOCKED; } for ($i = 1; $i <= NUM_LINKS; $i++) { if ($ref = $params["ref{$i}"]) { $pagehash['refs'][$i] = rawurldecode($ref); } } $encoding = strtolower($headers['content-transfer-encoding']); if ($encoding == 'quoted-printable') { $data = QuotedPrintableDecode($data); } else { if ($encoding && $encoding != 'binary') { die("Unknown encoding type: {$encoding}"); } } $pagehash['content'] = preg_split('/[ \\t\\r]*\\n/', chop($data)); return array($pagehash); }