Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Service/Unfurl/Fetcher.php
<?php

namespace XF\Service\Unfurl;

use
XF\Entity\UnfurlResult;
use
XF\Service\AbstractService;

class
Fetcher extends AbstractService
{
    protected
$result;

    public function
__construct(\XF\App $app, UnfurlResult $result)
    {
       
parent::__construct($app);
       
$this->result = $result;
    }

    public function
fetch(&$error = null)
    {
       
$result = $this->result;

       
$metadata = $this->app->http()->metadataFetcher()->fetch($result->url, $error);

        if (!
$metadata)
        {
           
$this->logError();
            return
false;
        }

       
$title = $metadata->getTitle();

        if (!
$title)
        {
           
// if no title, might as well bail out
           
$error = 'Could not fetch title metadata from URL.';
           
$this->logError();
            return
false;
        }

       
$unfurlData = [
           
'title' => $title,
           
'description' => $metadata->getDescription(),
           
'image_url' => $metadata->getImage(),
           
'favicon_url' => $metadata->getFavicon(),
           
'last_request_date' => \XF::$time,
           
'pending' => 0
       
];
       
$result->bulkSet(
           
$this->prepareUnfurlData($unfurlData)
        );

        if (!
$result->preSave())
        {
           
$error = 'The metadata could not be saved successfully.';
           
$result->reset();
           
$this->logError();
            return
false;
        }

       
$result->save();

        return
true;
    }

    public function
render()
    {
        return
$this->app->templater()->renderUnfurl($this->result);
    }

    protected function
logError()
    {
        return
$this->repository('XF:Unfurl')->logError($this->result);
    }

    protected function
prepareUnfurlData(array $unfurlData)
    {
        return
$unfurlData;
    }
}