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';
|