Example #1
0
 /**
  * @param ItemEntity $item
  *
  * @return ItemEntity[]
  */
 public function findDuplicate(ItemEntity $item)
 {
     // get all names
     $names = [$item->getName()];
     foreach ($item->getNames() as $name) {
         $names[] = $name->getName();
     }
     // find from item main name
     $duplicate = $this->getEntityManager()->createQuery('
         SELECT
             i
         FROM
             AnimeDbCatalogBundle:Item i
         WHERE
             i.name IN (:names)
     ')->setParameter(':names', $names)->getResult();
     // find frim item other names
     $item_names = $this->getEntityManager()->createQuery('
         SELECT
             n
         FROM
             AnimeDbCatalogBundle:Name n
         WHERE
             n.name IN (:names)
         GROUP BY
             n.item
     ')->setParameter(':names', $names)->getResult();
     foreach ($item_names as $item_name) {
         // element has been added
         foreach ($duplicate as $item) {
             if ($item === $item_name->getItem()) {
                 continue 2;
             }
         }
         $duplicate[] = $item_name->getItem();
     }
     return $duplicate;
 }
 /**
  * @param Item $item
  * @param array $body
  *
  * @return Item
  */
 public function setNames(Item $item, $body)
 {
     $names = [];
     // set a name based on the locale
     if ($this->locale == 'ru' && $body['russian']) {
         $names = array_merge([$body['name']], $body['english'], $body['japanese'], $body['synonyms']);
         $item->setName($body['russian']);
     } elseif ($this->locale == 'ja' && $body['japanese']) {
         $item->setName(array_shift($body['japanese']));
         $names = array_merge([$body['name']], [$body['russian']], $body['english'], $body['japanese'], $body['synonyms']);
     }
     // default list names
     if (!$item->getName()) {
         $names = array_merge([$body['russian']], $body['english'], $body['japanese'], $body['synonyms']);
         $item->setName($body['name']);
     }
     foreach ($names as $value) {
         if ($value != $body['name']) {
             $item->addName((new Name())->setName($value));
         }
     }
     return $item;
 }
 /**
  * Fill item
  *
  * @param \AnimeDb\Bundle\CatalogBundle\Entity\Item $item
  * @param \AnimeDb\Bundle\CatalogBundle\Entity\Item $new_item
  * @param string $field
  *
  * @return \AnimeDb\Bundle\CatalogBundle\Entity\Item
  */
 protected function fillItem(Item $item, Item $new_item, $field)
 {
     switch ($field) {
         case self::FIELD_COUNTRY:
             $item->setCountry($new_item->getCountry());
             break;
         case self::FIELD_DATE_END:
             $item->setDateEnd($new_item->getDateEnd());
             break;
         case self::FIELD_DATE_PREMIERE:
             $item->setDatePremiere($new_item->getDatePremiere());
             break;
         case self::FIELD_DURATION:
             $item->setDuration($new_item->getDuration());
             break;
         case self::FIELD_EPISODES:
             $item->setEpisodes($new_item->getEpisodes());
             break;
         case self::FIELD_EPISODES_NUMBER:
             $item->setEpisodesNumber($new_item->getEpisodesNumber());
             break;
         case self::FIELD_FILE_INFO:
             $item->setFileInfo($new_item->getFileInfo());
             break;
         case self::FIELD_GENRES:
             /* @var $new_genre \AnimeDb\Bundle\CatalogBundle\Entity\Genre */
             foreach ($new_item->getGenres() as $new_genre) {
                 $item->addGenre($new_genre);
             }
             break;
         case self::FIELD_NAMES:
             // set main name in top of names list
             $new_names = $new_item->getNames()->toArray();
             array_unshift($new_names, (new Name())->setName($new_item->getName()));
             foreach ($new_names as $new_name) {
                 $item->addName($new_name);
             }
             break;
         case self::FIELD_SOURCES:
             foreach ($new_item->getSources() as $new_source) {
                 $item->addSource($new_source);
             }
             break;
         case self::FIELD_STUDIO:
             $item->setStudio($new_item->getStudio());
             break;
         case self::FIELD_SUMMARY:
             $item->setSummary($new_item->getSummary());
             break;
     }
     return $item;
 }
Example #4
0
 /**
  * Get the field refill attributes.
  *
  * @param string $field
  * @param ItemEntity|null $item
  *
  * @return array
  */
 protected function getRefillAttr($field, ItemEntity $item = null)
 {
     // item exists and can be refilled
     if ($item instanceof ItemEntity && $item->getName() && ($plugins = $this->chain->getPluginsThatCanFillItem($item, $field))) {
         /* @var $plugin RefillerInterface */
         foreach ($plugins as $key => $plugin) {
             $plugins[$key] = ['name' => $plugin->getName(), 'title' => $plugin->getTitle(), 'can_refill' => $plugin->isCanRefill($item, $field)];
         }
         return ['data-type' => 'refill', 'data-plugins' => $this->templating->render('AnimeDbCatalogBundle:Form:refillers.html.twig', ['item' => $item, 'field' => $field, 'plugins' => $plugins])];
     }
     return [];
 }
 /**
  * Try to find the MyAnimeList id for the item
  *
  * @param ItemCatalog $item
  *
  * @return int|null
  */
 protected function findIdForItem(ItemCatalog $item)
 {
     // find name for search
     $query = '';
     if (preg_match('/[a-z]+/i', $item->getName())) {
         $query = $item->getName();
     } else {
         /* @var $name Name */
         foreach ($item->getNames() as $name) {
             if (preg_match('/[a-z]+/i', $name->getName())) {
                 $query = $name->getName();
                 break;
             }
         }
     }
     // try search
     return $query ? $this->client->search($query) : null;
 }