From 6b767d1cc0e9697af95ec399fd612d203d10826a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 26 Jan 2015 22:15:19 +0100 Subject: [PATCH] refactoring for fetching content --- app/AppKernel.php | 2 - app/config/routing.yml | 2 +- app/config/routing_dev.yml | 6 +- .../CoreBundle/Controller/EntryController.php | 11 ++- src/Wallabag/CoreBundle/Helper/Content.php | 34 +++++++ src/Wallabag/CoreBundle/Service/Extractor.php | 92 +++++++++++++++++++ 6 files changed, 135 insertions(+), 12 deletions(-) create mode 100644 src/Wallabag/CoreBundle/Helper/Content.php create mode 100644 src/Wallabag/CoreBundle/Service/Extractor.php diff --git a/app/AppKernel.php b/app/AppKernel.php index b0a66dad..f0383038 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -16,13 +16,11 @@ class AppKernel extends Kernel new Symfony\Bundle\AsseticBundle\AsseticBundle(), new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), - new AppBundle\AppBundle(), new Wallabag\CoreBundle\WallabagCoreBundle(), ); if (in_array($this->getEnvironment(), array('dev', 'test'))) { $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); - $bundles[] = new Acme\DemoBundle\AcmeDemoBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); diff --git a/app/config/routing.yml b/app/config/routing.yml index b3c5291a..95c224ab 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -4,4 +4,4 @@ app: homepage: pattern: / - defaults: { _controller: CoreBundle:Entry:showUnread } \ No newline at end of file + defaults: { _controller: WallabagCoreBundle:Entry:showUnread } \ No newline at end of file diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml index 99130058..1a236e28 100644 --- a/app/config/routing_dev.yml +++ b/app/config/routing_dev.yml @@ -15,8 +15,4 @@ _errors: prefix: /_error _main: - resource: routing.yml - -# AcmeDemoBundle routes (to be removed) -_acme_demo: - resource: "@AcmeDemoBundle/Resources/config/routing.yml" \ No newline at end of file + resource: routing.yml \ No newline at end of file diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 2ebb416c..48d19307 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -7,6 +7,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Wallabag\CoreBundle\Repository; use Wallabag\CoreBundle\Entity\Entries; +use Wallabag\CoreBundle\Service\Extractor; use Wallabag\Wallabag\Tools; use Wallabag\Wallabag\Url; @@ -32,10 +33,12 @@ class EntryController extends Controller if ($form->isValid()) { - $content = Tools::getPageContent(new Url($entry->getUrl())); - var_dump($content);die; + $content = Extractor::extract($entry->getUrl()); - $em = $this->getDoctrine()->getEntityManager(); + $entry->setTitle($content->getTitle()); + $entry->setContent($content->getBody()); + + $em = $this->getDoctrine()->getManager(); $em->persist($entry); $em->flush(); @@ -170,7 +173,7 @@ class EntryController extends Controller */ public function deleteEntryAction(Request $request, Entries $entry) { - $em = $this->getDoctrine()->getEntityManager(); + $em = $this->getDoctrine()->getManager(); $em->remove($entry); $em->flush(); diff --git a/src/Wallabag/CoreBundle/Helper/Content.php b/src/Wallabag/CoreBundle/Helper/Content.php new file mode 100644 index 00000000..81acbad7 --- /dev/null +++ b/src/Wallabag/CoreBundle/Helper/Content.php @@ -0,0 +1,34 @@ +title; + } + + public function setTitle($title) + { + $this->title = $title; + } + + public function getBody() + { + return $this->body; + } + + public function setBody($body) + { + $this->body = $body; + } +} \ No newline at end of file diff --git a/src/Wallabag/CoreBundle/Service/Extractor.php b/src/Wallabag/CoreBundle/Service/Extractor.php new file mode 100644 index 00000000..790386d4 --- /dev/null +++ b/src/Wallabag/CoreBundle/Service/Extractor.php @@ -0,0 +1,92 @@ +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); + } +} \ No newline at end of file -- 2.41.0