示例#1
0
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);
}
示例#2
0
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);
}