A school management Software
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.
See the news here
Unifiedtransform is 100% open source and free forever!!
Community contribution can make this product better!! See Contribution guideline before making any Pull request.
When you contribute to a Github project you agree with this terms of Github Terms of Service(Contributions Under Repository License).
Since this project is under GNU General Public License v3.0, according to Github's Terms of Service all your contributions are also under the same license terms. Thus you permit the user of this software to use your contribution under the terms of GNU General Public License v3.0.
./vendor/bin/phpunit.
.env.dusk.exampleto
.env.dusk.localand set
APP_KEYwith same token to environment variable in your
.envfile and run
php artisan serve --env=dusk.localfor execute the server then run
php artisan dusk.
GNU General Public License v3.0
This software has following features:
| Feature | Description | |---------|-------------| | Roles | Master, Admin, Teacher, Student, Librarian, Accountant.| || (You can Impersonate User Roles in Development environment) See how Impersonation works. Cool !!| | Certificate | Now you can upload certificate to a student using student code. | | Payment |Stripe is used. See configuration below.| ||Students can pay from their accounts.| ||Student can view payment receipts (history)| ||View Screenshot below| |Attendance|Take student attendance for each course| |Mark|Can give marks to students for each course| |Registration|Register students| |Notice, Syllabus|Manage uploaded Notices, Syllabus, Routines| |Library|Manage a library of books.| ||Add new books.| ||Keep track of books.| |Exam|Manage Semester by Examination| |Grade|Give Grades based on marks of each course.| |Accounts|Manage Income, Expense Amounts| ||View Graphs based on year.| |Messaging|Uses CKEditor 5| |Export/Import| Users (Students, Teachers) from/to Excel| ||Laravel Excel package is used.| ||Important: Single sheet supported in an Excel file. So delete any extra sheet in an Excel file.| ||Following excel column names supported for both Teachers and Students:
name, email, password, address, about, phone_number, blood_group, nationality, gender.| ||Other columns:| ||For Teachers:
department, (
class, section) if assigned as class teacher.| ||For Students:
class, section, session, version, group, birthday, religion, father_name, father_phone_number, father_national_id, father_occupation, father_designation, father_annual_income, mother_name, mother_phone_number, mother_national_id, mother_occupation, mother_designation, mother_annual_income| ||For any number(e.g: phone_number) starts with zero, put (') before zero.| |Supported Languages|English, Spanish| ||To set default Language and Timezone, Edit as following in
config/app.php:|
'timezone' => 'Asia/Dhaka',//'UTC', 'locale' => 'en',//'es-MX' for Spanish
Docker is now supported and improved.
With the improved Docker setup, you will get: - Nginx - PHP 7.4 - MySQL 8 - PHPMyAdmin - Composer commands: access composer commands directly without entering the container - Artisan commands: access artisan commands directly without entering the container
In a nutshell, you only need to install Docker as well as
docker-composeon your (host) machine and let Docker does the rest
cp .env.example .env
./docker-install.shright away from your terminal.
./docker-install.sh
Here are
.envproperties you can change:
.envproperties
DOCKER_WEBSERVER_HOSTdefines the Unifiedtransform port address. default value:
4049
DOCKER_PHPMYADMIN_HOSTdefines the PHPMyAdmin port address. default value:
5051
You can also customize the database name defined on the
DB_DATABASEproperty when Docker is being initialized the first time.
docker-compose run --rm composer
docker-compose run --rm artisan
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.
git clone https://github.com/changeweb/Unifiedtransform
Copy the contents of the
.env.examplefile to create
.envin the same directory
Run
composer installfor
developerenvironment and run
composer install --optimize-autoloader --no-devfor
productionenvironment to install Laravel packages (Remove Laravel Debugbar, Laravel Log viewer packages from composer.json and
//Provider Barryvdh\Debugbar\ServiceProvider, Logviewer Service provider, //Alias 'Debugbar' => Barryvdh...
from
config/app.phpbefore running
composer installin Production Environment)
Generate
APP_KEYusing
php artisan key:generate
Edit the database connection configuration in .env file e.g.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=unifiedtransform DB_USERNAME=unified DB_PASSWORD=secret
Note that this is just an example, and the values may vary depending on your database environment.
Set the
APP_ENVvariable in your
.envfile according to your application environment (e.g. local, production) in
.envfile
Migrate your Database with
php artisan migrate
Seed your Database with
php artisan db:seed
On localhost, serve your application with
php artisan serve
See Video Tutorial.
Kernel.phpfile and may need to run
php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider".
app/HTTP/Kernel.php
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.phpand change the
name, the
passwordsettings 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:keysfrom
post-install-cmdscript in
composer.jsonor you have to run this manually and to remove this package just follow these steps
composer.jsonrequire dependencies and remove command
@php artisan passport:keysfrom
post-install-cmdscript
composer updateand
composer dump-autoload.
app\User.phpmodel, remove the
HasApiTokentrait.
app\Proiders\AuthServiceProvider, remove
Passport::routes();in your boot method.
config/auth.php, change your driver option for
apifrom
passportto
apiauthentication.
To create the tables, run
php artisan migrate.
migrationstable 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.phpat least once in order to create the Master account (For Production: Run the seed in Development environment and then switch to production). To do so, follow these steps:
$this->call(UsersTableSeeder::class);in
database\seeds\DatabaseSeeder.php;
factory(App\User::class, 200)->create();in
UsersTableSeeder.php.
So your files will look something like this:
In
database\seeds\DatabaseSeeder.php:
php ... //$this->call(SectionsTableSeeder::class); $this->call(UsersTableSeeder::class); //$this->call(AttendancesTableSeeder::class); ...In
database\seeds\UsersTableSeeder.php:
php ... //factory(User::class, 10)->states('admin')->create(); //factory(User::class, 10)->states('accountant')->create(); //factory(User::class, 10)->states('librarian')->create(); //factory(User::class, 30)->states('teacher')->create(); //factory(User::class, 200)->states('student')->create();
STRIPE_KEYand
STRIPE_SECRETin
.envfile.
student_can_pay_amountin
tests\Feature\PaymentModuleTestafter editing
.env.
From
php //public function student_can_pay_amount(){ ... //}To
php public function student_can_pay_amount(){ ... }
mastercan create a new school and its admins!
example.com/loginusing your
Masteraccount credentials
school
adminfor the newly created school
masterCANNOT manage a school's data!
adminat
example.com/login
For giving marks, Teacher clicks on Submit Grade button and do the following:
Upon request in issue #258, Certification file upload system has been added.
.envfile if you want to send email. Currently registered users are notified by invitation mail if Mail is configured properly.
.env, turn
APP_DEBUGto
falsefor production environment.
Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\[email protected]');from
routes/web.phpwhile in Production Environment.
Cache::remember()generates cache files. Removed ~~To delete expired cache files LaravelCacheGarbageCollector package is used. Run
php artisan cache:gc.~~
php artisan upand
php artisan down.
php artisan route:cache
indexmethod in
app\Http\Controller\HomeController.phplike the following example. So your edit would be something like this:
From:
php ... $classes = \Cache::remember('classes-'.$school_id, $minutes, function () use($school_id) { return \App\Myclass::where('school_id', $school_id) ->pluck('id') ->toArray(); }); ...To:
php ... $classes = \App\Myclass::where('school_id', $school_id) ->pluck('id') ->toArray(); ...
You can do similar for other cache lines.
Auto generated fake data were used.