openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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 }