vtenext/modules/SDK/SDK.php
2021-04-28 20:10:26 +02:00

3173 lines
116 KiB
PHP
Raw Blame History

<?php
/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
/* crmv@47905bis crmv@171009 */
include_once('modules/SDK/LangUtils.php');
include_once('modules/SDK/SDKUtils.php');
class SDK extends SDKUtils {
protected static $sdk_session_keys = array('sdk_uitype', 'sdk_utils', 'sdk_popup_return_funct', 'sdk_smarty', 'sdk_presave', 'sdk_popup_query', 'sdk_adv_query', 'sdk_adv_permission', 'sdk_class_all', 'sdk_class', 'sdk_class_parent', 'sdk_view', 'sdk_file', 'sdk_home_iframe', 'sdk_reportfolders', 'sdk_reports', 'sdk_js_lang', 'sdk_transitions', 'vte_languages', 'sdk_pdf_cfunctions'); //crmv@2539m crmv@208472
protected static $other_session_keys = array('installed_modules');
public static $cacheFolder = 'cache/sys/SDK/';
/**
* Invoked when special actions are performed on the module.
* @param String Module name
* @param String Event Type
*/
function vtlib_handler($moduleName, $eventType) {
global $adb,$table_prefix;
if($eventType == 'module.postinstall') {
require_once('modules/SDK/InstallTables.php');
$adb->pquery('UPDATE '.$table_prefix.'_tab SET customized=0 WHERE name=?', array($moduleName));
$moduleInstance = Vtecrm_Module::getInstance('SDK');
Vtecrm_Link::addLink($moduleInstance->id,'HEADERSCRIPT','SDKScript','modules/SDK/SDK.js');
self::setUtil('modules/SDK/LangUtils.php');
self::setUtil('modules/SDK/src/Utils.php');
self::setUtil('modules/SDK/src/Favorites/Utils.php');
$langinfo = vtlib_getToggleLanguageInfo();
$languages = array_keys($langinfo);
if (empty($languages)) {
$languages = array('en_us','it_it');
}
foreach ($languages as $language){
self::importPhpLanguage($language);
//l'import della lingua js viene fatto in Header.tpl
}
$adb->pquery('DELETE FROM '.$table_prefix.'_profile2tab WHERE tabid = ?',array($moduleInstance->id));
$adb->pquery('DELETE FROM '.$table_prefix.'_profile2standardperm WHERE tabid = ?',array($moduleInstance->id));
$adb->pquery('DELETE FROM '.$table_prefix.'_profile2utility WHERE tabid = ?',array($moduleInstance->id));
$adb->pquery('DELETE FROM '.$table_prefix.'_profile2field WHERE tabid = ?',array($moduleInstance->id));
$moduleInstance->hide(array('hide_module_manager'=>1,'hide_profile'=>0,'hide_report'=>1));
self::setUitype('201','modules/SDK/src/201/201.php','modules/SDK/src/201/201.tpl','modules/SDK/src/201/201.js'); //crmv@26523
self::setUitype('202','modules/SDK/src/202/202.php','modules/SDK/src/202/202.tpl','modules/SDK/src/202/202.js'); //crmv@26809
self::setUitype('203','modules/SDK/src/203/203.php','modules/SDK/src/203/203.tpl','modules/SDK/src/203/203.js'); //crmv@26809
self::setMenuButton('fixed','LBL_FAVORITES',"showFloatingDiv('favorites',this);getFavoriteList();",'grade'); //crmv@26986
//crmv@56233
SDK::setUitype(204,'modules/SDK/src/204/204.php','modules/SDK/src/204/204.tpl','');
$moduleInstance = Vtecrm_Module::getInstance('HelpDesk');
Vtecrm_Link::addLink($moduleInstance->id, 'DETAILVIEWBASIC', 'LBL_DO_NOT_IMPORT_ANYMORE', "javascript:doNotImportAnymore('\$MODULE\$',\$RECORD\$,'DetailView');", 'vteicon:whatshot',0,'checkMailScannerInfoRule:include/utils/crmv_utils.php');
Vtecrm_Link::addLink($moduleInstance->id, 'LISTVIEWBASIC', 'LBL_DO_NOT_IMPORT_ANYMORE', "javascript:doNotImportAnymore('\$MODULE\$','','MassListView');",'',0,'checkMailScannerInfoRule:include/utils/crmv_utils.php');
//crmv@56233e
//crmv@29079
self::setUitype(205,'modules/SDK/src/205/205.php','modules/SDK/src/205/205.tpl','');
//crmv@30014
self::setUitype(206, 'modules/SDK/src/206/206.php', 'modules/SDK/src/206/206.tpl', 'modules/SDK/src/206/206.js', 'integer');
if (Vtecrm_Utils::CheckTable($table_prefix.'_home_iframe')) {
$adb->pquery('insert into '.$table_prefix.'_home_iframe (hometype,url) values (?,?)',array('MODCOMMENTS','index.php?module=ModComments&action=ModCommentsAjax&file=ModCommentsWidgetHandler&ajax=true&widget=DetailViewBlockCommentWidget'));
}
$homeModule = Vtecrm_Module::getInstance('SDK');
$homeModule->addLink('HEADERSCRIPT', 'NotificationsScript', 'modules/SDK/src/Notifications/NotificationsCommon.js');
$homeModule->addLink('HEADERCSS', 'NotificationsScript', 'modules/SDK/src/Notifications/NotificationsCommon.css');
//crmv@29079e
self::addView('Users', 'modules/SDK/src/modules/Users/UsersView.php', 'constrain', 'continue'); //crmv@29506
$result = $adb->pquery("select * from {$table_prefix}_field where tabid = 13 and fieldname in (?,?)",array('projecttaskid','projectplanid'));
if ($result && $adb->num_rows($result) == 2) {
self::setPopupQuery('field', 'HelpDesk', 'projecttaskid', 'modules/SDK/src/modules/HelpDesk/ProjectTaskQuery.php', array('projectplanid'=>'getObj("projectplanid").value'));
}
SDK::setUitype(207,'modules/SDK/src/207/207.php','modules/SDK/src/207/207.tpl','modules/SDK/src/207/207.js');
//crmv@2539m
SDK::setPDFCustomFunction('if-else','its4you_if',array('param1','comparator','param2','return1','return2'));
SDK::setPDFCustomFunction('Contact Image','its4you_getContactImage',array('contactid','width','height'));
SDK::setPDFCustomFunction('Net Prices Total','getTotalNetPrice',array('$CRMID$'));
SDK::setPDFCustomFunction('Discount Prices Total','getTotalDiscountPrice','$CRMID$');
//crmv@2539me
SDK::setUitype(210, 'modules/SDK/src/210/210.php', 'modules/SDK/src/210/210.tpl', 'modules/SDK/src/210/210.js', 'text');
// crmv@95157
SDK::setUitype(212, 'modules/SDK/src/212/212.php', 'modules/SDK/src/212/212.tpl', 'modules/SDK/src/212/212.js', 'picklist');
require_once('modules/Documents/storage/StorageBackendUtils.php');
$SBU = StorageBackendUtils::getInstance();
$SBU->syncDB();
// crmv@95157e
SDK::setUitype(213, 'modules/SDK/src/213/213.php', 'modules/SDK/src/213/213.tpl', '');
SDK::setUitype(214, 'modules/SDK/src/214/214.php', 'modules/SDK/src/214/214.tpl', '', 'datetime'); // crmv@101930
SDK::setUitype(215,'modules/SDK/src/215/215.php','modules/SDK/src/215/215.tpl','modules/SDK/src/215/215.js'); // crmv@150808
SDK::setUitype(220, 'modules/SDK/src/220/220.php', 'modules/SDK/src/220/220.tpl', 'modules/SDK/src/220/220.js', 'table'); // crmv@102879
SDK::setUitype(221, 'modules/SDK/src/221/221.php', 'modules/SDK/src/221/221.tpl', 'modules/SDK/src/221/221.js', 'string'); //crmv@174986
// crmv@201442
SDK::setUitype(310, 'modules/SDK/src/310/310.php','modules/SDK/src/310/310.tpl', '', 'picklist');
SDK::setUitype(311, 'modules/SDK/src/311/311.php','modules/SDK/src/311/311.tpl', '', 'multipicklist');
// crmv@201442e
// migrate old reference uitypes to uitype 10 - i
$acc = 'modules/SDK/src/ReturnFunct/ReturnAccountAddress.php';
$cont = 'modules/SDK/src/ReturnFunct/ReturnContactAddress.php';
$pot = 'modules/SDK/src/ReturnFunct/ReturnPotentialAddress.php';
$prod = 'modules/SDK/src/ReturnFunct/ReturnProductLines.php';
$vend = 'modules/SDK/src/ReturnFunct/ReturnVendorAddress.php';
$user = 'modules/SDK/src/ReturnFunct/ReturnUserLastname.php';
SDK::setPopupReturnFunction('Accounts', 'account_id', $acc);
SDK::setPopupReturnFunction('Contacts', 'account_id', $acc);
SDK::setPopupReturnFunction('Contacts', 'contact_id', $cont);
SDK::setPopupReturnFunction('Calendar', 'contact_id', $cont);
SDK::setPopupReturnFunction('Events', 'contact_id', $cont);
SDK::setPopupReturnFunction('Quotes', 'contact_id', $cont);
SDK::setPopupReturnFunction('PurchaseOrder', 'contact_id', $cont);
SDK::setPopupReturnFunction('SalesOrder', 'contact_id', $cont);
SDK::setPopupReturnFunction('Invoice', 'contact_id', $cont);
SDK::setPopupReturnFunction('Quotes', 'account_id', $acc);
SDK::setPopupReturnFunction('SalesOrder', 'account_id', $acc);
SDK::setPopupReturnFunction('Invoice', 'account_id', $acc);
SDK::setPopupReturnFunction('Quotes', 'potential_id', $pot);
SDK::setPopupReturnFunction('SalesOrder', 'potential_id', $pot);
SDK::setPopupReturnFunction('SalesOrder', 'quote_id', $prod);
SDK::setPopupReturnFunction('Invoice', 'salesorder_id', $prod);
SDK::setPopupReturnFunction('PurchaseOrder', 'vendor_id', $vend);
SDK::setPopupReturnFunction('Users', 'reports_to_id', $user);
SDK::setPopupReturnFunction('Timecards', 'newresp', $user);
SDK::setPopupReturnFunction('Projects', 'reports_to_id', $user);
$popup_query_file = 'modules/SDK/src/PopupQuery/ExcludeCurrentUser.php';
SDK::setPopupQuery('field', 'Users', 'reports_to_id', $popup_query_file);
SDK::setPopupQuery('field', 'Timecards', 'newresp', $popup_query_file);
SDK::setPopupQuery('field', 'Projects', 'reports_to_id', $popup_query_file);
// migrate old reference uitypes to uitype 10 - e
//crmv@3078m
$result = $adb->query("SELECT * FROM sdk_menu_fixed WHERE title = 'Events'");
if ($result) {
if ($adb->num_rows($result)>0){
$adb->query("delete FROM sdk_menu_fixed WHERE title = 'Events'");
}
SDK::setMenuButton('fixed','Events',"showFloatingDiv('events',this);getEventList(this);",'event');
}
$homeModule->addLink('HEADERSCRIPT','EventUtils','modules/SDK/src/Events/js/Utils.js');
//crmv@3078me
// crmv@44323 - sharkpanel report :(
SDK::setReportFolder('Budget', '');
SDK::setReport('Budget by Product Line', '', 'Budget', 'modules/Potentials/BudgetReportRun.php', 'BudgetReportRun', 'budgetParams');
$result = $adb->pquery("SELECT {$table_prefix}_report.reportid, {$table_prefix}_report.folderid
FROM sdk_reports
INNER JOIN {$table_prefix}_report ON sdk_reports.reportid = {$table_prefix}_report.reportid
WHERE runclass = ?", array('BudgetReportRun'));
if ($result && $adb->num_rows($result) > 0) {
$sharkReportId = $adb->query_result($result,0,'reportid');
$sharkReportFolder = $adb->query_result($result,0,'folderid');
SDK::setMenuButton('contestual', 'Budget', "window.location='index.php?module=Reports&action=SaveAndRun&record={$sharkReportId}&folderid={$sharkReportFolder}';", 'euro_symbol', 'Potentials', 'index');
}
// crmv@44323e
//crmv@52306 crmv@54900
$result = $adb->pquery("SELECT relation_id, name FROM {$table_prefix}_relatedlists WHERE tabid = 14 AND related_tabid = 14 AND label = ?",array('Product Bundles'));
if ($result && $adb->num_rows($result) > 0) {
$relation_id = $adb->query_result($result,0,'relation_id');
$method = $adb->query_result($result,0,'name');
SDK::setTurboliftCount($relation_id, $method);
}
$result = $adb->query("SELECT relation_id, name FROM {$table_prefix}_relatedlists WHERE tabid = 14 AND related_tabid = 14 AND label LIKE 'Parent Product%'");
if ($result && $adb->num_rows($result) > 0) {
$relation_id = $adb->query_result($result,0,'relation_id');
$method = $adb->query_result($result,0,'name');
SDK::setTurboliftCount($relation_id, $method);
}
$result = $adb->query("SELECT relation_id, name FROM {$table_prefix}_relatedlists WHERE tabid = 7 AND related_tabid = 26");
if ($result && $adb->num_rows($result) > 0) {
$relation_id = $adb->query_result($result,0,'relation_id');
$method = $adb->query_result($result,0,'name');
SDK::setTurboliftCount($relation_id, $method);
}
//crmv@52306e crmv@54900e
// crmv@142678
$campInst = Vtecrm_Module::getInstance('Campaigns');
$result = $adb->pquery("SELECT relation_id, name FROM {$table_prefix}_relatedlists WHERE tabid = ? AND related_tabid = ? AND name LIKE 'get_statistics_%'", array($campInst->id, 0));
if ($result) {
while ($row = $adb->fetchByAssoc($result, -1, false)) {
SDK::setTurboliftCount($row['relation_id'], $row['name']);
}
}
// crmv@142678e
//crmv@62414
$documents_instance = Vtecrm_Module::getInstance('Documents');
Vtecrm_Link::addLink($documents_instance->id, 'DETAILVIEWWIDGET', 'DOC_PREVIEW', "module=Documents&action=DocumentsAjax&file=PreviewFile&mode=button&record=$"."RECORD$");
//crmv@62414e
//crmv@64516
$configPBFile = 'modules/Campaigns/ProcessBounces.config.php';
if (!file_exists($configPBFile)) {
$configPBTemplate = file_get_contents('modules/Campaigns/ProcessBounces.config.template.php');
file_put_contents($configPBFile, $configPBTemplate);
}
//crmv@64516e
//crmv@OPER5904
$moduleInstance = Vtecrm_Module::getInstance('SDK');
Vtecrm_Link::addLink($moduleInstance->id,'HEADERSCRIPT','VTELocalStorageScript','modules/SDK/src/VTELocalStorage.js');
//crmv@OPER5904e
// crmv@OPER6317
Vtecrm_Link::addLink($moduleInstance->id, 'HEADERSCRIPT', 'Wizard', 'include/js/Wizard.js');
// crmv@OPER6317e
/* TODO@bosch
SDK::setUitype(213, 'modules/SDK/src/213/213.php', 'modules/SDK/src/213/213.tpl', '');
*/
SDK::setUitype(49,'modules/SDK/src/49/49.php','modules/SDK/src/49/49.tpl','modules/SDK/src/49/49.js'); // crmv@187823
//crmv@101683
$uitype = 51;
SDK::setUitype($uitype,"modules/SDK/src/$uitype/$uitype.php","modules/SDK/src/$uitype/$uitype.tpl","modules/SDK/src/$uitype/$uitype.js",'reference');
$result = $adb->pquery("select fieldtypeid from {$table_prefix}_ws_fieldtype where uitype=?", array($uitype));
if ($result && $adb->num_rows($result) > 0) {
$check = $adb->pquery("select fieldtypeid from {$table_prefix}_ws_referencetype where fieldtypeid=?", array($adb->query_result($result,0,'fieldtypeid')));
if ($check && $adb->num_rows($check) == 0) {
if ($adb->isMysql()) {
$adb->pquery("insert ignore into {$table_prefix}_ws_referencetype(fieldtypeid,type) values(?,?)",array($adb->query_result($result,0,'fieldtypeid'),'Users'));
} else {
$adb->pquery("insert into {$table_prefix}_ws_referencetype(fieldtypeid,type) values(?,?)",array($adb->query_result($result,0,'fieldtypeid'),'Users'));
}
}
}
$uitype = 50;
SDK::setUitype($uitype,"modules/SDK/src/$uitype/$uitype.php","modules/SDK/src/$uitype/$uitype.tpl","modules/SDK/src/$uitype/$uitype.js",'reference');
$result = $adb->pquery("select fieldtypeid from {$table_prefix}_ws_fieldtype where uitype=?", array($uitype));
if ($result && $adb->num_rows($result) > 0) {
$check = $adb->pquery("select fieldtypeid from {$table_prefix}_ws_referencetype where fieldtypeid=?", array($adb->query_result($result,0,'fieldtypeid')));
if ($check && $adb->num_rows($check) == 0) {
if ($adb->isMysql()) {
$adb->pquery("insert ignore into {$table_prefix}_ws_referencetype(fieldtypeid,type) values(?,?)",array($adb->query_result($result,0,'fieldtypeid'),'Users'));
} else {
$adb->pquery("insert into {$table_prefix}_ws_referencetype(fieldtypeid,type) values(?,?)",array($adb->query_result($result,0,'fieldtypeid'),'Users'));
}
}
}
//crmv@101683e
SDK::setProcessMakerFieldAction('vte_sum','modules/SDK/src/ProcessMaker/Utils.php','Sum (number1,number2,...)');
SDK::setProcessMakerFieldAction("date_now", "modules/SDK/src/ProcessMaker/Utils.php", "Now Date (format)", '', 'LBL_PM_SDK_DATE_FUNCTIONS');
SDK::setProcessMakerFieldAction("formatDate", "modules/SDK/src/ProcessMaker/Utils.php", "Format Date/Time (date, format)", '', 'LBL_PM_SDK_DATE_FUNCTIONS');
SDK::setProcessMakerFieldAction("diffDate", "modules/SDK/src/ProcessMaker/Utils.php", "DiffDays (date1, date2)", '', 'LBL_PM_SDK_DATE_FUNCTIONS');
SDK::setProcessMakerTaskCondition('get_running_process_current_user', 'modules/SDK/src/ProcessMaker/Utils.php', 'LBL_RUNNING_PROCESS_CURRENT_USER');
$homeModule->addLink('HEADERSCRIPT', 'HistoryScript', 'include/js/HistoryTab.js'); //crmv@104566
SDK::setUitype(1016, 'modules/SDK/src/1016/1016.php', 'modules/SDK/src/1016/1016.tpl', 'modules/SDK/src/1016/1016.js', 'signature'); // crmv@104567
SDK::setUitype(29,'modules/SDK/src/29/29.php','modules/SDK/src/29/29.tpl','','file'); //crmv@115268
SDK::setUitype(73, 'modules/SDK/src/73/73.php', 'modules/SDK/src/73/73.tpl', '', 'time'); //crmv@128159
SDK::addView('Events', 'modules/SDK/src/modules/Calendar/EventsView.php', 'constrain', 'continue'); //crmv@158871
SDK::setUitype(209,'modules/SDK/src/209/209.php','modules/SDK/src/209/209.tpl','','url');
SDK::setUitype(86,'modules/SDK/src/86/86.php','modules/SDK/src/86/86.tpl','modules/SDK/src/86/86.js','whatsapp');
//crmv@174813
$uitype = 54;
$result = $adb->pquery("select fieldtypeid from {$table_prefix}_ws_fieldtype where uitype=?", array($uitype));
if ($result && $adb->num_rows($result) == 0) {
$fieldtypeid = $adb->getUniqueID($table_prefix."_ws_fieldtype");
$adb->pquery("insert into {$table_prefix}_ws_fieldtype(fieldtypeid,uitype,fieldtype) values(?,?,?)",array($fieldtypeid,$uitype,'reference'));
$adb->pquery("insert into {$table_prefix}_ws_referencetype(fieldtypeid,type) values(?,?)",array($fieldtypeid,'Groups'));
}
//crmv@174813e
} else if($event_type == 'module.disabled') {
// TODO Handle actions when this module is disabled.
} else if($event_type == 'module.enabled') {
// TODO Handle actions when this module is enabled.
} else if($eventType == 'module.preuninstall') {
// TODO Handle actions when this module is about to be deleted.
} else if($eventType == 'module.preupdate') {
// TODO Handle actions before this module is updated.
} else if($eventType == 'module.postupdate') {
// TODO Handle actions after this module is updated.
}
}
static function log($message, $delimit=true) {
Vtecrm_Utils::Log($message, $delimit);
}
static function getSessionKeys($add_other_session_keys=false) {
return SDK::$sdk_session_keys;
}
static function clearSessionValue($key) {
global $table_prefix;
$dependentSessions = array(
'sdk_uitype' => array('sdk_js_uitype'),
'sdk_home_iframe' => array('sdk_home_global_iframe','sdk_home_default_iframes_plain','sdk_home_default_iframes_complex','sdk_home_global_iframes','sdk_home_fixed_iframes'),
'sdk_home_global_iframe' => array('sdk_home_iframe','sdk_home_default_iframes_plain','sdk_home_default_iframes_complex','sdk_home_global_iframes','sdk_home_fixed_iframes'),
'sdk_home_default_iframes_plain' => array('sdk_home_iframe','sdk_home_global_iframe','sdk_home_default_iframes_complex','sdk_home_global_iframes','sdk_home_fixed_iframes'),
'sdk_home_default_iframes_complex' => array('sdk_home_iframe','sdk_home_global_iframe','sdk_home_default_iframes_plain','sdk_home_global_iframes','sdk_home_fixed_iframes'),
'sdk_home_global_iframes' => array('sdk_home_iframe','sdk_home_global_iframe','sdk_home_default_iframes_plain','sdk_home_default_iframes_complex','sdk_home_fixed_iframes'),
'sdk_home_fixed_iframes' => array('sdk_home_iframe','sdk_home_global_iframe','sdk_home_default_iframes_plain','sdk_home_default_iframes_complex','sdk_home_global_iframes'),
);
$cache = Cache::getInstance($key,null,self::getCacheFolder());
$cache->clear();
if (in_array($key,array_keys($dependentSessions)) && !empty($dependentSessions[$key])) {
foreach($dependentSessions[$key] as $dependentSession) {
$cache = Cache::getInstance($dependentSession,null,self::getCacheFolder());
$cache->clear();
}
}
}
static function clearSessionValues() {
$keys = self::getSessionKeys(true);
foreach ($keys as $k) {
self::clearSessionValue($k);
}
foreach (SDK::$other_session_keys as $other_session_key) {
$cache = Cache::getInstance($other_session_key);
$cache->clear();
}
}
/**
* Updates (or create a new one if it doesn't exist) an entry in the language table
*/
static function setLanguageEntry($module, $langid, $label, $newlabel) {
global $adb;
$languages = vtlib_getToggleLanguageInfo();
if (!array_key_exists($langid,$languages)) {
self::log("Adding SDK Language Entry ($module $langid $label) ... FAILED: language $langid not installed");
return;
}
// delete old row
self::deleteLanguageEntry($module, $langid, $label);
// insert new
$newid = $adb->getUniqueID("sdk_language");
$qparam = array($newid, $module, $langid, correctEncoding(html_entity_decode($label)), correctEncoding(html_entity_decode($newlabel)));
$query = 'insert into sdk_language (languageid, module, language, label, trans_label) values ('.generateQuestionMarks($qparam).')';
$res = $adb->pquery($query, $qparam);
self::log("Adding SDK Language Entry ($module $langid $label) ... DONE");
if ($module == 'ALERT_ARR') {
self::clearSessionValue('sdk_js_lang');
} else {
self::clearSessionValue("SDK/vte_languages/{$module}-{$langid}"); // crmv@187020
}
}
/**
* Same as previous, but accepts multiple languages
*/
static function setLanguageEntries($module, $label, $strings) {
foreach ($strings as $langid=>$newlabel) {
self::setLanguageEntry($module, $langid, $label, $newlabel);
}
}
/**
* Deletes a string in the language table
*/
static function deleteLanguageEntry($module, $langid = NULL, $label = NULL) {
global $adb;
$query = 'delete from sdk_language where module = ?';
$qpar = array($module);
if (!empty($langid)) {
$query .= ' and language = ?';
$qpar[] = $langid;
}
if (!empty($label)) {
($adb->isMysql()) ? $query .= ' and binary label like ?' : $query .= ' and label like ?';
$qpar[] = $label;
}
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Language Entry ($module $langid) ... DONE");
} else {
//self::log("Deleting SDK Language Entry ($module $langid) ... FAILED");
}
if ($module == 'ALERT_ARR') {
self::clearSessionValue('sdk_js_lang');
} else {
self::clearSessionValue("SDK/vte_languages/{$module}-{$langid}"); // crmv@187020
}
}
static function getUitypes() {
global $adb;
$cache = Cache::getInstance('sdk_uitype',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_uitype');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['uitype']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function isUitype($uitype) {
$uitypes = self::getUitypes();
if (in_array($uitype,array_keys($uitypes))) {
return true;
}
return false;
}
static function isOldUitype($uitype) {
$uitypes = self::getUitypes();
if (!empty($uitypes[$uitype]['old_style'])) {
return true;
}
return false;
}
static function getUitypeInfo($uitype) {
$uitypes = self::getUitypes();
return $uitypes[$uitype];
}
static function getUitypeFile($src,$mode,$uitype) {
global $sdk_mode;
$sdk_mode = $mode;
$info = self::getUitypeInfo($uitype);
$checkFileAccess = $info['src_'.$src];
if ($src == 'tpl') {
$checkFileAccess = "Smarty/templates/$checkFileAccess";
}
if ($info['src_'.$src] != '' && Vtecrm_Utils::checkFileAccess($checkFileAccess,false)) {
return $info['src_'.$src];
}
}
static function getJsUitypes() {
global $adb;
$cache = Cache::getInstance('sdk_js_uitype',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query("SELECT uitype,src_js FROM sdk_uitype WHERE src_js <> '' OR src_js IS NOT NULL");
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['uitype']] = $row['src_js'];
}
}
$tmp = Zend_Json::encode($tmp);
$cache->set($tmp);
}
return $tmp;
}
/**
* Register new Uitype
* $uitype : numeric value
* $src_php : path of the php file source code
* $src_tpl : path of the tpl file source code
* $src_js : path of the js file source code
* $type : webservice format (ex. text, boolean, datetime, reference, ...)
* $params : array width other params (ex. modules per reference field)
*/
static function setUitype($uitype,$src_php,$src_tpl,$src_js,$type='',$params='') {
global $adb,$table_prefix;
$result = $adb->query('select * from sdk_uitype where uitype = '.$uitype);
if ($result && $adb->num_rows($result)>0) {
self::log("Adding SDK Uitype ($uitype) ... FAILED ($uitype already exists!)");
return;
}
$uitypeid = $adb->getUniqueID("sdk_uitype");
$params = array($uitypeid,$uitype,$src_php,$src_tpl,$src_js);
$adb->pquery('insert into sdk_uitype (uitypeid,uitype,src_php,src_tpl,src_js) values ('.generateQuestionMarks($params).')',array($params));
if ($type != '') {
$fieldtypeid = $adb->getUniqueId($table_prefix.'_ws_fieldtype');
$result = $adb->pquery("insert into ".$table_prefix."_ws_fieldtype(fieldtypeid,uitype,fieldtype) values(?,?,?)",array($fieldtypeid,$uitype,$type));
if ($type == 'reference') {
//TODO : insert into vte_ws_referencetype
self::log("<b>TODO</b> : insert into vte_ws_referencetype");
}
}
self::log("Adding SDK Uitype ($uitype) ... DONE");
// put it in the current session
self::clearSessionValue('sdk_uitype');
//TODO@old_style
$columns = array_keys($adb->datadict->MetaColumns('sdk_uitype'));
if (in_array(strtoupper('old_style'),$columns) && in_array($uitype,array(170,171,172,173,174,175,176,177,206,1115))) { // crmv@70304 crmv@80653
$adb->pquery('update sdk_uitype set old_style = 1 where uitypeid = ?',array($uitypeid));
}
}
/**
* Unregister a uitype
* $uitype : the uitype to be unregistered. its files won't be deleted
* TODO: cancellare da tabelle vte_ws*
*/
static function unsetUitype($uitype) {
global $adb,$table_prefix;
$res = $adb->pquery('delete from sdk_uitype where uitype = ?',array($uitype));
if ($res && $adb->getAffectedRowCount($res) > 0) {
$adb->pquery('delete from '.$table_prefix.'_ws_fieldtype where uitype = ?',array($uitype));
self::log("Deleting SDK Uitype ($uitype) ... DONE");
self::clearSessionValue('sdk_uitype');
} else {
self::log("Deleting SDK Uitype ($uitype) ... FAILED");
}
}
static function getUtilsList() {
global $adb;
if (empty($adb->database) || !$adb->table_exist('sdk_utils') || !isModuleInstalled('SDK')) {
return;
}
$cache = Cache::getInstance('sdk_utils',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_utils');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['utilid']] = $row['src'];
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getUtils() {
$sdk_utils = self::getUtilsList();
if (!empty($sdk_utils)) {
foreach ($sdk_utils as $sdk_util) {
if ($sdk_util != '' && Vtecrm_Utils::checkFileAccess($sdk_util,false)) {
require_once($sdk_util);
}
}
}
}
/**
* Register new Util
* $src : path of the php file source code
* Note: there is no control if the same file is included twice
*/
static function setUtil($src) {
global $adb;
if ($src == '') {
self::log("Adding SDK Util ($src) ... FAILED (src empty!)");
return;
}
// check if it already exists
$utils = self::getUtilsList();
if (!empty($utils) && in_array($src, array_values($utils))) {
self::log("Adding SDK Util ($src) ... FAILED (File already in utils list)");
return;
}
$utilid = $adb->getUniqueID("sdk_utils");
$params = array($utilid,$src);
$adb->pquery('insert into sdk_utils (utilid,src) values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Util ($src) ... DONE");
self::clearSessionValue('sdk_utils');
}
/**
* Delete a registered util
* $src: path to the php file to be unregistered (the file itself won't be deleted)
*/
static function unsetUtil($src) {
global $adb;
$res = $adb->pquery('delete from sdk_utils where src = ?',array($src));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Util ($src) ... DONE");
self::clearSessionValue('sdk_utils');
} else {
self::log("Deleting SDK Util ($src) ... FAILED");
}
}
static function getPopupReturnFunctions() {
global $adb;
$cache = Cache::getInstance('sdk_popup_return_funct',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_popup_return_funct');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['id']] = array('module'=>$row['module'],'fieldname'=>$row['fieldname'],'src'=>$row['src']);
}
}
$cache->set($tmp);
}
return $tmp;
}
static function isPopupReturnFunction($module,$fieldname) {
if ($module != '' && $fieldname != '') {
$popupReturnFunctions = self::getPopupReturnFunctions();
foreach($popupReturnFunctions as $id => $info) {
if ($module == $info['module'] && $fieldname == $info['fieldname']) {
return true;
}
}
//crmv@131239 check for table fields
if (substr_count($fieldname,'_') == 2) {
list($t,$f,$o) = explode('_',$fieldname);
return self::isPopupReturnFunction($module,"{$t}_{$f}");
}
//crmv@131239e
}
return false;
}
static function getPopupReturnFunctionFile($module,$fieldname) {
$popupReturnFunctions = self::getPopupReturnFunctions();
foreach($popupReturnFunctions as $id => $info) {
if ($module == $info['module'] && $fieldname == $info['fieldname']) {
return $info['src'];
}
}
//crmv@131239 check for table fields
if (substr_count($fieldname,'_') == 2) {
list($t,$f,$o) = explode('_',$fieldname);
return self::getPopupReturnFunctionFile($module,"{$t}_{$f}");
}
//crmv@131239e
}
static function setPopupReturnFunction($module,$fieldname,$src) {
global $adb;
if ($module == '' || $fieldname == '' || $src == '') {
self::log("Adding SDK Popup Return Function ($module,$fieldname,$src) ... FAILED (empty value)");
return;
}
// check duplicates
$file = self::getPopupReturnFunctionFile($module, $fieldname);
if (isset($file) && !empty($file)) {
self::log("Adding SDK Popup Return Function ($src) ... FAILED (duplicate)");
return;
}
$id = $adb->getUniqueID("sdk_popup_return_funct");
$params = array($id,$module,$fieldname,$src);
$adb->pquery('insert into sdk_popup_return_funct (id,module,fieldname,src) values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Popup Return Function ($module,$fieldname,$src) ... DONE");
self::clearSessionValue('sdk_popup_return_funct');
}
static function unsetPopupReturnFunction($module, $fieldname = NULL, $src = NULL) {
global $adb;
$query = 'delete from sdk_popup_return_funct where module = ?';
$qpar = array($module);
if (!empty($fieldname)) {
$query .= 'and fieldname = ?';
$qpar[] = $fieldname;
}
if (!empty($src)) {
$query .= 'and src = ?';
$qpar[] = $src;
}
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Popup Return Function ($src) ... DONE");
self::clearSessionValue('sdk_popup_return_funct');
} else {
self::log("Deleting SDK Popup Return Function ($src) ... FAILED");
}
}
static function getSmartyTemplates() {
global $adb;
$cache = Cache::getInstance('sdk_smarty',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_smarty');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result,-1,false)) {
$tmp[$row['smartyid']] = array('params'=>$row['params'],'src'=>$row['src']);
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getSmartyTemplate($request) {
$smartyTemplates = self::getSmartyTemplates();
$src = array();
foreach($smartyTemplates as $smartyTemplate) {
$params = Zend_Json::decode($smartyTemplate['params']);
// controllo se la request matcha con i parametri
require_once('SDKParams.php');
if (SDKParams::paramsMatch($request, $params)) {
$src[] = array($smartyTemplate['src'], $params);
}
}
// choose best option (most specific/minimum)
if (!empty($src)) {
return SDKParams::paramsMin($src);
}
return '';
}
/**
* Register a custom template
* Check if the new template params are compatible with the existing ones
*/
static function setSmartyTemplate($params,$src) {
global $adb;
// check parameters
require_once('SDKParams.php');
$plist = self::getSmartyTemplates();
foreach ($plist as $k=>$t) $plist[$k] = Zend_Json::decode($t['params']);
$compcheck = SDKParams::paramsValidate($plist, $params);
if (!empty($compcheck)) {
self::log("Adding SDK Smarty Template ($src) ... FAIL");
$failstr = '';
foreach ($compcheck as $v) {
$failstr .= ($v[0]==1)?'Duplicated ':'Incompatible ';
$failstr .= "params $v[1]\n";
}
self::log(nl2br($failstr));
return;
}
$smartyid = $adb->getUniqueID("sdk_smarty");
$params = array($smartyid,Zend_Json::encode($params),$src);
$adb->pquery('insert into sdk_smarty (smartyid,params,src) values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Smarty Template ($src) ... DONE");
self::clearSessionValue('sdk_smarty');
}
/**
* Delete a registered template
*/
static function unsetSmartyTemplate($params, $src = NULL) {
global $adb;
$query = 'delete from sdk_smarty where params = ?';
$qpar = array(Zend_Json::encode($params));
if (!empty($src)) {
$query .= 'and src = ?';
$qpar[] = $src;
}
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Smarty Template ($src) ... DONE");
self::clearSessionValue('sdk_smarty');
} else {
self::log("Deleting SDK Smarty Template ($src) ... FAILED");
}
}
static function getNotRewritableSmartyTemplates() {
$return = array(
'Header.tpl',
'modules/ModComments/widgets/DetailViewBlockComment.tpl',
'Buttons_List.tpl',
'Buttons_List1.tpl',
'Buttons_List4.tpl',
'Buttons_List_Detail.tpl',
'Buttons_List_Edit.tpl',
'loginheader.tpl',
);
return $return;
}
static function setPreSave($module, $src) {
global $adb;
// check if module already has a presave file
$presave = self::getPreSave($module);
if (isset($presave) && !empty($presave)) {
self::log("Adding SDK PreSave ($module) ... FAILED (PreSave already defined)");
return;
}
$presaveid = $adb->getUniqueID("sdk_presave");
$params = array($presaveid,$module,$src);
$adb->pquery('insert into sdk_presave (presaveid,module,src) values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK PreSave ($src) ... DONE");
self::clearSessionValue('sdk_presave');
}
static function unsetPreSave($module, $src = NULL) {
global $adb;
$query = 'delete from sdk_presave where module = ?';
$qpar = array($module);
if (!empty($src)) {
$query .= 'and src = ?';
$qpar[] = $src;
}
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK PreSave ($src) ... DONE");
self::clearSessionValue('sdk_presave');
} else {
self::log("Deleting SDK PreSave ($src) ... FAILED");
}
}
static function getPreSaveList() {
global $adb;
$cache = Cache::getInstance('sdk_presave',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false && $adb->table_exist('sdk_presave')) {
$tmp = array();
$result = $adb->query('select * from sdk_presave');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['presaveid']] = array('module'=>$row['module'],'src'=>$row['src']);
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getPreSave($module) {
$preSave = self::getPreSaveList();
foreach($preSave as $id => $info) {
if ($module == $info['module']) {
return $info['src'];
}
}
}
static function getPopupQueries($type) {
global $adb;
$cache = Cache::getInstance('sdk_popup_query',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_popup_query');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['type']][$row['id']] = array('module'=>$row['module'],'param'=>$row['param'],'src'=>$row['src'],'hidden_rel_fields'=>$row['hidden_rel_fields']); //crmv@26920
}
}
$cache->set($tmp);
}
return $tmp[$type];
}
static function getJSPreSaveLis() {
$tmp = self::getPreSaveList();
if (!empty($tmp)) {
return Zend_Json::encode($tmp);
} else {
return '';
}
}
/**
* $type: field/related -> popup open by field / popup open by field
* $module : module from which popup is open
* $param : if $type is field $param is the fieldname else il the destination module
*/
static function getPopupQuery($type,$module,$param) {
$popupQueries = self::getPopupQueries($type);
if (!empty($popupQueries)) {
foreach($popupQueries as $info) {
if ($module == $info['module'] && $param == $info['param']) {
return $info['src'];
}
}
//crmv@131239 crmv@180275 check for table fields
if ($type == 'field' && substr_count($param,'_') == 2) {
list($t,$f,$o) = explode('_',$param);
return self::getPopupQuery($type,$module,"{$t}_{$f}");
}
//crmv@131239e crmv@180275e
}
}
//crmv@26920
static function getPopupHiddenElements($module,$param,$only_fields=false){
require_once('include/Zend/Json.php');
$popupQueries = self::getPopupQueries('field');
if (!empty($popupQueries)) {
foreach($popupQueries as $info) {
if ($module == $info['module'] && $param == $info['param'] && $info['hidden_rel_fields'] != '') {
if (empty($hidden_fields)) {
$hidden_fields = Zend_Json::decode(html_entity_decode($info['hidden_rel_fields']));
}
if($only_fields === true){
return array_keys($hidden_fields);
}
if($only_fields == 'autocomplete'){
return html_entity_decode($info['hidden_rel_fields']);
}
$js_string = '';
$index = 0;
if (!empty($hidden_fields)) {
foreach($hidden_fields as $field =>$value ){
$js_string .= '&'.$field.'="+'.str_replace("\\","",$value);
if($index < sizeof($hidden_fields)-1){
$js_string .= '+"';
}
$index++;
}
}
if($index > 0){
$js_string .= '+"';
}
return $js_string;
}
}
//crmv@131239 crmv@180275 check for table fields
if (substr_count($param,'_') == 2) {
list($t,$f,$o) = explode('_',$param);
return self::getPopupHiddenElements($module,"{$t}_{$f}",$only_fields);
}
//crmv@131239e crmv@180275e
}
}
//crmv@26920e
static function setPopupQuery($type, $module, $param, $src, $hidden_rel_fields='') { //crmv@26920
global $adb;
// check duplicates
$file = self::getPopupQuery($type, $module, $param);
if (isset($file) && !empty($file)) {
self::log("Adding SDK Popup Query ($src) ... FAILED (duplicate)");
return;
}
$popupid = $adb->getUniqueID("sdk_popup_query");
//crmv@26920
$columns = 'id,type,module,param,src';
$params = array($popupid,$type,$module,$param,$src);
if ($hidden_rel_fields != '') {
$columns .= ',hidden_rel_fields';
$params[] = Zend_Json::encode($hidden_rel_fields);
}
$adb->pquery('insert into sdk_popup_query ('.$columns.') values ('.generateQuestionMarks($params).')',array($params));
//crmv@26920e
self::log("Adding SDK Popup Query ($src) ... DONE");
self::clearSessionValue('sdk_popup_query');
}
static function unsetPopupQuery($type, $module, $param, $src) {
global $adb;
$query = 'delete from sdk_popup_query where type = ? and module = ? and param = ? and src = ?';
$qpar = array($type, $module, $param, $src);
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Popup Query ($src) ... DONE");
self::clearSessionValue('sdk_popup_query');
} else {
self::log("Deleting SDK Popup Query ($src) ... FAILED");
}
}
static function getAdvancedQueries() {
global $adb;
$cache = Cache::getInstance('sdk_adv_query',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_adv_query');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['module']] = array('src'=>$row['src'],'function'=>$row['function']);
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getAdvancedQuery($module) {
$filter = '';
$advancedQuery = self::getAdvancedQueries();
if ($advancedQuery[$module] != '') {
$src = $advancedQuery[$module]['src'];
if ($src != '' && Vtecrm_Utils::checkFileAccess($src,false)) {
require_once($src);
$filter = $advancedQuery[$module]['function']($module);
}
}
return $filter;
}
static function setAdvancedQuery($module, $func, $src) {
global $adb;
$qs = self::getAdvancedQueries();
if (array_key_exists($module, $qs)) {
self::log("Adding SDK Advanced Query ($module) ... FAILED");
return;
}
$adqueryid = $adb->getUniqueID("sdk_adv_query");
$params = array($adqueryid,$module,$func, $src);
$column = array('id','module','function','src');
$adb->format_columns($column);
$adb->pquery('insert into sdk_adv_query ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Advanced Query ($module) ... DONE");
self::clearSessionValue('sdk_adv_query');
}
static function unsetAdvancedQuery($module) {
global $adb;
$query = 'delete from sdk_adv_query where module = ?';
$qpar = array($module);
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Advanced Query ($module) ... DONE");
self::clearSessionValue('sdk_adv_query');
} else {
self::log("Deleting SDK Advanced Query ($module) ... FAILED");
}
}
static function getAdvancedPermissions() {
global $adb;
$cache = Cache::getInstance('sdk_adv_permission',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_adv_permission');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['module']] = array('src'=>$row['src'],'function'=>$row['function']);
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getAdvancedPermissionFunction($module) {
$advancedPermission = self::getAdvancedPermissions();
if ($advancedPermission[$module] != '') {
$src = $advancedPermission[$module]['src'];
if ($src != '' && Vtecrm_Utils::checkFileAccess($src,false)) {
require_once($src);
return $advancedPermission[$module]['function'];
}
}
}
static function setAdvancedPermissionFunction($module, $func, $src) {
global $adb;
$qs = self::getAdvancedPermissions();
if (array_key_exists($module, $qs)) {
self::log("Adding SDK Advanced Permission Function ($module) ... FAILED");
return;
}
$adqueryid = $adb->getUniqueID("sdk_adv_permission");
$params = array($adqueryid,$module,$func,$src);
$column = array('id','module','function','src');
$adb->format_columns($column);
$res = $adb->pquery('insert into sdk_adv_permission ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Advanced Permission Function ($module) ... DONE");
self::clearSessionValue('sdk_adv_permission');
} else {
self::log("Adding SDK Advanced Permission Function ($module) ... FAILED");
}
}
static function unsetAdvancedPermissionFunction($module) {
global $adb;
$query = 'delete from sdk_adv_permission where module = ?';
$qpar = array($module);
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Advanced Permission Function ($module) ... DONE");
self::clearSessionValue('sdk_adv_permission');
} else {
self::log("Deleting SDK Advanced Permission Function ($module) ... FAILED");
}
}
static function getClasses($all='') {
global $adb;
if (empty($adb->database) || !isModuleInstalled('SDK')) {
return;
}
$cache = Cache::getInstance('sdk_class'.$all,null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_class');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
if ($all == '_all') {
$tmp[$row['extends']] = array('module'=>$row['module'],'src'=>$row['src']);
} elseif ($all == '_parent') {
$tmp[$row['module']] = self::getParentModule($row['extends']);
} else {
$module = self::getSonModule($row['module']);
$result1 = $adb->pquery('select * from sdk_class where module = ?',array($module));
if ($result1 && $adb->num_rows($result1)>0) {
$tmp[$row['extends']] = array('module'=>$module,'src'=>$adb->query_result($result1,0,'src'));
}
}
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getSonModule($extends) {
$classes = self::getClasses('_all');
if ($classes[$extends] != '') {
return self::getSonModule($classes[$extends]['module']);
} else {
return $extends;
}
}
static function getDirectSonModule($extends) {
$classes = self::getClasses('_all');
if ($classes[$extends] != '') {
return $classes[$extends]['module'];
} else {
return '';
}
}
static function getParentModule($module) {
global $adb;
$result = $adb->pquery('select extends from sdk_class where module = ?',array($module));
if ($result && $adb->num_rows($result)>0) {
$extends = $adb->query_result($result,0,'extends');
$return = self::getParentModule($extends);
if ($return != '') {
$module = $return;
}
}
return $module;
}
static function getClass($extends) {
$classes_all = self::getClasses('_all');
$classes = self::getClasses();
if ($classes[$extends] != '') {
return $classes[$extends];
}
}
/**
* Extends the class $extends with the class $module (which is in $src)
* Some classes are not allowed to be extended and it's not permitted to
* derive a class more than once
*/
static function setClass($extends, $module, $src) {
global $adb;
// check for blacklisted classes
$badclasses = array('Conditionals', 'Rss', 'VteRSS'); //crmv@31357+31355
if (in_array($extends, $badclasses)) {
self::log("Adding SDK Class ($module) ... FAILED (Class is blacklisted)");
return;
}
// check if class has already been extended
$classes = self::getClasses('_all');
if (in_array($extends, array_keys($classes))) {
self::log("Adding SDK Class ($module) ... FAILED (Class already extended)");
return;
}
// update the database
$classid = $adb->getUniqueID("sdk_class");
$params = array($classid,$extends,$module,$src);
$res = $adb->pquery('insert into sdk_class (id,extends,module,src) values ('.generateQuestionMarks($params).')',array($params));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Class ($module) ... DONE");
self::clearSessionValue('sdk_class_all');
self::clearSessionValue('sdk_class_parent');
self::clearSessionValue('sdk_class');
} else {
self::log("Adding SDK Class ($module) ... FAILED");
}
}
/**
* Notes: deletes also all derived classes
*/
static function unsetClass($extends) {
global $adb;
// create array with all the sons
$deletelist = array();
$ds = $extends;
while (($ds = self::getDirectSonModule($ds)) != '')
$deletelist[] = $ds;
array_pop($deletelist);
$deletelist = array_reverse($deletelist);
$deletelist[] = $extends;
// do the deletion
// TODO: join all the queries in a combined one to speed up things
foreach ($deletelist as $ext) {
$query = 'delete from sdk_class where extends = ?';
$qpar = array($ext);
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Class ($ext) ... DONE");
self::clearSessionValue('sdk_class_all');
self::clearSessionValue('sdk_class_parent');
self::clearSessionValue('sdk_class');
} else {
self::log("Deleting SDK Class ($ext) ... FAILED");
}
}
}
static function getViews($module,$mode) {
global $adb, $sdk_mode;
$skipView = $_REQUEST['skip_sdk_view'] ?? '';
if ($skipView == '1') return false;
$sdk_mode = $mode;
$cache = Cache::getInstance('sdk_view',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_view order by module, sequence');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['module']][$row['sequence']] = array('src'=>$row['src'],'mode'=>$row['mode'],'on_success'=>$row['on_success']);
}
}
$cache->set($tmp);
}
return $tmp[$module];
}
static function checkReadonly($readonly_old,$readonly,$mode) {
if ($mode == 'restrict') {
$readonly = max($readonly,$readonly_old);
} elseif ($mode == 'constrain') {
//do nothing
}
}
/**
* Retrieves the last sequence number for the specified module
*/
private static function getLastViewSequence($module) {
global $adb;
$res = $adb->pquery('select max(sequence) from sdk_view where module = ?', array($module));
if ($res && $adb->num_rows($res) > 0) {
$row = $adb->fetch_array($res);
return intval($row[0]);
} else {
return 0;
}
}
/**
* Adds a new View at the end of the list (for that module)
*/
static function addView($module, $src, $mode, $success) {
global $adb;
$valid_modes = array('default'=>'restrict', 'constrain');
$valid_success = array('default'=>'continue', 'stop');
if (!in_array($mode, $valid_modes)) $mode = $valid_modes['default'];
if (!in_array($success, $valid_success)) $success = $valid_success['default'];
// check duplicates
$query = 'select module from sdk_view where module = ? and src = ?';
$qparam = array($module, $src);
$res = $adb->pquery($query, $qparam);
if ($res && $adb->num_rows($res) > 0) {
self::log("Adding SDK View ($module - $src) ... FAILED (duplicate)");
return;
}
$seq = self::getLastViewSequence($module) + 1;
$viewid = $adb->getUniqueID("sdk_view");
$qparam = array($viewid, $module, $src, $seq, $mode, $success);
$column=array("viewid","module","src","sequence","mode","on_success");
$adb->format_columns($column);
$query = 'insert into sdk_view ('.implode(',',$column).') values ('.generateQuestionMarks($qparam).')';
$res = $adb->pquery($query, $qparam);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK View ($module - $src) ... DONE");
self::clearSessionValue('sdk_view');
} else {
self::log("Adding SDK View ($module - $src) ... FAILED");
}
}
/**
* Deletes a view
*/
static function deleteView($module, $src) {
global $adb;
$query = 'delete from sdk_view where module = ? and src = ?';
$qparam = array($module, $src);
$res = $adb->pquery($query, $qparam);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK View ($module - $src) ... DONE");
self::clearSessionValue('sdk_view');
} else {
self::log("Deleting SDK View ($module - $src) ... FAILED");
}
}
/**
* Returns an array of files/dirs associated with the module
*/
static function getExtraSrc($module) {
global $adb;
$ret = array();
$query = 'select src from sdk_extra_src where module = ?';
$qparam = array($module);
$res = $adb->pquery($query, $qparam);
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetch_array_no_html($res)) {
$ret[] = $row[0];
}
}
return $ret;
}
/**
* Adds a file/dir association
*/
static function setExtraSrc($module, $src) {
global $adb;
// check duplicates
$query = 'select id from sdk_extra_src where module = ? and src = ?';
$qparam = array($module, $src);
$res = $adb->pquery($query, $qparam);
if ($res && $adb->num_rows($res) > 0) {
self::log("Adding SDK Extra Src ($module - $src) ... FAILED (duplicate)");
return;
}
$srcid = $adb->getUniqueID("sdk_extra_src");
$qparam = array($srcid, $module, $src);
$query = 'insert into sdk_extra_src (id, module, src) values ('.generateQuestionMarks($qparam).')';
$res = $adb->pquery($query, $qparam);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Extra Src ($module - $src) ... DONE");
} else {
self::log("Adding SDK Extra Src ($module - $src) ... FAILED");
}
}
/**
* Deletes a file/dir association
*/
static function unsetExtraSrc($module, $src) {
global $adb;
$query = 'delete from sdk_extra_src where module = ? and src = ?';
$qparam = array($module, $src);
$res = $adb->pquery($query, $qparam);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Extra Src ($module - $src) ... DONE");
} else {
self::log("Deleting SDK Extra Src ($module - $src) ... FAILED");
}
}
static function getFiles($module) {
global $adb;
$cache = Cache::getInstance('sdk_file',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_file order by module');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['module']][$row['file']] = $row['new_file'];
}
}
$cache->set($tmp);
}
return $tmp[$module];
}
static function getFile($module,$file) {
$files = self::getFiles($module);
return $files[$file];
}
static function setFile($module,$file,$new_file) {
global $adb;
$not_permitted_modules = array('Home','Calendar','Events');
if ($module == '' || $file == '' || $new_file == '') {
self::log("Adding SDK File ($new_file) ... FAILED (module, file or new_file empty!)");
return;
}
if (self::getFile($module,$file) != '') {
self::log("Adding SDK File ($new_file) ... FAILED (new_file already registered for module $module and file $file)");
return;
}
$fileid = $adb->getUniqueID("sdk_file");
$params = array($fileid,$module,$file,$new_file);
$column = array('fileid','module','file','new_file');
$adb->format_columns($column);
$adb->pquery('insert into sdk_file ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK File ($new_file) ... DONE");
self::clearSessionValue('sdk_file');
}
static function unsetFile($module,$file) {
global $adb;
$column = 'file';
$adb->format_columns($column);
$res = $adb->pquery('delete from sdk_file where module = ? and '.$column.' = ?',array($module,$file));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK File ($module,$file) ... DONE");
self::clearSessionValue('sdk_file');
} else {
self::log("Deleting SDK File ($module,$file) ... FAILED");
}
}
static function getHomeIframes() {
global $adb,$table_prefix;
$cache = Cache::getInstance('sdk_home_iframe',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$sizeCol = 'size';
$adb->format_columns($sizeCol);
$sql = "SELECT sdk_home_iframe.stuffid, sdk_home_iframe.$sizeCol, sdk_home_iframe.iframe, sdk_home_iframe.url
FROM sdk_home_iframe
INNER JOIN {$table_prefix}_homestuff ON sdk_home_iframe.stuffid = {$table_prefix}_homestuff.stuffid
UNION
SELECT {$table_prefix}_homestuff.stuffid, sdk_home_global_iframe.$sizeCol, sdk_home_global_iframe.iframe, sdk_home_global_iframe.url
FROM sdk_home_global_iframe
INNER JOIN {$table_prefix}_homestuff ON {$table_prefix}_homestuff.stufftitle = sdk_home_global_iframe.name";
$result = $adb->query($sql);
if ($result && $adb->num_rows($result)>0) {
while ($row = $adb->fetchByAssoc($result)) {
$tmp[$row['stuffid']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getGlobalIframes() {
global $adb,$table_prefix;
$cache = Cache::getInstance('sdk_home_global_iframes',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
if (Vtecrm_Utils::CheckTable('sdk_home_global_iframe')) {
$result = $adb->query('select * from sdk_home_global_iframe');
if ($result && $adb->num_rows($result)>0) {
while ($row = $adb->fetchByAssoc($result)) {
$tmp[$row['name']] = $row;
}
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getGlobalFixedIframes() {
global $adb,$table_prefix;
$cache = Cache::getInstance('sdk_home_fixed_iframes',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from '.$table_prefix.'_home_iframe');
if ($result && $adb->num_rows($result)>0) {
while ($row = $adb->fetchByAssoc($result)) {
$tmp[] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getDefaultIframes($mode='plain'){
$session_name = 'sdk_home_default_iframes_'.$mode;
$cache = Cache::getInstance($session_name,null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$iframes = SDK::getGlobalFixedIframes();
foreach ($iframes as $iframe){
if ($mode != 'plain'){
$tmp['Iframe'][] = $iframe['hometype'];
}
else{
$tmp[] = $iframe['hometype'];
}
}
$iframes = SDK::getGlobalIframes();
foreach ($iframes as $iframe){
if ($mode != 'plain'){
$tmp['SDKIframe'][] = $iframe['name'];
}
else{
$tmp[] = $iframe['name'];
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getHomeIframe($stuffid) {
$iframes = self::getHomeIframes();
return $iframes[$stuffid];
}
static function setHomeIframe($size, $url, $title, $userid = null, $useframe = true) {
global $adb,$table_prefix;
if (empty($url)) {
self::log("Adding SDK Home Iframe ($url) ... FAILED (url empty)");
return;
}
// users
if (is_null($userid)) {
// all users
$userid = array_keys(get_user_array(false));
} elseif (!is_array($userid)) {
$userid = array($userid);
}
//duplicate
$iframes = self::getHomeIframes();
if (!empty($iframes)) {
foreach ($iframes as $id=>$idata) {
if ($idata['url'] == htmlspecialchars($url) && in_array($idata['userid'], $userid)) {
self::log("Adding SDK Home Iframe ($url) ... FAILED (url already registered)");
return;
}
}
}
// restrict size
$size = max(1, min($size, 4));
$useframe = intval($useframe);
foreach ($userid as $uid) {
$iframeid = $adb->getUniqueID($table_prefix."_homestuff");
$column = array('stuffid','stuffsequence','stufftype','userid','visible','size','stufftitle');
$adb->format_columns($column);
$params = array($iframeid,0,'SDKIframe', $uid, 0, $size, $title);
$adb->pquery('insert into '.$table_prefix.'_homestuff ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
$params = array($iframeid,$size, $useframe, $url);
$column = array('stuffid','size','iframe','url');
$adb->format_columns($column);
$adb->pquery('insert into sdk_home_iframe ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
}
self::log("Adding SDK Home Iframe ($url) ... DONE");
self::clearSessionValue('sdk_home_iframe');
}
// todo: come parametro passare un array
static function unsetHomeIframe($stuffid) {
global $adb,$table_prefix;
$res = $adb->pquery('delete from sdk_home_iframe where stuffid = ?', array($stuffid));
$res2 = $adb->pquery('delete from '.$table_prefix.'_homestuff where stuffid = ?', array($stuffid));
if ($res && $res2 && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Home Iframe ($stuffid) ... DONE");
self::clearSessionValue('sdk_home_iframe');
} else {
self::log("Deleting SDK Home Iframe ($stuffid) ... FAILED");
}
}
static function setHomeGlobalIframe($size, $url, $title,$useframe = true) {
global $adb,$table_prefix;
if (empty($url)) {
self::log("Adding SDK Home Global Iframe ($url) ... FAILED (url empty)");
return;
}
//duplicate
$iframes = self::getHomeIframes();
if (!empty($iframes)) {
foreach ($iframes as $id=>$idata) {
if ($idata['name'] == $title) {
self::log("Adding SDK Home Iframe ($title) ... FAILED (title already registered)");
return;
}
}
}
$userid = array_keys(get_user_array(false));
// restrict size
$size = max(1, min($size, 4));
$useframe = intval($useframe);
$params = array($title,$size, $useframe, $url);
$column = array('name','size','iframe','url');
$adb->format_columns($column);
$adb->pquery('insert into sdk_home_global_iframe ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
//add homestuff and homedefault for every user
foreach ($userid as $uid) {
$result = $adb->pquery("SELECT * FROM {$table_prefix}_homestuff WHERE userid = ? AND stufftype = ? AND stufftitle = ?",array($uid,'SDKIframe',$title));
if ($result && $adb->num_rows($result) > 0) {
//skip
} else {
$iframeid = $adb->getUniqueID($table_prefix."_homestuff");
$column = array('stuffid','stuffsequence','stufftype','userid','visible','size','stufftitle');
$adb->format_columns($column);
$params = array($iframeid,0,'SDKIframe', $uid, 0, $size, $title);
$adb->pquery('insert into '.$table_prefix.'_homestuff ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
$params_insert = Array(
'stuffid'=>$iframeid,
'hometype'=>$title,
'maxentries'=>0,
'setype'=>'NULL',
);
$sql="insert into ".$table_prefix."_homedefault (".implode(",",array_keys($params_insert)).") values(".generateQuestionMarks($params_insert).")";
$adb->pquery($sql,$params_insert);
}
}
self::log("Adding SDK Home Global Iframe ($url) ... DONE");
self::clearSessionValue('sdk_home_global_iframe');
}
// todo: come parametro passare un array
static function unsetHomeGlobalIframe($title) {
global $adb,$table_prefix;
$res = $adb->pquery('delete from sdk_home_global_iframe where name = ?', array($title));
if ($res && $adb->getAffectedRowCount($res) > 0) {
//delete homestuff and homedefault for every user
$params = array($title);
$adb->pquery('delete from '.$table_prefix.'_homestuff where stufftitle = ?',$params);
$adb->pquery('delete from '.$table_prefix.'_homedefault where hometype = ?',$params);
self::log("Deleting SDK Home Global Iframe ($stuffid) ... DONE");
self::clearSessionValue('sdk_home_global_iframe');
} else {
self::log("Deleting SDK Home Global Iframe ($stuffid) ... FAILED");
}
}
private static function getHomeIframeByUrl($url) {
global $adb;
$url = strtolower($url);
$params = array($url);
$query = 'select stuffid from sdk_home_iframe where lower(url) = ?';
$res = $adb->pquery($query, $params);
$ret = array();
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetch_array($res)) {
$ret[] = $row[0];
}
}
return $ret;
}
static function unsetHomeIframeByUrl($url) {
global $adb;
$ids = self::getHomeIframeByUrl($url);
foreach ($ids as $id) {
self::unsetHomeIframe($id);
}
}
static function getMenuButton($type, $module='', $action='') {
global $adb, $theme;
$buttons = '';
$minImg = '';
$classLg = '';
if ($_COOKIE['crmvWinMaxStatus'] == 'close') {
$minImg = '_min';
} else {
$classLg = 'md-lg';
}
if ($type == 'fixed') {
$res = $adb->query('select * from sdk_menu_fixed order by id');
if ($res && $adb->num_rows($res) > 0) {
while($row=$adb->fetchByAssoc($res,-1,false)) {
//crmv@37303
$check = true;
if (!empty($row['cond'])) {
$cond = explode(':',$row['cond']);
if (count($cond) == 2) {
// crmv@OPER8071
if (file_exists($cond[1])){
require_once($cond[1]);
$check = $cond[0]($row);
} else {
$check = false;
}
// crmv@OPER8071e
}
}
if ($check) {
$image = explode('.',$row['image']);
// check if it has an extension, and use it as an image
if ($image[1]) {
$image = $image[0].$minImg.'.'.$image[1];
$buttons .= '<td><img class="" data-toggle="tooltip" data-placement="top" src="'.vtecrm_imageurl($image,$theme).'" onClick="'.$row['onclick'].'" alt="'.getTranslatedString($row['title'],$module).'" title="'.getTranslatedString($row['title'],$module).'" style="cursor:pointer;"/></td>'; // crmv@82419
} else {
$buttons .= '<td><i class="vteicon md-link '.$classLg.'" data-toggle="tooltip" data-placement="top" onClick="'.$row['onclick'].'" title="'.getTranslatedString($row['title'],$module).'">'.$image[0].'</i></td>'; // crmv@82419
}
}
//crmv@37303e
}
}
} elseif ($type == 'contestual' && $module != '') {
$query = 'select * from sdk_menu_contestual where module = ?';
if ($action == '') {
$query .= ' and (action = ? or action is null)';
} else {
$query .= ' and action = ?';
}
$query.=" order by id";
$res = $adb->pquery($query,array($module,$action));
if ($res && $adb->num_rows($res) > 0) {
while($row=$adb->fetchByAssoc($res,-1,false)) {
//crmv@37303
$check = true;
if (!empty($row['cond'])) {
$cond = explode(':',$row['cond']);
if (count($cond) == 2) {
// crmv@OPER8071
if (file_exists($cond[1])){
require_once($cond[1]);
$check = $cond[0]($row);
} else {
$check = false;
}
// crmv@OPER8071e
}
}
if ($check) {
$image = explode('.',$row['image']);
// check if it has an extension, and use it as an image
if ($image[1]) {
$image = $image[0].$minImg.'.'.$image[1];
$buttons .= '<td><img class="" data-toggle="tooltip" data-placement="top" src="'.vtecrm_imageurl($image,$theme).'" onClick="'.$row['onclick'].'" alt="'.getTranslatedString($row['title'],$module).'" title="'.getTranslatedString($row['title'],$module).'" style="cursor:pointer;"/></td>'; // crmv@82419
} else {
$buttons .= '<td><i class="vteicon md-link '.$classLg.'" data-toggle="tooltip" data-placement="top" onClick="'.$row['onclick'].'" title="'.getTranslatedString($row['title'],$module).'">'.$image[0].'</i></td>'; // crmv@82419
}
}
//crmv@37303e
}
}
}
return $buttons;
}
// crmv@140887
static function getMenuRawButton($type, $module = '', $action = '') {
global $adb, $theme;
if ($action == $module.'Ajax' && isset($_REQUEST['file'])) $action = strip_tags(vtlib_purify($_REQUEST['file'])); // crmv@176360 VERY SHIT! crmv@208173
$buttons = array();
if ($type == 'fixed') {
$res = $adb->query('select * from sdk_menu_fixed order by id');
} elseif ($type == 'contestual' && $module != '') {
$query = 'select * from sdk_menu_contestual where module = ?';
if ($action == 'ListView') {
$action = 'index';
}
if ($action == '') {
$query .= ' and (action = ? or action is null)';
} else {
$query .= ' and action = ?';
}
$query .= " order by id";
$res = $adb->pquery($query, array($module, $action));
}
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetchByAssoc($res, -1, false)) {
$check = true;
if (!empty($row['cond'])) {
$cond = explode(':', $row['cond']);
if (count($cond) == 2) {
require_once ($cond[1]);
$check = $cond[0]($row);
}
}
if ($check) {
$row['module'] = $module;
$row['is_image'] = false;
//crmv@155337
require_once('include/utils/ResourceVersion.php');
$resourceVersion = ResourceVersion::getInstance();
if ($resourceVersion->isImageFile($row['image'])) {
$row['image'] = resourcever($row['image']);
$row['is_image'] = true;
}
//crmv@155337e
unset($row['cond']);
$buttons[] = $row;
}
}
}
return $buttons;
}
// crmv@140887e
static function setMenuButton($type, $title, $onclick, $image='', $module='', $action='', $condition='') { //crmv@37303
global $adb;
if ($title == '' || $onclick == '' || ($type == 'contestual' && $module == '')) {
self::log("Adding SDK Menu Button ... FAILED (one or more params omitted)");
return;
}
if ($type == 'fixed') {
$res = $adb->pquery('select * from sdk_menu_fixed where title = ? and onclick like ?',array($title,$onclick));
if ($res && $adb->num_rows($res) > 0) {
self::log("Adding SDK Menu Button Fixed ... FAILED (button already registered)");
return;
}
$id = $adb->getUniqueID("sdk_menu_fixed");
$params = array($id,$title,$onclick,$image);
$column = array('id','title','onclick','image');
//crmv@37303
if (!empty($condition)) {
$params[] = $condition;
$column[] = 'cond';
}
//crmv@37303e
$adb->format_columns($column);
$adb->pquery('insert into sdk_menu_fixed ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Menu Button Fixed ($id) ... DONE");
} elseif ($type == 'contestual') {
/* TODO: check duplicates
$col_title = 'title';
$col_onclick = 'onclick';
$col_module = 'module';
$col_action = 'action';
$adb->format_columns($col_title);
$adb->format_columns($col_onclick);
$adb->format_columns($col_module);
$adb->format_columns($col_action);
$res = $adb->pquery('select * from sdk_menu_contestual where '.$col_title.' = ? and '.$col_onclick.' = ? and '.$col_module.' = ? and '.$col_action.' = ?',array($title,$onclick,$module,$action));
if ($res && $adb->num_rows($res) > 0) {
self::log("Adding SDK Menu Button Contestual ... FAILED (button already registered)");
return;
}*/
$id = $adb->getUniqueID("sdk_menu_contestual");
$params = array($id,$module,$action,$title,$onclick,$image);
$column = array('id','module','action','title','onclick','image');
//crmv@37303
if (!empty($condition)) {
$params[] = $condition;
$column[] = 'cond';
}
//crmv@37303e
$adb->format_columns($column);
$adb->pquery('insert into sdk_menu_contestual ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Menu Button Contestual ($id) ... DONE");
}
}
static function unsetMenuButton($type, $id) {
global $adb;
$res = $adb->pquery('delete from sdk_menu_'.$type.' where id = ?',array($id));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Menu Button ... DONE");
} else {
self::log("Deleting SDK Menu Button ... FAILED");
}
}
static function getReportFolders($read_reports = true, $folderid = false) { // crmv@163922
global $adb,$table_prefix;
$cache = Cache::getInstance('sdk_reportfolders',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
// crmv@163922
if ($folderid > 0){
$result = $adb->pquery('select * from '.$table_prefix.'_crmentityfolder where tabid = ? and folderid = ? and state = ?',array(getTabid('Reports'), $folderid, 'SDK')); // crmv@30967 crmv@170747
} else {
$result = $adb->pquery('select * from '.$table_prefix.'_crmentityfolder where tabid = ? and state = ?',array(getTabid('Reports'), 'SDK')); // crmv@30967
}
// crmv@163922e
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$row['name'] = getTranslatedString($row['foldername'],'Reports'); //crmv@65492 - 25
$row['id'] = $row['folderid'];
if ($read_reports) {
$row['details'] = self::getReports($row['folderid']);
}
$tmp[$row['folderid']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getReportFolderIdByName($foldername) {
$folders = self::getReportFolders();
foreach ($folders as $id=>$fldr) {
if ($fldr['foldername'] == $foldername) {
return $id;
}
}
return null;
}
static function setReport($name, $description, $foldername, $reportrun, $class, $jsfunction = '') {
global $adb,$table_prefix;
// check duplicates
if (!is_null(self::getReportIdByName($name))) {
self::log("Adding SDK Report ($name) ... FAILED (duplicate report)");
return false;
}
// folderid
$folderid = self::getReportFolderIdByName($foldername);
if (is_null($folderid)) {
self::log("Adding SDK Report ($name) ... FAILED (folder doesn't exist)");
return false;
}
// insert
$reportid = $adb->getUniqueID($table_prefix.'_report');
$params = array($reportid, $reportrun, $class, $jsfunction);
$res = $adb->pquery('insert into sdk_reports (reportid, reportrun, runclass, jsfunction) values ('.generateQuestionMarks($params).')', $params);
$params = array($reportid, $folderid, $name, $description, 'tabular', $reportid, 'SDK', 0, 1, 'Public');
$res2 = $adb->pquery('insert into '.$table_prefix.'_report (reportid, folderid, reportname, description, reporttype, queryid, state, customizable, owner, sharingtype) values ('.generateQuestionMarks($params).')', $params);
if ($res && $res2 && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Report ($name) ... DONE");
self::clearSessionValue('sdk_reports');
self::clearSessionValue('sdk_reportfolders');
} else {
self::log("Adding SDK Report ($name) ... FAILED");
}
}
static function setReportFolder($name, $description) {
global $adb,$table_prefix;
// check duplicates
$folders = self::getReportFolders();
foreach ($folders as $fld) {
if ($fld['foldername'] == $name) {
self::log("Adding SDK Report Folder ($name) ... FAILED (folder exists)");
return false;
}
}
$folderid = $adb->getUniqueID($table_prefix.'_reportfolder');
$params = array($folderid, $name, $description, 'SDK');
// crmv@30967
$res = addEntityFolder('Reports', $name, $description, 1, 'SDK');
if ($res) {
// crmv@30967e
self::log("Adding SDK Report Folder ($name) ... DONE");
self::clearSessionValue('sdk_reportfolders');
} else {
self::log("Adding SDK Report Folder ($name) ... FAILED");
}
}
static function unsetReportFolder($name, $delreports = true) {
global $adb;
$folderid = self::getReportFolderIdByName($name);
if (is_null($folderid)) {
self::log("Deleting SDK Report Folder ($name) ... FAILED (folder not found)");
return;
}
if ($delreports) {
// delete all reports in folder
$reps = self::getReports($folderid);
foreach ($reps as $rep) {
self::unsetReport($rep['reportname']);
}
}
// crmv@30967
$res = deleteEntityFolder($folderid);
if ($res) {
// crmv@30967e
self::log("Deleting SDK Report Folder ($name) ... DONE");
self::clearSessionValue('sdk_reportfolders');
} else {
self::log("Deleting SDK Report Folder ($name) ... FAILED");
}
}
static function getReports($folderid) {
global $adb,$table_prefix;
$cache = Cache::getInstance('sdk_reports',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_reports inner join '.$table_prefix.'_report on '.$table_prefix.'_report.reportid = sdk_reports.reportid order by folderid');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['folderid']][$row['reportid']] = $row;
}
}
$cache->set($tmp);
}
return $tmp[$folderid];
}
static function getReportIdByName($reportname) {
$folders = self::getReportFolders();
if (!empty($folders)) {
foreach ($folders as $fld) {
if (!empty($fld['details'])) {
foreach ($fld['details'] as $repid=>$report) {
if ($report['reportname'] == $reportname) return $repid;
}
}
}
}
return null;
}
static function getReport($reportid, $folderid) {
$reports = self::getReports($folderid);
if (!empty($reports) && array_key_exists($reportid, $reports)) return $reports[$reportid];
return null;
}
static function unsetReport($name) {
global $adb,$table_prefix;
$repid = self::getReportIdByName($name);
if (is_null($repid)) {
self::log("Deleting SDK Report ($name) ... FAILED (report not found)");
return;
}
$query = 'delete from sdk_reports where reportid = ?';
$res = $adb->pquery($query, array($repid));
$query = 'delete from '.$table_prefix.'_report where reportid = ? and state = ?';
$res2 = $adb->pquery($query, array($repid, 'SDK'));
if ($res && $res2 && $adb->getAffectedRowCount($res) > 0 && $adb->getAffectedRowCount($res2) > 0) {
self::log("Deleting Report ($name) ... DONE");
self::clearSessionValue('sdk_reports');
self::clearSessionValue('sdk_reportfolders');
} else {
self::log("Deleting SDK Report ($name) ... FAILED");
}
}
//crmv@sdk-27926
static function getTransitions($module) {
global $adb;
$cache = Cache::getInstance('sdk_transitions',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_transitions order by module');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['module']][$row['fieldname']] = $row;
}
}
$cache->set($tmp);
}
return $tmp[$module];
}
static function getTransition($module, $fieldname) {
$trans = self::getTransitions($module);
return $trans[$fieldname];
}
static function setTransition($module, $fieldname, $file, $function) {
global $adb;
if ($module == '' || $fieldname == '' || $file == '') {
self::log("Adding SDK Transition ($file) ... FAILED (module, fieldname or file or empty!)");
return;
}
if (self::getTransition($module,$fieldname) != '') {
self::log("Adding SDK Transition ($file) ... FAILED (file already registered for module $module and fieldname $fieldname)");
return;
}
$transid = $adb->getUniqueID("sdk_transitions");
$params = array($transid,$module,$fieldname,$file,$function);
$column = array('transitionid','module','fieldname','file', 'function');
$adb->format_columns($column);
$adb->pquery('insert into sdk_transitions ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK Transition ($file) ... DONE");
self::clearSessionValue('sdk_transitions');
}
static function unsetTransition($module, $fieldname, $file, $function) {
global $adb;
$column = 'fieldname';
$adb->format_columns($column);
$res = $adb->pquery('delete from sdk_transitions where module = ? and '.$column.' = ?',array($module,$fieldname));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Transition ($module,$fieldname) ... DONE");
self::clearSessionValue('sdk_transitions');
} else {
self::log("Deleting SDK Transition ($module,$fieldname) ... FAILED");
}
}
//crmv@sdk-27926e
//crmv@sdk-28873
/* crmv@208472 */
static function getDashboards() {
throw new \Exception("Function has been removed");
}
static function getDashboard($dashname) {
throw new \Exception("Function has been removed");
}
static function setDashboard($name,$file) {
throw new \Exception("Function has been removed");
}
static function unsetDashboard($name) {
throw new \Exception("Function has been removed");
}
//crmv@sdk-28873e
/* crmv@208472e */
//crmv@2539m
static function getPDFCustomFunctions() {
global $adb;
$cache = Cache::getInstance('sdk_pdf_cfunctions',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_pdf_cfunctions');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['name']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getPDFCustomFunction($name) {
$functions = self::getPDFCustomFunctions();
if (is_array($functions) && array_key_exists($name, $functions)) return $functions[$name];
return null;
}
static function setPDFCustomFunction($label,$name,$params) {
global $adb;
if ($label == '' || $name == '' || $params == '') {
self::log("Adding SDK PDF Custom Function ($name) ... FAILED (label, name or params empty!)");
return;
}
if (self::getPDFCustomFunction($name) != '') {
self::log("Adding SDK PDF Custom Function ($name) ... FAILED ($name already registered)");
return;
}
if (!is_array($params)) {
$params = array($params);
}
$id = $adb->getUniqueID("sdk_pdf_cfunctions");
$params = array($id, $label, $name, implode('|',$params));
$column = array('id','label','name','params');
$adb->format_columns($column);
$adb->pquery('insert into sdk_pdf_cfunctions ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
self::log("Adding SDK PDF Custom Function ($name) ... DONE");
self::clearSessionValue('sdk_pdf_cfunctions');
}
static function unsetPDFCustomFunction($name) {
global $adb;
$column = 'name';
$adb->format_columns($column);
$res = $adb->pquery('delete from sdk_pdf_cfunctions where '.$column.' = ?',array($name));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK PDF Custom Function ($name) ... DONE");
self::clearSessionValue('sdk_pdf_cfunctions');
} else {
self::log("Deleting SDK PDF Custom Function ($name) ... FAILED");
}
}
//crmv@2539me
//crmv@51605
static function getTurboliftCountInfo() {
global $adb, $table_prefix;
$cache = Cache::getInstance('sdk_turbolift_count',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query("SELECT sdk_turbolift_count.*, {$table_prefix}_relatedlists.tabid, {$table_prefix}_relatedlists.related_tabid
FROM sdk_turbolift_count
INNER JOIN {$table_prefix}_relatedlists ON {$table_prefix}_relatedlists.relation_id = sdk_turbolift_count.relation_id");
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$row['module'] = getTabname($row['tabid']);
$row['related_module'] = getTabname($row['related_tabid']);
// crmv@140929
if ($row['module'] == 'Campaigns') {
switch ($row['method']) {
case 'get_statistics_message_queue':
$row['related_module'] = 'Message Queue';
break;
case 'get_statistics_sent_messages':
$row['related_module'] = 'Sent Messages';
break;
case 'get_statistics_viewed_messages':
$row['related_module'] = 'Viewed Messages';
break;
case 'get_statistics_tracked_link':
$row['related_module'] = 'Tracked Link';
break;
case 'get_statistics_unsubscriptions':
$row['related_module'] = 'Unsubscriptions';
break;
case 'get_statistics_bounced_messages':
$row['related_module'] = 'Bounced Messages';
break;
case 'get_statistics_suppression_list':
$row['related_module'] = 'Suppression list';
break;
case 'get_statistics_failed_messages':
$row['related_module'] = 'Failed Messages';
break;
}
}
// crmv@140929e
$tmp[$row['relation_id']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getTurboliftCount($relation_id, $crmid) {
global $adb;
$count = '';
$info = self::getTurboliftCountInfo();
$module = $info[$relation_id]['module'];
$method = $info[$relation_id]['method'];
$focus = CRMEntity::getInstance($module);
global $onlyquery;
$onlyquery = true;
$_SESSION[strtolower($info[$relation_id]['related_module'])."_listquery"] = ''; //crmv@54900
$res = $focus->$method($crmid, $info[$relation_id]['tabid'], $info[$relation_id]['related_tabid']);
if (is_array($res) && !empty($res)) { // standard relatedlist method //crmv@66870
$query = $_SESSION[strtolower($info[$relation_id]['related_module'])."_listquery"];
if(empty($query) && $info[$relation_id]['related_module'] == 'Calendar') $query = $_SESSION["activity_listquery"]; //crmv@60963
if (!empty($query)) {
$count_query = mkCountQuery($query);
$count_result = $adb->querySlave('TurboliftCount',$count_query); // crmv@185894
$count = $adb->query_result($count_result,0,"count");
}
} elseif (is_numeric($res)) {
$count = $res;
}
if ($count == 0) $count = '';
return $count;
}
static function setTurboliftCount($relation_id, $method) {
global $adb;
$qs = self::getTurboliftCountInfo();
if (array_key_exists($relation_id, $qs)) {
self::log("Adding SDK Turbolift Count ($relation_id) ... FAILED");
return;
}
$params = array($relation_id, $method);
$column = array('relation_id', 'method');
$adb->format_columns($column);
$res = $adb->pquery('insert into sdk_turbolift_count ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Turbolift Count ($relation_id) ... DONE");
self::clearSessionValue('sdk_turbolift_count');
} else {
self::log("Adding SDK Turbolift Count ($relation_id) ... FAILED");
}
}
static function unsetTurboliftCount($relation_id) {
global $adb;
$query = 'delete from sdk_turbolift_count where relation_id = ?';
$qpar = array($relation_id);
$res = $adb->pquery($query, $qpar);
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Turbolift Count ($relation_id) ... DONE");
self::clearSessionValue('sdk_turbolift_count');
} else {
self::log("Deleting SDK Turbolift Count ($relation_id) ... FAILED");
}
}
//crmv@51605e
//crmv@92272
// custom functions for the fields in the actions of create, edit and email
static function getProcessMakerFieldActions() {
global $adb;
$cache = Cache::getInstance('sdk_processmaker_factions',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_processmaker_factions');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['funct']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getFormattedProcessMakerFieldActions() {
$tmp = self::getProcessMakerFieldActions();
$return = array();
if (!empty($tmp)) {
foreach($tmp as $t) {
(empty($t['params'])) ? $params = '' : $params = $t['params'];
(empty($t['block'])) ? $block = getTranslatedString('LBL_PM_SDK_CUSTOM_FUNCTIONS','Settings') : $block = getTranslatedString($t['block'],'Settings');
$return[$block]["\$sdk:{$t['funct']}($params)"] = $t['label'];
}
}
return $return;
}
/*
* func : static function name
* src : path of file
* label : description of function
* parametes (optional) : parameters of static function separated by commas, text parametes must be included in single quotes instead tag (ex. $59-contact_no) without quotes.
*/
static function setProcessMakerFieldAction($func, $src, $label, $parameters='', $block='') {
global $adb;
$tmp = self::getProcessMakerFieldActions();
if (!empty($tmp)) {
foreach($tmp as $t) {
if ($func == $t['funct']) {
self::log("Adding SDK Process Maker Field Condition Custom Function ($func) ... FAILED: static function already exists");
return;
}
if ($label == $t['label']) {
self::log("Adding SDK Process Maker Field Condition Custom Function ($func) ... FAILED: label already exists");
return;
}
}
}
$id = $adb->getUniqueID("sdk_processmaker_factions");
$params = array($id,$func,$src,$label);
$column = array('id','funct','src','label');
if (!empty($parameters)) {
$params[] = $parameters;
$column[] = 'params';
}
if (!empty($block)) {
$params[] = $block;
$column[] = 'block';
}
$adb->format_columns($column);
$res = $adb->pquery('insert into sdk_processmaker_factions ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Process Maker Field Condition Custom Function ($func) ... DONE");
self::clearSessionValue('sdk_processmaker_factions');
} else {
self::log("Adding SDK Process Maker Field Condition Custom Function ($func) ... FAILED");
}
}
static function unsetProcessMakerFieldAction($func) {
global $adb;
$res = $adb->pquery('delete from sdk_processmaker_factions where funct = ?', array($func));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Process Maker Field Condition Custom Function ($func) ... DONE");
self::clearSessionValue('sdk_processmaker_factions');
} else {
self::log("Deleting SDK Process Maker Field Condition Custom Function ($func) ... FAILED");
}
}
// custom functions for the conditions in the BPMN-Tasks
static function getProcessMakerTaskConditions() {
global $adb;
$cache = Cache::getInstance('sdk_processmaker_tcond',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_processmaker_tcond');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$tmp[$row['id']] = $row; // TODO use funct as key (cos<6F> se uso esporto in un altro vte funziona ancora)
}
}
$cache->set($tmp);
}
return $tmp;
}
static function getFormattedProcessMakerTaskConditions() {
$tmp = self::getProcessMakerTaskConditions();
$return = '<option value="">'.getTranslatedString('LBL_SELECT_OPTION_DOTDOTDOT','com_workflow').'</option>';//crmv@207901
if (!empty($tmp)) {
$return .= '<optgroup label="'.getTranslatedString('LBL_PM_SDK_CUSTOM_FUNCTIONS','Settings').'">';
foreach($tmp as $t) {
$return .= '<option value="sdk:'.$t['id'].'">'.getTranslatedString($t['label'],'Settings').'</option>'; //crmv@169519
}
$return .= '</optgroup>';
}
return $return;
}
static function setProcessMakerTaskCondition($func, $src, $label) {
global $adb;
$tmp = self::getProcessMakerTaskConditions();
if (!empty($tmp)) {
foreach($tmp as $t) {
if ($func == $t['funct']) {
self::log("Adding SDK Process Maker Task Condition Custom Function ($func) ... FAILED: static function already exists");
return;
}
if ($label == $t['label']) {
self::log("Adding SDK Process Maker Task Condition Custom Function ($func) ... FAILED: label already exists");
return;
}
}
}
$id = $adb->getUniqueID("sdk_processmaker_tcond");
$params = array($id,$func,$src,$label);
$column = array('id','funct','src','label');
$adb->format_columns($column);
$res = $adb->pquery('insert into sdk_processmaker_tcond ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Process Maker Task Condition Custom Function ($func) ... DONE");
self::clearSessionValue('sdk_processmaker_tcond');
} else {
self::log("Adding SDK Process Maker Task Condition Custom Function ($func) ... FAILED");
}
}
static function unsetProcessMakerTaskCondition($func) {
global $adb;
$res = $adb->pquery('delete from sdk_processmaker_tcond where funct = ?', array($func));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Process Maker Task Condition Custom Function ($func) ... DONE");
self::clearSessionValue('sdk_processmaker_tcond');
} else {
self::log("Deleting SDK Process Maker Task Condition Custom Function ($func) ... FAILED");
}
}
// custom actions
static function getProcessMakerActions() {
global $adb;
$cache = Cache::getInstance('sdk_processmaker_actions',null,self::getCacheFolder());
$tmp = $cache->get();
if ($tmp === false) {
$tmp = array();
$result = $adb->query('select * from sdk_processmaker_actions');
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$row['label'] = 'SDK: '.$row['label'];
$tmp[$row['funct']] = $row;
}
}
$cache->set($tmp);
}
return $tmp;
}
static function setProcessMakerAction($func, $src, $label) {
global $adb;
$tmp = self::getProcessMakerActions();
if (!empty($tmp)) {
foreach($tmp as $t) {
if ($func == $t['funct']) {
self::log("Adding SDK Process Maker Custom Action ($func) ... FAILED: static function already exists");
return;
}
if ($label == $t['label']) {
self::log("Adding SDK Process Maker Custom Action ($func) ... FAILED: label already exists");
return;
}
}
}
$id = $adb->getUniqueID("sdk_processmaker_actions");
$params = array($id,$func,$src,$label);
$column = array('id','funct','src','label');
$adb->format_columns($column);
$res = $adb->pquery('insert into sdk_processmaker_actions ('.implode(',',$column).') values ('.generateQuestionMarks($params).')',array($params));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Adding SDK Process Maker Custom Action ($func) ... DONE");
self::clearSessionValue('sdk_processmaker_actions');
} else {
self::log("Adding SDK Process Maker Custom Action ($func) ... FAILED");
}
}
static function unsetProcessMakerAction($func) {
global $adb;
$res = $adb->pquery('delete from sdk_processmaker_actions where funct = ?', array($func));
if ($res && $adb->getAffectedRowCount($res) > 0) {
self::log("Deleting SDK Process Maker Custom Action ($func) ... DONE");
self::clearSessionValue('sdk_processmaker_actions');
} else {
self::log("Deleting SDK Process Maker Custom Action ($func) ... FAILED");
}
}
//crmv@92272e
//crmv@170283
static function setRestOperation($name, $handlerFilePath, $handlerMethodName, $params=array()) {
global $adb, $table_prefix;
require_once('include/Webservices/Utils.php');
$res = $adb->pquery("SELECT operationid FROM {$table_prefix}_ws_operation WHERE name = ?", array($name));
if ($res && $adb->num_rows($res) == 0) {
$operationId = vtws_addWebserviceOperation($name, $handlerFilePath, $handlerMethodName, 'post', 0, $name);
if (!empty($params)) {
$seq = 1;
foreach($params as $pname => $ptype) {
vtws_addWebserviceOperationParam($operationId,$pname,$ptype,$seq);
$seq++;
}
}
self::log("Adding SDK Rest Operation ($name) ... DONE");
} else {
self::log("Adding SDK Rest Operation ($name) ... FAILED");
}
}
//crmv@170283e
/**
* returns an array of all files/dirs which has been loaded by SDK
* TODO: optional parameter to pretty print the array, by module or customization type
* TODO: check if files are missing
* TODO: add SDK API to query without module
*/
static function getAllCustomizations($readLinks = false) {
global $adb,$table_prefix;
$advPerm = self::getAdvancedPermissions();
$advQueries = self::getAdvancedQueries();
$classes = self::getClasses();
//$extraSrc = self::getExtraSrc();
//$files = self::getFiles();
$iframes = self::getHomeIframes();
//$buttons = self::getMenuButton();
//$popQueries = self::getPopupQueries();
$popFuncs = self::getPopupReturnFunctions();
$preSave = self::getPreSaveList();
$repFolders = self::getReportFolders();
$smarty = self::getSmartyTemplates();
$uitypes = self::getUitypes();
//$views = self::getViews();
$files = array();
if (is_array($advPerm)) {
foreach ($advPerm as $perm) $files[] = $perm['src'];
}
if (is_array($advQueries)) {
foreach ($advQueries as $query) $files[] = $query['src'];
}
if (is_array($classes)) {
foreach ($classes as $class) $files[] = $class['src'];
}
if (is_array($iframes)) {
$frs = array();
foreach ($iframes as $frame) $frs[] = $frame['url'];
$frs = array_unique($frs);
$files = array_merge($files, array_values($frs));
}
if (is_array($popFuncs)) {
foreach ($popFuncs as $func) $files[] = $func['src'];
}
if (is_array($preSave)) {
foreach ($preSave as $ps) $files[] = $ps['src'];
}
if (is_array($repFolders)) {
foreach ($repFolders as $folder) {
$reports = $folder['details'];
if (is_array($reports)) {
foreach ($reports as $rep) $files[] = $rep['reportrun'];
}
}
}
if (is_array($smarty)) {
foreach ($smarty as $templ) $files[] = 'Smarty/templates/'.$templ['src'];
}
if (is_array($uitypes)) {
foreach ($uitypes as $type) {
$files[] = $type['src_php'];
$files[] = $type['src_tpl'];
if (!empty($type['src_js'])) $files[] = $type['src_js'];
}
}
// for the next ones we need to directly query the db
$res = $adb->query('select src from sdk_extra_src');
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetchByAssoc($res)) $files[] = $row['src'];
}
$res = $adb->query('select module,new_file from sdk_file');
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetchByAssoc($res)) $files[] = 'modules/'.$row['module'].'/'.$row['new_file'].'.php';
}
/* menu buttons: javascript code, should we parse it? */
$res = $adb->query('select src from sdk_popup_query');
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetchByAssoc($res)) $files[] = $row['src'];
}
$res = $adb->query('select src from sdk_view');
if ($res && $adb->num_rows($res) > 0) {
while ($row = $adb->fetchByAssoc($res)) $files[] = $row['src'];
}
// read stuff loaded in vte_links
if ($readLinks) {
$res = $adb->query('select linkurl,linkicon from '.$table_prefix.'_links where linktype in ("HEADERSCRIPT", "HEADERCSS") or linklabel like "%sdk%"');
if ($res && $adb->num_rows($res) > 0) {
$stuff = array();
while ($row = $adb->fetchByAssoc($res)) {
$stuff[] = $row['linkurl'];
if (!empty($row['linkicon'])) $stuff[] = $row['linkicon'];
}
$stuff = array_unique($stuff);
$files = array_merge($files, array_values($stuff));
}
}
$files = array_unique($files);
sort($files, SORT_STRING);
return $files;
}
//crmv@154170
static function exportXml($moduleInstance,&$PackageExportInstance) {
global $adb,$table_prefix;
$module = $moduleInstance->name;
$PackageExportInstance->openNode('sdk');
//sdk_adv_permission - i
$advancedPermission = self::getAdvancedPermissions();
if ($advancedPermission[$module] != '') {
$PackageExportInstance->openNode('adv_permission');
$PackageExportInstance->outputNode($advancedPermission[$module]['src'], 'src');
$PackageExportInstance->outputNode($advancedPermission[$module]['function'], 'function');
$PackageExportInstance->closeNode('adv_permission');
}
//sdk_adv_permission - e
//sdk_adv_query - i
$advancedQuery = self::getAdvancedQueries();
if ($advancedQuery[$module] != '') {
$PackageExportInstance->openNode('adv_query');
$PackageExportInstance->outputNode($advancedQuery[$module]['src'], 'src');
$PackageExportInstance->outputNode($advancedQuery[$module]['function'], 'function');
$PackageExportInstance->closeNode('adv_query');
}
//sdk_adv_query - e
//sdk_class - i
$sdk_class = self::getClass($module);
if (!empty($sdk_class)) {
$PackageExportInstance->openNode('classes');
$result = $adb->pquery('select * from sdk_class where extends = ?',array($module));
if ($result && $adb->num_rows($result)>0) {
$PackageExportInstance->openNode('class');
$PackageExportInstance->outputNode($adb->query_result($result,0,'extends'), 'extends');
$PackageExportInstance->outputNode($adb->query_result($result,0,'module'), 'module');
$PackageExportInstance->outputNode($adb->query_result($result,0,'src'), 'src');
$PackageExportInstance->closeNode('class');
}
$ds = $adb->query_result($result,0,'module');
while(($ds = self::getDirectSonModule($ds)) != '') {
$result = $adb->pquery('select * from sdk_class where module = ?',array($ds));
if ($result && $adb->num_rows($result)>0) {
$PackageExportInstance->openNode('class');
$PackageExportInstance->outputNode($adb->query_result($result,0,'extends'), 'extends');
$PackageExportInstance->outputNode($adb->query_result($result,0,'module'), 'module');
$PackageExportInstance->outputNode($adb->query_result($result,0,'src'), 'src');
$PackageExportInstance->closeNode('class');
}
}
$PackageExportInstance->closeNode('classes');
}
//sdk_class - e
//sdk_extra_src - i
$sdk_extra_src = self::getExtraSrc($module);
if (!empty($sdk_extra_src)) {
$PackageExportInstance->openNode('extra_sources');
foreach($sdk_extra_src as $extra_src) {
$PackageExportInstance->outputNode($extra_src, 'extra_src');
}
$PackageExportInstance->closeNode('extra_sources');
}
//sdk_extra_src - e
//sdk_popup_query - i
$PackageExportInstance->openNode('popup_queries');
$sdk_popup_query_types = array('field','related');
foreach($sdk_popup_query_types as $sdk_popup_query_type) {
$popupQueries = self::getPopupQueries($sdk_popup_query_type);
if (!empty($popupQueries)) {
foreach($popupQueries as $info) {
if ($module == $info['module']) {
$PackageExportInstance->openNode('popup_query');
$PackageExportInstance->outputNode($sdk_popup_query_type, 'type');
$PackageExportInstance->outputNode($info['param'], 'param');
$PackageExportInstance->outputNode($info['src'], 'src');
$PackageExportInstance->outputNode($info['hidden_rel_fields'], 'hidden_rel_fields'); //crmv@26920
$PackageExportInstance->closeNode('popup_query');
}
}
}
}
$PackageExportInstance->closeNode('popup_queries');
//sdk_popup_query - e
//sdk_popup_return_funct - i
$popupReturnFunctions = self::getPopupReturnFunctions();
if (!empty($popupReturnFunctions)) {
$PackageExportInstance->openNode('popup_return_functs');
foreach($popupReturnFunctions as $id => $info) {
if ($module == $info['module']) {
$PackageExportInstance->openNode('popup_return_funct');
$PackageExportInstance->outputNode($info['fieldname'], 'fieldname');
$PackageExportInstance->outputNode($info['src'], 'src');
$PackageExportInstance->closeNode('popup_return_funct');
}
}
$PackageExportInstance->closeNode('popup_return_functs');
}
//sdk_popup_return_funct - e
//sdk_presave - i
$preSave = self::getPreSaveList();
if (!empty($popupReturnFunctions)) {
foreach($preSave as $id => $info) {
if ($module == $info['module']) {
$PackageExportInstance->openNode('presave');
$PackageExportInstance->outputNode($info['src'], 'src');
$PackageExportInstance->closeNode('presave');
break;
}
}
}
//sdk_presave - e
//sdk_smarty - i
$smartyTemplates = self::getSmartyTemplates();
if (!empty($smartyTemplates)) {
$PackageExportInstance->openNode('smarty_templates');
$src = array();
foreach($smartyTemplates as $smartyTemplate) {
$params = Zend_Json::decode($smartyTemplate['params']);
if (!empty($params['module']) && $params['module'] == $module) {
$PackageExportInstance->openNode('smarty_template');
$PackageExportInstance->outputNode($smartyTemplate['params'], 'params');
$PackageExportInstance->outputNode($smartyTemplate['src'], 'src');
$PackageExportInstance->closeNode('smarty_template');
}
}
$PackageExportInstance->closeNode('smarty_templates');
}
//sdk_smarty - e
//sdk_uitype - i
$sdkUitype = self::getUitypes();
if (!empty($sdkUitype)) {
$PackageExportInstance->openNode('uitypes');
$result = $adb->pquery("SELECT distinct uitype FROM ".$table_prefix."_field WHERE tabid = ? AND uitype IN (".generateQuestionMarks(array_keys($sdkUitype)).")",array(getTabid($module),array_keys($sdkUitype)));
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$PackageExportInstance->openNode('uitype');
$PackageExportInstance->outputNode($row['uitype'], 'uitype');
$PackageExportInstance->outputNode($sdkUitype[$row['uitype']]['src_php'], 'src_php');
$PackageExportInstance->outputNode($sdkUitype[$row['uitype']]['src_tpl'], 'src_tpl');
$PackageExportInstance->outputNode($sdkUitype[$row['uitype']]['src_js'], 'src_js');
$PackageExportInstance->closeNode('uitype');
}
}
$PackageExportInstance->closeNode('uitypes');
}
//sdk_uitype - e
//sdk_view - i
$sdkView = self::getViews($module,'');
if (!empty($sdkView)) {
$PackageExportInstance->openNode('views');
foreach ($sdkView as $sequence => $info) {
$PackageExportInstance->openNode('view');
$PackageExportInstance->outputNode($info['src'], 'src');
$PackageExportInstance->outputNode($sequence, 'sequence');
$PackageExportInstance->outputNode($info['mode'], 'mode');
$PackageExportInstance->outputNode($info['on_success'], 'on_success');
$PackageExportInstance->closeNode('view');
}
$PackageExportInstance->closeNode('views');
}
//sdk_view - e
//sdk_file - i
$sdkFile = self::getFiles($module);
if (!empty($sdkFile)) {
$PackageExportInstance->openNode('files');
foreach ($sdkFile as $file => $new_file) {
$PackageExportInstance->openNode('file');
$PackageExportInstance->outputNode($file, 'file');
$PackageExportInstance->outputNode($new_file, 'new_file');
$PackageExportInstance->closeNode('file');
}
$PackageExportInstance->closeNode('files');
}
//sdk_file - e
$PackageExportInstance->closeNode('sdk');
}
//crmv@154170e
static function exportPackage($module,$zip) {
global $adb,$table_prefix;
//sdk_adv_permission - i
$advancedPermission = self::getAdvancedPermissions();
if ($advancedPermission[$module] != '') {
$src = $advancedPermission[$module]['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/adv_permission',$file);
}
//sdk_adv_permission - e
//sdk_adv_query - i
$advancedQuery = self::getAdvancedQueries();
if ($advancedQuery[$module] != '') {
$src = $advancedQuery[$module]['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/adv_query',$file);
}
//sdk_adv_query - e
//sdk_class - i
$sdk_class = self::getClass($module);
$sdk_class_list = array();
if (!empty($sdk_class)) {
$result = $adb->pquery('select * from sdk_class where extends = ?',array($module));
if ($result && $adb->num_rows($result)>0) {
$sdk_class_list[$adb->query_result($result,0,'module')] = $adb->query_result($result,0,'src');
}
$ds = $adb->query_result($result,0,'module');
while(($ds = self::getDirectSonModule($ds)) != '') {
$result = $adb->pquery('select * from sdk_class where module = ?',array($ds));
if ($result && $adb->num_rows($result)>0) {
$sdk_class_list[$ds] = $adb->query_result($result,0,'src');
}
}
if (!empty($sdk_class_list)) {
$sdk_class_list = array_unique($sdk_class_list);
foreach($sdk_class_list as $src) {
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/class',$file);
}
}
}
//sdk_class - e
//sdk_extra_src - i
$sdk_extra_src = self::getExtraSrc($module);
if (!empty($sdk_extra_src)) {
foreach($sdk_extra_src as $extra_src) {
$src = $extra_src;
if (is_file($src)) {
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/extra_src',$file);
} elseif (is_dir($src)) {
$dir = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyDirectoryFromDisk($src,"sdk/extra_src/$dir");
}
}
}
//sdk_extra_src - e
//sdk_popup_query - i
$sdk_popup_query_types = array('field','related');
foreach($sdk_popup_query_types as $sdk_popup_query_type) {
$popupQueries = self::getPopupQueries($sdk_popup_query_type);
if (!empty($popupQueries)) {
foreach($popupQueries as $info) {
if ($module == $info['module']) {
$src = $info['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/popup_query',$file);
}
}
}
}
//sdk_popup_query - e
//sdk_popup_return_funct - i
$popupReturnFunctions = self::getPopupReturnFunctions();
foreach($popupReturnFunctions as $id => $info) {
if ($module == $info['module']) {
$src = $info['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/popup_return_funct',$file);
}
}
//sdk_popup_return_funct - e
//sdk_presave - i
$preSave = self::getPreSaveList();
foreach($preSave as $id => $info) {
if ($module == $info['module']) {
$src = $info['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/presave',$file);
}
}
//sdk_presave - e
//sdk_smarty - i
$smartyTemplates = self::getSmartyTemplates();
if (!empty($smartyTemplates)) {
$src = array();
foreach($smartyTemplates as $smartyTemplate) {
$params = Zend_Json::decode($smartyTemplate['params']);
if (!empty($params['module']) && $params['module'] == $module) {
$src = $smartyTemplate['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk('Smarty/templates/'.$dir,'sdk/smarty',$file);
}
}
}
//sdk_smarty - e
//sdk_uitype - i
$sdkUitype = self::getUitypes();
if (!empty($sdkUitype)) {
$result = $adb->pquery("SELECT distinct uitype FROM ".$table_prefix."_field WHERE tabid = ? AND uitype IN (".generateQuestionMarks(array_keys($sdkUitype)).")",array(getTabid($module),array_keys($sdkUitype)));
if ($result && $adb->num_rows($result)>0) {
while($row=$adb->fetchByAssoc($result)) {
$src_php = $sdkUitype[$row['uitype']]['src_php'];
$dir = substr($src_php, 0, strripos($src_php,'/'));
$file = substr($src_php, strripos($src_php,'/')+1, strlen($src_php));
$zip->copyFileFromDisk($dir,'sdk/uitype/php',$file);
$src_tpl = $sdkUitype[$row['uitype']]['src_tpl'];
$dir = substr($src_tpl, 0, strripos($src_tpl,'/'));
$file = substr($src_tpl, strripos($src_tpl,'/')+1, strlen($src_tpl));
$zip->copyFileFromDisk('Smarty/templates/'.$dir,'sdk/uitype/tpl',$file);
$src_js = $sdkUitype[$row['uitype']]['src_js'];
$dir = substr($src_js, 0, strripos($src_js,'/'));
$file = substr($src_js, strripos($src_js,'/')+1, strlen($src_js));
$zip->copyFileFromDisk($dir,'sdk/uitype/js',$file);
}
}
}
//sdk_uitype - e
//sdk_view - i
$sdkView = self::getViews($module,'');
if (!empty($sdkView)) {
foreach ($sdkView as $info) {
$src = $info['src'];
$dir = substr($src, 0, strripos($src,'/'));
$file = substr($src, strripos($src,'/')+1, strlen($src));
$zip->copyFileFromDisk($dir,'sdk/view',$file);
}
}
//sdk_view - e
//sdk_file - i
/*
$sdkFile = self::getFiles($module);
if (!empty($sdkFile)) {
foreach ($sdkFile as $new_file) {
$zip->copyFileFromDisk("modules/$module",'sdk/file',"$new_file.php");
}
}
*/
//sdk_file - e
}
static function importPackage($modulenode, $moduleInstance) {
if (empty($modulenode->sdk)) return;
$module = strval($moduleInstance->name);
$tmp_dir = 'modules/SDK/tmp';
if (!empty($modulenode->sdk->adv_permission)) {
self::setAdvancedPermissionFunction($module, $modulenode->sdk->adv_permission->function, $modulenode->sdk->adv_permission->src);
$dest = $modulenode->sdk->adv_permission->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/adv_permission/$file")) copy("$tmp_dir/adv_permission/$file", $dest);
}
if (!empty($modulenode->sdk->adv_query)) {
self::setAdvancedQuery($module, $modulenode->sdk->adv_query->function, $modulenode->sdk->adv_query->src);
$dest = $modulenode->sdk->adv_query->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/adv_query/$file")) copy("$tmp_dir/adv_query/$file", $dest);
}
if (!empty($modulenode->sdk->classes)) {
foreach($modulenode->sdk->classes->class as $class) {
self::setClass($class->extends, $class->module, $class->src);
$dest = $class->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/class/$file")) copy("$tmp_dir/class/$file", $dest);
}
}
if (!empty($modulenode->sdk->extra_sources)) {
foreach($modulenode->sdk->extra_sources->extra_src as $extra_src) {
self::setExtraSrc($module, $extra_src);
$dest = $extra_src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
$src = "$tmp_dir/extra_src/$file";
FSUtils::rcopy($src, $dest);
}
}
if (!empty($modulenode->sdk->popup_queries)) {
foreach($modulenode->sdk->popup_queries->popup_query as $popup_query) {
self::setPopupQuery(strval($popup_query->type), $module, $popup_query->param, $popup_query->src, $popup_query->hidden_rel_fields); //crmv@26920
$dest = $popup_query->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/popup_query/$file")) copy("$tmp_dir/popup_query/$file", $dest);
}
}
if (!empty($modulenode->sdk->popup_return_functs)) {
foreach($modulenode->sdk->popup_return_functs->popup_return_funct as $popup_return_funct) {
self::setPopupReturnFunction($module, $popup_return_funct->fieldname, $popup_return_funct->src);
$dest = $popup_return_funct->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/popup_return_funct/$file")) copy("$tmp_dir/popup_return_funct/$file", $dest);
}
}
if (!empty($modulenode->sdk->presave)) {
self::setPreSave($module, $modulenode->sdk->presave->src);
$dest = $modulenode->sdk->presave->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/presave/$file")) copy("$tmp_dir/presave/$file", $dest);
}
if (!empty($modulenode->sdk->smarty_templates)) {
foreach($modulenode->sdk->smarty_templates->smarty_template as $smarty_template) {
self::setSmartyTemplate(Zend_Json::decode($smarty_template->params), $smarty_template->src);
$dest = "Smarty/templates/$smarty_template->src";
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/smarty/$file")) copy("$tmp_dir/smarty/$file", $dest);
}
}
if (!empty($modulenode->sdk->uitypes)) {
foreach($modulenode->sdk->uitypes->uitype as $uitype) {
self::setUitype($uitype->uitype,$uitype->src_php,$uitype->src_tpl,$uitype->src_js);
if ($uitype->src_php != '') {
$dest = $uitype->src_php;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/uitype/php/$file")) copy("$tmp_dir/uitype/php/$file", $dest);
}
if ($uitype->src_tpl != '') {
$dest = "Smarty/templates/$uitype->src_tpl";
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/uitype/tpl/$file")) copy("$tmp_dir/uitype/tpl/$file", $dest);
}
if ($uitype->src_js != '') {
$dest = $uitype->src_js;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/uitype/js/$file")) copy("$tmp_dir/uitype/js/$file", $dest);
}
}
}
if (!empty($modulenode->sdk->views)) {
foreach($modulenode->sdk->views->view as $view) {
self::addView($module, $view->src, $view->mode, $view->on_success);
$dest = $view->src;
$file = basename($dest);
@mkdir(dirname($dest),0775,true);
if (file_exists("$tmp_dir/view/$file")) copy("$tmp_dir/view/$file", $dest);
}
}
if (!empty($modulenode->sdk->files)) {
foreach($modulenode->sdk->files->file as $file) {
self::setFile($module, $file->file, $file->new_file);
}
}
//cancello la cartella temporanea
if (is_dir($tmp_dir)) {
FSUtils::deleteFolder($tmp_dir);
}
}
}