BOINC lets you maintain a read-only DB replica,
and certain read-only web pages (like top_users.php)
use the replica in preferences to the master.
But it turns out that these pages aren't actually read-only
because of the too-clever forum_preferences logic.
So sometimes it would add forum_preferences records to the replica,
leading to errors it later copies the same item from the master.
Solution: skip the forum preferences logic if we're using the replica.
We could make this more bulletproof by putting in checks
in insert(), update(), delete() etc.
When also including an older recaptchalib.php this function gets redefined. Since it is only a wrapper function and only used within BOINC, renaming it is safe.
New browsers pass "auto" as the first accepted language.
This broke the language selection logic.
BTW, the language selection logic is a kludge and I don't think it works
correctly for e.g. "es en da"
Oddly enough, I couldn't repro this on Chrome or Firefox;
I remained logged in after quit/restart browser,
even though the cookie said it was for this browsing session only.
The SETI@home result table is about to run out of 32-bit IDs,
so we need to move to 64-bit result IDs.
This will happen to the workunit table at some point too.
I changed the server C++ code to use the "long" type for all DB IDs
(and to use appropriate conversion codes like %lu).
"long" is 64 bit on 64-bit machines.
For uniformity I did this for all tables,
even ones (like app) that will never get big.
I chose NOT to change the DB schema for now.
The new code will work with 32-bit ID fields in the DB.
As projects approach the 32-bit limit on a table they can change
its ID field, and fields that reference this table, to BIGINT.
This is likely to happen only on the result and workunit tables.
I put functions in html/ops/db_update.php
to change the IDs of these tables.
Previously the feature that lets people send email about the project
to their friends only worked if the project supplied a message.
Remove this restriction; supply a default message.
Also make it work with or without PHPMailer.
Projects can still supply a default subject and message;
the user can now edit these.
Remove the ability to send HTML email
and to macro-substitute names in the message.