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();
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;
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();
*/
public function deleteEntryAction(Request $request, Entries $entry)
{
- $em = $this->getDoctrine()->getEntityManager();
+ $em = $this->getDoctrine()->getManager();
$em->remove($entry);
$em->flush();
--- /dev/null
+<?php
+
+namespace Wallabag\CoreBundle\Service;
+
+use Wallabag\CoreBundle\Helper\Content;
+use Wallabag\Wallabag\Url;
+
+final class Extractor
+{
+ public static function extract($url) {
+ $pageContent = Extractor::getPageContent(new Url(base64_encode($url)));
+ $title = ($pageContent['rss']['channel']['item']['title'] != '') ? $pageContent['rss']['channel']['item']['title'] : _('Untitled');
+ $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);
+ }
+}
\ No newline at end of file