[ 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 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 }
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 |