FeedDiscussionsPlugin::PollFeed PHP Метод

PollFeed() защищенный Метод

protected PollFeed ( $FeedURL, $LastImportDate )
    protected function PollFeed($FeedURL, $LastImportDate)
    {
        $Pr = new ProxyRequest();
        $FeedRSS = $Pr->Request(array('URL' => $FeedURL));
        if (!$FeedRSS) {
            return FALSE;
        }
        $RSSData = simplexml_load_string($FeedRSS);
        if (!$RSSData) {
            return FALSE;
        }
        $Channel = GetValue('channel', $RSSData, FALSE);
        if (!$Channel) {
            return FALSE;
        }
        if (!array_key_exists('item', $Channel)) {
            return FALSE;
        }
        $Feed = $this->GetFeed($FeedURL, FALSE);
        $DiscussionModel = new DiscussionModel();
        $DiscussionModel->SpamCheck = FALSE;
        $LastPublishDate = GetValue('LastPublishDate', $Feed, date('c'));
        $LastPublishTime = strtotime($LastPublishDate);
        $FeedLastPublishTime = 0;
        foreach (GetValue('item', $Channel) as $Item) {
            $FeedItemGUID = trim((string) GetValue('guid', $Item));
            if (empty($FeedItemGUID)) {
                Trace('guid is not set in each item of the RSS.  Will attempt to use link as unique identifier.');
                $FeedItemGUID = GetValue('link', $Item);
            }
            $FeedItemID = substr(md5($FeedItemGUID), 0, 30);
            $ItemPubDate = (string) GetValue('pubDate', $Item, NULL);
            if (is_null($ItemPubDate)) {
                $ItemPubTime = time();
            } else {
                $ItemPubTime = strtotime($ItemPubDate);
            }
            if ($ItemPubTime > $FeedLastPublishTime) {
                $FeedLastPublishTime = $ItemPubTime;
            }
            if ($ItemPubTime < $LastPublishTime && !$Feed['Historical']) {
                continue;
            }
            $ExistingDiscussion = $DiscussionModel->GetWhere(array('ForeignID' => $FeedItemID));
            if ($ExistingDiscussion && $ExistingDiscussion->NumRows()) {
                continue;
            }
            $this->EventArguments['Publish'] = TRUE;
            $this->EventArguments['FeedURL'] = $FeedURL;
            $this->EventArguments['Feed'] =& $Feed;
            $this->EventArguments['Item'] =& $Item;
            $this->FireEvent('FeedItem');
            if (!$this->EventArguments['Publish']) {
                continue;
            }
            $StoryTitle = array_shift($Trash = explode("\n", (string) GetValue('title', $Item)));
            $StoryBody = (string) GetValue('description', $Item);
            $StoryPublished = date("Y-m-d H:i:s", $ItemPubTime);
            $ParsedStoryBody = $StoryBody;
            $ParsedStoryBody = '<div class="AutoFeedDiscussion">' . $ParsedStoryBody . '</div> <br /><div class="AutoFeedSource">Source: ' . $FeedItemGUID . '</div>';
            $DiscussionData = array('Name' => $StoryTitle, 'Format' => 'Html', 'CategoryID' => $Feed['Category'], 'ForeignID' => substr($FeedItemID, 0, 30), 'Body' => $ParsedStoryBody);
            // Post as Minion (if one exists) or the system user
            if (Gdn::addonManager()->isEnabled('Minion', \Vanilla\Addon::TYPE_ADDON)) {
                $Minion = Gdn::PluginManager()->GetPluginInstance('MinionPlugin');
                $InsertUserID = $Minion->GetMinionUserID();
            } else {
                $InsertUserID = Gdn::UserModel()->GetSystemUserID();
            }
            $DiscussionData[$DiscussionModel->DateInserted] = $StoryPublished;
            $DiscussionData[$DiscussionModel->InsertUserID] = $InsertUserID;
            $DiscussionData[$DiscussionModel->DateUpdated] = $StoryPublished;
            $DiscussionData[$DiscussionModel->UpdateUserID] = $InsertUserID;
            $this->EventArguments['FeedDiscussion'] =& $DiscussionData;
            $this->FireEvent('Publish');
            if (!$this->EventArguments['Publish']) {
                continue;
            }
            $InsertID = $DiscussionModel->Save($DiscussionData);
            $this->EventArguments['DiscussionID'] = $InsertID;
            $this->EventArguments['Validation'] = $DiscussionModel->Validation;
            $this->FireEvent('Published');
            // Reset discussion validation
            $DiscussionModel->Validation->Results(TRUE);
        }
        $FeedKey = self::EncodeFeedKey($FeedURL);
        $this->UpdateFeed($FeedKey, array('LastImport' => date('Y-m-d H:i:s'), 'LastPublishDate' => date('c', $FeedLastPublishTime)));
    }