Files
crm.clientright.ru/modules/OnlyOfficeTemplates/OnlyOfficeTemplates.php
2026-02-16 09:27:19 +03:00

108 lines
3.2 KiB
PHP

<?php
/**
* OnlyOfficeTemplates module - DOCX template merge and PDF/DOCX export.
* Portable: config via .env or optional crm_extensions config.
*/
class OnlyOfficeTemplates
{
public $db;
public $moduleName = 'OnlyOfficeTemplates';
public $parentName = 'Tools';
public function __construct()
{
global $log;
$this->db = PearDatabase::getInstance();
}
public function vtlib_handler($modulename, $event_type)
{
switch ($event_type) {
case 'module.postinstall':
$this->executeSql();
$this->addLinksToEntityModules();
break;
case 'module.preupdate':
case 'module.disabled':
$this->removeLinksFromEntityModules();
break;
case 'module.enabled':
case 'module.postupdate':
$this->executeSql();
$this->removeLinksFromEntityModules();
$this->addLinksToEntityModules();
break;
case 'module.preuninstall':
$this->removeLinksFromEntityModules();
break;
}
}
/**
* Create tables from schema.xml
*/
public function executeSql()
{
$schemaPath = dirname(__FILE__) . '/schema.xml';
if (!is_file($schemaPath)) {
return;
}
$xml = @simplexml_load_file($schemaPath);
if (!$xml || !isset($xml->tables->table)) {
return;
}
foreach ($xml->tables->table as $table) {
$name = (string)$table->name;
$sql = isset($table->sql) ? (string)$table->sql : '';
if (empty($sql)) {
continue;
}
$this->db->pquery($sql, []);
}
// seq initial value
$this->db->pquery("INSERT IGNORE INTO vtiger_oot_templates_seq (id) VALUES (1)", []);
}
/**
* Add DETAILVIEWSIDEBARWIDGET link to all entity modules (like PDFMaker).
*/
public function addLinksToEntityModules()
{
$result = $this->db->pquery(
"SELECT name FROM vtiger_tab WHERE isentitytype = ? AND presence = ?",
['1', '0']
);
while ($row = $this->db->fetchByAssoc($result)) {
$moduleName = $row['name'];
$module = Vtiger_Module::getInstance($moduleName);
if (!$module) {
continue;
}
$module->deleteLink('DETAILVIEWSIDEBARWIDGET', 'OnlyOfficeTemplates');
$module->addLink(
'DETAILVIEWSIDEBARWIDGET',
'OnlyOfficeTemplates',
'module=OnlyOfficeTemplates&view=GetTemplateActions&record=$RECORD$'
);
}
}
/**
* Remove widget link from all entity modules.
*/
public function removeLinksFromEntityModules()
{
$result = $this->db->pquery(
"SELECT name FROM vtiger_tab WHERE isentitytype = ? AND presence = ?",
['1', '0']
);
while ($row = $this->db->fetchByAssoc($result)) {
$module = Vtiger_Module::getInstance($row['name']);
if ($module) {
$module->deleteLink('DETAILVIEWSIDEBARWIDGET', 'OnlyOfficeTemplates');
}
}
}
}