/**
 * 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;
}