Extending phpScheduleIt: Understanding and Installing Plugins

One thing I really wanted to focus on when writing version 2 of phpScheduleIt was finding ways to keep the application open for extensibility. This led me to creating a pluggable framework that can be hooked into for certain operations. In this post I’ll explain a bit of the plugin structure and walk through how to configure and use plugins in phpScheduleIt.

Note: The version of phpScheduleIt at the time of writing is 2.2. While the exact details explained in this post may not apply to future versions, the core concepts will.

Plugin Overview

Let’s first explore how plugins are structured. phpScheduleIt ships with a /plugins directory. Within that are subdirectories for each supported plugin type. phpScheduleIt’s plugin architecture is mainly convention based. Each subdirectory within a plugin type represents a plugin. Taking the Authentication plugin type for example, we have ActiveDirectory, Drupal, and so on available to use for our authentication provider. The Authentication plugins directory currently looks like this:

Configuring and Activating a Packaged Plugin

phpScheduleIt comes packaged with a a few Authentication plugins, so we’ll continue using that for our example. Each plugin directory most likely will contain a default configuration file named something like subdirectory.config.dist.php. For example, ActiveDirectory will contain a file named ActiveDirectory.config.dist.php.

The first step is to remove the .dist part of the default configuration file. In our case, the file would end up being named ActiveDirectory.config.php.

Next, you need to adjust any configuration values to match your environment. For Active Directory, you may need to change domain controllers or administrative credentials.

Finally, you need to tell phpScheduleIt which plugin you want to use. Open up phpScheduleIt’s config file, located in /config/config.php and find the plugins section. By default, it looks like this:

$conf['settings']['plugins']['Authentication'] = '';
$conf['settings']['plugins']['Authorization'] = '';
$conf['settings']['plugins']['Permission'] = '';
$conf['settings']['plugins']['PostRegistration'] = '';
$conf['settings']['plugins']['PreReservation'] = '';
$conf['settings']['plugins']['PostReservation'] = '';

To use your configured plugin, just set the plugin value to the plugin name. Sticking with ActiveDirectory for Authorization, you’ll end up with this:

$conf['settings']['plugins']['Authentication'] = 'ActiveDirectory ';

And that’s it! phpScheduleIt will now use Active Directory when users log in.

Using a 3rd Party Plugin

The process for using a 3rd party plugin is nearly the same as the using a packaged plugin. The one difference is that the plugin needs to be ‘installed’ – which merely includes copying the full plugin directory into the plugin type directory. For example, if you are installing an Authentication plugin named FooAuth, simply copy the full FooAuth directory into /plugins/Authentication

Summary

Hopefully this process is nice and easy. Next we’ll talk about how to write our own plugins, starting with a pre-reservation plugin.

9 Comments

  1. Muzaffer Tolga Ozses March 26, 2013 at 5:39 am

    Hello Nick,

    I’m working on getting PHPScheduleIt to work with CAS. I’ve been looking at a few places but not able to find a thing. http://php.brickhost.com/forums/index.php?topic=11066.0 tells me you are working on a plugin. May I ask what the status of this is?

    Regards,

    1. nkorbel March 26, 2013 at 8:21 am

      It’s been on and off development. I feel like we got pretty close to a working CAS solution, but I don’t have a way to test it properly. Feel free to shoot me an email if you think you’d be able to help test!

      1. Jean-Michel Doublet May 16, 2013 at 10:24 am

        Same question for me. I need CAS authentification plugin and we can test all you want.

        Best Regards,

        JMD

  2. Muzaffer Tolga Ozses March 27, 2013 at 6:15 am

    I can test. What’s your e-mail address?

    1. Smriti July 5, 2013 at 5:35 am

      I need help regarding CAS authentication. Kindly help me out with it, in relation to phpscheduleit integration with CAS.

  3. Alejandro Lopez July 5, 2013 at 11:47 am

    ActiveDirectory plugin can be used from linux pointing to an win2008 AD? because phpScheduleit only show an unknown error

  4. Steve September 10, 2013 at 9:05 pm

    Nick, I’m trying to understand plugin development, but am trying to categorize where a particular plugin should go. Specifically, I’m interested in developing a plugin that would allow more details to be placed into the resource page. In our use case, resources are network lab gear. I’m looking to craft an HTML section where I can create tables, insert images, place text, etc.

    Would this be a pre-reservation plugin?

  5. jucerlan April 1, 2014 at 11:00 am

    Nicki hello, I’m trying without success integrates my schedule with my LDAP
    min would give a force already researched a lot but did not get.
    thank you very much.

Leave a comment

Your email address will not be published. Required fields are marked *