/**
    * @brief Output(): 
    * Requires:\n
           filter: optional filter to apply\n
           item1:  uploadtree_pk of the column 1 tree\n
           item2:  uploadtree_pk of the column 2 tree\n
           freeze: column number (1 or 2) to freeze
    */
    function Output()
    {
        if ($this->State != PLUGIN_STATE_READY) {
            return 0;
        }
        $uTime = microtime(true);
        $V = "";
        /**/
        $UpdCache = GetParm("updcache", PARM_INTEGER);
        /* Remove "updcache" from the GET args and set $this->UpdCache
         * This way all the url's based on the input args won't be
         * polluted with updcache
         * Use Traceback_parm_keep to ensure that all parameters are in order
         */
        $CacheKey = "?mod=" . $this->Name . Traceback_parm_keep(array("item1", "item2", "filter", "col", "freeze", "itemf"));
        if ($UpdCache) {
            $UpdCache = $_GET['updcache'];
            $_SERVER['REQUEST_URI'] = preg_replace("/&updcache=[0-9]*/", "", $_SERVER['REQUEST_URI']);
            unset($_GET['updcache']);
            $V = ReportCachePurgeByKey($CacheKey);
        } else {
            $V = ReportCacheGet($CacheKey);
        }
        /**/
        if (empty($V)) {
            $filter = GetParm("filter", PARM_STRING);
            if (empty($filter)) {
                $filter = "none";
            }
            $FreezeCol = GetParm("freeze", PARM_INTEGER);
            // which column to freeze?  1 or 2 or null
            $ClickedCol = GetParm("col", PARM_INTEGER);
            // which column was clicked on?  1 or 2 or null
            $ItemFrozen = GetParm("itemf", PARM_INTEGER);
            // frozen item or null
            $in_uploadtree_pk1 = GetParm("item1", PARM_INTEGER);
            $in_uploadtree_pk2 = GetParm("item2", PARM_INTEGER);
            if (empty($in_uploadtree_pk1) || empty($in_uploadtree_pk2)) {
                Fatal("Bad input parameters.  Both item1 and item2 must be specified.", __FILE__, __LINE__);
            }
            /* If you click on a item in a frozen column, then you are a dope so ignore $ItemFrozen */
            if ($FreezeCol == $ClickedCol) {
                $ItemFrozen = 0;
                $FreezeCol = 0;
            }
            /* Check item1 upload permission */
            $Item1Row = GetSingleRec("uploadtree", "WHERE uploadtree_pk = {$in_uploadtree_pk1}");
            $UploadPerm = GetUploadPerm($Item1Row['upload_fk']);
            if ($UploadPerm < PERM_READ) {
                $text = _("Permission Denied");
                echo "<h2>{$text} item 1<h2>";
                return;
            }
            /* Check item2 upload permission */
            $Item2Row = GetSingleRec("uploadtree", "WHERE uploadtree_pk = {$in_uploadtree_pk2}");
            $UploadPerm = GetUploadPerm($Item2Row['upload_fk']);
            if ($UploadPerm < PERM_READ) {
                $text = _("Permission Denied");
                echo "<h2>{$text} item 2<h2>";
                return;
            }
            $uploadtree_pk1 = $in_uploadtree_pk1;
            $uploadtree_pk2 = $in_uploadtree_pk2;
            if ($FreezeCol == 1) {
                $uploadtree_pk1 = $ItemFrozen;
            } else {
                if ($FreezeCol == 2) {
                    $uploadtree_pk2 = $ItemFrozen;
                }
            }
            $newURL = Traceback_dir() . "?mod=" . $this->Name . "&item1={$uploadtree_pk1}&item2={$uploadtree_pk2}";
            if (!empty($filter)) {
                $newURL .= "&filter={$filter}";
            }
            // rewrite page with new uploadtree_pks */
            if ($uploadtree_pk1 != $in_uploadtree_pk1 || $uploadtree_pk2 != $in_uploadtree_pk2) {
                print <<<JSOUT
<script type="text/javascript">
  window.location.assign('{$newURL}');
</script>
JSOUT;
            }
            $TreeInfo1 = $this->GetTreeInfo($uploadtree_pk1);
            $TreeInfo2 = $this->GetTreeInfo($uploadtree_pk2);
            $ErrText = _("No license data for tree %d.  Use Jobs > Agents to schedule a license scan.");
            $ErrMsg = '';
            if ($TreeInfo1['agent_pk'] == 0) {
                $ErrMsg = sprintf($ErrText, 1);
            } else {
                if ($TreeInfo2['agent_pk'] == 0) {
                    $ErrMsg = sprintf($ErrText, 2);
                } else {
                    $BucketDefArray = initBucketDefArray($TreeInfo1['bucketpool_pk']);
                    /* Get list of children */
                    $Children1 = GetNonArtifactChildren($uploadtree_pk1);
                    $Children2 = GetNonArtifactChildren($uploadtree_pk2);
                    /* Add fuzzyname to children */
                    FuzzyName($Children1);
                    // add fuzzyname to children
                    FuzzyName($Children2);
                    // add fuzzyname to children
                    /* add element licstr to children */
                    $this->AddBucketStr($TreeInfo1, $Children1, $BucketDefArray);
                    $this->AddBucketStr($TreeInfo2, $Children2, $BucketDefArray);
                    /* Master array of children, aligned.   */
                    $Master = MakeMaster($Children1, $Children2);
                    /* add linkurl to children */
                    FileList($Master, $TreeInfo1['agent_pk'], $TreeInfo2['agent_pk'], $filter, $this, $uploadtree_pk1, $uploadtree_pk2);
                    /* Apply filter */
                    $this->FilterChildren($filter, $Master, $BucketDefArray);
                }
            }
            switch ($this->OutputType) {
                case "XML":
                    break;
                case "HTML":
                    if ($ErrMsg) {
                        $V .= $ErrMsg;
                    } else {
                        $V .= $this->HTMLout($Master, $uploadtree_pk1, $uploadtree_pk2, $in_uploadtree_pk1, $in_uploadtree_pk2, $filter, $TreeInfo1, $TreeInfo2, $BucketDefArray);
                    }
                    break;
                case "Text":
                    break;
                default:
            }
            $Cached = false;
        } else {
            $Cached = true;
        }
        if (!$this->OutputToStdout) {
            return $V;
        }
        print "{$V}";
        $Time = microtime(true) - $uTime;
        // convert usecs to secs
        $text = _("Elapsed time: %.2f seconds");
        printf("<small>{$text}</small>", $Time);
        /**/
        if ($Cached) {
            $text = _("cached");
            $text1 = _("Update");
            echo " <i>{$text}</i>   <a href=\"{$_SERVER['REQUEST_URI']}&updcache=1\"> {$text1} </a>";
        } else {
            //  Cache Report if this took longer than 1/2 second
            if ($Time > 0.5) {
                ReportCachePut($CacheKey, $V);
            }
        }
        /**/
        return;
    }
