Skip to content

LMSCloud/LMSRoomReservations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LMSRoomReservations

OPAC Access

The plugin automatically creates a Koha Page during installation that provides the room reservation interface.

Access URL

After installation, the room reservations page is available at:

/cgi-bin/koha/opac-page.pl?code=lmscloud-roomreservations

Koha Page System

The plugin uses Koha's built-in Pages feature (Additional Contents) to create an OPAC-accessible page. This approach:

  • No Apache configuration required - Works immediately after plugin installation
  • Integrated with Koha - Full access to Koha's OPAC theme, navigation, and authentication
  • Easy to maintain - Page content is managed via the plugin's install/uninstall hooks

Adding Navigation Links

To make the room reservations page easily discoverable, you can add a link to it in various ways:

  1. OpacNav System Preference: Add this HTML to the OpacNav system preference:

    <li>
      <a href="/cgi-bin/koha/opac-page.pl?code=lmscloud-roomreservations"
        >Room Reservations</a
      >
    </li>
  2. OpacMainUserBlock: Add a prominent link on the OPAC home page

  3. Custom OPAC template: Modify your OPAC theme to include a navigation link

Legacy Apache Configuration (Deprecated)

Note: The following Apache configuration is no longer required as of version 4.8.5. It is kept here for reference only.

Click to expand deprecated Apache configuration

The old approach used Apache ScriptAlias to directly access calendar.pl:

ScriptAlias /roomreservations "/var/lib/koha/INSTANCE/plugins/Koha/Plugin/Com/LMSCloud/RoomReservations/Opac/calendar.pl"
Alias /plugin "/var/lib/koha/INSTANCE/plugins"

<Directory /var/lib/koha/INSTANCE/plugins/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

This configuration is no longer necessary and can be removed.

Submodules

This project uses Git submodules to share code across LMSCloud plugins:

  • Koha/Plugin/Com/LMSCloud/Util/ - Shared utility modules (Pages, MigrationHelper, I18N)
  • src/components/custom/LMSCalendar/ - Shared calendar component

Important: After cloning this repository, initialize submodules with:

git submodule update --init --recursive

For detailed information on working with submodules, see SUBMODULES.md.

Build

  • To use the build scripts in package.json you'll need package-kpz in your PATH.

Testing

Seeding Test Data

For development and testing, you can seed the database with sample rooms, equipment, and open hours:

just seed

This will create:

  • 5 sample rooms (Room 101, Room 202, Study Room A/B, Auditorium)
  • 5 equipment items (Projector, Whiteboard, Video Conference, Laptop, Microphone)
  • Equipment assignments for each room
  • Open hours (Monday-Friday, 9am-5pm)

Note: This is for testing only and should not be used in production. The fixtures are located in testing/fixtures/ and are not included in the production build.

Message Templates

ROOM_RESERVATION

INSERT IGNORE INTO letter ( module, code, branchcode, name, is_html, title, message_transport_type, lang, content ) VALUES (
    'members', 'ROOM_RESERVATION', '', 'Raumreservierungsbenachrichtigung', 1, 'Reservierung eines Raumes', 'email', 'default',
'<html>
  <head>
    <style>
      h2 {
        text-align: center;
        font-size: 24px;
        font-weight: bold;
        margin-bottom: 20px;
      }
      h3 {
        font-size: 18px;
        font-weight: bold;
        margin-bottom: 10px;
      }
      span {
        font-size: 16px;
        margin-bottom: 5px;
        display: block;
      }
      .container {
        width: max-content;
        text-align: center;
        margin: 0 auto;
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
      }
      .card {
        background-color: #fff;
        border: 1px solid #ddd;
        border-radius: 5px;
        box-shadow: 0px 2px 10px 0px rgba(0,0,0,0.1);
        padding: 20px;
        margin-bottom: 20px;
      }
      .footer {
        text-align: center;
        font-size: 14px;
        margin-top: 20px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h2>Ihre Raumreservierung wurde bestätigt</h2>
      <div class="card">
        <h3>Ihre Angaben</h3>
        <span>Name: [% user %]</span><br>
        <span>Raum: [% room %]</span><br>
        <span>Von: [% from %]</span><br>
        <span>Bis: [% to %]</span>
      </div>
      <div class="card">
        <h3>Ihre gebuchte Ausstattung</h3>
        <span>[% booked_equipment %]</span>
      </div>
      <div class="card">
        <h3>Zeitpunkt der Bestätigung</h3>
        <span>[% confirmed_timestamp %]</span>
      </div>
      <div class="footer">
        Mit freundlichen Grüßen,<br>
        Ihre Bibliothek
      </div>
    </div>
  </body>
</html>'
);

ROOM_CANCELLATION

INSERT IGNORE INTO letter ( module, code, branchcode, name, is_html, title, message_transport_type, lang, content ) VALUES (
    'members', 'ROOM_CANCELLATION', '', 'Raumreservierungsstornierungsbenachrichtigung', 1, 'Stornierung der Reservierung eines Raumes', 'email', 'default',
'<html>
  <head>
    <style>
      h2 {
        text-align: center;
        font-size: 24px;
        font-weight: bold;
        margin-bottom: 20px;
      }
      h3 {
        font-size: 18px;
        font-weight: bold;
        margin-bottom: 10px;
      }
      p {
        font-size: 16px;
        margin-bottom: 20px;
      }
      span {
        font-size: 16px;
        margin-bottom: 5px;
        display: block;
      }
      .container {
        width: max-content;
        text-align: center;
        margin: 0 auto;
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
      }
      .card {
        background-color: #fff;
        border: 1px solid #ddd;
        border-radius: 5px;
        box-shadow: 0px 2px 10px 0px rgba(0,0,0,0.1);
        padding: 20px;
        margin-bottom: 20px;
      }
      .footer {
        text-align: center;
        font-size: 14px;
        margin-top: 20px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h2>Ihre Raumreservierung wurde storniert</h2>
      <p>Es tut uns Leid, Sie darüber informieren zu müssen, dass Ihre Reservierung storniert werden musste.</p>
      <div class="card">
        <h3>Ihre Angaben</h3>
        <span>Raum: [% room %]</span><br>
        <span>Von: [% from %]</span><br>
      <div class="footer">
        <span>Bis: [% to %]</span>
      </div>
        Mit freundlichen Grüßen,<br>
        Ihre Bibliothek
      </div>
    </div>
  </body>
</html>'
);

About

This plugin enables you to manage your bookable spaces.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 13