From cb8cc5332ab013e2981ea308fb09b60419afd5b1 Mon Sep 17 00:00:00 2001 From: Uma <uma.s@vtiger.com> Date: Tue, 24 Mar 2020 16:11:45 +0530 Subject: [PATCH] Fixes #89 Default module can be set for all users from MyPreferences page --- include/Webservices/WebserviceField.php | 22 ++++++++- include/utils/VtlibUtils.php | 2 + includes/main/WebUI.php | 2 +- .../v7/modules/Users/DetailViewBlockView.tpl | 4 ++ modules/Migration/schema/720_to_721.php | 45 +++++++++++++++++++ .../Settings/ModuleManager/actions/Basic.php | 2 +- modules/Users/Users.php | 2 +- modules/Users/actions/SaveAjax.php | 3 ++ modules/Users/models/Field.php | 26 ++++++++++- modules/Users/models/Module.php | 8 ++++ 10 files changed, 111 insertions(+), 5 deletions(-) diff --git a/include/Webservices/WebserviceField.php b/include/Webservices/WebserviceField.php index 3499c3a19..0db6fc176 100644 --- a/include/Webservices/WebserviceField.php +++ b/include/Webservices/WebserviceField.php @@ -336,6 +336,7 @@ class WebserviceField{ function getPicklistDetails(){ $cache = Vtiger_Cache::getInstance(); + $fieldName = $this->getFieldName(); if($cache->getPicklistDetails($this->getTabId(),$this->getFieldName())){ return $cache->getPicklistDetails($this->getTabId(),$this->getFieldName()); } else { @@ -346,7 +347,26 @@ class WebserviceField{ foreach ($allRegions as $regionId => $regionDetails) { $picklistDetails[] = array('value' => $regionId, 'label' => $regionDetails['name']); } - } else { + }elseif ($fieldName == 'defaultlandingpage') { + $picklistDetails = array(); + $presence = array(0); + $restrictedModules = array('Emails', 'Dashboard', 'ModComments', 'PBXManager'); + $query = 'SELECT name, tablabel, tabid FROM vtiger_tab WHERE presence IN (' . generateQuestionMarks($presence) . ') AND isentitytype = ? AND name NOT IN (' . generateQuestionMarks($restrictedModules) . ')'; + + $result = $this->pearDB->pquery($query, array($presence, '1', $restrictedModules)); + $numOfRows = $this->pearDB->num_rows($result); + + $picklistDetails[] = array('value' => 'Home', 'label' => vtranslate('Home', 'Home')); + for ($i = 0; $i < $numOfRows; $i++) { + $moduleName = $this->pearDB->query_result($result, $i, 'name'); + + // check the module access permission, if user has permission then show it in default module list + if (vtlib_isModuleActive($moduleName)) { + $moduleLabel = $this->pearDB->query_result($result, $i, 'tablabel'); + $picklistDetails[] = array('value' => $moduleName, 'label' => vtranslate($moduleLabel, $moduleName)); + } + } + } else { $hardCodedPickListNames = array('hdntaxtype','email_flag'); $hardCodedPickListValues = array('hdntaxtype'=> array( array('label' => 'Individual', 'value' => 'individual'), array('label' => 'Group', 'value' => 'group')), diff --git a/include/utils/VtlibUtils.php b/include/utils/VtlibUtils.php index c7f108a2b..50fb37599 100644 --- a/include/utils/VtlibUtils.php +++ b/include/utils/VtlibUtils.php @@ -158,6 +158,8 @@ function vtlib_toggleModuleAccess($modules, $enable_disable) { } else if($enable_disable === false) { $enable_disable = 1; $event_type = Vtiger_Module::EVENT_MODULE_DISABLED; + //Update default landing page to dashboard if module is disabled. + $adb->pquery('UPDATE vtiger_users SET defaultlandingpage = ? WHERE defaultlandingpage IN(' . generateQuestionMarks($modules) . ')', array_merge(array('Home'), $modules)); } $checkResult = $adb->pquery('SELECT name FROM vtiger_tab WHERE name IN ('. generateQuestionMarks($modules) .')', array($modules)); diff --git a/includes/main/WebUI.php b/includes/main/WebUI.php index bbc6e0aaf..96ba9788f 100644 --- a/includes/main/WebUI.php +++ b/includes/main/WebUI.php @@ -151,7 +151,7 @@ class Vtiger_WebUI extends Vtiger_EntryPoint { if(empty($module)) { if ($this->hasLogin()) { - $defaultModule = vglobal('default_module'); + $defaultModule = $currentUser->defaultlandingpage; $moduleModel = Vtiger_Module_Model::getInstance($defaultModule); if(!empty($defaultModule) && $defaultModule != 'Home' && $moduleModel && $moduleModel->isActive()) { $module = $defaultModule; $qualifiedModuleName = $defaultModule; $view = 'List'; diff --git a/layouts/v7/modules/Users/DetailViewBlockView.tpl b/layouts/v7/modules/Users/DetailViewBlockView.tpl index b0ab68b8f..33ba6ff00 100644 --- a/layouts/v7/modules/Users/DetailViewBlockView.tpl +++ b/layouts/v7/modules/Users/DetailViewBlockView.tpl @@ -107,7 +107,11 @@ {/if} <span class="value textOverflowEllipsis" data-field-type="{$FIELD_MODEL->getFieldDataType()}" {if $FIELD_MODEL->get('uitype') eq '19' or $FIELD_MODEL->get('uitype') eq '20' or $FIELD_MODEL->get('uitype') eq '21'} style="white-space:normal;" {/if} {if $fieldDataType eq 'email'}title='{$FIELD_MODEL->get('fieldvalue')}'{/if} > + {if $FIELD_MODEL->getName() neq 'defaultlandingpage'} {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getDetailViewTemplateName(),$MODULE_NAME) FIELD_MODEL=$FIELD_MODEL USER_MODEL=$USER_MODEL MODULE=$MODULE_NAME RECORD=$RECORD} + {else} + {vtranslate($FIELD_MODEL->get('fieldvalue'),$FIELD_MODEL->get('fieldvalue'))} + {/if} </span> {if $IS_AJAX_ENABLED && $FIELD_MODEL->isEditable() eq 'true' && $FIELD_MODEL->isAjaxEditable() eq 'true'} <span class="hide edit pull-left"> diff --git a/modules/Migration/schema/720_to_721.php b/modules/Migration/schema/720_to_721.php index 94d12a36f..0e09a716a 100644 --- a/modules/Migration/schema/720_to_721.php +++ b/modules/Migration/schema/720_to_721.php @@ -92,4 +92,49 @@ if (defined('VTIGER_UPGRADE')) { $db->pquery('UPDATE vtiger_emailtemplates SET module=? WHERE templatename IN ('. generateQuestionMarks($defaultContactTemplates).')', $updateContactParams); echo 'Email templates default moduleName updated'; + + //Migrate default module data from config editor to database + $moduleModel = Settings_Vtiger_ConfigModule_Model::getInstance(); + $configFieldData = $moduleModel->getViewableData(); + $defaultModule = $configFieldData['default_module']; + if(empty($defaultModule)){ + $defaultModule = 'Home'; + } + + $moduleInstance = Vtiger_Module_Model::getInstance('Users'); + $blockInstance = Vtiger_Block::getInstance('LBL_MORE_INFORMATION', $moduleInstance); + if ($blockInstance) { + $fieldInstance = Vtiger_Field::getInstance('defaultlandingpage', $moduleInstance); + if (!$fieldInstance) { + $fieldInstance = new Vtiger_Field(); + $fieldInstance->name = 'defaultlandingpage'; + $fieldInstance->column = 'defaultlandingpage'; + $fieldInstance->label = 'Default Landing Page'; + $fieldInstance->table = 'vtiger_users'; + $fieldInstance->columntype = 'VARCHAR(100)'; + $fieldInstance->defaultvalue = $defaultModule; + $fieldInstance->typeofdata = 'V~O'; + $fieldInstance->uitype = '32'; + $fieldInstance->presence = '0'; + + $blockInstance->addField($fieldInstance); + $configModuleInstance = Settings_Vtiger_ConfigModule_Model::getInstance(); + $defaultModules = $configModuleInstance->getPicklistValues('default_module'); + $fieldInstance->setPicklistValues($defaultModules); + echo "<br> Default landing page field added <br>"; + } + } + + $allUsers = Users_Record_Model::getAll(true); + $allUserIds = array_keys($allUsers); + + $db->pquery('UPDATE vtiger_users SET defaultlandingpage = ? WHERE id in ('. generateQuestionMarks($allUserIds) .')', array($defaultModule, $allUserIds)); + echo "Default landing page updated for all active users <br>"; + + //Recalculating user-preivilege file, as defaultlandingpage and other preference changes should be updated + foreach ($allUserIds as $userId) { + createUserPrivilegesfile($userId); + createUserSharingPrivilegesfile($userId); + } + echo "Re-calculated user privilege and sharing privileges files"; } \ No newline at end of file diff --git a/modules/Settings/ModuleManager/actions/Basic.php b/modules/Settings/ModuleManager/actions/Basic.php index 3f488c505..34af36d4c 100644 --- a/modules/Settings/ModuleManager/actions/Basic.php +++ b/modules/Settings/ModuleManager/actions/Basic.php @@ -36,7 +36,7 @@ class Settings_ModuleManager_Basic_Action extends Settings_Vtiger_IndexAjax_View }else{ $moduleManagerModel->disableModule($moduleName); } - + Vtiger_Cache::delete('UserPicklistDetails','defaultlandingpage'); $response = new Vtiger_Response(); $response->emit(); } diff --git a/modules/Users/Users.php b/modules/Users/Users.php index 5aafae460..fc81bbf7f 100755 --- a/modules/Users/Users.php +++ b/modules/Users/Users.php @@ -860,7 +860,7 @@ class Users extends CRMEntity { if($current_user->id == $this->id) { $_SESSION['vtiger_authenticated_user_theme'] = $fldvalue; } - } elseif($uitype == 32) { + } elseif($uitype == 32 && $fieldname == 'language') { $languageList = Vtiger_Language::getAll(); $languageList = array_keys($languageList); if(!in_array($fldvalue, $languageList) || $fldvalue == '') { diff --git a/modules/Users/actions/SaveAjax.php b/modules/Users/actions/SaveAjax.php index 5188833bb..61aaea632 100644 --- a/modules/Users/actions/SaveAjax.php +++ b/modules/Users/actions/SaveAjax.php @@ -65,6 +65,9 @@ class Users_SaveAjax_Action extends Vtiger_SaveAjax_Action { if(($fieldName == 'currency_decimal_separator' || $fieldName == 'currency_grouping_separator') && ($displayValue == ' ')) { $displayValue = vtranslate('Space', 'Users'); } + if($fieldName == 'defaultlandingpage'){ + $displayValue = vtranslate($fieldValue, $fieldValue); + } $result[$fieldName] = array('value' => $fieldValue, 'display_value' => $displayValue); } } diff --git a/modules/Users/models/Field.php b/modules/Users/models/Field.php index a7dd3518a..f3ed17795 100644 --- a/modules/Users/models/Field.php +++ b/modules/Users/models/Field.php @@ -74,8 +74,32 @@ class Users_Field_Model extends Vtiger_Field_Model { * @return <Array> List of picklist values if the field is of type picklist or multipicklist, null otherwise. */ public function getPicklistValues() { + $fieldName = $this->getName(); if($this->get('uitype') == 32) { - return Vtiger_Language_Handler::getAllLanguages(); + if($fieldName == 'language'){ + return Vtiger_Language_Handler::getAllLanguages(); + } else if($fieldName == 'defaultlandingpage'){ + $db = PearDatabase::getInstance(); + $currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel(); + $presence = array(0); + $restrictedModules = array('Emails', 'Dashboard', 'ModComments', 'PBXManager'); + $query = 'SELECT name, tablabel, tabid FROM vtiger_tab WHERE presence IN (' . generateQuestionMarks($presence) . ') AND isentitytype = ? AND name NOT IN (' . generateQuestionMarks($restrictedModules) . ')'; + + $result = $db->pquery($query, array($presence, '1', $restrictedModules)); + $numOfRows = $db->num_rows($result); + + $moduleData = array('Home' => vtranslate('Home','Home')); + for ($i = 0; $i < $numOfRows; $i++) { + $tabId = $db->query_result($result, $i, 'tabid'); + // check the module access permission, if user has permission then show it in default module list + if($currentUserPriviligesModel->hasModulePermission($tabId)){ + $moduleName = $db->query_result($result, $i, 'name'); + $moduleLabel = $db->query_result($result, $i, 'tablabel'); + $moduleData[$moduleName] = vtranslate($moduleLabel,$moduleName); + } + } + return $moduleData; + } } else if ($this->get('uitype') == '115') { $db = PearDatabase::getInstance(); diff --git a/modules/Users/models/Module.php b/modules/Users/models/Module.php index 5658b32f4..0a38b53fc 100644 --- a/modules/Users/models/Module.php +++ b/modules/Users/models/Module.php @@ -240,11 +240,19 @@ class Users_Module_Model extends Vtiger_Module_Model { * @param Vtiger_Record_Model $recordModel */ public function saveRecord(Vtiger_Record_Model $recordModel) { + global $log; + $log->fatal('ModuleSAve record api'); $moduleName = $this->get('name'); $focus = CRMEntity::getInstance($moduleName); + $log->fatal('focus class => '); + $log->fatal(get_class($focus)); $fields = $focus->column_fields; + $log->fatal('column fields => '); + $log->fatal($fields); foreach ($fields as $fieldName => $fieldValue) { $fieldValue = $recordModel->get($fieldName); + $log->fatal('recordModel field value => '. $fieldName); + $log->fatal($recordModel->get($fieldName)); if (is_array($fieldValue)) { $focus->column_fields[$fieldName] = $fieldValue; } else if ($fieldValue !== null) { -- GitLab