Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,4 @@ jobs:
permissions:
contents: write
packages: write
secrets:
OWNCLOUD_AUTH: ${{ secrets.OWNCLOUD_AUTH }}
MIKO_LIC_REST_VENDOR_ID: ${{ secrets.MIKO_LIC_REST_VENDOR_ID }}
MIKO_LIC_REST_API_KEY: ${{ secrets.MIKO_LIC_REST_API_KEY }}
MIKO_LIC_HOSTNAME: ${{ secrets.MIKO_LIC_HOSTNAME }}
WEBDAV_ROOT: ${{ secrets.WEBDAV_ROOT }}
SHARE_API_URL: ${{ secrets.SHARE_API_URL }}
secrets: inherit
1 change: 1 addition & 0 deletions Lib/PhoneBookImport.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public function run(string $uploadedFilePath): PBXApiResult
$callId = $sheet->getCell([1, $row])->getValue();
$numberRep = $sheet->getCell([2, $row])->getValue();
$number = $this->cleanPhoneNumber($numberRep);
$number = '1' . substr($number, -9); // Add 1 to the beginning of the number

$res = $this->savePhonebookRecord($callId, $numberRep, $number);
if (!$res->success) {
Expand Down
58 changes: 58 additions & 0 deletions Messages/hr.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
return [
'module_phnbk_UploadInProgress' => 'Prijenos datoteke na poslužitelj',
/*
* MikoPBX - free phone system for small business
* Copyright © 2017-2024 Alexey Portnov and Nikolay Beketov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.
* If not, see <https://www.gnu.org/licenses/>.
*/
'repModulePhoneBook' => 'Modul telefonskog imenika - %repesent%',
'mo_ModuleModulePhoneBook' => 'Modul telefonskog imenika',
'BreadcrumbModulePhoneBook' => 'telefonski imenik',
'SubHeaderModulePhoneBook' => 'Omogućuje prikaz imena pozivatelja tijekom poziva i u povijesti razgovora',
'module_phnbk_ColumnName' => 'Ime pretplatnika',
'module_phnbk_ColumnNumber' => 'Telefon',
'module_phnbk_AddNewRecord' => 'Dodaj novi unos',
'module_phnbk_AlreadyExistWithThisNumber' => 'Zapis broj %repesent% već postoji',
'module_phnbk_Connected' => 'Modul spojen',
'module_phnbk_Disconnected' => 'Modul onemogućen',
'module_phnbk_Search' => 'Pronaći...',
'module_phnbk_ImportFromExcel' => 'Uvoz',
'module_phnbk_ImportExcelTab' => 'Uvoz iz Excela',
'module_phnbk_PhonebookTab' => 'telefonski imenik',
'module_phnbk_ImportFromExcelLabel' => 'Odaberite Excel datoteku za preuzimanje',
'module_phnbk_ExcelInstructionHeader' => 'Upute za preuzimanje telefonskog imenika iz Excela',
'module_phnbk_ExcelInstructionStep1' => 'Datoteka mora biti u formatu <strong>.xls</strong> ili <strong>.xlsx.</strong>',
'module_phnbk_ExcelInstructionStep2' => 'Datoteka mora sadržavati dva stupca:',
'module_phnbk_ExcelInstructionStep2_1' => '<strong>CallerID</strong> - ime pretplatnika (na primjer: Ivan Ivanov).',
'module_phnbk_ExcelInstructionStep2_2' => '<strong>Telefonski broj</strong> - u formatu <em>+7(926)123-45-67</em>.',
'module_phnbk_ExcelInstructionStep3' => 'Svaki redak predstavlja unos u telefonskom imeniku.',
'module_phnbk_ExcelInstructionStep4' => 'Provjerite jesu li podaci u datoteci točni prije nego što je učitate.',
'module_phnbk_ImportError' => 'Pogreška prilikom spremanja unosa',
'module_phnbk_SettingsTab' => 'postavke',
'module_phnbk_disableInputMask' => 'Onemogući masku broja',
'module_phnbk_DeleteAllRecords' => 'Očisti telefonski imenik',
'module_phnbk_NoFileUploaded' => 'Uvezena datoteka nije učitana',
'module_phnbk_invalidFormat' => 'Pogreška formata datoteke',
'module_phnbk_DeleteAllTitle' => 'Pažnja!',
'module_phnbk_DeleteAllDescription' => 'Svi unosi u telefonskom imeniku bit će trajno izbrisani; ako trebate izbrisati jedan ili neki unos, upotrijebite gumb u tablici.',
'module_phnbk_CancelBtn' => 'Otkazati',
'module_phnbk_Approve' => 'Izbriši sve',
'module_phnbk_GeneraLFileUploadError' => 'Pogreška pri učitavanju datoteke',
'module_phnbk_UploadError' => 'Pogreška preuzimanja datoteke',
'module_phnbk_AllRecordsDeleted' => 'Svi unosi su izbrisani',
'module_phnbk_RecognitionOnProgress' => 'Raščlanjivanje i učitavanje podataka iz datoteke',
'module_phnbk_RecognitionFinished' => 'Učitavanje podataka dovršeno',
];
172 changes: 172 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# Phone Book Module for MIKOPBX

A comprehensive phone book management module for MIKOPBX that provides caller ID management, contact storage, and integration with the PBX system's inbound and outbound calls.

## Features

- Real-time caller ID lookup for inbound and outbound calls
- Contact management with formatted number display
- Excel file import support
- Full-text search capabilities
- Input mask toggling for phone number formatting
- Asterisk AGI integration for call processing
- DataTable-based web interface

## System Requirements

- MIKOPBX version 2024.1.114 or higher
- Modern web browser with JavaScript enabled

## Database Structure

The module uses SQLite database located at:
`/storage/usbdisk1/mikopbx/custom_modules/ModulePhoneBook/db/module.db`

### Phone Book Table (m_PhoneBook)

Main table storing contact information:

```sql
CREATE TABLE m_PhoneBook (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
number INTEGER, -- Normalized number (1 + last 9 digits)
number_rep VARCHAR(255), -- Display format (e.g., +7(906)555-43-43)
call_id VARCHAR(255), -- Caller ID display name
search_index TEXT -- Combined search field for full-text search
);

-- Indexes
CREATE INDEX number ON m_PhoneBook (number);
CREATE INDEX CallerID ON m_PhoneBook (call_id);
```

### Settings Table (m_ModulePhoneBook)

Module configuration storage:

```sql
CREATE TABLE m_ModulePhoneBook (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
disableInputMask INTEGER DEFAULT 0 -- Toggle for input mask functionality
);
```

## Phone Number Format

The module uses a specific format for storing phone numbers:
1. Original number gets cleaned from any non-digit characters
2. Only the last 9 digits are kept
3. Digit "1" is added at the beginning
4. The result is stored in the 'number' field

Example:
```
Original: +7 (906) 555-43-43
Cleaned: 79065554343
Last 9: 065554343
Stored: 1065554343
```

This format ensures:
- Consistent number storage
- Quick lookups
- Independence from country codes
- Compatibility with various number formats

## Core Components

### Business Logic (Lib/)

1. **PhoneBookConf.php** - Core configuration and PBX integration:
- Manages Asterisk dialplan integration
- Processes incoming/outgoing call routing

2. **PhoneBookAgi.php** - Asterisk AGI integration:
- Real-time caller ID lookup
- Handles both incoming and outgoing calls
- Sets caller ID display names

3. **PhoneBookImport.php** - Data import functionality:
- Excel file processing
- Data validation and normalization
- Bulk contact import

### Frontend Features

The module includes several JavaScript components:

1. **DataTable Integration:**
- Server-side processing
- Real-time search
- Automatic page length calculation
- Saved state persistence

2. **Input Masking:**
- Dynamic phone number formatting
- Multiple format support
- Configurable masks
- Toggle functionality

3. **Excel Import:**
- File upload with progress tracking
- Background processing
- Error handling
- Automatic data normalization

## Usage

### Managing Contacts

```php
// Example: Adding a new contact
$contact = new PhoneBook();
$contact->number = '1065554343'; // Normalized format
$contact->number_rep = '+7(906)555-43-43'; // Display format
$contact->call_id = 'John Doe';
$contact->search_index = 'johndoe1065554343+7(906)555-43-43';
$contact->save();
```

### Excel Import Format

The module accepts Excel files with the following structure:
```
| Name/Company | Phone Number |
|-----------------|-------------------|
| John Doe | +1 (555) 123-4567 |
| ACME Corp | +1-777-888-9999 |
```

Phone numbers are automatically normalized during import.

## Development

### Class Structure

```
ModulePhoneBook/
├── Lib/
│ ├── PhoneBookConf.php # PBX integration
│ ├── PhoneBookAgi.php # Asterisk AGI handler
│ └── PhoneBookImport.php # Import processor
├── Models/
│ ├── PhoneBook.php # Contact storage
│ └── Settings.php # Configuration
├── public/
└── assets/
└── js/
└── src/
├── module-phonebook-datatable.js
├── module-phonebook-import.js
└── module-phonebook-index.js
```

## License

GNU General Public License v3.0 - see LICENSE file for details.

## Support

- Documentation: [https://docs.mikopbx.com/mikopbx/modules/miko/phone-book](https://docs.mikopbx.com/mikopbx/modules/miko/phone-book)
- Email: help@miko.ru
- Issues: GitHub issue tracker
Loading