Example #2
0
 /**
  * \brief Given an $Uploadtree_pk, display: \n
  * (1) The histogram for the directory BY bucket. \n
  * (2) The file listing for the directory.
  */
 function ShowUploadHist($Uploadtree_pk, $Uri)
 {
     global $PG_CONN;
     $VF = "";
     // return values for file listing
     $VLic = "";
     // return values for output
     $V = "";
     // total return value
     $UniqueTagArray = array();
     global $Plugins;
     $ModLicView =& $Plugins[plugin_find_id("view-license")];
     /*******  Get Bucket names and counts  ******/
     /* Find lft and rgt bounds for this $Uploadtree_pk  */
     $sql = "SELECT lft,rgt,upload_fk FROM {$this->uploadtree_tablename}\n              WHERE uploadtree_pk = {$Uploadtree_pk}";
     $result = pg_query($PG_CONN, $sql);
     DBCheckResult($result, $sql, __FILE__, __LINE__);
     if (pg_num_rows($result) < 1) {
         pg_free_result($result);
         $text = _("Invalid URL, nonexistant item");
         return "<h2>{$text} {$Uploadtree_pk}</h2>";
     }
     $row = pg_fetch_assoc($result);
     $lft = $row["lft"];
     $rgt = $row["rgt"];
     $upload_pk = $row["upload_fk"];
     pg_free_result($result);
     /* Get the ars_pk of the scan to display, also the select list  */
     $ars_pk = GetArrayVal("ars", $_GET);
     $BucketSelect = SelectBucketDataset($upload_pk, $ars_pk, "selectbdata", "onchange=\"addArsGo('newds','selectbdata');\"");
     if ($ars_pk == 0) {
         /* No bucket data for this upload */
         return $BucketSelect;
     }
     /* Get scan keys */
     $sql = "select agent_fk, nomosagent_fk, bucketpool_fk from bucket_ars where ars_pk={$ars_pk}";
     $result = pg_query($PG_CONN, $sql);
     DBCheckResult($result, $sql, __FILE__, __LINE__);
     $row = pg_fetch_assoc($result);
     $bucketagent_pk = $row["agent_fk"];
     $nomosagent_pk = $row["nomosagent_fk"];
     $bucketpool_pk = $row["bucketpool_fk"];
     pg_free_result($result);
     /* Create bucketDefArray as individual query this is MUCH faster
         than incorporating it with a join in the following queries.
        */
     $bucketDefArray = initBucketDefArray($bucketpool_pk);
     /*select all the buckets for entire tree for this bucketpool */
     $sql = "SELECT distinct(bucket_fk) as bucket_pk,\n                   count(bucket_fk) as bucketcount, bucket_reportorder\n              from bucket_file, bucket_def,\n                  (SELECT distinct(pfile_fk) as PF from {$this->uploadtree_tablename} \n                     where upload_fk={$upload_pk} \n                       and ((ufile_mode & (1<<28))=0)\n                       and ((ufile_mode & (1<<29))=0)\n                       and {$this->uploadtree_tablename}.lft BETWEEN {$lft} and {$rgt}) as SS\n              where PF=pfile_fk and agent_fk={$bucketagent_pk} \n                    and bucket_file.nomosagent_fk={$nomosagent_pk}\n                    and bucket_pk=bucket_fk\n                    and bucketpool_fk={$bucketpool_pk}\n              group by bucket_fk,bucket_reportorder\n              order by bucket_reportorder asc";
     $result = pg_query($PG_CONN, $sql);
     DBCheckResult($result, $sql, __FILE__, __LINE__);
     $historows = pg_fetch_all($result);
     pg_free_result($result);
     /* Show dataset list */
     if (!empty($BucketSelect)) {
         $action = Traceback_uri() . "?mod=bucketbrowser&upload={$upload_pk}&item={$Uploadtree_pk}";
         $VLic .= "<script type='text/javascript'>\nfunction addArsGo(formid, selectid ) \n{\nvar selectobj = document.getElementById(selectid);\nvar ars_pk = selectobj.options[selectobj.selectedIndex].value;\ndocument.getElementById(formid).action='{$action}'+'&ars='+ars_pk;\ndocument.getElementById(formid).submit();\nreturn;\n}\n</script>";
         /* form to select new dataset (ars_pk) */
         $VLic .= "<form action='{$action}' id='newds' method='POST'>\n";
         $VLic .= $BucketSelect;
         $VLic .= "</form>";
     }
     $sql = "select bucketpool_name, version from bucketpool where bucketpool_pk={$bucketpool_pk}";
     $result = pg_query($PG_CONN, $sql);
     DBCheckResult($result, $sql, __FILE__, __LINE__);
     $row = pg_fetch_assoc($result);
     $bucketpool_name = $row['bucketpool_name'];
     $bucketpool_version = $row['version'];
     pg_free_result($result);
     /* Write bucket histogram to $VLic  */
     $bucketcount = 0;
     $Uniquebucketcount = 0;
     $NoLicFound = 0;
     if (is_array($historows)) {
         $text = _("Bucket Pool");
         $VLic .= "{$text}: {$bucketpool_name} v{$bucketpool_version}<br>";
         $VLic .= "<table border=1 width='100%'>\n";
         $text = _("Count");
         $VLic .= "<tr><th width='10%'>{$text}</th>";
         $text = _("Files");
         $VLic .= "<th width='10%'>{$text}</th>";
         $text = _("Bucket");
         $VLic .= "<th align='left'>{$text}</th></tr>\n";
         foreach ($historows as $bucketrow) {
             $Uniquebucketcount++;
             $bucket_pk = $bucketrow['bucket_pk'];
             $bucketcount = $bucketrow['bucketcount'];
             $bucket_name = $bucketDefArray[$bucket_pk]['bucket_name'];
             $bucket_color = $bucketDefArray[$bucket_pk]['bucket_color'];
             /*  Count  */
             $VLic .= "<tr><td align='right' style='background-color:{$bucket_color}'>{$bucketcount}</td>";
             /*  Show  */
             $VLic .= "<td align='center'><a href='";
             $VLic .= Traceback_uri();
             $text = _("Show");
             $VLic .= "?mod=list_bucket_files&bapk={$bucketagent_pk}&item={$Uploadtree_pk}&bpk={$bucket_pk}&bp={$bucketpool_pk}&napk={$nomosagent_pk}" . "'>{$text}</a></td>";
             /*  Bucket name  */
             $VLic .= "<td align='left'>";
             $VLic .= "<a id='{$bucket_pk}' onclick='FileColor_Get(\"" . Traceback_uri() . "?mod=ajax_filebucket&bapk={$bucketagent_pk}&item={$Uploadtree_pk}&bucket_pk={$bucket_pk}\")'";
             $VLic .= ">{$bucket_name} </a>";
             /* Allow users to tag an entire bucket */
             /* Future, maybe v 2.1 
                     $TagHref = "<a href=" . Traceback_uri() . "?mod=bucketbrowser&upload=$upload_pk&item=$Uploadtree_pk&bapk=$bucketagent_pk&bpk=$bucket_pk&bp=$bucketpool_pk&napk=$nomosagent_pk&tagbucket=1>Tag</a>";
                     $VLic .= " [$TagHref]";
             */
             $VLic .= "</td>";
             $VLic .= "</tr>\n";
             //      if ($row['bucket_name'] == "No Buckets Found") $NoLicFound =  $row['bucketcount'];
         }
         $VLic .= "</table>\n";
         $VLic .= "<p>\n";
         $text = _("Unique buckets");
         $VLic .= "{$text}: {$Uniquebucketcount}<br>\n";
     }
     /*******    File Listing     ************/
     /* Get ALL the items under this Uploadtree_pk */
     $Children = GetNonArtifactChildren($Uploadtree_pk, $this->uploadtree_tablename);
     if (count($Children) == 0) {
         $sql = "SELECT * FROM {$this->uploadtree_tablename} WHERE uploadtree_pk = '{$Uploadtree_pk}'";
         $result = pg_query($PG_CONN, $sql);
         DBCheckResult($result, $sql, __FILE__, __LINE__);
         $row = pg_fetch_assoc($result);
         pg_free_result($result);
         if (empty($row) || IsDir($row['ufile_mode'])) {
             return;
         }
         // $ModLicView = &$Plugins[plugin_find_id("view-license")];
         // return($ModLicView->Output() );
     }
     $ChildCount = 0;
     $Childbucketcount = 0;
     /* Countd disabled until we know we need them
         $NumSrcPackages = 0;
        $NumBinPackages = 0;
        $NumBinNoSrcPackages = 0;
        */
     /* get mimetypes for packages */
     $MimetypeArray = GetPkgMimetypes();
     $VF .= "<table border=0>";
     foreach ($Children as $C) {
         if (empty($C)) {
             continue;
         }
         /* update package counts */
         /* This is an expensive count.  Comment out until we know we really need it
             IncrSrcBinCounts($C, $MimetypeArray, $NumSrcPackages, $NumBinPackages, $NumBinNoSrcPackages);
            */
         $IsDir = Isdir($C['ufile_mode']);
         $IsContainer = Iscontainer($C['ufile_mode']);
         /* Determine the hyperlink for non-containers to view-license  */
         if (!empty($C['pfile_fk']) && !empty($ModLicView)) {
             $LinkUri = Traceback_uri();
             $LinkUri .= "?mod=view-license&napk={$nomosagent_pk}&bapk={$bucketagent_pk}&upload={$upload_pk}&item={$C['uploadtree_pk']}";
         } else {
             $LinkUri = NULL;
         }
         /* Determine link for containers */
         if (Iscontainer($C['ufile_mode'])) {
             $uploadtree_pk = DirGetNonArtifact($C['uploadtree_pk'], $this->uploadtree_tablename);
             $tmpuri = "?mod=" . $this->Name . Traceback_parm_keep(array("upload", "folder", "ars"));
             $LicUri = "{$tmpuri}&item=" . $uploadtree_pk;
         } else {
             $LicUri = NULL;
         }
         /* Populate the output ($VF) - file list */
         /* id of each element is its uploadtree_pk */
         $VF .= "<tr><td id='{$C['uploadtree_pk']}' align='left'>";
         $HasHref = 0;
         $HasBold = 0;
         if ($IsContainer) {
             $VF .= "<a href='{$LicUri}'>";
             $HasHref = 1;
             $VF .= "<b>";
             $HasBold = 1;
         } else {
             if (!empty($LinkUri)) {
                 $VF .= "<a href='{$LinkUri}'>";
                 $HasHref = 1;
             }
         }
         $VF .= $C['ufile_name'];
         if ($IsDir) {
             $VF .= "/";
         }
         if ($HasBold) {
             $VF .= "</b>";
         }
         if ($HasHref) {
             $VF .= "</a>";
         }
         /* print buckets */
         $VF .= "<br>";
         $VF .= "<span style='position:relative;left:1em'>";
         /* get color coded string of bucket names */
         $VF .= GetFileBuckets_string($nomosagent_pk, $bucketagent_pk, $C['uploadtree_pk'], $bucketDefArray, ",", True);
         $VF .= "</span>";
         $VF .= "</td><td valign='top'>";
         /* display item links */
         $VF .= FileListLinks($C['upload_fk'], $C['uploadtree_pk'], $nomosagent_pk, $C['pfile_fk'], True, $UniqueTagArray, $this->uploadtree_tablename);
         $VF .= "</td>";
         $VF .= "</tr>\n";
         $ChildCount++;
     }
     $VF .= "</table>\n";
     $V .= ActiveHTTPscript("FileColor");
     /* Add javascript for color highlighting
         This is the response script needed by ActiveHTTPscript
        responseText is bucket_pk',' followed by a comma seperated list of uploadtree_pk's */
     $script = "\n      <script type=\"text/javascript\" charset=\"utf-8\">\n        var Lastutpks='';   /* save last list of uploadtree_pk's */\n        var Lastbupk='';   /* save last bucket_pk */\n        var color = '#4bfe78';\n        function FileColor_Reply()\n        {\n          if ((FileColor.readyState==4) && (FileColor.status==200))\n          {\n            /* remove previous highlighting */\n            var numpks = Lastutpks.length;\n            if (numpks > 0) document.getElementById(Lastbupk).style.backgroundColor='white';\n            while (numpks)\n            {\n              document.getElementById(Lastutpks[--numpks]).style.backgroundColor='white';\n            }\n\n            utpklist = FileColor.responseText.split(',');\n            Lastbupk = utpklist.shift();\n            numpks = utpklist.length;\n            Lastutpks = utpklist;\n\n            /* apply new highlighting */\n            elt = document.getElementById(Lastbupk);\n            if (elt != null) elt.style.backgroundColor=color;\n            while (numpks)\n            {\n              document.getElementById(utpklist[--numpks]).style.backgroundColor=color;\n            }\n          }\n          return;\n        }\n      </script>\n    ";
     $V .= $script;
     /* Display source, binary, and binary missing source package counts */
     /* Counts disabled above until we know we need these
         $VLic .= "<ul>";
        $text = _("source packages");
        $VLic .= "<li> $NumSrcPackages $text";
        $text = _("binary packages");
        $VLic .= "<li> $NumBinPackages $text";
        $text = _("binary packages with no source package");
        $VLic .= "<li> $NumBinNoSrcPackages $text";
        $VLic .= "</ul>";
        */
     /* Combine VF and VLic */
     $V .= "<table border=0 width='100%'>\n";
     $V .= "<tr><td valign='top' width='50%'>{$VLic}</td><td valign='top'>{$VF}</td></tr>\n";
     $V .= "</table>\n";
     $V .= "<hr />\n";
     return $V;
 }
