/** * get related record structure for a give relationship record * related = { "recID" => recID, * "RelTermID" => relationTrmID, * "RelTerm" => trmLabel, * "ParentTermID" => parentTrmID, * "RelatedRecID" => linkedRecID, * "InterpRecID" => interpretationRecID, * "Notes" => relationshipNotes, * "Title" => relationshipTitle, * "StartData" => relationshipStartDate, * "EndDate" => relationshipEndDate} * * @global int $relTypDT local id of relationtype detailType (magic number) * @global int $relSrcDT local id of source record pointer detailType (magic number) * @global int $relTrgDT local id of target record pointer detailType (magic number) * @global int $intrpDT local id of interpretation record pointer detailType (magic number) * @global int $notesDT local id of notes detailType (magic number) * @global int $startDT local id of start time detailType (magic number) * @global int $endDT local id of end time detailType (magic number) * @global int $titleDT local id of title detailType (magic number) * @param int $recID relationshipRecID to use for related * @param boolean $i_am_primary true if context is "from" record of relationship link * @return object related record structure * @todo change $i_am_primary to useInverseRelation */ function fetch_relation_details($recID, $i_am_primary) { global $relTypDT, $relSrcDT, $relTrgDT, $intrpDT, $notesDT, $startDT, $endDT, $titleDT; /* get recDetails for the given linked resource and extract all the necessary values */ $res = mysql_query('select * from recDetails where dtl_RecID = ' . $recID); $bd = array('recID' => $recID); while ($row = mysql_fetch_assoc($res)) { switch ($row['dtl_DetailTypeID']) { case $relTypDT: //saw Enum change - added RelationValue for UI if ($i_am_primary) { $bd['RelTermID'] = $row['dtl_Value']; } else { $bd['RelTermID'] = reltype_inverse($row['dtl_Value']); // BUG: assumes reltype_inverse returns ID //TODO: saw this should have a -1 which is different than self inverse and the RelTerm should be "inverse of ". term label requires checking smarty/showReps } $relval = mysql_fetch_assoc(mysql_query('select trm_Label, trm_ParentTermID from defTerms where trm_ID = ' . intval($bd['RelTermID']))); $bd['RelTerm'] = $relval['trm_Label']; if ($relval['trm_ParentTermID']) { $bd['ParentTermID'] = $relval['trm_ParentTermID']; } break; case $relTrgDT: // linked resource if (!$i_am_primary) { break; } $r = mysql_query('select rec_ID, rec_Title, rec_RecTypeID, rec_URL' . ' from Records where rec_ID = ' . intval($row['dtl_Value'])); $bd['RelatedRecID'] = mysql_fetch_assoc($r); break; case $relSrcDT: if ($i_am_primary) { break; } $r = mysql_query('select rec_ID, rec_Title, rec_RecTypeID, rec_URL' . ' from Records where rec_ID = ' . intval($row['dtl_Value'])); $bd['RelatedRecID'] = mysql_fetch_assoc($r); break; case $intrpDT: $r = mysql_query('select rec_ID, rec_Title, rec_RecTypeID, rec_URL' . ' from Records where rec_ID = ' . intval($row['dtl_Value'])); $bd['InterpRecID'] = mysql_fetch_assoc($r); break; case $notesDT: $bd['Notes'] = $row['dtl_Value']; break; case $titleDT: $bd['Title'] = $row['dtl_Value']; break; case $startDT: $bd['StartDate'] = $row['dtl_Value']; break; case $endDT: $bd['EndDate'] = $row['dtl_Value']; break; } } return $bd; }
/** * put your comment there... * * @param mixed $recID * @param mixed $relnRecID * @return mixed */ function getAllRelatedRecords($recID, $relnRecID = 0) { global $relTypDT, $relSrcDT, $relTrgDT, $intrpDT, $notesDT, $startDT, $endDT, $titleDT, $relRT; if (!$recID) { return null; } $query = "select LINK.dtl_DetailTypeID as type, DETAILS.*, DBIB.rec_Title as title,\n DBIB.rec_RecTypeID as rt, DBIB.rec_URL as url\n from recDetails LINK left join Records LBIB on LBIB.rec_ID=LINK.dtl_RecID,\n recDetails DETAILS left join Records DBIB on DBIB.rec_ID=DETAILS.dtl_Value and\n DETAILS.dtl_DetailTypeID in ({$relSrcDT}, {$relTrgDT})" . " where (LINK.dtl_DetailTypeID in ({$relSrcDT}, {$relTrgDT}) and LBIB.rec_RecTypeID={$relRT})" . " and LINK.dtl_Value = {$recID} and DETAILS.dtl_RecID = LINK.dtl_RecID"; if ($relnRecID) { $query .= " and DETAILS.dtl_RecID = {$relnRecID}"; } $query .= " order by LINK.dtl_DetailTypeID desc, DETAILS.dtl_ID"; $res = mysql_query($query); /* primary resources first, then non-primary, then authors */ if (!mysql_num_rows($res)) { return array(); } $relations = array('relationshipRecs' => array()); while ($row = mysql_fetch_assoc($res)) { $relnRecID = $row["dtl_RecID"]; $i_am_primary = $row["type"] == $relSrcDT; if (!array_key_exists($relnRecID, $relations['relationshipRecs'])) { $relations['relationshipRecs'][$relnRecID] = array(); } if (!array_key_exists("role", $relations['relationshipRecs'][$relnRecID])) { if ($row["type"] == $relSrcDT) { $relations['relationshipRecs'][$relnRecID]["role"] = "Primary"; } else { if ($row["type"] == $relTrgDT) { $relations['relationshipRecs'][$relnRecID]["role"] = "Non-primary"; } else { $relations['relationshipRecs'][$relnRecID]["role"] = "Unknown"; } } } if (!array_key_exists("recID", $relations['relationshipRecs'][$relnRecID])) { $relations['relationshipRecs'][$relnRecID]["recID"] = $recID; } switch ($row["dtl_DetailTypeID"]) { case $relTypDT: //saw Enum change - nothing to do since dtl_Value is an id and inverse returns an id $relations['relationshipRecs'][$relnRecID]["relTermID"] = $i_am_primary ? $row["dtl_Value"] : reltype_inverse($row["dtl_Value"]); if ($relations['relationshipRecs'][$relnRecID]["relTermID"]) { $relval = mysql_fetch_assoc(mysql_query('select trm_Label from defTerms where trm_ID = ' . intval($relations['relationshipRecs'][$relnRecID]["relTermID"]))); $relations['relationshipRecs'][$relnRecID]['relTerm'] = $relval['trm_Label']; } break; case $relTrgDT: case $relSrcDT: if ($row["dtl_Value"] != $recID) { $relations['relationshipRecs'][$relnRecID]["relatedRec"] = array("title" => $row["title"], "rectype" => $row["rt"], "URL" => $row["url"], "recID" => $row["dtl_Value"]); } break; case $intrpDT: $relations['relationshipRecs'][$relnRecID]["interpRec"] = array("title" => $row["title"], "rectype" => $row["rt"], "URL" => $row["url"], "recID" => $row["dtl_Value"]); break; case $notesDT: $relations['relationshipRecs'][$relnRecID]["notes"] = $row["dtl_Value"]; break; case $titleDT: $relations['relationshipRecs'][$relnRecID]["title"] = $row["dtl_Value"]; break; case $startDT: $relations['relationshipRecs'][$relnRecID]["startDate"] = $row["dtl_Value"]; break; case $endDT: $relations['relationshipRecs'][$relnRecID]["endDate"] = $row["dtl_Value"]; break; } } //while foreach ($relations['relationshipRecs'] as $relnRecID => $reln) { $relRT = $reln['relatedRec']['rectype']; $relRecID = $reln['relatedRec']['recID']; $relTermID = $reln['relTermID']; if (!array_key_exists('byRectype', $relations)) { $relations['byRectype'] = array(); } if (!array_key_exists($relRT, $relations['byRectype'])) { $relations['byRectype'][$relRT] = array(); } if (!array_key_exists($relTermID, $relations['byRectype'][$relRT])) { $relations['byRectype'][$relRT][$relTermID] = array($relRecID); } else { array_push($relations['byRectype'][$relRT][$relTermID], $relRecID); } if (!array_key_exists('byTerm', $relations)) { $relations['byTerm'] = array(); } if (!array_key_exists($relTermID, $relations['byTerm'])) { $relations['byTerm'][$relTermID] = array(); } if (!array_key_exists($relRT, $relations['byTerm'][$relTermID])) { $relations['byTerm'][$relTermID][$relRT] = array($relRecID); } else { array_push($relations['byTerm'][$relTermID][$relRT], $relRecID); } } //for return $relations; }