
EPrints 2 changelog.

======================================================================
2002-01-09 - EPRINTS-2-ALPHA-2
======================================================================

10/01/2002
 - Added CHANGELOG!
 - Added BUGLIST 
 - Added BUGGLIST & CHANGELOG to the distribution.
 - Session::send_http_header can now send content-types other
    than text/html. Still does text/html by default.
 - added Session::make_indent( $n ) which makes DOM of a CR +
    $n spaces (for laying out OAI XML returns)

21/01/2002
 - fixed bug in get_index_ids - which failed to get the last item from a list
of free words.
 - Added DataObj as a base class for EPrint,Document,User & Subject. Moved
get_value, set_value, get_session,  get_data, get_dataset, is_set, get_id & 
render_value.
 - Removed old OAI code from ArchiveConfig.pm  and some deadwood functions
from OpenArchives.pm
 - OAI now works. cgi/oai and OpenArchives.pm - uses DOM to generate the
replies. Only one function in ArchiveConfig.pm (make_metadata_oai_dc) 
but more metadata formats mean more functions (which is a bit cleaner).
 - Added experimental vlit support so documents can be retrieved as char-
ranges. This is for Ted Nelson research stuff. See www.xanadu.com for more
info. Currently in Xanadu.pm but'll probably get renamed.
 - removed Deletion.pm once and for all.
 - added use_private_cache and cache_id to SearchExpression cache_id can
set the current cache to save searching. use_private_cache: caches and
does not dispose of the cache after but flags it as unusable by other
searches.
 - added a method to session: render data element which returns an indented
XML element containing some text eg. (4,"key","value") ...
    <key>value</key>
 - fixed bug in search expression ( it didn't do the cache checking in the
right place).
 - fixed bug in the ordervalues table which only showed when the archive had
more than one supported language.
[C] - added make_metadata_oai_dc
[C] - XML config files for citation, ruler and phrases now use namespaces 
so that EPrints tags can be prefixed with "ep:" but XHTML tags remain the 
same. Which should make them clearer.
[C] - Added oai_metadata_functions to ArchiveConfig.pm 
[C] - renamed oai_metadata_formats to oai_metadata_namespaces
[C] - added "enable_vlit_support" config option, so you can disable it!
[C] - Added new options to browse views: noindex, nohtml, include, plain, 
citation
[C] - changed citations to contain SPAN class="citation" rather than do 
it in code. and to contain <ep:a> </ep:a> to show where to put the link.
[C] - added oai_sets config option, same format as browse views. 

23/01/2002
 - generate_apacheconf now (optionally) includes directives to pass .txt and
.uni files through the VLit (Xanadu) handler.
 - added VLit and Latex to startup.pl to force mod_perl to load them at the
start.
 - added support for render_value and render_single_value to MetaField.pm
 - removed some broken and useless old browse views linking code from 
MetaField.pm
 - added 3 new executable paths to the CVS SystemSettings: latex, dvips and
convert, convert is invoked as convert_crop_white as we may wish to invoke it
with other options. The autoinstaller does NOT add these new values.
 - put ' quotes around values in default system settings invocations - should
added to installer too.
 - Utils::tree_to_utf8 now understands to turn an <img> into the contents of
the alt attribute.
 - renamed Xanadu.pm to VLit.pm
 - added Latex.pm which calls latex, dvips & convert to turn a latex string
into a PNG and also a method which renders a string as DOM but replaces
bits which look like latex with <img>s which point to cgi/latex2png 
 - added cgi/latex2png which uses Latex.pm to create an image from a latex 
string and serve it. (uses a cache dir so each one only has to be done once)

25/01/2002

 - corrected the namespace in the XML files for XHTML1.
 - removed DOM.pm - going back to using normal one, not our hacked
one.
 - added a get_archive() method to DataSet.pm
 - MetaField: TYPE_SQL and TYPE_INDEX constants are removed and the
results generated directly from the subs which used them. This allows
different values for each archive (eg. for VARCHAR sizes)
 - MetaField: PROPERTIES is now just a list of properties. A value of
-1 means there is no default.
 - get_property_default returns what PROPERTIES used to contain. Allows
archive specific field property defaults.
 - the input field renderer routines now use the properties:
input_rows input_cols input_name_cols input_id_cols input_add_boxes
input_boxes input_style (and digits) to decide size and height and stuff
 - removed HTMLRenderer
 - booleans now can render as menus, radio buttons OR a checkbox 
 - plain text fields can have textareas as their input field.
 - phrase files now have namespaces for ep:foo like other XML files with
XHTML in.
[C] - [this has been undone again! 30/01/2002] added varchar_size option 
to set how big the SQL fields are.
[C] - added FIELD PROPERTY DEFAULTS SECTION WITH the fields:
input_rows input_cols input_name_cols input_id_cols input_add_boxes
input_boxes digits
[C] - fixed BUG in default field validator - now handles multiple
URL fields.
[C] - displaylines renamed to input_rows


26/01/2002

 - added default_action to the render_input_form method and code to
support it.
 - added button order and default_action to all render_input_form calls
where appropriate.
 - fixed braino in new metafield properites handling. All metafields need
a handle on the archive object, so those without a dataset must now have
an archive set. Added archive values to all calls to MetaField->new
 - added a client() method to Session which returns a code for the client,
currently: GECKO, LYNX, MSIE4, MSIE5, MSIE6 and "?". Used this to test
for lynx in the default action handler and not print the image button if 
it is lynx (as lynx ALWAYS displays it, we want it hidden).

28/01/2002

 - new metafield property: browse_link - which is the id of the browse view
it should link to when rendering.
 - added "generic" citations handling, via DataObj render_description which
replaces User::full_name and EPrints::short_title and Document::render_desc
 - added new param to template title field: textonly="yes" to squash down
the XHTML in the <title> into text only.
 - moved render_citation and render_citation_link from Document, EPrint and
