/** * @param Item $item * * @return Name */ public function setItem(Item $item = null) { if ($this->item !== $item) { // romove link on this item for old item if ($this->item instanceof Item) { $tmp = $this->item; $this->item = null; $tmp->removeName($this); } $this->item = $item; // add link on this item if ($item instanceof Item) { $this->item->addName($this); } } return $this; }
/** * @param Item $item * @param Crawler $body * * @return Item */ public function setNames(Item $item, Crawler $body) { $titles = $body->filter('titles > title'); $names = []; /* @var $title \DOMElement */ foreach ($titles as $title) { $lang = substr($title->attributes->item(0)->nodeValue, 0, 2); if ($lang != 'x-') { $names[$lang][$title->getAttribute('type')] = $title->nodeValue; } } // set main name if (!empty($names[$this->locale])) { $item->setName($this->getNameForLocale($this->locale, $names)); } elseif ($this->locale != 'en' && !empty($names['en'])) { $item->setName($this->getNameForLocale('en', $names)); } else { $item->setName($this->getNameForLocale(array_keys($names)[0], $names)); } // set other names $other = []; foreach ($names as $locales) { foreach ($locales as $name) { $other[] = $name; } } $other = array_unique($other); sort($other); foreach ($other as $name) { $item->addName((new Name())->setName($name)); } return $item; }
/** * Fill names for Cinema type * * @param \AnimeDb\Bundle\CatalogBundle\Entity\Item $item * @param \DOMXPath $xpath * @param \DOMElement $head * * @return \AnimeDb\Bundle\CatalogBundle\Entity\Item */ protected function fillCinemaNames(Item $item, \DOMXPath $xpath, \DOMElement $head) { // get list names $names = []; foreach ($xpath->query('table[1]/tr/td/table/tr/td', $head) as $name) { $names[] = $name->nodeValue; } // clear $name = preg_replace('/\\[\\d{4}\\]/', '', array_shift($names)); // example: [2011] $name = preg_replace('/\\[?(ТВ|OVA|ONA)(\\-\\d)?\\]?/', '', $name); // example: [TV-1] $name = preg_replace('/\\(фильм \\w+\\)/u', '', $name); // example: (фильм седьмой) $item->setName(trim($name)); // add other names foreach ($names as $name) { $name = trim(preg_replace('/(\\(\\d+\\))/', '', $name)); $item->addName((new Name())->setName($name)); } return $item; }
/** * @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; }