function associateClusters($req)
{
    global $CONFIG;
    set_time_limit(0);
    //this avoids timeouts
    require_once $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/config.php";
    require_once $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/classes.php";
    $outputfile = $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/output.log";
    file_put_contents($outputfile, "Starting association clusters (this might require some time)...\n", FILE_APPEND);
    $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"));
    reset_association($clusters_metadata);
    reset_association($clusters_uses);
    reset_association($clusters_tags);
    reset_association($clusters_replinks);
    //associate metadata clusters to others
    associate($clusters_metadata, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_metadata, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_metadata, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_metadata, $clusters_replinks, "replinks", $minimum_association_threshold);
    associate($clusters_uses, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_uses, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_uses, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_uses, $clusters_replinks, "replinks", $minimum_association_threshold);
    associate($clusters_tags, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_tags, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_tags, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_tags, $clusters_replinks, "replinks", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_replinks, "replinks", $minimum_association_threshold);
    file_put_contents($IOdir . 'clusters_metadata', serialize($clusters_metadata));
    if (PHP_OS == "Linux" && posix_getuid() == fileowner($IOdir . 'clusters_metadata')) {
        chmod($IOdir . 'clusters_metadata', 0666);
    }
    //set rw permissions for everybody for this file
    file_put_contents($IOdir . 'clusters_uses', serialize($clusters_uses));
    if (PHP_OS == "Linux" && posix_getuid() == fileowner($IOdir . 'clusters_uses')) {
        chmod($IOdir . 'clusters_uses', 0666);
    }
    //set rw permissions for everybody for this file
    file_put_contents($IOdir . 'clusters_tags', serialize($clusters_tags));
    if (PHP_OS == "Linux" && posix_getuid() == fileowner($IOdir . 'clusters_tags')) {
        chmod($IOdir . 'clusters_tags', 0666);
    }
    //set rw permissions for everybody for this file
    file_put_contents($IOdir . 'clusters_replinks', serialize($clusters_replinks));
    if (PHP_OS == "Linux" && posix_getuid() == fileowner($IOdir . 'clusters_replinks')) {
        chmod($IOdir . 'clusters_replinks', 0666);
    }
    //set rw permissions for everybody for this file
    file_put_contents($outputfile, "\nClusters associated\n", FILE_APPEND);
    file_put_contents($outputfile, "\nClassification finished\n\n", FILE_APPEND);
    return "OK";
}
function associate_clusters($array_clusters)
{
    global $minimum_association_threshold;
    $clusters_metadata = $array_clusters["metadata"];
    $clusters_uses = $array_clusters["uses"];
    $clusters_tags = $array_clusters["tags"];
    $clusters_replinks = $array_clusters["replinks"];
    reset_association($clusters_metadata);
    reset_association($clusters_uses);
    reset_association($clusters_tags);
    reset_association($clusters_replinks);
    //associate metadata clusters to others
    associate($clusters_metadata, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_metadata, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_metadata, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_metadata, $clusters_replinks, "replinks", $minimum_association_threshold);
    associate($clusters_uses, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_uses, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_uses, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_uses, $clusters_replinks, "replinks", $minimum_association_threshold);
    associate($clusters_tags, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_tags, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_tags, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_tags, $clusters_replinks, "replinks", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_metadata, "metadata", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_uses, "uses", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_tags, "tags", $minimum_association_threshold);
    associate($clusters_replinks, $clusters_replinks, "replinks", $minimum_association_threshold);
    $array_clusters["metadata"] = $clusters_metadata;
    unset($clusters_metadata);
    $array_clusters["uses"] = $clusters_uses;
    unset($clusters_uses);
    $array_clusters["tags"] = $clusters_tags;
    unset($clusters_tags);
    $array_clusters["replinks"] = $clusters_replinks;
    unset($clusters_replinks);
    return $array_clusters;
}