/Unifiedtransform

A school management Software

Primary LanguagePHPGNU General Public License v3.0GPL-3.0

School Management and Accounting Software

We like to challenge the quality of what we build to make it better. To do so, we try to make the product intuitive, beautiful, and user friendly. Innovation and hard work help to fulfill these requirements. I believe in order to innovate we need to think differently. A few months ago I discovered there was no open source free school management software that met my quality standards. I happen to know a bit of programming so I decided to make one. I also believe that working with more people can push the standard higher than working alone. So I decided to make it open source and free.

Featured on Laravel News !!

Screenshot_2019-04-07 Laravel News See the news here

Contribute

Community contribution can make this product better!! See Contribution guideline before making any Pull request

  • We want testable softwares. So test cases are being written for this app too. You also can contribute by writing test case!
  • To run Feature and Unit Tests use ./vendor/bin/phpunit and to run Browser Tests set APP_URL environment variable in your .env file. This value should match the URL you use to access your application in a browser. Then run php artisan dusk.

License

GNU General Public License v3.0

Features

This software has following features:

  • Roles: Master, Admin, Teacher, Student, Librarian, Accountant
  • Attendance
  • Mark
  • Registration
  • Notice, Syllabus
  • Library
  • Exam
  • Grade
  • Accounts
  • Messaging (uses CKEditor 5)

Framework used

  • Laravel 5.5
  • Bootstrap 3.3.7

Server Requirements

  • PHP >= 7.0.0
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

How to Start

Here are some basic steps to start using this application

Note: Instruction on cached data for Dashboard is given in Good to know segment below.

  • Run php composer.phar install for developer environment and run php composer.phar install --no-dev for production environment to install Laravel packages

  • Create .env file from .env.example and generate APP_KEY using php artisan key:generate

  • Set the database connection configuration and APP_ENV according to your application environment (e.g. local, production) in .env file

  • Laravel Page Speed Package is installed but not activated. If you want to use it to optimize your site automatically which results in a 35%+ optimization. You need to uncomment some lines from Kernel.php file and may need to run php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider".

    app/HTTP/Kernel.php

     //\RenatoMarinho\LaravelPageSpeed\Middleware\InlineCss::class,
     //\RenatoMarinho\LaravelPageSpeed\Middleware\ElideAttributes::class,
     //\RenatoMarinho\LaravelPageSpeed\Middleware\InsertDNSPrefetch::class,
     //\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveComments::class,
     //\RenatoMarinho\LaravelPageSpeed\Middleware\TrimUrls::class,
     //\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveQuotes::class,
     //\RenatoMarinho\LaravelPageSpeed\Middleware\CollapseWhitespace::class,
    
  • To create a Master, go to the database\seeds\UsersTableSeeder.php and change the name, the email and the password settings to your likings. Leave the other settings (role, active, verified) unchanged!

  • Laravel Passport package is included to support API. Key for Passport should be automatically generated by php artisan passport:keys from post-install-cmd script in composer.json or you have to run this manually and to remove this package just follow these steps

    • Remove it from composer.json require dependencies and remove command @php artisan passport:keys from post-install-cmd script
    • Run composer update and composer dump-autoload.
    • And all classes that relies on passport must be edited as well. The most common classes are:
      • app\User.php model, remove the HasApiToken trait.
      • app\Proiders\AuthServiceProvider, remove Passport::routes(); in your boot method.
      • In config/auth.php, change your driver option for api from passport to api authentication
  • To create the tables, run php artisan migrate.

    • If you don't want to use Passport package then remove the Passport Migrations in database migrations table and run command artisan migrate:refresh
  • To seed the tables with fake data, use php artisan db:seed.

  • If you want to run the migration and the seeding together, use php artisan migrate:refresh --seed

  • You must seed database\seeds\UsersTableSeeder.php at least once in order to create the Master account. To do so, follow these steps:

    • comment all the seeders except $this->call(UsersTableSeeder::class); in database\seeds\DatabaseSeeder.php;
    • then comment factory(App\User::class, 200)->create(); in UsersTableSeeder.php.

    So your files will look something like this:

    In database\seeds\DatabaseSeeder.php:

    ...
    //$this->call(SectionsTableSeeder::class);
    $this->call(UsersTableSeeder::class);
    //$this->call(AttendancesTableSeeder::class);
    ...
    

    In database\seeds\UsersTableSeeder.php:

    ...
    //factory(App\User::class, 200)->create();
    
  • Laravel 5 log viewer is used to view Logs using a UI at 'example.com/logs' while in development environment.

Create a school and an admin

  • Important: only a master can create a new school and its admins!
  • Login at example.com\login using your Master account credentials
  • Create a new school
  • Create a new admin for the newly created school

Manage a school

  • Important: A master CANNOT manage a school's data!
  • Login as admin at example.com\login
  • Now add data to the school as required.

Good to know

  • In .env, turn APP_DEBUG to false for production environment.
  • Remove Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index'); from routes/web.php while in Production Environment.
  • Cache::remember() generates cache files. To delete expired cache files LaravelCacheGarbageCollector package is used. Run php artisan cache:gc.
  • You can switch to and from maintenance mode by running php artisan up and php artisan down.
  • Dashboard page contents(e.g. Student count, Teacher count, Notice, etc.) are cached because these are not frequently changed. If you don't want these to be cached, just remove the cache lines in index method in app\Http\Controller\HomeController.phplike the following example. So your edit would be something like this:

From:

...
$classes = \Cache::remember('classes-'.$school_id, $minutes, function () use($school_id) {
   return \App\Myclass::where('school_id', $school_id)
                        ->pluck('id')
                        ->toArray();
});
...

To:

...
$classes = \App\Myclass::where('school_id', $school_id)
                        ->pluck('id')
                        ->toArray();
...

You can do similar for other cache lines.

Here are some screenshots:

Auto generated fake data were used.

Screenshot_2019-03-12 - Arvid Marquardt Screenshot_2019-03-21 Account Sectors - Britney Luettgen Screenshot_2019-03-12 Add New Book - Arvid Marquardt Screenshot_2019-03-12 Add Routine - Arvid Marquardt Screenshot_2019-03-12 Alba Huel - Arvid Marquardt Screenshot_2019-03-12 All Classes and Sections - Arvid Marquardt Screenshot_2019-03-12 All Issued Book - Arvid Marquardt Screenshot_2019-03-12 Attendance - Arvid Marquardt(1) Screenshot_2019-03-12 Attendance - Arvid Marquardt(2) Screenshot_2019-03-12 Attendance - Arvid Marquardt Screenshot_2019-03-12 Course - Arvid Marquardt Screenshot_2019-04-06 Course Students - Prof Buddy Hermann Screenshot_2019-04-06 Messages - Prof Buddy Hermann Screenshot_2019-03-29 Grade - Deron Ruecker DDS Screenshot_2019-03-12 Manage Schools - Arvid Marquardt(3) Screenshot_2019-03-12 Manage Schools - Arvid Marquardt Screenshot_2019-03-12 Promote Section Students - Arvid Marquardt(1) Screenshot_2019-03-12 Students - Arvid Marquardt