nyuuzyou/wikis huggingface dataset:
Permalinks

== Staff Client ==
=== Admin ===
* Links to sysprefs: /cgi-bin/koha/admin/preferences.pl?op=search&searchfield=XXXX
* Circ rules: /cgi-bin/koha/admin/smart-rules.pl?branch=XXXX
* Authorized value category: /cgi-bin/koha/admin/authorised_values.pl?searchfield=XXXX
* Modify patron attribute type: /cgi-bin/koha/admin/patron-attr-types.pl?op=edit_attribute_type&code=XXXX
=== Reports ===
* Create new sql report: /cgi-bin/koha/reports/guided_reports.pl?phase=Create%20report%20from%20SQL
* Show report: /cgi-bin/koha/reports/guided_reports.pl?phase=Show+SQL&reports=XXXX
* Edit report: /cgi-bin/koha/reports/guided_reports.pl?phase=Edit%20SQL&reports=XXXX
* Fix marcxml report: /cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved&op=convert&report_id=XXXX 
=== Patrons ===
* Patron details: /cgi-bin/koha/members/moremember.pl?borrowernumber=XXXX
* Patron notices: /cgi-bin/koha/members/notices.pl?borrowernumber=XXXX
* Patron files: /cgi-bin/koha/members/files.pl?borrowernumber=XXXX 
* Circulation: /cgi-bin/koha/circ/circulation.pl?borrowernumber=XXXX
* Patron accounts and fines: /cgi-bin/koha/members/boraccount.pl?borrowernumber=XXXX
* Patron invoice: /cgi-bin/koha/members/maninvoice.pl?borrowernumber=XXXX
* Patron logs: /cgi-bin/koha/tools/viewlog.pl?do_it=XXXX 
=== Biblio and Items ===
* Biblio detail: /cgi-bin/koha/catalogue/detail.pl?biblionumber=XXXX
* MARC detail: /cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=XXXX
* Add item: /cgi-bin/koha/cataloguing/additem.pl?biblionumber=XXXX 
* Place hold: /cgi-bin/koha/reserve/request.pl?biblionumber=XXXX 
* Edit biblio record: /cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=XXXX 
* Item detail: /cgi-bin/koha/catalogue/moredetail.pl?itemnumber=XXXX
* Circulation log: /cgi-bin/koha/tools/viewlog.pl?do_it=1&modules=CIRCULATION&info=XXXX
* Edit item: /cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=XXXX&itemnumber=YYYY#edititem 
* Links by subscription: /cgi-bin/koha/serials/subscription-history.pl?subscriptionid=XXXX
== OPAC links ==
* Export item as Format XXXX: /cgi-bin/koha/opac-export.pl?op=export&format=XXXX&bib=YYYY 
Format can be utf8, marcxml, among others
=== Opac Holds ===
* Hold for a given biblionumber: /cgi-bin/koha/opac-reserve.pl?biblionumber=XXXX
=== Search ===
The available values for idx can be found in ccl.properties.
* Title: /cgi-bin/koha/opac-search.pl?idx=ti&q=XXXX
* Author: /cgi-bin/koha/opac-search.pl?idx=au&q=XXXX
* Subject: /cgi-bin/koha/opac-search.pl?idx=su&q=XXXX
* ISBN: /cgi-bin/koha/opac-search.pl?idx=nb&q=XXXX
* Series: /cgi-bin/koha/opac-search.pl?idx=se&q=XXXX
* Call Number: /cgi-bin/koha/opac-search.pl?idx=callnum&q=XXXX
* Barcode: /cgi-bin/koha/opac-search.pl?idx=bc&q=XXXX
== Related issues ==
* Bug 20065.
Category:Development
Category:Documentation
Permissions HowTo

