*
* @return string|boolean The name of the default folder, false if there is no default.
*/
-// public function getForeignDefault($owner, $type);
-
+ public function getForeignDefault($owner, $type);
}
\ No newline at end of file
}
/**
+ * Get the default folder for a certain type from a different owner.
+ *
+ * @param string $owner The folder owner.
+ * @param string $type The type of the share/folder.
+ *
+ * @return string|boolean The name of the default folder, false if there is no default.
+ */
+ public function getForeignDefault($owner, $type)
+ {
+ $result = null;
+ $namespace = $this->_list->getNamespace();
+ foreach ($this->listFolderTypeAnnotations() as $folder => $annotation) {
+ if ($annotation->getType() == $type
+ && $annotation->isDefault()
+ && ($namespace->getOwner($folder) == $owner)) {
+ if ($result === null) {
+ $result = $folder;
+ } else {
+ throw new Horde_Kolab_Storage_Exception(
+ sprintf(
+ 'Both folders %s and %s are marked as default folder of type %s!',
+ $result,
+ $folder,
+ $type
+ )
+ );
+ }
+ }
+ }
+ if ($result === null) {
+ return false;
+ } else {
+ return $result;
+ }
+ }
+
+ /**
* Synchronize the query data with the information from the backend.
*
* @return NULL
}
/**
+ * Get the default folder for a certain type from a different owner.
+ *
+ * @param string $owner The folder owner.
+ * @param string $type The type of the share/folder.
+ *
+ * @return string|boolean The name of the default folder, false if there is no default.
+ */
+ public function getForeignDefault($owner, $type)
+ {
+ $defaults = $this->_list_cache->getQuery(self::DEFAULTS);
+ if (isset($defaults[$owner][$type])) {
+ return $defaults[$owner][$type];
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Synchronize the query data with the information from the backend.
*
* @return NULL
$this->_list_cache->setQuery(self::OWNERS, $owners);
$personal_defaults = array();
+ $defaults = array();
$namespace = $this->_list->getNamespace();
foreach ($this->listFolderTypeAnnotations() as $folder => $annotation) {
- if ($annotation->isDefault()
- && ($namespace->matchNamespace($folder)->getType()
- == Horde_Kolab_Storage_Folder_Namespace::PERSONAL)) {
+ if ($annotation->isDefault()) {
$type = $annotation->getType();
- if (!isset($personal_defaults[$type])) {
- $personal_defaults[$type] = $folder;
+ $owner = $namespace->getOwner($folder);
+ if (!isset($defaults[$owner][$type])) {
+ $defaults[$owner][$type] = $folder;
} else {
throw new Horde_Kolab_Storage_Exception(
sprintf(
'Both folders %s and %s are marked as default folder of type %s!',
- $personal_defaults[$type],
+ $defaults[$owner][$type],
$folder,
$type
)
);
}
+ if ($namespace->matchNamespace($folder)->getType()
+ == Horde_Kolab_Storage_Folder_Namespace::PERSONAL) {
+ if (!isset($personal_defaults[$type])) {
+ $personal_defaults[$type] = $folder;
+ } else {
+ throw new Horde_Kolab_Storage_Exception(
+ sprintf(
+ 'Both folders %s and %s are marked as default folder of type %s!',
+ $personal_defaults[$type],
+ $folder,
+ $type
+ )
+ );
+ }
+ }
}
}
+ $this->_list_cache->setQuery(self::DEFAULTS, $defaults);
$this->_list_cache->setQuery(
self::PERSONAL_DEFAULTS, $personal_defaults
);
'/shared/vendor/kolab/folder-type' => 'event.default',
)
),
+ 'user/test/Notes' => array(
+ 'annotations' => array(
+ '/shared/vendor/kolab/folder-type' => 'note.default',
+ )
+ ),
+ 'user/someone/Calendar' => array(
+ 'annotations' => array(
+ '/shared/vendor/kolab/folder-type' => 'event.default',
+ )
+ ),
+ 'user/someone/Events' => array(
+ 'annotations' => array(
+ '/shared/vendor/kolab/folder-type' => 'event',
+ )
+ ),
+ 'user/someone/Notes' => array(
+ 'annotations' => array(
+ '/shared/vendor/kolab/folder-type' => 'note.default',
+ )
+ ),
)
);
}
'/shared/vendor/kolab/folder-type' => 'event.default',
)
),
+ 'user/someone/Calendar' => array(
+ 'annotations' => array(
+ '/shared/vendor/kolab/folder-type' => 'event.default',
+ )
+ ),
+ 'user/someone/Events' => array(
+ 'annotations' => array(
+ '/shared/vendor/kolab/folder-type' => 'event.default',
+ )
+ ),
)
);
}
$query = $factory->createListQuery('Base', $this->getDoubleEventList($factory));
$query->getDefault('event');
}
+
+ public function testForeignDefaultReturn()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $factory->createListQuery('Base', $this->getEventList($factory));
+ $this->assertType(
+ 'string',
+ $query->getForeignDefault('someone@example.com', 'event')
+ );
+ }
+
+ public function testForeignDefaultCalendar()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $factory->createListQuery('Base', $this->getEventList($factory));
+ $this->assertEquals(
+ 'user/someone/Calendar',
+ $query->getForeignDefault('someone@example.com', 'event')
+ );
+ }
+
+ public function testForeignDefaultNotes()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $factory->createListQuery('Base', $this->getEventList($factory));
+ $this->assertEquals(
+ 'user/someone/Notes',
+ $query->getForeignDefault('someone@example.com', 'note')
+ );
+ }
+
+ public function testMissingForeignDefault()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $factory->createListQuery('Base', $this->getNullList($factory));
+ $this->assertFalse(
+ $query->getForeignDefault('someone@example.com', 'contact')
+ );
+ }
+
+ public function testIdentifyForeignDefault()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $factory->createListQuery('Base', $this->getEventList($factory));
+ $this->assertEquals(
+ 'user/someone/Calendar',
+ $query->getForeignDefault('someone@example.com', 'event')
+ );
+ }
+
+ /**
+ * @expectedException Horde_Kolab_Storage_Exception
+ */
+ public function testBailOnDoubleForeignDefault()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $factory->createListQuery('Base', $this->getDoubleEventList($factory));
+ $query->getForeignDefault('someone@example.com', 'event');
+ }
}
$query = $this->getCachedQueryForList($this->getDoubleEventList($factory), $factory);
$query->getDefault('event');
}
+
+ public function testForeignDefaultReturn()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $this->getCachedQueryForList($this->getEventList($factory), $factory);
+ $this->assertType(
+ 'string',
+ $query->getForeignDefault('someone@example.com', 'event')
+ );
+ }
+
+ public function testForeignDefaultCalendar()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $this->getCachedQueryForList($this->getEventList($factory), $factory);
+ $this->assertEquals(
+ 'user/someone/Calendar',
+ $query->getForeignDefault('someone@example.com', 'event')
+ );
+ }
+
+ public function testForeignDefaultNotes()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $this->getCachedQueryForList($this->getEventList($factory), $factory);
+ $this->assertEquals(
+ 'user/someone/Notes',
+ $query->getForeignDefault('someone@example.com', 'note')
+ );
+ }
+
+ public function testMissingForeignDefault()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $this->getCachedQueryForList($this->getNullList($factory), $factory);
+ $this->assertFalse(
+ $query->getForeignDefault('someone@example.com', 'contact')
+ );
+ }
+
+ public function testIdentifyForeignDefault()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $this->getCachedQueryForList($this->getEventList($factory), $factory);
+ $this->assertEquals(
+ 'user/someone/Calendar',
+ $query->getForeignDefault('someone@example.com', 'event')
+ );
+ }
+
+ /**
+ * @expectedException Horde_Kolab_Storage_Exception
+ */
+ public function testBailOnDoubleForeignDefault()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $query = $this->getCachedQueryForList($this->getDoubleEventList($factory), $factory);
+ $query->getForeignDefault('someone@example.com', 'event');
+ }
}