Example #1
0
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]));
}