Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
5a646477
Commit
5a646477
authored
Dec 18, 2013
by
Robin Appelman
Browse files
Fetch all appconfig values for an app at once and cache the results
parent
930a46e8
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib/private/appconfig.php
View file @
5a646477
...
...
@@ -37,7 +37,10 @@
* This class provides an easy way for apps to store config values in the
* database.
*/
class
OC_Appconfig
{
class
OC_Appconfig
{
private
static
$cache
=
array
();
/**
* @brief Get all apps using the config
* @return array with app ids
...
...
@@ -47,11 +50,11 @@ class OC_Appconfig{
*/
public
static
function
getApps
()
{
// No magic in here!
$query
=
OC_DB
::
prepare
(
'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig`'
);
$query
=
OC_DB
::
prepare
(
'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig`'
);
$result
=
$query
->
execute
();
$apps
=
array
();
while
(
$row
=
$result
->
fetchRow
())
{
while
(
$row
=
$result
->
fetchRow
())
{
$apps
[]
=
$row
[
"appid"
];
}
...
...
@@ -66,19 +69,32 @@ class OC_Appconfig{
* This function gets all keys of an app. Please note that the values are
* not returned.
*/
public
static
function
getKeys
(
$app
)
{
public
static
function
getKeys
(
$app
)
{
// No magic in here as well
$query
=
OC_DB
::
prepare
(
'SELECT `configkey` FROM `*PREFIX*appconfig` WHERE `appid` = ?'
);
$result
=
$query
->
execute
(
array
(
$app
));
$query
=
OC_DB
::
prepare
(
'SELECT `configkey` FROM `*PREFIX*appconfig` WHERE `appid` = ?'
);
$result
=
$query
->
execute
(
array
(
$app
));
$keys
=
array
();
while
(
$row
=
$result
->
fetchRow
())
{
while
(
$row
=
$result
->
fetchRow
())
{
$keys
[]
=
$row
[
"configkey"
];
}
return
$keys
;
}
private
static
function
getAppValues
(
$app
)
{
if
(
!
isset
(
self
::
$cache
[
$app
]))
{
self
::
$cache
[
$app
]
=
array
();
}
$query
=
OC_DB
::
prepare
(
'SELECT `configvalue`, `configkey` FROM `*PREFIX*appconfig`'
.
' WHERE `appid` = ?'
);
$result
=
$query
->
execute
(
array
(
$app
));
while
(
$row
=
$result
->
fetchRow
())
{
self
::
$cache
[
$app
][
$row
[
'configkey'
]]
=
$row
[
'configvalue'
];
}
return
self
::
$cache
[
$app
];
}
/**
* @brief Gets the config value
* @param string $app app
...
...
@@ -89,15 +105,18 @@ class OC_Appconfig{
* This function gets a value from the appconfig table. If the key does
* not exist the default value will be returned
*/
public
static
function
getValue
(
$app
,
$key
,
$default
=
null
)
{
// At least some magic in here :-)
$query
=
OC_DB
::
prepare
(
'SELECT `configvalue` FROM `*PREFIX*appconfig`'
.
' WHERE `appid` = ? AND `configkey` = ?'
);
$result
=
$query
->
execute
(
array
(
$app
,
$key
));
$row
=
$result
->
fetchRow
();
if
(
$row
)
{
return
$row
[
"configvalue"
];
}
else
{
public
static
function
getValue
(
$app
,
$key
,
$default
=
null
)
{
if
(
!
isset
(
self
::
$cache
[
$app
]))
{
self
::
$cache
[
$app
]
=
array
();
}
if
(
isset
(
self
::
$cache
[
$app
][
$key
]))
{
return
self
::
$cache
[
$app
][
$key
];
}
$values
=
self
::
getAppValues
(
$app
);
if
(
isset
(
$values
[
$key
]))
{
return
$values
[
$key
];
}
else
{
self
::
$cache
[
$app
][
$key
]
=
$default
;
return
$default
;
}
}
...
...
@@ -109,8 +128,11 @@ class OC_Appconfig{
* @return bool
*/
public
static
function
hasKey
(
$app
,
$key
)
{
$exists
=
self
::
getKeys
(
$app
);
return
in_array
(
$key
,
$exists
);
if
(
isset
(
self
::
$cache
[
$app
])
and
isset
(
self
::
$cache
[
$app
][
$key
]))
{
return
true
;
}
$exists
=
self
::
getKeys
(
$app
);
return
in_array
(
$key
,
$exists
);
}
/**
...
...
@@ -122,17 +144,16 @@ class OC_Appconfig{
*
* Sets a value. If the key did not exist before it will be created.
*/
public
static
function
setValue
(
$app
,
$key
,
$value
)
{
public
static
function
setValue
(
$app
,
$key
,
$value
)
{
// Does the key exist? yes: update. No: insert
if
(
!
self
::
hasKey
(
$app
,
$key
))
{
$query
=
OC_DB
::
prepare
(
'INSERT INTO `*PREFIX*appconfig` ( `appid`, `configkey`, `configvalue` )'
.
' VALUES( ?, ?, ? )'
);
$query
->
execute
(
array
(
$app
,
$key
,
$value
));
}
else
{
$query
=
OC_DB
::
prepare
(
'UPDATE `*PREFIX*appconfig` SET `configvalue` = ?'
.
' WHERE `appid` = ? AND `configkey` = ?'
);
$query
->
execute
(
array
(
$value
,
$app
,
$key
));
if
(
!
self
::
hasKey
(
$app
,
$key
))
{
$query
=
OC_DB
::
prepare
(
'INSERT INTO `*PREFIX*appconfig` ( `appid`, `configkey`, `configvalue` )'
.
' VALUES( ?, ?, ? )'
);
$query
->
execute
(
array
(
$app
,
$key
,
$value
));
}
else
{
$query
=
OC_DB
::
prepare
(
'UPDATE `*PREFIX*appconfig` SET `configvalue` = ?'
.
' WHERE `appid` = ? AND `configkey` = ?'
);
$query
->
execute
(
array
(
$value
,
$app
,
$key
));
}
// TODO where should this be documented?
\
OC_Hook
::
emit
(
'OC_Appconfig'
,
'post_set_value'
,
array
(
...
...
@@ -140,6 +161,10 @@ class OC_Appconfig{
'key'
=>
$key
,
'value'
=>
$value
));
if
(
!
isset
(
self
::
$cache
[
$app
]))
{
self
::
$cache
[
$app
]
=
array
();
}
self
::
$cache
[
$app
][
$key
]
=
$value
;
}
/**
...
...
@@ -150,10 +175,13 @@ class OC_Appconfig{
*
* Deletes a key.
*/
public
static
function
deleteKey
(
$app
,
$key
)
{
public
static
function
deleteKey
(
$app
,
$key
)
{
// Boring!
$query
=
OC_DB
::
prepare
(
'DELETE FROM `*PREFIX*appconfig` WHERE `appid` = ? AND `configkey` = ?'
);
$query
->
execute
(
array
(
$app
,
$key
));
$query
=
OC_DB
::
prepare
(
'DELETE FROM `*PREFIX*appconfig` WHERE `appid` = ? AND `configkey` = ?'
);
$query
->
execute
(
array
(
$app
,
$key
));
if
(
isset
(
self
::
$cache
[
$app
])
and
isset
(
self
::
$cache
[
$app
][
$key
]))
{
unset
(
self
::
$cache
[
$app
][
$key
]);
}
return
true
;
}
...
...
@@ -165,44 +193,46 @@ class OC_Appconfig{
*
* Removes all keys in appconfig belonging to the app.
*/
public
static
function
deleteApp
(
$app
)
{
public
static
function
deleteApp
(
$app
)
{
// Nothing special
$query
=
OC_DB
::
prepare
(
'DELETE FROM `*PREFIX*appconfig` WHERE `appid` = ?'
);
$query
->
execute
(
array
(
$app
));
$query
=
OC_DB
::
prepare
(
'DELETE FROM `*PREFIX*appconfig` WHERE `appid` = ?'
);
$query
->
execute
(
array
(
$app
));
self
::
$cache
[
$app
]
=
array
();
return
true
;
}
/**
* get multiply values, either the app or key can be used as wildcard by setting it to false
*
* @param app
* @param key
* @return array
*/
public
static
function
getValues
(
$app
,
$key
)
{
if
(
$app
!==
false
and
$key
!==
false
)
{
if
(
$app
!==
false
and
$key
!==
false
)
{
return
false
;
}
$fields
=
'`configvalue`'
;
$where
=
'WHERE'
;
$params
=
array
();
if
(
$app
!==
false
)
{
$fields
.
=
', `configkey`'
;
$where
.
=
' `appid` = ?'
;
$params
[]
=
$app
;
$key
=
'configkey'
;
}
else
{
$fields
.
=
', `appid`'
;
$where
.
=
' `configkey` = ?'
;
$params
[]
=
$key
;
$key
=
'appid'
;
$fields
=
'`configvalue`'
;
$where
=
'WHERE'
;
$params
=
array
();
if
(
$app
!==
false
)
{
$fields
.
=
', `configkey`'
;
$where
.
=
' `appid` = ?'
;
$params
[]
=
$app
;
$key
=
'configkey'
;
}
else
{
$fields
.
=
', `appid`'
;
$where
.
=
' `configkey` = ?'
;
$params
[]
=
$key
;
$key
=
'appid'
;
}
$queryString
=
'SELECT '
.
$fields
.
' FROM `*PREFIX*appconfig` '
.
$where
;
$query
=
OC_DB
::
prepare
(
$queryString
);
$result
=
$query
->
execute
(
$params
);
$values
=
array
();
while
(
$row
=
$result
->
fetchRow
())
{
$values
[
$row
[
$key
]]
=
$row
[
'configvalue'
];
$queryString
=
'SELECT '
.
$fields
.
' FROM `*PREFIX*appconfig` '
.
$where
;
$query
=
OC_DB
::
prepare
(
$queryString
);
$result
=
$query
->
execute
(
$params
);
$values
=
array
();
while
(
$row
=
$result
->
fetchRow
())
{
$values
[
$row
[
$key
]]
=
$row
[
'configvalue'
];
}
return
$values
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment