• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List

E:/E/GEAMP/www/openbiz/openbiz/bin/data/private/BizDataObj_Assoc.php

00001 <?php
00026 class BizDataObj_Assoc
00027 {
00028 
00037     public static function addRecord($dataObj, $recArr, &$isParentObjUpdated)
00038     {
00039         if ($dataObj->m_Association["Relationship"] == "M-M"  )
00040         {
00041             $isParentObjUpdated = false;
00042             return self::_addRecordMtoM($dataObj, $recArr);
00043         }
00044         elseif($dataObj->m_Association["Relationship"] == "Self-Self")
00045         {
00046               $isParentObjUpdated = false;
00047             return self::_addRecordSelftoSelf($dataObj, $recArr);
00048         }
00049         elseif ($dataObj->m_Association["Relationship"] == "M-1"
00050                 || $dataObj->m_Association["Relationship"] == "1-1")
00051         {
00052             $isParentObjUpdated = true;
00053             return self::_addRecordMto1($dataObj, $recArr);
00054         }
00055        elseif ($dataObj->m_Association["Relationship"] == "1-M")                
00056         {
00057             $isParentObjUpdated = false;
00058             return self::_addRecord1toM($dataObj, $recArr);
00059         }
00060         else
00061         {
00062             throw new BDOException("You cannot add a record in dataobj who doesn't have M-M or M-1 or Self-Self relationship with its parent object");
00063             return false;
00064         }
00065     }
00066 
00074     private static function _addRecordMtoM($dataObj, $recArr)
00075     {
00076         // query on this object to get the corresponding record of this object.
00077         $searchRule = "[Id] = '".$recArr["Id"]."'";
00078         $recordList = $dataObj->directFetch($searchRule, 1);
00079         if (count($recordList) == 1) return true;
00080 
00081         // insert a record on XTable
00082         $db = $dataObj->getDBConnection();
00083         $xDataObj = isset($dataObj->m_Association["XDataObj"]) ? $dataObj->m_Association["XDataObj"] : null;
00084         $val1 = $dataObj->m_Association["FieldRefVal"];
00085         $val2 = $recArr["Id"];
00086         if ($xDataObj)
00087         {   // get new record from XDataObj
00088             $xObj = BizSystem::getObject($xDataObj);
00089             $newRecArr = $xObj->newRecord();
00090             // verify the main table of XDataobj is same as the XTable
00091             if ($xObj->m_MainTable != $dataObj->m_Association["XTable"])
00092             {
00093                 throw new BDOException("Unable to create a record in intersection table: XDataObj's main table is not same as XTable.");
00094                 return false;
00095             }
00096             $fld1 = $xObj->getFieldNameByColumn($dataObj->m_Association["XColumn1"]);
00097             $newRecArr[$fld1] = $val1;
00098             $fld2 = $xObj->getFieldNameByColumn($dataObj->m_Association["XColumn2"]);
00099             $newRecArr[$fld2] = $val2;
00100             $ok = $xObj->insertRecord($newRecArr);
00101             if ($ok === false)
00102             {
00103                 throw new BDOException($xObj->getErrorMessage());
00104                 return false;
00105             }
00106         }
00107         else
00108         {
00109             $sql_col = "(" . $dataObj->m_Association["XColumn1"] . ","
00110                         . $dataObj->m_Association["XColumn2"].")";
00111 
00112             $sql_val = "('".$val1."','".$val2."')";
00113             $sql = "INSERT INTO " . $dataObj->m_Association["XTable"] . " "
00114                     . $sql_col . " VALUES " . $sql_val;
00115 
00116             try
00117             {
00118                 BizSystem::log(LOG_DEBUG, "DATAOBJ", "Associate Insert Sql = $sql");
00119                 $db->query($sql);
00120             }
00121             catch (Exception $e)
00122             {
00123                 BizSystem::log(LOG_ERR, "DATAOBJ", "Query Error: ".$e->getMessage());
00124                 throw new BDOException("Query Error: " . $e->getMessage());
00125                 return false;
00126             }
00127         }
00128 
00129         // add the record to object cache. requery on this object to get the corresponding record of this object.
00130         $searchRule = "[Id] = '".$recArr["Id"]."'";
00131         $recordList = $dataObj->directFetch($searchRule, 1);
00132         if (count($recordList) == 0)
00133             return false;
00134         return true;
00135     }
00136 
00137        private static function _addRecordSelftoSelf($dataObj, $recArr)
00138     {
00139         $result = self::_addRecordMtoM($dataObj, $recArr);        
00140         return true;
00141     }    
00142     
00149     private static function _addRecordMto1($dataObj, $recArr)
00150     {
00151         // set the $recArr[Id] to the parent table foriegn key column
00152         // get parent/association dataobj
00153         $asscObj = BizSystem::getObject($dataObj->m_Association["AsscObjName"]);
00154         // call parent dataobj's updateRecord
00155         $updateRecArr["Id"] = $asscObj->getFieldValue("Id");
00156         $updateRecArr[$dataObj->m_Association["FieldRef"]] = $recArr["Id"];
00157         $ok = $asscObj->updateRecord($updateRecArr);
00158         if ($ok == false)
00159             return false;
00160         // requery on this object
00161         $dataObj->m_Association["FieldRefVal"] = $recArr["Id"];
00162         return $dataObj->runSearch();
00163     }
00164     
00165     private static function _addRecord1toM($dataObj, $recArr)
00166     {         
00167        $column = $dataObj->m_Association['Column'];
00168        $field = $dataObj->getFieldNameByColumn($column);
00169               
00170        $parentRefVal = $dataObj->m_Association["FieldRefVal"];
00171        
00172        $newRecArr["Id"] = $recArr["Id"];         
00173               $newRecArr[$field] = $parentRefVal;
00174               
00175               $column2 = $dataObj->m_Association['Column2'];
00176        $field2 = $dataObj->getFieldNameByColumn($column2);
00177               
00178        $parentRefVal2 = $dataObj->m_Association["FieldRefVal2"];
00179        if($column2)
00180        {
00181               $newRecArr[$field2] = $parentRefVal2;
00182        }
00183        
00184        $cond_column = $dataObj->m_Association['CondColumn'];
00185        $cond_value = $dataObj->m_Association['CondValue'];
00186        if($cond_column)
00187        {
00188               $cond_field = $dataObj->getFieldNameByColumn($cond_column);
00189               $newRecArr[$cond_field] = $cond_value;
00190        }      
00191        
00192        $newDO = BizSystem::getObject($dataObj->m_Name,1);
00193        $ok = $newDO->updateRecord($newRecArr,$recArr);
00194        
00195         if ($ok == false)
00196             return false;
00197         // requery on this object        
00198         return true;        
00199     }    
00200 
00209     public static function removeRecord($dataObj, $recArr, &$isParentObjUpdated)
00210     {
00211         if ($dataObj->m_Association["Relationship"] == "M-M")
00212         {
00213             $isParentObjUpdated = false;
00214             return self::_removeRecordMtoM($dataObj, $recArr);
00215         }
00216        elseif ($dataObj->m_Association["Relationship"] == "Self-Self")
00217         {
00218             $isParentObjUpdated = false;
00219             return self::_removeRecordSelftoSelf($dataObj, $recArr);
00220         }
00221         elseif ($dataObj->m_Association["Relationship"] == "M-1" || $dataObj->m_Association["Relationship"] == "1-1")
00222         {
00223             $isParentObjUpdated = true;
00224             return self::_removeRecordMto1($dataObj, $recArr);
00225         }
00226        elseif ($dataObj->m_Association["Relationship"] == "1-M" )
00227         {
00228             $isParentObjUpdated = false;
00229             return self::_removeRecord1toM($dataObj, $recArr);
00230         }
00231         else
00232         {
00233             throw new BDOException("You cannot add a record in dataobj who doesn't have M-M or M-1 or Self-Self relationship with its parent object");
00234             return false;
00235         }
00236     }
00237 
00245     private static function _removeRecordMtoM($dataObj, $recArr)
00246     {
00247         // delete a record on XTable
00248         $db = $dataObj->getDBConnection();
00249 
00250         //TODO: delete using XDataObj if XDataObj is defined
00251 
00252         $where = $dataObj->m_Association["XColumn1"] . "='" . $dataObj->m_Association["FieldRefVal"] . "'";
00253         $where .= " AND " . $dataObj->m_Association["XColumn2"] . "='" . $recArr["Id"] . "'";
00254         $sql = "DELETE FROM " . $dataObj->m_Association["XTable"] . " WHERE " . $where;
00255 
00256         try
00257         {
00258             BizSystem::log(LOG_DEBUG, "DATAOBJ", "Associate Delete Sql = $sql");
00259             $db->query($sql);
00260         }
00261         catch (Exception $e)
00262         {
00263             BizSystem::log(LOG_ERR, "DATAOBJ", "Query Error: ".$e->getMessage());
00264             throw new BDOException("Query Error: " . $e->getMessage());
00265             return false;
00266         }
00267         return true;
00268     }
00269 
00270    
00271     private static function _removeRecordSelftoSelf($dataObj, $recArr)
00272     {
00273         // delete a record on XTable
00274         $db = $dataObj->getDBConnection();
00275 
00276         //TODO: delete using XDataObj if XDataObj is defined
00277 
00278         $where = $dataObj->m_Association["XColumn1"] . "='" . $dataObj->m_Association["FieldRefVal"] . "'";
00279         $where .= " AND " . $dataObj->m_Association["XColumn2"] . "='" . $recArr["Id"] . "'";
00280         $sql = "DELETE FROM " . $dataObj->m_Association["XTable"] . " WHERE " . $where;
00281 
00282               $where_2 = $dataObj->m_Association["XColumn2"] . "='" . $dataObj->m_Association["FieldRefVal"] . "'";
00283         $where_2 .= " AND " . $dataObj->m_Association["XColumn1"] . "='" . $recArr["Id"] . "'";
00284         $sql_2 = "DELETE FROM " . $dataObj->m_Association["XTable"] . " WHERE " . $where_2;
00285 
00286         try
00287         {
00288             BizSystem::log(LOG_DEBUG, "DATAOBJ", "Associate Delete Sql = $sql");
00289             $db->query($sql);
00290             $db->query($sql_2);
00291         }
00292         catch (Exception $e)
00293         {
00294             BizSystem::log(LOG_ERR, "DATAOBJ", "Query Error: ".$e->getMessage());
00295             throw new BDOException("Query Error: " . $e->getMessage());
00296             return false;
00297         }
00298         return true;
00299     }    
00300     
00309     private static function _removeRecordMto1($dataObj, $recArr)
00310     {
00311         // set the $recArr[Id] to the parent table foriegn key column
00312         // get parent/association dataobj
00313         $asscObj = BizSystem::getObject($dataObj->m_Association["AsscObjName"]);
00314         // call parent dataobj's updateRecord
00315         $updateRecArr["Id"] = $asscObj->getFieldValue("Id");
00316         $updateRecArr[$dataObj->m_Association["FieldRef"]] = "";
00317         $ok = $asscObj->updateRecord($updateRecArr);
00318         if ($ok == false)
00319             return false;
00320         // requery on this object
00321         $dataObj->m_Association["FieldRefVal"] = "";
00322         return $dataObj->runSearch();
00323     }
00324 
00325     private static function _removeRecord1toM($dataObj, $recArr)
00326     {        
00327            
00328        $column = $dataObj->m_Association['Column'];
00329        $field = $dataObj->getFieldNameByColumn($column);
00330                      
00331        $column2 = $dataObj->m_Association['Column2'];
00332        $field2 = $dataObj->getFieldNameByColumn($column2);
00333        
00334        $newRecArr["Id"] = $recArr["Id"];
00335               $newRecArr[$field] = '';
00336               
00337               if($field2){
00338                      $newRecArr[$field2] = '';
00339               }
00340               
00341        $cond_column = $dataObj->m_Association['CondColumn'];
00342        $cond_value = $dataObj->m_Association['CondValue'];     
00343               
00344        if($cond_column)
00345        {
00346               $cond_field = $dataObj->getFieldNameByColumn($cond_column);
00347               $newRecArr[$cond_field] = $cond_value;
00348        }             
00349         $ok = BizSystem::getObject($dataObj->m_Name,1)->updateRecord($newRecArr,$recArr);
00350         if ($ok == false)
00351             return false;
00352         // requery on this object        
00353         return true;
00354     }    
00355 }

Generated on Thu Apr 19 2012 17:09:13 for openbiz by  doxygen 1.7.2