[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Settings/SharingAccess/models/ -> Rule.php (source)

   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  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1