function _subtree($id, $termType) { global $recordArray; if (!$retXml) { $retXml = new simpleXmlElement("<temp/>"); } $term = thesaurus::get_name($id); // check if entry allready exists if (!$recordArray[$term]) { //------------------------------------------------------------------------------ // extract (BS) from term // and create new terms from BS clauses $uses = extract_pattern($term, "/\\(BS[: ](?<use>.*)\\)/"); if ($uses) { // create common parameters $newArray['input.name'] = "Thesaurus Redaktion"; $newArray['input.date'] = date("Y-m-d", time()); $newArray['input.time'] = date("h:i:s", time()); $newArray['term.type'] = $termType; $newArray['term.status'] = "Verweisungsform"; $newArray['use'] = $term; // $newArray['broader_term'] = thesaurus::get_parent($id); // loop over uses foreach ($uses as $entry) { $newArray['term'] = $entry; extract_pattern($newArray['term'], "/\\(BS[: ](?<use>.*)\\)/"); // echoall(create_record($newArray,$termType)); xml_insert($retXml->record, create_record($newArray, $termType)); } } //------------------------------------------------------------------------------ // insert entry xml_insert($retXml, record($id, $termType)); // register new record $recordArray[$term] = $term; //------------------------------------------------------------------------------ // recursion of children $children = thesaurus::get_child($id); if ($children) { foreach ($children as $entry) { //echoall($entry); // subchildren -> recursion if (count(thesaurus::get_child($entry))) { $subXml = _subtree($entry, $termType); if ($subXml) { xml_insert($retXml, $subXml); } } } } return $retXml; } }
function action($_arg) { //------------------------------------------------------------------------------ // extrace action from coordinate system while ($entry = each($_arg)) { $argArray = explode("_", $entry[key]); if (count($argArray) > 1) { $indexString = $argArray[0]; $valueString = $argArray[1]; $_arg[$indexString] = $valueString; if (isset($argArray[2])) { $_arg['_ID'] = $argArray[2]; } } } //echoalert($_arg); //echoalert($_SESSION); //------------------------------------------------------------------------------ // parse reset value if ($_arg[reset]) { $_arg = array(); session::destroy(searchshow); session::destroy(show); session::destroy(search); session::destroy(searchtype); session::destroy(searchcom); session::destroy(searchorder); session::destroy(searchString); session::destroy(searchexact); session::destroy(searchstart); session::destroy(searchowner); session::destroy(searchentrytype); session::destroy(searchstatus); } //------------------------------------------------------------------------------ // parse action parameter switch ($_arg[action]) { //------------------------------------------------------------------------------ // login / out case login: // login user user::login($_arg[user], $_arg[password]); // restore program status if new session restore_status(); // reset linking session::destroy("linkaction"); session::destroy("link"); break; case logout: // logout user user::logout(); break; case changedo: // change password if ($password = $_GET[password]) { database::query("UPDATE user SET password='******' WHERE ID='" . session::get("user") . "'"); echojavascript("Passwort erfolgreich geändert"); } break; //------------------------------------------------------------------------------ // inherit entrytype to children //------------------------------------------------------------------------------ // inherit entrytype to children case inherit: $childArray = thesaurus::get_child($_arg[id]); foreach ($childArray as $entry) { database::query("UPDATE entry SET entrytype={$_arg['entrytype']} WHERE ID={$entry}"); } break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case update: if ($_arg[orderdefault]) { session::set(orderdefault, $_arg[id]); } elseif (isset($_arg[orderdefault])) { session::destroy(orderdefault); } break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case edit: session::set("edit", TRUE); session::set("show", $_arg[id]); session::destroy("searchshow"); break; case noedit: session::destroy("edit"); break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case open: session::open($_arg[id]); break; case close: session::close($_arg[id]); break; case closeall: session::close_all(); break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case deleteid: end_link(); hide(); database::delete($_arg[id]); break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case suchen: if (!$_arg[searchString] and ($_arg[searchowner] or $_arg[searchtype] or $_arg[searchstatus])) { $_arg[searchString] = "%"; } if ($_arg[searchString]) { session::set("searchshow", true); } // show search result session::set("search", $_arg[searchString]); session::set("searchcom", $_arg[searchcom]); session::set("searchorder", $_arg[searchorder]); session::set("searchentrytype", $_arg[searchentrytype]); session::set("searchstatus", $_arg[searchstatus]); if ($_arg[searchowner]) { session::set("searchowner", $_arg[searchowner]); } else { session::destroy("searchowner"); } switch ($_arg[searchtype]) { case 0: session::destroy("searchexact"); session::destroy("searchstart"); break; case 1: session::destroy("searchexact"); session::set("searchstart", TRUE); break; case 2: session::destroy("searchstart"); session::set("searchexact", TRUE); break; } break; case hidesearch: session::destroy(searchshow); break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case show: session::destroy("searchshow"); $_arg[linkaction] = ""; if ($_arg[id] == NULL) { break; } elseif ($_arg[id] > 0) { session::set("show", $_arg[id]); break; } else { session::delete("show"); break; } break; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ case swap: if ($_arg[id]) { thesaurus::swap_link($_arg[id], $_arg[_ID]); } break; case change: if ($_arg[id]) { // thesaurus::change_link($_arg); } break; case add: // add new descriptor session::destroy("show"); session::destroy("searchshow"); // session::set("",1); break; // clean database // clean database case correct: thesaurus::validate(true); echoalert("Datenbank bereinigt"); break; //------------------------------------------------------------------------------ // open hyrarchy down to selected entry //------------------------------------------------------------------------------ // open hyrarchy down to selected entry case showhyrarchy: if ($_arg[id]) { $hyrarchyArray = thesaurus::get_hyrarchy($_arg[id]); // don't open selected entry // array_pop($hyrarchyArray); foreach ($hyrarchyArray as $entry) { // echo $entry . " "; echo session::open($entry); } session::set("hyrarchy", TRUE); // hide search window session::destroy("searchshow"); // if nothing selected for display, show ID if (!session::get(show)) { session::set("show", $_arg[id]); } break; } //------------------------------------------------------------------------------ // debug on/off //------------------------------------------------------------------------------ // debug on/off case debugon: system::setval(debug, TRUE); break; case debugoff: system::setval(debug, FALSE); // legend on/off // legend on/off case legendon: session::set("legend", TRUE); break; case legendoff: session::destroy("legend"); break; // display / hide non descriptors // display / hide non descriptors case toggleND: if (session::get("descriptor")) { session::destroy("descriptor"); } else { session::set("descriptor", TRUE); } break; // display / hide orders // display / hide orders case toggleVI: if (session::get("visible")) { session::destroy("visible"); } else { session::set("visible", TRUE); } break; // toggle tooltips on/off // toggle tooltips on/off case off: session::set("tooltips", TRUE); break; case on: session::destroy("tooltips"); break; // toggle hyrarchy // toggle hyrarchy case hyrarchyon: session::set("hyrarchy", TRUE); break; case hyrarchyoff: session::set("hyrarchy", FALSE); break; } //------------------------------------------------------------------------------ // parse linkaction parameter switch ($_arg[linkaction]) { // link case link: session::set("link", $_arg[id]); session::set("linkaction", $_arg[linkaction]); session::set("linktype", $_arg[linktype]); break; // execute linking // execute linking case linkdo: switch (session::get('linkaction')) { case link: database::parent_insert(session::get("link"), $_arg[id], session::get("linktype")); session::set("show", session::get("link")); // set display to linked objects // with BS set linked descriptor to "no descriptor" if (session::get("linktype") == 2) { database::set_desc($_arg[id], 0); } // session::destroy("link"); // end linking break; case change: database::link_change(session::get('linkparent'), session::get('link'), $_arg['id']); // parent,oldlink,newlink break; } break; case linkend: end_link(); break; // unlink // unlink case unlink: if ($_arg[id]) { database::parent_delete(session::get("show"), $_arg[id]); } break; // change OB // change OB case change: if ($_arg[id]) { session::set("link", $_arg[id]); session::set("linkaction", $_arg[linkaction]); session::set("linkparent", $_arg[_ID]); session::set("linktype", $_arg[linktype]); } break; } // TEMP SETTINGS // if not link rights, set descriptor and visible to true if (!right::link()) { session::set(descriptor, FALSE); } //if (!right::link()) session::set(visible,TRUE); // save program status save_status($_SESSION); }
function print_tree($descId, $type = "", $depth = "") { switch ($type) { case txt: $delimitor = "*"; break; case csv: $delimitor = ";"; break; case adlib: $adlibString = adlib($descId, $type); return $adlibString; break; } // display id entry $comment = thesaurus::get_comment($descId); // remove \r\n $comment = str_replace("\n", '', $comment); $comment = str_replace("\r", '', $comment); $paramArray = explode(";", $comment); $idArray = explode("=", $paramArray[0]); $rootArray = explode("=", $paramArray[1]); $commentArray = explode("=", $paramArray[2]); $levelCnt = 7; // insert title if (!$depth) { $treeString .= $idArray[0] . $delimitor; for ($i = 0; $i < $levelCnt; $i++) { $treeString .= "Level {$i}" . $delimitor; } $treeString .= $delimitor . $rootArray[0] . $delimitor . $commentArray[0] . "\r\n"; } // insert id at beginning $treeString .= $idArray[1] . $delimitor; // insert blank tree elements on beginn $i = 0; while ($i++ < $depth - 1) { $treeString .= $delimitor; } if ($type == "txt") { $treeString .= " "; } // whitespace in textfile // display entry $treeString .= thesaurus::get_name($descId); // insert blank tree elements at end while ($i++ < $levelCnt) { $treeString .= $delimitor; } if ($type == "txt") { $treeString .= " "; } // whitespace in textfile // insert root entry $treeString .= $delimitor . "{$rootArray['1']}"; // insert comment entry $treeString .= $delimitor . "{$commentArray['1']}"; // insert crlf $treeString .= "\r\n"; $childArray = thesaurus::get_child($descId); // loop all childs recursive if (is_array($childArray)) { foreach ($childArray as $entry) { $treeString .= export::print_tree($entry, $type, $depth + 1); } } return $treeString; }
function display($parent, $depth, $pos, $errorArray) { // V2.0 // starting on thesaurus level if ($parent == 0) { $elementArray = thesaurus::get_thesaurus_list(); // get thesauri } else { $elementArray = thesaurus::get_child($parent); } // get children // entries found if (is_array($elementArray)) { $cntElements = count($elementArray); // start new line if (!isset($pos)) { $pos = 0; } // set position to 0 $line = new line(); // **************************************************************** // start array $lineCnt = 0; foreach ($elementArray as $id) { // don't display if // non descriptor // or not visible // if ((thesaurus::is_descriptor($id) or session::get("descriptor")) // and (thesaurus::is_visible($id) or session::get("visible")) // ) if (thesaurus::is_visible($id) or session::get("visible")) { $cntParents = thesaurus::parent_num($id); $equivArray = thesaurus::get_equiv($id, "BS"); if (is_array($equivArray)) { $cntEquiv = count($equivArray); } else { $cntEquiv = 0; } // get count and list of subentries $childrenArray = thesaurus::get_child($id); $cntChildren = thesaurus::child_num($id, session::get(descriptor)); // get entry details $entry = thesaurus::get_descriptor($id); // ECHO ENTRY // space in front $x = 0; while ($x < $pos - 1) { $line->insert(grafik::disp("line", "|", 20), 20); // insert line-grafik $x++; } // search elements in next level enabled if ($depth > $pos or $depth == -1) { // display tree grafik if ($pos > 0) { if ($lineCnt++ < $cntElements - 1) { $line->insert(grafik::disp("subtree", "|", 20), 20); } else { $line->insert(grafik::disp("subend", "|", 20), 20); } // insert sub end icon } // display open / close icon if subobjects if ($cntChildren != 0) { // subobjects found -> display icon to open / close if (thesaurus::is_open($id)) { if ($pos > 0) { $tempString = form::link("minus", "[+]", "index.php?id={$id}&action=close", "close"); } else { $tempString = form::link("thesaurus-open", "[+]", "index.php?id={$id}&action=close", "close"); } } else { if ($pos > 0) { $tempString = form::link("plus", "[+]", "index.php?id={$id}&action=open", "open"); } else { $tempString = form::link("thesaurus", "[T]", "index.php?id={$id}&action=open", "open"); } } } else { $tempString = grafik::disp("space", " ", 20); } $line->insert($tempString, 20); // insert navigation symbols $tempString = ""; // Display parent and child link icon if (session::get("show")) { // display parent arrow if (thesaurus::is_child_of(session::get("show"), $id) and session::get("show")) { $line->insert(grafik::arrow("right", "blue", 15), 20); // display parent arrow } // display link-arrow if (thesaurus::is_parent_of(session::get("show"), $id)) { $line->insert(grafik::arrow("right", "orange", 15), 20); } // display associate links if (thesaurus::is_assoc_of(session::get("show"), $id)) { $line->insert(grafik::disp("assoc", "=", 20), 20); } } // entry name $textLength = strlen($entry[name]) * 15; $textString = $entry[name]; // set style for selection $styleString = ""; if (thesaurus::is_equivalent($id)) { $styleString = "class='bright'"; } if (thesaurus::is_descriptor($id)) { $textString = strtoupper($textString); } if ($id == session::get("show")) { $styleString = "class='select'"; } elseif ($cntParents > 1) { $styleString = "class='multiple'"; } if (!thesaurus::is_visible($id)) { $styleString = "class='red'"; } if (thesaurus::is_deleted($id)) { $styleString = "class='through'"; } // draw name with link if ($pos == 0) { $tempString .= form::link("", "<b><span {$styleString}>" . $textString . "</span></b>", "index.php?id={$id}&action=show", "name", "", $id); } else { $tempString .= form::link("", "<span {$styleString}>" . $textString . "</span>", "index.php?id={$id}&action=show", "name", "", $id); } // number of sub-objects if ($cntChildren) { $subText = ""; $listCnt = 0; foreach ($childrenArray as $entry) { $subText .= thesaurus::get_name($entry) . "<br>"; } $tempString .= "<span "; $tempString .= help::show("elementcount", $subText) . ">"; $tempString .= "<i class='small'>"; if ($cntChildren) { $tempString .= " ({$cntChildren} UB)</i>"; } $tempString .= "</span>"; } // number of equiv-objects if ($cntEquiv) { $equivText = ""; $listCnt = 0; foreach ($equivArray as $entry) { $equivText .= thesaurus::get_name($entry) . "<br>"; } $tempString .= "<span "; $tempString .= help::show("equivcount", $equivText) . ">"; $tempString .= "<i class='small'>"; if ($cntEquiv) { $tempString .= " ({$cntEquiv} BS)</i>"; } $tempString .= "</span>"; } // Count of containing elements // show owner $ownerID = thesaurus::get_owner($entry[ID]); $infoText = "ID: " . $id; $infoText .= "<br>Status: " . thesaurus::get_status_name(thesaurus::get_status($id)); // $infoText .= "<br>Begriffstyp: " . thesaurus::get_entrytype_name(thesaurus::get_entrytype($id)); $infoText .= "<br>Ersteller: " . user::name($ownerID); $tempString .= " " . form::link("", "?", "", "owner", $infoText); // Edit Link $tempString .= form::link("add", "add", "index.php?parent={$id}&action=add", "add"); // Delete Link if ($cntChildren == 0) { $javaText = "Wollen Sie " . $entry[name] . " wirklich löschen? Es werden auch alle Links zu diesem Eintrag gelöscht"; $tempString .= form::link("delete", "x", "javascript:get_confirm("{$javaText}","index.php?action=deleteid&id={$id}");", "delete"); } // Link Link if (session::get("link") and $id != session::get("link")) { if (!thesaurus::is_parent_of(session::get("link"), $id) or session::get(linkaction) == "change") { $linkType = "do" . thesaurus::get_type_name(session::get("linktype")); $tempString .= form::link($linkType, "L", "index.php?id={$id}&linkaction=linkdo", "{$linkType}"); } } $line->insert($tempString); // Insert text in line $tempString = ""; // recursive display subtree if (thesaurus::is_open($id)) { // recursive call of level if (thesaurus::child_num($id, 1)) { hyrarchy::display_line($line); hyrarchy::display($id, $depth, $pos + 1, $errorArray); } } } // display line hyrarchy::display_line($line); } } } }
function child_num($descriptorID, $descType = "") { $tempArray = thesaurus::get_child($descriptorID, $descType); if ($tempArray) { return count($tempArray); } else { return FALSE; } }
function sub_links($id) { $tempArray = thesaurus::get_child($id, 1); echo "<form method='get' action='index.php' name='ub'>"; echo "<fieldset>"; echo "<legend>Unterbegriffe</legend>"; $x = 0; $listArray = array(); if ($tempArray) { foreach ($tempArray as $entry) { $listArray[$x++] = thesaurus::get_descriptor($entry); } } echo_selection($listArray, "id", "", 3, "lower-field"); // display action line action::display($id, ""); echo "</fieldset>"; echo "</form>"; }