"email": "hello@wallabag.org",
"issues": "https://github.com/wallabag/wallabag/issues"
},
- "repositories": [
- {
- "type": "vcs",
- "url": "https://github.com/wallabag/php-readability"
- },
- {
- "type": "vcs",
- "url": "https://github.com/wallabag/Fivefilters_Libraries"
- }
- ],
"require": {
"php": ">=5.3.3",
"symfony/symfony": "~2.7.0",
- "doctrine/orm": "~2.2,>=2.2.3",
+ "doctrine/orm": "~2.3",
"doctrine/doctrine-bundle": "~1.2",
"twig/extensions": "~1.0",
"symfony/assetic-bundle": "~2.3",
"willdurand/hateoas-bundle": "~0.5.0",
"htmlawed/htmlawed": "~1.1.19",
"liip/theme-bundle": "~1.1.3",
- "wallabag/php-readability": "~1.0.0",
- "wallabag/Fivefilters_Libraries": "~1.0",
"pagerfanta/pagerfanta": "~1.0.3",
- "lexik/form-filter-bundle": "~4.0"
+ "lexik/form-filter-bundle": "~4.0",
+ "j0k3r/graby": "dev-master"
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "~2.2.0",
{
$url = $request->request->get('url');
- $content = Extractor::extract($url);
+ $content = $this->get('wallabag_core.graby')->fetchContent($url);
+
$entry = new Entry($this->getUser());
$entry->setUrl($url);
- $entry->setTitle($request->request->get('title') ?: $content->getTitle());
- $entry->setContent($content->getBody());
+ $entry->setTitle($request->request->get('title') ?: $content['title']);
+ $entry->setContent($content['html']);
+ $entry->setMimetype($content['content_type']);
+ if (isset($content['open_graph']['og_image'])) {
+ $entry->setPreviewPicture($content['open_graph']['og_image']);
+ }
$tags = $request->request->get('tags', '');
if (!empty($tags)) {
tags:
- { name: monolog.logger, channel: wsse }
arguments: ['@security.context', '@security.authentication.manager', '@logger']
+
+ wallabag_core.graby:
+ class: Graby\Graby
$form->handleRequest($request);
if ($form->isValid()) {
- $content = Extractor::extract($entry->getUrl());
-
- $entry->setTitle($content->getTitle());
- $entry->setContent($content->getBody());
+ $content = $this->get('wallabag_core.graby')->fetchContent($entry->getUrl());
+
+ $entry->setTitle($content['title']);
+ $entry->setContent($content['html']);
+ $entry->setMimetype($content['content_type']);
+ if (isset($content['open_graph']['og_image'])) {
+ $entry->setPreviewPicture($content['open_graph']['og_image']);
+ }
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
*/
private $domainName;
+ /**
+ * @var string
+ *
+ * @ORM\Column(name="preview_picture", type="text", nullable=true)
+ */
+ private $previewPicture;
+
/**
* @var bool
*
{
$this->tags->removeElement($tag);
}
+
+ /**
+ * Set previewPicture
+ *
+ * @param string $previewPicture
+ *
+ * @return Entry
+ */
+ public function setPreviewPicture($previewPicture)
+ {
+ $this->previewPicture = $previewPicture;
+
+ return $this;
+ }
+
+ /**
+ * Get previewPicture
+ *
+ * @return string
+ */
+ public function getPreviewPicture()
+ {
+ return $this->previewPicture;
+ }
+
}
+++ /dev/null
-<?php
-
-namespace Wallabag\CoreBundle\Helper;
-
-class Content
-{
- private $title;
-
- private $body;
-
- public function __constructor()
- {
- }
-
- public function getTitle()
- {
- return $this->title;
- }
-
- public function setTitle($title)
- {
- $this->title = $title;
- }
-
- public function getBody()
- {
- return $this->body;
- }
-
- public function setBody($body)
- {
- $this->body = $body;
- }
-}
+++ /dev/null
-<?php
-
-namespace Wallabag\CoreBundle\Helper;
-
-class Url
-{
- public $url;
-
- public function __construct($url)
- {
- $this->url = base64_decode($url);
- }
-
- public function getUrl()
- {
- return $this->url;
- }
-
- public function setUrl($url)
- {
- $this->url = $url;
- }
-
- public function isCorrect()
- {
- return filter_var($this->url, FILTER_VALIDATE_URL) !== false;
- }
-}
wallabag_core.doctrine.prefixed_naming_strategy:
class: Wallabag\CoreBundle\Doctrine\Mapping\PrefixedNamingStrategy
arguments: [%database_table_prefix%]
+
+ wallabag_core.graby:
+ class: Graby\Graby
<div class="nav-wrapper cyan darken-1">
<ul>
<li>
- <a class="waves-effect" href="/">
+ <a class="waves-effect" href="{{ path('homepage') }}">
<i class="mdi-action-exit-to-app"></i>
</a>
</li>
</nav>
<ul id="slide-out" class="collapsible side-nav fixed reader-mode" data-collapsible="accordion">
<li class="bold border-bottom hide-on-med-and-down">
- <a class="waves-effect collapsible-header" href="/">
+ <a class="waves-effect collapsible-header" href="{{ path('homepage') }}">
<i class="mdi-action-exit-to-app small"></i>
<span>{% trans %}back{% endtrans %}</span>
</a>
+++ /dev/null
-<?php
-
-namespace Wallabag\CoreBundle\Service;
-
-use Wallabag\CoreBundle\Helper\Content;
-use Wallabag\CoreBundle\Helper\Url;
-
-final class Extractor
-{
- public static function extract($url)
- {
- $pageContent = self::getPageContent(new Url(base64_encode($url)));
- $title = $pageContent['rss']['channel']['item']['title'] ?: parse_url($url, PHP_URL_HOST);
- $body = $pageContent['rss']['channel']['item']['description'];
-
- $content = new Content();
- $content->setTitle($title);
- $content->setBody($body);
-
- return $content;
- }
-
- /**
- * Get the content for a given URL (by a call to FullTextFeed).
- *
- * @param Url $url
- *
- * @return mixed
- */
- public static function getPageContent(Url $url)
- {
- // Saving and clearing context
- $REAL = array();
- foreach ($GLOBALS as $key => $value) {
- if ($key != 'GLOBALS' && $key != '_SESSION' && $key != 'HTTP_SESSION_VARS') {
- $GLOBALS[$key] = array();
- $REAL[$key] = $value;
- }
- }
- // Saving and clearing session
- if (isset($_SESSION)) {
- $REAL_SESSION = array();
- foreach ($_SESSION as $key => $value) {
- $REAL_SESSION[$key] = $value;
- unset($_SESSION[$key]);
- }
- }
-
- // Running code in different context
- $scope = function () {
- extract(func_get_arg(1));
- $_GET = $_REQUEST = array(
- 'url' => $url->getUrl(),
- 'max' => 5,
- 'links' => 'preserve',
- 'exc' => '',
- 'format' => 'json',
- 'submit' => 'Create Feed',
- );
- ob_start();
- require func_get_arg(0);
- $json = ob_get_contents();
- ob_end_clean();
-
- return $json;
- };
-
- // Silence $scope function to avoid
- // issues with FTRSS when error_reporting is to high
- // FTRSS generates PHP warnings which break output
- $json = @$scope(__DIR__.'/../../../../vendor/wallabag/Fivefilters_Libraries/makefulltextfeed.php', array('url' => $url));
-
- // Clearing and restoring context
- foreach ($GLOBALS as $key => $value) {
- if ($key != 'GLOBALS' && $key != '_SESSION') {
- unset($GLOBALS[$key]);
- }
- }
- foreach ($REAL as $key => $value) {
- $GLOBALS[$key] = $value;
- }
-
- // Clearing and restoring session
- if (isset($REAL_SESSION)) {
- foreach ($_SESSION as $key => $value) {
- unset($_SESSION[$key]);
- }
-
- foreach ($REAL_SESSION as $key => $value) {
- $_SESSION[$key] = $value;
- }
- }
-
- return json_decode($json, true);
- }
-}