public function mapPackage($packageID) { $url = $this->packageBaseUrl . $packageID . '.xml'; $request = new FetchAdXmlRequest($url); $xmlObj = $request->send(); $packageArray = $xmlObj->getResponseArray(); if (isset($packageArray['sections']['section']) && $packageArray['sections']['section'] != '') { // Because eventival can't take test data out of their XML feed $package['eventival_id'] = $this->validateElement($packageArray['ids']['system_id']); $package['title_original'] = $this->validateElement($packageArray['titles']['title_original']); $enName = $this->validateElement($packageArray['titles']['title_english']); $estName = $this->validateElement($packageArray['titles']['title_local']); if (isset($packageArray['publications']['en']) && !empty($packageArray['publications']['en'])) { $enDescription = $this->validateElement($packageArray['publications']['en']['description']); $estDescription = $this->validateElement($packageArray['publications']['et']['description']); } else { $enDescription = ''; $estDescription = ''; } $package['Translation'] = array('et' => array('name' => $estName, 'longdescription' => $estDescription), 'en' => array('name' => $enName, 'longdescription' => $enDescription)); $package['code'] = time(); $package['runtime'] = 0; $id = $this->checkData($this->tableType, $package['eventival_id']); if (!$id) { $id = $this->createData($this->tableType, $package); if (!is_array($packageArray['film_ids']['id'])) { //Hack for foreach $packageArray['film_ids']['id'] = array(1 => $packageArray['film_ids']['id']); } foreach ($packageArray['film_ids']['id'] as $film) { $query = Doctrine_Query::create()->from('Product data')->select('data.id')->where('data.type = ? AND data.eventival_id = ?', array('package_film', $film)); $dbFilm = $query->fetchOne(); if ($dbFilm) { $dbFilmId = $dbFilm->getId(); } else { $filmMapper = new FilmXMLMapper(); $dbFilmId = $filmMapper->mapFilm($film); sleep(1); } $package['runtime'] += Doctrine::getTable('Product')->find($dbFilmId)->getRuntime(); $query = Doctrine_Query::create()->from('ProductVsProduct')->select('product1')->where('product1 = ? AND product2 = ?', array($id, $dbFilmId)); $check = $query->fetchOne(); if (!$check) { $packageVsFilm = new ProductVsProduct(); $packageVsFilm->fromArray(array('product1' => $id, 'product2' => $dbFilmId)); $packageVsFilm->save(); } } } else { $query = Doctrine_Query::create()->from('ProductVsProduct')->select('product2')->where('product1 = ?', $id); $dbFilms = $query->fetchArray(); if (!$dbFilms) { if (!is_array($packageArray['film_ids']['id'])) { //Hack for foreach $packageArray['film_ids']['id'] = array(1 => $packageArray['film_ids']['id']); } foreach ($packageArray['film_ids']['id'] as $film) { $query = Doctrine_Query::create()->from('Product data')->select('data.id')->where('data.type = ? AND data.eventival_id = ?', array('package_film', $film)); $dbFilm = $query->fetchOne(); if ($dbFilm) { $dbFilmId = $dbFilm->getId(); } else { $filmMapper = new FilmXMLMapper(); $dbFilmId = $filmMapper->mapFilm($film); sleep(1); } $package['runtime'] += Doctrine::getTable('Product')->find($dbFilmId)->getRuntime(); $query = Doctrine_Query::create()->from('ProductVsProduct')->select('product1')->where('product1 = ? AND product2 = ?', array($id, $dbFilmId)); $check = $query->fetchOne(); if (!$check) { $packageVsFilm = new ProductVsProduct(); $packageVsFilm->fromArray(array('product1' => $id, 'product2' => $dbFilmId)); $packageVsFilm->save(); } } $query = Doctrine_Query::create()->from('ProductVsProduct')->select('product2')->where('product1 = ?', $id); $dbFilms = $query->fetchArray(); } foreach ($dbFilms as $dbFilmId) { $package['runtime'] += Doctrine::getTable('Product')->find($dbFilmId['product2'])->getRuntime(); } $this->updateData($this->tableType, $package, $id); } if (isset($packageArray['sections']['section']['id'])) { $sectionId = $packageArray['sections']['section']['id']; } else { $sectionId = $packageArray['sections']['section'][0]['id']; } // Section == ProductGroup $query = Doctrine_Query::create()->from('ProductGroup data')->select('data.id')->whereIn('data.eventival_id', $sectionId); $dbSection = $query->fetchOne(); if ($dbSection == null) { // $sectionMapper = new SectionXMLMapper(); // $dbFilmId = $sectionMapper->mapSection($section); } else { $dbSectionId = $dbSection->getId(); } if ($dbSectionId) { $query = Doctrine_Query::create()->from('ProductVsProductGroup')->select('group_id')->where('group_id = ? AND product_id = ?', array($dbSectionId, $id)); $check = $query->fetchOne(); if (!$check) { $fVs = array('group_id' => $dbSectionId, 'product_id' => $id); $filmVsSection = new ProductVsProductGroup(); $filmVsSection->fromArray($fVs); $filmVsSection->save(); } } return $id; } else { return null; } }
public function mapScreenings() { //Info from piletilevi $request = new FetchAdXmlRequest(FetchAdXmlRequest::PILETILEVI_URL); $piletileviArray = $request->send()->getResponseArray(); foreach ($this->responseArray['screening'] as $index => $val) { // Getting DB ID for CinemaHall relations $hallId = $val['cinema_hall_id']; $query = Doctrine_Query::create()->from('CinemaHall data')->select('data.id')->where('data.eventival_id = ?', $hallId); $dbHall = $query->fetchOne(); if ($dbHall) { $dbHallId = $dbHall->getId(); } else { // $dbHallId = $this->mapCinemaHall($hallId); } $val['cinema_hall_id'] = $dbHallId; if (isset($val['film'])) { $filmId = $val['film']['id']; unset($val['film']); $args = array('film', $filmId); $query = $this->getProductQuery($args); $dbFilm = $query->fetchOne(); if ($dbFilm) { $dbFilmId = $dbFilm->getId(); //Hack for schelude Doctrine::getTable('Product')->find($dbFilmId)->setScheduled($val['start'])->save(); } else { $filmMapper = new FilmXMLMapper(); $dbFilmId = $filmMapper->mapFilm($filmId); Doctrine::getTable('Product')->find($dbFilmId)->setScheduled($val['start'])->save(); } $val['product_id'] = $dbFilmId; } else { if (isset($val['package'])) { $packageId = $val['package']['@attributes']['id']; unset($val['package']); $args = array('package', $packageId); $query = $this->getProductQuery($args); $dbPackage = $query->fetchOne(); if ($dbPackage) { $dbPackageId = $dbPackage->getId(); Doctrine::getTable('Product')->find($dbPackageId)->setScheduled($val['start'])->save(); } else { $packageMapper = new PackageXMLMapper(); $dbPackageId = $packageMapper->mapPackage($packageId); //Hack for schelude Doctrine::getTable('Product')->find($dbPackageId)->setScheduled($val['start'])->save(); } $val['product_id'] = $dbPackageId; } } $val['eventival_id'] = $val['id']; //From piletilevi foreach ($piletileviArray['concerts']['concert'] as $concert) { if (is_array($concert['title'])) { $code = null; } else { $code = substr($concert['title'], 0, strpos($concert['title'], " /")); } if ($val['code'] == $code) { $val['availability'] = $concert['status']; //TODO: Optimize check without notice error output if (@is_array($concert['deliveries']['zebra'])) { $val['web_sales'] = 1; } else { $val['web_sales'] = 0; } $val['piletilevi_id'] = $concert['id']; break; } } $val['start'] = strtotime($val['start']); $id = $this->checkData($this->tableType, $val['id']); unset($val['id']); unset($val['presentation']); unset($val['qa']); if (!$id) { $this->createData($this->tableType, $val); } else { $this->updateData($this->tableType, $val, $id); } } }