User into DataObj. 
 - added get_url to Document, EPrint and User - (renamed the functions
static_url and url)
 - buildpage now takes a title as DOM not UTF8 (so markup is preserved) -
all calls have been changed.
 - fixed a bug in the user mailer. Sent the DOM ref, not the text
 - fixed a typo in edit_eprint which caused a 500 error
 - added a get_type() method to  Document, EPrint and User, returns the
type (as in which citation to use).
 - removed start_html end_html and end_form from Session.
[C] - split user_render and eprint_render into user_render, eprint_render,
user_render_full, and eprint_render_full. eprint_render_full now looks alot
better and puts the abstract page in a slightly darker box. - best to lose 
old render section and require the new one.
[C] - removed ArchiveConfig.pm : eprint_render_short_title and the sub which
returned a user name or "User 44489" - now down with citations.
[C] - added "generic" citations to citations file: these have no type and
are used to render a short (one-line) description.
user_display_name. Now these are done as generic citations for those objects.
[C] - added  textonly="yes" to the titlehere element in the <title> in the
template.
[C] - changed the ID of the public security setting from "public" to "" 
this WILL cause some problems upgrading but
UPDATE document SET security='' WHERE security='public';
will fix it. It means in the document citations we can do ifset on "security".
[C] - added document citations to the citations file - with advice on how
to view PDF and PS.

 - removed Subject::get_name and render and replaced with render_description
(well the one inherrited from DataObj)
 - fixed a bug in edit_subject : was rendering list of eprints in buffer, not
archive.
[C] - added a subject default citation to citations list.

 - upped OAI pagesize to 100 records (from 10)
 - OAI now correctly flags deleted records.
 - OAI now includes values from the deleted eprints when generating sets.
 - cgi/status now uses the phrase file. 
 - added code to Utils::send_mail and User::mail to allow a reply-to
header, other than the eprints admin.
 - fixed bug in search results page which said next 10 records, even if there
were only 7 left.
 - bounce & delete records from buffer now sets the reply-to field of the
email as the editor who did it.
 - fixed a couple of typos from where I added  _order to button lists.
 - added "quotes" around the names in the Utils::send_mail routine to stop
problems with names containing commas.

29/01/2002
[C] - !!!! split parts of ArchiveConfig.pm into
ArchiveOAIConfig.pm
ArchiveRenderConfig.pm
ArchiveValidateConfig.pm
ArchiveTextIndexingConfig.pm
ArchiveMetadataFieldConfig.pm
 and "require" them all from ArchiveConfig.pm. The resulting effect is exactly
the same. EXCEPT. {oai_foo} conf items are all renamed to {oai}->{foo}
[C] - TO upgrade alpha-2 to use OAI! just remove all oai conf items and 
methods from ArchiveConfig.pm, copy ArchiveOAIConfig.pm into the archives 
/cfg/ dir, and then add to ArchiveConfig.pm:
require "cfg/ArchiveOAIConfig.pm";
$c->{oai} = get_oai_conf();
- Latex.pm now uses MD5 to generate cache filename (so it does not go over
256 char limit)

30/01/2002
[C] - !removed varchar_size again!
[C] - changed the default title from a "text" to a "longtext"
 - removed varchar size setting support - the max size is 255. You want more
use a longtext metafield.
 - improved export_xml so it now does ID and NAME parts correctly. And now does
any dataset.
 - Fixed a bug in generate_static which didn't remove the <title> from around
the title name of an xpage.
 
 - the 404 error page now works (although does not spot urls which may have 
expired, yet).
 - can no longer view dir. index in the CGI directories
 - added a <mail> element which is only used to make tree_to_utf8 word wrap 
emails with no <p> elements: it works like a <p> except that \n\r etc are
not turned into generic whitespace.
 - cache settings on cgi pages are now just:
Cache-Control: must-revalidate
  which seems to be what they should have been all along.
 - added a get_status method to session which returns the HTTP status (usually
200!)
 - Subject->children now sorts by Subject name (not id!)
 - cleaned up the error401 page
 - split the document upload page into 2 parts: files and metadata. Cleaned
 up the phrases in that section.
 - the upload a file page now has a seperate form for the cancel button , so 
 that it does not upload the file if you hit "cancel"
[C] - added validate_document_meta to ArchiveValidateConfig.pm - this checks
just the meta data of a document. 

31/01/2002 
 - fixed bug when you have more than 3 items in a list. The form renderer was
chopping off the rest!
 - added a new doc-type: coverimage, which renders as an image on the abstract
page. It's not a required format, though.
 - renamed <ep:a> to <ep:linkhere> because it was clashing with XHTML's <a> 
and DOM lv 1 does not support namespaces.
 - added reindex method to dataset which re-commits EVERY item. Which will 
recreate index and ordervalue tables.
 - added bin/reindex  which is just a handle on that function.
 - added get_noise to session.pm to give the current noise level in command
line tools.
 - made dataset::map actually do a map rather than do it the stupid way. 
Changed the syntax to be the same as searchexp::map and changed things which 
call it.
 - fixed some bits in Document.pm which still thought public docs were 
"public" not "".
 - fixed something in searchexp::perform which assumed we had an order set
when we might not.
 - order values now correctly sort year and int (int not tested yet!)

01/02/2002
 [C] - ArchiveRenderConfig::id_value now returns XHTML-DOM not UTF-8
 - Fixed "clone" bug.
 - Fixed bug which escaped % when it didn't have to.
 - Fixed bug in ArchiveOAIConfig.pm - didn't know what the perl dir was
for making the Identify response.
 - rewrote the DC renderer to be neater.
 - made --verbose in scripts repeatable. 2 gives the SQL, 3 gives the whole
