MikoPBX development
  • MikoPBX development guide
  • Prepare IDE and system tools
    • Windows
    • Linux
    • Mac
  • Modules developement
    • How to start
    • Data model
    • Module installer class
    • Module main class
    • Module interface
    • Translations(empty)
    • Debuging
      • Configuring IDE
      • Debug PHP-AGI
      • Debug PHP Worker
      • Debug PHP Script
      • Debugging behind NAT
  • Internal structure
  • Admin interface(empty)
  • API
    • REST API
    • AMI / AJAM
    • AGI
  • Core(empty)
  • Marketplace
    • Licensing (empty)
  • Cookbook
    • Forms
      • Create module form
      • Create datatable
      • Add field into existing form
    • Asterisk
      • Hook on incoming call
      • Interact with AMI
      • Modify extensions.conf
    • Rights and auth
      • External authentication
      • Limited rights
Powered by GitBook
On this page
  • Creating a new data model
  • Requirements
  • Using the model

Was this helpful?

Edit on GitHub
  1. Modules developement

Data model

Database tables structure and relative relationships between tables

We advise starting development from a proper data structure. Every module has its own database. You should describe the structure of tables on models classes according to the Phalcon models documentations. Describe every column with its type using metadata annotations and organize data relationships between other tables.

Creating a new data model

The model files are described in the directory "Models":

ModuleTemplate
├── agi-bin
├── App
├── bin
├── composer.json
├── db
├── Lib
├── Messages
├── Models
│   ├── ModuleTemplate.php
│   ├── PhoneBook.php
│   └── QuestionsQuality.php
├── module.json
├── public
├── README.md
├── readme.ru.md
└── Setup

The description of the model is reduced to the description of the metadata of the database table.

Create a file named "QuestionsQuality.php" and Extend from ModulesModelsBase:

Adding a description of the table metadata. Class properties - column names. In the comments, we describe the type of value.

<?php
namespace Modules\ModuleTemplate\Models;
use MikoPBX\Modules\Models\ModulesModelsBase;

class QuestionsQuality extends ModulesModelsBase
{
    /**
     * @Primary
     * @Identity
     * @Column(type="integer", nullable=false)
     */
    public $id;
    
    /**
     * @Column(type="string", nullable=true)
     */
    public $question;
    
    /**
     * @Column(type="integer", nullable=true)
     */
    public $priority = '0';
    
    /**
     * @Column(type="integer", nullable=true)
     */
    public $disabled;
    
    public function initialize(): void
    {
        $this->setSource('m_QuestionsList');
        parent::initialize();
        $this->useDynamicUpdate(true);
    }

}

In this example, we have described the following fields:

  • id - Required fields, primary key (type integer).

  • question - Field for the description of the question text (type string)

  • priority - Required fields for ordering questions

  • disabled - boolean, allows you to mark the question as irrelevant, note that the boolean is described as integer (0 or 1)

The function "initialize" describes the name of the table "m_QuestionsList" in module the database.

Requirements

  • The table name "m_QuestionsList" must be unique within the module

  • The class name "QuestionsQuality" must be unique within the module

Using the model

After describing the model, you need to package the module in a ZIP archive and re-install it. The table will be created only after the installation is completed.

The module database (sqlite3) will be created using the following path:

/storage/usbdisk1/mikopbx/custom_modules/ModuleTemplate/db/module.db

To check for a new table, run:

sqlite3 /storage/usbdisk1/mikopbx/custom_modules/ModuleTemplate/db/module.db .tables

  • where "ModuleTemplate" is the name of the module

PreviousHow to startNextModule installer class

Last updated 3 years ago

Was this helpful?