zone_type = $ztype; switch ($ztype) { case ZoneTypeEnum::HOSTING: $this->item = new service($zrelid); break; case ZoneTypeEnum::DOMAIN: $this->item = new domain($zrelid); break; case ZoneTypeEnum::ADDON: $this->item = new hostingaddon($zrelid); break; case ZoneTypeEnum::OTHER: if($clientid == false) { throw new Exception("Insufficient data", 200); } $this->item = new Other(); $this->item->setClientID($clientid); break; } } public function __set($name, $value) { $this->item->$name = $value; } public function __get($name) { return $this->item->$name; } public function __call($name, $args) { if($args[0]) { return $this->item->$name($args[0]); } else { return $this->item->$name(); } } public function clientID() { return $this->item->clientID(); } public function client() { return new client($this->clientID()); } public function status($upper = true) { return $upper?strtoupper($this->item->status()):$this->item->status(); } public function packageItemType() { switch ($this->zone_type) { case ZoneTypeEnum::HOSTING: return PackageItemTypeEnum::PRODUCT; case ZoneTypeEnum::DOMAIN: return PackageItemTypeEnum::DOMAIN; case ZoneTypeEnum::ADDON: return PackageItemTypeEnum::ADDON; case ZoneTypeEnum::OTHER: return PackageItemTypeEnum::OTHER; } } public function packageRelID() { switch ($this->zone_type) { case ZoneTypeEnum::HOSTING: return $this->item->productID; case ZoneTypeEnum::DOMAIN: $ex = explode('.', $this->item->domain, 2); //return '.' . $ex[1]; $extension = '.' . $ex[1]; return domainpricing::getExtensionId($extension); case ZoneTypeEnum::ADDON: return $this->item->addonid; case ZoneTypeEnum::OTHER: return 0; } } public function getPackageItem() { return Repository::factory()->byType($this->packageItemType())->byRelID($this->packageRelID())->one(); } public function getPackage() { $item = $this->getPackageItem(); return $item === false ? false : $item->getPackage(); } }