aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag')
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php11
-rw-r--r--src/Wallabag/CoreBundle/Helper/Content.php34
-rw-r--r--src/Wallabag/CoreBundle/Service/Extractor.php92
3 files changed, 133 insertions, 4 deletions
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;
7use Symfony\Component\HttpFoundation\Request; 7use Symfony\Component\HttpFoundation\Request;
8use Wallabag\CoreBundle\Repository; 8use Wallabag\CoreBundle\Repository;
9use Wallabag\CoreBundle\Entity\Entries; 9use Wallabag\CoreBundle\Entity\Entries;
10use Wallabag\CoreBundle\Service\Extractor;
10use Wallabag\Wallabag\Tools; 11use Wallabag\Wallabag\Tools;
11use Wallabag\Wallabag\Url; 12use Wallabag\Wallabag\Url;
12 13
@@ -32,10 +33,12 @@ class EntryController extends Controller
32 33
33 if ($form->isValid()) { 34 if ($form->isValid()) {
34 35
35 $content = Tools::getPageContent(new Url($entry->getUrl())); 36 $content = Extractor::extract($entry->getUrl());
36 var_dump($content);die;
37 37
38 $em = $this->getDoctrine()->getEntityManager(); 38 $entry->setTitle($content->getTitle());
39 $entry->setContent($content->getBody());
40
41 $em = $this->getDoctrine()->getManager();
39 $em->persist($entry); 42 $em->persist($entry);
40 $em->flush(); 43 $em->flush();
41 44
@@ -170,7 +173,7 @@ class EntryController extends Controller
170 */ 173 */
171 public function deleteEntryAction(Request $request, Entries $entry) 174 public function deleteEntryAction(Request $request, Entries $entry)
172 { 175 {
173 $em = $this->getDoctrine()->getEntityManager(); 176 $em = $this->getDoctrine()->getManager();
174 $em->remove($entry); 177 $em->remove($entry);
175 $em->flush(); 178 $em->flush();
176 179
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 @@
1<?php
2
3namespace Wallabag\CoreBundle\Helper;
4
5class Content
6{
7 private $title;
8
9 private $body;
10
11 public function __constructor() {
12
13 }
14
15 public function getTitle()
16 {
17 return $this->title;
18 }
19
20 public function setTitle($title)
21 {
22 $this->title = $title;
23 }
24
25 public function getBody()
26 {
27 return $this->body;
28 }
29
30 public function setBody($body)
31 {
32 $this->body = $body;
33 }
34} \ 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 @@
1<?php
2
3namespace Wallabag\CoreBundle\Service;
4
5use Wallabag\CoreBundle\Helper\Content;
6use Wallabag\Wallabag\Url;
7
8final class Extractor
9{
10 public static function extract($url) {
11 $pageContent = Extractor::getPageContent(new Url(base64_encode($url)));
12 $title = ($pageContent['rss']['channel']['item']['title'] != '') ? $pageContent['rss']['channel']['item']['title'] : _('Untitled');
13 $body = $pageContent['rss']['channel']['item']['description'];
14
15 $content = new Content();
16 $content->setTitle($title);
17 $content->setBody($body);;
18
19 return $content;
20 }
21 /**
22 * Get the content for a given URL (by a call to FullTextFeed)
23 *
24 * @param Url $url
25 * @return mixed
26 */
27 public static function getPageContent(Url $url)
28 {
29 // Saving and clearing context
30 $REAL = array();
31 foreach( $GLOBALS as $key => $value ) {
32 if( $key != 'GLOBALS' && $key != '_SESSION' && $key != 'HTTP_SESSION_VARS' ) {
33 $GLOBALS[$key] = array();
34 $REAL[$key] = $value;
35 }
36 }
37 // Saving and clearing session
38 if (isset($_SESSION)) {
39 $REAL_SESSION = array();
40 foreach( $_SESSION as $key => $value ) {
41 $REAL_SESSION[$key] = $value;
42 unset($_SESSION[$key]);
43 }
44 }
45
46 // Running code in different context
47 $scope = function() {
48 extract( func_get_arg(1) );
49 $_GET = $_REQUEST = array(
50 "url" => $url->getUrl(),
51 "max" => 5,
52 "links" => "preserve",
53 "exc" => "",
54 "format" => "json",
55 "submit" => "Create Feed"
56 );
57 ob_start();
58 require func_get_arg(0);
59 $json = ob_get_contents();
60 ob_end_clean();
61 return $json;
62 };
63
64 // Silence $scope function to avoid
65 // issues with FTRSS when error_reporting is to high
66 // FTRSS generates PHP warnings which break output
67 $json = @$scope(__DIR__ . "/../../../../vendor/wallabag/Fivefilters_Libraries/makefulltextfeed.php", array("url" => $url));
68
69 // Clearing and restoring context
70 foreach ($GLOBALS as $key => $value) {
71 if($key != "GLOBALS" && $key != "_SESSION" ) {
72 unset($GLOBALS[$key]);
73 }
74 }
75 foreach ($REAL as $key => $value) {
76 $GLOBALS[$key] = $value;
77 }
78
79 // Clearing and restoring session
80 if (isset($REAL_SESSION)) {
81 foreach($_SESSION as $key => $value) {
82 unset($_SESSION[$key]);
83 }
84
85 foreach($REAL_SESSION as $key => $value) {
86 $_SESSION[$key] = $value;
87 }
88 }
89
90 return json_decode($json, true);
91 }
92} \ No newline at end of file