Quick Tip – What to avoid when adding news items to your Koha OPAC

Avoiding common errors while using Koha – setting the library name correctly for news.

The News tool available in the Home -> Tools -> Additional tools section of the Koha staff client allows us to publish news and updates across – (a) OPACs (b) staff client and (c) printed slips generated by the library.

Being a handy way to publish library related updates, librarians like to use it. However, there are a few things that we need to keep in mind when doing this. For starters, we should not be logged in into the staff client as Koha’s database administrator; we must be logged in either as a superlibrarian OR as a library staff user with access rights to the News tool. The next thing to understand is even more important – the “Display location” and “Library” drop-downs.

Earlier today, we received a ticket on our online helpdesk –

“We have written a new notice but nothing is displayed on the opac.”

When we cross-checked, we found that to be true. So we checked the new notice to find out what may be the problem. And sure enough it was exactly what we had expected had happened. The notice / news was set to display on the OPAC of client-partner’s defined library branch, instead of being set to “All libraries”.

Now you may ask how can this be wrong??? Well, up until an user logs in via the OPAC, the “library (branch)” is *NOT* set as Koha has no way of knowing which branch (since a Koha instance can cater to multiple library branches of an organisation) of the library the user is looking at at the moment. The notices / news would have showed up *if* the user had logged in into *that* defined branch in this case.

So, the logic to keep in mind while publishing a news item on the OPAC – select a specific branch for display *ONLY* if you want the notice to be branch specific, otherwise, keep it generic as “All libraries”.

Once this was corrected, the news defined showed up just fine as can be seen below.

New and improved SLA management from L2C2 Technologies

Adding weekly SLA Management Reports for our hosted accounts of Koha ILS.

Starting this January, on every Monday (first day of the week for us) we will be mailing out weekly service level management reports and updates to our hosted Koha ILS client partners. We already have phone calls and the online support helpdesk covered and are now trying to figure out how to manage the instant messaging requests via Whatsapp, Telegram, Twitter and FB Messanger etc.

While the LIS professionals working with us from our client partners’ side already know where they stand with their SLA status, often the management is not fully aware of the work being done. With this new initiative we hope for greater transparency in our communication with our clients. Enclosed below are sample of these reports with the contact details reducted.

Koha ILS workshop at ICAR-NAARM, Hyderabad, Feb 5 – 9, 2018.

Indranil Das Gupta, Co-Founder, L2C2 Technologies will conduct sessions at the upcoming ICAR-NAARM organised Koha workshop.

Indranil Das Gupta, Co-Founder, L2C2 Technologies has been invited by ICAR-NAARM as resource person and faculty at ICAR-NAARM’s upcoming Koha ILS workshop in Hyderabad, India.

About the program

The ICAR – National Academy of Agricultural Research Management (NAARM) is organizing a training programme on Koha for library staff of ICAR during February 5-9, 2018. Dr. S.K. Soam, Head, ICM Division, NAARM and Dr. N. Srinivasa Rao, Principal Scientist are the programme directors for this training. They are expecting about 35 librarians to participate from various ICAR institutes in this training programme

About ICAR NAARM

The National Academy of Agricultural Research Management (NAARM) is a national-level research center located in Hyderabad, Telangana, India. It was established by the Indian Council of Agricultural Research (ICAR) in 1976, to address issues related to agricultural research and education management, in India. In the initial years, the Academy primarily imparted foundation training to the new entrants of the Agricultural Research Service of ICAR.

Subsequently, its role expanded to include research, capacity building of senior professionals of national and international NARS in agricultural research and education management, and policy and consultancy support to NARS. The Academy also renders services for building IP portfolios like patents and geographical indications to various stakeholders including farmers and scientists.

About L2C2 Technologies

L2C2 Technologies is a leading member of the global Koha developer community from India. Aside from upstream contribution, L2C2 Technologies have been active in the global Koha Release team for version 3.22, 16.05, 16.11 and 17.05. L2C2 started cloud hosting of Koha ILS in eastern India and have to its credit the first fully hosted Koha ILS having passed NAAC inspection in entire eastern India. We collaborate globally with people who write and publish Koha ILS software, thus ensuring international quality support while always being at the forefront of latest Koha development.​

[FOR IMMEDIATE RELEASE]

Queen Mission School Salt Lake your future catalog thanks you :-)

A high school adopts the use of authority records in their Koha ILS based library catalog.

