diff options
author | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2016-04-10 17:33:15 +0200 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2016-08-23 16:49:21 +0200 |
commit | f3d0cb91063840f2b05c63954d3fef3e5b8943fd (patch) | |
tree | 5ee9a0c73e7a3e4c8d6da1761a8ce23110f8125a /src | |
parent | 1bee9e0760c89756ebab0b67f9ab7efc5c6a709b (diff) | |
download | wallabag-f3d0cb91063840f2b05c63954d3fef3e5b8943fd.tar.gz wallabag-f3d0cb91063840f2b05c63954d3fef3e5b8943fd.tar.zst wallabag-f3d0cb91063840f2b05c63954d3fef3e5b8943fd.zip |
Share entry with a public URL
Diffstat (limited to 'src')
4 files changed, 115 insertions, 1 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 93db0d6c..a78dd00c 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php | |||
@@ -291,6 +291,8 @@ class EntryController extends Controller | |||
291 | { | 291 | { |
292 | $this->checkUserAction($entry); | 292 | $this->checkUserAction($entry); |
293 | 293 | ||
294 | $this->generateEntryUuid($entry); | ||
295 | |||
294 | return $this->render( | 296 | return $this->render( |
295 | 'WallabagCoreBundle:Entry:entry.html.twig', | 297 | 'WallabagCoreBundle:Entry:entry.html.twig', |
296 | ['entry' => $entry] | 298 | ['entry' => $entry] |
@@ -449,5 +451,34 @@ class EntryController extends Controller | |||
449 | private function checkIfEntryAlreadyExists(Entry $entry) | 451 | private function checkIfEntryAlreadyExists(Entry $entry) |
450 | { | 452 | { |
451 | return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); | 453 | return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); |
454 | |||
455 | } | ||
456 | |||
457 | /* | ||
458 | * Share entry content. | ||
459 | * | ||
460 | * @param Entry $entry | ||
461 | * | ||
462 | * @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share") | ||
463 | * | ||
464 | * @return \Symfony\Component\HttpFoundation\Response | ||
465 | */ | ||
466 | public function shareEntry(Entry $entry) | ||
467 | { | ||
468 | return $this->render( | ||
469 | '@WallabagCore/themes/share.html.twig', | ||
470 | array('entry' => $entry) | ||
471 | ); | ||
472 | } | ||
473 | |||
474 | /** | ||
475 | * @param Entry $entry | ||
476 | */ | ||
477 | private function generateEntryUuid(Entry $entry) | ||
478 | { | ||
479 | $entry->generateUuid(); | ||
480 | $em = $this->getDoctrine()->getManager(); | ||
481 | $em->persist($entry); | ||
482 | $em->flush(); | ||
452 | } | 483 | } |
453 | } | 484 | } |
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php index ceae78b0..3c742828 100644 --- a/src/Wallabag/CoreBundle/Entity/Entry.php +++ b/src/Wallabag/CoreBundle/Entity/Entry.php | |||
@@ -38,6 +38,15 @@ class Entry | |||
38 | private $id; | 38 | private $id; |
39 | 39 | ||
40 | /** | 40 | /** |
41 | * @var int | ||
42 | * | ||
43 | * @ORM\Column(name="uuid", type="text", nullable=true) | ||
44 | * | ||
45 | * @Groups({"entries_for_user", "export_all"}) | ||
46 | */ | ||
47 | private $uuid; | ||
48 | |||
49 | /** | ||
41 | * @var string | 50 | * @var string |
42 | * | 51 | * |
43 | * @ORM\Column(name="title", type="text", nullable=true) | 52 | * @ORM\Column(name="title", type="text", nullable=true) |
@@ -427,6 +436,8 @@ class Entry | |||
427 | } | 436 | } |
428 | 437 | ||
429 | $this->updatedAt = new \DateTime(); | 438 | $this->updatedAt = new \DateTime(); |
439 | |||
440 | $this->generateUuid(); | ||
430 | } | 441 | } |
431 | 442 | ||
432 | /** | 443 | /** |
@@ -595,4 +606,31 @@ class Entry | |||
595 | { | 606 | { |
596 | return $this->language; | 607 | return $this->language; |
597 | } | 608 | } |
609 | |||
610 | /** | ||
611 | * @return int | ||
612 | */ | ||
613 | public function getUuid() | ||
614 | { | ||
615 | return $this->uuid; | ||
616 | } | ||
617 | |||
618 | /** | ||
619 | * @param int $uuid | ||
620 | * | ||
621 | * @return Entry | ||
622 | */ | ||
623 | public function setUuid($uuid) | ||
624 | { | ||
625 | $this->uuid = $uuid; | ||
626 | |||
627 | return $this; | ||
628 | } | ||
629 | |||
630 | public function generateUuid() | ||
631 | { | ||
632 | if (empty($this->uuid) || is_null($this->uuid)) { | ||
633 | $this->uuid = uniqid(); | ||
634 | } | ||
635 | } | ||
598 | } | 636 | } |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig index 5dd2afb3..b634dd40 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig | |||
@@ -101,6 +101,13 @@ | |||
101 | <ul> | 101 | <ul> |
102 | {% if craue_setting('share_twitter') %} | 102 | {% if craue_setting('share_twitter') %} |
103 | <li> | 103 | <li> |
104 | <a href="{{ path('share', {'uuid': entry.uuid }) }}" target="_blank" class="tool public" title="public"> | ||
105 | <span>public</span> | ||
106 | </a> | ||
107 | </li> | ||
108 | {% endif %} | ||
109 | {% if craue_setting('share_twitter') %} | ||
110 | <li> | ||
104 | <a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="twitter"> | 111 | <a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="twitter"> |
105 | <span>twitter</span> | 112 | <span>twitter</span> |
106 | </a> | 113 | </a> |
@@ -149,7 +156,6 @@ | |||
149 | </li> | 156 | </li> |
150 | {% endif %} | 157 | {% endif %} |
151 | 158 | ||
152 | |||
153 | <li class="bold"> | 159 | <li class="bold"> |
154 | <a class="waves-effect collapsible-header"> | 160 | <a class="waves-effect collapsible-header"> |
155 | <i class="material-icons small">file_download</i> | 161 | <i class="material-icons small">file_download</i> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/share.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/share.html.twig new file mode 100644 index 00000000..37ca14f1 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/views/themes/share.html.twig | |||
@@ -0,0 +1,39 @@ | |||
1 | <html> | ||
2 | <head> | ||
3 | <title>{{ entry.title | raw }}</title> | ||
4 | <style> | ||
5 | body { | ||
6 | margin: 10px; | ||
7 | font-family: 'Roboto',Verdana,Geneva,sans-serif; | ||
8 | font-size: 16px; | ||
9 | color: #000; | ||
10 | } | ||
11 | header { | ||
12 | text-align: center; | ||
13 | } | ||
14 | |||
15 | header h1 { | ||
16 | font-size: 1.3em; | ||
17 | } | ||
18 | |||
19 | a, | ||
20 | a:hover, | ||
21 | a:visited { | ||
22 | color: #000; | ||
23 | } | ||
24 | |||
25 | article { | ||
26 | margin: 0 auto; | ||
27 | width: 600px; | ||
28 | } | ||
29 | </style> | ||
30 | </head> | ||
31 | <body> | ||
32 | <header> | ||
33 | <h1>{{ entry.title | raw }}</h1> | ||
34 | </header> | ||
35 | <article> | ||
36 | {{ entry.content | raw }} | ||
37 | </article> | ||
38 | </body> | ||
39 | </html> | ||