ObjectInheritAction.class.php (2058B)
1 <?php 2 namespace cms\action\object; 3 use cms\action\Action; 4 use cms\action\Method; 5 use cms\action\ObjectAction; 6 use cms\model\Permission; 7 use cms\model\BaseObject; 8 use cms\model\Folder; 9 use language\Messages; 10 use logger\Logger; 11 use util\Session; 12 13 class ObjectInheritAction extends ObjectAction implements Method { 14 15 public function getRequiredPermission() 16 { 17 return Permission::ACL_GRANT; 18 } 19 20 public function view() { 21 $o = new BaseObject( $this->request->getId() ); 22 $o->objectLoadRaw(); 23 $this->setTemplateVar( 'type',$o->getType() ); 24 25 $acllist = array(); 26 $this->setTemplateVar('acls',$acllist ); 27 } 28 29 30 public function post() { 31 32 Session::close(); 33 34 $baseObject = new Folder( $this->request->getId() ); 35 $baseObject->load(); 36 37 if ( ! $this->request->isTrue('inherit') ) 38 { 39 $this->addWarningFor( $baseObject,Messages::NOTHING_DONE); 40 return; 41 } 42 43 $aclids = $baseObject->getAllAclIds(); 44 45 $newAclList = array(); 46 foreach( $aclids as $aclid ) 47 { 48 $permission = new Permission( $aclid ); 49 $permission->load(); 50 if ( $permission->transmit ) 51 $newAclList[] = $permission; 52 } 53 Logger::debug('inheriting '.count($newAclList).' acls'); 54 55 $oids = $baseObject->getObjectIds(); 56 57 foreach( $baseObject->getAllSubfolderIds() as $sfid ) 58 { 59 $subfolder = new Folder( $sfid ); 60 61 $oids = array_merge($oids,$subfolder->getObjectIds()); 62 } 63 64 foreach( $oids as $oid ) 65 { 66 $object = new BaseObject( $oid ); 67 68 // Die alten ACLs des Objektes löschen. 69 foreach( $object->getAllAclIds() as $aclid ) 70 { 71 $permission = new Permission( $aclid ); 72 $permission->objectid = $oid; 73 $permission->delete(); 74 Logger::debug('removing acl '.$aclid.' for object '.$oid); 75 } 76 77 // Vererbbare ACLs des aktuellen Ordners anwenden. 78 foreach( $newAclList as $newAcl ) 79 { 80 $newAcl->aclid = null; 81 $newAcl->objectid = $oid; 82 $newAcl->persist(); 83 Logger::debug('adding new acl '.$newAcl->aclid.' for object '.$oid); 84 } 85 } 86 87 $this->addNoticeFor($baseObject,Messages::SAVED); 88 } 89 }