/** * Set file private or public. */ public function setFilePrivate($iFileId, $isPrivate = true) { $aFile = $this->_oDb->getFileById($iFileId); $sFileLocation = $this->getObjectBaseDir($aFile['private']) . $aFile['path']; if (($aACP = $this->_s3->getAccessControlPolicy($this->_sBucket, $sFileLocation)) === false) { $this->setErrorCode(BX_DOL_STORAGE_ERR_ENGINE_GET); return false; } if (!is_array($aACP['acl']) || !$aACP['acl']) { $this->setErrorCode(BX_DOL_STORAGE_ERR_ENGINE_GET); return false; } // check current permissions $aNewACP = $aACP; unset($aNewACP['acl']); $aNewACP['acl'] = array(); $aGroupPublic = false; $aGroupPrivate = false; foreach ($aACP['acl'] as $r) { if ('Group' == $r['type']) { if (isset($r['uri']) && $r['uri'] == 'http://acs.amazonaws.com/groups/global/AllUsers') { $aGroupPublic = $r; } elseif (isset($r['uri']) && $r['uri'] == 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers') { $aGroupPrivate = $r; } else { $aNewACP['acl'][] = $r; } } else { $aNewACP['acl'][] = $r; } } // determine permissions changing $aGroupAdd = false; if ($isPrivate && (!$aGroupPrivate || $aGroupPublic)) { // make private $aGroupAdd = array('type' => 'Group', 'uri' => 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers', 'permission' => 'READ'); } elseif (!$isPrivate && ($aGroupPrivate || !$aGroupPublic)) { // make public $aGroupAdd = array('type' => 'Group', 'uri' => 'http://acs.amazonaws.com/groups/global/AllUsers', 'permission' => 'READ'); } // change permission if necessary if ($aGroupAdd) { $aNewACP['acl'][] = $aGroupAdd; if (!$this->_s3->setAccessControlPolicy($this->_sBucket, $sFileLocation, $aNewACP)) { $this->setErrorCode(BX_DOL_STORAGE_ERR_ENGINE_GET); return false; } } return parent::setFilePrivate($iFileId, $isPrivate); }