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'); } } } }