= How to add a new user permission =
#Take a look at installer/data/mysql/userflags.sql . Look for the high-level permission that your new permission will be going under and take note of it's `bit` number, or if you're adding a new high-level permission, add it to the end of this page before the ';', incrementing the `bit` number. 
#Add your new permission in installer/data/mysql/userpermissions.sql. The file is in ascending `bit` order (use the `bit` from Step 1), and alphabetical order within the `bit`s. 
#Steps 1 and 2 affect new installs. Now we need to write an atomic update so that existing installs can use this new permission. Make a new file in installer/data/mysql/atomicupdate/ (use the guide Database updates). Include the changes you made in both files from Steps 1 and 2 (or just userpermissions.sql if you didn't edit userflags.sql). 
#Enter the shell and update the database: sudo koha-shell <instancename>perl installer/data/mysql/updatedatabase.pl 
#Edit koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc and add your new permission. This is what will be displayed on the staff interface (members/member-flags.pl). Take special care with the HTML and TT markup and classes used. 
#Your permission should now be visible on members/member-flags.pl! You can now use it in your code to control what features are available for patrons with this permission disabled and enabled.Use it in templates like: [% IF CAN_user_userflag_newpermission %]Or use it in the perl scripts inside the get_template_and_user params like: flagsrequired => { userflag => 1 } OR flagsrequired => { userflag => 'newpermission' }
 
 
Category:DevelopmentCategory:Coding_guidesCategory:Documentation
Place hold on multiple items

==Place a hold on multiple items ==
Howard County Library proposes adding functionality for batch placement of holds in the public interface. 
===Existing functionality===
# Placing holds on a single title from the search results list by clicking the Place Hold link below the title.
# Placing holds on a single title from the full bib record by clicking on the Place Hold link in the right frame.
# Adding multiple titles to a list by doing Select All or by clicking boxes beside each title.
# Adding multiple titles to a cart by doing Select All or by clicking boxes beside each title.
# The ability to email and print from a cart.
===New features===
The new features would incorporate the ability to place holds on multiple items at one time in several contexts.
====From the search results screen====
Currently the only way to place a hold from the search results screen is to select the "Place Hold" link on an individual result. This will take you to a detail page in which the user completes the hold by requesting a particular item (if allowed) or the next available item.
The new approach will keep this mechanism, but will also leverage the checkboxes next to the items. A new "Place Hold" button will be placed next to the "Add to:" selection list. Pressing this button will apply the hold operation to all of the checked items.
The resulting holds page will be redesigned to allow the user to perform the particular-item vs. next-available selection individually on each of the checked items.
As before, pressing the "Place Hold" button on this page will finalize the hold request and display the list of all holds for the current user.
====From a private or public list====
This will be done by adding the capability to
* Place Hold
* Email List
* Print List with various formatting options for creating bibliographies
Details TBD.
====From a cart====
This will be accomplished by adding a "Place Hold" button to the cart.
Details TBD.
Category:Abandoned_RFC
Place hold on multiple items RFC

== Place a hold on multiple items ==
Howard County Library proposes adding functionality for batch placement of holds in the public interface. 
===Existing functionality===
# Placing holds on a single title from the search results list by clicking the Place Hold link below the title.
# Placing holds on a single title from the full bib record by clicking on the Place Hold link in the right frame.
# Adding multiple titles to a list by doing Select All or by clicking boxes beside each title.
# Adding multiple titles to a cart by doing Select All or by clicking boxes beside each title.
# The ability to email and print from a cart.
==New features==
The new features would incorporate the ability to place holds on multiple items at one time in several contexts.
===From the search results screen===
Currently the only way to place a hold from the search results screen is to select the "Place Hold" link on an individual result. This will take you to a detail page in which the user completes the hold by requesting a particular item (if allowed) or the next available item.
The new approach will keep this mechanism, but will also leverage the checkboxes next to the items. A new "Place Hold" button will be placed next to the "Add to:" selection list. Pressing this button will apply the hold operation to all of the checked items.
The resulting holds page will be redesigned to allow the user to perform the particular-item vs. next-available selection individually on each of the checked items.
As before, pressing the "Place Hold" button on this page will finalize the hold request and display the list of all holds for the current user.
===From a private or public list===
This will be done by adding the capability to
* Place Hold
* Email List
* Print List with various formatting options for creating bibliographies
Details TBD.
===From a cart===
This will be accomplished by adding a "Place Hold" button to the cart.
Details TBD.
Category:Abandoned_RFC
Plausible

