/** * Get a list of investments to be added or remove. Write the investments to the database. */ public function GetInvestments() { //echo "start<br>"; if (!$this->WS()) { return null; } try { if ($this->_sid == "") { return; } $params = array('sid' => $this->_sid); $result = $this->WS()->getSC()->__soapCall("GetInvestments", array($params)); if ($result->GetInvestmentsResult->Status != 0) { return $result->GetInvestmentsResult->Message; } $buf = $result->GetInvestmentsResult->OffersZip; $f = fopen(self::TMP_ZIP_FILE, "w"); fwrite($f, $buf); fclose($f); //unzip XML file with offers $zip = new ZipArchive(); if ($zip->open(self::TMP_ZIP_FILE)) { $fp = $zip->getStream('xml.xml'); if (!$fp) { exit("failed reading xml file (" . getcwd() . ")\n"); } $contents = ''; while (!feof($fp)) { $contents .= fread($fp, 2); } fclose($fp); $zip->close(); file_put_contents(self::TMP_XML_INV_FILE, $contents); if (file_exists(self::TMP_ZIP_FILE)) { unlink(self::TMP_ZIP_FILE); } } //open and read XML file $xml = simplexml_load_file(self::TMP_XML_INV_FILE); $investmentsNode = null; //read main nodes foreach ($xml->children() as $child) { //echo "<br />" . $child->getName() . ": " . $child; if ($child->getName() == "Inwestycje") { $investmentsNode = $child; } } //read investments $importedInv = ""; $count = 0; foreach ($investmentsNode->children() as $node) { $count++; $importedInv .= $node["ID"] . ","; //read major properties $garage = $node->Garaz == "True" ? 1 : 0; $pool = $node->Basen == "True" ? 1 : 0; $ter = $node->Taras == "True" ? 1 : 0; $ac = $node->Klimatyzacja == "True" ? 1 : 0; $spec = $node->Specjalna == "True" ? 1 : 0; $proj = $node->Projekt == "True" ? 1 : 0; $investment = new Investment($node["Jezyk"], $node["ID"], CheckNumeric($node["Lp"]), $node->Numer, $node->Nazwa, $node->Opis, $node->OpisSkrot, $node->DaneKontaktowe, $node->MapMar, $garage, $pool, $ter, $ac, $proj, $spec, $node->DataUtworzenia, $node->TerminOddania, CheckNumeric($node->PowierzchniaCalkowita), CheckNumeric($node->KubaturaBrutto), CheckNumeric($node->MetrazOd), CheckNumeric($node->MetrazDo), CheckNumeric($node->CenaOd), CheckNumeric($node->CenaDo), CheckNumeric($node->CenaM2Od), CheckNumeric($node->CenaM2Do), CheckNumeric($node->PietroOd), CheckNumeric($node->PietroDo), CheckNumeric($node->PokojeOd), CheckNumeric($node->PokojeDo), $node->Kraj == "" ? null : $node->Kraj, $node->Wojewodztwo == "" ? null : $node->Wojewodztwo, $node->Powiat == "" ? null : $node->Powiat, $node->Lokalizacja == "" ? null : $node->Lokalizacja, $node->Dzielnica == "" ? null : $node->Dzielnica, $node->Rejon == "" ? null : $node->Rejon, $node->Ulica, $node->Kategoria, $node["Oddzial"]); $photosNode = null; $lngsNode = null; $buildingsNode = null; $agentsNode = null; //read properties foreach ($node->children() as $propNode) { if ($propNode->getName() == "Zdjecia") { $photosNode = $propNode; } else { if ($propNode->getName() == "Jezyki") { $lngsNode = $propNode; } else { if ($propNode->getName() == "Budynki") { $buildingsNode = $propNode; } else { if ($propNode->getName() == "Agenci") { $agentsNode = $propNode; } else { if ($propNode->getName() == "PolaDynamiczne") { //delete unuse properties from offer $addedProperties = array(); foreach ($propNode->children() as $listNode) { $pname = (string) $listNode["Nazwa"]; $investment->__set($pname, $listNode); } } } } } } } //save investment object to database Investments::AddEditInvestment($investment); echo DataBase::GetDbInstance()->LastError(); //delete unuse properties from offer $addedProperties = array(); foreach ($node->children() as $propNode) { $pname = $propNode->getName(); if ($pname == "PolaDynamiczne") { foreach ($propNode->children() as $listNode) { $pname = (string) $listNode["Nazwa"]; $prop = Properties::GetPropertyName($pname); if ($prop != null) { $addedProperties[count($addedProperties)] = $prop->GetID(); } } } } Investments::DeleteUnUseProperties($investment->GetId(), $investment->GetIdLng(), $addedProperties); //photos if ($photosNode != null) { $addedPhotos = array(); foreach ($photosNode->children() as $photoNode) { $intro = $photoNode->intro == "True" ? 1 : 0; $photo = new OfferPhoto($photoNode['ID'], null, $investment->GetId(), $photoNode->plik, $photoNode->opis, $photoNode['lp'], $photoNode['typ'], $intro, null, (string) $photoNode->LinkFilmYouTube, (string) $photoNode->LinkMiniaturkaYouTube); OfferPhotos::AddEditPhoto($photo); echo DataBase::GetDbInstance()->LastError(); $addedPhotos[count($addedPhotos)] = $photo->GetId(); } OfferPhotos::DeleteUnUsePhotos(0, $addedPhotos, $investment->GetId()); } //buildings if ($buildingsNode != null) { $importedBlds = ""; foreach ($buildingsNode->children() as $buildingNode) { $importedBlds .= $buildingNode["ID"] . ","; $building = new InvestmentBuilding(null, $buildingNode['ID'], $buildingNode->Nazwa, $buildingNode['Symbol'], $buildingNode->Opis, $investment->GetId(), CheckNumeric($buildingNode['Metraz']), $buildingNode->TerminOddania, CheckNumeric($buildingNode['LiczbaPieter'])); Investmentbuildings::AddEditInvestmentBuilding($building); echo DataBase::GetDbInstance()->LastError(); //add offers to building $offersNode = $buildingNode->Oferty; Investmentbuildings::AddOffersToBuilding($offersNode, $building); } //delete buildings $importedBlds = substr($importedBlds, 0, strlen($importedBlds) - 1); if ($importedBlds != "") { $result = DataBase::GetDbInstance()->ExecuteQuery("SELECT id FROM #S#investments_buildings WHERE investments_id=" . $investment->GetId() . " AND id NOT IN({$importedBlds})"); while ($row = DataBase::GetDbInstance()->FetchArray($result)) { Investmentbuildings::DeleteInvestmentBuilding($row[0]); echo DataBase::GetDbInstance()->LastError(); } } } //agenci if ($agentsNode != null) { foreach ($agentsNode->children() as $aNode) { $a = Agents::GetAgent($aNode['wartosc']); if ($a != null) { Investments::AddInvestmentsAgent($investment, $a); } } } } //delete investments $importedInv = substr($importedInv, 0, strlen($importedInv) - 1); if ($importedInv == "") { $importedInv = "-1"; } $result = DataBase::GetDbInstance()->ExecuteQuery("SELECT id FROM #S#investments WHERE id NOT IN({$importedInv})"); while ($row = DataBase::GetDbInstance()->FetchArray($result)) { Investments::DeleteInvestment($row[0]); //delete agents_investments relation Investments::DelInvestmentsAgents($row[0]); echo DataBase::GetDbInstance()->LastError(); } return $count; } catch (Exception $ex) { Errors::LogError("WebServiceVirgo:GetInvestments", $ex->getMessage() . "; " . $ex->getTraceAsString()); return 0; } }