DBI trace.
 - fixed get_value_label to always return DOM. Fixed things that call it.
 - added Database::prep_like_value which escapes SQL value including "%"
 - if for some reason an attempt is made to cache "NONE" from a search it
 now just returns an empty cache.
 - SQL errors now go to the log not the webpage.
 - fixed 'wget' invocation
 - Added Utils::clone which clones a (non recursive) data structure. There
may be a perlmod which already does this, but what the hell.
 - turned MetaField::display_option into render_option
 - GET forms now do not set multi-part which reduces the annoyance of 
hitting the back button.
[C] - moved system variable phrases into system file from archive file.

02/02/2002
 - now removes un-needed ordervalue rows.
[C] - added username and userid to user search fields.
[C] - added document types: other and cover image to citations file.
 - fixed typo "=" instead of "=>" in edit user. And a utf8 which should
have been DOM.
 - remove_user feature now works, and so does the cgi script which calls
it.
 - added in some missing fieldnames in the phrase file for system fields.
 - fixed the title of the user search page.
 - changed staff user edit to have a different blurb.
 - added oneshot_cache to staff searches (user & eprint) so that
ordering works.
 - undefined phrases now get mentioned in the log.
 - fixed typo in MetaField EPrint:: should have been EPrints::

04/02/2002
 - passwords are now encrypted as they come from the form not as they go
into the DB! subtle but important change. They are also crypted when they
come from bin/create_user. Web based signup always crypts now.
 - icky SQL in cgi/confirm to swap around values from newpassword/newemail to
password/email. 
 - added an "unspecified" option to sets and subjects which are not multiple
or required so you can unselect them again if needed.
 - web based searches now use the cache again.
[C] - moved the eprints to unqualified DC code in OAIConfig to its own
function so that it can also be used to make metadata on abstract pages.
[C] - render_eprint can now optionally return a 3rd values, a list of 
links and metadata which it uses the DC maker in OAIConfig to make DC.foo
meta fields in the page header.
[C] - the suggestions field now renders in its own box to make it clear what
it is.
[C] - input_rows on the month field set to 1 so it becomes a pull-down.
[C] - ruler.xml now uses the entities.dtd file, not that it'll ever matter!
- added "-" to escaped values in LIKE params.
- moved "next" on search page to the right end of the list so it does
not get as confusing when you goto page 2.

