/** * synchronize data collections such as middlwares, disciplines, etc., about an * entiity in the backend * * @masterName string the name of the attribute that represents the * entity id * @masterID integer the entity id * @slaveName string the name of the attribute that represents the * collection item (slave) id * @collectionName string the classname of the class that represents the * collection of items related to the entity * @collectionItemName string the classname of the class that represents idividual * items in such a collection * @data string[] array of actual collection data * @dataSlaveName string the array key used to retrieve relevant data from * the array above. If empty, it is considered to be equal to @slaveName * * @access protected */ protected function syncDBCollection($masterName, $masterID, $slaveName, $collectionName, $collectionItemName, &$data, $dataSlaveName = "") { if (is_null($data)) { return; } $data = $this->noDupes($data); if ($dataSlaveName === "") { $dataSlaveName = $slaveName; } $collectionName = "Default_Model_" . $collectionName; $collectionItemName = "Default_Model_" . $collectionItemName; $collection = new $collectionName(); $collection->filter->{$masterName}->equals($masterID); for ($i = $collection->count() - 1; $i >= 0; $i--) { $found = false; foreach ($data as $key => $value) { if (strtolower(substr($key, 0, strlen($dataSlaveName))) === strtolower($dataSlaveName)) { if ($dataSlaveName == "url") { $urlData = json_decode($value, true); $slaveID = $urlData['id']; } elseif ($dataSlaveName == "mw") { $mws = new Default_Model_Middlewares(); $value = json_decode($value)->name; $mws->filter->name->equals($value); if (count($mws->items) > 0) { $slaveID = $mws->items[0]->id; } else { $slaveID = $value; } } elseif ($dataSlaveName == "license") { $v = json_decode($value); if (intval($v->licenseid) == "0") { $slaveID = "-1"; } else { $slaveID = $v->licenseid; } } else { $slaveID = $value; } if ($slaveID == $collection->items[$i]->{$slaveName}) { $found = true; break; } } } if (!$found) { $collection->remove($i); } } $collection->refresh(); $j = 0; // have a counter handy, needed in some cases foreach ($data as $key => $value) { if (strtolower(substr($key, 0, strlen($dataSlaveName))) === strtolower($dataSlaveName)) { $found = false; $slaveID = null; if ($dataSlaveName == "url") { $urlData = json_decode($value, true); $slaveID = $urlData['id']; // default to http:// if relative url is given if (parse_url($urlData['url'], PHP_URL_SCHEME) == '') { $urlData['url'] = 'http://' . $urlData['url']; } } elseif ($dataSlaveName == "mw") { $mws2 = new Default_Model_Middlewares(); $mws2->filter->name->equals(json_decode($value)->name); if ($mws2->count() > 0) { $mwid = $mws2->items[0]->id; $mwcomment = null; } else { $mwid = 5; $mwcomment = json_decode($value)->name; } $slaveID = $mwid; } elseif ($dataSlaveName == "license") { $licenseData = json_decode($value); if (intval($licenseData->licenseid) < 1) { $slaveID = 0; } else { $slaveID = intval($licenseData->licenseid); } } else { $slaveID = $value; } for ($i = $collection->count() - 1; $i >= 0; $i--) { if ($slaveID == $collection->items[$i]->{$slaveName}) { if ($collectionItemName === "Default_Model_AppLicense" || $collectionItemName === "Default_Model_DatasetLicense") { $lic = $collection->items[$i]; $lic->comment = $licenseData->comment; $lic->save(); } if ($collectionItemName != "Default_Model_AppUrl") { $found = true; } break; } } if (!$found) { $collectionItem = new $collectionItemName(); $collectionItem->{$masterName} = $masterID; $collectionItem->{$slaveName} = $slaveID; if ($collectionItemName == "Default_Model_AppUrl") { if ($collectionItem->{$slaveName} == "") { $collectionItem->{$slaveName} = null; } $collectionItem->url = $urlData['url']; $collectionItem->description = $urlData['type']; $collectionItem->title = $urlData['title']; $collectionItem->ord = (string) $j; } elseif ($collectionItemName == "Default_Model_AppMiddleware") { $collectionItem->middlewareID = $mwid; $collectionItem->comment = $mwcomment; //FIXME: Quick and dirty fix for "other" MWs registered as "5" for some reason if ($mwid == 5 && $mwcomment == 5) { $mwcomment = null; } if (!is_null($mwcomment)) { debug_log("mwlink: " . json_decode($value)->link); $collectionItem->link = json_decode($value)->link; } } elseif ($collectionItemName == "Default_Model_AppLicense" || $collectionItemName == "Default_Model_DatasetLicense") { $licenseData = json_decode($value); $collectionItem->comment = $licenseData->comment; if (intval($licenseData->licenseid) < 1) { $collectionItem->licenseid = 0; $collectionItem->title = $licenseData->title; if (parse_url($licenseData->url, PHP_URL_SCHEME) == '') { $licenseData->url = 'http://' . $licenseData->url; } $collectionItem->link = $licenseData->url; } else { $collectionItem->licenseid = intval($licenseData->licenseid); } } $collectionItem->save(); // $collection->add($collectionItem); $j++; } } } }
private function syncDBCollection($masterName, $masterID, $slaveName, $collectionName, $collectionItemName, &$data, $dataSlaveName = "") { if ($dataSlaveName === "") { $dataSlaveName = $slaveName; } $collectionName = "Default_Model_" . $collectionName; $collectionItemName = "Default_Model_" . $collectionItemName; $collection = new $collectionName(); $collection->filter->{$masterName}->equals($masterID); for ($i = $collection->count() - 1; $i >= 0; $i--) { $found = false; foreach ($data as $key => $value) { if (strtolower(substr($key, 0, strlen($dataSlaveName))) === strtolower($dataSlaveName)) { if ($dataSlaveName == "url") { $urlData = json_decode($value, true); $slaveID = $urlData['id']; } elseif ($dataSlaveName == "mw") { $mws = new Default_Model_Middlewares(); $mws->filter->name->equals($value); if (count($mws->items) > 0) { $slaveID = $mws->items[0]->id; } else { $slaveID = $value; } } else { $slaveID = $value; } if ($slaveID == $collection->items[$i]->{$slaveName}) { $found = true; break; } } } if (!$found) { $collection->remove($i); } } $collection->refresh(); $j = 0; // have a counter handy, needed in some cases $firstCategory = true; foreach ($data as $key => $value) { if (strtolower(substr($key, 0, strlen($dataSlaveName))) === strtolower($dataSlaveName)) { $found = false; $slaveID = null; if ($dataSlaveName == "url") { $urlData = json_decode($value, true); $slaveID = $urlData['id']; // default to http:// if relative url is given if (parse_url($urlData['url'], PHP_URL_SCHEME) == '') { $urlData['url'] = 'http://' . $urlData['url']; } } elseif ($dataSlaveName == "mw") { $mws2 = new Default_Model_Middlewares(); $mws2->filter->name->equals($value); if ($mws2->count() > 0) { $mwid = $mws2->items[0]->id; $mwcomment = null; } else { $mwid = 5; $mwcomment = $value; } $slaveID = $mwid; } else { $slaveID = $value; } for ($i = $collection->count() - 1; $i >= 0; $i--) { if ($slaveID == $collection->items[$i]->{$slaveName}) { if ($collectionItemName != "Default_Model_AppUrl") { $found = true; } break; } } if (!$found) { $collectionItem = new $collectionItemName(); $collectionItem->{$masterName} = $masterID; $collectionItem->{$slaveName} = $slaveID; if ($collectionItemName == "Default_Model_AppUrl") { if ($collectionItem->{$slaveName} == "") { $collectionItem->{$slaveName} = null; } $collectionItem->url = $urlData['url']; $collectionItem->description = $urlData['type']; $collectionItem->title = $urlData['title']; $collectionItem->ord = (string) $j; } elseif ($collectionItemName == "Default_Model_AppMiddleware") { $collectionItem->middlewareID = $mwid; $collectionItem->comment = $mwcomment; } elseif ($collectionItemName == "Default_Model_AppCategory") { if ($firstCategory) { $collectionItem->isPrimary = true; $firstCategory = false; } } $collectionItem->save(); $j++; } } } }
public function getMiddleware() { if ($this->_middleware === null) { $Middlewares = new Default_Model_Middlewares(); $Middlewares->filter->id->equals($this->getMiddlewareID()); if ($Middlewares->count() > 0) { $this->_middleware = $Middlewares->items[0]; } } return $this->_middleware; }