示例#1
0
 /**
  * @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;
 }
示例#2
0
 /**
  * @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;
 }