A flexible employee scheduling application built upon Symfony2. Designed for companies and organizations with fluid shifts.

Installs: 3

Dependents: 0

Stars: 52

Watchers: 12

Forks: 12

Open Issues: 33

Language: PHP

v1.0.0-rc2 2015-02-15 21:48 UTC


Build Status

Created by Max Fierke


Development has begun on OpenSkedge 2, a rewrite intended to address many of the architecture shortfalls of OpenSkedge 1 and to address more use-cases. Patches to OpenSkedge 1 will still be accepted, and well-defined issues may be fixed, but OpenSkedge 1 is no longer being actively developed. Please feel free to contribute or suggest features over at the repository for OpenSkedge 2.

Deployment on a Local, VPS/Cloud, or Dedicated host


  1. Nginx, Apache, or another web server on *nix/BSD with rewrite functionality. May work on Windows and Mac, but has not been tested and is not supported.
    • Nginx users, see this wiki article for setup.
    • Apache users, point your document root to web/. The .htaccess should take care of everything.
  2. PHP 5.3.10+ (Tested on 5.3.10, 5.3.18, and 5.4.6)
  3. PDO-supported database. MySQL/MariaDB suggested.
  4. Composer for installing dependencies
  5. (optional) Memcached and PHP memcache extension.


  1. Run php app/check.php and resolve any errors before doing ANYTHING else.
  2. Run cp app/config/parameters.yml.dist app/config/parameters.yml
    • sender_email is the email address of the automated email account you want to use.
    • secret is used for CSRF validation. Set this to some random characters. An ideal value would be a random sha256 hash.
    • The rest of the settings should be pretty self-explainatory.
  3. Setup permissions. This will require ACL support of some kind on your file system. Replace www-data with your web server user.
    • If under a host that supports chmod +a:
      $ rm -rf app/cache/*
      $ rm -rf app/logs/*
      $ sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
      $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    • If under a host that does not, enable ACL support on the filesystem and run the following:
      $ sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache app/logs
      $ sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
    • If none of the above are available options, add umask(0002); to the beginning of app/console, web/app.php, and web/app_dev.php
  4. Run php composer.phar install --prefer-dist
  5. Run php app/console doctrine:database:create if you have not already created a database for OpenSkedge.
  6. Run php app/console doctrine:schema:update --force
  7. Run php app/console doctrine:fixtures:load to bootstrap the application with some needed information (groups) and a default admin account with the username admin and the password admin.
  8. Run php app/console --env=prod cache:clear to clear and warmup the application's cache. prod should be replaced with dev if you're running in a development environment.
  9. Run php app/console --env=prod assets:install to install Assetic assets into the web root. prod should be replaced with dev if you're running in a development environment.
  10. Navigate to the OpenSkedge installation in a browser, login as the bootstrapped admin and change the password.
  11. Add employees, areas, positions, and schedule periods and get to scheduling!


  1. Run git pull to fetch the latest changes to OpenSkedge. If you've made changes to OpenSkedge, you'll either want to stash them or commit them and use git pull --rebase.
  2. Run php composer.phar install
  3. Run by using php app/console doctrine:migrations:migrate. NOTE: Only supports MySQL. This should be pretty safe but if issues occur, you should be able to roll back by migrating down. That said, it's probably best to test the migration on your development server before pushing it to production. Read more about using migrations at the Doctrine project's docs.
    • If you're on a database other than MySQL such as PostgreSQL, you'll have to adapt the migrations yourself, or risk potential data loss and/or application breakage by running php app/console doctrine:schema:update --force.
  4. Run php app/console --env=prod cache:clear to clear and warmup the application's cache. prod should be replaced with dev if you're running in a development environment.
  5. Run php app/console --env=prod assets:install to install Assetic assets into the web root. prod should be replaced with dev if you're running in a development environment.

Deployment on Pagoda Box

Pagoda Box is a PaaS provider that allows the creation of scalable instances of web applications. See for Pagoda Box specific installation instructions. I have also created a quickstart that can be used as well.


What is OpenSkedge?

OpenSkedge is a reinvention of Employee Scheduler, a flexible employee scheduling application designed for companies and organizations (such as education institutions with student workers) which require fluid shift scheduling.

What is OpenSkedge not?

OpenSkedge is not a general purpose, or a one-stop everything-but-the-kitchen-sink scheduling application. It's for assigning positions to people at certain times during certain time periods that they have marked themselves available. It won't schedule your meetings (at least, not yet).

Who is behind OpenSkedge?

Max Fierke, an open-source developer and student at the University of Minnesota. He does a lot of other stuff too. He created OpenSkedge during his winter break. He also has a site you can go to.

Why was OpenSkedge created?

Max's boss, Garreth, was getting very annoyed at the fact that the version of Employee Scheduler they were running was severely broken. Time clock functionality was broken. Employees couldn't be scheduled past certain hours. Max mentioned that he knew PHP and MySQL. Garreth told him to look at it to see if he could figure out why everything was falling apart. Max spent two months picking the application apart and re-implemented parts of the aged PHP 4 application using PHP 5 constructs such as object-oriented classes and PHP Data Objects. The first weekend of winter break, Max got fed up with the archaic codebase and began re-implementing the application in Symfony2.

It sounds like OpenSkedge is basically an entirely different application than Employee Scheduler. What is left of it in OpenSkedge?

Max isn't a JavaScript developer or a UI designer, so much of the JavaScript used in the interface of the application is nearly unmodified from the JavaScript included in Employee Scheduler. The database design is similar to Employee Scheduler but simpler and smarter (sorry!).

Who is Carlnater McStrangelove?

The origin of Carlnater McStrangelove is not completely clear. He was present in some of the code for Lab Scheduler (Carlson School of Management's version of Employee Scheduler) and was the sender of all automated Lab Scheduler emails.

License and Copyright


OpenSkedge, technically a derivative work of Employee Scheduler, is available under the GNU General Public License version 3 or later. See src/OpenSkedge/AppBundle/Resources/meta/LICENSE for more details.

Authors and Contributors

  • Copyright 2012-2013 Max Fierke (@maxfierke)
  • Copyright 2012-2013 University of Minnesota - Carlson School of Manangement
  • Copyright 2003 Brigham Young University (For the bits of Employee Scheduler present)

Projects that OpenSkedge uses

Thanks to the following Employee Scheduler developers

  • John Finlay (Developer of Employee Scheduler)
  • Carl Allen (Developed time clock functionality for the UofMN with Joe Krall)
  • Joe Krall (Developed time clock functionality for the UofMN with Carl Allen)


Max Fierke
Twitter: @m4xm4n
Github: @maxfierke

Bitdeli Badge