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
00077 $searchRule = "[Id] = '".$recArr["Id"]."'";
00078 $recordList = $dataObj->directFetch($searchRule, 1);
00079 if (count($recordList) == 1) return true;
00080
00081
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 {
00088 $xObj = BizSystem::getObject($xDataObj);
00089 $newRecArr = $xObj->newRecord();
00090
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
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
00152
00153 $asscObj = BizSystem::getObject($dataObj->m_Association["AsscObjName"]);
00154
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
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
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
00248 $db = $dataObj->getDBConnection();
00249
00250
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
00274 $db = $dataObj->getDBConnection();
00275
00276
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
00312
00313 $asscObj = BizSystem::getObject($dataObj->m_Association["AsscObjName"]);
00314
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
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
00353 return true;
00354 }
00355 }