vendor/ezsystems/ezplatform-kernel/eZ/Publish/Core/FieldType/Author/AuthorCollection.php line 16

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. namespace eZ\Publish\Core\FieldType\Author;
  7. use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
  8. use ArrayObject;
  9. /**
  10.  * Author collection.
  11.  * This collection can only hold {@link \eZ\Publish\Core\FieldType\Author\Author} objects.
  12.  */
  13. class AuthorCollection extends ArrayObject
  14. {
  15.     /**
  16.      * @param \eZ\Publish\Core\FieldType\Author\Author[] $elements
  17.      */
  18.     public function __construct(array $elements = [])
  19.     {
  20.         // Call parent constructor without $elements because all author elements
  21.         // must be given an id by $this->offsetSet()
  22.         parent::__construct();
  23.         foreach ($elements as $i => $author) {
  24.             $this->offsetSet($i$author);
  25.         }
  26.     }
  27.     /**
  28.      * Adds a new author to the collection.
  29.      *
  30.      * @throws InvalidArgumentType When $value is not of type Author
  31.      *
  32.      * @param int $offset
  33.      * @param \eZ\Publish\Core\FieldType\Author\Author $value
  34.      */
  35.     public function offsetSet($offset$value)
  36.     {
  37.         if (!$value instanceof Author) {
  38.             throw new InvalidArgumentType(
  39.                 '$value',
  40.                 'eZ\\Publish\\Core\\FieldType\\Author\\Author',
  41.                 $value
  42.             );
  43.         }
  44.         $aAuthors $this->getArrayCopy();
  45.         parent::offsetSet($offset$value);
  46.         if (!isset($value->id) || $value->id == -1) {
  47.             if (!empty($aAuthors)) {
  48.                 $value->id end($aAuthors)->id 1;
  49.             } else {
  50.                 $value->id 1;
  51.             }
  52.         }
  53.     }
  54.     /**
  55.      * Removes authors from current collection with a list of Ids.
  56.      *
  57.      * @param array $authorIds Author's Ids to remove from current collection
  58.      */
  59.     public function removeAuthorsById(array $authorIds)
  60.     {
  61.         $aAuthors $this->getArrayCopy();
  62.         foreach ($aAuthors as $i => $author) {
  63.             if (in_array($author->id$authorIds)) {
  64.                 unset($aAuthors[$i]);
  65.             }
  66.         }
  67.         $this->exchangeArray($aAuthors);
  68.     }
  69. }