Plausible Analytics is an easy to use, open source, lightweight and privacy-friendly alternative to Google Analytics. They offer both free self-hosted community version and paid hosted service.
== With opaccredits ==
1. Setup the site in Plausible to get the tracking script HTML snippet. Alternatively if the site is already set up, go to Site Settings -> Review Installation.
2. Copy the snippet, which will look like: <script defer data-domain="library.example.org" src="https://plausible.io/js/script.js"></script>
3. In Koha in the intranet interface search in the global system preferences in Administration for "opaccredits".
4. Add the tracking code in the text field in the raw HTML view.
Now all OPAC pages should be tracked by Plausible.
== With OpacUserJS ==
These instructions mimic the script snippet creation from above within JavaScript and serve as an alternative to the instructions above.
Replace data-domain value with your OPAC's domain name, as configured in the Plausible panel.
Replace plausible.io with your own domain if you're self-hosting and data-api path if you're proxying the API call (useful to evade default ad-blocking of the default script and API paths of the hosted instance).
=== Minimal ===
Default minimal script, with default paths, only need to change library domain if using the hosted version.
const plausible = document.createElement("script");
plausible.setAttribute("src", "https://plausible.io/js/script.js");
plausible.setAttribute("defer", "");
plausible.setAttribute("data-domain", "library.example.org");
plausible.setAttribute("data-api", "/api/event");
document.body.appendChild(plausible);
=== Thorough ===
Script that tracks outbound links and also some extra props, namely: whether user is logged in OPAC and what biblio id and title they were viewing if applicable. Tracking most popular biblios with the users may be pretty useful for librarians and their cataloging decisions.
const plausible = document.createElement("script");
plausible.setAttribute("src", "https://plausible.io/js/script.outbound-links.pageview-props.js");
plausible.setAttribute("defer", "");
plausible.setAttribute("data-domain", "library.example.org");
plausible.setAttribute("data-api", "/api/event");
plausible.setAttribute("event-is_logged_in", (!!is_logged_in).toString());
{
 const biblioTitleEl = $("h1.title[property=name]");
 const biblioIdEl = $("div#catalogue_detail_biblio");
 if (biblioTitleEl.length === 1 && biblioIdEl.length === 1) {
 const biblioTitle = biblioTitleEl.text();
 const biblioId = +biblioIdEl.attr("data-biblionumber");
 //console.log({ biblioTitle, biblioId });
 if (biblioTitle && biblioId > 0) {
 plausible.setAttribute("event-biblio_title", biblioTitle);
 plausible.setAttribute("event-biblio_id", biblioId);
 }
 }
}
document.body.appendChild(plausible);
== With plugin ==
There's no dedicated plugin as of now.
== Weblinks ==
* Official Plausible.io site
* Official documentation
* Live demo of analytics page
* Source code on GitHub
Category:Tips_&_Tricks
Post major release tasks

