public function save() { $db = PearDatabase::getInstance(); $modulePermissions = $this->getModulePermissions(); $profileName = $this->get('profilename'); $description = $this->get('description'); $profilePermissions = $this->get('profile_permissions'); $calendarModule = Vtiger_Module_Model::getInstance('Calendar'); $eventModule = Vtiger_Module_Model::getInstance('Events'); $eventFieldsPermissions = $profilePermissions[$eventModule->getId()]['fields']; $profilePermissions[$eventModule->getId()] = $profilePermissions[$calendarModule->getId()]; $profilePermissions[$eventModule->getId()]['fields'] = $eventFieldsPermissions; $isProfileDirectlyRelatedToRole = 0; $isNewProfile = false; if ($this->has('directly_related_to_role')) { $isProfileDirectlyRelatedToRole = $this->get('directly_related_to_role'); } $profileId = $this->getId(); if (!$profileId) { $profileId = $db->getUniqueId('vtiger_profile'); $this->setId($profileId); $sql = 'INSERT INTO vtiger_profile(profileid, profilename, description, directly_related_to_role) VALUES (?,?,?,?)'; $params = array($profileId, $profileName, $description, $isProfileDirectlyRelatedToRole); $isNewProfile = true; } else { $sql = 'UPDATE vtiger_profile SET profilename=?, description=?, directly_related_to_role=? WHERE profileid=?'; $params = array($profileName, $description, $isProfileDirectlyRelatedToRole, $profileId); $db->pquery('DELETE FROM vtiger_profile2globalpermissions WHERE profileid=?', array($profileId)); } $db->pquery($sql, $params); $sql = 'INSERT INTO vtiger_profile2globalpermissions(profileid, globalactionid, globalactionpermission) VALUES (?,?,?)'; $params = array($profileId, Settings_Profiles_Module_Model::GLOBAL_ACTION_VIEW, $this->tranformInputPermissionValue($this->get('viewall'))); $db->pquery($sql, $params); $sql = 'INSERT INTO vtiger_profile2globalpermissions(profileid, globalactionid, globalactionpermission) VALUES (?,?,?)'; $params = array($profileId, Settings_Profiles_Module_Model::GLOBAL_ACTION_EDIT, $this->tranformInputPermissionValue($this->get('editall'))); $db->pquery($sql, $params); $allModuleModules = Vtiger_Module_Model::getAll(array(0), Settings_Profiles_Module_Model::getNonVisibleModulesList()); $allModuleModules[$eventModule->getId()] = $eventModule; if (count($allModuleModules) > 0) { $actionModels = Vtiger_Action_Model::getAll(true); foreach ($allModuleModules as $tabId => $moduleModel) { if ($moduleModel->isActive()) { $this->saveModulePermissions($moduleModel, $profilePermissions[$moduleModel->getId()]); } else { $permissions = array(); $permissions['is_permitted'] = Settings_Profiles_Module_Model::IS_PERMITTED_VALUE; if ($moduleModel->isEntityModule()) { $permissions['actions'] = array(); foreach ($actionModels as $actionModel) { if ($actionModel->isModuleEnabled($moduleModel)) { $permissions['actions'][$actionModel->getId()] = Settings_Profiles_Module_Model::IS_PERMITTED_VALUE; } } $permissions['fields'] = array(); $moduleFields = $moduleModel->getFields(); foreach ($moduleFields as $fieldModel) { if ($fieldModel->isEditEnabled()) { $permissions['fields'][$fieldModel->getId()] = Settings_Profiles_Record_Model::PROFILE_FIELD_READWRITE; } elseif ($fieldModel->isViewEnabled()) { $permissions['fields'][$fieldModel->getId()] = Settings_Profiles_Record_Model::PROFILE_FIELD_READONLY; } else { $permissions['fields'][$fieldModel->getId()] = Settings_Profiles_Record_Model::PROFILE_FIELD_INACTIVE; } } } $this->saveModulePermissions($moduleModel, $permissions); } } } if ($isNewProfile) { $this->saveUserAccessbleFieldsIntoProfile2Field(); } $this->recalculate(); return $profileId; }