Subversion Repositories public

Compare Revisions

Ignore whitespace Rev 3 → Rev 4

/pm/trunk/knumber.inc
0,0 → 1,250
<?
 
# Kapitelnummerierung :-)
#
# #snum enthaelt eine Nummer der Form x.y.z, wobei es beliebig viele Abschnitte
# geben kann.
#
# #level enthaelt den Level, also welche der Teilnummern veraendert werden soll.
#
# #dir enthaelt die Richtung in die veraendert werden soll, wobei 0 eins nach
# unten und 1 eins nach oben bedeutet. -1 bedeutet alle Ziffern groesser
# #level wegschneiden und die letzte Nummer erhoehen. -2 tut das selbe,
# reduziert jedoch die letzte Nummer. -3 bedeutet die Nummern gleich lassen,
# aber die Anzahl der Elemente an #level anpassen.
#
# #level zaehlt von 0 weg!
#
function kNumber($snum, $level, $dir) {
$anz = str_wordcount($snum);
$kpnum = $snum;
 
# Haben wir weniger Einzelnummern im String, haengen wir ".1" so
# lange an, bis wir #level erreicht haben.
if ($anz <= $level) {
while ($anz <= $level) {
$kpnum .= ".1";
$anz++;
}
 
if ($dir == -3) {
return $kpnum;
}
}
 
$anz = $level + 1;
$anum = explode(".", $kpnum);
 
if ($dir < 0) {
if ($dir == -1) {
$anum[$level]++;
} else if ($dir == -2) {
$anum[$level]--;
}
} else {
if ($dir == 0) {
$anum[$level]++;
} else {
$anum[$level]--;
}
}
 
$num = "";
 
for ($i = 0; $i < $anz; $i++) {
if ($i > 0) {
$num .= "." . (string)$anum[$i];
} else {
$num = (string)$anum[$i];
}
}
 
return $num;
}
 
function SelectTask($pl_num, $id, $sel=0) {
global $phase;
global $numphase;
 
$lodb = OpenDB();
$loquery = "select ta_num, ta_name, ta_id, ta_level, ta_meeting,";
$loquery .= "ta_phase from task where ta_plnum = $pl_num order by ta_id";
$loresult = QueryDB($lodb, $loquery);
 
if (!$loresult) {
closeDB($lodb);
return false;
}
 
$numrows = numrowsDB($loresult);
$row = 0;
$snum = "1";
$olevel = 0;
 
while ($row < $numrows) {
$data = fetchDB($loresult, $row);
$ta_num = $data[0];
$ta_name = $data[1];
$ta_id = $data[2];
$ta_level = $data[3];
$ta_meeting = $data[4];
$tphase = $data[5];
 
$loquery = "select ta_level from task where ";
$loquery .= "ta_plnum = $pl_num and ta_id > $ta_id order by ta_id";
$loresult2 = QueryDB($lodb, $loquery);
 
if (!$loresult2) {
closeDB($lodb);
return false;
}
 
$nr = numrowsDB($loresult2);
 
if ($nr > 0) {
$data = fetchDB($loresult2, 0);
$xlevel = $data[0];
} else {
$xlevel = $ta_level;
}
 
if ($olevel == 0) {
$level = 0;
$olevel = $ta_level;
$dir = -3;
} else if ($olevel < $ta_level) {
$level = $ta_level - 1;
$olevel = $ta_level;
$dir = -3;
} else if ($olevel == $ta_level) {
$level = $ta_level - 1;
$dir = 0;
} else if ($olevel > $ta_level) {
$level = $ta_level - 1;
$olevel = $ta_level;
$dir = -1;
}
 
$snum = kNumber ($snum, $level, $dir);
 
if ($phase == 1 && $numphase == 1 && isset($tphase)) {
$p = strpos($snum, ".");
 
if ($p === false)
$rest = "";
else
$rest = substr($snum, $p);
 
$snum = (string)$tphase . $rest;
}
 
if (!$ta_meeting && $ta_level > 1 && $xlevel <= $ta_level) {
if (!$id) {
echo "<option value=\"$ta_num\"";
$comp = $ta_num;
} else {
echo "<option value=\"$ta_id\"";
$comp = $ta_id;
}
 
if ($comp == $sel)
echo "selected";
 
echo ">$snum $ta_name</option>\n";
}
 
$row++;
}
 
// closeDB($lodb);
return true;
}
 
function GetTaskNum($pl_num, $ta_id, $ta_level, $ta_phase, $ta_meeting, $snum, $typ, $db=-1) {
global $phase;
global $numphase;
 
if (strlen($snum) <= 0)
$snum = "1";
 
if ($db == -1)
$dbs = OpenDB();
else
$dbs = $db;
 
# Finde den naechsten Level
$query = "select ta_level from task where ta_plnum = $pl_num and ";
$query .= "ta_id > $ta_id order by ta_id";
$result = QueryDB($dbs, $query);
 
if (!$result) {
return false;
}
 
$numrows = numrowsDB($result);
 
if ($numrows > 0) {
$data = fetchDB($result, 0);
$xlevel = $data[0];
} else {
$xlevel = $ta_level;
}
 
# Finde den vorhergehenden Level
$query = "select ta_level from task where ta_plnum = $pl_num and ";
$query .= "ta_id < $ta_id order by ta_id desc";
$result = QueryDB($dbs, $query);
 
if (!$result) {
return false;
}
 
$numrows = numrowsDB($result);
 
if ($numrows > 0) {
$data = fetchDB($result, 0);
$olevel = $data[0];
} else {
$olevel = 0;
}
 
 
if ($olevel == 0) {
$level = 0;
$dir = -3;
} else if ($olevel < $ta_level) {
$level = $ta_level - 1;
$dir = -3;
} else if ($olevel == $ta_level) {
$level = $ta_level - 1;
$dir = 0;
} else if ($olevel > $ta_level) {
$level = $ta_level - 1;
$dir = -1;
}
 
$kpnum = kNumber ($snum, $level, $dir);
 
if ($phase == 1 && $numphase == 1 && isset($ta_phase) && $ta_phase >= 0) {
$p = strpos($kpnum, ".");
 
if ($p === false)
$rest = "";
else
$rest = substr($kpnum, $p);
 
$kpnum = (string)$ta_phase . $rest;
}
 
if (!$ta_meeting && $ta_level > 1 && $xlevel <= $ta_level)
$typ = true;
else
$typ = false;
 
if ($db == -1)
closeDB($dbs);
 
return $kpnum;
}
 
?>