TplBlock/vendor/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php
2018-03-26 21:57:35 +02:00

74 lines
2.0 KiB
PHP

<?php
/*
* Copyright 2016 Johannes M. Schmitt <schmittjoh@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace JMS\Serializer\Tests\Fixtures;
use JMS\Serializer\Annotation\Accessor;
use JMS\Serializer\Annotation\XmlAttribute;
use JMS\Serializer\Annotation\XmlList;
use JMS\Serializer\Annotation\XmlMap;
use JMS\Serializer\Annotation\XmlRoot;
/** @XmlRoot("post") */
class IndexedCommentsBlogPost
{
/**
* @XmlMap(keyAttribute="author-name", inline=true, entry="comments")
* @Accessor(getter="getCommentsIndexedByAuthor")
*/
private $comments = array();
public function __construct()
{
$author = new Author('Foo');
$this->comments[] = new Comment($author, 'foo');
$this->comments[] = new Comment($author, 'bar');
}
public function getCommentsIndexedByAuthor()
{
$indexedComments = array();
foreach ($this->comments as $comment) {
$authorName = $comment->getAuthor()->getName();
if (!isset($indexedComments[$authorName])) {
$indexedComments[$authorName] = new IndexedCommentsList();
}
$indexedComments[$authorName]->addComment($comment);
}
return $indexedComments;
}
}
class IndexedCommentsList
{
/** @XmlList(inline=true, entry="comment") */
private $comments = array();
/** @XmlAttribute */
private $count = 0;
public function addComment(Comment $comment)
{
$this->comments[] = $comment;
$this->count += 1;
}
}