/usr/share/php/Horde/Share/Object/Kolab.php is in php-horde-share 2.0.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | <?php
/**
* Extension of the Horde_Share_Object class for handling Kolab share
* information.
*
* PHP version 5
*
* @category Horde
* @package Share
* @author Gunnar Wrobel <wrobel@pardus.de>
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @link http://pear.horde.org/index.php?package=Share
*/
/**
* Extension of the Horde_Share_Object class for handling Kolab share
* information.
*
* Copyright 2004-2013 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Horde
* @package Share
* @author Gunnar Wrobel <wrobel@pardus.de>
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @link http://pear.horde.org/index.php?package=Share
*/
class Horde_Share_Object_Kolab
extends Horde_Share_Object
implements Serializable, Horde_Perms_Permission_Kolab_Storage
{
/**
* Serializable version.
*/
const VERSION = 2;
/**
* The old share id.
*
* @var string
*/
private $_old_id;
/**
* The share id.
*
* @var string
*/
private $_id;
/**
* The Horde_Group driver
*
* @var Horde_Group_Base
*/
private $_groups;
/**
* The share attributes.
*
* @var array
*/
protected $_data;
/**
* The permission cache holds any permission changes that will be executed
* on saving.
*
* @var Horde_Perm_Permission_Kolab
*/
private $_permission;
/**
* Constructor.
*
* @param string $id The share id.
* @param Horde_Group_Base $groups The Horde_Group driver
* @param array $data The share data.
*/
public function __construct($id, Horde_Group_Base $groups,
array $data = array())
{
$this->_old_id = $id;
$this->_id = $id;
$this->_groups = $groups;
$this->_data = $data;
}
/**
* Serialize this object.
*
* @return string The serialized data.
*/
public function serialize()
{
return serialize(array(
self::VERSION,
$this->_id,
$this->_data,
$this->_shareCallback
));
}
/**
* Unserialize object.
*
* @param <type> $data
*/
public function unserialize($data)
{
$data = @unserialize($data);
if (!is_array($data) ||
!isset($data[0]) ||
($data[0] != self::VERSION)) {
throw new Exception('Cache version change');
}
$this->_id = $data[1];
$this->_data = $data[2];
if (empty($data[3])) {
throw new Exception('Missing callback for unserializing Horde_Share_Object');
}
$this->_shareCallback = $data[3];
$this->setShareOb(call_user_func($this->_shareCallback));
}
/**
* Returns the ID of this share.
*
* @return string The share's ID.
*/
public function getId()
{
if ($this->_id === null) {
throw new Horde_Share_Exception(
'A new Kolab share requires a set("name", ...) and set("owner", ...) call before the ID is available.'
);
}
return $this->_id;
}
/**
* Returns the permission ID of this share.
*
* @return string The share's permission ID.
*/
public function getPermissionId()
{
if ($this->_id === null) {
/* We only get here if permissions are being set before the name
* has been set. For the Kolab permission instance it should not
* matter if the name is a random string. */
return md5(pack('I', mt_rand()));
}
return $this->_id;
}
/**
* Returns the name of this share.
*
* @return string The share's name.
*/
public function getName()
{
if (isset($this->_data['share_name'])) {
return $this->_data['share_name'];
} else {
return $this->getId();
}
}
/**
* Returns the owner of this share.
*
* @return string The share's owner.
*/
public function getOwner()
{
return $this->get('owner');
}
/**
* Returns an attribute value from this object.
*
* @param string $attribute The attribute to return.
*
* @return mixed The value for $attribute.
*/
public function get($attribute)
{
if (isset($this->_data[$attribute])) {
return $this->_data[$attribute];
}
}
/**
* Sets an attribute value in this object.
*
* @param string $attribute The attribute to set.
* @param mixed $value The value for $attribute.
* @param boolean $update Update *only* this change immediately.
*
* @return NULL
*/
public function set($attribute, $value, $update = false)
{
if (in_array($attribute, array('owner', 'name', 'prefix'))) {
$owner = $this->get('owner');
$name = $this->get('name');
$prefix = $this->get('prefix');
switch ($attribute) {
case 'name':
$name = $value;
break;
case 'owner':
$owner = $value;
break;
case 'prefix':
$prefix = $value;
break;
}
$subpath = $name;
$parent = $this->getParent();
if ($parent !== null) {
$subpath = $parent->get('subpath') . $parent->get('delimiter') .
$subpath;
}
$this->_data['folder'] = $this->getShareOb()->constructFolderName(
$owner, $subpath, $prefix
);
list($this->_data['prefix'], $this->_data['delimiter'], $this->_data['subpath']) = $this->getShareOb()->getFolderNameElements(
$this->_data['folder']
);
$this->_id = $this->getShareOb()->constructId(
$owner, $subpath, $this->_data['prefix']
);
}
$this->_data[$attribute] = $value;
//@TODO: Not sure how to update a single attribute in kolab.
if ($update) {
$this->_save();
}
}
/**
* Return a count of the number of children this share has
*
* @param string $user The user to use for checking perms
* @param integer $perm A Horde_Perms::* constant
* @param boolean $allLevels Count grandchildren or just children
*
* @return integer The number of child shares
*/
public function countChildren($user, $perm = Horde_Perms::SHOW, $allLevels = true)
{
return $this->getShareOb()->countShares($user, $perm, null, $this, $allLevels);
}
/**
* Get all children of this share.
*
* @param string $user The user to use for checking perms
* @param integer $perm Horde_Perms::* constant. If NULL will return
* all shares regardless of permissions.
* @param boolean $allLevels Return all levels.
*
* @return array An array of Horde_Share_Object objects
*/
public function getChildren($user, $perm = Horde_Perms::SHOW, $allLevels = true)
{
return $this->getShareOb()->listShares(
$user, array('perm' => $perm,
'direction' => 1,
'parent' => $this,
'all_levels' => $allLevels));
}
/**
* Returns a child's direct parent.
*
* @return Horde_Share_Object|NULL The direct parent Horde_Share_Object or
* NULL in case the share has no parent.
*/
public function getParent()
{
$parent_id = $this->get('parent');
if (!empty($parent_id)) {
try {
return $this->getShareOb()->getShareById($parent_id);
} catch (Horde_Exception_NotFound $e) {
return null;
}
}
return null;
}
/**
* Get all of this share's parents.
*
* @return array() An array of Horde_Share_Objects.
*/
public function getParents()
{
$parents = array();
$share = $this->getParent();
while ($share instanceof Horde_Share_Object) {
$parents[] = $share;
$share = $share->getParent();
}
return array_reverse($parents);
}
/**
* Set the parent object for this share.
*
* @param mixed $parent A Horde_Share object or share id for the parent.
*
* @return NULL
*/
public function setParent($parent)
{
if (!$parent instanceof Horde_Share_Object) {
$parent = $this->getShareOb()->getShareById($parent);
}
$this->_data['parent'] = $parent->getId();
$this->_data['prefix'] = $parent->get('prefix');
$this->set('owner', $parent->get('owner'));
}
/**
* Saves the current attribute values.
*/
protected function _save()
{
if (!isset($this->_data['share_name'])) {
$this->_data['share_name'] = $this->getName();
}
$this->getShareOb()->save($this->getId(), $this->_old_id, $this->_data);
$this->_old_id = $this->_id;
$this->getPermission()->save();
}
/**
* Checks to see if a user has a given permission.
*
* @param string $userid The userid of the user.
* @param integer $permission A Horde_Perms::* constant to test for.
* @param string $creator The creator of the shared object.
*
* @return boolean Whether or not $userid has $permission.
*/
public function hasPermission($userid, $permission, $creator = null)
{
$owner = $this->getOwner();
if ($userid !== false && $userid == $owner) {
return (bool)($this->getPermission()->getOwnerPermissions() & $permission);
}
if (empty($creator)) {
$creator = $owner;
}
return $this->getShareOb()->getPermsObject()->hasPermission($this->getPermission(), $userid, $permission, $creator);
}
/**
* Returns the permissions from this storage object.
*
* @return Horde_Perms_Permission_Kolab The permissions on the share.
*/
public function getPermission()
{
if ($this->_permission === null) {
$this->_permission = new Horde_Perms_Permission_Kolab($this, $this->_groups);
}
return $this->_permission;
}
/**
* Sets the permissions on the share.
*
* @param Horde_Perms_Permission_Kolab $perms Permission object to folder
* on the object.
* @param boolean $update Save the updated information?
*
* @return NULL
*/
public function setPermission($perms, $update = true)
{
if (!$perms instanceOf Horde_Perms_Permission_Kolab) {
$this->getPermission()->setData($perms->getData());
} else {
$this->_permission = $perms;
}
if ($update) {
$this->save();
}
}
/**
* Retrieve the Kolab specific access rights for this share.
*
* @return An array of rights.
*/
public function getAcl()
{
if ($this->_old_id === null) {
// The share has not been created yet.
return array(
$this->get('owner') => Horde_Perms_Permission_Kolab::ALL
);
}
return $this->getShareOb()->getAcl($this->_id);
}
/**
* Set the Kolab specific access rights for this share.
*
* @param string $user The user to set the ACL for.
* @param string $acl The ACL.
*
* @return NULL
*/
public function setAcl($user, $acl)
{
return $this->getShareOb()->setAcl($this->_id, $user, $acl);
}
/**
* Delete Kolab specific access rights for this share.
*
* @param string $user The user to delete the ACL for.
*
* @return NULL
*/
public function deleteAcl($user)
{
return $this->getShareOb()->deleteAcl($this->_id, $user);
}
}
|