Add OnlyOfficeTemplates module
This commit is contained in:
107
modules/OnlyOfficeTemplates/OnlyOfficeTemplates.php
Normal file
107
modules/OnlyOfficeTemplates/OnlyOfficeTemplates.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?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');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user