Example #3
0
    public function htmlContent()
    {
        $filter = GetParm("filter", PARM_STRING);
        if (empty($filter)) {
            $filter = "none";
        }
        $FreezeCol = GetParm("freeze", PARM_INTEGER);
        // which column to freeze?  1 or 2 or null
        $ClickedCol = GetParm("col", PARM_INTEGER);
        // which column was clicked on?  1 or 2 or null
        $ItemFrozen = GetParm("itemf", PARM_INTEGER);
        // frozen item or null
        $in_uploadtree_pk1 = GetParm("item1", PARM_INTEGER);
        $in_uploadtree_pk2 = GetParm("item2", PARM_INTEGER);
        if (empty($in_uploadtree_pk1) || empty($in_uploadtree_pk2)) {
            Fatal("Bad input parameters.  Both item1 and item2 must be specified.", __FILE__, __LINE__);
        }
        /* If you click on a item in a frozen column, then you are a dope so ignore $ItemFrozen */
        if ($FreezeCol == $ClickedCol) {
            $ItemFrozen = 0;
            $FreezeCol = 0;
        }
        /* @var $uploadDao UploadDao */
        $uploadDao = $GLOBALS['container']->get('dao.upload');
        /* Check item1 upload permission */
        $Item1Row = $uploadDao->getUploadEntry($in_uploadtree_pk1);
        if (!$uploadDao->isAccessible($Item1Row['upload_fk'], Auth::getGroupId())) {
            $text = _("Permission Denied");
            return "<h2>{$text} item 1</h2>";
        }
        /* Check item2 upload permission */
        $Item2Row = $uploadDao->getUploadEntry($in_uploadtree_pk2);
        if (!$uploadDao->isAccessible($Item2Row['upload_fk'], Auth::getGroupId())) {
            $text = _("Permission Denied");
            return "<h2>{$text} item 2</h2>";
        }
        $uploadtree_pk1 = $in_uploadtree_pk1;
        $uploadtree_pk2 = $in_uploadtree_pk2;
        if ($FreezeCol == 1) {
            $uploadtree_pk1 = $ItemFrozen;
        } else {
            if ($FreezeCol == 2) {
                $uploadtree_pk2 = $ItemFrozen;
            }
        }
        $newURL = Traceback_dir() . "?mod=" . $this->Name . "&item1={$uploadtree_pk1}&item2={$uploadtree_pk2}";
        if (!empty($filter)) {
            $newURL .= "&filter={$filter}";
        }
        // rewrite page with new uploadtree_pks */
        if ($uploadtree_pk1 != $in_uploadtree_pk1 || $uploadtree_pk2 != $in_uploadtree_pk2) {
            print <<<JSOUT
<script type="text/javascript">
  window.location.assign('{$newURL}');
</script>
JSOUT;
        }
        $TreeInfo1 = $this->GetTreeInfo($uploadtree_pk1);
        $TreeInfo2 = $this->GetTreeInfo($uploadtree_pk2);
        $ErrText = _("No license data for tree %d.  Use Jobs > Agents to schedule a license scan.");
        $ErrMsg = '';
        if ($TreeInfo1['agent_pk'] == 0) {
            $ErrMsg = sprintf($ErrText, 1);
        } else {
            if ($TreeInfo2['agent_pk'] == 0) {
                $ErrMsg = sprintf($ErrText, 2);
            } else {
                $BucketDefArray1 = initBucketDefArray($TreeInfo1['bucketpool_pk']);
                $BucketDefArray2 = initBucketDefArray($TreeInfo2['bucketpool_pk']);
                $BucketDefArray = $BucketDefArray1 + $BucketDefArray2;
                /* Get list of children */
                $Children1 = GetNonArtifactChildren($uploadtree_pk1);
                $Children2 = GetNonArtifactChildren($uploadtree_pk2);
                /* Add fuzzyname to children */
                FuzzyName($Children1);
                // add fuzzyname to children
                FuzzyName($Children2);
                // add fuzzyname to children
                /* add element licstr to children */
                $this->AddBucketStr($TreeInfo1, $Children1, $BucketDefArray);
                $this->AddBucketStr($TreeInfo2, $Children2, $BucketDefArray);
                /* Master array of children, aligned.   */
                $Master = MakeMaster($Children1, $Children2);
                /* add linkurl to children */
                FileList($Master, $TreeInfo1['agent_pk'], $TreeInfo2['agent_pk'], $filter, $this, $uploadtree_pk1, $uploadtree_pk2);
                /* Apply filter */
                $this->FilterChildren($filter, $Master, $BucketDefArray);
            }
        }
        if ($this->OutputType == 'HTML') {
            if ($ErrMsg) {
                $V .= $ErrMsg;
            } else {
                $V .= $this->HTMLout($Master, $uploadtree_pk1, $uploadtree_pk2, $in_uploadtree_pk1, $in_uploadtree_pk2, $filter, $TreeInfo1, $TreeInfo2, $BucketDefArray);
            }
        }
        return $V;
    }