Example #1
0
 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;
 }