Ejemplo n.º 1
0
/**
 * deletes the term with given ID and all its children
 * before deletetion it verifies that this term or any of its children is refered in defDetailTypes dty_JsonTermIDTree
 *
 * @todo - need to check inverseid or it will error by foreign key constraint?
 */
function deleteTerms($trmID)
{
    global $mysqli;
    $ret = array();
    $children = array();
    //find all children
    $children = getTermsChilds($children, $trmID);
    array_push($children, $trmID);
    //find possible entries in defDetailTypes dty_JsonTermIDTree
    foreach ($children as $termID) {
        $query = "select dty_ID, dty_Name from defDetailTypes where (FIND_IN_SET({$termID}, dty_JsonTermIDTree)>0)";
        $res = $mysqli->query($query);
        if ($mysqli->error) {
            $ret['error'] = "SQL error in deleteTerms retreiving field types which use term {$termID}: " . $mysqli->error;
            break;
        } else {
            $dtCount = $res->num_rows;
            if ($dtCount > 0) {
                // there are records existing of this rectype, need to return error and the recIDs
                $ret['error'] = "Error: You cannot delete term {$trmID}. " . ($trmID == $termID ? "It" : "Its child term {$termID}") . " is referenced in {$dtCount} base field defintions " . "- please delete field definitions or remove terms from these fields to allow deletion of these terms.<div style='text-align:left'><ul>";
                $ret['dtyIDs'] = array();
                while ($row = $res->fetch_row()) {
                    array_push($ret['dtyIDs'], $row[0]);
                    $ret['error'] = $ret['error'] . ("<li>" . $row[0] . "&nbsp;" . $row[1] . "</li>");
                }
                $ret['error'] = $ret['error'] . "</ul></div>";
                break;
            }
        }
        //TODO: need to check inverseid or it will error by foreign key constraint?
    }
    //foreach
    //find usage in recDetails
    if (!array_key_exists("error", $ret)) {
        $query = "select distinct dtl_RecID from recDetails, defDetailTypes " . "where (dty_ID = dtl_DetailTypeID ) and " . "(dty_Type='enum' or dty_Type='relationtype') and " . "(dtl_Value in (" . implode(",", $children) . "))";
        $res = $mysqli->query($query);
        if ($mysqli->error) {
            $ret['error'] = "SQL error in deleteTerms retreiving records which use term {$termID}: " . $mysqli->error;
            break;
        } else {
            $recCount = $res->num_rows;
            if ($recCount > 0) {
                // there are records existing of this rectype, need to return error and the recIDs
                $ret['error'] = "Error: You cannot delete term {$trmID}. It or its child terms are referenced in {$recCount} record(s)";
                $ret['recIDs'] = array();
                while ($row = $res->fetch_row()) {
                    array_push($ret['recIDs'], $row[0]);
                }
                $ret['error'] = $ret['error'] . "<br><br>" . "<a href='#' onclick='window.open(\"" . HEURIST_BASE_URL . "?db=" . HEURIST_DBNAME . "&q=ids:" . implode(",", $ret['recIDs']) . "\",\"_blank\")'>Click here</a> to retrieve these records";
            }
        }
    }
    //all is clear - delete the term
    if (!array_key_exists("error", $ret)) {
        //$query = "delete from defTerms where trm_ID in (".join(",",$children).")";
        //$query = "delete from defTerms where trm_ID = $trmID";
        foreach ($children as $termID) {
            $query = "delete from defTerms where trm_ID = {$termID}";
            $res = $mysqli->query($query);
            if ($mysqli->error) {
                $ret['error'] = "SQL error deleting term {$termID} from defTerms table: " . $mysqli->error;
                break;
            }
        }
        if (!array_key_exists("error", $ret)) {
            $ret['result'] = $children;
        }
        /*
        $res = $mysqli->query($query);
        if ($mysqli->error) {
        $ret['error'] = "DB error deleting of term $trmID and its children from defTerms - ".$mysqli->error;
        } else {
        $ret['result'] = $children;
        }
        */
    }
    return $ret;
}
Ejemplo n.º 2
0
/**
 * deletes the term with given ID and all its children
 * before deletetion it verifies that this term or any of its children is refered in defDetailTypes dty_JsonTermIDTree
 *
 * @todo - need to check inverseid or it will error by foreign key constraint?
 */
function deleteTerms($trmID)
{
    /*****DEBUG****/
    //		error_log(">>>>>>>>>>>>>>>>>HERE ");
    $ret = array();
    $children = array();
    //find all children
    $children = getTermsChilds($children, $trmID);
    array_push($children, $trmID);
    /*****DEBUG****/
    //		error_log(">>>>>>>>>>>>>>>>>".join(",",$children));
    //find possible entries in defDetailTypes dty_JsonTermIDTree
    foreach ($children as $termID) {
        $query = "select dty_ID from defDetailTypes where (FIND_IN_SET({$termID}, dty_JsonTermIDTree)>0)";
        $res = mysql_query($query);
        if (mysql_error()) {
            $ret['error'] = "SQL error in deleteTerms retreiving feild types which use term {$termID}: " . mysql_error();
            break;
        } else {
            $dtCount = mysql_num_rows($res);
            if ($dtCount > 0) {
                // there are records existing of this rectype, need to return error and the recIDs
                $ret['error'] = "You cannot delete term {$trmID}. " . ($trmID == $termID ? "It" : "Its child term {$termID}") . " is referenced in {$dtCount} field type(s)";
                $ret['dtyIDs'] = array();
                while ($row = mysql_fetch_row($res)) {
                    array_push($ret['dtyIDs'], $row[0]);
                }
                break;
            }
        }
        //need to check inverseid or it will error by foreign key constraint?
    }
    //foreach
    //all is clear - delete the term
    if (!array_key_exists("error", $ret)) {
        //$query = "delete from defTerms where trm_ID in (".join(",",$children).")";
        //$query = "delete from defTerms where trm_ID = $trmID";
        foreach ($children as $termID) {
            $query = "delete from defTerms where trm_ID = {$termID}";
            $res = mysql_query($query);
            /*****DEBUG****/
            //error_log(">>>>>>>>>>>>>>>>>".$res."   ".mysql_error());
            if (mysql_error()) {
                $ret['error'] = "SQL error deleting term {$termID} from defTerms table: " . mysql_error();
                break;
            }
        }
        if (!array_key_exists("error", $ret)) {
            $ret['result'] = $children;
        }
        /*
        $res = mysql_query($query);
        if (mysql_error()) {
        $ret['error'] = "DB error deleting of term $trmID and its children from defTerms - ".mysql_error();
        } else {
        $ret['result'] = $children;
        }
        */
    }
    return $ret;
}