public function addMemberAcl(MemberAcl $l) { $this->collMemberAcls[] = $l; $l->setMemberJob($this); }
public function updateMemberAcl($new_job, $new_acl) { foreach ($new_acl as $nk => $nv) { if (isset($nv['add']) && $nv['add'] == 'on') { $new_acl[$nk]['add'] = 1; } else { $new_acl[$nk]['add'] = null; } if (isset($nv['edit']) && $nv['edit'] == 'on') { $new_acl[$nk]['edit'] = 1; } else { $new_acl[$nk]['edit'] = null; } if (isset($nv['remove']) && $nv['remove'] == 'on') { $new_acl[$nk]['remove'] = 1; } else { $new_acl[$nk]['remove'] = null; } } $acls = $this->getMemberAcls(new Criteria()); $old = array(); foreach ($acls as $acl) { $old['member_job_' . $acl->getMemberJobId()] = array('add' => $acl->getAddPriv(), 'edit' => $acl->getEditPriv(), 'remove' => $acl->getRemovePriv()); } $removed = array_diff_key($old, $new_job); $inserted = array_diff_key($new_job, $old); $nc = array_intersect_key($new_acl, $new_job); $vc = array(); foreach ($old as $k => $v) { if (!isset($new_acl[$k]) && ($old[$k]['add'] == '1' || $old[$k]['edit'] == '1' || $old[$k]['remove'] == '1')) { $vc[$k] = array('add' => null, 'edit' => null, 'remove' => null); } if (isset($new_acl[$k])) { if ($new_acl[$k]['add'] != $old[$k]['add'] || $new_acl[$k]['edit'] != $old[$k]['edit'] || $new_acl[$k]['remove'] != $old[$k]['remove']) { $vc[$k] = array('add' => $new_acl[$k]['add'], 'edit' => $new_acl[$k]['edit'], 'remove' => $new_acl[$k]['remove']); } } } if ($inserted) { foreach ($inserted as $k => $v) { $job_id = preg_split('/_/', $k); $job_id = $job_id[2]; $acl = new MemberAcl(); $acl->setMemberType($this); $acl->setMemberJobId($job_id); if (isset($new_acl[$k])) { if (isset($new_acl[$k]['add'])) { $acl->setAddPriv($new_acl[$k]['add']); } if (isset($new_acl[$k]['edit'])) { $acl->setEditPriv($new_acl[$k]['edit']); } if (isset($new_acl[$k]['remove'])) { $acl->setRemovePriv($new_acl[$k]['remove']); } } $acl->save(); } } if ($removed) { foreach ($removed as $k => $v) { $job_id = preg_split('/_/', $k); $job_id = $job_id[2]; $acl = MemberAclPeer::retrieveByPK($this->getId(), $job_id); $acl->delete(); } } if ($vc) { foreach ($vc as $k => $v) { $job_id = preg_split('/_/', $k); $job_id = $job_id[2]; $acl = MemberAclPeer::retrieveByPK($this->getId(), $job_id); $acl->setAddPriv($v['add']); $acl->setEditPriv($v['edit']); $acl->setRemovePriv($v['remove']); $acl->save(); } } }