WordpressImporter::importItem PHP Method

importItem() public method

public importItem ( DOMNode $item, $fallbackTZOffset )
$item DOMNode
    function importItem(DOMNode $item, $fallbackTZOffset = 0)
    {
        $obj = $this->createItemObject($item);
        if ($obj === null) {
            $this->report('discarded unknown item <code>%s<code>', h($this->doc->saveXML($item)));
            return null;
        }
        if (!$this->includeAttachments && $obj instanceof WPAttachment) {
            return null;
        }
        $is_exposed = !$obj instanceof WPAttachment;
        $obj->mimeType = 'text/html';
        $datelocalstr = null;
        $datelocal = false;
        $dateutc = false;
        foreach ($item->childNodes as $n) {
            if ($n->nodeType !== XML_ELEMENT_NODE) {
                continue;
            }
            # we're doing doing this to avoid a bug in php where accessing this property
            # from strpos or str_replace causes a silent hang.
            $name = '' . $n->nodeName;
            if ($is_exposed && $name === 'title') {
                $obj->title = $n->nodeValue;
            } elseif ($is_exposed && $name === 'content:encoded') {
                $obj->body = $n->nodeValue;
            } elseif ($name === 'excerpt:encoded') {
                # will be derived from body by the content rebuilder, so in case WP
                # adds this in the future, just discard it. (In WP 2.6 this is never
                # present anyway.)
            } elseif ($is_exposed && $name === 'category') {
                if (($domain = $n->attributes->getNamedItem('domain')) !== null) {
                    if ($domain->nodeValue === 'category' && $n->nodeValue !== 'Uncategorized' && $n->attributes->getNamedItem('nicename') !== 'uncategorized' && !in_array($n->nodeValue, $obj->categories)) {
                        $obj->categories[] = $n->nodeValue;
                    } elseif ($domain->nodeValue === 'tag' && !in_array($n->nodeValue, $obj->tags)) {
                        $obj->tags[] = $n->nodeValue;
                    }
                }
            } elseif ($is_exposed && $name === 'wp:comment_status') {
                $obj->commentsOpen = $n->nodeValue === 'open';
            } elseif ($is_exposed && $name === 'wp:ping_status') {
                $obj->pingbackOpen = $n->nodeValue === 'open';
            } elseif ($is_exposed && $name === 'wp:post_name') {
                $obj->slug = $n->nodeValue;
            } elseif ($name === 'wp:post_date_gmt') {
                if ($n->nodeValue !== '0000-00-00 00:00:00') {
                    $dateutc = new GBDateTime($n->nodeValue);
                }
            } elseif ($name === 'wp:post_date') {
                $datelocalstr = $n->nodeValue;
                $datelocal = new GBDateTime($n->nodeValue);
                $obj->wpdate = $datelocal;
            } elseif ($name === 'wp:menu_order' && $obj instanceof WPPage) {
                $obj->order = intval($n->nodeValue);
            } elseif ($is_exposed && $name === 'wp:status') {
                $obj->draft = $n->nodeValue === 'draft';
            } elseif ($name === 'wp:post_id') {
                $obj->wpid = (int) $n->nodeValue;
            } elseif ($name === 'wp:postmeta') {
                if ($is_exposed === false) {
                    # get attachment filename
                    $k = $v = null;
                    foreach ($n->childNodes as $n2) {
                        if ($n2->nodeType !== XML_ELEMENT_NODE) {
                            continue;
                        }
                        if ($n2->nodeName === 'wp:meta_key') {
                            $k = $n2->nodeValue;
                        } elseif ($n2->nodeName === 'wp:meta_value') {
                            if ($k === '_wp_attached_file') {
                                $obj->wpfilename = $n2->nodeValue;
                            } elseif ($k === '_wp_attachment_metadata') {
                                $obj->wpmeta = @unserialize(trim($n2->nodeValue));
                                if ($obj->wpmeta === false) {
                                    $this->wpmeta = array();
                                }
                            }
                        }
                    }
                }
            } elseif ($name === 'wp:post_parent') {
                $obj->wpparent = $n->nodeValue;
            } elseif ($is_exposed === false && $name === 'wp:attachment_url') {
                $obj->wpurl = $n->nodeValue;
            } elseif ($name === 'wp:post_type') {
                # discard
            } elseif ($name === 'dc:creator') {
                $obj->author = new GBAuthor($n->nodeValue, $this->defaultAuthorEmail);
            } elseif ($is_exposed && $name === 'wp:comment') {
                if ($obj->comments === null) {
                    $obj->comments = array();
                }
                $comment = $this->parseComment($n, $wpid);
                $comment->post = $obj;
                $obj->comments[$wpid] = $comment;
            } elseif ($is_exposed && substr($name, 0, 3) === 'wp:' && trim($n->nodeValue)) {
                $obj->meta[str_replace(array(':', '_'), '-', $name)] = $n->nodeValue;
            }
        }
        if ($is_exposed && $obj->comments) {
            $this->report('Imported ' . counted(count($obj->comments), 'comment', 'comments', 'zero', 'one'));
        }
        # date
        $obj->modified = $obj->published = $this->_mkdatetime($datelocal, $dateutc, $datelocalstr, $fallbackTZOffset);
        return $obj;
    }