diff --git a/layouts/v7/modules/Settings/MenuEditor/Index.tpl b/layouts/v7/modules/Settings/MenuEditor/Index.tpl index 14bbcc3a78b45a7e15546f7783f0275ededa51bb..2a6c55f2d88dca6c8a7be6352edce32901ea8130 100644 --- a/layouts/v7/modules/Settings/MenuEditor/Index.tpl +++ b/layouts/v7/modules/Settings/MenuEditor/Index.tpl @@ -19,39 +19,40 @@ </div> </div> </div> - <br> - <div class="row"> - {assign var=APP_LIST value=Vtiger_MenuStructure_Model::getAppMenuList()} - {foreach item=APP_IMAGE key=APP_NAME from=$APP_IMAGE_MAP name=APP_MAP} - {if !in_array($APP_NAME, $APP_LIST)} {continue} {/if} - <div style="margin-left:25px;" class=" {if $smarty.foreach.APP_MAP.index eq 0 or count($APP_LIST) eq 1} {/if} col-lg-2"> - <div class="menuEditorItem app-{$APP_NAME}" data-app-name="{$APP_NAME}"> - <span class="fa {$APP_IMAGE}"></span> - {assign var=TRANSLATED_APP_NAME value={vtranslate("LBL_$APP_NAME")}} - <div class="textOverflowEllipsis" title="{$TRANSLATED_APP_NAME}">{$TRANSLATED_APP_NAME}</div> - </div> - <div class="sortable appContainer" data-appname="{$APP_NAME}"> - {foreach key=moduleName item=moduleModel from=$APP_MAPPED_MODULES[$APP_NAME]} - <div class="modules noConnect" data-module="{$moduleName}"> - <i data-appname="{$APP_NAME}" class="fa fa-times pull-right whiteIcon menuEditorRemoveItem" style="margin: 5%;"></i> - <div class="menuEditorItem menuEditorModuleItem"> - <span class="pull-left marginRight10px marginTop5px"> - <img class="alignMiddle cursorDrag" src="{vimage_path('drag.png')}"/> - </span> - {assign var='translatedModuleLabel' value=vtranslate($moduleModel->get('label'),$moduleName )} - <span> - <span class="marginRight10px pull-left">{$moduleModel->getModuleIcon()}</span> - </span> - <div class="textOverflowEllipsis marginTop10px textAlignLeft" title="{$translatedModuleLabel}">{$translatedModuleLabel}</div> + <div class="col-lg-12" style="margin-top: 10px;"> + <div class="row" style="margin-left: -28px;"> + {assign var=APP_LIST value=Vtiger_MenuStructure_Model::getAppMenuList()} + {foreach item=APP_IMAGE key=APP_NAME from=$APP_IMAGE_MAP name=APP_MAP} + {if !in_array($APP_NAME, $APP_LIST)} {continue} {/if} + <div class="col-lg-2{if $smarty.foreach.APP_MAP.index eq 0 or count($APP_LIST) eq 1}{/if}"> + <div class="menuEditorItem app-{$APP_NAME}" data-app-name="{$APP_NAME}"> + <span class="fa {$APP_IMAGE}"></span> + {assign var=TRANSLATED_APP_NAME value={vtranslate("LBL_$APP_NAME")}} + <div class="textOverflowEllipsis" title="{$TRANSLATED_APP_NAME}">{$TRANSLATED_APP_NAME}</div> + </div> + <div class="sortable appContainer" data-appname="{$APP_NAME}"> + {foreach key=moduleName item=moduleModel from=$APP_MAPPED_MODULES[$APP_NAME]} + <div class="modules noConnect" data-module="{$moduleName}"> + <i data-appname="{$APP_NAME}" class="fa fa-times pull-right whiteIcon menuEditorRemoveItem" style="margin: 5%;"></i> + <div class="menuEditorItem menuEditorModuleItem"> + <span class="pull-left marginRight10px marginTop5px"> + <img class="alignMiddle cursorDrag" src="{vimage_path('drag.png')}"/> + </span> + {assign var='translatedModuleLabel' value=vtranslate($moduleModel->get('label'),$moduleName )} + <span> + <span class="marginRight10px pull-left">{$moduleModel->getModuleIcon()}</span> + </span> + <div class="textOverflowEllipsis marginTop10px textAlignLeft" title="{$translatedModuleLabel}">{$translatedModuleLabel}</div> + </div> </div> - </div> - {/foreach} - <div class="menuEditorItem menuEditorModuleItem menuEditorAddItem" data-appname="{$APP_NAME}"> - <i class="fa fa-plus pull-left marginTop5px"></i> - <div class="marginTop10px">{vtranslate('LBL_SELECT_HIDDEN_MODULE', $QUALIFIED_MODULE_NAME)}</div> - </div> + {/foreach} + <div class="menuEditorItem menuEditorModuleItem menuEditorAddItem" data-appname="{$APP_NAME}"> + <i class="fa fa-plus pull-left marginTop5px"></i> + <div class="marginTop10px">{vtranslate('LBL_SELECT_HIDDEN_MODULE', $QUALIFIED_MODULE_NAME)}</div> + </div> + </div> </div> - </div> - {/foreach} + {/foreach} + </div> </div> </div> diff --git a/modules/Migration/schema/701_to_710.php b/modules/Migration/schema/701_to_710.php index 033b42168a421ff1104c1f5e7c78d610ec9099be..b4913c79430c9f5dfc65bec23ab47a4515bc7061 100644 --- a/modules/Migration/schema/701_to_710.php +++ b/modules/Migration/schema/701_to_710.php @@ -227,15 +227,94 @@ if (defined('VTIGER_UPGRADE')) { //END::Centralize user field table for easy query with context of user across module //START::Adding new parent TOOLS in menu - $appsList = array('TOOLS' => array('Rss', 'Portal')); - foreach ($appsList as $app => $appModules) { + $appsList = array('Tools' => array('Rss', 'Portal', 'EmailTemplates', 'RecycleBin')); + foreach ($appsList as $appName => $appModules) { + $menuInstance = Vtiger_Menu::getInstance($appName); foreach ($appModules as $moduleName) { $moduleModel = Vtiger_Module_Model::getInstance($moduleName); if ($moduleModel) { - Settings_MenuEditor_Module_Model::addModuleToApp($moduleName, $app); + Settings_MenuEditor_Module_Model::addModuleToApp($moduleName, $appName); + $menuInstance->addModule($moduleModel); } } } + + $result = $db->pquery('SELECT tabid, name FROM vtiger_tab', array()); + $moduleTabIds = array(); + while ($row = $db->fetch_array($result)) { + $moduleTabIds[$row['name']] = $row['tabid']; + } + + $defSequenceList = array( + 'MARKETING' => array( $moduleTabIds['Campaigns'], + $moduleTabIds['Leads'], + $moduleTabIds['Contacts'], + $moduleTabIds['Accounts'], + ), + 'SALES' => array( $moduleTabIds['Potentials'], + $moduleTabIds['Quotes'], + $moduleTabIds['Products'], + $moduleTabIds['Services'], + $moduleTabIds['SMSNotifier'], + $moduleTabIds['Contacts'], + $moduleTabIds['Accounts'] + ), + 'SUPPORT' => array( $moduleTabIds['HelpDesk'], + $moduleTabIds['Faq'], + $moduleTabIds['ServiceContracts'], + $moduleTabIds['Assets'], + $moduleTabIds['SMSNotifier'], + $moduleTabIds['Contacts'], + $moduleTabIds['Accounts'] + ), + 'INVENTORY' => array( $moduleTabIds['Products'], + $moduleTabIds['Services'], + $moduleTabIds['PriceBooks'], + $moduleTabIds['Invoice'], + $moduleTabIds['SalesOrder'], + $moduleTabIds['PurchaseOrder'], + $moduleTabIds['Vendors'], + $moduleTabIds['Contacts'], + $moduleTabIds['Accounts'] + ), + 'PROJECT' => array( $moduleTabIds['Project'], + $moduleTabIds['ProjectTask'], + $moduleTabIds['ProjectMilestone'], + $moduleTabIds['Contacts'], + $moduleTabIds['Accounts'] + ), + 'TOOLS' => array( $moduleTabIds['EmailTemplates'], + $moduleTabIds['Rss'], + $moduleTabIds['Portal'], + $moduleTabIds['RecycleBin'] + ) + ); + + $db->pquery('DELETE FROM vtiger_app2tab WHERE appname=? AND tabid IN (?, ?, ?)', array('SUPPORT', $moduleTabIds['Project'], $moduleTabIds['ProjectTask'], $moduleTabIds['ProjectMilestone'])); + $db->pquery('DELETE FROM vtiger_app2tab WHERE appname=? AND tabid=?', array('INVENTORY', $moduleTabIds['Assets'])); + + foreach ($defSequenceList as $appName => $tabIdsList) { + $result = $db->pquery('SELECT tabid FROM vtiger_app2tab WHERE appname=? AND tabid NOT IN (' . generateQuestionMarks($tabIdsList) . ')', array($appName, $tabIdsList)); + if ($db->num_rows($result)) { + while ($row = $db->fetch_array($result)) { + $defSequenceList[$appName][] = $row['tabid']; + } + } + } + + foreach ($defSequenceList as $appName => $tabIdsList) { + foreach ($tabIdsList as $seq => $tabId) { + $result = $db->pquery('SELECT 1 FROM vtiger_app2tab WHERE tabid=? AND appname=?', array($tabId, $appName)); + + $params = array($seq+1, $tabId, $appName); + if ($db->num_rows($result)) { + $query = 'UPDATE vtiger_app2tab SET sequence=? WHERE tabid=? AND appname=?'; + } else { + $query = 'INSERT INTO vtiger_app2tab(sequence,tabid,appname) VALUES(?,?,?)'; + } + $db->pquery($query, $params); + } + } echo '<br>Succesfully added RSS, Email Templates for new parent TOOLS<br>'; //END::Adding new parent TOOLS in menu diff --git a/modules/Vtiger/models/MenuStructure.php b/modules/Vtiger/models/MenuStructure.php index 9c9cc96b291a7234f3700c70a5a6ddb2a008cd19..8514310bbbc2f14b820e33641982e808cec97b60 100644 --- a/modules/Vtiger/models/MenuStructure.php +++ b/modules/Vtiger/models/MenuStructure.php @@ -186,6 +186,10 @@ class Vtiger_MenuStructure_Model extends Vtiger_Base_Model { 'ProjectTask' => array('PROJECT'), 'ProjectMilestone' => array('PROJECT'), 'ServiceContracts' => array('SUPPORT'), + 'EmailTemplates'=> array('TOOLS'), + 'Rss' => array('TOOLS'), + 'Portal' => array('TOOLS'), + 'RecycleBin' => array('TOOLS'), ); $oldToNewAppMap = Vtiger_MenuStructure_Model::getOldToNewAppMapping();