setId(0); $this->setZIP(0); $this->setPostOfficeBox(0); $this->setName($name); $this->prefixes = array(); } static public function prepareWebsite($url){ if(!preg_match("/^https?:\/\//", $url)) $url = "http://". $url; return $url; } public function isValid(){ if(empty($this->myName)) return false; if(count($this->prefixes) < 1) return false; return true; } public function toDiv($score = 0){ if(empty($this->myName)) return false; $result = "
\n"; $result .= "
". $this->name(); if($score > 0) $result .= "
". $score ."%
"; $result .= "
\n"; $address = array(); if(!empty($this->myStreet)) $address[] = $this->street(); if($this->zip() > 0) $address[] = $this->zip(); if(!empty($this->myCity)) $address[] = $this->city(); if(count($address) > 0) $result .= "
". implode(", ", $address) ."
"; if(!empty($this->myPostOfficeBox)) $result .= "
". _("Post Office Box") .": ". $this->postOfficeBox() ."
\n"; $result .= "
". $this->country() ."
"; $result .= "
". _("Contact Data") .":\n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= " \n"; $result .= "
". _("Website") .":website() ."\">". $this->website() ."". _("E-Mail") .":email() ."\">". $this->email() ."
". _("Phone") .":". $this->phone() ."". _("Fax") .":". $this->fax() ."
\n"; $result .= "
\n"; $result .= " \n"; $result .= " \n"; foreach($this->prefixes as $prefix){ $result .= "\n"; $result .= " \n"; $result .= " \n"; $result .= "\n"; } $result .= "
". _("Prefixes") ."
". $prefix[0] ."". $prefix[1] ."
\n"; $result .= "
\n"; return $result; } public function toXml($element, $document, $score = 0){ if(!is_a($element, "DOMElement")) return "No DOMElement given"; if(!is_a($document, "DOMDocument")) return "No DOMDocument given"; if(empty($this->myName)) return "No manufacturer name"; $manu = $document->createElement("manufacturer"); $element->appendChild($manu); $elem = $document->createElement("name"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->name())); if($this->id() > 0){ $elem = $document->createElement("id"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->id())); } if($score > 0){ $elem = $document->createElement("relevance"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($score)); } if(!empty($this->myStreet)){ $elem = $document->createElement("street"); $manu->appendChild($elem); $name = $document->createElement("name"); $elem->appendChild($name); $name->appendChild($document->createTextNode($this->streetName())); if(!empty($this->myNumber)){ $number = $document->createElement("number"); $elem->appendChild($number); $number->appendChild($document->createTextNode($this->streetNumber())); } } if($this->zip() > 0){ $elem = $document->createElement("zip"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->zip())); } if(!empty($this->myCity)){ $elem = $document->createElement("city"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->city())); } if($this->postOfficeBox() > 0){ $elem = $document->createElement("postofficebox"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->postofficebox())); } if(!empty($this->myCountry)){ $elem = $document->createElement("country"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->country())); } if(!empty($this->myWebsite)){ $elem = $document->createElement("website"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->website())); } if(!empty($this->myEMail)){ $elem = $document->createElement("email"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->email())); } if(!empty($this->myPhone)){ $elem = $document->createElement("phone"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->phone())); } if(!empty($this->myFax)){ $elem = $document->createElement("fax"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($this->fax())); } foreach($this->prefixes as $prefix){ $elem = $document->createElement("prefix"); $manu->appendChild($elem); $elem->appendChild($document->createTextNode($prefix[0])); $elem->setAttribute("type", $prefix[1]); } return true; } public function setName($name){ $this->myName = $name; } public function name(){ return $this->myName; } public function setStreet($street, $number){ $this->myStreet = $street; $this->myNumber = $number; } public function street(){ return $this->myStreet ." ". $this->streetNumber(); } public function streetName(){ return $this->myStreet; } public function streetNumber(){ return $this->myNumber; } public function setZIP($plz){ if(is_numeric($plz)) $this->myZIP = $plz; } public function zip(){ return $this->myZIP; } public function setCity($city){ $this->myCity = $city; } public function city(){ return $this->myCity; } public function setPostOfficeBox($box){ if(is_numeric($box)) $this->myPostOfficeBox = $box; } public function postOfficeBox(){ return $this->myPostOfficeBox; } public function setCountry($country){ $this->myCountry = $country; } public function country(){ return $this->myCountry; } public function setWebsite($url){ $this->myWebsite = Manufacturer::prepareWebsite($url); } public function website(){ return $this->myWebsite; } public function setEMail($address){ $this->myEMail = $address; } public function email(){ return $this->myEMail; } public function setPhone($number){ $this->myPhone = $number; } public function phone(){ return $this->myPhone; } public function setFax($number){ $this->myFax = $number; } public function fax(){ return $this->myFax; } public function addPrefix($prefix, $type){ if(!empty($prefix) && !empty($type)) array_push($this->prefixes, array($prefix, $type)); } public function prefixes(){ return $this->prefixes; } /** * @brief Adds this manufacturer to the queues. * * It only adds something, if isValid() returns true. */ public function queue(){ if(!$this->isValid()) return "Not valid"; $connId = @ mysql_connect("localhost", Settings::value("SUBMITUSER"), Settings::value("SUBMITPASSWORD")); if(!$connId) return "Could not connect to database"; if(!mysql_select_db(Settings::value("DBNAME"))){ mysql_close($connId); return "Could not select database"; } # start transaction if(!mysql_query("BEGIN")){ mysql_close($connId); return "Could not start transaction"; } # queue this manufacturer # therefore first check, whether a manufacturer with same name exists already $result = mysql_query("SELECT id FROM manufacturers_queue WHERE name='". mysql_real_escape_string($this->name()) ."'"); if(!$result){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not select queued manufacturers"; } $result = mysql_fetch_object($result); if($result){ if($result->id > 0) $this->setId($result->id); } if($this->id() < 1){ $query = sprintf( "INSERT INTO manufacturers_queue (name, street, number, city, postalCode, postOfficeBox, country, website, email, phone, fax) VALUES('%s', '%s', '%s', '%s', %s, %s, '%s', '%s', '%s', '%s', '%s')", mysql_real_escape_string($this->name()), mysql_real_escape_string($this->streetName()), mysql_real_escape_string($this->streetNumber()), mysql_real_escape_string($this->city()), mysql_real_escape_string($this->zip()), mysql_real_escape_string($this->postOfficeBox()), mysql_real_escape_string($this->country()), mysql_real_escape_string($this->website()), mysql_real_escape_string($this->email()), mysql_real_escape_string($this->phone()), mysql_real_escape_string($this->fax()) ); if(!mysql_query($query)){ $error = mysql_error(); mysql_query("ROLLBACK"); mysql_close($connId); return "Could not insert manufacturer: ". $error; } # get own id $result = mysql_query("SELECT id FROM manufacturers_queue WHERE name='". mysql_real_escape_string($this->name()) ."'"); if(!$result){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not select id of inserted manufacturer"; } $result = mysql_fetch_object($result); if($result){ if($result->id > 0) $this->setId($result->id); } } if($this->id() < 1){ mysql_query("ROLLBACK"); mysql_close($connId); return "Selected id is in valid"; } # queue prefixes foreach($this->prefixes as $prefix){ # queue mintypes $mintypeId = 0; $result = mysql_query("SELECT id FROM mintypes_queue WHERE name='". mysql_real_escape_string($prefix[1]) ."'"); if(!$result){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not select existing MIN-Types"; } $result = mysql_fetch_object($result); if($result){ if($result->id > 0) $mintypeId = $result->id; } if($mintypeId < 1){ $query = sprintf( "INSERT INTO mintypes_queue (name) VALUES('%s')", mysql_real_escape_string($prefix[1]) ); if(!mysql_query($query)){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not insert MIN-Type"; } # get own id $result = mysql_query("SELECT id FROM mintypes_queue WHERE name='". mysql_real_escape_string($prefix[1]) ."'"); if(!$result){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not select id of inserted MIN-Type"; } $result = mysql_fetch_object($result); if($result){ if($result->id > 0) $mintypeId = $result->id; } } if($mintypeId < 1){ mysql_query("ROLLBACK"); mysql_close($connId); return "Selected id of MIN-Type is invalid"; } # queue prefix $result = mysql_query( sprintf( "SELECT id FROM manufacturerhasmins_queue WHERE manufacturersId=%s AND mintypesId=%s AND characteristic=%s", $this->id(), $mintypeId, $prefix[0] ) ); if(!$result){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not select existing prefixes"; } $result = mysql_fetch_object($result); if($result){ # the prefix is already present if($result->id > 0){ mysql_query("ROLLBACK"); mysql_close($connId); return ""; } } $query = sprintf( "INSERT INTO manufacturerhasmins_queue (manufacturersId, mintypesId, characteristic) VALUES(%s, %s, '%s')", $this->id(), $mintypeId, mysql_real_escape_string($prefix[0]) ); if(!mysql_query($query)){ mysql_query("ROLLBACK"); mysql_close($connId); return "Could not insert prefix"; } } if(!mysql_query("COMMIT")){ mysql_close($connId); return "Could not commit"; } mysql_close($connId); return ""; } public function setId($id){ if(!is_numeric($id)) return; if($id < 0) return; $this->myId = $id; } public function id(){ return $this->myId; } public function loadFromId($id, $useExistingConnection = true){ $this->setId($id); if($this->id() < 1) return false; if(!$useExistingConnection){ $connId = @ mysql_connect("localhost", Settings::value("ADMINUSER"), Settings::value("ADMINPASSWORD")); if(!$connId) return false; if(!mysql_select_db(Settings::value("DBNAME"))){ mysql_close($connId); return false; } } $res = mysql_query("SELECT * FROM manufacturers WHERE id=". $this->id()); if(mysql_num_rows($res) != 1){ if(!$useExistingConnection) mysql_close($connId); return false; } $row = mysql_fetch_object($res); $this->setName($row->name); $this->setStreet($row->street, $row->number); $this->setZIP($row->postalCode); $this->setPostOfficeBox($row->postOfficeBox); $this->setCity($row->city); $this->setCountry($row->country); $this->setWebsite($row->website); $this->setEMail($row->email); $this->setPhone($row->phone); $this->setFax($row->fax); # load prefixes $res = mysql_query("SELECT mins.characteristic, mintypes.name FROM manufacturerhasmins mins, mintypes WHERE mins.mintypesId = mintypes.id AND mins.manufacturersId=". $this->id()); while($row = mysql_fetch_object($res)){ $this->addPrefix($row->characteristic, $row->name); } if(!$useExistingConnection) mysql_close($connId); return true; } private $myName, $myStreet, $myNumber, $myZIP, $myCity, $myPostOfficeBox; private $myCountry, $myWebsite, $myEMail, $myPhone, $myFax; private $prefixes; private $myId; } ?>