[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Settings/Groups/models/ -> Record.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  require_once  'include/events/include.inc';
  12  
  13  /**
  14   * Roles Record Model Class
  15   */
  16  class Settings_Groups_Record_Model extends Settings_Vtiger_Record_Model {
  17  
  18      /**
  19       * Function to get the Id
  20       * @return <Number> Group Id
  21       */
  22  	public function getId() {
  23          return $this->get('groupid');
  24      }
  25  
  26      /**
  27       * Function to set the Id
  28       * @param <Number> Group Id
  29       * @return <Settings_Groups_Reord_Model> instance
  30       */
  31  	public function setId($id) {
  32          return $this->set('groupid', $id);
  33      }
  34  
  35      /**
  36       * Function to get the Group Name
  37       * @return <String>
  38       */
  39  	public function getName() {
  40          return $this->get('groupname');
  41      }
  42  
  43      /**
  44       * Function to get the description of the group
  45       * @return <String>
  46       */
  47  	public function getDescription() {
  48          return $this->get('description');
  49      }
  50  
  51      /**
  52       * Function to get the Edit View Url for the Group
  53       * @return <String>
  54       */
  55  	public function getEditViewUrl() {
  56          return '?module=Groups&parent=Settings&view=Edit&record='.$this->getId();
  57      }
  58  
  59      /**
  60       * Function to get the Delete Action Url for the current group
  61       * @return <String>
  62       */
  63  	public function getDeleteActionUrl() {
  64          return 'index.php?module=Groups&parent=Settings&view=DeleteAjax&record='.$this->getId();
  65      }
  66      
  67      /**
  68       * Function to get the Detail Url for the current group
  69       * @return <String>
  70       */
  71      public function getDetailViewUrl() {
  72          return '?module=Groups&parent=Settings&view=Detail&record='.$this->getId();
  73      }
  74  
  75      /**
  76       * Function to get all the members of the groups
  77       * @return <Array> Settings_Profiles_Record_Model instances
  78       */
  79  	public function getMembers() {
  80          if (!$this->members) {
  81              $this->members = Settings_Groups_Member_Model::getAllByGroup($this);
  82          }
  83          return $this->members;
  84      }
  85  
  86      /**
  87       * Function to save the role
  88       */
  89  	public function save() {
  90          $db = PearDatabase::getInstance();
  91          $groupId = $this->getId();
  92          $mode = 'edit';
  93          $oldUsersList = $this->getUsersList(true);
  94  
  95          if (empty($groupId)) {
  96              $mode = '';
  97              $groupId = $db->getUniqueId('vtiger_users');
  98              $this->setId($groupId);
  99          }
 100  
 101          if ($mode == 'edit') {
 102              $sql = 'UPDATE vtiger_groups SET groupname=?, description=? WHERE groupid=?';
 103              $params = array($this->getName(), $this->getDescription(), $groupId);
 104          } else {
 105              $sql = 'INSERT INTO vtiger_groups(groupid, groupname, description) VALUES (?,?,?)';
 106              $params = array($groupId, $this->getName(), $this->getDescription());
 107          }
 108          $db->pquery($sql, $params);
 109  
 110          $members = $this->get('group_members');
 111          if (is_array($members)) {
 112              $db->pquery('DELETE FROM vtiger_users2group WHERE groupid=?', array($groupId));
 113              $db->pquery('DELETE FROM vtiger_group2grouprel WHERE groupid=?', array($groupId));
 114              $db->pquery('DELETE FROM vtiger_group2role WHERE groupid=?', array($groupId));
 115              $db->pquery('DELETE FROM vtiger_group2rs WHERE groupid=?', array($groupId));
 116  
 117              $noOfMembers = count($members);
 118              for ($i = 0; $i < $noOfMembers; ++$i) {
 119                  $id = $members[$i];
 120                  $idComponents = Settings_Groups_Member_Model::getIdComponentsFromQualifiedId($id);
 121                  if ($idComponents && count($idComponents) == 2) {
 122                      $memberType = $idComponents[0];
 123                      $memberId = $idComponents[1];
 124  
 125                      if ($memberType == Settings_Groups_Member_Model::MEMBER_TYPE_USERS) {
 126                          $db->pquery('INSERT INTO vtiger_users2group(userid, groupid) VALUES (?,?)', array($memberId, $groupId));
 127                      }
 128                      if ($memberType == Settings_Groups_Member_Model::MEMBER_TYPE_GROUPS) {
 129                          $db->pquery('INSERT INTO vtiger_group2grouprel(containsgroupid, groupid) VALUES (?,?)', array($memberId, $groupId));
 130                      }
 131                      if ($memberType == Settings_Groups_Member_Model::MEMBER_TYPE_ROLES) {
 132                          $db->pquery('INSERT INTO vtiger_group2role(roleid, groupid) VALUES (?,?)', array($memberId, $groupId));
 133                      }
 134                      if ($memberType == Settings_Groups_Member_Model::MEMBER_TYPE_ROLE_AND_SUBORDINATES) {
 135                          $db->pquery('INSERT INTO vtiger_group2rs(roleandsubid, groupid) VALUES (?,?)', array($memberId, $groupId));
 136                      }
 137                  }
 138              }
 139          }
 140          $this->recalculate($oldUsersList);
 141      }
 142  
 143      /**
 144       * Function to recalculate user priviliges files
 145       * @param <Array> $oldUsersList
 146       */
 147  	public function recalculate($oldUsersList) {
 148          set_time_limit(vglobal('php_max_execution_time'));
 149          require_once ('modules/Users/CreateUserPrivilegeFile.php');
 150  
 151          $userIdsList = array();
 152          foreach ($oldUsersList as $userId => $userRecordModel) {
 153              $userIdsList[$userId] = $userId;
 154          }
 155  
 156          $this->members = null;
 157          foreach ($this->getUsersList(true) as $userId => $userRecordModel) {
 158              $userIdsList[$userId] = $userId;
 159          }
 160  
 161          foreach ($userIdsList as $userId) {
 162              createUserPrivilegesfile($userId);
 163          }
 164      }
 165  
 166      /**
 167       * Function to get all users related to this group
 168       * @param <Boolean> $nonAdmin true/false
 169       * @return <Array> Users models list <Users_Record_Model>
 170       */
 171  	public function getUsersList($nonAdmin = false) {
 172          $userIdsList = $usersList = array();
 173          $members = $this->getMembers();
 174  
 175          foreach ($members['Users'] as $memberModel) {
 176              $userId = $memberModel->get('userId');
 177              $userIdsList[$userId] = $userId;
 178          }
 179  
 180          foreach ($members['Groups'] as $memberModel) {
 181              $groupModel = Settings_Groups_Record_Model::getInstance($memberModel->get('groupId'));
 182              $groupMembers = $groupModel->getMembers();
 183  
 184              foreach ($groupMembers['Users'] as $groupMemberModel) {
 185                  $userId = $groupMemberModel->get('userId');
 186                  $userIdsList[$userId] = $userId;
 187              }
 188          }
 189  
 190          foreach ($members['Roles'] as $memberModel) {
 191              $roleModel = new Settings_Roles_Record_Model();
 192              $roleModel->set('roleid', $memberModel->get('roleId'));
 193  
 194              $roleUsers = $roleModel->getUsers();
 195              foreach ($roleUsers as $userId => $userRecordModel) {
 196                  $userIdsList[$userId] = $userId;
 197              }
 198          }
 199  
 200          foreach ($members['RoleAndSubordinates'] as $memberModel) {
 201              $roleModel = new Settings_Roles_Record_Model();
 202              $roleModel->set('roleid', $memberModel->get('roleId'));
 203  
 204              $roleUsers = $roleModel->getUsers();
 205              foreach ($roleUsers as $userId => $userRecordModel) {
 206                  $userIdsList[$userId] = $userId;
 207              }
 208          }
 209  
 210          if (array_key_exists(1, $userIdsList)) {
 211              unset($userIdsList[1]);
 212          }
 213  
 214          foreach ($userIdsList as $userId) {
 215              $userRecordModel = Users_Record_Model::getInstanceById($userId, 'Users');
 216              if ($nonAdmin && $userRecordModel->isAdminUser()) {
 217                  continue;
 218              }
 219              $usersList[$userId] = $userRecordModel;
 220          }
 221          return $usersList;
 222      }
 223  
 224  	protected function transferOwnership($transferToGroup) {
 225          $db = PearDatabase::getInstance();
 226          $groupId = $this->getId();
 227          $transferGroupId = $transferToGroup->getId();
 228  
 229          $query = 'UPDATE vtiger_crmentity SET smownerid=? WHERE smownerid=?';
 230          $params = array($transferGroupId, $groupId);
 231          $db->pquery($query, $params);
 232  
 233          if (Vtiger_Utils::CheckTable('vtiger_customerportal_prefs')) {
 234              $query = 'UPDATE vtiger_customerportal_prefs SET prefvalue = ? WHERE prefkey = ? AND prefvalue = ?';
 235              $params = array($transferGroupId, 'defaultassignee', $groupId);
 236              $db->pquery($query, $params);
 237  
 238              $query = 'UPDATE vtiger_customerportal_prefs SET prefvalue = ? WHERE prefkey = ? AND prefvalue = ?';
 239              $params = array($transferGroupId, 'userid', $groupId);
 240              $db->pquery($query, $params);
 241          }
 242          
 243          //update workflow tasks Assigned User from Deleted Group to Transfer Owner
 244          $newOwnerModel = $this->getInstance($transferGroupId);
 245          if(!$newOwnerModel){
 246              $newOwnerModel = Users_Record_Model::getInstanceById($transferGroupId, 'Users');
 247          }
 248          $ownerModel = $this->getInstance($groupId);
 249          vtws_transferOwnershipForWorkflowTasks($ownerModel, $newOwnerModel);
 250          vtws_updateWebformsRoundrobinUsersLists($groupId, $transferGroupId);
 251      }
 252  
 253      /**
 254       * Function to delete the group
 255       * @param <Settings_Groups_Record_Model> $transferToGroup
 256       */
 257  	public function delete($transferToGroup) {
 258          $db = PearDatabase::getInstance();
 259          $groupId = $this->getId();
 260          $transferGroupId = $transferToGroup->getId();
 261  
 262          $em = new VTEventsManager($db);
 263          // Initialize Event trigger cache
 264          $em->initTriggerCache();
 265  
 266          $entityData = array();
 267          $entityData['groupid'] = $groupId;
 268          $entityData['transferToId'] = $transferGroupId;
 269          $em->triggerEvent("vtiger.entity.beforegroupdelete", $entityData);
 270  
 271          $this->transferOwnership($transferToGroup);
 272  
 273          deleteGroupRelatedSharingRules($groupId);
 274  
 275          $db->pquery('DELETE FROM vtiger_group2grouprel WHERE groupid=?', array($groupId));
 276          $db->pquery('DELETE FROM vtiger_group2role WHERE groupid=?', array($groupId));
 277          $db->pquery('DELETE FROM vtiger_group2rs WHERE groupid=?', array($groupId));
 278          $db->pquery('DELETE FROM vtiger_users2group WHERE groupid=?', array($groupId));
 279          $db->pquery("DELETE FROM vtiger_reportsharing WHERE shareid=? AND setype='groups'", array($groupId));
 280  
 281          $db->pquery('DELETE FROM vtiger_groups WHERE groupid=?', array($groupId));
 282      }
 283  
 284      /**
 285       * Function to get the list view actions for the record
 286       * @return <Array> - Associate array of Vtiger_Link_Model instances
 287       */
 288  	public function getRecordLinks() {
 289  
 290          $links = array();
 291          $recordLinks = array(
 292              array(
 293                  'linktype' => 'LISTVIEWRECORD',
 294                  'linklabel' => 'LBL_EDIT_RECORD',
 295                  'linkurl' => $this->getEditViewUrl(),
 296                  'linkicon' => 'icon-pencil'
 297              ),
 298              array(
 299                  'linktype' => 'LISTVIEWRECORD',
 300                  'linklabel' => 'LBL_DELETE_RECORD',
 301                  'linkurl' => "javascript:Settings_Vtiger_List_Js.triggerDelete(event,'".$this->getDeleteActionUrl()."')",
 302                  'linkicon' => 'icon-trash'
 303              )
 304          );
 305          foreach ($recordLinks as $recordLink) {
 306              $links[] = Vtiger_Link_Model::getInstanceFromValues($recordLink);
 307          }
 308  
 309          return $links;
 310      }
 311  
 312      /**
 313       * Function to get the instance of Groups record model from query result
 314       * @param <Object> $result
 315       * @param <Number> $rowNo
 316       * @return Settings_Groups_Record_Model instance
 317       */
 318  	public static function getInstanceFromQResult($result, $rowNo) {
 319          $db = PearDatabase::getInstance();
 320          $row = $db->query_result_rowdata($result, $rowNo);
 321          $role = new self();
 322          return $role->setData($row);
 323      }
 324  
 325      /**
 326       * Function to get all the groups
 327       * @return <Array> - Array of Settings_Groups_Record_Model instances
 328       */
 329  	public static function getAll() {
 330          $db = PearDatabase::getInstance();
 331  
 332          $sql = 'SELECT * FROM vtiger_groups';
 333          $params = array();
 334          $result = $db->pquery($sql, $params);
 335          $noOfGroups = $db->num_rows($result);
 336          $groups = array();
 337          for ($i = 0; $i < $noOfGroups; ++$i) {
 338              $group = self::getInstanceFromQResult($result, $i);
 339              $groups[$group->getId()] = $group;
 340          }
 341          return $groups;
 342      }
 343  
 344      /**
 345       * Function to get the instance of Group model, given group id or name
 346       * @param <Object> $value
 347       * @return Settings_Groups_Record_Model instance, if exists. Null otherwise
 348       */
 349  	public static function getInstance($value) {
 350          $db = PearDatabase::getInstance();
 351  
 352          if (Vtiger_Utils::isNumber($value)) {
 353              $sql = 'SELECT * FROM vtiger_groups WHERE groupid = ?';
 354          } else {
 355              $sql = 'SELECT * FROM vtiger_groups WHERE groupname = ?';
 356          }
 357          $params = array($value);
 358          $result = $db->pquery($sql, $params);
 359          if ($db->num_rows($result) > 0) {
 360              return self::getInstanceFromQResult($result, 0);
 361          }
 362          return null;
 363      }
 364      
 365      /* Function to get the instance of the group by Name
 366      * @param type $name -- name of the group
 367      * @return null/group instance
 368      */
 369     public static function getInstanceByName($name, $excludedRecordId = array()) {
 370         $db = PearDatabase::getInstance();
 371         $sql = 'SELECT * FROM vtiger_groups WHERE groupname=?';
 372         $params = array($name);
 373         
 374         if(!empty($excludedRecordId)){
 375             $sql.= ' AND groupid NOT IN ('.generateQuestionMarks($excludedRecordId).')';
 376             $params = array_merge($params,$excludedRecordId);
 377         }
 378         
 379         $result = $db->pquery($sql, $params);
 380         if($db->num_rows($result) > 0) {
 381             return self::getInstanceFromQResult($result, 0);
 382         }
 383         return null;
 384     }
 385  
 386  }


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