Location: PHPKode > projects > TheoPlan > pm/knumber.inc
<?

# 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;
}

?>
Return current item: TheoPlan