Client-partners who work with L2C2 Technologies know how fond we are of authority records. Without basic authority control of the personal names and subjects, catalogs over times end up having a mish-mash of variously spelled names and subjects which are essentially one and the same. One of the particular horror stories from the time when we started cloud hosting of Koha in Eastern India in 2015 was a case when we encountered the subject heading of “Commerce” spelled with 19 different spellings in the catalog and it’s bengali variant “বাণিজ্য” spelled in 3 more ways. And that was just one of those things. The author name variations of the same author were even greater horrors. Yes, as you can tell by now, we feel rather strongly about the use of authority records, which essentially help create better quality catalog data and also provide an easy way to update and manage spellings of headings.

It makes us happy that the three young women working on the cataloging project of Our Lady Queen of the Mission School, Salt Lake have taken heed of our suggestion to use authority files since they are starting from scratch. They began with the most simple personal name authorised heading for authors and editors of the books in the school’s collection. This work is being carried out by Priya Show and Shreya Mullick under the leadership of Swarnali Mitra, Librarian. Priya had earlier participated a departmental workshop I had helped conduct at the Department of Library & Information Science, Calcutta University. For Shreya and Swarnali, I am working with them for the first time. But luckily for their project, all these young ladies are showing that they have what it takes – the vision and eagerness to do things the right way. Wishing them all the best.

Displaying unique title and volume count on the Koha staff client

An upgrade-friendly way to show unique title and copies’ count using Koha’s SQL reports in tandem with Koha’s Reports web service API, JSON formatted data and some Javascript.

Kia ora!

Last week my good friend Dr. Gautam Sarma, Asst Librarian, K.K. Handique State Open University in Assam posed an question on the Koha Users forum on Facebook. He wanted to know what was the easiest way to view the total count of unique titles as well as total number of copies (item holdings) in his Koha catalog.

Given that he comes to us from a SOUL user’s background, this is a reasonable demand. SOUL developed and marketed by Inflibnet does show this information at a glance, especially when using the cataloging module. Similarly, so does e-Granthalaya, another LMS developed by NIC, Govt of India. The following screenshot snippets show how this information is displayed for SOUL v2.0 and e-Granthalaya 4.0 respectively.

soul

egrant

In Gautam’s own words he was looking for something that would allow him to:

hurriedly say that how much data we have by entering our ILS

While Koha’s SQL reporting facility makes finding this information a breeze, thanks to this ready-made SQL report by Nicole C. Baratta, it does not immediately allow the users to have the sort of heads-up view that SOUL and e-Granthalaya allows. A library staffer have to go to Reports -> Guided Reports -> Use Saved and then finally manually select the actual report and run it to see the unique title and copy count statistics.

At L2C2 Technologies we have been doing some things like these for our client-partners. So I promised Gautam that I will soon post about it. And as it would happen, yesterday Mr. Kalipada Jana, Librarian, Basanti Devi College and a client partner wanted the same facility for his hosted instance’s staff client. We decided to use the Basanti Devi College library as a live use-case (since they are currently doing retro-conversion) and document the same so that other users may also be able to benefit from the same.

Concepts – or what makes it all work

Koha since long have provided a set of HTTP based web service API. According to the World Wide Web Consortium (W3C) – the global standards body that defines anything and everything related to the web, a web service is “a software system designed to support inter-operable machine-to-machine interaction over a network”.

Among the various things Koha’s web services API allow includes the Reports web service, which allows an SQL report’s data to be made available in JSON format, as long as the report is marked as “public“. A public report is accessible via a URL that looks like this: http://MYOPAC/cgi-bin/koha/svc/report?id=REPORTID.

basanti-stats1

In this case, we called the report as a public report using the reports web service via https://bdcl-staff.l2c2.co.in/cgi-bin/koha/svc/report?id=6&annotated=1.

The SQL query being executed by the call was :

SELECT homebranch, count(DISTINCT biblionumber) AS bibs, 
       count(itemnumber) AS items 
FROM items 
GROUP BY homebranch 
ORDER BY homebranch ASC

The JSON data (which thanks to the annotated=1 querystring parameter) was returned as the following key-value pairs : [{"bibs":"1374","homebranch":"BDCL","items":"2359"}].

The solution