Some things to be done after each major release when the new release team takes over:
= Bugzilla =
* Add new version to the Version pull down in Bugzilla.
* Add new RM, RMaints and QA Team as CC to security bugs so they automatically get informed when a security bug is filed. Requires admin access to Bugzilla.
== Bug Clean Up ==
After every release, it's time to do some housekeeping in Bugzilla. For the past few years the following procedure has been followed:
# Create saved searches with the criteria below.
# Check search results and adapt your criteria if necessary
# Create a backup by exporting search results as CSV files
# Important: Ask Bugzilla admin to turn off email before performing bulk changes! 
# Perform bulk changes.
# Important: Ask Bugzilla admin to turn email back on!
Changes to be made:
* The bug is RESOLVED (FIXED, WONTFIX, INVALID, REMIND) and was changed longer than one release cycle ago (count days from last major release before the current one) => CLOSED.
* The bug is 'Pushed to stable' and was last changed longer than one release cycle ago => CLOSED FIXED
* The bug is 'Pushed to main' and was last changed longer than one release cycle ago => CLOSED FIXED
* The bug is 'Pushed to main' or 'Pushed to stable' or 'Pushed to oldstable' or 'Pushed to oldoldstable' and was not touched in the last 3 months (changed between x and y days) => RESOLVED FIXED
= Jenkins =
* Add new version to Jenkins
* Add accounts for the new RM and RMaints
* Setup notifications for the new RM and RMaints
= Manual =
* Create a branch for maintenance of manual for the current stable version
* Ask rangi to update the "latest" symbolic link (https://koha-community.org/manual/latest/en/html/)
= Translate =
* Add the next version to the translate server for both Koha and Manual projects.
= Wiki =
* Update the meeting page templates
** Development
** General
** Documentation
= Website =
* Update front page with new version
* Update documentation page with links to new manuals (make sure they have been generated!)
* Add users for the new rmaint/rm roles
= Mailing List =
* Announce the releases
= Publicity = 
* Announce the release to librarytechnology.org
= Release team =
* Send SSH public key to Chris/rangi or Martin/ashimema for push access to the community repo (branch-specific and security repo)
* Send SSH key to Galen/gmcharlt for access to download.koha-community.org
Category:Development
Category:Release_Management
= Schema =
Add new version to https://schema.koha-community.org
PostgreSQL

The intention of this Wiki page is to collect information on how to run Koha on PostgtreSQL.
There is also a Bug open for this: [Bug 7365]
= The Main Problem: MySQLisms =
The main problem with running Koha on PostgreSQL are the many MySQLisms, that is SQL fragments that use MySQL extensions and that are non-standard SQL. The use of MySQLisms must be avoided at all cost. This page should help you to reach that goal.
= Idioms =
What 	MySQL 	 PostgreSQL 	 Neutral SQL 	C4:DBQ Function 	DBH Function
The current date 	CURDATE(), CURRENT_DATE() 	now()::date 	 CAST(now() AS date)	n/a 	n/a
Colum names that are keywords	`colname` 	"colname" 	?? 	n/a 	n/a
Show columns in a table 	SHOW COLUMNS FROM, DESCRIBE	SELECT column_name, data_type FROM information_schema.columns WHERE table_name ='tablename'	n/a 	tableColumns("<tablename>")[1]	column_info()
== Remarks ==
[1] Actually we use the following statement to be consistent with the result set usage in Koha:
 SELECT column_name as "Field", data_type as "Type" FROM information_schema.columns WHERE table_name ='tablename'
= C4:DBQ - Creating SQL Query Fragments on the Fly =
The proposed solution for idioms that do now have a portable form (patch pending) is to
replace non-portable static SQL code by
function calls that return database specific SQL fragements as strings to be concatenated
with the static SQL code. This method is minimally invasive and does not need a paradigm
change:
 my $dbq = C4:DBQ->new();
 $dbh->do("SELECT " . $dbq->today() . " AS today");
Here, the (fictious) function $dbq->today() would return 'CURDATE()' for MySQL or 'now()::date' for
PostgreSQL. Please note that this is a bad example since 'CAST(now() AS date)' would
work on either database.
= Code Organization =
* C4/DBQ.pm: Factory "class" to create a database specific object:
* C4/DBQ/MySQL.pm: MySQL implementation
*C4/DBQ/PostgreSQL.pm: PostgreSQL implementation
* t/DBQ.pl: Unit test
C4:DBQ->new() Returns either a MySQL or PostgreSQL object, depending on which database has
been selected. If more database types are supported, it will return the respective object
type.
Category:Development
Preparing your system

== Preparing your system ==
In order to run Koha, your server will need the following prerequisites: 
* A Linux server – Debian or Ubuntu is what most people use
* Apache
* MySQL (up to version 5.6) or MariaDB
* Perl
For administration purposes you will need:
* Root on the server (or a user capable to do all operations as sudo)
* A reasonable level of comfort with the command line
* Database administration skills (Create, delete, and add users to a MySql database)
Build Tools: Tools necessary to install the rest of the dependencies.
Debian Lenny:
 apt-get install build-essential, ssh, locate, sudo, ntp
Debian Squeeze:
 apt-get install build-essential, ssh, locate, sudo, make, ntp
Ubuntu:
 apt-get install build-essential, ssh, locate, sudo, ntp
Category:Documentation
Category:Installation
Profiling with Devel::NYTProf

“What is taking so long?” is not easy to answer. To spot quickly a problem in the source code, you can be helped by a profiling tool. On StackOverflow Brian D Foy suggests to use Devel::NYTPROF (and DBI::Profile for databases queries benchmark). Here is a quick how to of Devel::NYTPROF with Koha.
== Make Koha CGI scripts generates profiling data collection ==
Install the module :
 sudo apt-get install libdevel-nytprof-perl
Devel::NYTPROF write an output file, by default in the directory where the script is executed. You can change the location by providing a NYTPROF variable. Since the koha scripts are launched from Apache, you can add the variable in your apache configuration :
 ...
 SetEnv KOHA_CONF "/etc/koha/koha-conf.xml"
 SetEnv PERL5LIB "/usr/share/koha/lib"
 SetEnv NYTPROF "file=/tmp/nytprof.out:addpid=1:endatexit=1:stmts=0"
 ...
And reload the server:
 sudo service apache2 reload
Now, when you want to profile a CGI script, just change the shebang this way:
 #!/usr/bin/perl -d:NYTProf
And load the script as usual in your browser. Your /tmp should soon be populated with nytprof.out.[0-9]+ files (the number at the end is the PID, so you can have multiple profiling files for the same CGI).
== Mine the data collection ==
You can generate a whole web site showing the script execution in details, with all calls and the time they took :
 nytprofhtml -f <nytprof.out.[0-9]+> --open
It should open your browser in the output directory (defaults to nytprof). 
Alternatively, if you don't have a browser to hand, you can just output to a directory and then open "index.html" later:
 nytprofhtml -f <nytprof.out.[0-9]+> -o ~/nytprof
The HTML pages are handy and show directly the bad guys :
You can navigate trough the code with timing details :
== What else? ==
You can plug to mod_perl with Devel::NYTProf::Apache if your using mod_perl.
Category:Development
Proposal for QAM 18.04 kfischer

I propose to reinstate the role of Quality Assurance Manager as a coordinating and organizing role. This would include:
* Keeping an overview of ongoing work in the different areas and keeping an eye on the different queues
* Communicate with the release manager about priorities, coordinate efforts, try to make sure important things are taken care of
* Alert QA team members about things that need to be taken care of urgently (security, blocker)
* Identify recurring problems and bring them to discussion within the QA team and in the developer meetings
* Collecting and documenting information about the QA process and testing (exceptions for packaging manager, tools, etc.)
* Try and recruit second sign offers for bugs in sensitive areas or bugs that need specific expertise
* Coordinate efforts on bigger dependency trees
Some other ideas for discussion:
* Create an intro to QA wiki page to collect information on process and approaches to QA
* Recruit topic experts for long standing bugs for out-of-core-team QA
* Assign a designated QA person for big dependency trees
* Work with the QA team to set some team goals to get an idea on how we understand the work, what expectations we have, ...
Also: QA, try to shake out all the bugs before things go into master.
Proposal for REST API maintainer tcohen

* REST API maintainer proposal *
Last year I've been trying to keep track of the work people did towards a REST API for Koha. I tried to resurrect valuable work from everyone and by the end of the year some technical decisions were already made so we started a process for writing RFCs for each endpoint and conducting votes on them. It was very useful as many improvement suggestions were gathered and the result is we have things to work on, with a clear direction.
My idea is to go a step further and formalize this role and take care of it as part of my daily workload.
The main goal is:
* Ease communication
* Don't leave anyone's opinion out of consideration
* Encourage people willing to contribute, offer help when needed, and weight in when required to avoid deadlocks
* Prevent bugs starvation by actively getting info on the status for them
* Document different requests about possible integrations that require endpoints, and provide suitable decision-making mechanisms (Dev meetings? REST API meetings?)
* Have a useful REST API for 18.11
Proposal for RM 18.11 kidclamp

I (Nick Clemens aka kidclamp) propose to serve as Release Manager for the development cycle of the 18.11 version of Koha. 
My goal for this release would be to push ahead on many of the big things going on: ElasticSearch, REST Api, Refactoring etc. and want to push as much as possible as early as possible. I would really like to see Stock rotation, Mana and other big bugs get into master early in this release so they can be thoroughly tested.
Kohadevbox has been an amazing tool for developers, and I think if effort is put into Koha testing docker that infrastructure will make getting a devbox and using the sandboxes even easier and I will encourage the work on that front and the adoption of docker as a tool.
For pushing I will rely on the QA team for their code reviews, I will follow up to the best of my abilities, and I will also rely on the developers involved in bigger projects to keep an eye on bugs affecting them and comment/contribute as necessary.
I will devote one full day each week to RM duties, as well as following up mornings during the week and where I can. Kyle, Brendan, Tomas and Joubu have all volunteered to help as assistants, and I will lean on them for pushing and review and to keep on top of the queue.
I think Katrin has done a wonderful job keeping the QA team focused and moving, and I will poke and prod individual bugs/members to keep things going and get their input where necessary.
I will strive to be available and active in channel as well as the mailing lists, and to respond to any questions, so always feel free to reach out to me.
I have learned a lot since getting involved in the community, and I still have more to learn, but I think the biggest lesson has been that no one can do this alone, so as RM I will strive to keep people involved and foster newcomers to getting involved with the project.