mirror of
https://github.com/friendica/friendica
synced 2024-12-23 10:40:16 +00:00
Merge pull request #3622 from annando/new-dba
Enhanced dba functions, several replaced database calls
This commit is contained in:
commit
e6e8ebbac5
16 changed files with 183 additions and 367 deletions
|
@ -101,12 +101,12 @@ function network_to_name($s, $profile = "") {
|
|||
$networkname = str_replace($search, $replace, $s);
|
||||
|
||||
if ((in_array($s, array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) && ($profile != "")) {
|
||||
$r = q("SELECT `gserver`.`platform` FROM `gcontact`
|
||||
$r = dba::fetch_first("SELECT `gserver`.`platform` FROM `gcontact`
|
||||
INNER JOIN `gserver` ON `gserver`.`nurl` = `gcontact`.`server_url`
|
||||
WHERE `gcontact`.`nurl` = '%s' AND `platform` != ''",
|
||||
dbesc(normalise_link($profile)));
|
||||
WHERE `gcontact`.`nurl` = ? AND `platform` != ''", normalise_link($profile));
|
||||
|
||||
if (dbm::is_result($r)) {
|
||||
$networkname = $r[0]["platform"];
|
||||
$networkname = $r['platform'];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -921,10 +921,11 @@ function best_link_url($item, &$sparkle, $ssl_state = false) {
|
|||
$clean_url = normalise_link($item['author-link']);
|
||||
|
||||
if (local_user()) {
|
||||
$r = q("SELECT `id` FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `nurl` = '%s' AND NOT `pending` LIMIT 1",
|
||||
dbesc(NETWORK_DFRN), intval(local_user()), dbesc(normalise_link($clean_url)));
|
||||
$r = dba::select('contact', array('id'),
|
||||
array('network' => NETWORK_DFRN, 'uid' => local_user(), 'nurl' => normalise_link($clean_url), 'pending' => false),
|
||||
array('limit' => 1));
|
||||
if (dbm::is_result($r)) {
|
||||
$best_url = 'redir/' . $r[0]['id'];
|
||||
$best_url = 'redir/' . $r['id'];
|
||||
$sparkle = true;
|
||||
}
|
||||
}
|
||||
|
@ -940,7 +941,6 @@ function best_link_url($item, &$sparkle, $ssl_state = false) {
|
|||
}
|
||||
|
||||
|
||||
if (! function_exists('item_photo_menu')) {
|
||||
function item_photo_menu($item) {
|
||||
$ssl_state = false;
|
||||
|
||||
|
@ -970,12 +970,11 @@ function item_photo_menu($item) {
|
|||
$cid = 0;
|
||||
$network = '';
|
||||
$rel = 0;
|
||||
$r = q("SELECT `id`, `network`, `rel` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' LIMIT 1",
|
||||
intval(local_user()), dbesc(normalise_link($item['author-link'])));
|
||||
$r = dba::select('contact', array('id', 'network', 'rel'), array('uid' => local_user(), 'nurl' => normalise_link($item['author-link'])), array('limit' => 1));
|
||||
if (dbm::is_result($r)) {
|
||||
$cid = $r[0]['id'];
|
||||
$network = $r[0]['network'];
|
||||
$rel = $r[0]['rel'];
|
||||
$cid = $r['id'];
|
||||
$network = $r['network'];
|
||||
$rel = $r['rel'];
|
||||
}
|
||||
|
||||
if ($sparkle) {
|
||||
|
@ -1036,7 +1035,7 @@ function item_photo_menu($item) {
|
|||
}
|
||||
}
|
||||
return $o;
|
||||
}}
|
||||
}
|
||||
|
||||
if (! function_exists('builtin_activity_puller')) {
|
||||
/**
|
||||
|
|
|
@ -509,6 +509,22 @@ class dba {
|
|||
return $sql;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Convert parameter array to an universal form
|
||||
* @param array $args Parameter array
|
||||
* @return array universalized parameter array
|
||||
*/
|
||||
private static function getParam($args) {
|
||||
unset($args[0]);
|
||||
|
||||
// When the second function parameter is an array then use this as the parameter array
|
||||
if ((count($args) > 0) && (is_array($args[1]))) {
|
||||
return $args[1];
|
||||
} else {
|
||||
return $args;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Executes a prepared statement that returns data
|
||||
* @usage Example: $r = p("SELECT * FROM `item` WHERE `guid` = ?", $guid);
|
||||
|
@ -520,15 +536,7 @@ class dba {
|
|||
|
||||
$stamp1 = microtime(true);
|
||||
|
||||
$args = func_get_args();
|
||||
unset($args[0]);
|
||||
|
||||
// When the second function parameter is an array then use this as the parameter array
|
||||
if ((count($args) > 0) && (is_array($args[1]))) {
|
||||
$params = $args[1];
|
||||
} else {
|
||||
$params = $args;
|
||||
}
|
||||
$params = self::getParam(func_get_args());
|
||||
|
||||
// Renumber the array keys to be sure that they fit
|
||||
$i = 0;
|
||||
|
@ -560,10 +568,10 @@ class dba {
|
|||
self::$dbo->affected_rows = 0;
|
||||
|
||||
// We have to make some things different if this function is called from "e"
|
||||
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3);
|
||||
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
|
||||
|
||||
if (isset($trace[2])) {
|
||||
$called_from = $trace[2];
|
||||
if (isset($trace[1])) {
|
||||
$called_from = $trace[1];
|
||||
} else {
|
||||
// We use just something that is defined to avoid warnings
|
||||
$called_from = $trace[0];
|
||||
|
@ -719,13 +727,13 @@ class dba {
|
|||
|
||||
$stamp = microtime(true);
|
||||
|
||||
$args = func_get_args();
|
||||
$params = self::getParam(func_get_args());
|
||||
|
||||
// In a case of a deadlock we are repeating the query 20 times
|
||||
$timeout = 20;
|
||||
|
||||
do {
|
||||
$stmt = call_user_func_array('self::p', $args);
|
||||
$stmt = self::p($sql, $params);
|
||||
|
||||
if (is_bool($stmt)) {
|
||||
$retval = $stmt;
|
||||
|
@ -744,15 +752,6 @@ class dba {
|
|||
$error = self::$dbo->error;
|
||||
$errorno = self::$dbo->errorno;
|
||||
|
||||
array_shift($args);
|
||||
|
||||
// When the second function parameter is an array then use this as the parameter array
|
||||
if ((count($args) > 0) && (is_array($args[0]))) {
|
||||
$params = $args[0];
|
||||
} else {
|
||||
$params = $args;
|
||||
}
|
||||
|
||||
logger('DB Error '.self::$dbo->errorno.': '.self::$dbo->error."\n".
|
||||
$a->callstack(8)."\n".self::replace_parameters($sql, $params));
|
||||
|
||||
|
@ -772,9 +771,9 @@ class dba {
|
|||
* @return boolean Are there rows for that query?
|
||||
*/
|
||||
static public function exists($sql) {
|
||||
$args = func_get_args();
|
||||
$params = self::getParam(func_get_args());
|
||||
|
||||
$stmt = call_user_func_array('self::p', $args);
|
||||
$stmt = self::p($sql, $params);
|
||||
|
||||
if (is_bool($stmt)) {
|
||||
$retval = $stmt;
|
||||
|
@ -794,9 +793,9 @@ class dba {
|
|||
* @return array first row of query
|
||||
*/
|
||||
static public function fetch_first($sql) {
|
||||
$args = func_get_args();
|
||||
$params = self::getParam(func_get_args());
|
||||
|
||||
$stmt = call_user_func_array('self::p', $args);
|
||||
$stmt = self::p($sql, $params);
|
||||
|
||||
if (is_bool($stmt)) {
|
||||
$retval = $stmt;
|
||||
|
@ -891,12 +890,20 @@ class dba {
|
|||
*
|
||||
* @param string $table Table name
|
||||
* @param array $param parameter array
|
||||
* @param bool $on_duplicate_update Do an update on a duplicate entry
|
||||
*
|
||||
* @return boolean was the insert successfull?
|
||||
*/
|
||||
static public function insert($table, $param) {
|
||||
static public function insert($table, $param, $on_duplicate_update = false) {
|
||||
$sql = "INSERT INTO `".self::$dbo->escape($table)."` (`".implode("`, `", array_keys($param))."`) VALUES (".
|
||||
substr(str_repeat("?, ", count($param)), 0, -2).");";
|
||||
substr(str_repeat("?, ", count($param)), 0, -2).")";
|
||||
|
||||
if ($on_duplicate_update) {
|
||||
$sql .= " ON DUPLICATE KEY UPDATE `".implode("` = ?, `", array_keys($param))."` = ?";
|
||||
|
||||
$values = array_values($param);
|
||||
$param = array_merge_recursive($values, $values);
|
||||
}
|
||||
|
||||
return self::e($sql, $param);
|
||||
}
|
||||
|
@ -1160,34 +1167,27 @@ class dba {
|
|||
* @param string $table Table name
|
||||
* @param array $fields contains the fields that are updated
|
||||
* @param array $condition condition array with the key values
|
||||
* @param array|boolean $old_fields array with the old field values that are about to be replaced
|
||||
* @param array|boolean $old_fields array with the old field values that are about to be replaced (true = update on duplicate)
|
||||
*
|
||||
* @return boolean was the update successfull?
|
||||
*/
|
||||
static public function update($table, $fields, $condition, $old_fields = array()) {
|
||||
|
||||
/** @todo We may use MySQL specific functions here:
|
||||
* INSERT INTO `config` (`cat`, `k`, `v`) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `v` = '%s'"
|
||||
* But I think that it doesn't make sense here.
|
||||
*/
|
||||
|
||||
$table = self::$dbo->escape($table);
|
||||
|
||||
if (is_bool($old_fields)) {
|
||||
$sql = "SELECT * FROM `".$table."` WHERE `".
|
||||
implode("` = ? AND `", array_keys($condition))."` = ? LIMIT 1";
|
||||
|
||||
$params = array();
|
||||
foreach ($condition AS $value) {
|
||||
$params[] = $value;
|
||||
}
|
||||
$params = array_values($condition);
|
||||
|
||||
$do_insert = $old_fields;
|
||||
|
||||
$old_fields = self::fetch_first($sql, $params);
|
||||
if (is_bool($old_fields)) {
|
||||
if ($do_insert) {
|
||||
return self::insert($table, $fields);
|
||||
$values = array_merge($condition, $fields);
|
||||
return self::insert($table, $values, $do_insert);
|
||||
}
|
||||
$old_fields = array();
|
||||
}
|
||||
|
@ -1213,13 +1213,9 @@ class dba {
|
|||
implode("` = ?, `", array_keys($fields))."` = ? WHERE `".
|
||||
implode("` = ? AND `", array_keys($condition))."` = ?";
|
||||
|
||||
$params = array();
|
||||
foreach ($fields AS $value) {
|
||||
$params[] = $value;
|
||||
}
|
||||
foreach ($condition AS $value) {
|
||||
$params[] = $value;
|
||||
}
|
||||
$params1 = array_values($fields);
|
||||
$params2 = array_values($condition);
|
||||
$params = array_merge_recursive($params1, $params2);
|
||||
|
||||
return self::e($sql, $params);
|
||||
}
|
||||
|
|
|
@ -928,11 +928,9 @@ class Diaspora {
|
|||
* Normally this should have handled by getting a request - but this could get lost
|
||||
*/
|
||||
if ($contact["rel"] == CONTACT_IS_FOLLOWER && in_array($importer["page-flags"], array(PAGE_FREELOVE))) {
|
||||
q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d",
|
||||
intval(CONTACT_IS_FRIEND),
|
||||
intval($contact["id"]),
|
||||
intval($importer["uid"])
|
||||
);
|
||||
dba::update('contact', array('rel' => CONTACT_IS_FRIEND, 'writable' => true),
|
||||
array('id' => $contact["id"], 'uid' => $contact["uid"]));
|
||||
|
||||
$contact["rel"] = CONTACT_IS_FRIEND;
|
||||
logger("defining user ".$contact["nick"]." as friend");
|
||||
}
|
||||
|
@ -1475,10 +1473,7 @@ class Diaspora {
|
|||
|
||||
// Formerly we stored the signed text, the signature and the author in different fields.
|
||||
// We now store the raw data so that we are more flexible.
|
||||
q("INSERT INTO `sign` (`iid`,`signed_text`) VALUES (%d,'%s')",
|
||||
intval($message_id),
|
||||
dbesc(json_encode($data))
|
||||
);
|
||||
dba::insert('sign', array('iid' => $message_id, 'signed_text' => json_encode($data)));
|
||||
|
||||
// notify others
|
||||
proc_run(PRIORITY_HIGH, "include/notifier.php", "comment-import", $message_id);
|
||||
|
@ -1560,10 +1555,7 @@ class Diaspora {
|
|||
|
||||
dba::unlock();
|
||||
|
||||
q("UPDATE `conv` SET `updated` = '%s' WHERE `id` = %d",
|
||||
dbesc(datetime_convert()),
|
||||
intval($conversation["id"])
|
||||
);
|
||||
dba::update('conv', array('updated' => datetime_convert()), array('id' => $conversation["id"]));
|
||||
|
||||
notification(array(
|
||||
"type" => NOTIFY_MAIL,
|
||||
|
@ -1783,10 +1775,7 @@ class Diaspora {
|
|||
|
||||
// Formerly we stored the signed text, the signature and the author in different fields.
|
||||
// We now store the raw data so that we are more flexible.
|
||||
q("INSERT INTO `sign` (`iid`,`signed_text`) VALUES (%d,'%s')",
|
||||
intval($message_id),
|
||||
dbesc(json_encode($data))
|
||||
);
|
||||
dba::insert('sign', array('iid' => $message_id, 'signed_text' => json_encode($data)));
|
||||
|
||||
// notify others
|
||||
proc_run(PRIORITY_HIGH, "include/notifier.php", "comment-import", $message_id);
|
||||
|
@ -1871,11 +1860,7 @@ class Diaspora {
|
|||
|
||||
dba::unlock();
|
||||
|
||||
q("UPDATE `conv` SET `updated` = '%s' WHERE `id` = %d",
|
||||
dbesc(datetime_convert()),
|
||||
intval($conversation["id"])
|
||||
);
|
||||
|
||||
dba::update('conv', array('updated' => datetime_convert()), array('id' => $conversation["id"]));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2019,11 +2004,8 @@ class Diaspora {
|
|||
$a = get_app();
|
||||
|
||||
if ($contact["rel"] == CONTACT_IS_FOLLOWER && in_array($importer["page-flags"], array(PAGE_FREELOVE))) {
|
||||
q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d",
|
||||
intval(CONTACT_IS_FRIEND),
|
||||
intval($contact["id"]),
|
||||
intval($importer["uid"])
|
||||
);
|
||||
dba::update('contact', array('rel' => CONTACT_IS_FRIEND, 'writable' => true),
|
||||
array('id' => $contact["id"], 'uid' => $importer["uid"]));
|
||||
}
|
||||
// send notification
|
||||
|
||||
|
@ -2474,11 +2456,10 @@ class Diaspora {
|
|||
}
|
||||
|
||||
// Currently we don't have a central deletion function that we could use in this case. The function "item_drop" doesn't work for that case
|
||||
q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' , `title` = '' WHERE `id` = %d",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
intval($r[0]["id"])
|
||||
);
|
||||
dba::update('item', array('deleted' => true, 'title' => '', 'body' => '',
|
||||
'edited' => datetime_convert(), 'changed' => datetime_convert()),
|
||||
array('id' => $r[0]["id"]));
|
||||
|
||||
delete_thread($r[0]["id"], $r[0]["parent-uri"]);
|
||||
|
||||
logger("Deleted target ".$target_guid." (".$r[0]["id"].") from user ".$importer["uid"]." parent: ".$p[0]["id"], LOGGER_DEBUG);
|
||||
|
@ -3728,10 +3709,7 @@ class Diaspora {
|
|||
* Now store the signature more flexible to dynamically support new fields.
|
||||
* This will break Diaspora compatibility with Friendica versions prior to 3.5.
|
||||
*/
|
||||
q("INSERT INTO `sign` (`iid`,`signed_text`) VALUES (%d,'%s')",
|
||||
intval($post_id),
|
||||
dbesc(json_encode($message))
|
||||
);
|
||||
dba::insert('sign', array('iid' => $post_id, 'signed_text' => json_encode($message)));
|
||||
|
||||
logger('Stored diaspora like signature');
|
||||
return true;
|
||||
|
@ -3763,10 +3741,7 @@ class Diaspora {
|
|||
* Now store the signature more flexible to dynamically support new fields.
|
||||
* This will break Diaspora compatibility with Friendica versions prior to 3.5.
|
||||
*/
|
||||
q("INSERT INTO `sign` (`iid`, `signed_text`) VALUES (%d, '%s')",
|
||||
intval($message_id),
|
||||
dbesc(json_encode($message))
|
||||
);
|
||||
dba::insert('sign', array('iid' => $message_id, 'signed_text' => json_encode($message)));
|
||||
|
||||
logger('Stored diaspora comment signature');
|
||||
return true;
|
||||
|
|
|
@ -13,11 +13,7 @@ function fcontact_store($url,$name,$photo) {
|
|||
if (dbm::is_result($r))
|
||||
return $r[0]['id'];
|
||||
|
||||
$r = q("INSERT INTO `fcontact` ( `url`, `name`, `photo` ) VALUES ( '%s', '%s', '%s' ) ",
|
||||
dbesc($nurl),
|
||||
dbesc($name),
|
||||
dbesc($photo)
|
||||
);
|
||||
$r = dba::insert('fcontact', array('url' => $nurl, 'name' => $name, 'photo' => $photo));
|
||||
|
||||
if (dbm::is_result($r)) {
|
||||
$r = q("SELECT `id` FROM `fcontact` WHERE `url` = '%s' LIMIT 1",
|
||||
|
@ -31,11 +27,7 @@ function fcontact_store($url,$name,$photo) {
|
|||
}
|
||||
|
||||
function ffinder_store($uid,$cid,$fid) {
|
||||
$r = q("INSERT INTO `ffinder` ( `uid`, `cid`, `fid` ) VALUES ( %d, %d, %d ) ",
|
||||
intval($uid),
|
||||
intval($cid),
|
||||
intval($fid)
|
||||
);
|
||||
$r = dba::insert('ffinder', array('uid' => $uid, 'cid' => $cid, 'fid' => $fid));
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,11 +26,7 @@ function group_add($uid,$name) {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
$r = q("INSERT INTO `group` ( `uid`, `name` )
|
||||
VALUES( %d, '%s' ) ",
|
||||
intval($uid),
|
||||
dbesc($name)
|
||||
);
|
||||
$r = dba::insert('group', array('uid' => $uid, 'name' => $name));
|
||||
$ret = $r;
|
||||
}
|
||||
return $ret;
|
||||
|
@ -144,12 +140,7 @@ function group_add_member($uid,$name,$member,$gid = 0) {
|
|||
// we indicate success because the group member was in fact created
|
||||
// -- It was just created at another time
|
||||
if (! dbm::is_result($r)) {
|
||||
$r = q("INSERT INTO `group_member` (`uid`, `gid`, `contact-id`)
|
||||
VALUES( %d, %d, %d ) ",
|
||||
intval($uid),
|
||||
intval($gid),
|
||||
intval($member)
|
||||
);
|
||||
$r = dba::insert('group_member', array('uid' => $uid, 'gid' => $gid, 'contact-id' => $member));
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
|
|
@ -136,49 +136,47 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array()) {
|
|||
*/
|
||||
function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0) {
|
||||
if (remote_user() && count($_SESSION['remote'])) {
|
||||
foreach ($_SESSION['remote'] as $visitor) {
|
||||
if ($visitor['uid'] == $uid) {
|
||||
$r = q("SELECT `profile-id` FROM `contact` WHERE `id` = %d LIMIT 1",
|
||||
intval($visitor['cid'])
|
||||
);
|
||||
if (dbm::is_result($r))
|
||||
$profile = $r[0]['profile-id'];
|
||||
break;
|
||||
foreach ($_SESSION['remote'] as $visitor) {
|
||||
if ($visitor['uid'] == $uid) {
|
||||
$r = dba::select('contact', array('profile-id'), array('id' => $visitor['cid']), array('limit' => 1));
|
||||
if (dbm::is_result($r)) {
|
||||
$profile = $r['profile-id'];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$r = null;
|
||||
|
||||
if ($profile) {
|
||||
$profile_int = intval($profile);
|
||||
$r = q("SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` AS `contact_photo`,
|
||||
$r = dba::fetch_first("SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` AS `contact_photo`,
|
||||
`contact`.`thumb` AS `contact_thumb`, `contact`.`micro` AS `contact_micro`,
|
||||
`profile`.`uid` AS `profile_uid`, `profile`.*,
|
||||
`contact`.`avatar-date` AS picdate, `contact`.`addr`, `user`.*
|
||||
FROM `profile`
|
||||
INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` AND `contact`.`self`
|
||||
INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
|
||||
WHERE `user`.`nickname` = '%s' AND `profile`.`id` = %d LIMIT 1",
|
||||
dbesc($nickname),
|
||||
intval($profile_int)
|
||||
WHERE `user`.`nickname` = ? AND `profile`.`id` = ? LIMIT 1",
|
||||
$nickname,
|
||||
$profile_int
|
||||
);
|
||||
}
|
||||
if (!dbm::is_result($r)) {
|
||||
$r = q("SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` as `contact_photo`,
|
||||
$r = dba::fetch_first("SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` as `contact_photo`,
|
||||
`contact`.`thumb` AS `contact_thumb`, `contact`.`micro` AS `contact_micro`,
|
||||
`profile`.`uid` AS `profile_uid`, `profile`.*,
|
||||
`contact`.`avatar-date` AS picdate, `contact`.`addr`, `user`.*
|
||||
FROM `profile`
|
||||
INNER JOIN `contact` ON `contact`.`uid` = `profile`.`uid` AND `contact`.`self`
|
||||
INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
|
||||
WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` LIMIT 1",
|
||||
dbesc($nickname)
|
||||
WHERE `user`.`nickname` = ? AND `profile`.`is-default` LIMIT 1",
|
||||
$nickname
|
||||
);
|
||||
}
|
||||
|
||||
return $r[0];
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -446,15 +446,6 @@ function store_conversation($arr) {
|
|||
$conversation['source'] = $arr['source'];
|
||||
}
|
||||
|
||||
if (!Lock::set('store_conversation')) {
|
||||
// When using semaphores, this case never can't happen
|
||||
unset($arr['conversation-uri']);
|
||||
unset($arr['conversation-href']);
|
||||
unset($arr['protocol']);
|
||||
unset($arr['source']);
|
||||
return $arr;
|
||||
}
|
||||
|
||||
$old_conv = dba::fetch_first("SELECT `item-uri`, `reply-to-uri`, `conversation-uri`, `conversation-href`, `protocol`, `source`
|
||||
FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
|
||||
if (dbm::is_result($old_conv)) {
|
||||
|
@ -472,11 +463,10 @@ function store_conversation($arr) {
|
|||
logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
|
||||
}
|
||||
} else {
|
||||
if (!dba::insert('conversation', $conversation)) {
|
||||
if (!dba::insert('conversation', $conversation, true)) {
|
||||
logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG);
|
||||
}
|
||||
}
|
||||
Lock::remove('store_conversation');
|
||||
}
|
||||
|
||||
unset($arr['conversation-uri']);
|
||||
|
@ -854,7 +844,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
|
|||
$self = normalise_link(App::get_baseurl() . '/profile/' . $u[0]['nickname']);
|
||||
logger("item_store: 'myself' is ".$self." for parent ".$parent_id." checking against ".$arr['author-link']." and ".$arr['owner-link'], LOGGER_DEBUG);
|
||||
if ((normalise_link($arr['author-link']) == $self) || (normalise_link($arr['owner-link']) == $self)) {
|
||||
q("UPDATE `thread` SET `mention` = 1 WHERE `iid` = %d", intval($parent_id));
|
||||
dba::update('thread', array('mention' => true), array('iid' => $parent_id));
|
||||
logger("item_store: tagged thread ".$parent_id." as mention for user ".$self, LOGGER_DEBUG);
|
||||
}
|
||||
}
|
||||
|
@ -918,7 +908,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
|
|||
$arr["global"] = true;
|
||||
|
||||
// Set the global flag on all items if this was a global item entry
|
||||
q("UPDATE `item` SET `global` = 1 WHERE `uri` = '%s'", dbesc($arr["uri"]));
|
||||
dba::update('item', array('global' => true), array('uri' => $arr["uri"]));
|
||||
} else {
|
||||
$isglobal = q("SELECT `global` FROM `item` WHERE `uid` = 0 AND `uri` = '%s'", dbesc($arr["uri"]));
|
||||
|
||||
|
@ -966,23 +956,10 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
|
|||
}
|
||||
}
|
||||
|
||||
// Store the unescaped version
|
||||
$unescaped = $arr;
|
||||
|
||||
dbm::esc_array($arr, true);
|
||||
|
||||
logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
|
||||
|
||||
dba::transaction();
|
||||
|
||||
$r = dbq("INSERT INTO `item` (`"
|
||||
. implode("`, `", array_keys($arr))
|
||||
. "`) VALUES ("
|
||||
. implode(", ", array_values($arr))
|
||||
. ")");
|
||||
|
||||
// And restore it
|
||||
$arr = $unescaped;
|
||||
$r = dba::insert('item', $arr);
|
||||
|
||||
// When the item was successfully stored we fetch the ID of the item.
|
||||
if (dbm::is_result($r)) {
|
||||
|
@ -1062,10 +1039,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
|
|||
}
|
||||
|
||||
// Set parent id
|
||||
$r = q("UPDATE `item` SET `parent` = %d WHERE `id` = %d",
|
||||
intval($parent_id),
|
||||
intval($current_post)
|
||||
);
|
||||
$r = dba::update('item', array('parent' => $parent_id), array('id' => $current_post));
|
||||
|
||||
$arr['id'] = $current_post;
|
||||
$arr['parent'] = $parent_id;
|
||||
|
@ -1073,16 +1047,9 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
|
|||
// update the commented timestamp on the parent
|
||||
// Only update "commented" if it is really a comment
|
||||
if (($arr['verb'] == ACTIVITY_POST) || !get_config("system", "like_no_comment")) {
|
||||
q("UPDATE `item` SET `commented` = '%s', `changed` = '%s' WHERE `id` = %d",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
intval($parent_id)
|
||||
);
|
||||
dba::update('item', array('commented' => datetime_convert(), 'changed' => datetime_convert()), array('id' => $parent_id));
|
||||
} else {
|
||||
q("UPDATE `item` SET `changed` = '%s' WHERE `id` = %d",
|
||||
dbesc(datetime_convert()),
|
||||
intval($parent_id)
|
||||
);
|
||||
dba::update('item', array('changed' => datetime_convert()), array('id' => $parent_id));
|
||||
}
|
||||
|
||||
if ($dsprsig) {
|
||||
|
@ -1096,12 +1063,8 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
|
|||
logger("Repaired double encoded signature from handle ".$dsprsig->signer, LOGGER_DEBUG);
|
||||
}
|
||||
|
||||
q("INSERT INTO `sign` (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
|
||||
intval($current_post),
|
||||
dbesc($dsprsig->signed_text),
|
||||
dbesc($dsprsig->signature),
|
||||
dbesc($dsprsig->signer)
|
||||
);
|
||||
dba::insert('sign', array('iid' => $current_post, 'signed_text' => $dsprsig->signed_text,
|
||||
'signature' => $dsprsig->signature, 'signer' => $dsprsig->signer));
|
||||
}
|
||||
|
||||
$deleted = tag_deliver($arr['uid'], $current_post);
|
||||
|
@ -1189,26 +1152,17 @@ function item_set_last_item($arr) {
|
|||
}
|
||||
|
||||
if ($update) {
|
||||
q("UPDATE `contact` SET `success_update` = '%s', `last-item` = '%s' WHERE `id` = %d",
|
||||
dbesc($arr['received']),
|
||||
dbesc($arr['received']),
|
||||
intval($arr['contact-id'])
|
||||
);
|
||||
dba::update('contact', array('success_update' => $arr['received'], 'last-item' => $arr['received']),
|
||||
array('id' => $arr['contact-id']));
|
||||
}
|
||||
// Now do the same for the system wide contacts with uid=0
|
||||
if (!$arr['private']) {
|
||||
q("UPDATE `contact` SET `success_update` = '%s', `last-item` = '%s' WHERE `id` = %d",
|
||||
dbesc($arr['received']),
|
||||
dbesc($arr['received']),
|
||||
intval($arr['owner-id'])
|
||||
);
|
||||
dba::update('contact', array('success_update' => $arr['received'], 'last-item' => $arr['received']),
|
||||
array('id' => $arr['owner-id']));
|
||||
|
||||
if ($arr['owner-id'] != $arr['author-id']) {
|
||||
q("UPDATE `contact` SET `success_update` = '%s', `last-item` = '%s' WHERE `id` = %d",
|
||||
dbesc($arr['received']),
|
||||
dbesc($arr['received']),
|
||||
intval($arr['author-id'])
|
||||
);
|
||||
dba::update('contact', array('success_update' => $arr['received'], 'last-item' => $arr['received']),
|
||||
array('id' => $arr['author-id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1514,7 +1468,7 @@ function tgroup_check($uid, $item) {
|
|||
*
|
||||
* @todo fix type-hints (both array)
|
||||
*/
|
||||
function edited_timestamp_is_newer ($existing, $update) {
|
||||
function edited_timestamp_is_newer($existing, $update) {
|
||||
if (!x($existing, 'edited') || !$existing['edited']) {
|
||||
return true;
|
||||
}
|
||||
|
@ -1687,11 +1641,8 @@ function new_follower($importer, $contact, $datarray, $item, $sharing = false) {
|
|||
if (is_array($contact)) {
|
||||
if (($contact['network'] == NETWORK_OSTATUS && $contact['rel'] == CONTACT_IS_SHARING)
|
||||
|| ($sharing && $contact['rel'] == CONTACT_IS_FOLLOWER)) {
|
||||
$r = q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d",
|
||||
intval(CONTACT_IS_FRIEND),
|
||||
intval($contact['id']),
|
||||
intval($importer['uid'])
|
||||
);
|
||||
$r = dba::update('contact', array('rel' => CONTACT_IS_FRIEND, 'writable' => true),
|
||||
array('id' => $contact['id'], 'uid' => $importer['uid']));
|
||||
}
|
||||
// send email notification to owner?
|
||||
} else {
|
||||
|
@ -1731,13 +1682,9 @@ function new_follower($importer, $contact, $datarray, $item, $sharing = false) {
|
|||
$hash = random_string();
|
||||
|
||||
if (is_array($contact_record)) {
|
||||
$ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `hash`, `datetime`)
|
||||
VALUES ( %d, %d, 0, 0, '%s', '%s' )",
|
||||
intval($importer['uid']),
|
||||
intval($contact_record['id']),
|
||||
dbesc($hash),
|
||||
dbesc(datetime_convert())
|
||||
);
|
||||
dba::insert('intro', array('uid' => $importer['uid'], 'contact-id' => $contact_record['id'],
|
||||
'blocked' => false, 'knowyou' => false,
|
||||
'hash' => $hash, 'datetime' => datetime_convert()));
|
||||
}
|
||||
|
||||
$def_gid = get_default_group($importer['uid'], $contact_record["network"]);
|
||||
|
@ -1778,10 +1725,7 @@ function new_follower($importer, $contact, $datarray, $item, $sharing = false) {
|
|||
function lose_follower($importer, $contact, array $datarray = array(), $item = "") {
|
||||
|
||||
if (($contact['rel'] == CONTACT_IS_FRIEND) || ($contact['rel'] == CONTACT_IS_SHARING)) {
|
||||
q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d",
|
||||
intval(CONTACT_IS_SHARING),
|
||||
intval($contact['id'])
|
||||
);
|
||||
dba::update('contact', array('rel' => CONTACT_IS_SHARING), array('id' => $contact['id']));
|
||||
} else {
|
||||
contact_remove($contact['id']);
|
||||
}
|
||||
|
@ -1790,10 +1734,7 @@ function lose_follower($importer, $contact, array $datarray = array(), $item = "
|
|||
function lose_sharer($importer, $contact, array $datarray = array(), $item = "") {
|
||||
|
||||
if (($contact['rel'] == CONTACT_IS_FRIEND) || ($contact['rel'] == CONTACT_IS_FOLLOWER)) {
|
||||
q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d",
|
||||
intval(CONTACT_IS_FOLLOWER),
|
||||
intval($contact['id'])
|
||||
);
|
||||
dba::update('contact', array('rel' => CONTACT_IS_FOLLOWER), array('id' => $contact['id']));
|
||||
} else {
|
||||
contact_remove($contact['id']);
|
||||
}
|
||||
|
@ -1828,10 +1769,7 @@ function subscribe_to_hub($url, $importer, $contact, $hubmode = 'subscribe') {
|
|||
logger('subscribe_to_hub: ' . $hubmode . ' ' . $contact['name'] . ' to hub ' . $url . ' endpoint: ' . $push_url . ' with verifier ' . $verify_token);
|
||||
|
||||
if (!strlen($contact['hub-verify']) || ($contact['hub-verify'] != $verify_token)) {
|
||||
$r = q("UPDATE `contact` SET `hub-verify` = '%s' WHERE `id` = %d",
|
||||
dbesc($verify_token),
|
||||
intval($contact['id'])
|
||||
);
|
||||
$r = dba::update('contact', array('hub-verify' => $verify_token), array('id' => $contact['id']));
|
||||
}
|
||||
|
||||
post_url($url, $params);
|
||||
|
@ -2199,13 +2137,12 @@ function drop_item($id, $interactive = true) {
|
|||
}
|
||||
|
||||
logger('delete item: ' . $item['id'], LOGGER_DEBUG);
|
||||
// delete the item
|
||||
|
||||
$r = q("UPDATE `item` SET `deleted` = 1, `title` = '', `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
intval($item['id'])
|
||||
);
|
||||
// delete the item
|
||||
$r = dba::update('item', array('deleted' => true, 'title' => '', 'body' => '',
|
||||
'edited' => datetime_convert(), 'changed' => datetime_convert()),
|
||||
array('id' => $item['id']));
|
||||
|
||||
create_tags_from_item($item['id']);
|
||||
create_files_from_item($item['id']);
|
||||
delete_thread($item['id'], $item['parent-uri']);
|
||||
|
@ -2288,33 +2225,26 @@ function drop_item($id, $interactive = true) {
|
|||
|
||||
// If it's the parent of a comment thread, kill all the kids
|
||||
if ($item['uri'] == $item['parent-uri']) {
|
||||
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' , `title` = ''
|
||||
WHERE `parent-uri` = '%s' AND `uid` = %d ",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($item['parent-uri']),
|
||||
intval($item['uid'])
|
||||
);
|
||||
$r = dba::update('item', array('deleted' => true, 'title' => '', 'body' => '',
|
||||
'edited' => datetime_convert(), 'changed' => datetime_convert()),
|
||||
array('parent-uri' => $item['parent-uri'], 'uid' => $item['uid']));
|
||||
|
||||
create_tags_from_itemuri($item['parent-uri'], $item['uid']);
|
||||
create_files_from_itemuri($item['parent-uri'], $item['uid']);
|
||||
delete_thread_uri($item['parent-uri'], $item['uid']);
|
||||
// ignore the result
|
||||
} else {
|
||||
// ensure that last-child is set in case the comment that had it just got wiped.
|
||||
q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($item['parent-uri']),
|
||||
intval($item['uid'])
|
||||
);
|
||||
dba::update('item', array('last-child' => false, 'changed' => datetime_convert()),
|
||||
array('parent-uri' => $item['parent-uri'], 'uid' => $item['uid']));
|
||||
|
||||
// who is the last child now?
|
||||
$r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d ORDER BY `edited` DESC LIMIT 1",
|
||||
dbesc($item['parent-uri']),
|
||||
intval($item['uid'])
|
||||
);
|
||||
if (dbm::is_result($r)) {
|
||||
q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d",
|
||||
intval($r[0]['id'])
|
||||
);
|
||||
dba::update('item', array('last-child' => true), array('id' => $r[0]['id']));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -82,11 +82,8 @@ function oembed_fetch_url($embedurl, $no_rich_type = false){
|
|||
} else { //save in cache
|
||||
$j = json_decode($txt);
|
||||
if ($j->type != "error") {
|
||||
q("INSERT INTO `oembed` (`url`, `content`, `created`) VALUES ('%s', '%s', '%s')
|
||||
ON DUPLICATE KEY UPDATE `content` = '%s', `created` = '%s'",
|
||||
dbesc(normalise_link($embedurl)),
|
||||
dbesc($txt), dbesc(datetime_convert()),
|
||||
dbesc($txt), dbesc(datetime_convert()));
|
||||
dba::insert('oembed', array('url' => normalise_link($embedurl),
|
||||
'content' => $txt, 'created' => datetime_convert()), true);
|
||||
}
|
||||
|
||||
Cache::set($a->videowidth.$embedurl, $txt, CACHE_DAY);
|
||||
|
|
|
@ -46,22 +46,17 @@ function install_plugin($plugin) {
|
|||
$func = $plugin . '_install';
|
||||
$func();
|
||||
|
||||
$plugin_admin = (function_exists($plugin."_plugin_admin")?1:0);
|
||||
$plugin_admin = (function_exists($plugin."_plugin_admin") ? 1 : 0);
|
||||
|
||||
$r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`, `plugin_admin`) VALUES ( '%s', 1, %d , %d ) ",
|
||||
dbesc($plugin),
|
||||
intval($t),
|
||||
$plugin_admin
|
||||
);
|
||||
dba::insert('addon', array('name' => $plugin, 'installed' => true,
|
||||
'timestamp' => $t, 'plugin_admin' => $plugin_admin));
|
||||
|
||||
// we can add the following with the previous SQL
|
||||
// once most site tables have been updated.
|
||||
// This way the system won't fall over dead during the update.
|
||||
|
||||
if (file_exists('addon/' . $plugin . '/.hidden')) {
|
||||
q("UPDATE `addon` SET `hidden` = 1 WHERE `name` = '%s'",
|
||||
dbesc($plugin)
|
||||
);
|
||||
dba::update('addon', array('hidden' => true), array('name' => $plugin));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -109,10 +104,7 @@ function reload_plugins() {
|
|||
$func = $pl . '_install';
|
||||
$func();
|
||||
}
|
||||
q("UPDATE `addon` SET `timestamp` = %d WHERE `id` = %d",
|
||||
intval($t),
|
||||
intval($i['id'])
|
||||
);
|
||||
dba::update('addon', array('timestamp' => $t), array('id' => $i['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -154,12 +146,8 @@ function register_hook($hook,$file,$function,$priority=0) {
|
|||
if (dbm::is_result($r))
|
||||
return true;
|
||||
|
||||
$r = q("INSERT INTO `hook` (`hook`, `file`, `function`, `priority`) VALUES ( '%s', '%s', '%s', '%s' ) ",
|
||||
dbesc($hook),
|
||||
dbesc($file),
|
||||
dbesc($function),
|
||||
dbesc($priority)
|
||||
);
|
||||
$r = dba::insert('hook', array('hook' => $hook, 'file' => $file, 'function' => $function, 'priority' => $priority));
|
||||
|
||||
return $r;
|
||||
}}
|
||||
|
||||
|
@ -183,20 +171,19 @@ function unregister_hook($hook,$file,$function) {
|
|||
}}
|
||||
|
||||
|
||||
if (! function_exists('load_hooks')) {
|
||||
function load_hooks() {
|
||||
$a = get_app();
|
||||
$a->hooks = array();
|
||||
$r = q("SELECT * FROM `hook` WHERE 1 ORDER BY `priority` DESC, `file`");
|
||||
$r = dba::select('hook', array('hook', 'file', 'function'), array(), array('order' => array('priority' => 'desc', 'file')));
|
||||
|
||||
if (dbm::is_result($r)) {
|
||||
foreach ($r as $rr) {
|
||||
if (! array_key_exists($rr['hook'],$a->hooks))
|
||||
$a->hooks[$rr['hook']] = array();
|
||||
$a->hooks[$rr['hook']][] = array($rr['file'],$rr['function']);
|
||||
while ($rr = dba::fetch($r)) {
|
||||
if (! array_key_exists($rr['hook'],$a->hooks)) {
|
||||
$a->hooks[$rr['hook']] = array();
|
||||
}
|
||||
$a->hooks[$rr['hook']][] = array($rr['file'],$rr['function']);
|
||||
}
|
||||
}}
|
||||
dba::close($r);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Calls a hook.
|
||||
|
|
|
@ -423,9 +423,7 @@ function display_content(App $a, $update = 0) {
|
|||
intval($r[0]['parent']));
|
||||
|
||||
if ($unseen) {
|
||||
q("UPDATE `item` SET `unseen` = 0 WHERE `parent` = %d AND `unseen`",
|
||||
intval($r[0]['parent'])
|
||||
);
|
||||
dba::update('item', array('unseen' => false), array('parent' => $r[0]['parent'], 'unseen' => true));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -794,18 +794,12 @@ function network_content(App $a, $update = 0) {
|
|||
|
||||
|
||||
if (!$group && !$cid && !$star) {
|
||||
|
||||
$unseen = q("SELECT `id` FROM `item` WHERE `unseen` AND `uid` = %d LIMIT 1",
|
||||
intval(local_user()));
|
||||
$unseen = dba::select('item', array('id'), array('unseen' => true, 'uid' => local_user()), array('limit' => 1));
|
||||
|
||||
if (dbm::is_result($unseen)) {
|
||||
$r = q("UPDATE `item` SET `unseen` = 0
|
||||
WHERE `unseen` = 1 AND `uid` = %d",
|
||||
intval(local_user())
|
||||
);
|
||||
$r = dba::update('item', array('unseen' => false), array('uid' => local_user(), 'unseen' => true));
|
||||
}
|
||||
} elseif ($update_unseen) {
|
||||
|
||||
$unseen = q("SELECT `id` FROM `item` ".$update_unseen. " LIMIT 1");
|
||||
|
||||
if (dbm::is_result($unseen)) {
|
||||
|
|
11
src/App.php
11
src/App.php
|
@ -6,6 +6,7 @@ use Friendica\Core\Config;
|
|||
use Friendica\Core\PConfig;
|
||||
|
||||
use Cache;
|
||||
use dba;
|
||||
use dbm;
|
||||
|
||||
use Detection\MobileDetect;
|
||||
|
@ -712,20 +713,20 @@ class App {
|
|||
|
||||
$this->remove_inactive_processes();
|
||||
|
||||
q('START TRANSACTION');
|
||||
dba::transaction();
|
||||
|
||||
$r = q('SELECT `pid` FROM `process` WHERE `pid` = %d', intval(getmypid()));
|
||||
if (!dbm::is_result($r)) {
|
||||
q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')", intval(getmypid()), dbesc($command), dbesc(datetime_convert()));
|
||||
dba::insert('process', array('pid' => getmypid(), 'command' => $command, 'created' => datetime_convert()));
|
||||
}
|
||||
q('COMMIT');
|
||||
dba::commit();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remove inactive processes
|
||||
*/
|
||||
function remove_inactive_processes() {
|
||||
q('START TRANSACTION');
|
||||
dba::transaction();
|
||||
|
||||
$r = q('SELECT `pid` FROM `process`');
|
||||
if (dbm::is_result($r)) {
|
||||
|
@ -735,7 +736,7 @@ class App {
|
|||
}
|
||||
}
|
||||
}
|
||||
q('COMMIT');
|
||||
dba::commit();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
namespace Friendica\Core;
|
||||
|
||||
use dba;
|
||||
use dbm;
|
||||
|
||||
/**
|
||||
|
@ -45,19 +46,18 @@ class Config {
|
|||
|
||||
$a = get_app();
|
||||
|
||||
$r = q("SELECT `v`, `k` FROM `config` WHERE `cat` = '%s'", dbesc($family));
|
||||
if (dbm::is_result($r)) {
|
||||
foreach ($r as $rr) {
|
||||
$k = $rr['k'];
|
||||
if ($family === 'config') {
|
||||
$a->config[$k] = $rr['v'];
|
||||
} else {
|
||||
$a->config[$family][$k] = $rr['v'];
|
||||
self::$cache[$family][$k] = $rr['v'];
|
||||
self::$in_db[$family][$k] = true;
|
||||
}
|
||||
$r = dba::select('config', array('v', 'k'), array('cat' => $family));
|
||||
while ($rr = dba::fetch($r)) {
|
||||
$k = $rr['k'];
|
||||
if ($family === 'config') {
|
||||
$a->config[$k] = $rr['v'];
|
||||
} else {
|
||||
$a->config[$family][$k] = $rr['v'];
|
||||
self::$cache[$family][$k] = $rr['v'];
|
||||
self::$in_db[$family][$k] = true;
|
||||
}
|
||||
}
|
||||
dba::close($r);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -98,13 +98,10 @@ class Config {
|
|||
}
|
||||
}
|
||||
|
||||
$ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s'",
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
);
|
||||
$ret = dba::select('config', array('v'), array('cat' => $family, 'k' => $key), array('limit' => 1));
|
||||
if (dbm::is_result($ret)) {
|
||||
// manage array value
|
||||
$val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v']) ? unserialize($ret[0]['v']) : $ret[0]['v']);
|
||||
$val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret['v']) ? unserialize($ret['v']) : $ret['v']);
|
||||
|
||||
// Assign the value from the database to the cache
|
||||
self::$cache[$family][$key] = $val;
|
||||
|
@ -167,20 +164,8 @@ class Config {
|
|||
// manage array value
|
||||
$dbvalue = (is_array($value) ? serialize($value) : $dbvalue);
|
||||
|
||||
if (is_null($stored) || !self::$in_db[$family][$key]) {
|
||||
$ret = q("INSERT INTO `config` (`cat`, `k`, `v`) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `v` = '%s'",
|
||||
dbesc($family),
|
||||
dbesc($key),
|
||||
dbesc($dbvalue),
|
||||
dbesc($dbvalue)
|
||||
);
|
||||
} else {
|
||||
$ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s'",
|
||||
dbesc($dbvalue),
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
);
|
||||
}
|
||||
dba::update('config', array('v' => $dbvalue), array('cat' => $family, 'k' => $key), true);
|
||||
|
||||
if ($ret) {
|
||||
self::$in_db[$family][$key] = true;
|
||||
return $value;
|
||||
|
@ -206,10 +191,8 @@ class Config {
|
|||
unset(self::$cache[$family][$key]);
|
||||
unset(self::$in_db[$family][$key]);
|
||||
}
|
||||
$ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s'",
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
);
|
||||
|
||||
$ret = dba::delete('config', array('cat' => $family, 'k' => $key));
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
namespace Friendica\Core;
|
||||
|
||||
use dba;
|
||||
use dbm;
|
||||
|
||||
/**
|
||||
|
@ -34,16 +35,15 @@ class PConfig {
|
|||
*/
|
||||
public static function load($uid, $family) {
|
||||
$a = get_app();
|
||||
$r = q("SELECT `v`,`k` FROM `pconfig` WHERE `cat` = '%s' AND `uid` = %d ORDER BY `cat`, `k`, `id`",
|
||||
dbesc($family),
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
$r = dba::select('pconfig', array('v', 'k'), array('cat' => $family, 'uid' => $uid));
|
||||
if (dbm::is_result($r)) {
|
||||
foreach ($r as $rr) {
|
||||
while ($rr = dba::fetch($r)) {
|
||||
$k = $rr['k'];
|
||||
$a->config[$uid][$family][$k] = $rr['v'];
|
||||
self::$in_db[$uid][$family][$k] = true;
|
||||
}
|
||||
dba::close($r);
|
||||
} else if ($family != 'config') {
|
||||
// Negative caching
|
||||
$a->config[$uid][$family] = "!<unset>!";
|
||||
|
@ -89,14 +89,9 @@ class PConfig {
|
|||
}
|
||||
}
|
||||
|
||||
$ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' ORDER BY `id` DESC LIMIT 1",
|
||||
intval($uid),
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
);
|
||||
|
||||
if (count($ret)) {
|
||||
$val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
|
||||
$ret = dba::select('pconfig', array('v'), array('uid' => $uid, 'cat' => $family, 'k' => $key), array('limit' => 1));
|
||||
if (dbm::is_result($ret)) {
|
||||
$val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret['v']) ? unserialize($ret['v']) : $ret['v']);
|
||||
$a->config[$uid][$family][$key] = $val;
|
||||
self::$in_db[$uid][$family][$key] = true;
|
||||
|
||||
|
@ -147,22 +142,7 @@ class PConfig {
|
|||
// manage array value
|
||||
$dbvalue = (is_array($value) ? serialize($value) : $dbvalue);
|
||||
|
||||
if (is_null($stored) || !self::$in_db[$uid][$family][$key]) {
|
||||
$ret = q("INSERT INTO `pconfig` (`uid`, `cat`, `k`, `v`) VALUES (%d, '%s', '%s', '%s') ON DUPLICATE KEY UPDATE `v` = '%s'",
|
||||
intval($uid),
|
||||
dbesc($family),
|
||||
dbesc($key),
|
||||
dbesc($dbvalue),
|
||||
dbesc($dbvalue)
|
||||
);
|
||||
} else {
|
||||
$ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s'",
|
||||
dbesc($dbvalue),
|
||||
intval($uid),
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
);
|
||||
}
|
||||
dba::update('pconfig', array('v' => $dbvalue), array('uid' => $uid, 'cat' => $family, 'k' => $key), true);
|
||||
|
||||
if ($ret) {
|
||||
self::$in_db[$uid][$family][$key] = true;
|
||||
|
@ -193,11 +173,7 @@ class PConfig {
|
|||
unset(self::$in_db[$uid][$family][$key]);
|
||||
}
|
||||
|
||||
$ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s'",
|
||||
intval($uid),
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
);
|
||||
$ret = dba::delete('pconfig', array('uid' => $uid, 'cat' => $family, 'k' => $key));
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ namespace Friendica;
|
|||
use Friendica\Core\Config;
|
||||
|
||||
use xml;
|
||||
use dba;
|
||||
|
||||
use DomXPath;
|
||||
use DOMDocument;
|
||||
|
@ -66,11 +67,9 @@ class ParseUrl {
|
|||
|
||||
$data = self::getSiteinfo($url, $no_guessing, $do_oembed);
|
||||
|
||||
q("INSERT INTO `parsed_url` (`url`, `guessing`, `oembed`, `content`, `created`) VALUES ('%s', %d, %d, '%s', '%s')
|
||||
ON DUPLICATE KEY UPDATE `content` = '%s', `created` = '%s'",
|
||||
dbesc(normalise_link($url)), intval(!$no_guessing), intval($do_oembed),
|
||||
dbesc(serialize($data)), dbesc(datetime_convert()),
|
||||
dbesc(serialize($data)), dbesc(datetime_convert()));
|
||||
dba::insert('parsed_url', array('url' => normalise_link($url), 'guessing' => !$no_guessing,
|
||||
'oembed' => $do_oembed, 'content' => serialize($data),
|
||||
'created' => datetime_convert()), true);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue