Add timestamp and associated logic to pconfig
This commit is contained in:
parent
c7c35b8b5a
commit
3ab0ef1902
@ -57,6 +57,7 @@ class PConfig {
|
|||||||
\App::$config[$uid][$c]['config_loaded'] = true;
|
\App::$config[$uid][$c]['config_loaded'] = true;
|
||||||
}
|
}
|
||||||
\App::$config[$uid][$c][$k] = $rr['v'];
|
\App::$config[$uid][$c][$k] = $rr['v'];
|
||||||
|
\App::$config[$uid][$c]['pcfgud:'.$k] = $rr['updated'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,7 +114,7 @@ class PConfig {
|
|||||||
* The value to store
|
* The value to store
|
||||||
* @return mixed Stored $value or false
|
* @return mixed Stored $value or false
|
||||||
*/
|
*/
|
||||||
static public function Set($uid, $family, $key, $value) {
|
static public function Set($uid, $family, $key, $value, $updated=NULL) {
|
||||||
|
|
||||||
// this catches subtle errors where this function has been called
|
// this catches subtle errors where this function has been called
|
||||||
// with local_channel() when not logged in (which returns false)
|
// with local_channel() when not logged in (which returns false)
|
||||||
@ -130,27 +131,43 @@ class PConfig {
|
|||||||
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
|
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
|
||||||
$dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue);
|
$dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue);
|
||||||
|
|
||||||
|
if (! $updated) {
|
||||||
|
$updated = datetime_convert();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(self::Get($uid, $family, $key) === false) {
|
if(self::Get($uid, $family, $key) === false) {
|
||||||
if(! array_key_exists($uid, \App::$config))
|
if(! array_key_exists($uid, \App::$config))
|
||||||
\App::$config[$uid] = array();
|
\App::$config[$uid] = array();
|
||||||
if(! array_key_exists($family, \App::$config[$uid]))
|
if(! array_key_exists($family, \App::$config[$uid]))
|
||||||
\App::$config[$uid][$family] = array();
|
\App::$config[$uid][$family] = array();
|
||||||
|
|
||||||
$ret = q("INSERT INTO pconfig ( uid, cat, k, v ) VALUES ( %d, '%s', '%s', '%s' ) ",
|
$ret = q("INSERT INTO pconfig ( uid, cat, k, v, updated ) VALUES ( %d, '%s', '%s', '%s', '%s' ) ",
|
||||||
intval($uid),
|
intval($uid),
|
||||||
dbesc($family),
|
dbesc($family),
|
||||||
dbesc($key),
|
dbesc($key),
|
||||||
dbesc($dbvalue)
|
dbesc($dbvalue),
|
||||||
|
dbesc($updated)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
\App::$config[$uid][$family]['pcfgud:'.$key] = $updated;
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
$new = (\App::$config[$uid][$family]['pcfgud:'.$key] < $updated);
|
||||||
|
|
||||||
$ret = q("UPDATE pconfig SET v = '%s' WHERE uid = %d and cat = '%s' AND k = '%s'",
|
if ($new) {
|
||||||
|
$ret = q("UPDATE pconfig SET v = '%s' WHERE uid = %d and cat = '%s' AND k = '%s' AND updated = '%s'",
|
||||||
dbesc($dbvalue),
|
dbesc($dbvalue),
|
||||||
intval($uid),
|
intval($uid),
|
||||||
dbesc($family),
|
dbesc($family),
|
||||||
dbesc($key)
|
dbesc($key),
|
||||||
|
dbesc($updated)
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
logger('Refusing to update pconfig with outdated info.', LOGGER_NORMAL, LOG_ERR);
|
||||||
|
return self::Get($uid, $family, $key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// keep a separate copy for all variables which were
|
// keep a separate copy for all variables which were
|
||||||
@ -163,7 +180,11 @@ class PConfig {
|
|||||||
\App::$config[$uid]['transient'][$family] = array();
|
\App::$config[$uid]['transient'][$family] = array();
|
||||||
|
|
||||||
\App::$config[$uid][$family][$key] = $value;
|
\App::$config[$uid][$family][$key] = $value;
|
||||||
|
|
||||||
|
if ($new) {
|
||||||
\App::$config[$uid]['transient'][$family][$key] = $value;
|
\App::$config[$uid]['transient'][$family][$key] = $value;
|
||||||
|
\App::$config[$uid]['transient'][$family]['pcfgud:'.$key] = $updated;
|
||||||
|
}
|
||||||
|
|
||||||
if($ret)
|
if($ret)
|
||||||
return $value;
|
return $value;
|
||||||
@ -186,11 +207,20 @@ class PConfig {
|
|||||||
* The configuration key to delete
|
* The configuration key to delete
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
static public function Delete($uid, $family, $key) {
|
static public function Delete($uid, $family, $key, $updated = NULL) {
|
||||||
|
|
||||||
if(is_null($uid) || $uid === false)
|
if(is_null($uid) || $uid === false)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
$updated = ($updated) ? $updated : datetime_convert();
|
||||||
|
|
||||||
|
$newer = (\App::$config[$uid][$family]['pcfgud:'.$key] < $updated);
|
||||||
|
|
||||||
|
if (! $newer) {
|
||||||
|
logger('Refusing to delete pconfig with outdated delete request.', LOGGER_NORMAL, LOG_ERR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$ret = false;
|
$ret = false;
|
||||||
|
|
||||||
if(array_key_exists($uid,\App::$config)
|
if(array_key_exists($uid,\App::$config)
|
||||||
@ -205,6 +235,17 @@ class PConfig {
|
|||||||
dbesc($key)
|
dbesc($key)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Synchronize delete with clones.
|
||||||
|
|
||||||
|
if(! array_key_exists('transient', \App::$config[$uid]))
|
||||||
|
\App::$config[$uid]['transient'] = array();
|
||||||
|
if(! array_key_exists($family, \App::$config[$uid]['transient']))
|
||||||
|
\App::$config[$uid]['transient'][$family] = array();
|
||||||
|
|
||||||
|
if ($new) {
|
||||||
|
\App::$config[$uid]['transient'][$family]['pcfgdel:'.$key] = $updated;
|
||||||
|
}
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@ function set_pconfig($uid, $family, $key, $value) {
|
|||||||
return Zlib\PConfig::Set($uid,$family,$key,$value);
|
return Zlib\PConfig::Set($uid,$family,$key,$value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function del_pconfig($uid, $family, $key) {
|
function del_pconfig($uid, $family, $key, $updated = NULL) {
|
||||||
return Zlib\PConfig::Delete($uid,$family,$key);
|
return Zlib\PConfig::Delete($uid,$family,$key,$updated);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_xconfig($xchan) {
|
function load_xconfig($xchan) {
|
||||||
|
@ -3507,8 +3507,41 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) {
|
|||||||
|
|
||||||
if(array_key_exists('config',$arr) && is_array($arr['config']) && count($arr['config'])) {
|
if(array_key_exists('config',$arr) && is_array($arr['config']) && count($arr['config'])) {
|
||||||
foreach($arr['config'] as $cat => $k) {
|
foreach($arr['config'] as $cat => $k) {
|
||||||
foreach($arr['config'][$cat] as $k => $v)
|
|
||||||
set_pconfig($channel['channel_id'],$cat,$k,$v);
|
$pconfig_updated = [];
|
||||||
|
$pconfig_del = [];
|
||||||
|
|
||||||
|
foreach($arr['config'][$cat] as $k => $v) {
|
||||||
|
|
||||||
|
if (strpos($k,'pcfgud:')==0) {
|
||||||
|
|
||||||
|
$realk = substr($k,7);
|
||||||
|
$pconfig_updated[$realk] = $v;
|
||||||
|
unset($arr['config'][$cat][$k]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($k,'pcfgdel:')==0) {
|
||||||
|
$realk = substr($k,8);
|
||||||
|
$pconfig_del[$realk] = $v;
|
||||||
|
unset($arr['config'][$cat][$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($arr['config'][$cat] as $k => $v) {
|
||||||
|
|
||||||
|
if (!isset($pconfig_updated[$k])) {
|
||||||
|
$pconfig_updated[$k] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_pconfig($channel['channel_id'],$cat,$k,$v,$pconfig_updated[$k]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($pconfig_del as $k => $updated) {
|
||||||
|
del_pconfig($channel['channel_id'],$cat,$k,$updated);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user