/** * @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; }
/** * 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; }