function getTopMostVocabulary($terms_ids, $domain) { global $imp_terms; if ($domain == "relationtype") { $domain = "relation"; } //array of valid ids $terms_ids = getTermsFromFormat($terms_ids, $domain); foreach ($terms_ids as $term_id) { $topmost = getTopMostTermParent($term_id, $domain); if ($topmost && !in_array($topmost, $imp_terms[$domain])) { array_push($imp_terms[$domain], $topmost); } } }
/** * Verify rectype pointer value or term id * * @param mixed $id - rectype id (for resource) or term id (for enum reltype) * @param mixed $dtyID - field type id * @param mixed $rtyID - rectype id */ function isValidID($id, $dtyID, $rtyID = null) { if (!is_numeric($id) || !is_numeric($dtyID)) { return false; } if (!@$dtyIDDefs) { $dtyIDDefs = array(); } if (!@$dtyIDDefs[$dtyID]) { $res = mysql_query("select dty_ID, dty_Type, dty_JsonTermIDTree,dty_TermIDTreeNonSelectableIDs,dty_PtrTargetRectypeIDs" . " from defDetailTypes" . " where dty_ID={$dtyID} and dty_Type in ('enum','relationtype','resource')"); while ($res && ($row = mysql_fetch_row($res))) { //use first element as index if (defined('DT_RELATION_TYPE') && $dtyID == DT_RELATION_TYPE) { //$row[1] === 'relationtype' ){ $dtyIDDefs[$dtyID] = getTermListAll('relation'); } else { if ($row[1] === 'enum') { //create term Id list and term list. $terms = getTermsFromFormat($row[2]); if (($cntTrm = count($terms)) > 0) { if ($cntTrm == 1) { //vocabulary $terms = getTermOffspringList($terms[0]); } else { $nonTerms = getTermsFromFormat($row[3]); if (count($nonTerms) > 0) { $terms = array_diff($terms, $nonTerms); } } if (count($terms) < 1) { $dtyIDDefs[$row[0]] = "all"; } else { $dtyIDDefs[$row[0]] = $terms; } } } else { if ($row[1] === 'resource') { // create list of valid rectypes $dtyIDDefs[$row[0]] = "all"; if ($row[4] != "") { $temp = explode(",", $row[4]); //get allowed record types if (count($temp) > 0) { $dtyIDDefs[$row[0]] = $temp; } } } } } } } if (false && $rtyID && !$rtFieldDefs) { //this code not used anymore $rtFieldDefs = array('max' => array()); $res = mysql_query("select rst_DetailTypeID, dty_Type, rst_MaxValues," . " if(rst_FilteredJsonTermIDTree is not null and CHAR_LENGTH(rst_FilteredJsonTermIDTree)>0,rst_FilteredJsonTermIDTree,dty_JsonTermIDTree) as rst_FilteredJsonTermIDTree," . " if(rst_TermIDTreeNonSelectableIDs is not null and CHAR_LENGTH(rst_TermIDTreeNonSelectableIDs)>0,rst_TermIDTreeNonSelectableIDs,dty_TermIDTreeNonSelectableIDs) as rst_TermIDTreeNonSelectableIDs," . " if(rst_PtrFilteredIDs is not null and CHAR_LENGTH(rst_PtrFilteredIDs)>0,rst_PtrFilteredIDs,dty_PtrTargetRectypeIDs) as rst_PtrFilteredIDs" . " from defRecStructure" . " left join defDetailTypes on rst_DetailTypeID = dty_ID" . " where rst_RecTypeID=" . $rtyID); while ($res && ($row = mysql_fetch_row($res))) { //use first element as index if (is_numeric($row[2])) { $rtFieldDefs['max'][$row[0]] = $row[2]; } /* These fields are never defined in UI. Thus, they should aleays be null. It was for overwrite of base field constraints by further contraints within the recstructure, which is one step too many and has been removed from design by Ian in approx 2011 if ( $row[1] === 'enum' || $row[1] === 'relationtype') { //create term Id list and term list. $terms = getTermsFromFormat($row[3]); if (($cntTrm = count($terms)) > 0) { if ($cntTrm == 1) { $terms = getTermOffspringList($terms[0]); }else{ $nonTerms = getTermsFromFormat($row[4]); if (count($nonTerms) > 0) { $terms = array_diff($terms,$nonTerms); } } if (!empty($terms)) { $rtFieldDefs[$row[0]] = $terms; } } } else if ($row[1] === 'resource') { // create list of valid rectypes if (count($row[5])>0 && $row[5] != "") { $temp = explode(",",$row[5]); if (!empty($temp)) { $rtFieldDefs[$row[0]] = $temp; } }else{ $rtFieldDefs[$row[0]] = "all"; } } */ } } // not used // if ($rtFieldDefs && $rtyID && array_key_exists($dtyID, $rtFieldDefs)) { // $res = $rtFieldDefs[$dtyID] === "all" || in_array($id, $rtFieldDefs[$dtyID]); //} if ($dtyIDDefs && @$dtyIDDefs[$dtyID]) { return $dtyIDDefs[$dtyID] === "all" || in_array($id, $dtyIDDefs[$dtyID]); } return false; }
function isValidID($id, $dtyID, $rtyID = null) { static $rtFieldDefs = null; static $dtyIDDefs = null; if (!is_numeric($id)) { return false; } if (!$dtyIDDefs) { $dtyIDDefs = array(); $res = mysql_query("select dty_ID, dty_Type, dty_JsonTermIDTree,dty_TermIDTreeNonSelectableIDs,dty_PtrTargetRectypeIDs" . " from defDetailTypes" . " where dty_Type in ('enum','relationtype','resource')"); while ($res && ($row = mysql_fetch_row($res))) { //use first element as index if ($row[1] === 'enum' || $row[1] === 'relationtype') { //create term Id list and term list. $terms = getTermsFromFormat($row[2]); if (($cntTrm = count($terms)) > 0) { if ($cntTrm == 1) { $terms = getTermOffspringList($terms[0]); } else { $nonTerms = getTermsFromFormat($row[3]); if (count($nonTerms) > 0) { $terms = array_diff($terms, $nonTerms); } } if (!empty($terms)) { $dtyIDDefs[$row[0]] = $terms; } } } else { if ($row[1] === 'resource') { // create list of valid rectypes if (count($row[4]) > 0 && $row[4] != "") { $temp = explode(",", $row[4]); if (!empty($temp)) { $dtyIDDefs[$row[0]] = $temp; } } } } } } if ($rtyID && !$rtFieldDefs) { $rtFieldDefs = array('max' => array()); $res = mysql_query("select rst_DetailTypeID, dty_Type, rst_MaxValues," . " if(rst_FilteredJsonTermIDTree is not null and CHAR_LENGTH(rst_FilteredJsonTermIDTree)>0,rst_FilteredJsonTermIDTree,dty_JsonTermIDTree) as rst_FilteredJsonTermIDTree," . " if(rst_TermIDTreeNonSelectableIDs is not null and CHAR_LENGTH(rst_TermIDTreeNonSelectableIDs)>0,rst_TermIDTreeNonSelectableIDs,dty_TermIDTreeNonSelectableIDs) as rst_TermIDTreeNonSelectableIDs," . " if(rst_PtrFilteredIDs is not null and CHAR_LENGTH(rst_PtrFilteredIDs)>0,rst_PtrFilteredIDs,dty_PtrTargetRectypeIDs) as rst_PtrFilteredIDs" . " from defRecStructure" . " left join defDetailTypes on rst_DetailTypeID = dty_ID" . " where rst_RecTypeID=" . $rtyID); while ($res && ($row = mysql_fetch_row($res))) { //use first element as index if (is_numeric($row[2])) { $rtFieldDefs['max'][$row[0]] = $row[2]; } if ($row[1] === 'enum' || $row[1] === 'relationtype') { //create term Id list and term list. $terms = getTermsFromFormat($row[3]); if (($cntTrm = count($terms)) > 0) { if ($cntTrm == 1) { $terms = getTermOffspringList($terms[0]); } else { $nonTerms = getTermsFromFormat($row[4]); if (count($nonTerms) > 0) { $terms = array_diff($terms, $nonTerms); } } if (!empty($terms)) { $rtFieldDefs[$row[0]] = $terms; } } } else { if ($row[1] === 'resource') { // create list of valid rectypes if (count($row[5]) > 0 && $row[5] != "") { $temp = explode(",", $row[5]); if (!empty($temp)) { $rtFieldDefs[$row[0]] = $temp; } } else { $rtFieldDefs[$row[0]] = "all"; } } } } } /*****DEBUG****/ //error_log("save record isValidID rtFields = ".print_r($rtFieldDefs,true)); /*****DEBUG****/ //error_log("save record isValidID rdtyDefs = ".print_r($dtyIDDefs,true)); if ($rtyID && array_key_exists($dtyID, $rtFieldDefs)) { return $rtFieldDefs[$dtyID] === "all" || in_array($id, $rtFieldDefs[$dtyID]); } else { if (array_key_exists($dtyID, $dtyIDDefs)) { return $dtyIDDefs[$dtyID] === "all" || in_array($id, $dtyIDDefs[$dtyID]); } } return false; }
function isInvalidTerm($defs, $defs_nonsel, $id, $dtyID) { global $dtyIDDefs; if (!@$dtyIDDefs[$dtyID]) { $terms = getTermsFromFormat($defs); if (($cntTrm = count($terms)) > 0) { if ($cntTrm == 1) { //vocabulary $terms = getTermOffspringList($terms[0]); } else { $nonTerms = getTermsFromFormat($defs_nonsel); if (count($nonTerms) > 0) { $terms = array_diff($terms, $nonTerms); } } if (count($terms) < 1) { $dtyIDDefs[$dtyID] = "all"; } else { $dtyIDDefs[$dtyID] = $terms; } } } if (!@$dtyIDDefs[$dtyID]) { return true; //terms not found } return !($dtyIDDefs[$dtyID] === "all" || in_array($id, $dtyIDDefs[$dtyID])); }