[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /*+*********************************************************************************** 3 * The contents of this file are subject to the vtiger CRM Public License Version 1.0 4 * ("License"); You may not use this file except in compliance with the License 5 * The Original Code is: vtiger CRM Open Source 6 * The Initial Developer of the Original Code is vtiger. 7 * Portions created by vtiger are Copyright (C) vtiger. 8 * All Rights Reserved. 9 *************************************************************************************/ 10 11 /** 12 * Sharng Access Vtiger Module Model Class 13 */ 14 class Settings_SharingAccess_Rule_Model extends Vtiger_Base_Model { 15 16 const RULE_TYPE_GROUPS = 'GRP'; 17 const RULE_TYPE_ROLE = 'ROLE'; 18 const RULE_TYPE_ROLE_AND_SUBORDINATES = 'RS'; 19 20 const READ_ONLY_PERMISSION = 0; 21 const READ_WRITE_PERMISSION = 1; 22 23 static $allPermissions = array ( 24 self::READ_ONLY_PERMISSION => 'Read Only', 25 self::READ_WRITE_PERMISSION => 'Read Write' 26 ); 27 28 static $ruleMemberToRelationMapping = array ( 29 self::RULE_TYPE_GROUPS => Settings_SharingAccess_RuleMember_Model::RULE_MEMBER_TYPE_GROUPS, 30 self::RULE_TYPE_ROLE => Settings_SharingAccess_RuleMember_Model::RULE_MEMBER_TYPE_ROLES, 31 self::RULE_TYPE_ROLE_AND_SUBORDINATES => Settings_SharingAccess_RuleMember_Model::RULE_MEMBER_TYPE_ROLE_AND_SUBORDINATES 32 ); 33 34 static $dataShareTableColArr = array ( 35 self::RULE_TYPE_GROUPS => array ( 36 self::RULE_TYPE_GROUPS => array ( 37 'table' => 'vtiger_datashare_grp2grp', 38 'source_id' => 'share_groupid', 39 'target_id' => 'to_groupid' 40 ), 41 self::RULE_TYPE_ROLE => array ( 42 'table' => 'vtiger_datashare_grp2role', 43 'source_id' => 'share_groupid', 44 'target_id' => 'to_roleid' 45 ), 46 self::RULE_TYPE_ROLE_AND_SUBORDINATES => array ( 47 'table' => 'vtiger_datashare_grp2rs', 48 'source_id' => 'share_groupid', 49 'target_id' => 'to_roleandsubid' 50 ), 51 ), 52 self::RULE_TYPE_ROLE => array ( 53 self::RULE_TYPE_GROUPS => array ( 54 'table' => 'vtiger_datashare_role2group', 55 'source_id' => 'share_roleid', 56 'target_id' => 'to_groupid' 57 ), 58 self::RULE_TYPE_ROLE => array ( 59 'table' => 'vtiger_datashare_role2role', 60 'source_id' => 'share_roleid', 61 'target_id' => 'to_roleid' 62 ), 63 self::RULE_TYPE_ROLE_AND_SUBORDINATES => array ( 64 'table' => 'vtiger_datashare_role2rs', 65 'source_id' => 'share_roleid', 66 'target_id' => 'to_roleandsubid' 67 ), 68 ), 69 self::RULE_TYPE_ROLE_AND_SUBORDINATES => array ( 70 self::RULE_TYPE_GROUPS => array ( 71 'table' => 'vtiger_datashare_rs2grp', 72 'source_id' => 'share_roleandsubid', 73 'target_id' => 'to_groupid' 74 ), 75 self::RULE_TYPE_ROLE => array ( 76 'table' => 'vtiger_datashare_rs2role', 77 'source_id' => 'share_roleandsubid', 78 'target_id' => 'to_roleid' 79 ), 80 self::RULE_TYPE_ROLE_AND_SUBORDINATES => array ( 81 'table' => 'vtiger_datashare_rs2rs', 82 'source_id' => 'share_roleandsubid', 83 'target_id' => 'to_roleandsubid' 84 ), 85 ), 86 ); 87 88 /** 89 * Function to get the Id of the Sharing Access Rule 90 * @return <Number> Id 91 */ 92 public function getId() { 93 return $this->get('shareid'); 94 } 95 96 public function getRuleType() { 97 $idComponents = $this->getIdComponents(); 98 if($idComponents && count($idComponents) > 0) { 99 return $idComponents[0]; 100 } 101 return false; 102 } 103 104 public function setModule($moduleName) { 105 $module = Settings_SharingAccess_Module_Model::getInstance($moduleName); 106 $this->module = $module; 107 return $this; 108 } 109 110 public function setModuleFromInstance($module) { 111 $this->module = $module; 112 return $this; 113 } 114 115 /** 116 * Function to get the Group Name 117 * @return <String> 118 */ 119 public function getModule() { 120 return $this->module; 121 } 122 123 protected function getRuleComponents() { 124 if(!$this->rule_details && $this->getId()) { 125 $db = PearDatabase::getInstance(); 126 127 $relationTypeComponents = explode('::', $this->get('relationtype')); 128 $sourceType = $relationTypeComponents[0]; 129 $targetType = $relationTypeComponents[1]; 130 131 $tableColumnInfo = self::$dataShareTableColArr[$sourceType][$targetType]; 132 $tableName = $tableColumnInfo['table']; 133 $sourceColumnName = $tableColumnInfo['source_id']; 134 $targetColumnName = $tableColumnInfo['target_id']; 135 136 $sql = 'SELECT * FROM '.$tableName.' WHERE shareid = ?'; 137 $params = array($this->getId()); 138 $result = $db->pquery($sql, $params); 139 if($db->num_rows($result)) { 140 $sourceId = $db->query_result($result, 0, $sourceColumnName); 141 $sourceMemberType = self::$ruleMemberToRelationMapping[$sourceType]; 142 $qualifiedSourceId = Settings_SharingAccess_RuleMember_Model::getQualifiedId($sourceMemberType, $sourceId); 143 $sourceMember = Settings_SharingAccess_RuleMember_Model::getInstance($qualifiedSourceId); 144 $this->rule_details['source_member'] = $sourceMember; 145 146 $targetId = $db->query_result($result, 0, $targetColumnName); 147 $targetMemberType = self::$ruleMemberToRelationMapping[$targetType]; 148 $qualifiedTargetId = Settings_SharingAccess_RuleMember_Model::getQualifiedId($targetMemberType, $targetId); 149 $targetMember = Settings_SharingAccess_RuleMember_Model::getInstance($qualifiedTargetId); 150 $this->rule_details['target_member'] = $targetMember; 151 152 $this->rule_details['permission'] = $db->query_result($result, 0, 'permission');; 153 } 154 155 } 156 return $this->rule_details; 157 } 158 159 public function getSourceMember() { 160 if($this->getId()) { 161 $ruleComponents = $this->getRuleComponents(); 162 return $ruleComponents['source_member']; 163 } 164 return false; 165 } 166 167 public function getTargetMember() { 168 if($this->getId()) { 169 $ruleComponents = $this->getRuleComponents(); 170 return $ruleComponents['target_member']; 171 } 172 return false; 173 } 174 175 public function getPermission() { 176 if($this->getId()) { 177 $ruleComponents = $this->getRuleComponents(); 178 return $ruleComponents['permission']; 179 } 180 return false; 181 } 182 183 public function isReadOnly() { 184 if($this->getId()) { 185 $permission = $this->getPermission(); 186 return ($permission == self::READ_ONLY_PERMISSION); 187 } 188 return false; 189 } 190 191 public function isReadWrite() { 192 if($this->getId()) { 193 $permission = $this->getPermission(); 194 return ($permission == self::READ_WRITE_PERMISSION); 195 } 196 return false; 197 } 198 199 public function getEditViewUrl() { 200 return '?module=SharingAccess&parent=Settings&view=IndexAjax&mode=editRule&for_module='.$this->getModule()->getId().'&record='.$this->getId(); 201 } 202 203 public function getDeleteActionUrl() { 204 return '?module=SharingAccess&parent=Settings&action=IndexAjax&mode=deleteRule&for_module='.$this->getModule()->getId().'&record='.$this->getId(); 205 } 206 207 /** 208 * Function to get the detailViewUrl for the rule member in Sharing Access Custom Rules 209 * @return DetailViewUrl 210 */ 211 public function getSourceDetailViewUrl() { 212 $sourceMember = $this->getSourceMember()->getId(); 213 $sourceMemberDetails = explode(':', $sourceMember); 214 215 if($sourceMemberDetails[0] == 'Groups') { 216 return 'index.php?parent=Settings&module=Groups&view=Detail&record='.$sourceMemberDetails[1]; 217 } else if($sourceMemberDetails[0] == 'Roles') { 218 return 'index.php?parent=Settings&module=Roles&view=Edit&record='.$sourceMemberDetails[1]; 219 } else if($sourceMemberDetails[0] == 'RoleAndSubordinates') { 220 return 'index.php?parent=Settings&module=Roles&view=Edit&record='.$sourceMemberDetails[1]; 221 } 222 } 223 224 /** 225 * Function to get the detailViewUrl for the rule member in Sharing Access Custom Rules 226 * @return DetailViewUrl 227 */ 228 public function getTargetDetailViewUrl() { 229 $targetMember = $this->getTargetMember()->getId(); 230 $targetMemberDetails = explode(':', $targetMember); 231 232 if($targetMemberDetails[0] == 'Groups'){ 233 return 'index.php?parent=Settings&module=Groups&view=Detail&record='.$targetMemberDetails[1]; 234 } else if($targetMemberDetails[0] == 'Roles') { 235 return 'index.php?parent=Settings&module=Roles&view=Edit&record='.$targetMemberDetails[1]; 236 } else if($targetMemberDetails[0] == 'RoleAndSubordinates') { 237 return 'index.php?parent=Settings&module=Roles&view=Edit&record='.$targetMemberDetails[1]; 238 } 239 } 240 241 /** 242 * Function to get the Member Name from the Rule Model 243 * @return Name of the rule Member 244 */ 245 public function getSourceMemberName() { 246 $sourceMember = $this->getSourceMember()->getId(); 247 $sourceMemberDetails = explode(':', $sourceMember); 248 return $sourceMemberDetails[0]; 249 } 250 251 /** 252 * Function to get the Member Name from the Rule Model 253 * @return Name of the rule Member 254 */ 255 public function getTargetMemberName() { 256 $targetMember = $this->getTargetMember()->getId(); 257 $targetMemberDetails = explode(':', $targetMember); 258 return $targetMemberDetails[0]; 259 } 260 261 /** 262 * Function to get the list view actions for the record 263 * @return <Array> - Associate array of Vtiger_Link_Model instances 264 */ 265 public function getRecordLinks() { 266 267 $links = array(); 268 $recordLinks = array( 269 array( 270 'linktype' => 'LISTVIEWRECORD', 271 'linklabel' => 'LBL_EDIT_RECORD', 272 'linkurl' => 'javascript:app.showModalWindow(null, "'.$this->getEditViewUrl().'");', 273 'linkicon' => 'icon-pencil' 274 ), 275 array( 276 'linktype' => 'LISTVIEWRECORD', 277 'linklabel' => 'LBL_DELETE_RECORD', 278 'linkurl' => 'javascript:app.showModalWindow(null, "'.$this->getDeleteActionUrl().'");', 279 'linkicon' => 'icon-trash' 280 ) 281 ); 282 foreach($recordLinks as $recordLink) { 283 $links[] = Vtiger_Link_Model::getInstanceFromValues($recordLink); 284 } 285 286 return $links; 287 } 288 289 public function save() { 290 $db = PearDatabase::getInstance(); 291 $ruleId = $this->getId(); 292 293 if(!$ruleId) { 294 $ruleId = $db->getUniqueId('vtiger_datashare_module_rel'); 295 $this->set('shareid', $ruleId); 296 297 $db->pquery("INSERT INTO vtiger_datashare_module_rel(shareid, tabid) VALUES(?,?)", 298 array($ruleId, $this->getModule()->getId())); 299 } else { 300 $relationTypeComponents = explode('::', $this->get('relationtype')); 301 $sourceType = $relationTypeComponents[0]; 302 $targetType = $relationTypeComponents[1]; 303 304 $tableColumnInfo = self::$dataShareTableColArr[$sourceType][$targetType]; 305 $tableName = $tableColumnInfo['table']; 306 $sourceColumnName = $tableColumnInfo['source_id']; 307 $targetColumnName = $tableColumnInfo['target_id']; 308 309 $db->pquery("DELETE FROM $tableName WHERE shareid=?", array($ruleId)); 310 } 311 312 $sourceId = $this->get('source_id'); 313 $sourceIdComponents = Settings_SharingAccess_RuleMember_Model::getIdComponentsFromQualifiedId($sourceId); 314 $sourceType = array_search($sourceIdComponents[0], self::$ruleMemberToRelationMapping); 315 $targetId = $this->get('target_id'); 316 $targetIdComponents = Settings_SharingAccess_RuleMember_Model::getIdComponentsFromQualifiedId($targetId); 317 $targetType = array_search($targetIdComponents[0], self::$ruleMemberToRelationMapping); 318 $tableColumnName = self::$dataShareTableColArr[$sourceType][$targetType]; 319 $tableName = $tableColumnName['table']; 320 $sourceColumnName = $tableColumnName['source_id']; 321 $targetColumnName = $tableColumnName['target_id']; 322 323 $this->set('relationtype', implode('::', array($sourceType, $targetType))); 324 325 $permission = $this->get('permission'); 326 327 $sql = "INSERT INTO $tableName (shareid, $sourceColumnName, $targetColumnName, permission) VALUES (?,?,?,?)"; 328 $params = array($ruleId, $sourceIdComponents[1], $targetIdComponents[1], $permission); 329 $db->pquery($sql, $params); 330 331 $sql = 'UPDATE vtiger_datashare_module_rel SET relationtype=? WHERE shareid=?'; 332 $params = array($this->get('relationtype'), $ruleId); 333 $db->pquery($sql, $params); 334 Settings_SharingAccess_Module_Model::recalculateSharingRules(); 335 } 336 337 public function delete() { 338 $db = PearDatabase::getInstance(); 339 340 $ruleId = $this->getId(); 341 342 $relationTypeComponents = explode('::', $this->get('relationtype')); 343 $sourceType = $relationTypeComponents[0]; 344 $targetType = $relationTypeComponents[1]; 345 $tableColumnInfo = self::$dataShareTableColArr[$sourceType][$targetType]; 346 $tableName = $tableColumnInfo['table']; 347 $db->pquery("DELETE FROM $tableName WHERE shareid=?", array($ruleId)); 348 349 $db->pquery('DELETE FROM vtiger_datashare_module_rel WHERE shareid=?', array($ruleId)); 350 Settings_SharingAccess_Module_Model::recalculateSharingRules(); 351 } 352 353 /** 354 * Function to get all the rules 355 * @return <Array> - Array of Settings_Groups_Record_Model instances 356 */ 357 public static function getInstance($moduleModel, $ruleId) { 358 $db = PearDatabase::getInstance(); 359 360 $sql = 'SELECT * FROM vtiger_datashare_module_rel WHERE tabid = ? AND shareid = ?'; 361 $params = array($moduleModel->getId(), $ruleId); 362 $result = $db->pquery($sql, $params); 363 364 if($db->num_rows($result)) { 365 $row = $db->query_result_rowdata($result, 0); 366 $ruleModel = new self(); 367 return $ruleModel->setData($row)->setModuleFromInstance($moduleModel); 368 } 369 return false; 370 } 371 372 /** 373 * Function to get all the rules 374 * @return <Array> - Array of Settings_Groups_Record_Model instances 375 */ 376 public static function getAllByModule($moduleModel) { 377 $db = PearDatabase::getInstance(); 378 379 $sql = 'SELECT * FROM vtiger_datashare_module_rel WHERE tabid = ?'; 380 $params = array($moduleModel->getId()); 381 $result = $db->pquery($sql, $params); 382 $noOfRules = $db->num_rows($result); 383 384 $ruleModels = array(); 385 for($i=0; $i<$noOfRules; ++$i) { 386 $row = $db->query_result_rowdata($result, $i); 387 $ruleModel = new self(); 388 $ruleModels[$row['shareid']] = $ruleModel->setData($row)->setModuleFromInstance($moduleModel); 389 } 390 return $ruleModels; 391 } 392 393 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |