function docdocTags($req)
{
    global $CONFIG;
    set_time_limit(0);
    //this avoids timeouts
    require_once $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/config.php";
    $outputfile = $CONFIG->path . "mod/profile_manager/views/default/profile_manager/members/output.log";
    file_put_contents($outputfile, "Starting creating TAGS doc-doc matrix...\n", FILE_APPEND);
    $tags_dt = unserialize(file_get_contents($IOdir . "tags_dt"));
    $tags_dd = array();
    if ($req["dd_useold"] == "true") {
        if (file_exists($IOdir . "old_tags_dd") && file_exists($IOdir . "old_tags_dt")) {
            file_put_contents($outputfile, "I'm using, where possible, the old TAGS Doc-doc matrix...\n", FILE_APPEND);
            $old_tags_dd = unserialize(file_get_contents($IOdir . "old_tags_dd"));
            $old_tags_dt = unserialize(file_get_contents($IOdir . "old_tags_dt"));
            $tags_dd = toDocDocTags($tags_dt, $old_tags_dd, $old_tags_dt);
        } else {
            $tags_dd = toDocDocTags($tags_dt);
        }
    } else {
        $tags_dd = toDocDocTags($tags_dt);
    }
    //right now we have only half of the values (triangular matrix) but, since this must be a symmetric matrix, the other half of the values can be obtained from the present half
    $i = 0;
    foreach ($tags_dd as $guid => $row) {
        $j = 0;
        foreach ($tags_dd as $guid2 => $row2) {
            if ($i > $j) {
                $tags_dd[$guid][$guid2] = $tags_dd[$guid2][$guid];
            }
            $j++;
        }
        $i++;
    }
    krsort($tags_dd);
    foreach ($tags_dd as $guid => $row) {
        krsort($tags_dd[$guid]);
    }
    file_put_contents($IOdir . "tags_dd", serialize($tags_dd));
    if (PHP_OS == "Linux") {
        chmod($IOdir . "tags_dd", 0666);
    }
    //set rw permissions for everybody for this file
    file_put_contents($outputfile, "TAGS doc-doc matrix created\n\n", FILE_APPEND);
    return "OK";
}
        $old_tags_dd = unserialize(file_get_contents($IOdir . "old_tags_dd"));
        $old_tags_dt = unserialize(file_get_contents($IOdir . "old_tags_dt"));
        $tags_dd = toDocDocTags($tags_dt, $M, $N, $old_tags_dd, $old_tags_dt);
    } else {
        $tags_dd = toDocDocTags($tags_dt, $M, $N);
    }
    echo 'TAGS doc-doc matrix created' . "\n";
} else {
    echo 'Starting creating METADATA Doc-doc matrix...' . "\n";
    $metadata_dd = toDocDocMetadataUses($metadata_dt, $M, $N);
    echo 'METADATA doc-doc matrix created' . "\n";
    echo 'Starting creating USES Doc-doc matrix...' . "\n";
    $uses_dd = toDocDocMetadataUses($uses_dt, $M, $N);
    echo 'USES doc-doc matrix created' . "\n";
    echo 'Starting creating TAGS Doc-doc matrix...' . "\n";
    $tags_dd = toDocDocTags($tags_dt, $M, $N);
    echo 'TAGS doc-doc matrix created' . "\n";
}
file_put_contents($IOdir . "metadata_dd" . $M, serialize($metadata_dd));
if (PHP_OS == "Linux" && getmyuid() == fileowner($IOdir . "metadata_dd" . $M)) {
    chmod($IOdir . "metadata_dd" . $M, 0666);
}
//set all the permissions for everybody for this file
file_put_contents($IOdir . "uses_dd" . $M, serialize($uses_dd));
if (PHP_OS == "Linux" && getmyuid() == fileowner($IOdir . "uses_dd" . $M)) {
    chmod($IOdir . "uses_dd" . $M, 0666);
}
//set all the permissions for everybody for this file
file_put_contents($IOdir . "tags_dd" . $M, serialize($tags_dd));
if (PHP_OS == "Linux" && getmyuid() == fileowner($IOdir . "tags_dd" . $M)) {
    chmod($IOdir . "tags_dd" . $M, 0666);