05/02/2002
[C] - trimed out "dc" from OAIConfig.pm again, probably not going to
have time to add it before v2.0
[C] - OAI: Added "format" items to unqualified DC which give format &
URL of that doc.
[C] - cleaned up static pages to be "nice" for version 2.0 - added in
"powered by" images for things like apache & XHTML.
- import_eprints now needs to know which dataset - so you can export from
one and import into another.
- fixed bugs in export_xml multilang bit.
- top level tag of exported xml is now <eprintsdata> and does NOT have 
a dataset id.
- new Session method: render_link which creates an anchor: <a href="foo">
it also uri_escapes the href. All places which did do make_element("a",...
now use this instead.
- ImportXML now also needs to know which dataset to import to.
- everywhere theres a 'chdir' it now chdir's back to the origional dir
again.
- cleanded up subjects "depositable" field - now uses nice radio buttons.
- removed uses of the word "paper(s)" to keep the text more generic.
- cleaned up 2 errors in the CSS
- renamed setlang to set_lang and internationalised it.

[c] - removed "nowrapper" opt from views conf: now does no <p> wrapper round
citations if using custom citation.
- VLit stuff now uses charrange rather than byterange and requires "xuversion"
to be set.

06/02/2002
[c] - tweaked the OAI renderer to handle bad months!
[c] - commended out the "lang" field in metadata-types: {users} as it's
only needed for multilingual archives.
- VLit now runs over all of the "document" area but not secure docs or the 
front page.
- VLit now returns 401 or 501 where appropriate.
[c] - table on the default frontpage is no longer 100%: looked bad in IE.
- SearchField definitions now use 3 values rather than the icky
PHR:EQ:fred format. Still serialise OK. Also ANY/ALL/PHR is not needed if 
match mode is not "IN" and if match mode is not specified it defaults to
"EQ" - which is usually used internally.

[c]- fixed typo in citations file.
- fixed bug in "area" code of VLit
- removed sub render_struct - use Data::Dumper, dammit.

07/02/2002
[c] - removed defaults for "os" and "security" as these are no longer
meaningful. Defaults are now ""
[c] - changed template to use <pin> rather than <pagehere>, <titlehere> etc.
- Language now logs which lang a missing phrase was in (not in!)
- added change_email feature to user area.
- $user->mail() can now send email to a different address to the one given
(for email change).
- VLit now has an xml-entity mode
- added "latest" cgi script which lists the last weeks additions.

- CGI param mainonly now supresses the template and just serves the body.

11/02/2002
[c] - Rewrote warn and error thresholds to be 1024*foo to make a easier to work
out in megs. makes no functional difference.
[c] - cleaned up the refereed field and removed the Latex stuff from the default
configuration.
[c] - validation routines now check names have a family & a given part.
[c] - removed some unused citations.
[c] - commented out editorsubjects - not needed until we start using them.
- stopped mentioning editorsubjects on the "buffer" page, until they are used.
- now uses 'df' properly to decide which dir to use. Also cleaned up error log
message and emails caused by low disk space.
- DataSet totally ignored system fields required setting now a field is 
required if it is required in the system field conf function OR the metadata-
types.xml file.
- mainonly param was causing a warning, now checks it's defined first.
- buffer page items are now sorted by datestamp (newest first)
- made a note in the h2ph warning that you should be root when running it.

12/02/2002
[c] - Changed vlit config options. Now you can configure where the URL goes.
- added "context" mode to vlit which highlights around the quote. 
- vlit human mode now uses CSS.

[c] - Changed 'require' to 'do' in ArchiveConfig.pm because otherwise PERL
remembers it's seen that filename before and does not load it!
- Fixed the "MultiLang fields getting corrupted" bug.
- Added two new field properties - search_cols and search_rows for controling
look of search fields.
[c] - added defaults for search_cols and search_rows in ArchiveConfig.pm
[c] - Changed validation code for fields: now checks emails too.
[c] - Commented out uncommon languages from langauges.xml
- DataObj::get_value now returns at [] for empty multiple fields to save
on pointless undef checking.
- Fixed bug that booleans shown as menu/radio always came back TRUE.
- added Vlit copyright page.
- added user help page.
- configure_archive now lets archive hostnames have "-" in!

13/02/2002
- VLit No longer checks for text mimetype.
- Removed "generate_dtd" - it now regenerates the DTD each time it 
 loads the archive configuration. One less annoyance!

14/02/2002
- Added my own url_escape routine which makes a URL then tostrings it.
Due to change in functionality of uri_escape in URI 1.18
- All URL's now escape using EPrints::Utils::url_escape 
- cleaned up the default front page to look nicer under Netscape 4
- made the vlit icon on the about page point to the vlit permission page.
- tidied up vlit permission page.
- removed <p> tag around URL's in emails - don't want them word wrapped!

======================================================================
2002-02-14 - EPRINTS-2.0
======================================================================


03/03/2002
[c]- Fixed typo in citations "years" instead of "year"
- 404 page now spots /view/ and suggests you need to run generate_views
- "latest" cgi script no longer uses cached results.
- get_value on a non existant field now gives a clear error rather than
  a perl !defined error. (calls abort)
- importXML - treated whitespace inbetween <lang> tags as a lang'less 
  version of the value. Now ignores it. Still does that with non-white
  space.
- added get_top_subject to metafield - which returns the top subject for
  that field, or a helpful error if there isn't one. Used it where 
  possible in code: generate_views, SearchField.
- Fixed bugs in mailer with latin-1 text in MIME and body of mail.
- Fixed mistake in /help/ which refers to lemur1 rather than the current
  archive.

03/04/2002
[c] - All occurancies of
(defined $foo->get_value( "bar" )) have become ($foo->is_set( "bar" ))
in default configuration. Easier to understand and avoids a few bugs.
- abort() now gives an HTML page as well as logging, if we are running
in a CGI script (under mod_perl).
- configure_archive now defaults the MySQL user to $archiveid rather
than "eprints" which stops the problem of changing the MySQL User:
"eprints"'s password on ALL archives.
[c] - default template: now <title> contains the name of the archive
"sitename - pagetitle"
[c] - some rewrites to ArchiveFreeTextIndexingConfig - most importantly
now treats chars< #32 (eg RETURN and NEWLINE) as breaking characters.
*** Users should replace old ArchiveFreeTextIndexingConfig with new one
unless they have good reason not to.
- Changed the email change to tell you what your email just got changed
to.
- lack of "deposit" priv was not hiding the deposit option on the user
page (now it does).
- ImportXML now has an error context of 5 lines to aid debugging.
- Main phrases file now rephrased to be "go to homepage" rather than
"return to homepage" to make context more simple. Also "author page" or
"admin page", "staff area" and "your deposit items page"  renamed to
"user homepage".

16/04/2002
[c] - Abstract h2 was not added to render_eprint page. Now is.
- added $session->terminate() to generate_abstracts
- generate_apacheconf configuration now refers to apache configuration
rather than apache.conf (which was wrong)
- OAI: got rid of OAI_VERSION constant - now just hardwired.
- edit_eprint now does function of view_submission & edit_submission too and
can edit eprints in ANY dataset. Also now has a clone function.
- edit buffer page now links to edit_eprint
- staff eprint search now searches all datasets 
- SearchExpression can now have extra fields which don't get passed into
the actual search. Just rendered as part of the form. These are indicated
by ! before the name.
- SubmissionForm now maintains dataset as well as eprintid.
- added some debugging code to trace objects. This won't normally be
used. Mostly DESTORY subs, and hooks on bless.
- Changed Session, Archive & Auth to no longer use "port" when calculating
which archive config to use.
- editors can now succeed other peoples eprints.
- deletion records now auto fill in the suceeds fill when cloned (like
archive records always did)
- EPrint->remove_static now works properly. Actually removes the abstract.
- added DataObj->get_values to return a list of all the values of a given
metadata field - needed by OAI2 to list SetSpec's of an article.
- added oai2 protocol talkin' script /cgi/oai2 and modified some bits of
OpenArchives.pm to handle oai2 (in addition to oai1 which still works fine)
- replaced subject file with lib of Congress.

======================================================================
2002-04-16 - EPRINTS-2.0.1
======================================================================

2002-05-20
- [config] changed "Contact site admin" text at bottom of page template
to look less like an order (people thought it indicated an error)
- added --silent as a synonym for --quiet - part of GNU regs.
- added --version option to all command line options to print command
name, EPrints release version and license.
- fixed bug in cgi/oai - from and until were ignored!
- added an option to SystemSettings; disable_df. This makes cgi/status 
and the create EPrints subroutine skip looking at disk-free.
- metafield now returns the text of a text field as its value label. It 
returned an error before!
- added EPrints::Utils::cmd_version($progname) to automate generation of
   --version outputs.
- changed syntax of image quoting locspecs in VLit module.

2002-05-22
- [config] some test stuff added to default config. Should be removed
before next release. (metadata types & fields) 
- removed a number of doubled-up => symbols in scripts.
- POD doc'd DataObj
- Added 'search' metafield type. Does not work fully yet.
- in search expression, split the part which renders the actual search
   fields from the search page renderer. This allows it to be called
   by the search field type input form renderer.

2002-05-23
- Added pod templates for comments to all subroutines!
- Added pod docs to Archive.pm Auth.pm Config.pm Dataset.pm
- "search" metadata fields now work - rendering form and from the form.
- removed {datasetname} from DataSet - replaced it with {id}
- also in DataSet renamed {typeorder} to {type_order} and {stafftypes} to
   {staff_types}
- added an optional prefix to searchexpression cgi field ids, so that more
   than one can appear in a single form.
- changed $searchfield->get_form_name to ->get_id which returns an id for
   that searchfield in the expression (without the CGI prefix)
- added is_blank method to searchexpression and searchfield which returns
   true if there is no conditions for searchexp or for searchfield if it
   does not have a condition.
- added from_string method to searchexp which unserialises the string and
   applies the "safe" parts. Does not add any new searchfields or change
   the dataset.
- added pod docs to Database.pm

2002-05-29
- Added xhtml-entities.dtd to system cfg dir - contains all XHTML entites
   such as &nbsp; - these are now included in the archive dtd files which 
   means that &nbsp; &euro; etc. now work in phrase files, the template 
   and the static pages but NOT the citations.
- staff eprint edit now updates the eprints static page if needed.
- added "layout" option to views configuration. Allows <p>, <ul> or <ol> 
   style lists. A custom citation no longer automatically turns off the 
   <p> wrapper.
- [api] changed syntax of EPrints::Eprint->new so that the optional param 
   "dataset" is now the last option. This means that it can be called
   exactly like any other EPrints::DataObj->new (which is neater). Updated
   all uses of this call in the code.
- [conf] changed call to EPrints::EPrint->new in the commenarty bit of
   ArchiveRenderConfig
- [api] EPrints::EPrint::create() - removed the "userid" parameter which
   must now be set seperately. Updated all the code to reflect this change.
- Removed $EPrints::EPrint::id_code_digits and hardwired it to "8" as I've
   got no intentions of changing it and other parts of the code already 
   assume 8. 
- Added POD documentation to Document.pm , EPrint.pm , ImportXML.pm and
   RequestWrapper.pm
- Removed DIGITS from Document and hardwired occurances to 2.
- Added render_xhtml_field to Utils.pm - this acts as a special field 
   renderer like the one in Latex.pm (but renders as XML).

2002-05-29
- Added POD Documentation for Language.pm, Latex.pm, MetaField.pm

2002-06-13
- Added "pagehook" feature to allow certain pages to have extra body attibutes
   and "stuff" in the top of the head and body elements. For javascript. Mostly
   for Steve Harris in AKT.
- Added "pageid"'s to all the submission form pages.
- [c] Added examples of pagehooks to config.
- added an "export_as_xml" attribute to fields which defaults to true but if
   false then the field is not exported in an XML dump - now used by subject
   to supress dumping ancestors.
- fixed bug in abort() which attempted to report to the apache request while
   under modperl even at startup (so no request -> error ).

2002-06-24
- [db] Added subscriptions! including a send_subscriptions bin script, a cgi 
   page to edit them (subscribe) and added the link to the user home page. 
- added a new bin script: "upgrade" which upgrades the database tables to the
   latest version. (sorts out the subscription tables for 2.0->2.1)
- [db] added a new db id counter - subscriptionid
- turned _create_table in Database.pm into create_dataset_tables so that
   upgrade could use it.
- fixed a bug in the sql escaping code - escaped '.' when it didn't have to.
- added a whole bunch of $sth->finish commands to clean up more after db
   functions to hopefully reduce memory leaks.
- added "version" concept to the database tables to reflect what version of
   eprints they are suitable for the automatic "upgrade" script. Database.pm 
   gained: create_version_table, set_version, has_table, get_tables, 
   get_version, is_latest_version. 
- session now uses "is_latest_version" to check the DB is ok and reports a
   different warning if the "archive" tables exists. (wrong version vs. no
   tables.)
- SearchExpressions can now be rendered into a screenable description using
   ->render_description - SearchField also gained a render_description which
   is called by the SearchExpression method.
- MetaField gained "make_searchexp" which is only legal on search type fields
   and returns the searchexp described by the given value.
- Fixed a typo in the message about not having a top-level-subject.
- Added a hack to SearchExpression which gets the fields for a search-type
   field from the subscription_fields conf setting if the property is set to
   "subscriptionfields" rather than an array.
- SearchExp again; made render_order_menu a seperate function so that it can
   be used when rendering a inlined searchexp (eg. for a search-type-field)
- SearchExp and SearchField no longer return the bad words from a search. This
   is now handled by putting the searchexp description at the top of the 
   search results page as part of the "blurb" which now lays out the data
   about the search (so you can change the order, eg. Timing info first, or
   even not at all)
- added set_property to SearchExpression so that you can change properties
   of an existing searchexpression. Useful to set use_oneshot_cache on a 
   searchexp created from de-serialising.
- Now oai 2.0 Compliant.
- [conf] Added an oai2 oai_dc XML render function to ArchiveOAIConfig.pm AND
   added oai2 config section for keeping namespaces etc seperate.

2002-06-27
- Loosened regexp for passwords in configure_archive (now allows upper case 
   too)
- [c] Added new SystemSettings option: "virtualhost" which is now used by
   generate_apacheconf as the NameVirtualHost value (or "*" if it's not set)
- Added page id's to each build_page so that stuff can be hooked onto them.
- generate_views now orders the index page (using results from get_values)
   unless it's a view of multiple combined fields in which case it does not.
- bin/upgrade turns the "commentary", "replacedby" and "succeeds" in the
   tables "archive","deletion","inbox" and "buffer" from VARCHAR to
   INTEGER. These fields should have been INT's in the first place. This
   is done as root. bin/upgrade now makes a root dbh connection if needed.
   The origional values of the fields are dumped to /tmp first in case of 
   disaster.
- [c] Added new metafield configs: make_value_orderkey and 
   make_single_value_orderkey which can be used to override the normal orderkey
   generation - eg. could turn field with format "4.9d" into key
   "00000004.00000009d" that will sort alphabetically correctly.
- Now correctly generates orderkeys for subjects sets and datatype's fields.
- year orderkeys now pad 6 not 4 (just in case)
- removed code which always put <a name="t"></a> at the top of pages when
   an "internal" button was pushed. This broke the whole idea of the #t jump
   to where you were before.
- added new config option (submission_stages) which lets the admin override the
   default order of the submission form stages.

2002-06-28
- Added new config options:
    submission_hide_howmanyfiles
    submission_hide_upload_archive
    submission_hide_upload_graburl
    submission_hide_upload_plain
   to allow the admin to supress various parts of the submission file upload
   form.

2002-07-01
 - Fixed bug in render_ruler : it failed to take ownership of the
    new fuler.
 - Added more details into "information" page in default config. And a
    GNU linking to gnu.org.

2002-07-03
 - Fixed typo in MetaField.pm - had "searchfield" not "search" which
    meant search fields were ending up as VARCHAR not TEXT.
 - Missing subject titles now display as [Subjectid=footle]
 - Fixed some typos in installer
 - generate_views now treats a SystemSettings->virtualhost of "" as
    undefined.
 - Subjects now sort into correct order(yay!)
 - Bug in scoping for DF_AVAILABLE in Utils.pm - fixed.

======================================================================
04/07/2002 - EPRINTS-2.1
======================================================================

2002-07-04
 - Fixed bug in OAI 2.0 (Still using OAI 1.1 namespace in one place)
 - [c] Changed ArchiveOAIConfig.pm so that now archiveid, sample
    identifier and base_url are now all seperately configured for 
    OAI 2.0 (and changed cgi/oai2 and OpenArchives.pm to honour this)

======================================================================
04/07/2002 - EPRINTS 2.1.1
======================================================================

2002-07-07
 - Fixed ANOTHER minor issue in OAI2 code. At the end of a List there
    should have been (and now is) an empty resumptionToken.
 - New method added to MetaField: list_values. This takes flattens out
    multilang, multiple and non-multiple fields so that a list of 
    values of that field is returned. 
 - To avoid an error in oai, if datestamp is not set, datestamp now
    defaults to 0001-01-01.
 - SearchExpresion->dispose now does not try and dispose an undefined
    tmptable.
 - new method in SearchExpression: item_matches. This takes an item of
    the type appropriate for the search and returns true if the search
    expression matches on that item. Also a item_matches method on 
    SearchField used by the one in SearchExpression.
 - [c] removed all the darn GIF's. Set a CSS "style" on the 1x1 image 
    in searchforms to "display: none". Also it now links to a PNG 
    instead. Also updated the "information" page a bit more. Removed 
    GIF's from default homepage too.
 - new function is Utils.pm: is_in which takes searches in a list for
    items in a second list. Two modes: success if one found or success
    if all found.

2002-07-08
 - Added PNGs to replace GIFs for logos in the static/image directory.
 - [c] Made stylesheet link in the default template link to the full URL 
    rather than relative link. Eeep. That's not going to work - it'll
    give an error. Dammit.
 - [c] Added 2 new archive config settings: securehost and securepath for
    running https.
 - generate_apacheconf now generates all the apache confs (does not take
    an archive id, anymore). Also now generates extra auto file to be
    Include'd into a sercure virtualhost config. Played around with the
    config file which gets generated to make it work both secure & not.
 - tweak to /perl/users/home to make change_user work on secure setting.
 - made the Auth.pm module accept /00/00/00/00/00/ format document paths
    for authentications in addition to /0000000/00/. (needed for https
    mode).

2002-08-08 [cjg]
 - [c] Increased default results page size to 100 from 10.
 - [c] Increased default width of abstract input to 90 cols.
 - [c] Increased default number of author input fields to 6.
 - [c] Some tweaks to default citations.
 - [c] Made "publication" field optional in all types.
 - [c] Added a new config file to archives - apachevhost.conf - which is 
    included into the configuration inside the virutalhost definition.
 - Modified apacheconf rewrite rules so that a trailing "/" is not required
    to get record abstract pages.
 - Modified generate_views so that files for values which contain " " or "/"
    have "_" in their stead.
 - [db] Added new system fields to the database. DB version is now 2.2. 
    bin/upgrade will make the changes. Changes are:
      * in dataset "subscription"
         - add a new boolean field "mailempty"
      * in dataset "user"
         - remove the field "editorsubjects"
         - add the following fields:
            + editperms (search) 
            + mailempty (boolean) 
            + frequency (set) 
 - [c] New configuration option "catch404" which may be undefined, but may
    be a reference to a subroutine which takes ($session, $url) and returns
    either a new URL to redirect to or undef if it's really a 404. This is
    to handle migration from eprints 1 or other systems.
 - [c] New "priv" for users: "no_edit_own_record" which actually removes the
    edit my record option from the user page (for DB's where the users are
    imported not web-registered.)
 - Edit subscriptions page now includes extra option to indicate if a user
    wants a mail when there are zero matches.
 - Changed the layout of the subscriptions summary page to be a bit clearer.
 - Added a check in get_conf to prevent null reference errors in the case
    of an optional hash table. Eg $c->{a} = { c=>4, b=>5 } OR $c->{a} = undef;
    and someone requests $archive->get_conf( "a", "c" ) - will return "4" in
    1st case and undef in the 2nd.
 - [c] Added new metadata parameter "can_clone" which defaults to 1. If set 
    to 0 then the field is not cloned when the record containing it is cloned.
 - added a test to prevent a warning when unserialising an undefined value as
    a search expression (and treat it like an empty string).
 - fixed bug in SubmissionForm. Now only lists the required formats, and asks
    for at least one if there is at least one required format.
 - added some checks to render_name in Utils.pm to avoid warnings in the 
    case of undefined values.
 - fixed render_citation so that it should now not crash on nested <isset> 
    elements.

2002-08-20 cjg
 - [c] some mess ups to the default views (need to fix before release)
 - new method: EPrints::DataSet::get_sql_dataset_ids which returns an array
    of all the datasets which map directly into sets of SQL tables. This is
    used by create tables to get the list.
 - Added check to bin/create_tables to check if there are more than 32 fields
    requiring SQL Indexes in the main table.
 - Added a --force option to bin/create_tables to override warnings.
 - Added option to bin/generate_abstract to generate a single abstract. 
 - Added PerlFreshRestart to apache conf from generate_apacheconf to make 
    apache reload the perlmodules and eprints config on apache reload.
 - "options" to timestamp subject views and to only show subjects which have
    1 or more things in them. Although they are not yet options, they soon will
    be.
 - added new system metadata field to document: "hash" which contains the MD5
    of the files in the document. bin/upgrade will now add it to v2.1 
    databases.
 - [c] added default values for searches. New config options 
    advanced_search_defaults & simple_search_defaults which are references
    to hashes. Does not handle things like "ANY/ALL" just the text.
 - Tidied up bin/status to look nicer and also have report on subscriptions
    how many of each frequency and when the last mailing for that frequency
    was.
 - Archive config now remebers when it was last changed and if 
    /archvies/FOO/cfg/.changed has changed since then it reloads the archive.
 - Now does "do" rather than "require" on ArchiveConfig.pm so that it can be
    repeated to reload the module.
 - Some code in Config.pm tries to change UID to "eprints" (or whatever) if 
    running as root. But it does not work properly as the code gets "tainted".
 - Added a much clearer warning when errors in the config modules are 
    encountered.
 - Added count_indexes to DataSet which returns how many SQL indexes are
    required for the main table of that dataset.
 - Added rehash function to Document, which recalculates the hash of the
    files in the document (the will later be overridable with a config 
    opion). All functions which add or remove files to the document now
    call rehash.
 - [c] Added new metadata field property (sql_index). Which defaults to
    true but if set to zero will supress the field having an SQL index.
 - Fixed bugs in OpenArchives code which used OAI v1.1 id for part of OAI2.0
 - Fixed display bug: Buttons are now rendered in their own little <div>.
 - Cleaned up submission form for the case where there are NO required formats.
 - Subscriptions now obey "MailEmpty"? or not field.
 - Fixed bug in subscriptions which made them mail out multiple times.
 - Sucessful sending of subscriptions for a frequency cause a file called
    /opt/eprints2/archive/FOO/cfg/subscription-FREQUENCY.timestamp the
    timestamp of which is used in the archive "status" page.
 - Added $subscription->get_last_timestamp($session,$frequency) which gives
    a neat interface to that value.
 - Fixed a view in User.pm where the URL for a given user was wrong (eprint 1
    URL)
 - Added code which won't get documented just yet to citation renderer which 
    processes @year@ in an ATTRIBUTE of a citation like it would &year; eg.
    <a href="http://www.google.com/search?v=@year@+papers+from">&year;</a>
 - Added Utils::get_timestamp which returns a neat time stamp string, similar
    to that from UNIX date command.


2002-08-28 cjg
 - Fixed a bug in oai2 which meant it occasionally used the wrong session in
    munge_date.

2002-09-11 cjg
 - [api] Added EPrints::XML to handle abstraction of XML::DOM/XML::GDOME
 - Added new option is SystemSettings to allow users to turn on gdome support.
 - [c] Changed use XML::DOM to EPrints::XML in ArchiveConfig.pm
 - [c] removed SYSTEM "entities-en.dtd" from the DOCTYPE of ruler.xml
 - Improved much of the DOM code to be faster and more stable, using new
    functions in EPrints::XML where appropriate. Specifically in phrase 
    pin insertion, page pin insertion and citation rendering.
 - [api] MetaField objects no longer know what dataset they belong to. 
 - [api] removed $metafield->get_dataset() and $metafield->set_dataset()
 - [api] $metafield->get_values( $session ) is now 
     $metafield->get_values( $session, $dataset )
 - [api] $archive->parse_xml( $filename, %config ) is now 
     $archive->parse_xml( $filename, $no_expand ) as %config was XML::DOM
     specific.
 - [api] EPrints::Config::parse_xml() removed. Use EPrints::XML functions 
     instead.
 - DataSet now caches configurations so that it can share the same configur-
     ation between inbox,buffer,archive,deletion and eprint which saves a 
     chunk of RAM.
 - DataSet now keeps track of which fields are required for a type, rather 
     than cloning MetaFields and setting their required property. 
 - [api] To find out if a metafield is required within a specific type of
     eprint there is a new DataSet method
     $boolean = $ds->field_required_in_type( $field, $type )
     the field property now just indicates if it is globally required.
 - [api] The Database method  $db->get_values( $field ) is now 
     $db->get_values( $field, $dataset ) 
 - [api] $field->render_input_field now additionally takes optional parameters
     of $dataset, $type which if defined will be used to see if the field is
     required for the specified type when rendering it.
 - $session now keeps a handle on a document {doc} in addition to the current
     page {page} which must be owned by {doc}. 
 - [api] $session->new_page() is removed (and no longer required)
 - [api] two new options for $session->render_input_form: field & type which
     if set will be passed to render_input_field (see above).
 - [api] $session->take_ownership removed. Use clone_for_me instead.
 - [api] New method for $session: $session->clone_and_own( $node, $deep )
     which clones the specified node, but owned by the sessions own document
     (and thus can be part of the output page). If $deep is 0 then only the
     node is cloned and not it's children too.
 - [api] Please use EPrints::XML::to_string( $node ) rather than 
     $node->toString as in GDOME this does not work properly on 
     DocumentFragments

2002-09-20 cjg
 - Added EPrints::Utils::make_name_string to return a utf-8 string from a 
    name structure. Replaced render_name with it in some places.
 - [conf] Added editperms and related fields to metadata-types.xml
 - generate_views can now do "name" fields. Name fields are "browse-able"
 - [doc] notimestamp & hideempty are new paramaters to views.
 - Editor alerts: mailed out at same time as subscription to tell what
    editors have in the "buffer".
 - Subject editors: editors may now be properly limited to a search set.
 - phrases generation now is more careful about garbage collection. Esp.
    unused pin values.
 - [api] render_input_field has new optional param: $staff which is used
    to render id fields with the id_editors_only condtional. Also in
    render_input_form to pass through.
 - SubmissionForm and UserForm tell render_input_form if they are in 
    staff mode.
 - [doc] New metadata fields:
    - id_editors_only for has_id fields to show the "id" input bit to
       editors only or everyone?
    - allow_set_order for search fields to show the "order" selector?
 - fixed bug in OpenArchives that only looked for oai 1 identifiers in
    from_oai_identifier.
 - [api] Removed set_value from SearchField (not used)
 - Changed the phrase for mailing subscriptions to be one big phrase so
    layout change is possible.
 - added to User.pm: $thing->send_out_editor_alert and 
    EPrints::User::process_editor_alerts( $session, $frequency );
 - changed email encoding for latin from iso-latin-1 to iso-8859-1
    probably make no difference.
 - EPrints::XML::dom can now take a list of types, not just one.
 - Improved EPrints::XML::to_string to make <br/> into <br />


2002-10-08 cjg
 - [c] Fixed ArchiveConfig.pm so that a user can always view a document
     they deposited even if it's secure.
 - Added regexp to make_text to remove all characters < ord(32) except
    0x09, 0x0a and 0x0d. They're not legal in XML!
 - Modified the selection field renderer so that if the specified height
    is 2 or more, the actual height will always be at least 2. (so it does
    not become a pull-down).
 - Fixed a bug in SubmissionForm so that "cancel" on the "eprinttype" page
    does not store any change in type.
 - Added a "submit later" button to Deposit Page.
 - Changed the submission form "thanks" page to mention that it is awaiting
    approval by an editor.
 - Fixed an error in "lib/userform:blurb" phrase which linked to set_email 
    rather than change_email. 
 - Added google_site which appends "site:whatever.com" to a search param
    and redirects that search to google.

2002-10-09 cjg
 - [c] Added skip_buffer config option which makes articles go from the
    work area directly to the archive.
 - [c] Default abstract page now lists eprint type.
 - [c] Default render_user_full now lists subscriptions too.
 - fixed typo in cgi/confirm s/timepout/timeout/
 - fixed bug in MD5 hash code and added hook to use different hash if
    required.
 - [c] override default hash method. 
 - added <ep:ifmatch> and <ep:ifnotmatch> to citations. These implement
    conditionals using some of the eprints search semantics.
 - new script - export_hashes - which dumps all the hash values of documents
    in an archive.

2002-10-23
 - changed editperms in User.pm to be a multiple field, and made changes where
    this is used. Each search is "OR" not "AND". Changed "upgrade" to add the
    table (rather than just a field).
 - eprints no longer have a "hash" value after all. It's just stored in the
    XML files.
 - Fixed OAI2 bug which meant it did not complain when identifiers did not 
    match the oai regexp. Should now, finally, be 100% compliant.
 - Some improvements to the archive loader, should hopefully express more
    errors in the perl config modules.
 - the from_buffer method in Database now takes offset, count and justids
    params as used elsewhere.
 - Added Probity.pm which hashes files and outputs in the probity XML format.
 - Document rehash() now uses Probity.pm everytime any document modifying 
    method is called.
 - export_hashes now works with the XML probity format. (.xsh)
 - Added phrases for seperators in multiple value rendering (eg. the " and "
    in name lists. Searches are seperated by " <strong>OR<strong> "
 - added "boolean" to the is_browsable list. It acts like a 2 value set.
 - SearchExpressions now always call from_buffer with the offset, count and
    justids, if set.
 - Fixed icky error in SearchField::item_matches which halted if a subject
    no longer exists for some reason. Now logs an warning and muddles on.
 - Added a get_UTC_timestamp to Utils
 - Fixed the VLit non-port-80 bug. Added some new functionality, including
    a "scale" factor, and a "fax" detector.

2002-10-24 cjg
 - Fixed a bug in subjects multiple render join. Subject "join" is now <br/>
 - Renamed use_gdome to be enable_gdome for configure-like goodness.
 - <securehost> and <securepath> are now optional (in archive.xml)
 - Fixed a bug in the 2.1->2.2 SQL in bin/upgrade 

2002-10-28 cjg
 - No edit rules now means an editor can edit anything not nothing
 - new method "make_comment" in EPrints::Session
 - Fixed VLit & configure_archive to use whichever XML library is prefered.
 - more work on the tools/update_phrase_file utility to aid translation. Still
    not finished.

2002-10-29 cjg
 - Cleaned up ArchiveConfig.pm (views etc)
 - Citations may now use @title@ instead of &title; although this is optional
 - Changed default citation file to use @title@ format
 - Removed some junk from metadata-types.xml (junk comment)
 - Improved text about restarting apache in configure_archive
 - Added a --all option to export_hashes
 - Fixed bug in UTC timestamp function (now uses gmtime, like it was supposed 
    to)
 - Added parse_xml_string to EPrints::XML to do the obvious
 - Added Paracite module and cgi script to render reference links. Added 
    Citation/Parser to bundled libraries. Added a "seek" image for links
    to paracite.

2002-10-29 cjg
 - export_xml was using XML::DOM (now uses EPrints::XML)

2002-10-29 cjg
 - staff eprint search now defaults to showing "archive" as the selected
    dataset
 - phrases no longer log unused parameters (but still log missing ones)
 - "extra" search fields can now have defaults
 - corrected some spelling
 - changed links on default pages to go to software.eprints.org and
    call the software GNU EPrints not eprints.org software.

2002-10-30-cjg
 - [c] Cleaned up the default config files. Added examples of all the 
    new options.
 - Fixed some issues with documents which have been orphened (have no
    eprints)

