[CONTROLLER][Feeds] Added should_format field on returned array
FeedController will only handle FormatNoteList if the should_format field is true. This change was made to make the replies route feed possible, this route is added by the Conversation component. Since a reply isn't a conversation root, if the FeedController handled the FormatNoteList event, this feed wouldn't have any notes to display.
This commit is contained in:
parent
23f94ac961
commit
622057ba0d
69
components/Conversation/Controller/Conversation.php
Normal file
69
components/Conversation/Controller/Conversation.php
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types = 1);
|
||||||
|
// {{{ License
|
||||||
|
// This file is part of GNU social - https://www.gnu.org/software/social
|
||||||
|
//
|
||||||
|
// GNU social is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// GNU social is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Hugo Sales <hugo@hsal.es>
|
||||||
|
* @copyright 2021 Free Software Foundation, Inc http://www.fsf.org
|
||||||
|
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Component\Conversation\Controller;
|
||||||
|
|
||||||
|
use App\Core\Controller\FeedController;
|
||||||
|
use App\Core\DB\DB;
|
||||||
|
use App\Core\Form;
|
||||||
|
use App\Util\Exception\DuplicateFoundException;
|
||||||
|
use App\Util\Exception\NoLoggedInUser;
|
||||||
|
use App\Util\Exception\ServerException;
|
||||||
|
use function App\Core\I18n\_m;
|
||||||
|
use App\Core\Log;
|
||||||
|
use App\Core\Router\Router;
|
||||||
|
use App\Entity\Actor;
|
||||||
|
use App\Entity\Note;
|
||||||
|
use App\Util\Common;
|
||||||
|
use App\Util\Exception\ClientException;
|
||||||
|
use App\Util\Exception\InvalidFormException;
|
||||||
|
use App\Util\Exception\NoSuchNoteException;
|
||||||
|
use App\Util\Exception\RedirectException;
|
||||||
|
use App\Util\Form\FormFields;
|
||||||
|
use Component\Posting\Posting;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
class Conversation extends FeedController
|
||||||
|
{
|
||||||
|
// if note is root -> just link
|
||||||
|
// if note is a reply -> link from above plus anchor
|
||||||
|
public function ConversationShow(Request $request)
|
||||||
|
{
|
||||||
|
$actor_id = Common::ensureLoggedIn()->getId();
|
||||||
|
$notes = DB::dql('select n from App\Entity\Note n '
|
||||||
|
. 'where n.reply_to is not null and n.actor_id = :id '
|
||||||
|
. 'order by n.created DESC', ['id' => $actor_id], );
|
||||||
|
return [
|
||||||
|
'_template' => 'feeds/feed.html.twig',
|
||||||
|
'notes' => $notes,
|
||||||
|
'should_format' => false,
|
||||||
|
'page_title' => 'Replies feed',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -58,6 +58,7 @@ class Feeds extends FeedController
|
|||||||
return [
|
return [
|
||||||
'_template' => 'feeds/feed.html.twig',
|
'_template' => 'feeds/feed.html.twig',
|
||||||
'page_title' => 'Public feed',
|
'page_title' => 'Public feed',
|
||||||
|
'should_format' => true,
|
||||||
'notes' => $notes,
|
'notes' => $notes,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -100,6 +101,7 @@ class Feeds extends FeedController
|
|||||||
return [
|
return [
|
||||||
'_template' => 'feeds/feed.html.twig',
|
'_template' => 'feeds/feed.html.twig',
|
||||||
'page_title' => 'Home feed',
|
'page_title' => 'Home feed',
|
||||||
|
'should_format' => true,
|
||||||
'notes' => $notes,
|
'notes' => $notes,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -110,6 +112,7 @@ class Feeds extends FeedController
|
|||||||
return [
|
return [
|
||||||
'_template' => 'feeds/feed.html.twig',
|
'_template' => 'feeds/feed.html.twig',
|
||||||
'page_title' => 'Network feed',
|
'page_title' => 'Network feed',
|
||||||
|
'should_format' => true,
|
||||||
'notes' => $notes,
|
'notes' => $notes,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -48,10 +48,12 @@ abstract class FeedController extends Controller
|
|||||||
Event::handle('FilterNoteList', [$actor, &$notes]);
|
Event::handle('FilterNoteList', [$actor, &$notes]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($result['should_format'] ?? true) {
|
||||||
$notes_out = null;
|
$notes_out = null;
|
||||||
Event::handle('FormatNoteList', [$notes, &$notes_out]);
|
Event::handle('FormatNoteList', [$notes, &$notes_out]);
|
||||||
$result['notes'] = $notes_out;
|
$result['notes'] = $notes_out;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
// {{{ License
|
|
||||||
// This file is part of GNU social - https://www.gnu.org/software/social
|
|
||||||
//
|
|
||||||
// GNU social is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// GNU social is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Affero General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
|
||||||
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
namespace App\Entity;
|
|
||||||
|
|
||||||
use App\Core\Entity;
|
|
||||||
use DateTimeInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Data class for Conversations
|
|
||||||
*
|
|
||||||
* @category Data
|
|
||||||
* @package GNUsocial
|
|
||||||
*
|
|
||||||
* @author Zach Copley <zach@status.net>
|
|
||||||
* @author Mikael Nordfeldth <mmn@hethane.se>
|
|
||||||
* @copyright 2010 StatusNet Inc.
|
|
||||||
* @copyright 2009-2014 Free Software Foundation, Inc http://www.fsf.org
|
|
||||||
* @author Hugo Sales <hugo@hsal.es>
|
|
||||||
* @copyright 2021 Free Software Foundation, Inc http://www.fsf.org
|
|
||||||
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
|
|
||||||
*/
|
|
||||||
class Conversation extends Entity
|
|
||||||
{
|
|
||||||
// {{{ Autocode
|
|
||||||
// @codeCoverageIgnoreStart
|
|
||||||
private int $id;
|
|
||||||
private int $note_id;
|
|
||||||
private \DateTimeInterface $created;
|
|
||||||
private \DateTimeInterface $modified;
|
|
||||||
|
|
||||||
public function setId(int $id): self
|
|
||||||
{
|
|
||||||
$this->id = $id;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId(): int
|
|
||||||
{
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setNoteId(int $note_id): self
|
|
||||||
{
|
|
||||||
$this->note_id = $note_id;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getNoteId(): int
|
|
||||||
{
|
|
||||||
return $this->note_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setCreated(DateTimeInterface $created): self
|
|
||||||
{
|
|
||||||
$this->created = $created;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCreated(): DateTimeInterface
|
|
||||||
{
|
|
||||||
return $this->created;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setModified(DateTimeInterface $modified): self
|
|
||||||
{
|
|
||||||
$this->modified = $modified;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getModified(): DateTimeInterface
|
|
||||||
{
|
|
||||||
return $this->modified;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @codeCoverageIgnoreEnd
|
|
||||||
// }}} Autocode
|
|
||||||
|
|
||||||
public static function schemaDef(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'name' => 'conversation',
|
|
||||||
'fields' => [
|
|
||||||
'id' => ['type' => 'serial', 'not null' => true, 'description' => 'Unique identifier'],
|
|
||||||
'note_id' => ['type' => 'int', 'foreign key' => true, 'target' => 'Note.id', 'multiplicity' => 'one to one', 'not null' => true, 'description' => 'Root of note for this conversation'],
|
|
||||||
'created' => ['type' => 'datetime', 'not null' => true, 'default' => 'CURRENT_TIMESTAMP', 'description' => 'date this record was created'],
|
|
||||||
'modified' => ['type' => 'timestamp', 'not null' => true, 'default' => 'CURRENT_TIMESTAMP', 'description' => 'date this record was modified'],
|
|
||||||
],
|
|
||||||
'primary key' => ['id'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user