+ $head_css="
+.name { font-weight: bold; }
+.PublAuthor { font-variant: small-caps; }
+.Publication { }
+";
+ no_cache();
+
+ $buttonre=".+";
+ prepvar("find" ,".*" ,false /* require */);
+ if (isset($find))
+ $find=trim($find);
+ prepvar("confirm" ,$buttonre,false /* require */);
+ prepvar("delete" ,$buttonre,false /* require */);
+ prepvar("isolate" ,$buttonre,false /* require */);
+ prepvar("edit" ,$buttonre,false /* require */);
+ prepvar("update" ,$buttonre,false /* require */);
+ prepvar("move" ,$buttonre,false /* require */);
+ prepvar("reorder" ,$buttonre,false /* require */);
+
+ prepvar("move_src","[-0-9 ,]+" ,isset($move ) /* require */);
+ prepvar("move_dst","[-0-9]+" ,isset($move ) /* require */);
+ prepvar("confirming","[a-z]+" ,isset($confirm) /* require */);
+ prepvar("reorder_by","[+-]?[0-9]+",isset($reorder) /* require */);
+
+ prepvar("id" ,"[-0-9]+",(isset($update) || isset($confirm) || isset($delete) || isset($isolate) || isset($edit)) || isset($reorder) /* require */);
+ prepvar("winclose" ,"1",false /* require */);
+
+ // Database fields:
+ prepvar("name" ,".*" ,false /* require */);
+ prepvar("PublAuthor" ,".*" ,false /* require */);
+ prepvar("Publication",".*" ,false /* require */);
+ prepvar("html" ,".*" ,false /* require */);
+
+ // "find" dump limits:
+ prepvar("limit_from","[0-9]*",false /* require */);
+ if (!isset($limit_from))
+ $limit_from=0;
+ prepvar("limit_max" ,"[0-9]*",false /* require */);
+ if (!isset($limit_max))
+ $limit_max=$limit_max_default;
+
+ $permanents_array=array("find","limit_from","limit_max","winclose");
+
+ if (isset($update)) {
+
+function fieldupdate($field)
+{
+ global $cmd,$cmdargnum;
+
+ $cmd.=(!$cmdargnum?" ":",")."$field=";
+ if ($GLOBALS[$field]!="")
+ $cmd.="\"".mysql_escape_string($GLOBALS[$field])."\"";
+ else
+ $cmd.="NULL";
+ $cmdargnum++;
+}
+
+ $cmd="update $tb_tree set";
+ $cmdargnum=0;
+ fieldupdate("name");
+ fieldupdate("PublAuthor");
+ fieldupdate("Publication");
+ fieldupdate("html");
+ $cmd.=" where id=\"".mysql_escape_string($id)."\"";
+ if ($cmdargnum)
+ db_query($cmd);
+ // PASSTHRU redirect
+ }
+ if (isset($delete)) {
+ db_query("delete from $tb_tree where id=\"".mysql_escape_string($id)."\"");
+ // PASSTHRU redirect
+ }
+ if (isset($isolate)) {
+ $family_id=db_item("select family_id from $tb_tree where id=\"".mysql_escape_string($id)."\"");
+ if ($id!=$family_id)
+ db_query("update $tb_tree set family_id=id where id=\"".mysql_escape_string($id)."\"");
+ else {
+ $where="where family_id=\"".mysql_escape_string($family_id)."\" and family_id<>id";
+ $other_id=db_item("select id from $tb_tree $where limit 1");
+ db_query("update $tb_tree set family_id=\"".mysql_escape_string($other_id)."\" $where");
+ }
+ // PASSTHRU redirect
+ }
+ if (isset($move)) {
+ $order=db_item("select max(family_order) from $tb_tree where family_id=\"".mysql_escape_string($move_dst)."\"");
+ foreach(preg_split('/[ ,]/',$move_src,-1,PREG_SPLIT_NO_EMPTY) as $src) {
+ // UGLY but how to do sequential setting of increasing family_order?
+ $result=db_query("select id from $tb_tree where family_id=\"".mysql_escape_string($src)."\" order by family_order");
+ while (($row=mysql_fetch_array($result)))
+ db_query("update $tb_tree set family_order=\"".(++$order)."\",family_id=\"".mysql_escape_string($move_dst)."\""
+ ." where id=\"".mysql_escape_string($row["id"])."\"");
+ }
+ // PASSTHRU redirect
+ }
+ if (isset($reorder)) {
+ $row=db_array("select family_id,family_order from $tb_tree where id=\"".mysql_escape_string($id)."\"");
+ $other_order=db_item("select family_order from $tb_tree where family_id=\"".mysql_escape_string($row["family_id"])."\""
+ ." and family_order".($reorder_by<0 ? "<" : ">").$row["family_order"]
+ ." order by family_order ".($reorder_by<0 ? "desc" : "asc")." limit 1");
+ db_query("update $tb_tree set family_order=family_order".($reorder_by>=0 ? "+" : "").$reorder_by
+ ." where family_id=\"".mysql_escape_string($row["family_id"])."\""
+ ." and family_order".($reorder_by<0 ? "<" : ">").$other_order);
+ db_query("update $tb_tree set family_order=".($other_order+$reorder_by)." where id=\"".mysql_escape_string($id)."\"");
+ // PASSTHRU redirect
+ }