Beispiel #1
0
 /**
  * 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++;
             }
         }
     }
 }
Beispiel #2
0
 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;
 }