You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							2.7 KiB
						
					
					
				| <?php | |
| define('GROUP_TABLE', TABLE_PREFIX.'group'); | |
| define('GROUP_DEPT_TABLE', TABLE_PREFIX.'group_dept_access'); | |
| class Group extends VerySimpleModel { | |
|     static $meta = array( | |
|         'table' => GROUP_TABLE, | |
|         'pk' => array('id'), | |
|     ); | |
|     const FLAG_ENABLED = 0x0001; | |
| 
 | |
|     function getName() { | |
|         return $this->group_name; | |
|     } | |
|     function getId() { | |
|         return $this->id; | |
|     } | |
| } | |
| 
 | |
| Staff::getMeta()->addJoin('group', array( | |
|     'constraint' => array('group_id' => 'Group.id'), | |
| )); | |
| 
 | |
| class GroupRoles extends MigrationTask { | |
|     var $description = "Migrate permissions from Group to Role"; | |
| 
 | |
|     static $pmap = array( | |
|             'ticket.create' => 'can_create_tickets', | |
|             'ticket.edit' => 'can_edit_tickets', | |
|             'ticket.reply' => 'can_post_ticket_reply', | |
|             'ticket.delete' => 'can_delete_tickets', | |
|             'ticket.close' => 'can_close_tickets', | |
|             'ticket.assign' => 'can_assign_tickets', | |
|             'ticket.transfer' => 'can_transfer_tickets', | |
|             'task.create' => 'can_create_tickets', | |
|             'task.edit' => 'can_edit_tickets', | |
|             'task.reply' => 'can_post_ticket_reply', | |
|             'task.delete' => 'can_delete_tickets', | |
|             'task.close' => 'can_close_tickets', | |
|             'task.assign' => 'can_assign_tickets', | |
|             'task.transfer' => 'can_transfer_tickets', | |
|             'emails.banlist' => 'can_ban_emails', | |
|             'canned.manage' => 'can_manage_premade', | |
|             'faq.manage' => 'can_manage_faq', | |
|             'stats.agents' => 'can_view_staff_stats', | |
|     ); | |
| 
 | |
|     function run($max_time) { | |
|         global $cfg; | |
|         // Select existing groups and create roles matching the current | |
|         // settings | |
|         foreach (Group::objects() as $group) { | |
|             $ht=array( | |
|                     'flags' => Group::FLAG_ENABLED, | |
|                     'name' => sprintf('%s %s', $group->getName(), | |
|                         // XXX: Translate based on the system language, not | |
|                         //      the current agent's | |
|                         __('Role')), | |
|                     'notes' => $group->getName() | |
|                     ); | |
|             $perms = array(); | |
|             foreach (self::$pmap as  $v => $k) { | |
|                 if ($group->{$k}) | |
|                     $perms[] = $v; | |
|             } | |
| 
 | |
|             $ht['permissions'] = $perms; | |
| 
 | |
|             $errors = array(); | |
|             $role = Role::__create($ht, $errors); | |
|             $group->role_id =  $role->getId(); | |
|             $group->save(); | |
|         } | |
| 
 | |
|         // Copy group default role to the agent for the respective primary | |
|         // department role | |
|         foreach (Staff::objects()->select_related('group') as $staff) { | |
|             $staff->role_id = $staff->group->role_id; | |
|             $staff->save(); | |
|         } | |
|     } | |
| } | |
| 
 | |
| return 'GroupRoles';
 |