Example #1
0
 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);
         }
     }
 }