diff --git a/framework/Share/lib/Horde/Share/Base.php b/framework/Share/lib/Horde/Share/Base.php
index 13d43d5..8a7e3fd 100644
--- a/framework/Share/lib/Horde/Share/Base.php
+++ b/framework/Share/lib/Horde/Share/Base.php
@@ -265,9 +265,9 @@ abstract class Horde_Share_Base
if (count($missing_ids)) {
$shares = $this->_getShares($missing_ids);
- foreach (array_keys($shares) as $key) {
- $this->_cache[$key] = $shares[$key];
- $this->_shareMap[$shares[$key]->getId()] = $key;
+ foreach ($shares as $name => $share) {
+ $this->_cache[$name] = $share;
+ $this->_shareMap[$share->getId()] = $name;
}
}
@@ -275,7 +275,7 @@ abstract class Horde_Share_Base
$all_shares[$this->_shareMap[$cid]] = $this->_cache[$this->_shareMap[$cid]];
}
- return $all_shares;
+ return new Horde_Share_List($all_shares);
}
/**
@@ -353,7 +353,7 @@ abstract class Horde_Share_Base
$shares = $this->getShares($shares);
if (is_null($params['sort_by'])) {
$this->_sortList = $shares;
- uasort($shares, array($this, '_sortShares'));
+ uasort($shares->toArray(), array($this, '_sortShares'));
$this->_sortList = null;
}
diff --git a/framework/Share/lib/Horde/Share/List.php b/framework/Share/lib/Horde/Share/List.php
new file mode 100644
index 0000000..fbbc211
--- /dev/null
+++ b/framework/Share/lib/Horde/Share/List.php
@@ -0,0 +1,40 @@
+_data = $shareList;
+ }
+
+ public function offsetExists ($offset)
+ {
+ return isset($this->_data[$offset]);
+ }
+
+ public function offsetGet ($offset)
+ {
+ return $this->_data[$offset];
+ }
+
+ public function offsetSet ($offset, $value)
+ {
+ $this->_data[$offset] = $value;
+ }
+
+ public function offsetUnset ($offset)
+ {
+ unset($this->_data[$offset]);
+ }
+
+ public function toArray()
+ {
+ return $this->_data;
+ }
+
+}
diff --git a/framework/Share/lib/Horde/Share/List/Sql.php b/framework/Share/lib/Horde/Share/List/Sql.php
new file mode 100644
index 0000000..ef38a93
--- /dev/null
+++ b/framework/Share/lib/Horde/Share/List/Sql.php
@@ -0,0 +1,97 @@
+_pdoStatement = $pdoStatement;
+ $this->_shareDriver = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Share')->create();
+ }
+
+ public function next()
+ {
+ if (!($this->_current = $this->_pdoStatement->fetch())) {
+ $this->_current = null;
+ }
+ }
+
+ public function current()
+ {
+ if (is_null($this->_current)) {
+ $this->next();
+ }
+ return $this->_shareDriver->getShareById($this->_current['share_id']);
+ }
+
+ public function key() {
+ return $this->_current['share_name'];
+ }
+
+ public function valid()
+ {
+ return !is_null($this->_current);
+ }
+
+ public function rewind()
+ {
+ $this->_pdoStatement->closeCursor();
+ $this->_pdoStatement->execute();
+ $this->_current = null;
+ //Fetch the first result so the valid() method will succeed
+ $this->next();
+ }
+
+ public function offsetExists($offset)
+ {
+ $this->_loadFullSet();
+ return parent::offsetExists($offset);
+ }
+
+ public function offsetGet($offset)
+ {
+ $this->_loadFullSet();
+ return parent::offsetGet($offset);
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->_loadFullSet();
+ return parent::offsetSet($offset, $value);
+ }
+
+ public function offsetUnset($offset)
+ {
+ $this->_loadFullSet();
+ return parent::offsetUnset($offset);
+ }
+
+ public function toArray()
+ {
+ $this->_loadFullSet();
+ return parent::toArray();
+ }
+
+ protected function _loadFullSet()
+ {
+ if (empty($this->_data)) {
+ $this->rewind();
+ while ($this->valid()) {
+ $this->_data[$this->key()] = $this->current();
+ $this->next();
+ }
+ }
+ }
+}
diff --git a/framework/Share/lib/Horde/Share/Sql.php b/framework/Share/lib/Horde/Share/Sql.php
index 4856bf0..ae65f6e 100644
--- a/framework/Share/lib/Horde/Share/Sql.php
+++ b/framework/Share/lib/Horde/Share/Sql.php
@@ -254,18 +254,11 @@ class Horde_Share_Sql extends Horde_Share_Base
protected function _getShares(array $ids)
{
try {
- $rows = $this->_db->selectAll('SELECT * FROM ' . $this->_table . ' WHERE share_id IN (' . str_repeat('?, ', count($ids) - 1) . '?)', $ids);
+ $pdoStatement = $this->_db->execute('SELECT * FROM ' . $this->_table . ' WHERE share_id IN (' . str_repeat('?, ', count($ids) - 1) . '?)', $ids);
+ return new Horde_Share_List_Sql($pdoStatement);
} catch (Horde_Db_Exception $e) {
throw new Horde_Share_Exception($e->getMessage());
}
-
- $sharelist = array();
- foreach ($rows as $share) {
- $this->_loadPermissions($share);
- $sharelist[$share['share_name']] = $this->_createObject($share);
- }
-
- return $sharelist;
}
/**
@@ -290,49 +283,12 @@ class Horde_Share_Sql extends Horde_Share_Base
*/
protected function _listAllShares()
{
- $shares = array();
-
- try {
- $rows = $this->_db->selectAll('SELECT * FROM ' . $this->_table . ' ORDER BY share_name ASC');
- } catch (Horde_Db_Exception $e) {
- throw new Horde_Share_Exception($e->getMessage());
- }
-
- foreach ($rows as $share) {
- $shares[(int)$share['share_id']] = $this->_fromDriverCharset($share);
- }
-
- // Get users permissions
- try {
- $rows = $this->_db->selectAll('SELECT * FROM ' . $this->_table . '_users');
- } catch (Horde_Db_Exception $e) {
- throw new Horde_Share_Exception($e);
- }
- foreach ($rows as $row) {
- $shares[$row['share_id']]['perm']['users'][$row['user_uid']] = $this->_buildPermsFromRow($row);
- }
-
- // Get groups permissions
try {
- $rows = $this->_db->selectAll('SELECT * FROM ' . $this->_table . '_groups');
+ $pdoStatement = $this->_db->execute('SELECT * FROM ' . $this->_table . ' ORDER BY share_name ASC LIMIT 2');
+ return new Horde_Share_List_Sql($pdoStatement);
} catch (Horde_Db_Exception $e) {
throw new Horde_Share_Exception($e->getMessage());
}
- foreach ($rows as $row) {
- $shares[$row['share_id']]['perm']['groups'][$row['group_uid']] = $this->_buildPermsFromRow($row);
- }
-
- $sharelist = array();
- foreach ($shares as $data) {
- $this->_getSharePerms($data);
- if (!empty($data['share_name'])) {
- $sharelist[$data['share_name']] = $this->_createObject($data);
- } else {
- $sharelist[] = $this->_createObject($data);
- }
- }
-
- return $sharelist;
}
/**
@@ -387,60 +343,14 @@ class Horde_Share_Sql extends Horde_Share_Base
. (($params['direction'] == 0) ? ' ASC' : ' DESC');
$query = $this->_db->addLimitOffset($query, array('limit' => $params['count'], 'offset' => $params['from']));
+
try {
- $rows = $this->_db->selectAll($query);
+ $pdoStatement = $this->_db->execute($query);
+ $sharelist = new Horde_Share_List_Sql($pdoStatement);
} catch (Horde_Db_Exception $e) {
throw new Horde_Share_Exception($e->getMessage());
}
- $users = array();
- $groups = array();
- foreach ($rows as $share) {
- $shares[(int)$share['share_id']] = $this->_fromDriverCharset($share);
- if ($this->_hasUsers($share)) {
- $users[] = (int)$share['share_id'];
- }
- if ($this->_hasGroups($share)) {
- $groups[] = (int)$share['share_id'];
- }
- }
-
- // Get users permissions
- if (!empty($users)) {
- $query = 'SELECT share_id, user_uid, perm FROM ' . $this->_table
- . '_users WHERE share_id IN (' . str_repeat('?,', count($users) - 1) . '?)';
-
- try {
- $rows = $this->_db->selectAll($query, $users);
- } catch (Horde_Db_Exception $e) {
- throw new Horde_Share_Exception($e->getMessage());
- }
- foreach ($rows as $share) {
- $shares[$share['share_id']]['perm']['users'][$share['user_uid']] = (int)$share['perm'];
- }
- }
-
- // Get groups permissions
- if (!empty($groups)) {
- $query = 'SELECT share_id, group_uid, perm FROM ' . $this->_table
- . '_groups WHERE share_id IN (' . str_repeat('?,', count($groups) - 1) . '?)';
- try {
- $rows = $this->_db->selectAll($query, $groups);
- } catch (Horde_Db_Exception $e) {
- throw new Horde_Share_Exception($e->getMessage());
- }
- foreach ($rows as $share) {
- $shares[$share['share_id']]['perm']['groups'][$share['group_uid']] = (int)$share['perm'];
- }
- }
-
- $sharelist = array();
- foreach ($shares as $id => $data) {
- $this->_getSharePerms($data);
- $sharelist[$data['share_name']] = $this->_createObject($data);
- }
- unset($shares);
-
// Run the results through the callback, if configured.
if (!empty($this->_callbacks['list'])) {
$sharelist = $this->runCallback('list', array($userid, $sharelist, $params));
@@ -561,21 +471,12 @@ class Horde_Share_Sql extends Horde_Share_Base
*/
public function listSystemShares()
{
- $query = 'SELECT * FROM ' . $this->_table . ' WHERE share_owner IS NULL';
try {
- $rows = $this->_db->selectAll($query);
+ $pdoStatement = $this->_db->execute('SELECT * FROM ' . $this->_table . ' WHERE share_owner =\'goncalo@identidades.eu\'');
+ return new Horde_Share_List_Sql($pdoStatement);
} catch (Horde_Db_Exception $e) {
- throw new Horde_Share_Exception($e->getMessage());;
- }
-
- $sharelist = array();
- foreach ($rows as $share) {
- $data = $this->_fromDriverCharset($share);
- $this->_getSharePerms($data);
- $sharelist[$data['share_name']] = $this->_createObject($data);
+ throw new Horde_Share_Exception($e->getMessage());
}
-
- return $sharelist;
}
/**
diff --git a/framework/Share/lib/Horde/Share/Sqlng.php b/framework/Share/lib/Horde/Share/Sqlng.php
index 268b945..abf090d 100644
--- a/framework/Share/lib/Horde/Share/Sqlng.php
+++ b/framework/Share/lib/Horde/Share/Sqlng.php
@@ -117,25 +117,19 @@ class Horde_Share_Sqlng extends Horde_Share_Sql
$query = $this->_db->addLimitOffset($query, array('limit' => $params['count'], 'offset' => $params['from']));
- try {
- $rows = $this->_db->selectAll($query);
+ try {
+ $pdoStatement = $this->_db->execute($query);
+ $sharelist = new Horde_Share_List_Sql($pdoStatement);
} catch (Horde_Db_Exception $e) {
- throw new Horde_Share_Exception($e);
- }
-
- $sharelist = array();
- foreach ($rows as $share) {
- $share = $this->_fromDriverCharset($share);
- $this->_loadPermissions($share);
- $sharelist[$share['share_name']] = $this->_createObject($share);
+ throw new Horde_Share_Exception($e->getMessage());
}
// Run the results through the callback, if configured.
if (!empty($this->_callbacks['list'])) {
$sharelist = $this->runCallback('list', array($userid, $sharelist, $params));
}
- $this->_listcache[$key] = $sharelist;
+ $this->_listcache[$key] = $sharelist;
return $this->_listcache[$key];
}
diff --git a/framework/Share/package.xml b/framework/Share/package.xml
index ce513ab..7b969a0 100644
--- a/framework/Share/package.xml
+++ b/framework/Share/package.xml
@@ -35,7 +35,7 @@ owns or has access to.
LGPL-2.1
-*
+*
@@ -49,6 +49,9 @@ owns or has access to.
+
+
+
@@ -62,6 +65,7 @@ owns or has access to.
+
@@ -466,10 +470,12 @@ owns or has access to.
+
+
@@ -825,7 +831,7 @@ Initial release as a PEAR package
2011-11-08
LGPL-2.1
-*
+*
diff --git a/kronolith/lib/Kronolith.php b/kronolith/lib/Kronolith.php
index 51a76b1..077c65a 100644
--- a/kronolith/lib/Kronolith.php
+++ b/kronolith/lib/Kronolith.php
@@ -1560,7 +1560,7 @@ class Kronolith
if (isset($calendars[$default_share])) {
$calendar = $calendars[$default_share];
unset($calendars[$default_share]);
- $calendars = array($default_share => $calendar) + $calendars;
+ $calendars = array_merge(array($default_share => $calendar), $calendars->toArray());
}
return $calendars;