echo "starting query on database '{$database}'........<br>\n";
    //global $debug; $debug = true;
    $res = _query($database, $query);
    if ($res) {
        echo "success.<br>\n";
    } else {
        die("query failure ({$ERROR})<br>\n");
    }
    if (@$CONFIG["USE_AUTH"]) {
        global $OLD;
        if ($OLD) {
            echo "Keeping profiles.<br>\n";
        } else {
            echo "creating bootstrap data for profiles / languages / users ........<br>\n";
            create_profiles();
            create_languages();
            create_users();
            echo "done.<br>\n";
        }
    }
    //$debug = true;
    foreach ($INITDATA as $table => $data) {
        echo "INIT: writing \$INITDATA['{$table}']......<br>\n";
        create_data($table, $INITDATA[$table]);
    }
    echo "ready.<br>\n";
}
?>
</body>
</html>
 function create_database()
 {
     $db_host = isset($_POST['db_host']) ? trim($_POST['db_host']) : '';
     $db_port = isset($_POST['db_port']) ? trim($_POST['db_port']) : '';
     $db_user = isset($_POST['db_user']) ? trim($_POST['db_user']) : '';
     $db_pass = isset($_POST['db_pass']) ? trim($_POST['db_pass']) : '';
     $db_name = isset($_POST['db_name']) ? trim($_POST['db_name']) : '';
     $result = create_data($db_host, $db_port, $db_user, $db_pass, $db_name);
     if ($result === false) {
         echo "create_database erro";
     } else {
         echo 'OK';
     }
     exit;
 }
