public function save(Vtiger_Request $request) { $blockId = $request->get('blockid'); $sourceModule = $request->get('sourceModule'); $modueInstance = Vtiger_Module_Model::getInstance($sourceModule); if (!empty($blockId)) { $blockInstance = Settings_LayoutEditor_Block_Model::getInstance($blockId); $blockInstance->set('display_status', $request->get('display_status')); $isDuplicate = false; } else { $blockInstance = new Settings_LayoutEditor_Block_Model(); $blockInstance->set('label', $request->get('label')); $blockInstance->set('iscustom', '1'); //Indicates block id after which you need to add the new block $beforeBlockId = $request->get('beforeBlockId'); if (!empty($beforeBlockId)) { $beforeBlockInstance = Vtiger_Block_Model::getInstance($beforeBlockId); $beforeBlockSequence = $beforeBlockInstance->get('sequence'); $newBlockSequence = $beforeBlockSequence + 1; //To give sequence one more than prev block $blockInstance->set('sequence', $newBlockSequence); //push all other block down so that we can keep new block there Vtiger_Block_Model::pushDown($beforeBlockSequence, $modueInstance->getId()); } $isDuplicate = Vtiger_Block_Model::checkDuplicate($request->get('label'), $modueInstance->getId()); } $response = new Vtiger_Response(); if (!$isDuplicate) { try { $id = $blockInstance->save($modueInstance); $responseInfo = array('id' => $id, 'label' => $blockInstance->get('label'), 'isCustom' => $blockInstance->isCustomized(), 'beforeBlockId' => $beforeBlockId, 'isAddCustomFieldEnabled' => $blockInstance->isAddCustomFieldEnabled()); if (empty($blockId)) { //if mode is create add all blocks sequence so that client will place the new block correctly $responseInfo['sequenceList'] = Vtiger_Block_Model::getAllBlockSequenceList($modueInstance->getId()); } $response->setResult($responseInfo); } catch (Exception $e) { $response->setError($e->getCode(), $e->getMessage()); } } else { $response->setError('502', vtranslate('LBL_DUPLICATES_EXIST', $request->getModule(false))); } $response->emit(); }