A big list of feature requests

2008-08-07
2013-05-30
  • Great work on the OpenBiblio project! I've been enjoying it quite a bit at my library (lib.thripp.com). I have some features I think will add to the program.

    Hold requests can be placed anytime, not just when items are checked out. Then they can be secured on the holds shelf in the library for a specific patron to pick up.

    You can place holds by bibID instead of only barcode; then whichever item is returned first can fulfill the hold.

    When a requested item is checked in, show the name, telephone, and email of the first person in line for easy contacting.

    Switch from POST to GET for searches. Then the queries appear in the URL, so you can bookmark them and the browser doesn't generate any warnings when using the back and forward buttons. Then, switch long names like searchText and searchType to q and t to keep the URLs simple.

    An awesome full-text search system with Boolean queries, scoping by collection or material (someone made a patch in the patch section), MySQL relevance ranking, ISBN/ISSN/barcode/call number search, and JavaScript highlighting on the results pages ( http://www.nsftools.com/misc/SearchAndHighlight.htm is good). This is a lot, but title+author+subjects and ISBN would be a good step to start.

    An awesome patron search system with search by custom fields, first name, birth date, address, etc.

    Global checkout limits: Instead of per material type, set a max number of total items per patron. Specific materials can have fewer; for example, a maximum of 20 items per patron that only 5 of which can be DVDs.

    Forward due dates passed closed days.

    Renewal limits can be "max number of days" rather than the number of times. I'd like to set books to a 21-day loan with a 63-day max, regardless of the number of renewals.

    Patrons can place holds, renew items, and view their items and due dates from the OPAC. Add a password field to the members field, like the one in staff, so we can give our patrons passwords and they can log on with their barcodes and passwords.

    Batch editing on the Marc screen, with deletion checkboxes to quickly remove all those pesky 9XX fields from Library of Congress records (bonus points if we can do that automatically upon import).

    The OPAC is center stage (not in opac/index.php), and public URLs are friendly. This can done with Apache's mod_rewrite plus changes to the URLs in opac/index.php and shared/biblio_search.php. Here's my .htaccess file, for example:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([0-9]+)$ shared/biblio_view.php?bibid=$1&tab=opac [NC]
    RewriteRule ^e/([0-9]+)$ shared/biblio_view.php?bibid=$1&tab=cataloging [NC]
    RewriteRule ^$ opac/index.php [NC]
    RewriteRule ^search shared/biblio_search.php [NC]
    </IfModule>

    The "e/" is just for convenience, so you can jump to the edit screen by adding it before the bibID in the URL. An example URL: http://lib.thripp.com/62

    Assuming nice permalinks and the switch from POST to GET, we can add author links if an author has more than one book in the catalog. This way, you can easily see more books by an author. I'm doing this now. I replaced H($biblio->getAuthor()) in shared/biblio_search.php with this:

    $ampold = array("&amp;", " ");
    $ampnew   = array("%26", "+");
    $author  = H($biblio->getAuthor());
    $authorNew = str_replace($ampold, $ampnew, $author);
    $getAuthorCount = mysql_query("SELECT COUNT(bibid) FROM biblio WHERE author = '$author'") or die(mysql_error());
    $getAuthorCountRes = mysql_fetch_row($getAuthorCount);
    if ($getAuthorCountRes[0] > 1) echo "<a href=\&quot;../search?t=author&amp;q=$authorNew\&quot;>".H($biblio->getAuthor())."</a>"; else echo H($biblio->getAuthor());

    The URL structure would be different (I've changed the arguments in my installation), but otherwise it could be done.

    Support for cover images, along with display in the search results. A basic way is to add a table cell to shared/biblio_search.php with this code:

    $localTN =     "/*serverpath*/files/covers/$bid-sm.jpg";
        if (file_exists($localTN))
            echo "<a target=\&quot;_blank\&quot; href=\&quot;../files/covers/$bid.jpg\&quot;><img src=\&quot;../files/covers/$bid-sm.jpg\&quot; alt=\&quot;Front Cover\&quot; /></a>";

    That checks files/covers for a file called BIBID-sm.jpg, and if it exists, displays the image with a link to the file BIBID.jpg. This assumes that you always upload a cover image and thumbnail (with the -sm filename delimiter) in tandem.

    I'm using a more complicated way like below:

        $getisbn =     mysql_query("SELECT field_data FROM biblio_field WHERE tag = '20' AND subfield_cd = 'a' AND bibid = '$bid'")
                or die(mysql_error());
        $printisbn =     mysql_fetch_row($getisbn);
        $getamz =     mysql_query("SELECT field_data FROM biblio_field WHERE tag = '970' AND subfield_cd = 'a' AND bibid = '$bid'")
                or die(mysql_error());
        $printamz =     mysql_fetch_row($getamz);
    $localTN =     "/*serverpath*/files/covers/$bid-sm.jpg";
        if (file_exists($localTN))
            echo "<a target=\&quot;_blank\&quot; href=\&quot;../files/covers/$bid.jpg\&quot;><img src=\&quot;../files/covers/$bid-sm.jpg\&quot; alt=\&quot;Front Cover\&quot; /></a>";
        elseif ($printamz == "Not on Amazon.com") echo "";
        elseif ($printamz != "") echo "<a target=\&quot;_blank\&quot; href=\&quot;http://images.amazon.com/images/P/".$printamz[0].".01._SCLZZZZZZZ_PC.jpg\&quot;><img src=\&quot;http://images.amazon.com/images/P/".$printamz[0].".01._SCTZZZZZZZ_PC.jpg\&quot; alt=\&quot;Front Cover\&quot; /></a>";
        elseif ($printisbn != "") echo "<a target=\&quot;_blank\&quot; href=\&quot;http://images.amazon.com/images/P/".$printisbn[0].".01._SCLZZZZZZZ_PC.jpg\&quot;><img src=\&quot;http://images.amazon.com/images/P/".$printisbn[0].".01._SCTZZZZZZZ_PC.jpg\&quot; alt=\&quot;Front Cover\&quot; /></a>";

    That checks for a local thumbnail first, then a Marc field with tag 970 and field a. If I type "Not on Amazon.com" in it, it returns nothing. If I type an ASIN (Amazon ID) in there, it shows Amazon.com's cover scan. Otherwise, it uses whatever is in the ISBN field for Amazon.com's cover scan (assuming you use ISBN-10 with no clutter like "(pbk.)"). If Amazon.com has nothing they return a 1x1 GIF which no one will notice. This way, I can use Amazon for cover images whenever possible.

    My code isn't good because I don't know what I'm doing, but it's a start on the easy stuff, at least. I picked OpenBiblio over Evergreen or Koha because I couldn't get them to run on shared hosting, but I'm liking it a lot because OpenBiblio is simple and much easier to tinker with. Keep up the good work.