With the report (in this case report id #6) returning the branch-wise unique title and copies information in JSON format, it was now only a small matter of putting together some JavaScript so that the information could be displayed in a more human-friendly format on the staff client. The following JQuery snippet was all that was required to be placed into BDCL’s IntranetUserJS system preference to get our desired result.

$(document).ready(function() {
    if ( $('#main_intranet-main').length ) {
    $.getJSON("https://bdcl-staff.l2c2.co.in/cgi-bin/koha/svc/report?id=6&annotated=1", function(data) {
        var branches = data[0].homebranch;
        var bibs = data[0].bibs;
        var items = data[0].items;
        $('div.newsitem').prepend('<div class="newsitem" id="mystats"><table class="table table-striped" style="width: 100%; background: none;"><thead><th colspan="3" style="text-align: center; font-weight: bold; padding: 8px; line-height: 1.42857143; vertical-align: middle; text-transform: uppercase;">Library Statistics</thead><tbody><tr><td><strong>Branch</strong></td><td><strong>Unique titles</strong></td><td><strong>Total Copies</strong></td></tr><tr><td class="text-center">'+branches+'</td><td class="text-center">'+bibs+'</td><td class="text-center">'+items+'</td></tr></tbody></table></div>');
    });
    }
});

And voila! Houston! We have touchdown! 🙂

koha-count

Hope this post helps you at your library. Happy hacking!

Koha and the “magic” of XSLT – Part 2 : Show accession no. in OPAC results page

How to add 952$p (typically the accession no.) to your OPAC’s Results page display.

About 6 months back, we had posted about “Koha and the “magic” of XSLT : displaying new MARC fields on the OPAC“. This post can be thought of as its Part 2 as it introduces a couple of new concepts – (a) looping through a list of repeatable values and (b) punctuating these values for correct display. If XSLT or Koha with XSLT sound like something you are hearing for the first time, we strongly suggest that you first read the Part 1 first (see above).

The Backstory

Our tutorial style blog posts are usually the result of addressing some sort of user demand. In this case, this post came about because of Mr. Kalipada Jana, Librarian at Basanti Devi College, Kolkata. Yesterday he had filed a ticket on our helpdesk saying that he would like accession number(s) attached to each bibliographic record to be displayed on the OPAC results page. This is something that Koha does not do by default. But having seen such a display elsewhere he wanted to have the same.

The default Results page

chrome_2017-11-28_22-58-45

What the user wanted

chrome_2017-11-28_22-57-56

The Process

Koha stores it holdings item identification in MARC21 tag 952$p. The user here was using this field to store the individually unique accession numbers of their items in holdings. Now a bibliographic record may quite easily have multiple copies with separate accession numbers. So the XSLT snipped we needed must do the following:

  1. Handle looping over to display repeated 952$p (when there were multiple copies of the same book.
  2. Separate the accn nos. with “commas” if there where multiple copies of a book and after the final accession number terminate the line with a period instead of a comma. And if there was only a single copy, then instead of comma use a period.
  3. .

  4. Suppress this accession no. display for bibliographic records that do not have any holdings.

The code

<!-- L2C2 - 2017-11-28 adding accn no to results page 952$p -->
<xsl:if test="marc:datafield[@tag=952]/marc:subfield[@code='p']">
<span class="results_summary accn_no">
<span class="label">Accession number(s): </span>
    <xsl:for-each select="marc:datafield[@tag=952]">
        <xsl:value-of select="marc:subfield[@code='p']"/>
        <xsl:choose>
            <xsl:when test="position()=last()">
                <xsl:text>.</xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:text>, </xsl:text>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:for-each>
</span>
</xsl:if>

In the first line (not the comment) we check if the MARC record has a 952$p field and sub-tag. If it does only then the rest of the code is executed. This is what helps us to suppress this new display for records without any accession numbers in its 952$p. The next couple of lines push out the necessary HTML code since the record has at least one accession number i.e. 952$p. In the subsequent two lines immediately after, we set up two loops. The first one loops through all the 952 (holdings) field in the bib record, while the inner loop looks up the $p sub-field. The inner most bit i.e. <xsl:choose><xsl:when test="position()=last()"> handled the punctuation. First if it checks if the currect MARCXML 952$p sub-node is the last one, if so it places a period and terminates the line. Otherwise, it places a comma as punctuation between the multiple accession numbers.

This code was added into the custom file which we named as MARC21slim2OPACResults-bdcl.xsl. This file is same as the default MARC21slim2OPACResults.xsl file, the only addition being the snippet given above. In order to get Koha to start using our file instead of the default, we placed the full path of our new file into the OPAC system preference – OPACXSLTResultsDisplay.

See it in action

If you want to see this XSLT in action, click here.

Vidyasagar College for Women moves to Koha on cloud with L2C2 Technologies

One more academic library moves from SOUL to Koha ILS

We are pleased to welcome Vidyasagar College for Women Central Library to L2C2 Technologies’ cloud hosted Koha ILS platform. The college, so far an user of SOUL software from INFLIBNET is making this move under the leadership of the librarian Smt. Moumita Ash. In the coming days, their catalogue data will be moved to Koha so that a complete OPAC can be presented to its users 24/7.

About the college

Vidyasagar College for Women as a full fledged separate college affiliated to the University of Calcutta was founded in 1960. However, its history went back to 1931 when a separate womens’ section of the Vidyasagar College was started to cater to the educational requirements of the women folk of Kolkata. Its classes were held in the morning. The womens’ section was temporarily brought to a stop during the second world war. Since 1947, however, expansion in all branches of its activities took place steadily and regularly. New subjects were introduced and a group of dedicated teachers inspired confidence among the students who enrolled in large numbers. Since its foundation in 1960, Vidyasagar College for Women committed itself to carry forward the ideals and principles of Pundit Iswar Chandra Vidyasagar, the great educationist and social reformer of the 19th century. At present the college consists of three campuses. (From the college website)

About the library

The college maintains two libraries i.e. (a) the central library is open to all users of the college between 8 am – 2 pm, Monday to Saturday. The library has a physical collection of over 23,000 documents, along with online subscriptions to electronic resources; (b) the seminar library is located on the main campus of the college. Catering mainly to Humanities departments, the seminar library has over 1000 reference books. It remains open to users based on the college’s regular timings and academic calendar.

About the OPAC

The OPAC is located at https://vcfw-opac.l2c2.co.in. Along side providing 24/7 access to the catalog, it also provides the library personnel with advanced usage analytics based on the open source Piwik software. It also provides for a real-time one-to-one chat option with the library staff, whenever they are logged in for “Ask A Librarian” function. As a standard security best practice the OPAC runs over HTTPS rather than plain vanilla HTTP, thereby protecting the traffic between users browsing the OPAC and the server by using industrial grade “A” rated SSL certificate.

Running a public z39.50 service with 100% reliability

Over 2 months now, we’ve been running the 5th public z39.50 server from India with 100% host reliability.

Earlier this year on April 20th, we had shared with our readers that FMIRO CCU’s public access z39.50 service run by L2C2 Technologies had achieved 100% host reliability (according to irspy.indexdata.com) and in the process had become the 5th Indian entry into the IRSPY’s global directory of open access z39.50 servers.

We are happy to inform that 2 months on, we have managed to run the server without a single service drop and have continued to maintain our 100% host reliability status. For us this has been a learning exercise and we hope this will encourage more Koha users across India to start opening up their catalogs for copy cataloging by their fellow catalogers.

Host connection reliability

Host connection reliability measures the reliability of the target only in its ability to respond to connections: the display indicates the number of successful connections in the last two months, the total number of attempted connections in that time, and the percentage of successful connections. For example, reliability of 9/15 = 60% indicates that fifteen attempts have been made to connect to the server in the last two months, of which nine (60%) have been successful. [1]

About IRSpy

IRSpy maintains a global registry of information retrieval targets, about 1295 as per recent count (http://irspy.indexdata.com/stats.html), supporting protocols like ANSI/NISO Z39.50 (ISO 23950) and SRU/SRW web services.

About Index Data

Short answer: The guys who publish the Zebra indexing engine and YAZ toolkit and software libraries.

Long answer: Since 1994, Index Data has offered software development, consulting and integration with a focus on search. Our pioneering involvement in open source and open standards dates back to the first release of the YAZ toolkit for Z39.50 in 1995. [2]

References

[1] IRSpy help: info/reliability

[1] About Index Data

Managing patrons with same permanent & local address

Setting your borrower’s local address same as their permanent address with just a single click during patron entry into Koha ILS.

Often folks when unable to find some nifty feature that was present in their erstwhile LMS but not there in Koha, is found to be exclaiming – “But we can’t do that with Koha!”. Well, we have news for you – Koha is open source and that means, you can build / modify the parts that you need or are missing. But you do not know how to do that. Well… *that* is not really Koha’s problem. But fear not, if you are willing and have the aptitude for poking around code you can do it too. There are plenty of open access resources that show you how to do so, just waiting for you to pick up and start working on your skills. After all, it is said:

If you give a hungry man a fish, you feed him for a day, but if you teach him how to fish, you feed him for a lifetime.

Why this post

At L2C2 Technologies, we work with a lot of academic libraries where they need to record both the permanent as well as local address of their students. Koha allows for recording more than a single address for a patron since donkey’s years. If you look at the schema of the borrowers table in the Koha database, you will see that there are fields to record both the primary address as well as alternate address. These two set of fields fit nicely into our permanent and local address requirement.

2017-06-19_01

However, the library staff often complain that it is useless extra work to re-enter the same data over in both set of fields as many users often have one and the same address for both. As a result, we are sometimes asked how to cut down this extra work. In this post, we are going to share one of the ways by which you too can do the same, should you need to do this.

Choosing our tools

All we use are snippets of JavaScript, jquery and css to achieve our objective. All of which go in into the Koha database as part of the IntranetUserJS system preference. We do not touch any template file or change any underlying PERL code. This way our tweak is guaranteed to survive Koha version upgrades without any further effort on our part.

The steps… as easy as 1-2-3

Since we do not want to re-type the same information, the only option is to copy it from first set of fields and that what we do by adding a checkbox HTML form input element. We give this checkbox the id copypermaddress and insert this into the DOM just before the first li element belonging to the parent fieldset memberentry_address on the Add Patron screen.

$('<li><input type="checkbox" name="copypermaddress" id="copypermaddress" value=""><label for="copypermaddress">Same as permanent address:</label><div class="hint">Click to copy permanent address data</div></li>').insertBefore(' #memberentry_address > ol > li:first-child ');

While the above insertion gets us the following screen, it still does not do anything i.e. if you clicked the checkbox, nothing would happen yet. In the next step we cover that.

2017-06-19_02

So we add a listener that will wait for state-change of the checkbox. In plain English, that means it will detect when a user clicks that checkbox and then based on whether it was selected or unchecked, appropriate action would be taken. And that exactly what happens below. The first part goes into action if the checkbox was checked and the part coming after the else kicks in when it is unchecked. In the first instance we copy over the values from the permanent address field and in the second part we undo the copy and blank out the local address fields.

$(document).ready(function(){
$('#copypermaddress').change(function() {
  if(this.checked) {
    $('#B_address').val($('#address').val());
    $('#B_address2').val($('#address2').val());
    $('#B_city').val($('#city').val());
    $('#B_state').val($('#state').val());
    $('#B_zipcode').val($('#zipcode').val());
    $('#B_country').val($('#country').val());
  } else {
    $('#B_address').val('');
    $('#B_address2').val('');
    $('#B_city').val('');
    $('#B_state').val('West Bengal');
    $('#B_zipcode').val('');
    $('#B_country').val('India');
  }
});
});

In the two following screenshots we get to see how exactly this works. In the first one, only the permanent address has been added. While in the second screenshot, we see how the data has been copied over when the checkbox is clicked.

2017-06-19_03

2017-06-19_04

References

  1. .insertBefore()http://api.jquery.com/insertbefore/
  2. :first-child Selectorhttps://api.jquery.com/first-child-selector/
  3. .change()https://api.jquery.com/change/
  4. .val()http://api.jquery.com/val/
  5. Koha DB Schema – http://schema.koha-community.org/master/

JQuery quicktip : Using Patron Attribute fields without double rowed textarea boxes

A JQuery quick tip for Koha ILS

Often we are have clients who want to capture additional data for their patrons. For schools and colleges, this typically includes demographic details, roll numbers, program enrolled etc. The Koha-friendly way to do is by using Extended Patron Attributes aka custom fields for patron data.`

2017-06-17_03-30-18

The thing about these patron attribute fields is that if these are expecting textual data input, Koha uses the textarea HTML element for them. Which is fine, except the textarea elements are sized to 2 rows by default. This something that confuses some users who expect to see an input element instead. So, we decided to adopt a middle way solution – to reduce the textarea element’s rows attribute from 2 to 1.

JQuery to the rescue

As always we turn to trusty jquery which makes this something ridiculously easy thing to do. Here is the code snippet:

$(document).ready(function(){
  if ($('#pat_memberentrygen').length) {
    var tareas = $('textarea[id^=patron_attr_]');
    for (var i=0; i < tareas.length; i++) {
      var t = $(tareas[i]);
      var tarea_reset_rows = t.attr('rows',1);
    }
  }
});

We plug that code into our IntranetUserJS system preference and we are good to go! 🙂 The screenshot below shows the change it brings to the patron data entry UI.

2017-06-17_03-31-01

Code explained

In the first line (i.e. the one starting with if) we check if we are actually on the patron member entry page. Next we create a JS array of only the textarea element on *that* page, *which* have an id that begins with patron_attr_. And finally we loop through that array and change the rows attribute of each textarea fields whose reference is stored in the array.