PHPackages                             akibtanjim/virtual-classroom - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. akibtanjim/virtual-classroom

ActiveLibrary[Image &amp; Media](/categories/media)

akibtanjim/virtual-classroom
============================

Laravel Virtual Classroom using Braincert Virtual Classroom API.

v1.0.1(5y ago)01641MITPHPPHP &gt;=5.4

Since Jun 6Pushed 5y ago2 watchersCompare

[ Source](https://github.com/akibtanjim/virtual-classroom)[ Packagist](https://packagist.org/packages/akibtanjim/virtual-classroom)[ RSS](/packages/akibtanjim-virtual-classroom/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

Laravel Virtual Classroom API
=============================

[](#laravel-virtual-classroom-api)

This package is built for laravel with a view to provide virtual class room api for any website integration. This package uses **BrainCert** **Virtual Classroom API**. For more information please visit [here](https://www.braincert.com).

Installation
------------

[](#installation)

Install using composer:

```

composer require akibtanjim/virtual-classroom

```

In Laravel 5.5 or higher, this package will be automatically discovered and you can safely skip the following two steps.

If using Laravel 5.4 or lower, after updating composer, add the ServiceProvider to the providers array in `config/app.php`

In the **providers** section add the below line:

```

  AkibTanjim\VirtualClassRoom\VirtualClassRoomServiceProvider::class,

```

add the Alias to **aliases** section of config/app.php:

```

  'ClassRoom' => AkibTanjim\VirtualClassRoom\Facades\ClassRoom::class,

```

Usage
-----

[](#usage)

In order to facilitate virtual classroom features you need to have a **BrainCert** account. You can sign up from [here](https://www.braincert.com/community/Register).

This package need **API KEY** of **BrainCert** account. You can find your **API KEY** from [here](https://www.braincert.com/app/virtualclassroom). Please put your domain name there. You can also add custom redirect url, your custom logo,favicon,host name etc from **BrainCert Portal**

After you get your **API KEY** open your `.env` file and paste the follwing code:

```
BRAIN_CERT_BASE_URL=https://api.braincert.com
BRAIN_CERT_API_KEY=YOUR_API_KEY

```

Available Methods
-----------------

[](#available-methods)

1. [ Schedule A Class ](#schedule-a-class)
2. [ Launch A Class ](#launch-a-class)
3. [ List Of Classes ](#list-of-classes)
4. [ Remove A Class ](#remove-a-class)
5. [ Cancel A Class ](#cancel-a-class)
6. [ Add Pricing Scheme ](#add-pricing-scheme)
7. [ List Of Pricing Scheme ](#list-of-pricing-scheme)
8. [ Remove Pricing Scheme ](#remove-pricing-scheme)
9. [ Scheme Payment ](#scheme-payment)
10. [ Add Discount ](#add-discount)
11. [ List Of Discounts ](#list-of-discounts)
12. [ Remove Discount ](#remove-discount)
13. [ Apply Discount Coupon ](#apply-discount-coupon)
14. [ List Of Recordings ](#list-of-recordings)
15. [ Get Recording ](#get-recording)
16. [ Remove Recording ](#remove-recording)
17. [ Change Recording Status ](#change-recording-status)
18. [ Get Class Usage Report ](#get-class-usage-report)
19. [ Get Available Attendees ](#get-available-attendees)

Schedule A Class
----------------

[](#schedule-a-class)

This method allows to schedule a class.

 **ClassRoom::schedule($request)**
ParameterRequiredData TypeDescriptionExampletitleYesStringClass titleDemo ClasstimezoneYesIntegerClass timezone12
 See **Timezone List** section for more informationstart\_timeYesStringStart time of class09:30AMend\_timeYesStringEnd time of class10:30AMdateYesDateDate of class2020-08-15currencyNoStringCurrency of classUSD

See the **Supported Currency List** section for all available currenciesis\_paidNoBooleanFor class is free or paid0 for free, 1 for paidis\_recurringNoBooleanClass recurring0 for No and 1 for YesrepeatNoIntegerWhen class repeatsValue between 1 to 6

See the **Repeat List** section for more detailsweekdaysNoIntegerNumber for weekdaysComma separated values between 1 to 7

See **Weekdays List** section for more detailsend\_classes\_countNoIntegerNumber of classes for recurring classes10seat\_attendeesNoIntegerNumber of allowed attendees in a live class25recordNoIntegerRecord this class0 disable recording
1 enable recording. Instructor has to manually start/stop recording button.
2 start recording automatically when class starts.
3 start recording automatically when class starts and disable instructor from managing the recording button.
 Recording will be produced at the end of class time.is\_recording\_layoutNoIntegerRecording Layout0 to use 'Standard layout' for recorded videos that captures minimalistic details
such as whiteboard, videos, and chat.
(API will assume '0' as default option if you don't pass this parameter).

1 to use 'Enhanced layout' for recorded videos that captures the entire browser tab including all virtual classroom icons and user interface.is\_videoNoIntegerVideo output0 Produces multiple recorded video files every time instructor clicks the stop recording button or refresh the browser when session is in progress (API will assume '0' as default option if you don't pass this parameter).

1 Concatenates all the recorded video files into a single video file at the end of the session.is\_boardNoIntegerAllow loading only whiteboard or entire app with audio/video, and group chat.0 for whiteboard + audio/video + attendee list + chat (API will assume '0' as default option if you don't pass this parameter).

1 for whiteboard + attendee list.

2 for whiteboard + attendee list + chat.is\_langNoIntegerForce Interface Language0 to allow changing interface language by attendees

- Value between 1 to 50

See **Interface Language List** Section for more detailsis\_regionNoIntegerDatacenter region selectionSee **Data Center Region List** section for more detailsis\_corporateNoIntegerEnable webcam and microphone upon entry0 to disable webcam and microphone upon entry. Classroom is moderated and instructor has to pass microphone and webcam controls to attendees (API will assume '0' as default option if you don't pass this parameter)

1 to allow attendees to enable their microphone and webcam without permission from instructoris\_private\_chatNoIntegerPrivate chat0 to allow students to private chat with each other.

1 to enable only instructor to private chat with students and students cannot private chat with each other.### Sample Request

[](#sample-request)

```

    ClassRoom::schedule([
        "title" => "demo-class",
        "timezone" => 12,
        "date" => "2020-06-07",
        "start_time" => "07:42AM",
        "end_time" => "08:12AM",
    ]);

```

### Sample Response

[](#sample-response)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "method": "addclass",
            "class_id": 397262,
            "title": "demo-class"
        },
        "message": "Class scheduled successfully"
    }

```

### Error Response

[](#error-response)

```

    {
        "status": "fail",
        "errors": [
            "The title field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Launch A Class
--------------

[](#launch-a-class)

This method allows to launch a class which provides a launch url for the class.

 **ClassRoom::launchClass($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10user\_idYesIntegerUser Id1user\_nameYesStringUser NameJhon Doeis\_teacherYesIntegerMarks a user as a teacher or student0 for Student

1 for teacherlesson\_nameYesStringName of the lessonLesson-01course\_nameYesStringName of the courseClass-01is\_extendNoIntegerAllow teacher to extend the class timing0 for you can extend class.
1 for you cannot extend class timer and time is fixed.### Sample Request

[](#sample-request-1)

```

    ClassRoom::launchClass([
        "class_id" => 123456,
        "user_id" => 2,
        "user_name" => "Student",
        "is_teacher" => 0,
        "lesson_name" => "Lesson-02",
        "course_name" => "Course-02",
        "is_extend" => 1
    ]);

```

### Sample Response

[](#sample-response-1)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "class_id": "396767",
            "method": "getclasslaunch",
            "launchurl": "LAUNCH_URL",
            "encryptedlaunchurl": "ENCRYPTED_LAUNCH_URL"
        },
        "message": "Class launched successfully"
    }

```

### Error Response

[](#error-response-1)

```

    {
        "status": "fail",
        "errors": [
            "The user name field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

List Of Classes
---------------

[](#list-of-classes)

This method allows to fetch all the classes.

 **ClassRoom::classList($request)**
ParameterRequiredData TypeDescriptionExamplepublishedNoIntegerList published classes only1 for list published classes

0 default to list all classesstartNoIntegerStart limit of list classdefault value is 0limitNoIntegerLimit of list classdefault value is 10searchNoStringClass titleDemo### Sample Request

[](#sample-request-2)

```

    ClassRoom::classList([
        "published" => 1,
        "start" => 0,
        // "limit" => 5,
        // "search" => "demo"
    ]);

```

### Sample Response

[](#sample-response-2)

```

     {
        "status": "success",
        "data": {
            "total": 14,
            "classes": [
                    {
                        "isRecordingLayout": "0",
                        "canceled_date": "0000-00-00",
                        "isPrivateChat": "0",
                        "created_by": "0",
                        "instructor_id": "0",
                        "id": "123456",
                        "user_id": "123",
                        "title": "demo-class",
                        "date": "2020-06-07",
                        "start_time": "01:15 PM",
                        "end_time": "01:45 PM",
                        "timezone": "12",
                        "end_date": "0000-00-00",
                        "description": "",
                        "record": "1",
                        "ispaid": "0",
                        "language": "11",
                        "currency": "usd",
                        "status": "Upcoming",
                        "repeat": "0",
                        "virtual_class_type": "html5",
                        "weekdays": "",
                        "seat_attendees": "1",
                        "end_classes_count": "0",
                        "published": "1",
                        "timezone_id": "12",
                        "timezone_country": "Asia/Dhaka",
                        "timezone_label": "Central Asia Standard Time",
                        "difftime": "+06:00",
                        "timezone_title": "(GMT+06:00) Astana, Dhaka",
                        "totalrecords": "0",
                        "duration": 1800,
                        "next_class": 0,
                        "time_to_live_class": null,
                        "next_class_date_time": null,
                        "class_starts_in": 46996,
                        "label": "Central Asia Standard Time",
                        "isVideo": 1,
                        "isRegion": "0",
                        "privacy": "1",
                        "isBoard": "1",
                        "isScreenshare": "1",
                        "isCorporate": "1",
                        "isCancel": "0",
                        "extended_duration": "0",
                        "extended_duration_date": "0000-00-00"
                    },
                    {
                        "isRecordingLayout": "0",
                        "canceled_date": "0000-00-00",
                        "isPrivateChat": "0",
                        "created_by": "0",
                        "instructor_id": "0",
                        "id": "123456",
                        "user_id": "123",
                        "title": "demo-class",
                        "date": "2020-06-07",
                        "start_time": "07:42 AM",
                        "end_time": "08:12 AM",
                        "timezone": "12",
                        "end_date": "0000-00-00",
                        "description": "",
                        "record": "0",
                        "ispaid": "0",
                        "language": "11",
                        "currency": "usd",
                        "status": "Upcoming",
                        "repeat": "0",
                        "virtual_class_type": "html5",
                        "weekdays": "",
                        "seat_attendees": "2",
                        "end_classes_count": "0",
                        "published": "1",
                        "timezone_id": "12",
                        "timezone_country": "Asia/Dhaka",
                        "timezone_label": "Central Asia Standard Time",
                        "difftime": "+06:00",
                        "timezone_title": "(GMT+06:00) Astana, Dhaka",
                        "totalrecords": "0",
                        "duration": 1800,
                        "next_class": 0,
                        "time_to_live_class": null,
                        "next_class_date_time": null,
                        "class_starts_in": 27016,
                        "label": "Central Asia Standard Time",
                        "isVideo": 0,
                        "isRegion": "0",
                        "privacy": "1",
                        "isBoard": "0",
                        "isScreenshare": "1",
                        "isCorporate": "0",
                        "isCancel": "0",
                        "extended_duration": "0",
                        "extended_duration_date": "0000-00-00"
                    }
                ]
        },
        "message": "Class list fetched successfully"
    }

```

### Error Response

[](#error-response-2)

```

    {
        "status": "fail",
        "errors": [
            "The limit must be an integer."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Remove A Class
--------------

[](#remove-a-class)

This method allows to remove a class.

 **ClassRoom::removeClass($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10### Sample Request

[](#sample-request-3)

```

    ClassRoom::removeClass([
        "class_id" => 123456,
    ]);

```

### Sample Response

[](#sample-response-3)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "method": "removeclass",
            "class_id": "123456"
        },
        "message": "Class removed successfully"
    }

```

### Error Response

[](#error-response-3)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Cancel A Class
--------------

[](#cancel-a-class)

This method allows to cancel or activate class/recurring class.

 **ClassRoom::cancelClass($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10is\_cancelYesIntegerAllows to cancel current/recurring classes or activate a class0 Activate canceled class.

1 Cancel one-time or current class in the recurring schedule.

2 Cancel all classes in the recurring schedule.### Sample Request

[](#sample-request-4)

```

    ClassRoom::cancelClass([
        "class_id" => 123456,
        "is_cancel" => 1
    ]);

```

### Sample Response

[](#sample-response-4)

```

    {
        "status": "success",
        "data": {
            "status":"ok",
            "method":"cancelclass",
            "class_id":10
        },
        "message": "Class cancelled successfully"
    }

```

### Error Response

[](#error-response-4)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Add Pricing Scheme
------------------

[](#add-pricing-scheme)

This method allows to add a pricing scheme to a class.

 **ClassRoom::addScheme($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10priceYesNumericPrice of class10no\_of\_dayYesIntegerDays to give access for30access\_typeYesIntegerAccess type for limit0 for unlimited

1 for limitedno\_of\_max\_useNoIntegerNumber of Times price used in class12### Sample Request

[](#sample-request-5)

```

    ClassRoom::addScheme([
        'class_id'      => 123456,
        'price'         =>  20,
        'no_of_day'     =>  30,
        'access_type'   =>   1,
        'no_of_max_use' =>   1,
    ]);

```

### Sample Response

[](#sample-response-5)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "method": "addprice",
            "price_id": 14
        },
        "message": "Price Scheme added successfully"
    }

```

### Error Response

[](#error-response-5)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

List Of Pricing Scheme
----------------------

[](#list-of-pricing-scheme)

This method allows to fetch all the pricing scheme of a class.

 **ClassRoom::schemeList($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10### Sample Request

[](#sample-request-6)

```

    ClassRoom::schemeList([
        'class_id'      => 123456
    ]);

```

### Sample Response

[](#sample-response-6)

```

{
    "status": "success",
    "data": [
        {
            "id": "123",
            "class_id": "123456",
            "scheme_price": "20",
            "scheme_days": "30",
            "lifetime": "0",
            "times": "1",
            "numbertimes": "1",
            "subscription": "0"
        },
        {
            "id": "123",
            "class_id": "123456",
            "scheme_price": "20",
            "scheme_days": "30",
            "lifetime": "0",
            "times": "1",
            "numbertimes": "1",
            "subscription": "0"
        }
    ],
    "message": "Schemes fetched successfully"
}

```

### Error Response

[](#error-response-6)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Remove Pricing Scheme
---------------------

[](#remove-pricing-scheme)

This method allows to remove pricing scheme of a class.

 **ClassRoom::removeScheme($request)**
ParameterRequiredData TypeDescriptionExampleprice\_idYesIntegerPrice Id10### Sample Request

[](#sample-request-7)

```

    ClassRoom::removeScheme([
        'price_id'      => 123456
    ]);

```

### Sample Response

[](#sample-response-7)

```

{
    "status": "success",
    "data": [
       "status":"ok",
       "method":"removeprice",
       "price_id":"34"
    ],
    "message": "Scheme removed successfully"
}

```

### Error Response

[](#error-response-7)

```

    {
        "status": "fail",
        "errors": [
            "The price id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Scheme Payment
--------------

[](#scheme-payment)

This method allows to make payment of a class scheme.

 **ClassRoom::payment($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerClass id10price\_idYesIntegerPrice id10card\_numberYesStringCard number4242 4242 4242 4242card\_exp\_monthYesStringCard expire month01card\_exp\_yearYesStringCard expire year2017card\_cvcYesStringCard cvc141student\_emailYesEmailStudent Email addresscancel\_urlYesBase64Please enter base64 encode urlbase64\_encode('YOUR\_CANCEL\_URL')return\_urlYesBase64Please enter base64 encode urlbase64\_encode('YOUR\_RETURN\_URL')coupon\_codeNoStringPlease enter class coupon codeabcd### Sample Request

[](#sample-request-8)

```

    ClassRoom::payment([
        'price_id'      => 123,
        'class_id'      => 123456,
        'card_number'   => '4242 4242 4242 4242',
        'card_exp_month' => '01',
        'card_exp_year' => '2017',
        'card_cvc'      => '141',
        'student_email' => 'yourname@domain.com',
        'cancel_url'    => base64_encode('YOUR_CANCEL_URL'),
        'return_url'    => base64_encode('YOUR_RETURN_URL')
    ]);

```

### Sample Response

[](#sample-response-8)

```

{
    "status": "success",
    "data": {
        "status":"ok",
        "method":"apiclasspayment",
        "charge_id": "ch_1BL9Ae2eZvKYlo2CWz1xDYF1"
    },
    "message": "Payment processed successfully"
}

```

### Error Response

[](#error-response-8)

```

    {
        "status": "fail",
        "errors": [
            "The price id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Add Discount
------------

[](#add-discount)

This method allows to add discount to a class.

 **ClassRoom::addDiscount($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerClass id10discountYesIntegerDiscount of class10start\_dateYesDateTo Give Access for days of class2020-06-15end\_dateNoDateDiscount expires2020-07-15discount\_typeYesIntegerDiscount type in class0 for fixed\_amount

1 for percentagediscount\_codeNoStringDiscount coupon codeabcddiscount\_limitNoIntegerHow many times can this discount be used?10### Sample Request

[](#sample-request-9)

```

    ClassRoom::addDiscount([
        'class_id'      => 123456,
        'discount'      => 5,
        'start_date'    => '2020-06-06',
        // 'end_date'      => '2020-06-06',
        'discount_type' => 0,
        // 'discount_code' => 'abcd',
        // 'discount_limit'=> 5,
    ]);

```

### Sample Response

[](#sample-response-9)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "method": "addDiscount",
            "Discount id": 123
        },
        "message": "Discount added successfully"
    }

```

### Error Response

[](#error-response-9)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

List Of Discounts
-----------------

[](#list-of-discounts)

This method allows to fetch discounts of a class.

 **ClassRoom::discountList($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerClass id10searchNoStringClass titleDemo### Sample Request

[](#sample-request-10)

```

    ClassRoom::discountList([
        'class_id'      => 123456,
    ]);

```

### Sample Response

[](#sample-response-10)

```

    {
        "status": "success",
        "data": [
            {
               "id":"37",
               "class_id":"598",
               "discount_code":"100code",
               "is_use_discount_code":"1",
               "discount_limit":"55",
               "is_no_limit":"0",
               "discount_type":"fixed_amount",
               "special_price":"100",
               "start_date":"2014-09-01 00:00:00",
               "end_date":"0000-00-00 00:00:00",
               "is_never_expire":"1"
            }
        ],
        "message": "Discount list fetched successfully"
    }

```

### Error Response

[](#error-response-10)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Remove Discount
---------------

[](#remove-discount)

This method allows to remove discount from a class.

 **ClassRoom::removeDiscount($request)**
ParameterRequiredData TypeDescriptionExamplediscount\_idYesIntegerDiscount id10### Sample Request

[](#sample-request-11)

```

    ClassRoom::discountList([
        'class_id'      => 123456,
    ]);

```

### Sample Response

[](#sample-response-11)

```

    {
        "status": "success",
        "data": {
           "status":"ok",
           "method":"removediscount",
           "discount_id":"40"
        },
        "message": "Discount removed successfully"
    }

```

### Error Response

[](#error-response-11)

```

    {
        "status": "fail",
        "errors": [
            "The discount id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Apply Discount Coupon
---------------------

[](#apply-discount-coupon)

This method allows to apply discount to a class.

 **ClassRoom::applyCoupon($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerClass id10discount\_codeYesStringClass discount codeabcd### Sample Request

[](#sample-request-12)

```

    ClassRoom::applyCoupon([
        'class_id'      => 123456,
        'discount_code' => 'abcd'
    ]);

```

### Sample Response

[](#sample-response-12)

```

    {
        "status": "success",
        "data": {
           "error":"0",
           "discount_id":"88"
           "discount_value":"2"
           "discount_type":"percentage"
        },
        "message": "Discount coupon applied successfully"
    }

```

### Error Response

[](#error-response-12)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

List Of Recordings
------------------

[](#list-of-recordings)

This method allows to fetch all the recordings of a class.

 **ClassRoom::recordingList($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerClass id10searchNoStringClass titledemo### Sample Request

[](#sample-request-13)

```

    ClassRoom::recordingList([
        'class_id'  => 123456,
        // 'search'    => 'demo'
    ]);

```

### Sample Response

[](#sample-response-13)

```

    {
        "status": "success",
        "data": [
            {
              "id":"6",
              "classroom_id":"52",
              "user_id":"0",
              "name":"video1369233387010_650002050.webm",
              "fname":"",
              "status":"1",
              "date_recorded":"1969-12-31"
            },
            {
              "id":"8",
              "classroom_id":"52",
              "user_id":"0",
              "name":"video1369231601092_104397168.webm",
              "fname":"","status":"0",
              "date_recorded":"1969-12-31"
            }
        ],
        "message": "Recording list fetched successfully"
    }

```

### Error Response

[](#error-response-13)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Get Recording
-------------

[](#get-recording)

This method allows to fetch a specific recording of a class.

 **ClassRoom::getRecording($request)**
ParameterRequiredData TypeDescriptionExamplerecord\_idYesIntegerRecord id10### Sample Request

[](#sample-request-14)

```

    ClassRoom::getRecording([
        'record_id'  => 114,
    ]);

```

### Sample Response

[](#sample-response-14)

```

    {
        "status": "success",
        "data": [
            {
              "id":"114",
              "classroom_id":"483",
              "user_id":"43",
              "name":"20143142521video_483_480325_ready.webm",
              "fname":"",
                    "status":"1",
              "date_recorded":"2014-04-28",
              "record_url":"https:\/\/dm0d88zfsyhg8.cloudfront.net\/20143142521video_483_480325_ready.webm?Expires=1411640160&Signature=WmXk3GV3DMZ7xFHpn9~oRxAG5vbjtTMN~399bZhbF7UPAKJ-xJnKXGPENJffbq5fnsDydb3jAK7vA0O2l5pcz-MPkjqWz13Fg6hPGiT4Vo57gyVe3H9kBWtEAjmZrPaiMMgSweqslx5f9Ytq7D59tez3~qG3pfwW0r59iI8gKHI_&Key-Pair-Id=APKAINGTP6O5WANPM7YQ"
            }
        ],
        "message": "Recording fetched successfully"
    }

```

### Error Response

[](#error-response-14)

```

    {
        "status": "fail",
        "errors": [
            "The record id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Remove Recording
----------------

[](#remove-recording)

This method allows to romove a specific recording of a class.

 **ClassRoom::removeRecording($request)**
ParameterRequiredData TypeDescriptionExamplerecord\_idYesIntegerRecord id10### Sample Request

[](#sample-request-15)

```

    ClassRoom::removeRecording([
        'record_id'  => 123456,
    ]);

```

### Sample Response

[](#sample-response-15)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "method": "removeclassrecording",
            "record_id": "1234"
        },
        "message": "Recording removed successfully"
    }

```

### Error Response

[](#error-response-15)

```

    {
        "status": "fail",
        "errors": [
            "The record id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Change Recording Status
-----------------------

[](#change-recording-status)

This method allows to change status of a recording of a class.

 **ClassRoom::changeRecordingStatus($request)**
ParameterRequiredData TypeDescriptionExamplerecord\_idYesIntegerRecord id10### Sample Request

[](#sample-request-16)

```

    ClassRoom::changeRecordingStatus([
        'record_id'  => 123456,
    ]);

```

### Sample Response

[](#sample-response-16)

```

    {
        "status": "success",
        "data": {
           "status":"ok",
           "method":"changestatusrecording",
           "record_id":"20"
        },
        "message": "Recording status changed successfully"
    }

```

### Error Response

[](#error-response-16)

```

    {
        "status": "fail",
        "errors": [
            "The record id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Get Class Usage Report
----------------------

[](#get-class-usage-report)

This method is used to get the total duration and total productivity percentage of attendees. If you pass a specific userId, it will return user specific data

 **ClassRoom::changeRecordingStatus($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10user\_idNoIntegerUser Id1is\_teacherNoIntegerMarks a user as a teacher or student0 for Student

1 for teacher### Sample Request

[](#sample-request-17)

```

    ClassRoom::classUsageReport([
        'class_id'  => 123456,
        'user_id'   => 1,
        'is_teacher' => 1
    ]);

```

### Sample Response

[](#sample-response-17)

```

    {
        "status": "success",
        "data": [
           {
              "classId":"1973",
              "userId":"1254",
              "duration":"00:08:55",
              "percentage":"9.91%",
              "attendance":"Yes",
              "session":
              [
                  {
                    "time_in":"Jun 14, 2017 03:01:21 AM",
                    "time_out":"Jun 14, 2017 02:54:49 AM"
                   },
                   {
                    "time_in":"Jun 14, 2017 02:55:02 AM",
                    "time_out":"Jun 14, 2017 03:01:21 AM"
                  },
                  {
                    "time_in":"Jun 14, 2017 03:45:08 AM",
                    "time_out":"Jun 14, 2017 03:46:58 AM"
                  }
              ]
            }
        ],
        "message": "Class usage report fetched successfully"
    }

```

### Error Response

[](#error-response-17)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Get Available Attendees
-----------------------

[](#get-available-attendees)

This method is used to display the list of available seats when a live class is launched. This is very useful to assign new attendees to a live class by querying the attendee count.

 **ClassRoom::getAttendees($request)**
ParameterRequiredData TypeDescriptionExampleclass\_idYesIntegerclass id10### Sample Request

[](#sample-request-18)

```

    ClassRoom::getAttendees([
        'class_id'  => 123456
    ]);

```

### Sample Response

[](#sample-response-18)

```

    {
        "status": "success",
        "data": {
            "status": "ok",
            "method": "availableAttendees",
            "class_id": "123456",
            "remaning_attendees": 2
        },
        "message": "Available attendees list fetched successfully"
    }

```

### Error Response

[](#error-response-18)

```

    {
        "status": "fail",
        "errors": [
            "The class id field is required."
        ],
        "message": "Invalid Parameter(s)"
    }

```

Timezone List
-------------

[](#timezone-list)

 **See Full List**
```

    28=>(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London
    30=>(GMT) Monrovia, Reykjavik
    72=>(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
    53=>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris
    14=>(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
    71=>(GMT+01:00) West Central Africa
    83=>(GMT+02:00) Amman
    84=>(GMT+02:00) Beirut
    24=>(GMT+02:00) Cairo
    61=>(GMT+02:00) Harare, Pretoria
    27=>(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius
    35=>(GMT+02:00) Jerusalem
    21=>(GMT+02:00) Minsk
    86=>(GMT+02:00) Windhoek
    31=>(GMT+03:00) Athens, Istanbul, Minsk
    2=>(GMT+03:00) Baghdad
    49=>(GMT+03:00) Kuwait, Riyadh
    54=>(GMT+03:00) Moscow, St. Petersburg, Volgograd
    19=>(GMT+03:00) Nairobi
    87=>(GMT+03:00) Tbilisi
    34=>(GMT+03:30) Tehran
    1=>(GMT+04:00) Abu Dhabi, Muscat
    88=>(GMT+04:00) Baku
    9=>(GMT+04:00) Baku, Tbilisi, Yerevan
    89=>(GMT+04:00) Port Louis
    47=>(GMT+04:30) Kabul
    25=>(GMT+05:00) Ekaterinburg
    90=>(GMT+05:00) Islamabad, Karachi
    73=>(GMT+05:00) Islamabad, Karachi, Tashkent
    33=>(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
    62=>(GMT+05:30) Sri Jayawardenepura
    91=>(GMT+05:45) Kathmandu
    42=>(GMT+06:00) Almaty, Novosibirsk
    12=>(GMT+06:00) Astana, Dhaka
    41=>(GMT+06:30) Rangoon
    59=>(GMT+07:00) Bangkok, Hanoi, Jakarta
    50=>(GMT+07:00) Krasnoyarsk
    17=>(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
    46=>(GMT+08:00) Irkutsk, Ulaan Bataar
    60=>(GMT+08:00) Kuala Lumpur, Singapore
    70=>(GMT+08:00) Perth
    63=>(GMT+08:00) Taipei
    65=>(GMT+09:00) Osaka, Sapporo, Tokyo
    77=>(GMT+09:00) Seoul
    75=>(GMT+09:00) Yakutsk
    10=>(GMT+09:30) Adelaide
    4=>(GMT+09:30) Darwin
    20=>(GMT+10:00) Brisbane
    5=>(GMT+10:00) Canberra, Melbourne, Sydney
    74=>(GMT+10:00) Guam, Port Moresby
    64=>(GMT+10:00) Hobart
    69=>(GMT+10:00) Vladivostok
    15=>(GMT+11:00) Magadan, Solomon Is., New Caledonia
    44=>(GMT+12:00) Auckland, Wellington
    26=>(GMT+12:00) Fiji, Kamchatka, Marshall Is.
    6=>(GMT-01:00) Azores
    8=>(GMT-01:00) Cape Verde Is.
    39=>(GMT-02:00) Mid-Atlantic
    22=>(GMT-03:00) Brasilia
    94=>(GMT-03:00) Buenos Aires
    55=>(GMT-03:00) Buenos Aires, Georgetown
    29=>(GMT-03:00) Greenland
    95=>(GMT-03:00) Montevideo
    45=>(GMT-03:30) Newfoundland
    3=>(GMT-04:00) Atlantic Time (Canada)
    57=>(GMT-04:00) Georgetown, La Paz, San Juan
    96=>(GMT-04:00) Manaus
    51=>(GMT-04:00) Santiago
    76=>(GMT-04:30) Caracas
    56=>(GMT-05:00) Bogota, Lima, Quito
    23=>(GMT-05:00) Eastern Time (US & Canada)
    67=>(GMT-05:00) Indiana (East)
    11=>(GMT-06:00) Central America
    16=>(GMT-06:00) Central Time (US & Canada)
    37=>(GMT-06:00) Guadalajara, Mexico City, Monterrey
    7=>(GMT-06:00) Saskatchewan
    68=>(GMT-07:00) Arizona
    38=>(GMT-07:00) Chihuahua, La Paz, Mazatlan
    40=>(GMT-07:00) Mountain Time (US & Canada)
    52=>(GMT-08:00) Pacific Time (US & Canada)
    104=>(GMT-08:00) Tijuana, Baja California
    48=>(GMT-09:00) Alaska
    32=>(GMT-10:00) Hawaii
    58=>(GMT-11:00) Midway Island, Samoa
    18=>(GMT-12:00) International Date Line West
    105=>(GMT-4:00) Eastern Daylight Time (US & Canada)
    13=>GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague

```

Supported Currency List
-----------------------

[](#supported-currency-list)

 **See Full List**
```

    AUD
    CAD
    EUR
    GBP
    NZD
    USD

```

Repeat List
-----------

[](#repeat-list)

 **See Full List**
```

    1 =>Daily (all 7 days)
    2=>6 Days(Mon-Sat)
    3=>5 Days(Mon-Fri)
    4=>Weekly
    5=>Once every month
    6=>On selected days

```

Weekdays List
-------------

[](#weekdays-list)

 **See Full List**
```

    1=> Sunday
    2=> Monday
    3=> Tuesday
    4=> Wednesday
    5=> Thursday
    6=> Friday
    7=> Saturday

```

Interface Language List
-----------------------

[](#interface-language-list)

 **See Full List**
```

    1 =>arabic
    2 =>bosnian
    3 =>bulgarian
    4 =>catalan
    5 =>chinese-simplified
    6 =>chinese-traditional
    7 =>croatian
    8 =>czech
    9 =>danish
    10 =>dutch
    11 =>english
    12 =>estonian
    13 =>finnish
    14 =>french
    15 =>german
    16 =>greek
    17 =>haitian-creole
    18 =>hebrew
    19 =>hindi
    20 =>hmong-daw
    21 =>hungarian
    22 =>indonesian
    23 =>italian
    24 =>japanese
    25 =>kiswahili
    26 =>klingon
    27 =>korean
    28 =>lithuanian
    29 =>malayalam
    30 =>malay
    31 =>maltese
    32 =>norwegian-bokma
    33 =>persian
    34 =>polish
    35 =>portuguese
    36 =>romanian
    37 =>russian
    38 =>serbian
    39 =>slovak
    40 =>slovenian
    41 =>spanish
    42 =>swedish
    43 =>tamil
    44 =>telugu
    45 =>thai
    46 =>turkish
    47 =>ukrainian
    48 =>urdu
    49 =>vietnamese
    50 =>welsh

```

Data Center Region List
-----------------------

[](#data-center-region-list)

 **See Full List**
```

    0 => Intelligent routing to nearest location
    1 => US East (Dallas, TX)
    2 => US West (Los Angeles, CA)
    3 => US East (New York)
    4 => Europe (Frankfurt, Germany)
    5 => Europe (London)
    6 => Asia Pacific (Bangalore, India)
    7 => Asia Pacific (Singapore)
    8 => US East (Miami, FL)
    9 => Europe (Milan, Italy)
    10 => Asia Pacific (Tokyo, Japan)
    11 => Middle East (Dubai, UAE)
    12 => Australia (Sydney)
    13 => Europe (Paris, France)
    14 => Asia Pacific (Hong Kong, China)
    15 => Europe (Amsterdam, Netherlands)

```

Authors
-------

[](#authors)

- **Akib Tanjim** - [akibtanjim](https://github.com/akibtanjim)
- **Alveee** - [Alveee](https://github.com/Alveee)
- **Lutfullahil Kabir Ashik** - [LutfullahilKabirAshik](https://github.com/LutfullahilKabirAshik)

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

2163d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3b5def95341db1bf42b46c9b9caa9cb88c805dd0c1f36727f7662c4be3f4284b?d=identicon)[akibtanjim](/maintainers/akibtanjim)

---

Top Contributors

[![akibtanjim](https://avatars.githubusercontent.com/u/8993623?v=4)](https://github.com/akibtanjim "akibtanjim (3 commits)")[![Alveee](https://avatars.githubusercontent.com/u/15340860?v=4)](https://github.com/Alveee "Alveee (1 commits)")

---

Tags

laravelvideovirtualmeetingvirtual classroomclassroombraincertwhite boardvideo conferenceonline classroomvirtual classroom api

### Embed Badge

![Health badge](/badges/akibtanjim-virtual-classroom/health.svg)

```
[![Health](https://phpackages.com/badges/akibtanjim-virtual-classroom/health.svg)](https://phpackages.com/packages/akibtanjim-virtual-classroom)
```

###  Alternatives

[lakshmaji/thumbnail

Thumbnails for videos

108122.2k](/packages/lakshmaji-thumbnail)[chojnicki/video-platforms-parser

Easy to use SDK with grabber for multiple platforms at once like YouTube, Dailymotion, Facebook and more.

22226.4k](/packages/chojnicki-video-platforms-parser)[mostafaznv/nova-video

Video Field for Laravel Nova

22398.0k1](/packages/mostafaznv-nova-video)[aminyazdanpanah/php-shaka

Shaka PHP is a library that uses Shaka Packager for DASH and HLS packaging and encryption, supporting Common Encryption for Widevine and other DRM Systems.

939.0k1](/packages/aminyazdanpanah-php-shaka)[folour/flavy

FFmpeg layer for Laravel 5.2-5.4, this is a fork of rafasamp/sonus package

279.6k](/packages/folour-flavy)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
