108 lines
3.2 KiB
PHP
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');
|
|
}
|
|
}
|
|
}
|
|
}
|