function step1($req)
{
    ini_set('memory_limit', '500M');
    set_time_limit(0);
    //this avoids timeouts
    global $CONFIG;
    require_once $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/classes.php";
    include $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/config.php";
    $lr = unserialize(file_get_contents($IOdir . "lr"));
    $ent = $_SESSION["ent"];
    $clusters_metadata = unserialize(file_get_contents($IOdir . 'clusters_metadata'));
    $clusters_uses = unserialize(file_get_contents($IOdir . 'clusters_uses'));
    $clusters_tags = unserialize(file_get_contents($IOdir . 'clusters_tags'));
    $clusters_replinks = unserialize(file_get_contents($IOdir . 'clusters_replinks'));
    if ($dd_crosscheck == 1) {
        $metadata_dd = unserialize(file_get_contents($IOdir . 'metadata_dd'));
        $uses_dd = unserialize(file_get_contents($IOdir . 'uses_dd'));
        $tags_dd = unserialize(file_get_contents($IOdir . 'tags_dd'));
        $replinks_dd = unserialize(file_get_contents($IOdir . 'replinks_dd'));
    }
    $selected_ent = get_selected_entities($ent);
    //it takes the checkbox selected documents
    //I look for the clusters (metadata, uses, tags, replinks) which contain the document
    $clusters_matching_metadata = array();
    $clusters_matching_uses = array();
    $clusters_matching_tags = array();
    $clusters_matching_replinks = array();
    foreach ($selected_ent as $key => $type) {
        foreach ($clusters_metadata as $cluster_obj) {
            if ($cluster_obj->belongs($key) && count($cluster_obj->array_docs) > 1) {
                $clusters_matching_metadata[] = array("cluster" => $cluster_obj, "relevance" => 0);
                //all the clusters containing the selected documents; we will use relevance later
            }
        }
        foreach ($clusters_uses as $cluster_obj) {
            if ($cluster_obj->belongs($key) && count($cluster_obj->array_docs) > 1) {
                $clusters_matching_uses[] = array("cluster" => $cluster_obj, "relevance" => 0);
                //all the clusters containing the selected documents; we will use relevance later
            }
        }
        foreach ($clusters_tags as $cluster_obj) {
            if ($cluster_obj->belongs($key) && count($cluster_obj->array_docs) > 1) {
                $clusters_matching_tags[] = array("cluster" => $cluster_obj, "relevance" => 0);
                //all the clusters containing the selected documents; we will use relevance later
            }
        }
        foreach ($clusters_replinks as $cluster_obj) {
            if ($cluster_obj->belongs($key) && count($cluster_obj->array_docs) > 1) {
                $clusters_matching_replinks[] = array("cluster" => $cluster_obj, "relevance" => 0);
                //all the clusters containing the selected documents; we will use relevance later
            }
        }
    }
    $clusters_matching_metadata = arrayUnique($clusters_matching_metadata);
    $clusters_matching_uses = arrayUnique($clusters_matching_uses);
    $clusters_matching_tags = arrayUnique($clusters_matching_tags);
    $clusters_matching_replinks = arrayUnique($clusters_matching_replinks);
    /* calculate relevance for each cluster returned in the previous step: it's the relevance of the cluster to the search done
     *  relevance of the cluster is given by the number of $selected_ent contained
     */
    foreach ($selected_ent as $key => $type) {
        foreach ($clusters_matching_metadata as $num => $cluster) {
            if ($cluster["cluster"]->belongs($key)) {
                $clusters_matching_metadata[$num]["relevance"]++;
            }
        }
        foreach ($clusters_matching_uses as $num => $cluster) {
            if ($cluster["cluster"]->belongs($key)) {
                $clusters_matching_uses[$num]["relevance"]++;
            }
        }
        foreach ($clusters_matching_tags as $num => $cluster) {
            if ($cluster["cluster"]->belongs($key)) {
                $clusters_matching_tags[$num]["relevance"]++;
            }
        }
        foreach ($clusters_matching_replinks as $num => $cluster) {
            if ($cluster["cluster"]->belongs($key)) {
                $clusters_matching_replinks[$num]["relevance"]++;
            }
        }
    }
    //sort the clusters by their relevance in descending order
    usort($clusters_matching_metadata, "compare_relevance");
    usort($clusters_matching_uses, "compare_relevance");
    usort($clusters_matching_tags, "compare_relevance");
    usort($clusters_matching_replinks, "compare_relevance");
    //it creates, for each type (metadata, uses, tags, replinks), a list of the documents contained in the clusters. Each document has a relevance, in order to visualize them by relevance descending order
    //the relevance is calculated this way: relevance of the cluster multiplied by a score of the document.
    //this score, if we do a crosscheck with the doc-doc matrix, is given by that matrix, otherwise is the inherence (for the clusters given by the YACA algorithm) or 1 (for the other clusters)
    $list_documents_metadata = array();
    foreach ($clusters_matching_metadata as $num => $cluster) {
        foreach ($cluster["cluster"]->array_docs as $doc_block) {
            if (is_array($doc_block)) {
                $guid = $doc_block["guid"];
            } else {
                $guid = $doc_block;
            }
            if (array_key_exists($guid, $selected_ent)) {
                continue;
            }
            if (get_type($guid) != "resource") {
                continue;
            }
            //don't consider eventual documents that are not part of the resources, for example documents that were present and so part of the classification, but that after have been deleted
            if (!array_key_exists($guid, $list_documents_metadata)) {
                if ($dd_crosscheck == 1) {
                    $max = 0;
                    foreach ($selected_ent as $key => $type) {
                        if ($metadata_dd[$guid][$key] > $max) {
                            $max = $metadata_dd[$guid][$key];
                        }
                    }
                    $list_documents_metadata[$guid]["relevance"] = ($max + 0.05) * $cluster["relevance"];
                    //we add 0.05 to avoid having a 0 value
                } elseif (is_array($doc_block)) {
                    $list_documents_metadata[$guid]["relevance"] = $doc_block["inherence"] * $cluster["relevance"];
                } else {
                    $list_documents_metadata[$guid]["relevance"] = $cluster["relevance"];
                }
            }
        }
    }
    $list_documents_uses = array();
    foreach ($clusters_matching_uses as $num => $cluster) {
        foreach ($cluster["cluster"]->array_docs as $doc_block) {
            if (is_array($doc_block)) {
                $guid = $doc_block["guid"];
            } else {
                $guid = $doc_block;
            }
            if (array_key_exists($guid, $selected_ent)) {
                continue;
            }
            if (get_type($guid) != "resource") {
                continue;
            }
            //don't consider eventual documents that are not part of the resources, for example documents that were present and so part of the classification, but that after have been deleted
            if (!array_key_exists($guid, $list_documents_uses)) {
                if ($dd_crosscheck == 1) {
                    $max = 0;
                    foreach ($selected_ent as $key => $type) {
                        if ($uses_dd[$guid][$key] > $max) {
                            $max = $uses_dd[$guid][$key];
                        }
                    }
                    $list_documents_uses[$guid]["relevance"] = ($max + 0.05) * $cluster["relevance"];
                    //we add 0.05 to avoid having a 0 value
                } elseif (is_array($doc_block)) {
                    $list_documents_uses[$guid]["relevance"] = $doc_block["inherence"] * $cluster["relevance"];
                } else {
                    $list_documents_uses[$guid]["relevance"] = $cluster["relevance"];
                }
            }
        }
    }
    $list_documents_tags = array();
    foreach ($clusters_matching_tags as $num => $cluster) {
        foreach ($cluster["cluster"]->array_docs as $doc_block) {
            if (is_array($doc_block)) {
                $guid = $doc_block["guid"];
            } else {
                $guid = $doc_block;
            }
            if (array_key_exists($guid, $selected_ent)) {
                continue;
            }
            if (get_type($guid) != "resource") {
                continue;
            }
            //don't consider eventual documents that are not part of the resources, for example documents that were present and so part of the classification, but that after have been deleted
            if (!array_key_exists($guid, $list_documents_tags)) {
                if ($dd_crosscheck == 1) {
                    $max = 0;
                    foreach ($selected_ent as $key => $type) {
                        if ($tags_dd[$guid][$key] > $max) {
                            $max = $tags_dd[$guid][$key];
                        }
                    }
                    $list_documents_tags[$guid]["relevance"] = ($max + 0.05) * $cluster["relevance"];
                    //we add 0.05 to avoid having a 0 value
                } elseif (is_array($doc_block)) {
                    $list_documents_tags[$guid]["relevance"] = $doc_block["inherence"] * $cluster["relevance"];
                } else {
                    $list_documents_tags[$guid]["relevance"] = $cluster["relevance"];
                }
            }
        }
    }
    $list_documents_replinks = array();
    foreach ($clusters_matching_replinks as $num => $cluster) {
        foreach ($cluster["cluster"]->array_docs as $doc_block) {
            if (is_array($doc_block)) {
                $guid = $doc_block["guid"];
            } else {
                $guid = $doc_block;
            }
            if (array_key_exists($guid, $selected_ent)) {
                continue;
            }
            if (get_type($guid) != "resource") {
                continue;
            }
            //don't consider eventual documents that are not part of the resources, for example documents that were present and so part of the classification, but that after have been deleted
            if (!array_key_exists($guid, $list_documents_replinks)) {
                if ($dd_crosscheck == 1) {
                    $max = 0;
                    foreach ($selected_ent as $key => $type) {
                        if ($replinks_dd[$guid][$key] > $max) {
                            $max = $replinks_dd[$guid][$key];
                        }
                    }
                    $list_documents_replinks[$guid]["relevance"] = ($max + 0.05) * $cluster["relevance"];
                    //we add 0.05 to avoid having a 0 value
                } elseif (is_array($doc_block)) {
                    $list_documents_replinks[$guid]["relevance"] = $doc_block["inherence"] * $cluster["relevance"];
                } else {
                    $list_documents_replinks[$guid]["relevance"] = $cluster["relevance"];
                }
            }
        }
    }
    //sort the clusters by relevance and then by name
    uasort($list_documents_metadata, "compare_relevance_name");
    uasort($list_documents_uses, "compare_relevance_name");
    uasort($list_documents_tags, "compare_relevance_name");
    uasort($list_documents_replinks, "compare_relevance_name");
    $response = array();
    $response['metadata'] = create_data($list_documents_metadata, $lr, $selected_ent);
    //return the documents contained in the clusters
    $response['uses'] = create_data($list_documents_uses, $lr, $selected_ent);
    //return the documents contained in the clusters
    $response['tags'] = create_data($list_documents_tags, $lr, $selected_ent);
    //return the documents contained in the clusters
    $response['replinks'] = create_data($list_documents_replinks, $lr, $selected_ent);
    //return the documents contained in the clusters
    //Now I get positive features from the clusters
    $response['feat_metadata'] = array();
    foreach ($clusters_matching_metadata as $c) {
        if (!empty($c["cluster"]->commonFeatures)) {
            $response['feat_metadata'] = array_merge($response['feat_metadata'], $c["cluster"]->commonFeatures);
        }
    }
    $response['feat_metadata'] = array_unique($response['feat_metadata']);
    $response['feat_tags'] = array();
    foreach ($clusters_matching_tags as $c) {
        if (!empty($c["cluster"]->commonFeatures)) {
            $response['feat_tags'] = array_merge($response['feat_tags'], $c["cluster"]->commonFeatures);
        }
    }
    $response['feat_tags'] = array_unique($response['feat_tags']);
    $response['feat_uses'] = array();
    foreach ($clusters_matching_uses as $c) {
        if (!empty($c["cluster"]->commonFeatures)) {
            $response['feat_uses'] = array_merge($response['feat_uses'], $c["cluster"]->commonFeatures);
        }
    }
    $response['feat_uses'] = array_unique($response['feat_uses']);
    if ($req['save_cluster']) {
        $response['cluster'] = array();
        $response['cluster']['metadata'] = $clusters_matching_metadata;
        $response['cluster']['uses'] = $clusters_matching_uses;
        $response['cluster']['tags'] = $clusters_matching_tags;
        $response['cluster']['replinks'] = $clusters_matching_replinks;
    }
    return $response;
}