From da60893590a302bf94dfd86f5586f26509160d34 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 9 Jan 2018 22:20:33 -0500 Subject: [PATCH 1/5] Replace dba::select(limit => 1) by dba::selectOne - Convert array declarations to new style --- include/api.php | 8 ++-- include/contact_widgets.php | 6 +-- include/conversation.php | 7 ++-- include/dba.php | 62 ++++++++++++++++++------------- include/enotify.php | 8 ++-- include/identity.php | 2 +- include/items.php | 10 ++--- include/message.php | 4 +- include/nav.php | 2 +- include/session.php | 2 +- include/tags.php | 7 +--- index.php | 2 +- mod/admin.php | 10 ++--- mod/cal.php | 11 ++---- mod/common.php | 18 +++------ mod/contacts.php | 12 +++--- mod/display.php | 4 +- mod/hovercard.php | 2 +- mod/network.php | 16 ++++---- mod/noscrape.php | 8 ++-- mod/proxy.php | 2 +- mod/receive.php | 2 +- mod/settings.php | 2 +- mod/unfollow.php | 12 +++--- mod/xrd.php | 2 +- src/Content/OEmbed.php | 5 +-- src/Core/Cache.php | 2 +- src/Core/Config.php | 2 +- src/Core/PConfig.php | 2 +- src/Core/Worker.php | 20 +++++----- src/Model/Contact.php | 32 ++++++++-------- src/Model/GContact.php | 2 +- src/Model/Group.php | 8 ++-- src/Model/Photo.php | 8 ++-- src/Model/User.php | 12 +++--- src/Module/Login.php | 15 +++----- src/Network/FKOAuth1.php | 4 +- src/Network/FKOAuthDataStore.php | 2 +- src/Network/Probe.php | 4 +- src/Object/Post.php | 2 +- src/Protocol/Diaspora.php | 8 ++-- src/Protocol/Feed.php | 2 +- src/Protocol/OStatus.php | 34 ++++++++--------- src/Protocol/PortableContact.php | 4 +- src/Util/ExAuth.php | 2 +- src/Util/Lock.php | 2 +- src/Worker/Expire.php | 2 +- src/Worker/Notifier.php | 6 +-- src/Worker/OnePoll.php | 18 ++++----- src/Worker/Queue.php | 4 +- util/global_community_silence.php | 2 +- 51 files changed, 206 insertions(+), 219 deletions(-) diff --git a/include/api.php b/include/api.php index bc60590a51..16d18a37ca 100644 --- a/include/api.php +++ b/include/api.php @@ -222,7 +222,7 @@ function api_login(App $a) } else { $user_id = User::authenticate(trim($user), trim($password)); if ($user_id) { - $record = dba::select('user', [], ['uid' => $user_id], ['limit' => 1]); + $record = dba::selectOne('user', [], ['uid' => $user_id]); } } @@ -473,7 +473,7 @@ function api_rss_extra(App $a, $arr, $user_info) */ function api_unique_id_to_nurl($id) { - $r = dba::select('contact', array('nurl'), array('uid' => 0, 'id' => $id), array('limit' => 1)); + $r = dba::selectOne('contact', array('nurl'), array('uid' => 0, 'id' => $id)); if (DBM::is_result($r)) { return $r["nurl"]; @@ -792,7 +792,7 @@ function api_get_user(App $a, $contact_id = null) // If this is a local user and it uses Frio, we can get its color preferences. if ($ret['self']) { - $theme_info = dba::select('user', ['theme'], ['uid' => $ret['uid']], ['limit' => 1]); + $theme_info = dba::selectOne('user', ['theme'], ['uid' => $ret['uid']]); if ($theme_info['theme'] === 'frio') { $schema = PConfig::get($ret['uid'], 'frio', 'schema'); if ($schema && ($schema != '---')) { @@ -4870,7 +4870,7 @@ function api_friendica_remoteauth() // traditional DFRN - $r = dba::select('contact', [], ['uid' => api_user(), 'nurl' => $c_url], ['limit' => 1]); + $r = dba::selectOne('contact', [], ['uid' => api_user(), 'nurl' => $c_url]); if (!DBM::is_result($r) || ($r['network'] !== NETWORK_DFRN)) { throw new BadRequestException("Unknown contact"); diff --git a/include/contact_widgets.php b/include/contact_widgets.php index a1c93f142b..4f84ce1039 100644 --- a/include/contact_widgets.php +++ b/include/contact_widgets.php @@ -224,12 +224,12 @@ function common_friends_visitor_widget($profile_uid) if (!$cid) { if (get_my_url()) { - $r = dba::select('contact', array('id'), - array('nurl' => normalise_link(get_my_url()), 'uid' => $profile_uid), array('limit' => 1)); + $r = dba::selectOne('contact', ['id'], + ['nurl' => normalise_link(get_my_url()), 'uid' => $profile_uid]); if (DBM::is_result($r)) { $cid = $r['id']; } else { - $r = dba::select('gcontact', array('id'), array('nurl' => normalise_link(get_my_url())), array('limit' => 1)); + $r = dba::selectOne('gcontact', ['id'], ['nurl' => normalise_link(get_my_url())]); if (DBM::is_result($r)) { $zcid = $r['id']; } diff --git a/include/conversation.php b/include/conversation.php index 423d9884e7..746a8a8913 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -968,9 +968,8 @@ function best_link_url($item, &$sparkle, $url = '') { $clean_url = normalise_link($item['author-link']); if (local_user()) { - $r = dba::select('contact', array('id'), - array('network' => NETWORK_DFRN, 'uid' => local_user(), 'nurl' => normalise_link($clean_url), 'pending' => false), - array('limit' => 1)); + $r = dba::selectOne('contact', ['id'], + ['network' => NETWORK_DFRN, 'uid' => local_user(), 'nurl' => normalise_link($clean_url), 'pending' => false]); if (DBM::is_result($r)) { $best_url = 'redir/' . $r['id']; $sparkle = true; @@ -1020,7 +1019,7 @@ function item_photo_menu($item) { $cid = 0; $network = ''; $rel = 0; - $r = dba::select('contact', array('id', 'network', 'rel'), array('uid' => local_user(), 'nurl' => normalise_link($item['author-link'])), array('limit' => 1)); + $r = dba::selectOne('contact', array('id', 'network', 'rel'), array('uid' => local_user(), 'nurl' => normalise_link($item['author-link']))); if (DBM::is_result($r)) { $cid = $r['id']; $network = $r['network']; diff --git a/include/dba.php b/include/dba.php index 391a6fcf72..3a72d59649 100644 --- a/include/dba.php +++ b/include/dba.php @@ -572,7 +572,7 @@ class dba { $fields = array($array_key); } - $stmt = self::select($table, $fields, $condition, array('limit' => 1, 'only_query' => true)); + $stmt = self::select($table, $fields, $condition, ['limit' => 1]); if (is_bool($stmt)) { $retval = $stmt; @@ -1046,7 +1046,7 @@ class dba { if (is_bool($old_fields)) { $do_insert = $old_fields; - $old_fields = self::select($table, array(), $condition, array('limit' => 1)); + $old_fields = self::selectOne($table, [], $condition); if (is_bool($old_fields)) { if ($do_insert) { @@ -1083,6 +1083,31 @@ class dba { return self::e($sql, $params); } + /** + * Retrieve a single record from a table and returns it in an associative array + * + * @brief Retrieve a single record from a table + * @param string $table + * @param array $fields + * @param array $condition + * @param array $params + * @return bool|array + * @see dba::select + */ + public static function selectOne($table, array $fields = [], array $condition = [], $params = []) + { + $params['limit'] = 1; + $result = self::select($table, $fields, $condition, $params); + + if (is_bool($result)) { + return $result; + } else { + $row = self::fetch($result); + self::close($result); + return $row; + } + } + /** * @brief Select rows from a table * @@ -1112,53 +1137,38 @@ class dba { } if (count($fields) > 0) { - $select_fields = "`".implode("`, `", array_values($fields))."`"; + $select_fields = "`" . implode("`, `", array_values($fields)) . "`"; } else { $select_fields = "*"; } $condition_string = self::buildCondition($condition); - $param_string = ''; - $single_row = false; - if (isset($params['order'])) { - $param_string .= " ORDER BY "; + $order_string = " ORDER BY "; foreach ($params['order'] AS $fields => $order) { if (!is_int($fields)) { - $param_string .= "`".$fields."` ".($order ? "DESC" : "ASC").", "; + $order_string .= "`" . $fields . "` " . ($order ? "DESC" : "ASC") . ", "; } else { - $param_string .= "`".$order."`, "; + $order_string .= "`" . $order . "`, "; } } - $param_string = substr($param_string, 0, -2); + $order_string = substr($order_string, 0, -2); } if (isset($params['limit']) && is_int($params['limit'])) { - $param_string .= " LIMIT ".$params['limit']; - $single_row = ($params['limit'] == 1); + $limit_string = " LIMIT " . $params['limit']; } if (isset($params['limit']) && is_array($params['limit'])) { - $param_string .= " LIMIT ".intval($params['limit'][0]).", ".intval($params['limit'][1]); - $single_row = ($params['limit'][1] == 1); + $limit_string = " LIMIT " . intval($params['limit'][0]) . ", " . intval($params['limit'][1]); } - if (isset($params['only_query']) && $params['only_query']) { - $single_row = !$params['only_query']; - } - - $sql = "SELECT ".$select_fields." FROM `".$table."`".$condition_string.$param_string; + $sql = "SELECT " . $select_fields . " FROM `" . $table . "`" . $condition_string . $order_string . $limit_string; $result = self::p($sql, $condition); - if (is_bool($result) || !$single_row) { - return $result; - } else { - $row = self::fetch($result); - self::close($result); - return $row; - } + return $result; } /** diff --git a/include/enotify.php b/include/enotify.php index 79c5df3f51..70f1c3131c 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -106,7 +106,7 @@ function notification($params) } if ($params['type'] == NOTIFY_COMMENT) { - $p = dba::select('thread', ['ignored'], ['iid' => $parent_id], ['limit' => 1]); + $p = dba::selectOne('thread', ['ignored'], ['iid' => $parent_id]); if (DBM::is_result($p) && $p["ignored"]) { logger("Thread ".$parent_id." will be ignored", LOGGER_DEBUG); return; @@ -131,7 +131,7 @@ function notification($params) $p = null; if ($params['otype'] === 'item' && $parent_id) { - $p = dba::select('item', [], ['id' => $parent_id], ['limit' => 1]); + $p = dba::selectOne('item', [], ['id' => $parent_id]); } $item_post_type = item_post_type($p); @@ -672,12 +672,12 @@ function check_item_notification($itemid, $uid, $defaulttype = "") { $profiles = $notification_data["profiles"]; $fields = ['notify-flags', 'language', 'username', 'email', 'nickname']; - $user = dba::select('user', $fields, ['uid' => $uid], ['limit' => 1]); + $user = dba::selectOne('user', $fields, ['uid' => $uid]); if (!DBM::is_result($user)) { return false; } - $owner = dba::select('contact', ['url'], ['self' => true, 'uid' => $uid], ['limit' => 1]); + $owner = dba::selectOne('contact', ['url'], ['self' => true, 'uid' => $uid]); if (!DBM::is_result($owner)) { return false; } diff --git a/include/identity.php b/include/identity.php index 11f2b7f5b3..91080b90c7 100644 --- a/include/identity.php +++ b/include/identity.php @@ -162,7 +162,7 @@ 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 = dba::select('contact', array('profile-id'), array('id' => $visitor['cid']), array('limit' => 1)); + $r = dba::selectOne('contact', ['profile-id'], ['id' => $visitor['cid']]); if (DBM::is_result($r)) { $profile = $r['profile-id']; } diff --git a/include/items.php b/include/items.php index 83f7f76a85..6bc3e20518 100644 --- a/include/items.php +++ b/include/items.php @@ -562,9 +562,9 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f // check for create date and expire time $expire_interval = Config::get('system', 'dbclean-expire-days', 0); - $r = dba::select('user', array('expire'), array('uid' => $uid), array("limit" => 1)); - if (DBM::is_result($r) && ($r['expire'] > 0) && (($r['expire'] < $expire_interval) || ($expire_interval == 0))) { - $expire_interval = $r['expire']; + $user = dba::selectOne('user', ['expire'], ['uid' => $uid]); + if (DBM::is_result($user) && ($user['expire'] > 0) && (($user['expire'] < $expire_interval) || ($expire_interval == 0))) { + $expire_interval = $user['expire']; } if (($expire_interval > 0) && !empty($arr['created'])) { @@ -1149,14 +1149,14 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f */ function item_set_last_item($arr) { // Unarchive the author - $contact = dba::select('contact', [], ['id' => $arr["author-link"]], ['limit' => 1]); + $contact = dba::selectOne('contact', [], ['id' => $arr["author-link"]]); if ($contact['term-date'] > NULL_DATE) { Contact::unmarkForArchival($contact); } // Unarchive the contact if it is a toplevel posting if ($arr["parent-uri"] === $arr["uri"]) { - $contact = dba::select('contact', [], ['id' => $arr["contact-id"]], ['limit' => 1]); + $contact = dba::selectOne('contact', [], ['id' => $arr["contact-id"]]); if ($contact['term-date'] > NULL_DATE) { Contact::unmarkForArchival($contact); } diff --git a/include/message.php b/include/message.php index 844a803c09..ef798a39e7 100644 --- a/include/message.php +++ b/include/message.php @@ -69,7 +69,7 @@ function send_message($recipient = 0, $body = '', $subject = '', $replyto = '') 'subject' => $subject, 'recips' => $handles); dba::insert('conv', $fields); - $r = dba::select('conv', array('id'), array('guid' => $conv_guid, 'uid' => local_user()), array('limit' => 1)); + $r = dba::selectOne('conv', ['id'], ['guid' => $conv_guid, 'uid' => local_user()]); if (DBM::is_result($r)) { $convid = $r['id']; } @@ -188,7 +188,7 @@ function send_wallmessage($recipient = '', $body = '', $subject = '', $replyto = 'subject' => $subject, 'recips' => $handles); dba::insert('conv', $fields); - $r = dba::select('conv', array('id'), array('guid' => $conv_guid, 'uid' => $recipient['uid']), array('limit' => 1)); + $r = dba::selectOne('conv', ['id'], ['guid' => $conv_guid, 'uid' => $recipient['uid']]); if (!DBM::is_result($r)) { logger('send message: conversation not found.'); return -4; diff --git a/include/nav.php b/include/nav.php index 1bc9a3ae1d..8f2f5dd70b 100644 --- a/include/nav.php +++ b/include/nav.php @@ -94,7 +94,7 @@ function nav_info(App $a) $nav['usermenu'][] = array('notes/', t('Personal notes'), '', t('Your personal notes')); // user info - $r = dba::select('contact', array('micro'), array('uid' => $a->user['uid'], 'self' => true), array('limit' => 1)); + $r = dba::selectOne('contact', ['micro'], ['uid' => $a->user['uid'], 'self' => true]); $userinfo = array( 'icon' => (DBM::is_result($r) ? $a->remove_baseurl($r['micro']) : 'images/person-48.jpg'), 'name' => $a->user['username'], diff --git a/include/session.php b/include/session.php index b1619e90f5..ba9ef46b26 100644 --- a/include/session.php +++ b/include/session.php @@ -33,7 +33,7 @@ function ref_session_read($id) return ''; } - $r = dba::select('session', array('data'), array('sid' => $id), array('limit' => 1)); + $r = dba::selectOne('session', ['data'], ['sid' => $id]); if (DBM::is_result($r)) { $session_exists = true; return $r['data']; diff --git a/include/tags.php b/include/tags.php index 50fe1e4909..96e8192be7 100644 --- a/include/tags.php +++ b/include/tags.php @@ -226,12 +226,7 @@ function wtagblock($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA $o = ''; $r = tagadelic($uid, $count, $owner_id, $flags, $type); if (count($r)) { - $contact = dba::select( - 'contact', - array('url'), - array('id' => $uid), - array('limit' => 1) - ); + $contact = dba::selectOne('contact', ['url'], ['id' => $uid]); $url = System::removedBaseUrl($contact['url']); foreach ($r as $rr) { diff --git a/index.php b/index.php index 711478fe1e..7f286f9a14 100644 --- a/index.php +++ b/index.php @@ -108,7 +108,7 @@ if (!$a->is_backend()) { */ if (x($_SESSION, 'authenticated') && !x($_SESSION, 'language')) { // we didn't loaded user data yet, but we need user language - $r = dba::select('user', array('language'), array('uid' => $_SESSION['uid']), array('limit' => 1)); + $r = dba::selectOne('user', ['language'], ['uid' => $_SESSION['uid']]); $_SESSION['language'] = $lang; if (DBM::is_result($r)) { $_SESSION['language'] = $r['language']; diff --git a/mod/admin.php b/mod/admin.php index 75e28e0fbc..952956440a 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -1551,8 +1551,8 @@ function admin_page_users(App $a) { if ($a->argc > 2) { $uid = $a->argv[3]; - $user = q("SELECT `username`, `blocked` FROM `user` WHERE `uid` = %d", intval($uid)); - if (count($user) == 0) { + $user = dba::selectOne('user', ['username', 'blocked'], ['uid' => $uid]); + if (DBM::is_result($user)) { notice('User not found' . EOL); goaway('admin/users'); return ''; // NOTREACHED @@ -1563,15 +1563,15 @@ function admin_page_users(App $a) // delete user User::remove($uid); - notice(t("User '%s' deleted", $user[0]['username']) . EOL); + notice(t("User '%s' deleted", $user['username']) . EOL); break; case "block": check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't'); q("UPDATE `user` SET `blocked` = %d WHERE `uid` = %s", - intval(1 - $user[0]['blocked']), + intval(1 - $user['blocked']), intval($uid) ); - notice(sprintf(($user[0]['blocked'] ? t("User '%s' unblocked") : t("User '%s' blocked")), $user[0]['username']) . EOL); + notice(sprintf(($user['blocked'] ? t("User '%s' unblocked") : t("User '%s' blocked")), $user['username']) . EOL); break; } goaway('admin/users'); diff --git a/mod/cal.php b/mod/cal.php index 4a6e2c9928..5cfa0466fe 100644 --- a/mod/cal.php +++ b/mod/cal.php @@ -32,16 +32,13 @@ function cal_init(App $a) if ($a->argc > 1) { $nick = $a->argv[1]; - $user = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", - dbesc($nick) - ); - - if (!count($user)) { + $user = dba::selectOne('user', [], ['nickname' => $nick, 'blocked' => false]); + if (!DBM::is_result($user)) { return; } - $a->data['user'] = $user[0]; - $a->profile_uid = $user[0]['uid']; + $a->data['user'] = $user; + $a->profile_uid = $user['uid']; // if it's a json request abort here becaus we don't // need the widget data diff --git a/mod/common.php b/mod/common.php index 1f1e8c3377..9521b61af6 100644 --- a/mod/common.php +++ b/mod/common.php @@ -63,19 +63,13 @@ function common_content(App $a) } if (!$cid && get_my_url()) { - /// @todo : Initialize $profile_uid - $r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1", - dbesc(normalise_link(get_my_url())), - intval($profile_uid) - ); - if (DBM::is_result($r)) { - $cid = $r[0]['id']; + $contact = dba::selectOne('contact', ['id'], ['nurl' => normalise_link(get_my_url()), 'uid' => $uid]); + if (DBM::is_result($contact)) { + $cid = $contact['id']; } else { - $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", - dbesc(normalise_link(get_my_url())) - ); - if (DBM::is_result($r)) { - $zcid = $r[0]['id']; + $gcontact = dba::selectOne('gcontact', ['id'], ['nurl' => normalise_link(get_my_url())]); + if (DBM::is_result($gcontact)) { + $zcid = $gcontact['id']; } } } diff --git a/mod/contacts.php b/mod/contacts.php index a63591713a..ab4641a99b 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -33,7 +33,7 @@ function contacts_init(App $a) $contact = []; if ((($a->argc == 2) && intval($a->argv[1])) || (($a->argc == 3) && intval($a->argv[1]) && ($a->argv[2] == "posts"))) { $contact_id = intval($a->argv[1]); - $contact = dba::select('contact', [], ['id' => $contact_id, 'uid' => local_user()], ['limit' => 1]); + $contact = dba::selectOne('contact', [], ['id' => $contact_id, 'uid' => local_user()]); } if (DBM::is_result($contact)) { @@ -222,7 +222,7 @@ function contacts_post(App $a) notice(t('Failed to update contact record.') . EOL); } - $contact = dba::select('contact', [], ['id' => $contact_id, 'uid' => local_user()], ['limit' => 1]); + $contact = dba::selectOne('contact', [], ['id' => $contact_id, 'uid' => local_user()]); if (DBM::is_result($contact)) { $a->data['contact'] = $contact; } @@ -233,7 +233,7 @@ function contacts_post(App $a) function _contact_update($contact_id) { - $contact = dba::select('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()], ['limit' => 1]); + $contact = dba::selectOne('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()]); if (!DBM::is_result($contact)) { return; } @@ -254,7 +254,7 @@ function _contact_update($contact_id) function _contact_update_profile($contact_id) { - $contact = dba::select('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()], ['limit' => 1]); + $contact = dba::selectOne('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()]); if (!DBM::is_result($contact)) { return; } @@ -389,7 +389,7 @@ function contacts_content(App $a) $cmd = $a->argv[2]; - $orig_record = dba::select('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'self' => false], ['limit' => 1]); + $orig_record = dba::selectOne('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'self' => false]); if (!DBM::is_result($orig_record)) { notice(t('Could not access contact record.') . EOL); goaway('contacts'); @@ -904,7 +904,7 @@ function contact_posts($a, $contact_id) { $o = contacts_tab($a, $contact_id, 1); - $contact = dba::select('contact', ['url'], ['id' => $contact_id], ['limit' => 1]); + $contact = dba::selectOne('contact', ['url'], ['id' => $contact_id]); if (DBM::is_result($contact)) { $a->page['aside'] = ""; profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"])); diff --git a/mod/display.php b/mod/display.php index 755c8b922e..8739af084c 100644 --- a/mod/display.php +++ b/mod/display.php @@ -202,7 +202,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { if ($update) { $item_id = $_REQUEST['item_id']; - $item = dba::select('item', ['uid', 'parent'], ['id' => $item_id], ['limit' => 1]); + $item = dba::selectOne('item', ['uid', 'parent'], ['id' => $item_id]); $a->profile = array('uid' => intval($item['uid']), 'profile_uid' => intval($item['uid'])); $item_parent = $item['parent']; } else { @@ -345,7 +345,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { $s = dba::inArray($r); if (local_user() && (local_user() == $a->profile['uid'])) { - $unseen = dba::select('item', array('id'), array('parent' => $s[0]['parent'], 'unseen' => true), array('limit' => 1)); + $unseen = dba::selectOne('item', ['id'], ['parent' => $s[0]['parent'], 'unseen' => true]); if (DBM::is_result($unseen)) { dba::update('item', array('unseen' => false), array('parent' => $s[0]['parent'], 'unseen' => true)); } diff --git a/mod/hovercard.php b/mod/hovercard.php index 29dfd26891..d6164ffb64 100644 --- a/mod/hovercard.php +++ b/mod/hovercard.php @@ -44,7 +44,7 @@ function hovercard_content() $cid = 0; if (local_user() && strpos($profileurl, 'redir/') === 0) { $cid = intval(substr($profileurl, 6)); - $r = dba::select('contact', array('nurl'), array('id' => $cid), array('limit' => 1)); + $r = dba::selectOne('contact', ['nurl'], ['id' => $cid]); $profileurl = defaults($r, 'nurl', ''); } diff --git a/mod/network.php b/mod/network.php index 8cebe73175..80ae9c539a 100644 --- a/mod/network.php +++ b/mod/network.php @@ -580,8 +580,8 @@ function networkThreadedView(App $a, $update = 0) { if ($cid) { // If $cid belongs to a communitity forum or a privat goup,.add a mention to the status editor - $condition = array("`id` = ? AND (`forum` OR `prv`)", $cid); - $contact = dba::select('contact', array('addr', 'nick'), $condition, array('limit' => 1)); + $condition = ["`id` = ? AND (`forum` OR `prv`)", $cid]; + $contact = dba::selectOne('contact', ['addr', 'nick'], $condition); if (DBM::is_result($contact)) { if ($contact["addr"] != '') { $content = "!".$contact["addr"]; @@ -632,7 +632,7 @@ function networkThreadedView(App $a, $update = 0) { $sql_nets = (($nets) ? sprintf(" and $sql_table.`network` = '%s' ", dbesc($nets)) : ''); if ($group) { - $r = dba::select('group', array('name'), array('id' => $group, 'uid' => $_SESSION['uid']), array('limit' => 1)); + $r = dba::selectOne('group', ['name'], ['id' => $group, 'uid' => $_SESSION['uid']]); if (!DBM::is_result($r)) { if ($update) killme(); @@ -647,7 +647,7 @@ function networkThreadedView(App $a, $update = 0) { $contact_str_self = ""; $contact_str = implode(',',$contacts); - $self = dba::select('contact', array('id'), array('uid' => $_SESSION['uid'], 'self' => true), array('limit' => 1)); + $self = dba::selectOne('contact', ['id'], ['uid' => $_SESSION['uid'], 'self' => true]); if (DBM::is_result($self)) { $contact_str_self = $self["id"]; } @@ -665,10 +665,10 @@ function networkThreadedView(App $a, $update = 0) { )) . $o; } elseif ($cid) { - $fields = array('id', 'name', 'network', 'writable', 'nurl', - 'forum', 'prv', 'contact-type', 'addr', 'thumb', 'location'); - $condition = array("`id` = ? AND (NOT `blocked` OR `pending`)", $cid); - $r = dba::select('contact', $fields, $condition, array('limit' => 1)); + $fields = ['id', 'name', 'network', 'writable', 'nurl', + 'forum', 'prv', 'contact-type', 'addr', 'thumb', 'location']; + $condition = ["`id` = ? AND (NOT `blocked` OR `pending`)", $cid]; + $r = dba::selectOne('contact', $fields, $condition); if (DBM::is_result($r)) { $sql_extra = " AND ".$sql_table.".`contact-id` = ".intval($cid); diff --git a/mod/noscrape.php b/mod/noscrape.php index 0269c3f77e..88ac52920e 100644 --- a/mod/noscrape.php +++ b/mod/noscrape.php @@ -67,14 +67,14 @@ function noscrape_init(App $a) { // We display the last activity (post or login), reduced to year and week number $last_active = 0; - $condition = array('uid' => $a->profile['uid'], 'self' => true); - $contact = dba::select('contact', array('last-item'), $condition, array('limit' => 1)); + $condition = ['uid' => $a->profile['uid'], 'self' => true]; + $contact = dba::selectOne('contact', ['last-item'], $condition); if (DBM::is_result($contact)) { $last_active = strtotime($contact['last-item']); } - $condition = array('uid' => $a->profile['uid']); - $user = dba::select('user', array('login_date'), $condition, array('limit' => 1)); + $condition = ['uid' => $a->profile['uid']]; + $user = dba::selectOne('user', ['login_date'], $condition); if (DBM::is_result($user)) { if ($last_active < strtotime($user['login_date'])) { $last_active = strtotime($user['login_date']); diff --git a/mod/proxy.php b/mod/proxy.php index e134565ce0..792d0ffbca 100644 --- a/mod/proxy.php +++ b/mod/proxy.php @@ -148,7 +148,7 @@ function proxy_init(App $a) { $r = array(); if (!$direct_cache && ($cachefile == '')) { - $r = dba::select('photo', array('data', 'desc'), array('resource-id' => $urlhash), array('limit' => 1)); + $r = dba::selectOne('photo', ['data', 'desc'], ['resource-id' => $urlhash]); if (DBM::is_result($r)) { $img_str = $r['data']; $mime = $r['desc']; diff --git a/mod/receive.php b/mod/receive.php index fcc898a0c0..01ba3be753 100644 --- a/mod/receive.php +++ b/mod/receive.php @@ -32,7 +32,7 @@ function receive_post(App $a) } $guid = $a->argv[2]; - $importer = dba::select('user', array(), array('guid' => $guid, 'account_expired' => false, 'account_removed' => false), array('limit' => 1)); + $importer = dba::selectOne('user', [], ['guid' => $guid, 'account_expired' => false, 'account_removed' => false]); if (!DBM::is_result($importer)) { http_status_exit(500); } diff --git a/mod/settings.php b/mod/settings.php index 10c57ff8b6..6138463593 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -997,7 +997,7 @@ function settings_content(App $a) require_once('include/acl_selectors.php'); - $profile = dba::select('profile', [], ['is-default' => true, 'uid' => local_user()], ['limit' => 1]); + $profile = dba::selectOne('profile', [], ['is-default' => true, 'uid' => local_user()]); if (!DBM::is_result($profile)) { notice(t('Unable to find your profile. Please contact your admin.') . EOL); return; diff --git a/mod/unfollow.php b/mod/unfollow.php index 046fdfe7d6..51439a9d0e 100644 --- a/mod/unfollow.php +++ b/mod/unfollow.php @@ -23,10 +23,10 @@ function unfollow_post(App $a) { $url = notags(trim($_REQUEST['url'])); $return_url = $_SESSION['return_url']; - $condition = array("`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", + $condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", $uid, CONTACT_IS_FRIEND, normalise_link($url), - normalise_link($url), $url, NETWORK_STATUSNET); - $contact = dba::select('contact', array(), $condition, array('limit' => 1)); + normalise_link($url), $url, NETWORK_STATUSNET]; + $contact = dba::selectOne('contact', [], $condition); if (!DBM::is_result($contact)) { notice(t("Contact wasn't found or can't be unfollowed.")); @@ -62,10 +62,10 @@ function unfollow_content(App $a) { $submit = t('Submit Request'); - $condition = array("`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", + $condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", local_user(), CONTACT_IS_FRIEND, normalise_link($url), - normalise_link($url), $url, NETWORK_STATUSNET); - $contact = dba::select('contact', array('url', 'network', 'addr', 'name'), $condition, array('limit' => 1)); + normalise_link($url), $url, NETWORK_STATUSNET]; + $contact = dba::selectOne('contact', ['url', 'network', 'addr', 'name'], $condition); if (!DBM::is_result($contact)) { notice(t("You aren't a friend of this contact.").EOL); diff --git a/mod/xrd.php b/mod/xrd.php index 363994a8d4..7b1af2a190 100644 --- a/mod/xrd.php +++ b/mod/xrd.php @@ -35,7 +35,7 @@ function xrd_init(App $a) $name = substr($local, 0, strpos($local, '@')); } - $r = dba::select('user', array(), array('nickname' => $name), array('limit' => 1)); + $r = dba::selectOne('user', [], ['nickname' => $name]); if (!DBM::is_result($r)) { killme(); } diff --git a/src/Content/OEmbed.php b/src/Content/OEmbed.php index 07c36685c3..814fd68b6f 100644 --- a/src/Content/OEmbed.php +++ b/src/Content/OEmbed.php @@ -57,9 +57,8 @@ class OEmbed $a = get_app(); - $condition = array('url' => normalise_link($embedurl)); - $r = dba::select('oembed', array('content'), $condition, array('limit' => 1)); - + $condition = ['url' => normalise_link($embedurl)]; + $r = dba::selectOne('oembed', ['content'], $condition); if (DBM::is_result($r)) { $txt = $r["content"]; } else { diff --git a/src/Core/Cache.php b/src/Core/Cache.php index e2673595c1..c65f416d79 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -109,7 +109,7 @@ class Cache // Frequently clear cache self::clear(); - $r = dba::select('cache', array('v'), array('k' => $key), array('limit' => 1)); + $r = dba::selectOne('cache', ['v'], ['k' => $key]); if (DBM::is_result($r)) { $cached = $r['v']; diff --git a/src/Core/Config.php b/src/Core/Config.php index 9a270511c5..459433852e 100644 --- a/src/Core/Config.php +++ b/src/Core/Config.php @@ -97,7 +97,7 @@ class Config } } - $ret = dba::select('config', array('v'), array('cat' => $family, 'k' => $key), array('limit' => 1)); + $ret = dba::selectOne('config', ['v'], ['cat' => $family, 'k' => $key]); if (DBM::is_result($ret)) { // manage array value $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret['v']) ? unserialize($ret['v']) : $ret['v']); diff --git a/src/Core/PConfig.php b/src/Core/PConfig.php index 4bc7193a0a..0acb930b74 100644 --- a/src/Core/PConfig.php +++ b/src/Core/PConfig.php @@ -90,7 +90,7 @@ class PConfig } } - $ret = dba::select('pconfig', array('v'), array('uid' => $uid, 'cat' => $family, 'k' => $key), array('limit' => 1)); + $ret = dba::selectOne('pconfig', ['v'], ['uid' => $uid, 'cat' => $family, 'k' => $key]); 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; diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 55e2b33a04..116d64e7cb 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -165,7 +165,7 @@ class Worker private static function highestPriority() { $condition = array("`executed` <= ? AND NOT `done`", NULL_DATE); - $s = dba::select('workerqueue', array('priority'), $condition, array('limit' => 1, 'order' => array('priority'))); + $s = dba::selectOne('workerqueue', ['priority'], $condition, ['order' => ['priority']]); if (DBM::is_result($s)) { return $s["priority"]; } else { @@ -772,9 +772,9 @@ class Worker // Are there waiting processes with a higher priority than the currently highest? $result = dba::select( 'workerqueue', - array('id'), - array("`executed` <= ? AND `priority` < ? AND NOT `done`", NULL_DATE, $highest_priority), - array('limit' => $limit, 'order' => array('priority', 'created'), 'only_query' => true) + ['id'], + ["`executed` <= ? AND `priority` < ? AND NOT `done`", NULL_DATE, $highest_priority], + ['limit' => $limit, 'order' => ['priority', 'created']] ); while ($id = dba::fetch($result)) { @@ -788,9 +788,9 @@ class Worker // Give slower processes some processing time $result = dba::select( 'workerqueue', - array('id'), - array("`executed` <= ? AND `priority` > ? AND NOT `done`", NULL_DATE, $highest_priority), - array('limit' => $limit, 'order' => array('priority', 'created'), 'only_query' => true) + ['id'], + ["`executed` <= ? AND `priority` > ? AND NOT `done`", NULL_DATE, $highest_priority], + ['limit' => $limit, 'order' => ['priority', 'created']] ); while ($id = dba::fetch($result)) { @@ -807,9 +807,9 @@ class Worker if (!$found) { $result = dba::select( 'workerqueue', - array('id'), - array("`executed` <= ? AND NOT `done`", NULL_DATE), - array('limit' => $limit, 'order' => array('priority', 'created'), 'only_query' => true) + ['id'], + ["`executed` <= ? AND NOT `done`", NULL_DATE], + ['limit' => $limit, 'order' => ['priority', 'created']] ); while ($id = dba::fetch($result)) { diff --git a/src/Model/Contact.php b/src/Model/Contact.php index b0f5ef9f24..bb8302e31d 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -103,7 +103,7 @@ class Contact extends BaseObject return true; } - $user = dba::select('user', ['uid', 'username', 'nickname'], ['uid' => $uid], ['limit' => 1]); + $user = dba::selectOne('user', ['uid', 'username', 'nickname'], ['uid' => $uid]); if (!DBM::is_result($user)) { return false; } @@ -145,7 +145,7 @@ class Contact extends BaseObject public static function remove($id) { // We want just to make sure that we don't delete our "self" contact - $r = dba::select('contact', array('uid'), array('id' => $id, 'self' => false), array('limit' => 1)); + $r = dba::selectOne('contact', ['uid'], ['id' => $id, 'self' => false]); if (!DBM::is_result($r) || !intval($r['uid'])) { return; @@ -490,7 +490,7 @@ class Contact extends BaseObject return $menu; } - $r = dba::select('contact', array(), array('nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid), array('limit' => 1)); + $r = dba::selectOne('contact', [], ['nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid]); if ($r) { return self::photoMenu($r, $uid); } else { @@ -653,18 +653,18 @@ class Contact extends BaseObject /// @todo Verify if we can't use Contact::getDetailsByUrl instead of the following // We first try the nurl (http://server.tld/nick), most common case - $contact = dba::select('contact', array('id', 'avatar-date'), array('nurl' => normalise_link($url), 'uid' => $uid), array('limit' => 1)); + $contact = dba::selectOne('contact', ['id', 'avatar-date'], ['nurl' => normalise_link($url), 'uid' => $uid]); // Then the addr (nick@server.tld) if (!DBM::is_result($contact)) { - $contact = dba::select('contact', array('id', 'avatar-date'), array('addr' => $url, 'uid' => $uid), array('limit' => 1)); + $contact = dba::selectOne('contact', ['id', 'avatar-date'], ['addr' => $url, 'uid' => $uid]); } // Then the alias (which could be anything) if (!DBM::is_result($contact)) { // The link could be provided as http although we stored it as https $ssl_url = str_replace('http://', 'https://', $url); - $r = dba::select('contact', array('id', 'avatar', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1)); + $r = dba::selectOne('contact', ['id', 'avatar', 'avatar-date'], ['`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid]); $contact = dba::fetch($r); dba::close($r); } @@ -697,7 +697,7 @@ class Contact extends BaseObject } // Get data from the gcontact table - $gcontacts = dba::select('gcontact', array('name', 'nick', 'url', 'photo', 'addr', 'alias', 'network'), array('nurl' => normalise_link($url)), array('limit' => 1)); + $gcontacts = dba::selectOne('gcontact', ['name', 'nick', 'url', 'photo', 'addr', 'alias', 'network'], ['nurl' => normalise_link($url)]); if (!DBM::is_result($gcontacts)) { return 0; } @@ -735,7 +735,7 @@ class Contact extends BaseObject $contact_id = $contacts[0]["id"]; // Update the newly created contact from data in the gcontact table - $gcontact = dba::select('gcontact', array('location', 'about', 'keywords', 'gender'), array('nurl' => normalise_link($data["url"])), array('limit' => 1)); + $gcontact = dba::selectOne('gcontact', ['location', 'about', 'keywords', 'gender'], ['nurl' => normalise_link($data["url"])]); if (DBM::is_result($gcontact)) { // Only use the information when the probing hadn't fetched these values if ($data['keywords'] != '') { @@ -758,8 +758,8 @@ class Contact extends BaseObject self::updateAvatar($data["photo"], $uid, $contact_id); - $fields = array('url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date', 'pubkey'); - $contact = dba::select('contact', $fields, array('id' => $contact_id), array('limit' => 1)); + $fields = ['url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date', 'pubkey']; + $contact = dba::selectOne('contact', $fields, ['id' => $contact_id]); // This condition should always be true if (!DBM::is_result($contact)) { @@ -817,7 +817,7 @@ class Contact extends BaseObject return false; } - $blocked = dba::select('contact', array('blocked'), array('id' => $cid), array('limit' => 1)); + $blocked = dba::selectOne('contact', ['blocked'], ['id' => $cid]); if (!DBM::is_result($blocked)) { return false; } @@ -837,7 +837,7 @@ class Contact extends BaseObject return false; } - $hidden = dba::select('contact', array('hidden'), array('id' => $cid), array('limit' => 1)); + $hidden = dba::selectOne('contact', ['hidden'], ['id' => $cid]); if (!DBM::is_result($hidden)) { return false; } @@ -980,7 +980,7 @@ class Contact extends BaseObject public static function updateAvatar($avatar, $uid, $cid, $force = false) { // Limit = 1 returns the row so no need for dba:inArray() - $r = dba::select('contact', array('avatar', 'photo', 'thumb', 'micro', 'nurl'), array('id' => $cid), array('limit' => 1)); + $r = dba::selectOne('contact', ['avatar', 'photo', 'thumb', 'micro', 'nurl'], ['id' => $cid]); if (!DBM::is_result($r)) { return false; } else { @@ -999,7 +999,7 @@ class Contact extends BaseObject // Update the public contact (contact id = 0) if ($uid != 0) { - $pcontact = dba::select('contact', array('id'), array('nurl' => $r[0]['nurl']), array('limit' => 1)); + $pcontact = dba::selectOne('contact', ['id'], ['nurl' => $r[0]['nurl']]); if (DBM::is_result($pcontact)) { self::updateAvatar($avatar, 0, $pcontact['id'], $force); } @@ -1023,7 +1023,7 @@ class Contact extends BaseObject This will reliably kill your communication with Friendica contacts. */ - $r = dba::select('contact', ['url', 'nurl', 'addr', 'alias', 'batch', 'notify', 'poll', 'poco', 'network'], ['id' => $id], ['limit' => 1]); + $r = dba::selectOne('contact', ['url', 'nurl', 'addr', 'alias', 'batch', 'notify', 'poll', 'poco', 'network'], ['id' => $id]); if (!DBM::is_result($r)) { return false; } @@ -1246,7 +1246,7 @@ class Contact extends BaseObject ); } - $r = dba::select('contact', ['url' => $ret['url'], 'network' => $ret['network'], 'uid' => $uid], ['limit' => 1]); + $r = dba::selectOne('contact', ['url' => $ret['url'], 'network' => $ret['network'], 'uid' => $uid]); if (!DBM::is_result($r)) { $result['message'] .= t('Unable to retrieve contact information.') . EOL; diff --git a/src/Model/GContact.php b/src/Model/GContact.php index 830f80e921..b09af69987 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -888,7 +888,7 @@ class GContact 'network', 'bd', 'gender', 'keywords', 'alias', 'contact-type', 'url', 'location', 'about'); - $old_contact = dba::select('contact', $fields, array('id' => $r[0]["id"]), array('limit' => 1)); + $old_contact = dba::selectOne('contact', $fields, ['id' => $r[0]["id"]]); // Update it with the current values $fields = array('name' => $contact['name'], 'nick' => $contact['nick'], diff --git a/src/Model/Group.php b/src/Model/Group.php index db9ec331e4..345a055eb4 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -39,7 +39,7 @@ class Group extends BaseObject // all the old members are gone, but the group remains so we don't break any security // access lists. What we're doing here is reviving the dead group, but old content which // was restricted to this group may now be seen by the new group members. - $group = dba::select('group', ['deleted'], ['id' => $gid], ['limit' => 1]); + $group = dba::selectOne('group', ['deleted'], ['id' => $gid]); if (DBM::is_result($group) && $group['deleted']) { dba::update('group', ['deleted' => 0], ['gid' => $gid]); notice(t('A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); @@ -120,7 +120,7 @@ class Group extends BaseObject return false; } - $group = dba::select('group', ['id'], ['uid' => $uid, 'name' => $name], ['limit' => 1]); + $group = dba::selectOne('group', ['id'], ['uid' => $uid, 'name' => $name]); if (DBM::is_result($group)) { return $group['id']; } @@ -139,13 +139,13 @@ class Group extends BaseObject return false; } - $group = dba::select('group', ['uid'], ['gid' => $gid], ['limit' => 1]); + $group = dba::selectOne('group', ['uid'], ['gid' => $gid]); if (!DBM::is_result($group)) { return false; } // remove group from default posting lists - $user = dba::select('user', ['def_gid', 'allow_gid', 'deny_gid'], ['uid' => $group['uid']], ['limit' => 1]); + $user = dba::selectOne('user', ['def_gid', 'allow_gid', 'deny_gid'], ['uid' => $group['uid']]); if (DBM::is_result($user)) { $change = false; diff --git a/src/Model/Photo.php b/src/Model/Photo.php index a25b2fa9d6..3156f5782b 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -38,14 +38,14 @@ class Photo */ public static function store(Image $Image, $uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '', $desc = '') { - $r = dba::select('photo', array('guid'), array("`resource-id` = ? AND `guid` != ?", $rid, ''), array('limit' => 1)); + $r = dba::selectOne('photo', ['guid'], ["`resource-id` = ? AND `guid` != ?", $rid, '']); if (DBM::is_result($r)) { $guid = $r['guid']; } else { $guid = get_guid(); } - $x = dba::select('photo', array('id'), array('resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale), array('limit' => 1)); + $x = dba::selectOne('photo', ['id'], ['resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale]); $fields = array( 'uid' => $uid, @@ -88,8 +88,8 @@ class Photo */ public static function importProfilePhoto($photo, $uid, $cid, $quit_on_error = false) { - $r = dba::select( - 'photo', array('resource-id'), array('uid' => $uid, 'contact-id' => $cid, 'scale' => 4, 'album' => 'Contact Photos'), array('limit' => 1) + $r = dba::selectOne( + 'photo', ['resource-id'], ['uid' => $uid, 'contact-id' => $cid, 'scale' => 4, 'album' => 'Contact Photos'] ); if (DBM::is_result($r) && strlen($r['resource-id'])) { diff --git a/src/Model/User.php b/src/Model/User.php index c6d6c044d5..927bcaa75f 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -84,7 +84,7 @@ class User return $default_group; } - $user = dba::select('user', ['def_gid'], ['uid' => $uid], ['limit' => 1]); + $user = dba::selectOne('user', ['def_gid'], ['uid' => $uid]); if (DBM::is_result($user)) { $default_group = $user["def_gid"]; @@ -112,16 +112,14 @@ class User if (is_object($user_info)) { $user = (array) $user_info; } elseif (is_int($user_info)) { - $user = dba::select('user', - ['uid', 'password'], + $user = dba::selectOne('user', ['uid', 'password'], [ 'uid' => $user_info, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1 - ], - ['limit' => 1] + ] ); } elseif (is_string($user_info)) { $user = dba::fetch_first('SELECT `uid`, `password` @@ -330,7 +328,7 @@ class User if ($insert_result) { $uid = dba::lastInsertId(); - $user = dba::select('user', [], ['uid' => $uid], ['limit' => 1]); + $user = dba::selectOne('user', [], ['uid' => $uid]); } else { throw new Exception(t('An error occurred during registration. Please try again.')); } @@ -532,7 +530,7 @@ class User logger('Removing user: ' . $uid); - $user = dba::select('user', [], ['uid' => $uid], ['limit' => 1]); + $user = dba::selectOne('user', [], ['uid' => $uid]); call_hooks('remove_user', $user); diff --git a/src/Module/Login.php b/src/Module/Login.php index b90ba9d1d4..5ab8bb904d 100644 --- a/src/Module/Login.php +++ b/src/Module/Login.php @@ -99,7 +99,7 @@ class Login extends BaseModule } else { $user_id = User::authenticate(trim($_POST['username']), trim($_POST['password'])); if ($user_id) { - $record = dba::select('user', [], ['uid' => $user_id], ['limit' => 1]); + $record = dba::selectOne('user', [], ['uid' => $user_id]); } } @@ -141,18 +141,15 @@ class Login extends BaseModule $data = json_decode($_COOKIE["Friendica"]); if (isset($data->uid)) { - $user = dba::select('user', - [], + $user = dba::selectOne('user', [], [ 'uid' => $data->uid, 'blocked' => false, 'account_expired' => false, 'account_removed' => false, 'verified' => true, - ], - ['limit' => 1] + ] ); - if (DBM::is_result($user)) { if ($data->hash != cookie_hash($user)) { logger("Hash for user " . $data->uid . " doesn't fit."); @@ -199,16 +196,14 @@ class Login extends BaseModule goaway(self::getApp()->get_baseurl()); } - $user = dba::select('user', - [], + $user = dba::selectOne('user', [], [ 'uid' => $_SESSION['uid'], 'blocked' => false, 'account_expired' => false, 'account_removed' => false, 'verified' => true, - ], - ['limit' => 1] + ] ); if (!DBM::is_result($user)) { nuke_session(); diff --git a/src/Network/FKOAuth1.php b/src/Network/FKOAuth1.php index ce2d4a6b8b..080e488ad5 100644 --- a/src/Network/FKOAuth1.php +++ b/src/Network/FKOAuth1.php @@ -40,7 +40,7 @@ class FKOAuth1 extends OAuthServer { logger("FKOAuth1::loginUser $uid"); $a = get_app(); - $record = dba::select('user', array(), array('uid' => $uid, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1), array('limit' => 1)); + $record = dba::selectOne('user', [], ['uid' => $uid, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1]); if (!DBM::is_result($record)) { logger('FKOAuth1::loginUser failure: ' . print_r($_SERVER, true), LOGGER_DEBUG); @@ -63,7 +63,7 @@ class FKOAuth1 extends OAuthServer $a->timezone = $a->user['timezone']; } - $r = dba::select('contact', array(), array('uid' => $_SESSION['uid'], 'self' => 1), array('limit' => 1)); + $r = dba::selectOne('contact', [], ['uid' => $_SESSION['uid'], 'self' => 1]); if (DBM::is_result($r)) { $a->contact = $r; diff --git a/src/Network/FKOAuthDataStore.php b/src/Network/FKOAuthDataStore.php index 424b6391ee..fe4dbdc163 100644 --- a/src/Network/FKOAuthDataStore.php +++ b/src/Network/FKOAuthDataStore.php @@ -88,7 +88,7 @@ class FKOAuthDataStore extends OAuthDataStore */ public function lookup_nonce($consumer, $token, $nonce, $timestamp) { - $r = dba::select('tokens', ['id', 'secret'], ['client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp], ['limit' => 1]); + $r = dba::selectOne('tokens', ['id', 'secret'], ['client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp]); if (DBM::is_result($r)) { return new \OAuthToken($r['id'], $r['secret']); diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 8912088cbb..fb2e091619 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -406,7 +406,7 @@ class Probe $condition = array('nurl' => normalise_link($data["url"])); - $old_fields = dba::select('gcontact', $fieldnames, $condition, array('limit' => 1)); + $old_fields = dba::selectOne('gcontact', $fieldnames, $condition); dba::update('gcontact', $fields, $condition, $old_fields); @@ -439,7 +439,7 @@ class Probe $condition = array('nurl' => normalise_link($data["url"]), 'self' => false, 'uid' => 0); - $old_fields = dba::select('contact', $fieldnames, $condition, array('limit' => 1)); + $old_fields = dba::selectOne('contact', $fieldnames, $condition); dba::update('contact', $fields, $condition, $old_fields); } diff --git a/src/Object/Post.php b/src/Object/Post.php index 9ef00949f4..0997f45afb 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -261,7 +261,7 @@ class Post extends BaseObject 'classundo' => $item['starred'] ? "" : "hidden", 'starred' => t('starred'), ); - $r = dba::select('thread', array('ignored'), array('uid' => $item['uid'], 'iid' => $item['id']), array('limit' => 1)); + $r = dba::selectOne('thread', ['ignored'], ['uid' => $item['uid'], 'iid' => $item['id']]); if (DBM::is_result($r)) { $ignore = array( 'do' => t("ignore thread"), diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 6b5f5d5769..7eae2373a3 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -2015,7 +2015,7 @@ class Diaspora // like on comments have the comment as parent. So we need to fetch the toplevel parent if ($parent_item["id"] != $parent_item["parent"]) { - $toplevel = dba::select('item', array('origin'), array('id' => $parent_item["parent"]), array('limit' => 1)); + $toplevel = dba::selectOne('item', ['origin'], ['id' => $parent_item["parent"]]); $origin = $toplevel["origin"]; } else { $origin = $parent_item["origin"]; @@ -2317,7 +2317,7 @@ class Diaspora $arr["last-child"] = 1; - $user = dba::select('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]], ['limit' => 1]); + $user = dba::selectOne('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]]); $arr["allow_cid"] = $user["allow_cid"]; $arr["allow_gid"] = $user["allow_gid"]; @@ -2741,7 +2741,7 @@ class Diaspora while ($item = dba::fetch($r)) { // Fetch the parent item - $parent = dba::select('item', array('author-link', 'origin'), array('id' => $item["parent"]), array('limit' => 1)); + $parent = dba::selectOne('item', ['author-link', 'origin'], ['id' => $item["parent"]]); // Only delete it if the parent author really fits if (!link_compare($parent["author-link"], $contact["url"]) && !link_compare($item["author-link"], $contact["url"])) { @@ -3255,7 +3255,7 @@ class Diaspora // If the item belongs to a user, we take this user id. if ($item['uid'] == 0) { $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]; - $first_user = dba::select('user', ['uid'], $condition, ['limit' => 1]); + $first_user = dba::selectOne('user', ['uid'], $condition); $owner = User::getOwnerDataById($first_user['uid']); } else { $owner = User::getOwnerDataById($item['uid']); diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index b12b5c9329..1bc8f513e0 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -254,7 +254,7 @@ class Feed { if (!$simulate) { $condition = ["`uid` = ? AND `uri` = ? AND `network` IN (?, ?)", $importer["uid"], $item["uri"], NETWORK_FEED, NETWORK_DFRN]; - $previous = dba::select('item', ['id'], $condition, ['limit' => 1]); + $previous = dba::selectOne('item', ['id'], $condition); if (DBM::is_result($previous)) { logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$previous["id"], LOGGER_DEBUG); continue; diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 1140f7a4e0..e5786f517b 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -70,9 +70,9 @@ class OStatus $found = false; if ($aliaslink != '') { - $condition = array("`uid` = ? AND `alias` = ? AND `network` != ?", - $importer["uid"], $aliaslink, NETWORK_STATUSNET); - $r = dba::select('contact', array(), $condition, array('limit' => 1)); + $condition = ["`uid` = ? AND `alias` = ? AND `network` != ?", + $importer["uid"], $aliaslink, NETWORK_STATUSNET]; + $r = dba::selectOne('contact', [], $condition); if (DBM::is_result($r)) { $found = true; @@ -89,9 +89,9 @@ class OStatus $aliaslink = $author["author-link"]; } - $condition = array("`uid` = ? AND `nurl` IN (?, ?) AND `network` != ?", $importer["uid"], - normalise_link($author["author-link"]), normalise_link($aliaslink), NETWORK_STATUSNET); - $r = dba::select('contact', array(), $condition, array('limit' => 1)); + $condition = ["`uid` = ? AND `nurl` IN (?, ?) AND `network` != ?", $importer["uid"], + normalise_link($author["author-link"]), normalise_link($aliaslink), NETWORK_STATUSNET]; + $r = dba::selectOne('contact', [], $condition); if (DBM::is_result($r)) { $found = true; @@ -104,9 +104,9 @@ class OStatus } if (!$found && ($addr != "")) { - $condition = array("`uid` = ? AND `addr` = ? AND `network` != ?", - $importer["uid"], $addr, NETWORK_STATUSNET); - $r = dba::select('contact', array(), $condition, array('limit' => 1)); + $condition = ["`uid` = ? AND `addr` = ? AND `network` != ?", + $importer["uid"], $addr, NETWORK_STATUSNET]; + $r = dba::selectOne('contact', [], $condition); if (DBM::is_result($r)) { $found = true; @@ -207,8 +207,8 @@ class OStatus $cid = Contact::getIdForURL($aliaslink, 0); if ($cid) { - $fields = array('url', 'nurl', 'name', 'nick', 'alias', 'about', 'location'); - $old_contact = dba::select('contact', $fields, array('id' => $cid), array('limit' => 1)); + $fields = ['url', 'nurl', 'name', 'nick', 'alias', 'about', 'location']; + $old_contact = dba::selectOne('contact', $fields, ['id' => $cid]); // Update it with the current values $fields = array('url' => $author["author-link"], 'name' => $contact["name"], @@ -541,8 +541,8 @@ class OStatus */ private static function deleteNotice($item) { - $condition = array('uid' => $item['uid'], 'author-link' => $item['author-link'], 'uri' => $item['uri']); - $deleted = dba::select('item', array('id', 'parent-uri'), $condition, array('limit' => 1)); + $condition = ['uid' => $item['uid'], 'author-link' => $item['author-link'], 'uri' => $item['uri']]; + $deleted = dba::selectOne('item', ['id', 'parent-uri'], $condition); if (!DBM::is_result($deleted)) { logger('Item from '.$item['author-link'].' with uri '.$item['uri'].' for user '.$item['uid']." wasn't found. We don't delete it. "); return; @@ -895,8 +895,8 @@ class OStatus */ private static function fetchRelated($related, $related_uri, $importer) { - $condition = array('`item-uri` = ? AND `protocol` IN (?, ?)', $related_uri, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON); - $conversation = dba::select('conversation', array('source', 'protocol'), $condition, array('limit' => 1)); + $condition = ['`item-uri` = ? AND `protocol` IN (?, ?)', $related_uri, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON]; + $conversation = dba::selectOne('conversation', ['source', 'protocol'], $condition); if (DBM::is_result($conversation)) { $stored = true; $xml = $conversation['source']; @@ -975,8 +975,8 @@ class OStatus // Finally we take the data that we fetched from "ostatus:conversation" if ($xml == '') { - $condition = array('item-uri' => $related_uri, 'protocol' => PROTOCOL_SPLITTED_CONV); - $conversation = dba::select('conversation', array('source'), $condition, array('limit' => 1)); + $condition = ['item-uri' => $related_uri, 'protocol' => PROTOCOL_SPLITTED_CONV]; + $conversation = dba::selectOne('conversation', ['source'], $condition); if (DBM::is_result($conversation)) { $stored = true; logger('Got cached XML from conversation for URI '.$related_uri, LOGGER_DEBUG); diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 1ff0594ca6..7685826ba1 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -66,7 +66,7 @@ class PortableContact if ($cid) { if (!$url || !$uid) { - $r = dba::select('contact', ['poco', 'uid'], ['id' => $cid], ['limit' => 1]); + $r = dba::selectOne('contact', ['poco', 'uid'], ['id' => $cid]); if (DBM::is_result($r)) { $url = $r['poco']; $uid = $r['uid']; @@ -813,7 +813,7 @@ class PortableContact return false; } - $servers = dba::select('gserver', [], ['nurl' => normalise_link($server_url)], ['limit' => 1]); + $servers = dba::selectOne('gserver', [], ['nurl' => normalise_link($server_url)]); if (DBM::is_result($servers)) { if ($servers["created"] <= NULL_DATE) { $fields = ['created' => datetime_convert()]; diff --git a/src/Util/ExAuth.php b/src/Util/ExAuth.php index b030169d8c..777d410551 100644 --- a/src/Util/ExAuth.php +++ b/src/Util/ExAuth.php @@ -226,7 +226,7 @@ class ExAuth if ($a->get_hostname() == $aCommand[2]) { $this->writeLog(LOG_INFO, 'internal auth for ' . $sUser . '@' . $aCommand[2]); - $aUser = dba::select('user', ['uid', 'password'], ['nickname' => $sUser], ['limit' => 1]); + $aUser = dba::selectOne('user', ['uid', 'password'], ['nickname' => $sUser]); if (DBM::is_result($aUser)) { $uid = $aUser['uid']; $success = User::authenticate($aUser, $aCommand[3]); diff --git a/src/Util/Lock.php b/src/Util/Lock.php index 87590c295b..166239a78e 100644 --- a/src/Util/Lock.php +++ b/src/Util/Lock.php @@ -126,7 +126,7 @@ class Lock do { dba::lock('locks'); - $lock = dba::select('locks', array('locked', 'pid'), array('name' => $fn_name), array('limit' => 1)); + $lock = dba::selectOne('locks', ['locked', 'pid'], ['name' => $fn_name]); if (DBM::is_result($lock)) { if ($lock['locked']) { diff --git a/src/Worker/Expire.php b/src/Worker/Expire.php index e963d6d351..f48680fb58 100644 --- a/src/Worker/Expire.php +++ b/src/Worker/Expire.php @@ -39,7 +39,7 @@ class Expire { } return; } elseif (intval($param) > 0) { - $user = dba::select('user', array('uid', 'username', 'expire'), array('uid' => $param), array('limit' => 1)); + $user = dba::selectOne('user', ['uid', 'username', 'expire'], ['uid' => $param]); if (DBM::is_result($user)) { logger('Expire items for user '.$user['uid'].' ('.$user['username'].') - interval: '.$user['expire'], LOGGER_DEBUG); item_expire($user['uid'], $user['expire']); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 5c86a95efe..50ac15200c 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -265,9 +265,9 @@ class Notifier { ($owner['id'] != $target_item['contact-id']) && ($target_item['uri'] === $target_item['parent-uri'])) { - $fields = array('forum', 'prv'); - $condition = array('id' => $target_item['contact-id']); - $contact = dba::select('contact', $fields, $condition, array('limit' => 1)); + $fields = ['forum', 'prv']; + $condition = ['id' => $target_item['contact-id']]; + $contact = dba::selectOne('contact', $fields, $condition); if (!DBM::is_result($contact)) { // Should never happen return false; diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index a527bf0da1..f53c392c5a 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -42,7 +42,7 @@ Class OnePoll $d = datetime_convert(); - $contact = dba::select('contact', [], ['id' => $contact_id], ['limit' => 1]); + $contact = dba::selectOne('contact', [], ['id' => $contact_id]); if (!DBM::is_result($contact)) { logger('Contact not found or cannot be used.'); return; @@ -339,14 +339,14 @@ Class OnePoll logger("Mail: Enabled", LOGGER_DEBUG); $mbox = null; - $x = dba::select('user', array('prvkey'), array('uid' => $importer_uid), array('limit' => 1)); + $user = dba::selectOne('user', ['prvkey'], ['uid' => $importer_uid]); - $condition = array("`server` != '' AND `uid` = ?", $importer_uid); - $mailconf = dba::select('mailacct', array(), $condition, array('limit' => 1)); - if (DBM::is_result($x) && DBM::is_result($mailconf)) { + $condition = ["`server` != '' AND `uid` = ?", $importer_uid]; + $mailconf = dba::selectOne('mailacct', [], $condition); + if (DBM::is_result($user) && DBM::is_result($mailconf)) { $mailbox = Email::constructMailboxName($mailconf); $password = ''; - openssl_private_decrypt(hex2bin($mailconf['pass']), $password, $x['prvkey']); + openssl_private_decrypt(hex2bin($mailconf['pass']), $password, $user['prvkey']); $mbox = Email::connect($mailbox, $mailconf['user'], $password); unset($password); logger("Mail: Connect to " . $mailconf['user']); @@ -382,9 +382,9 @@ Class OnePoll $datarray['uri'] = Email::msgid2iri(trim($meta->message_id, '<>')); // Have we seen it before? - $fields = array('deleted', 'id'); - $condition = array('uid' => $importer_uid, 'uri' => $datarray['uri']); - $r = dba::select('item', $fields, $condition, array('limit' => 1)); + $fields = ['deleted', 'id']; + $condition = ['uid' => $importer_uid, 'uri' => $datarray['uri']]; + $r = dba::selectOne('item', $fields, $condition); if (DBM::is_result($r)) { logger("Mail: Seen before ".$msg_uid." for ".$mailconf['user']." UID: ".$importer_uid." URI: ".$datarray['uri'],LOGGER_DEBUG); diff --git a/src/Worker/Queue.php b/src/Worker/Queue.php index 179e37c077..6adc32b834 100644 --- a/src/Worker/Queue.php +++ b/src/Worker/Queue.php @@ -80,7 +80,7 @@ class Queue $q_item = $r[0]; - $contact = dba::select('contact', [], ['id' => $q_item['cid']], ['limit' => 1]); + $contact = dba::selectOne('contact', [], ['id' => $q_item['cid']]); if (!DBM::is_result($contact)) { remove_queue_item($q_item['id']); return; @@ -113,7 +113,7 @@ class Queue } } - $user = dba::select('user', [], ['uid' => $contact['uid']], ['limit' => 1]); + $user = dba::selectOne('user', [], ['uid' => $contact['uid']]); if (!DBM::is_result($user)) { remove_queue_item($q_item['id']); return; diff --git a/util/global_community_silence.php b/util/global_community_silence.php index e6c936f0dd..4a324dd744 100755 --- a/util/global_community_silence.php +++ b/util/global_community_silence.php @@ -57,7 +57,7 @@ if (in_array($net['network'], array(NETWORK_PHANTOM, NETWORK_MAIL))) { exit(1); } $nurl = normalise_link($net['url']); -$r = dba::select("contact", array("id"), array("nurl" => $nurl, "uid" => 0), array("limit" => 1)); +$r = dba::selectOne("contact", ["id"], ["nurl" => $nurl, "uid" => 0]); if (DBM::is_result($r)) { dba::update("contact", array("hidden" => true), array("id" => $r["id"])); echo "NOTICE: The account should be silenced from the global community page\r\n"; From c7a7658316b08ba9da28e1e8b4c3c02fabb4de16 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 9 Jan 2018 22:20:58 -0500 Subject: [PATCH 2/5] Fix documentation in include/dba --- include/dba.php | 27 ++++++++++++++------------- mod/admin.php | 2 -- mod/cal.php | 2 +- mod/xrd.php | 3 ++- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/include/dba.php b/include/dba.php index 3a72d59649..2b8d3d7fc7 100644 --- a/include/dba.php +++ b/include/dba.php @@ -313,7 +313,7 @@ class dba { * For all regular queries please use dba::select or dba::exists * * @param string $sql SQL statement - * @return object statement object + * @return bool|object statement object */ public static function p($sql) { $a = get_app(); @@ -586,10 +586,11 @@ class dba { } /** + * Fetches the first row + * + * Please use dba::selectOne or dba::exists whenever this is possible. + * * @brief Fetches the first row - * - * Please use dba::select or dba::exists whenever this is possible. - * * @param string $sql SQL statement * @return array first row of query */ @@ -639,7 +640,7 @@ class dba { /** * @brief Returns the number of rows of a statement * - * @param object Statement object + * @param PDOStatement|mysqli_result|mysqli_stmt Statement object * @return int Number of rows */ public static function num_rows($stmt) { @@ -658,7 +659,7 @@ class dba { /** * @brief Fetch a single row * - * @param object $stmt statement object + * @param PDOStatement|mysqli_result|mysqli_stmt $stmt statement object * @return array current row */ public static function fetch($stmt) { @@ -1111,12 +1112,12 @@ class dba { /** * @brief Select rows from a table * - * @param string $table Table name - * @param array $fields array of selected fields - * @param array $condition array of fields for condition - * @param array $params array of several parameters + * @param string $table Table name + * @param array $fields Array of selected fields, empty for all + * @param array $condition Array of fields for condition + * @param array $params Array of several parameters * - * @return boolean|object If "limit" is equal "1" only a single row is returned, else a query object is returned + * @return boolean|object * * Example: * $table = "item"; @@ -1126,7 +1127,7 @@ class dba { * or: * $condition = array("`uid` = ? AND `network` IN (?, ?)", 1, 'dfrn', 'dspr'); * - * $params = array("order" => array("id", "received" => true), "limit" => 1); + * $params = array("order" => array("id", "received" => true), "limit" => 10); * * $data = dba::select($table, $fields, $condition, $params); */ @@ -1280,7 +1281,7 @@ class dba { * @brief Closes the current statement * * @param object $stmt statement object - * @return boolean was the close successfull? + * @return boolean was the close successful? */ public static function close($stmt) { if (!is_object($stmt)) { diff --git a/mod/admin.php b/mod/admin.php index 952956440a..0146b954f7 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -1625,8 +1625,6 @@ function admin_page_users(App $a) ORDER BY $sql_order $sql_order_direction LIMIT %d, %d", intval($a->pager['start']), intval($a->pager['itemspage']) ); - //echo "
$users"; killme();
-
 	$adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
 	$_setup_users = function ($e) use ($adminlist) {
 		$accounts = array(
diff --git a/mod/cal.php b/mod/cal.php
index 5cfa0466fe..cc1708352e 100644
--- a/mod/cal.php
+++ b/mod/cal.php
@@ -6,10 +6,10 @@
  * 	This calendar is for profile visitors and contains only the events
  * 	of the profile owner
  */
+
 use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Core\Config;
-use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
diff --git a/mod/xrd.php b/mod/xrd.php
index 7b1af2a190..871f24481d 100644
--- a/mod/xrd.php
+++ b/mod/xrd.php
@@ -29,8 +29,9 @@ function xrd_init(App $a)
 		$name = ltrim(basename($uri), '~');
 	} else {
 		$local = str_replace('acct:', '', $uri);
-		if (substr($local, 0, 2) == '//')
+		if (substr($local, 0, 2) == '//') {
 			$local = substr($local, 2);
+		}
 
 		$name = substr($local, 0, strpos($local, '@'));
 	}

From ae66bcaff3c01d10fb8bee04201b692c1fae9032 Mon Sep 17 00:00:00 2001
From: Hypolite Petovan 
Date: Wed, 10 Jan 2018 08:36:02 -0500
Subject: [PATCH 3/5] Rename selectOne to selectFirst

---
 include/api.php                   |   8 +-
 include/contact_widgets.php       |   4 +-
 include/conversation.php          |   4 +-
 include/dba.php                   |   4 +-
 include/enotify.php               |   8 +-
 include/identity.php              |   2 +-
 include/items.php                 |   6 +-
 include/message.php               |   4 +-
 include/nav.php                   |   2 +-
 include/session.php               |   2 +-
 include/tags.php                  |   2 +-
 index.php                         |   2 +-
 mod/admin.php                     |   2 +-
 mod/cal.php                       |   2 +-
 mod/common.php                    |   4 +-
 mod/contacts.php                  |  12 +-
 mod/display.php                   |   4 +-
 mod/hovercard.php                 |   2 +-
 mod/network.php                   |   8 +-
 mod/noscrape.php                  |   4 +-
 mod/proxy.php                     |   2 +-
 mod/receive.php                   |   2 +-
 mod/settings.php                  |   2 +-
 mod/unfollow.php                  |   4 +-
 mod/xrd.php                       |   2 +-
 src/Content/OEmbed.php            | 808 +++++++++++++++---------------
 src/Core/Cache.php                |   2 +-
 src/Core/Config.php               |   2 +-
 src/Core/PConfig.php              |   2 +-
 src/Core/Worker.php               |   2 +-
 src/Model/Contact.php             |  30 +-
 src/Model/GContact.php            |   2 +-
 src/Model/Group.php               |   8 +-
 src/Model/Photo.php               |   6 +-
 src/Model/User.php                |   8 +-
 src/Module/Login.php              | 612 +++++++++++-----------
 src/Network/FKOAuth1.php          |   4 +-
 src/Network/FKOAuthDataStore.php  |   2 +-
 src/Network/Probe.php             |   4 +-
 src/Object/Post.php               |   2 +-
 src/Protocol/Diaspora.php         |   8 +-
 src/Protocol/Feed.php             |   2 +-
 src/Protocol/OStatus.php          |  14 +-
 src/Protocol/PortableContact.php  |   4 +-
 src/Util/ExAuth.php               |   2 +-
 src/Util/Lock.php                 |   2 +-
 src/Worker/Expire.php             |   2 +-
 src/Worker/Notifier.php           |   2 +-
 src/Worker/OnePoll.php            |   8 +-
 src/Worker/Queue.php              |   4 +-
 util/global_community_silence.php |   2 +-
 51 files changed, 821 insertions(+), 821 deletions(-)

diff --git a/include/api.php b/include/api.php
index 16d18a37ca..36e38a86e1 100644
--- a/include/api.php
+++ b/include/api.php
@@ -222,7 +222,7 @@ function api_login(App $a)
 	} else {
 		$user_id = User::authenticate(trim($user), trim($password));
 		if ($user_id) {
-			$record = dba::selectOne('user', [], ['uid' => $user_id]);
+			$record = dba::selectFirst('user', [], ['uid' => $user_id]);
 		}
 	}
 
@@ -473,7 +473,7 @@ function api_rss_extra(App $a, $arr, $user_info)
  */
 function api_unique_id_to_nurl($id)
 {
-	$r = dba::selectOne('contact', array('nurl'), array('uid' => 0, 'id' => $id));
+	$r = dba::selectFirst('contact', array('nurl'), array('uid' => 0, 'id' => $id));
 
 	if (DBM::is_result($r)) {
 		return $r["nurl"];
@@ -792,7 +792,7 @@ function api_get_user(App $a, $contact_id = null)
 
 	// If this is a local user and it uses Frio, we can get its color preferences.
 	if ($ret['self']) {
-		$theme_info = dba::selectOne('user', ['theme'], ['uid' => $ret['uid']]);
+		$theme_info = dba::selectFirst('user', ['theme'], ['uid' => $ret['uid']]);
 		if ($theme_info['theme'] === 'frio') {
 			$schema = PConfig::get($ret['uid'], 'frio', 'schema');
 			if ($schema && ($schema != '---')) {
@@ -4870,7 +4870,7 @@ function api_friendica_remoteauth()
 
 	// traditional DFRN
 
-	$r = dba::selectOne('contact', [], ['uid' => api_user(), 'nurl' => $c_url]);
+	$r = dba::selectFirst('contact', [], ['uid' => api_user(), 'nurl' => $c_url]);
 
 	if (!DBM::is_result($r) || ($r['network'] !== NETWORK_DFRN)) {
 		throw new BadRequestException("Unknown contact");
diff --git a/include/contact_widgets.php b/include/contact_widgets.php
index 4f84ce1039..cc25c88ed5 100644
--- a/include/contact_widgets.php
+++ b/include/contact_widgets.php
@@ -224,12 +224,12 @@ function common_friends_visitor_widget($profile_uid)
 
 	if (!$cid) {
 		if (get_my_url()) {
-			$r = dba::selectOne('contact', ['id'],
+			$r = dba::selectFirst('contact', ['id'],
 					['nurl' => normalise_link(get_my_url()), 'uid' => $profile_uid]);
 			if (DBM::is_result($r)) {
 				$cid = $r['id'];
 			} else {
-				$r = dba::selectOne('gcontact', ['id'], ['nurl' => normalise_link(get_my_url())]);
+				$r = dba::selectFirst('gcontact', ['id'], ['nurl' => normalise_link(get_my_url())]);
 				if (DBM::is_result($r)) {
 					$zcid = $r['id'];
 				}
diff --git a/include/conversation.php b/include/conversation.php
index 746a8a8913..228e90598b 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -968,7 +968,7 @@ function best_link_url($item, &$sparkle, $url = '') {
 	$clean_url = normalise_link($item['author-link']);
 
 	if (local_user()) {
-		$r = dba::selectOne('contact', ['id'],
+		$r = dba::selectFirst('contact', ['id'],
 			['network' => NETWORK_DFRN, 'uid' => local_user(), 'nurl' => normalise_link($clean_url), 'pending' => false]);
 		if (DBM::is_result($r)) {
 			$best_url = 'redir/' . $r['id'];
@@ -1019,7 +1019,7 @@ function item_photo_menu($item) {
 	$cid = 0;
 	$network = '';
 	$rel = 0;
-	$r = dba::selectOne('contact', array('id', 'network', 'rel'), array('uid' => local_user(), 'nurl' => normalise_link($item['author-link'])));
+	$r = dba::selectFirst('contact', array('id', 'network', 'rel'), array('uid' => local_user(), 'nurl' => normalise_link($item['author-link'])));
 	if (DBM::is_result($r)) {
 		$cid = $r['id'];
 		$network = $r['network'];
diff --git a/include/dba.php b/include/dba.php
index 2b8d3d7fc7..293bfdc002 100644
--- a/include/dba.php
+++ b/include/dba.php
@@ -1047,7 +1047,7 @@ class dba {
 		if (is_bool($old_fields)) {
 			$do_insert = $old_fields;
 
-			$old_fields = self::selectOne($table, [], $condition);
+			$old_fields = self::selectFirst($table, [], $condition);
 
 			if (is_bool($old_fields)) {
 				if ($do_insert) {
@@ -1095,7 +1095,7 @@ class dba {
 	 * @return bool|array
 	 * @see dba::select
 	 */
-	public static function selectOne($table, array $fields = [], array $condition = [], $params = [])
+	public static function selectFirst($table, array $fields = [], array $condition = [], $params = [])
 	{
 		$params['limit'] = 1;
 		$result = self::select($table, $fields, $condition, $params);
diff --git a/include/enotify.php b/include/enotify.php
index 70f1c3131c..e128ae9bed 100644
--- a/include/enotify.php
+++ b/include/enotify.php
@@ -106,7 +106,7 @@ function notification($params)
 	}
 
 	if ($params['type'] == NOTIFY_COMMENT) {
-		$p = dba::selectOne('thread', ['ignored'], ['iid' => $parent_id]);
+		$p = dba::selectFirst('thread', ['ignored'], ['iid' => $parent_id]);
 		if (DBM::is_result($p) && $p["ignored"]) {
 			logger("Thread ".$parent_id." will be ignored", LOGGER_DEBUG);
 			return;
@@ -131,7 +131,7 @@ function notification($params)
 		$p = null;
 
 		if ($params['otype'] === 'item' && $parent_id) {
-			$p = dba::selectOne('item', [], ['id' => $parent_id]);
+			$p = dba::selectFirst('item', [], ['id' => $parent_id]);
 		}
 
 		$item_post_type = item_post_type($p);
@@ -672,12 +672,12 @@ function check_item_notification($itemid, $uid, $defaulttype = "") {
 	$profiles = $notification_data["profiles"];
 
 	$fields = ['notify-flags', 'language', 'username', 'email', 'nickname'];
-	$user = dba::selectOne('user', $fields, ['uid' => $uid]);
+	$user = dba::selectFirst('user', $fields, ['uid' => $uid]);
 	if (!DBM::is_result($user)) {
 		return false;
 	}
 
-	$owner = dba::selectOne('contact', ['url'], ['self' => true, 'uid' => $uid]);
+	$owner = dba::selectFirst('contact', ['url'], ['self' => true, 'uid' => $uid]);
 	if (!DBM::is_result($owner)) {
 		return false;
 	}
diff --git a/include/identity.php b/include/identity.php
index 91080b90c7..0c62245942 100644
--- a/include/identity.php
+++ b/include/identity.php
@@ -162,7 +162,7 @@ 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 = dba::selectOne('contact', ['profile-id'], ['id' => $visitor['cid']]);
+				$r = dba::selectFirst('contact', ['profile-id'], ['id' => $visitor['cid']]);
 				if (DBM::is_result($r)) {
 					$profile = $r['profile-id'];
 				}
diff --git a/include/items.php b/include/items.php
index 6bc3e20518..f1ce70d46b 100644
--- a/include/items.php
+++ b/include/items.php
@@ -562,7 +562,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
 	// check for create date and expire time
 	$expire_interval = Config::get('system', 'dbclean-expire-days', 0);
 
-	$user = dba::selectOne('user', ['expire'], ['uid' => $uid]);
+	$user = dba::selectFirst('user', ['expire'], ['uid' => $uid]);
 	if (DBM::is_result($user) && ($user['expire'] > 0) && (($user['expire'] < $expire_interval) || ($expire_interval == 0))) {
 		$expire_interval = $user['expire'];
 	}
@@ -1149,14 +1149,14 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
  */
 function item_set_last_item($arr) {
 	// Unarchive the author
-	$contact = dba::selectOne('contact', [], ['id' => $arr["author-link"]]);
+	$contact = dba::selectFirst('contact', [], ['id' => $arr["author-link"]]);
 	if ($contact['term-date'] > NULL_DATE) {
 		 Contact::unmarkForArchival($contact);
 	}
 
 	// Unarchive the contact if it is a toplevel posting
 	if ($arr["parent-uri"] === $arr["uri"]) {
-		$contact = dba::selectOne('contact', [], ['id' => $arr["contact-id"]]);
+		$contact = dba::selectFirst('contact', [], ['id' => $arr["contact-id"]]);
 		if ($contact['term-date'] > NULL_DATE) {
 			 Contact::unmarkForArchival($contact);
 		}
diff --git a/include/message.php b/include/message.php
index ef798a39e7..189de2aef9 100644
--- a/include/message.php
+++ b/include/message.php
@@ -69,7 +69,7 @@ function send_message($recipient = 0, $body = '', $subject = '', $replyto = '')
 			'subject' => $subject, 'recips' => $handles);
 		dba::insert('conv', $fields);
 
-		$r = dba::selectOne('conv', ['id'], ['guid' => $conv_guid, 'uid' => local_user()]);
+		$r = dba::selectFirst('conv', ['id'], ['guid' => $conv_guid, 'uid' => local_user()]);
 		if (DBM::is_result($r)) {
 			$convid = $r['id'];
 		}
@@ -188,7 +188,7 @@ function send_wallmessage($recipient = '', $body = '', $subject = '', $replyto =
 		'subject' => $subject, 'recips' => $handles);
 	dba::insert('conv', $fields);
 
-	$r = dba::selectOne('conv', ['id'], ['guid' => $conv_guid, 'uid' => $recipient['uid']]);
+	$r = dba::selectFirst('conv', ['id'], ['guid' => $conv_guid, 'uid' => $recipient['uid']]);
 	if (!DBM::is_result($r)) {
 		logger('send message: conversation not found.');
 		return -4;
diff --git a/include/nav.php b/include/nav.php
index 8f2f5dd70b..ac76dd5aaa 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -94,7 +94,7 @@ function nav_info(App $a)
 		$nav['usermenu'][] = array('notes/', t('Personal notes'), '', t('Your personal notes'));
 
 		// user info
-		$r = dba::selectOne('contact', ['micro'], ['uid' => $a->user['uid'], 'self' => true]);
+		$r = dba::selectFirst('contact', ['micro'], ['uid' => $a->user['uid'], 'self' => true]);
 		$userinfo = array(
 			'icon' => (DBM::is_result($r) ? $a->remove_baseurl($r['micro']) : 'images/person-48.jpg'),
 			'name' => $a->user['username'],
diff --git a/include/session.php b/include/session.php
index ba9ef46b26..cf51518f20 100644
--- a/include/session.php
+++ b/include/session.php
@@ -33,7 +33,7 @@ function ref_session_read($id)
 		return '';
 	}
 
-	$r = dba::selectOne('session', ['data'], ['sid' => $id]);
+	$r = dba::selectFirst('session', ['data'], ['sid' => $id]);
 	if (DBM::is_result($r)) {
 		$session_exists = true;
 		return $r['data'];
diff --git a/include/tags.php b/include/tags.php
index 96e8192be7..02091f169d 100644
--- a/include/tags.php
+++ b/include/tags.php
@@ -226,7 +226,7 @@ function wtagblock($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA
 	$o = '';
 	$r = tagadelic($uid, $count, $owner_id, $flags, $type);
 	if (count($r)) {
-		$contact = dba::selectOne('contact', ['url'], ['id' => $uid]);
+		$contact = dba::selectFirst('contact', ['url'], ['id' => $uid]);
 		$url = System::removedBaseUrl($contact['url']);
 
 		foreach ($r as $rr) {
diff --git a/index.php b/index.php
index 7f286f9a14..f966279940 100644
--- a/index.php
+++ b/index.php
@@ -108,7 +108,7 @@ if (!$a->is_backend()) {
  */
 if (x($_SESSION, 'authenticated') && !x($_SESSION, 'language')) {
 	// we didn't loaded user data yet, but we need user language
-	$r = dba::selectOne('user', ['language'], ['uid' => $_SESSION['uid']]);
+	$r = dba::selectFirst('user', ['language'], ['uid' => $_SESSION['uid']]);
 	$_SESSION['language'] = $lang;
 	if (DBM::is_result($r)) {
 		$_SESSION['language'] = $r['language'];
diff --git a/mod/admin.php b/mod/admin.php
index 0146b954f7..e7463a3609 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -1551,7 +1551,7 @@ function admin_page_users(App $a)
 {
 	if ($a->argc > 2) {
 		$uid = $a->argv[3];
-		$user = dba::selectOne('user', ['username', 'blocked'], ['uid' => $uid]);
+		$user = dba::selectFirst('user', ['username', 'blocked'], ['uid' => $uid]);
 		if (DBM::is_result($user)) {
 			notice('User not found' . EOL);
 			goaway('admin/users');
diff --git a/mod/cal.php b/mod/cal.php
index cc1708352e..51a66613ee 100644
--- a/mod/cal.php
+++ b/mod/cal.php
@@ -32,7 +32,7 @@ function cal_init(App $a)
 
 	if ($a->argc > 1) {
 		$nick = $a->argv[1];
-		$user = dba::selectOne('user', [], ['nickname' => $nick, 'blocked' => false]);
+		$user = dba::selectFirst('user', [], ['nickname' => $nick, 'blocked' => false]);
 		if (!DBM::is_result($user)) {
 			return;
 		}
diff --git a/mod/common.php b/mod/common.php
index 9521b61af6..11bddf6b53 100644
--- a/mod/common.php
+++ b/mod/common.php
@@ -63,11 +63,11 @@ function common_content(App $a)
 	}
 
 	if (!$cid && get_my_url()) {
-		$contact = dba::selectOne('contact', ['id'], ['nurl' => normalise_link(get_my_url()), 'uid' => $uid]);
+		$contact = dba::selectFirst('contact', ['id'], ['nurl' => normalise_link(get_my_url()), 'uid' => $uid]);
 		if (DBM::is_result($contact)) {
 			$cid = $contact['id'];
 		} else {
-			$gcontact = dba::selectOne('gcontact', ['id'], ['nurl' => normalise_link(get_my_url())]);
+			$gcontact = dba::selectFirst('gcontact', ['id'], ['nurl' => normalise_link(get_my_url())]);
 			if (DBM::is_result($gcontact)) {
 				$zcid = $gcontact['id'];
 			}
diff --git a/mod/contacts.php b/mod/contacts.php
index ab4641a99b..90c4af7d1b 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -33,7 +33,7 @@ function contacts_init(App $a)
 	$contact = [];
 	if ((($a->argc == 2) && intval($a->argv[1])) || (($a->argc == 3) && intval($a->argv[1]) && ($a->argv[2] == "posts"))) {
 		$contact_id = intval($a->argv[1]);
-		$contact = dba::selectOne('contact', [], ['id' => $contact_id, 'uid' => local_user()]);
+		$contact = dba::selectFirst('contact', [], ['id' => $contact_id, 'uid' => local_user()]);
 	}
 
 	if (DBM::is_result($contact)) {
@@ -222,7 +222,7 @@ function contacts_post(App $a)
 		notice(t('Failed to update contact record.') . EOL);
 	}
 
-	$contact = dba::selectOne('contact', [], ['id' => $contact_id, 'uid' => local_user()]);
+	$contact = dba::selectFirst('contact', [], ['id' => $contact_id, 'uid' => local_user()]);
 	if (DBM::is_result($contact)) {
 		$a->data['contact'] = $contact;
 	}
@@ -233,7 +233,7 @@ function contacts_post(App $a)
 
 function _contact_update($contact_id)
 {
-	$contact = dba::selectOne('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()]);
+	$contact = dba::selectFirst('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()]);
 	if (!DBM::is_result($contact)) {
 		return;
 	}
@@ -254,7 +254,7 @@ function _contact_update($contact_id)
 
 function _contact_update_profile($contact_id)
 {
-	$contact = dba::selectOne('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()]);
+	$contact = dba::selectFirst('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user()]);
 	if (!DBM::is_result($contact)) {
 		return;
 	}
@@ -389,7 +389,7 @@ function contacts_content(App $a)
 
 		$cmd = $a->argv[2];
 
-		$orig_record = dba::selectOne('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'self' => false]);
+		$orig_record = dba::selectFirst('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'self' => false]);
 		if (!DBM::is_result($orig_record)) {
 			notice(t('Could not access contact record.') . EOL);
 			goaway('contacts');
@@ -904,7 +904,7 @@ function contact_posts($a, $contact_id)
 {
 	$o = contacts_tab($a, $contact_id, 1);
 
-	$contact = dba::selectOne('contact', ['url'], ['id' => $contact_id]);
+	$contact = dba::selectFirst('contact', ['url'], ['id' => $contact_id]);
 	if (DBM::is_result($contact)) {
 		$a->page['aside'] = "";
 		profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"]));
diff --git a/mod/display.php b/mod/display.php
index 8739af084c..25dd9b3afa 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -202,7 +202,7 @@ function display_content(App $a, $update = false, $update_uid = 0) {
 
 	if ($update) {
 		$item_id = $_REQUEST['item_id'];
-		$item = dba::selectOne('item', ['uid', 'parent'], ['id' => $item_id]);
+		$item = dba::selectFirst('item', ['uid', 'parent'], ['id' => $item_id]);
 		$a->profile = array('uid' => intval($item['uid']), 'profile_uid' => intval($item['uid']));
 		$item_parent = $item['parent'];
 	} else {
@@ -345,7 +345,7 @@ function display_content(App $a, $update = false, $update_uid = 0) {
 	$s = dba::inArray($r);
 
 	if (local_user() && (local_user() == $a->profile['uid'])) {
-		$unseen = dba::selectOne('item', ['id'], ['parent' => $s[0]['parent'], 'unseen' => true]);
+		$unseen = dba::selectFirst('item', ['id'], ['parent' => $s[0]['parent'], 'unseen' => true]);
 		if (DBM::is_result($unseen)) {
 			dba::update('item', array('unseen' => false), array('parent' => $s[0]['parent'], 'unseen' => true));
 		}
diff --git a/mod/hovercard.php b/mod/hovercard.php
index d6164ffb64..a9cd95f587 100644
--- a/mod/hovercard.php
+++ b/mod/hovercard.php
@@ -44,7 +44,7 @@ function hovercard_content()
 	$cid = 0;
 	if (local_user() && strpos($profileurl, 'redir/') === 0) {
 		$cid = intval(substr($profileurl, 6));
-		$r = dba::selectOne('contact', ['nurl'], ['id' => $cid]);
+		$r = dba::selectFirst('contact', ['nurl'], ['id' => $cid]);
 		$profileurl = defaults($r, 'nurl', '');
 	}
 
diff --git a/mod/network.php b/mod/network.php
index 80ae9c539a..84dc9255e2 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -581,7 +581,7 @@ function networkThreadedView(App $a, $update = 0) {
 		if ($cid) {
 			// If $cid belongs to a communitity forum or a privat goup,.add a mention to the status editor
 			$condition = ["`id` = ? AND (`forum` OR `prv`)", $cid];
-			$contact = dba::selectOne('contact', ['addr', 'nick'], $condition);
+			$contact = dba::selectFirst('contact', ['addr', 'nick'], $condition);
 			if (DBM::is_result($contact)) {
 				if ($contact["addr"] != '') {
 					$content = "!".$contact["addr"];
@@ -632,7 +632,7 @@ function networkThreadedView(App $a, $update = 0) {
 	$sql_nets = (($nets) ? sprintf(" and $sql_table.`network` = '%s' ", dbesc($nets)) : '');
 
 	if ($group) {
-		$r = dba::selectOne('group', ['name'], ['id' => $group, 'uid' => $_SESSION['uid']]);
+		$r = dba::selectFirst('group', ['name'], ['id' => $group, 'uid' => $_SESSION['uid']]);
 		if (!DBM::is_result($r)) {
 			if ($update)
 				killme();
@@ -647,7 +647,7 @@ function networkThreadedView(App $a, $update = 0) {
 			$contact_str_self = "";
 
 			$contact_str = implode(',',$contacts);
-			$self = dba::selectOne('contact', ['id'], ['uid' => $_SESSION['uid'], 'self' => true]);
+			$self = dba::selectFirst('contact', ['id'], ['uid' => $_SESSION['uid'], 'self' => true]);
 			if (DBM::is_result($self)) {
 				$contact_str_self = $self["id"];
 			}
@@ -668,7 +668,7 @@ function networkThreadedView(App $a, $update = 0) {
 		$fields = ['id', 'name', 'network', 'writable', 'nurl',
 				'forum', 'prv', 'contact-type', 'addr', 'thumb', 'location'];
 		$condition = ["`id` = ? AND (NOT `blocked` OR `pending`)", $cid];
-		$r = dba::selectOne('contact', $fields, $condition);
+		$r = dba::selectFirst('contact', $fields, $condition);
 		if (DBM::is_result($r)) {
 			$sql_extra = " AND ".$sql_table.".`contact-id` = ".intval($cid);
 
diff --git a/mod/noscrape.php b/mod/noscrape.php
index 88ac52920e..fb5dea872b 100644
--- a/mod/noscrape.php
+++ b/mod/noscrape.php
@@ -68,13 +68,13 @@ function noscrape_init(App $a) {
 	// We display the last activity (post or login), reduced to year and week number
 	$last_active = 0;
 	$condition = ['uid' => $a->profile['uid'], 'self' => true];
-	$contact = dba::selectOne('contact', ['last-item'], $condition);
+	$contact = dba::selectFirst('contact', ['last-item'], $condition);
 	if (DBM::is_result($contact)) {
 		$last_active = strtotime($contact['last-item']);
 	}
 
 	$condition = ['uid' => $a->profile['uid']];
-	$user = dba::selectOne('user', ['login_date'], $condition);
+	$user = dba::selectFirst('user', ['login_date'], $condition);
 	if (DBM::is_result($user)) {
 		if ($last_active < strtotime($user['login_date'])) {
 			$last_active = strtotime($user['login_date']);
diff --git a/mod/proxy.php b/mod/proxy.php
index 792d0ffbca..80a84a165f 100644
--- a/mod/proxy.php
+++ b/mod/proxy.php
@@ -148,7 +148,7 @@ function proxy_init(App $a) {
 	$r = array();
 
 	if (!$direct_cache && ($cachefile == '')) {
-		$r = dba::selectOne('photo', ['data', 'desc'], ['resource-id' => $urlhash]);
+		$r = dba::selectFirst('photo', ['data', 'desc'], ['resource-id' => $urlhash]);
 		if (DBM::is_result($r)) {
 			$img_str = $r['data'];
 			$mime = $r['desc'];
diff --git a/mod/receive.php b/mod/receive.php
index 01ba3be753..0c7a7e0953 100644
--- a/mod/receive.php
+++ b/mod/receive.php
@@ -32,7 +32,7 @@ function receive_post(App $a)
 		}
 		$guid = $a->argv[2];
 
-		$importer = dba::selectOne('user', [], ['guid' => $guid, 'account_expired' => false, 'account_removed' => false]);
+		$importer = dba::selectFirst('user', [], ['guid' => $guid, 'account_expired' => false, 'account_removed' => false]);
 		if (!DBM::is_result($importer)) {
 			http_status_exit(500);
 		}
diff --git a/mod/settings.php b/mod/settings.php
index 6138463593..8fd890804f 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -997,7 +997,7 @@ function settings_content(App $a)
 
 	require_once('include/acl_selectors.php');
 
-	$profile = dba::selectOne('profile', [], ['is-default' => true, 'uid' => local_user()]);
+	$profile = dba::selectFirst('profile', [], ['is-default' => true, 'uid' => local_user()]);
 	if (!DBM::is_result($profile)) {
 		notice(t('Unable to find your profile. Please contact your admin.') . EOL);
 		return;
diff --git a/mod/unfollow.php b/mod/unfollow.php
index 51439a9d0e..a68c4de90e 100644
--- a/mod/unfollow.php
+++ b/mod/unfollow.php
@@ -26,7 +26,7 @@ function unfollow_post(App $a) {
 	$condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?",
 			$uid, CONTACT_IS_FRIEND, normalise_link($url),
 			normalise_link($url), $url, NETWORK_STATUSNET];
-	$contact = dba::selectOne('contact', [], $condition);
+	$contact = dba::selectFirst('contact', [], $condition);
 
 	if (!DBM::is_result($contact)) {
 		notice(t("Contact wasn't found or can't be unfollowed."));
@@ -65,7 +65,7 @@ function unfollow_content(App $a) {
 	$condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?",
 			local_user(), CONTACT_IS_FRIEND, normalise_link($url),
 			normalise_link($url), $url, NETWORK_STATUSNET];
-	$contact = dba::selectOne('contact', ['url', 'network', 'addr', 'name'], $condition);
+	$contact = dba::selectFirst('contact', ['url', 'network', 'addr', 'name'], $condition);
 
 	if (!DBM::is_result($contact)) {
 		notice(t("You aren't a friend of this contact.").EOL);
diff --git a/mod/xrd.php b/mod/xrd.php
index 871f24481d..af1167581f 100644
--- a/mod/xrd.php
+++ b/mod/xrd.php
@@ -36,7 +36,7 @@ function xrd_init(App $a)
 		$name = substr($local, 0, strpos($local, '@'));
 	}
 
-	$r = dba::selectOne('user', [], ['nickname' => $name]);
+	$r = dba::selectFirst('user', [], ['nickname' => $name]);
 	if (!DBM::is_result($r)) {
 		killme();
 	}
diff --git a/src/Content/OEmbed.php b/src/Content/OEmbed.php
index 814fd68b6f..5a3f07b536 100644
--- a/src/Content/OEmbed.php
+++ b/src/Content/OEmbed.php
@@ -1,404 +1,404 @@
-
- */
-class OEmbed
-{
-	public static function replaceCallback($matches)
-	{
-		$embedurl = $matches[1];
-		$j = self::fetchURL($embedurl);
-		$s = self::formatObject($j);
-
-		return $s;
-	}
-
-	/**
-	 * @brief Get data from an URL to embed its content.
-	 *
-	 * @param string $embedurl The URL from which the data should be fetched.
-	 * @param bool $no_rich_type If set to true rich type content won't be fetched.
-	 *
-	 * @return bool|object Returns object with embed content or false if no embedable
-	 * 	 content exists
-	 */
-	public static function fetchURL($embedurl, $no_rich_type = false)
-	{
-		$embedurl = trim($embedurl, "'");
-		$embedurl = trim($embedurl, '"');
-
-		$a = get_app();
-
-		$condition = ['url' => normalise_link($embedurl)];
-		$r = dba::selectOne('oembed', ['content'], $condition);
-		if (DBM::is_result($r)) {
-			$txt = $r["content"];
-		} else {
-			$txt = Cache::get($a->videowidth . $embedurl);
-		}
-		// These media files should now be caught in bbcode.php
-		// left here as a fallback in case this is called from another source
-
-		$noexts = array("mp3", "mp4", "ogg", "ogv", "oga", "ogm", "webm");
-		$ext = pathinfo(strtolower($embedurl), PATHINFO_EXTENSION);
-
-
-		if (is_null($txt)) {
-			$txt = "";
-
-			if (!in_array($ext, $noexts)) {
-				// try oembed autodiscovery
-				$redirects = 0;
-				$html_text = fetch_url($embedurl, false, $redirects, 15, "text/*");
-				if ($html_text) {
-					$dom = @DOMDocument::loadHTML($html_text);
-					if ($dom) {
-						$xpath = new DOMXPath($dom);
-						$entries = $xpath->query("//link[@type='application/json+oembed']");
-						foreach ($entries as $e) {
-							$href = $e->getAttributeNode("href")->nodeValue;
-							$txt = fetch_url($href . '&maxwidth=' . $a->videowidth);
-							break;
-						}
-						$entries = $xpath->query("//link[@type='text/json+oembed']");
-						foreach ($entries as $e) {
-							$href = $e->getAttributeNode("href")->nodeValue;
-							$txt = fetch_url($href . '&maxwidth=' . $a->videowidth);
-							break;
-						}
-					}
-				}
-			}
-
-			$txt = trim($txt);
-
-			if (!$txt || $txt[0] != "{") {
-				$txt = '{"type":"error"}';
-			} else { //save in cache
-				$j = json_decode($txt);
-				if ($j->type != "error") {
-					dba::insert('oembed', array('url' => normalise_link($embedurl),
-						'content' => $txt, 'created' => datetime_convert()), true);
-				}
-
-				Cache::set($a->videowidth . $embedurl, $txt, CACHE_DAY);
-			}
-		}
-
-		$j = json_decode($txt);
-
-		if (!is_object($j)) {
-			return false;
-		}
-
-		// Always embed the SSL version
-		if (isset($j->html)) {
-			$j->html = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"), array("https://www.youtube.com/", "https://player.vimeo.com/"), $j->html);
-		}
-
-		$j->embedurl = $embedurl;
-
-		// If fetching information doesn't work, then improve via internal functions
-		if (($j->type == "error") || ($no_rich_type && ($j->type == "rich"))) {
-			$data = ParseUrl::getSiteinfoCached($embedurl, true, false);
-			$j->type = $data["type"];
-
-			if ($j->type == "photo") {
-				$j->url = $data["url"];
-				//$j->width = $data["images"][0]["width"];
-				//$j->height = $data["images"][0]["height"];
-			}
-
-			if (isset($data["title"])) {
-				$j->title = $data["title"];
-			}
-
-			if (isset($data["text"])) {
-				$j->description = $data["text"];
-			}
-
-			if (is_array($data["images"])) {
-				$j->thumbnail_url = $data["images"][0]["src"];
-				$j->thumbnail_width = $data["images"][0]["width"];
-				$j->thumbnail_height = $data["images"][0]["height"];
-			}
-		}
-
-		call_hooks('oembed_fetch_url', $embedurl, $j);
-
-		return $j;
-	}
-
-	public static function formatObject($j)
-	{
-		$embedurl = $j->embedurl;
-		$jhtml = $j->html;
-		$ret = '
'; - switch ($j->type) { - case "video": - if (isset($j->thumbnail_url)) { - $tw = (isset($j->thumbnail_width) && intval($j->thumbnail_width)) ? $j->thumbnail_width : 200; - $th = (isset($j->thumbnail_height) && intval($j->thumbnail_height)) ? $j->thumbnail_height : 180; - // make sure we don't attempt divide by zero, fallback is a 1:1 ratio - $tr = (($th) ? $tw / $th : 1); - - $th = 120; - $tw = $th * $tr; - $tpl = get_markup_template('oembed_video.tpl'); - $ret .= replace_macros($tpl, array( - '$baseurl' => System::baseUrl(), - '$embedurl' => $embedurl, - '$escapedhtml' => base64_encode($jhtml), - '$tw' => $tw, - '$th' => $th, - '$turl' => $j->thumbnail_url, - )); - } else { - $ret = $jhtml; - } - break; - case "photo": - $ret .= ''; - break; - case "link": - break; - case "rich": - if (self::isAllowedURL($embedurl)) { - $ret .= proxy_parse_html($jhtml); - } - break; - } - - $ret .= '
'; - // add link to source if not present in "rich" type - if ($j->type != 'rich' || !strpos($j->html, $embedurl)) { - $ret .= '

'; - if (isset($j->title)) { - if (isset($j->provider_name)) { - $ret .= $j->provider_name . ": "; - } - - $embedlink = (isset($j->title)) ? $j->title : $embedurl; - $ret .= '' . $embedlink . ''; - if (isset($j->author_name)) { - $ret .= ' (' . $j->author_name . ')'; - } - } elseif (isset($j->provider_name) || isset($j->author_name)) { - $embedlink = ""; - if (isset($j->provider_name)) { - $embedlink .= $j->provider_name; - } - - if (isset($j->author_name)) { - if ($embedlink != "") { - $embedlink .= ": "; - } - - $embedlink .= $j->author_name; - } - if (trim($embedlink) == "") { - $embedlink = $embedurl; - } - - $ret .= '' . $embedlink . ''; - } - $ret .= "

"; - } elseif (!strpos($j->html, $embedurl)) { - // add for html2bbcode conversion - $ret .= '' . $j->title . ''; - } - - $ret = str_replace("\n", "", $ret); - return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret)); - } - - public static function BBCode2HTML($text) - { - $stopoembed = Config::get("system", "no_oembed"); - if ($stopoembed == true) { - return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "" . t('Embedding disabled') . " : $1", $text); - } - return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", ['self', 'replaceCallback'], $text); - } - - /** - * Find .... - * and replace it with [embed]url[/embed] - */ - public static function HTML2BBCode($text) - { - // start parser only if 'oembed' is in text - if (strpos($text, "oembed")) { - - // convert non ascii chars to html entities - $html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text)); - - // If it doesn't parse at all, just return the text. - $dom = @DOMDocument::loadHTML($html_text); - if (!$dom) { - return $text; - } - $xpath = new DOMXPath($dom); - - $xattr = self::buildXPath("class", "oembed"); - $entries = $xpath->query("//div[$xattr]"); - - $xattr = "@rel='oembed'"; //oe_build_xpath("rel","oembed"); - foreach ($entries as $e) { - $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue; - if (!is_null($href)) { - $e->parentNode->replaceChild(new DOMText("[embed]" . $href . "[/embed]"), $e); - } - } - return self::getInnerHTML($dom->getElementsByTagName("body")->item(0)); - } else { - return $text; - } - } - - /** - * Determines if rich content OEmbed is allowed for the provided URL - * - * @brief Determines if rich content OEmbed is allowed for the provided URL - * @param string $url - * @return boolean - */ - public static function isAllowedURL($url) - { - if (!Config::get('system', 'no_oembed_rich_content')) { - return true; - } - - $domain = parse_url($url, PHP_URL_HOST); - if (!x($domain)) { - return false; - } - - $str_allowed = Config::get('system', 'allowed_oembed', ''); - if (!x($str_allowed)) { - return false; - } - - $allowed = explode(',', $str_allowed); - - return allowed_domain($domain, $allowed); - } - - public static function getHTML($url, $title = null) - { - // Always embed the SSL version - $url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"), - array("https://www.youtube.com/", "https://player.vimeo.com/"), $url); - - $o = OEmbed::fetchURL($url); - - if (!is_object($o) || $o->type == 'error') { - throw new Exception('OEmbed failed for URL: ' . $url); - } - - if (x($title)) { - $o->title = $title; - } - - $html = OEmbed::formatObject($o); - - return $html; - } - - /** - * @brief Generates the iframe HTML for an oembed attachment. - * - * Width and height are given by the remote, and are regularly too small for - * the generated iframe. - * - * The width is entirely discarded for the actual width of the post, while fixed - * height is used as a starting point before the inevitable resizing. - * - * Since the iframe is automatically resized on load, there are no need for ugly - * and impractical scrollbars. - * - * @todo This function is currently unused until someoneā„¢ adds support for a separate OEmbed domain - * - * @param string $src Original remote URL to embed - * @param string $width - * @param string $height - * @return string formatted HTML - * - * @see oembed_format_object() - */ - private static function iframe($src, $width, $height) - { - $a = get_app(); - - if (!$height || strstr($height, '%')) { - $height = '200'; - } - $width = '100%'; - - $src = System::baseUrl() . '/oembed/' . base64url_encode($src); - return ''; - } - - /** - * Generates an XPath query to select elements whose provided attribute contains - * the provided value in a space-separated list. - * - * @brief Generates attribute search XPath string - * - * @param string $attr Name of the attribute to seach - * @param string $value Value to search in a space-separated list - * @return string - */ - private static function buildXPath($attr, $value) - { - // https://www.westhoffswelt.de/blog/2009/6/9/select-html-elements-with-more-than-one-css-class-using-xpath - return "contains(normalize-space(@$attr), ' $value ') or substring(normalize-space(@$attr), 1, string-length('$value') + 1) = '$value ' or substring(normalize-space(@$attr), string-length(@$attr) - string-length('$value')) = ' $value' or @$attr = '$value'"; - } - - /** - * Returns the inner XML string of a provided DOMNode - * - * @brief Returns the inner XML string of a provided DOMNode - * - * @param DOMNode $node - * @return string - */ - private static function getInnerHTML(DOMNode $node) - { - $innerHTML = ''; - $children = $node->childNodes; - foreach ($children as $child) { - $innerHTML .= $child->ownerDocument->saveXML($child); - } - return $innerHTML; - } - -} + + */ +class OEmbed +{ + public static function replaceCallback($matches) + { + $embedurl = $matches[1]; + $j = self::fetchURL($embedurl); + $s = self::formatObject($j); + + return $s; + } + + /** + * @brief Get data from an URL to embed its content. + * + * @param string $embedurl The URL from which the data should be fetched. + * @param bool $no_rich_type If set to true rich type content won't be fetched. + * + * @return bool|object Returns object with embed content or false if no embedable + * content exists + */ + public static function fetchURL($embedurl, $no_rich_type = false) + { + $embedurl = trim($embedurl, "'"); + $embedurl = trim($embedurl, '"'); + + $a = get_app(); + + $condition = ['url' => normalise_link($embedurl)]; + $r = dba::selectFirst('oembed', ['content'], $condition); + if (DBM::is_result($r)) { + $txt = $r["content"]; + } else { + $txt = Cache::get($a->videowidth . $embedurl); + } + // These media files should now be caught in bbcode.php + // left here as a fallback in case this is called from another source + + $noexts = array("mp3", "mp4", "ogg", "ogv", "oga", "ogm", "webm"); + $ext = pathinfo(strtolower($embedurl), PATHINFO_EXTENSION); + + + if (is_null($txt)) { + $txt = ""; + + if (!in_array($ext, $noexts)) { + // try oembed autodiscovery + $redirects = 0; + $html_text = fetch_url($embedurl, false, $redirects, 15, "text/*"); + if ($html_text) { + $dom = @DOMDocument::loadHTML($html_text); + if ($dom) { + $xpath = new DOMXPath($dom); + $entries = $xpath->query("//link[@type='application/json+oembed']"); + foreach ($entries as $e) { + $href = $e->getAttributeNode("href")->nodeValue; + $txt = fetch_url($href . '&maxwidth=' . $a->videowidth); + break; + } + $entries = $xpath->query("//link[@type='text/json+oembed']"); + foreach ($entries as $e) { + $href = $e->getAttributeNode("href")->nodeValue; + $txt = fetch_url($href . '&maxwidth=' . $a->videowidth); + break; + } + } + } + } + + $txt = trim($txt); + + if (!$txt || $txt[0] != "{") { + $txt = '{"type":"error"}'; + } else { //save in cache + $j = json_decode($txt); + if ($j->type != "error") { + dba::insert('oembed', array('url' => normalise_link($embedurl), + 'content' => $txt, 'created' => datetime_convert()), true); + } + + Cache::set($a->videowidth . $embedurl, $txt, CACHE_DAY); + } + } + + $j = json_decode($txt); + + if (!is_object($j)) { + return false; + } + + // Always embed the SSL version + if (isset($j->html)) { + $j->html = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"), array("https://www.youtube.com/", "https://player.vimeo.com/"), $j->html); + } + + $j->embedurl = $embedurl; + + // If fetching information doesn't work, then improve via internal functions + if (($j->type == "error") || ($no_rich_type && ($j->type == "rich"))) { + $data = ParseUrl::getSiteinfoCached($embedurl, true, false); + $j->type = $data["type"]; + + if ($j->type == "photo") { + $j->url = $data["url"]; + //$j->width = $data["images"][0]["width"]; + //$j->height = $data["images"][0]["height"]; + } + + if (isset($data["title"])) { + $j->title = $data["title"]; + } + + if (isset($data["text"])) { + $j->description = $data["text"]; + } + + if (is_array($data["images"])) { + $j->thumbnail_url = $data["images"][0]["src"]; + $j->thumbnail_width = $data["images"][0]["width"]; + $j->thumbnail_height = $data["images"][0]["height"]; + } + } + + call_hooks('oembed_fetch_url', $embedurl, $j); + + return $j; + } + + public static function formatObject($j) + { + $embedurl = $j->embedurl; + $jhtml = $j->html; + $ret = '
'; + switch ($j->type) { + case "video": + if (isset($j->thumbnail_url)) { + $tw = (isset($j->thumbnail_width) && intval($j->thumbnail_width)) ? $j->thumbnail_width : 200; + $th = (isset($j->thumbnail_height) && intval($j->thumbnail_height)) ? $j->thumbnail_height : 180; + // make sure we don't attempt divide by zero, fallback is a 1:1 ratio + $tr = (($th) ? $tw / $th : 1); + + $th = 120; + $tw = $th * $tr; + $tpl = get_markup_template('oembed_video.tpl'); + $ret .= replace_macros($tpl, array( + '$baseurl' => System::baseUrl(), + '$embedurl' => $embedurl, + '$escapedhtml' => base64_encode($jhtml), + '$tw' => $tw, + '$th' => $th, + '$turl' => $j->thumbnail_url, + )); + } else { + $ret = $jhtml; + } + break; + case "photo": + $ret .= ''; + break; + case "link": + break; + case "rich": + if (self::isAllowedURL($embedurl)) { + $ret .= proxy_parse_html($jhtml); + } + break; + } + + $ret .= '
'; + // add link to source if not present in "rich" type + if ($j->type != 'rich' || !strpos($j->html, $embedurl)) { + $ret .= '

'; + if (isset($j->title)) { + if (isset($j->provider_name)) { + $ret .= $j->provider_name . ": "; + } + + $embedlink = (isset($j->title)) ? $j->title : $embedurl; + $ret .= '' . $embedlink . ''; + if (isset($j->author_name)) { + $ret .= ' (' . $j->author_name . ')'; + } + } elseif (isset($j->provider_name) || isset($j->author_name)) { + $embedlink = ""; + if (isset($j->provider_name)) { + $embedlink .= $j->provider_name; + } + + if (isset($j->author_name)) { + if ($embedlink != "") { + $embedlink .= ": "; + } + + $embedlink .= $j->author_name; + } + if (trim($embedlink) == "") { + $embedlink = $embedurl; + } + + $ret .= '' . $embedlink . ''; + } + $ret .= "

"; + } elseif (!strpos($j->html, $embedurl)) { + // add for html2bbcode conversion + $ret .= '' . $j->title . ''; + } + + $ret = str_replace("\n", "", $ret); + return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret)); + } + + public static function BBCode2HTML($text) + { + $stopoembed = Config::get("system", "no_oembed"); + if ($stopoembed == true) { + return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "" . t('Embedding disabled') . " : $1", $text); + } + return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", ['self', 'replaceCallback'], $text); + } + + /** + * Find .... + * and replace it with [embed]url[/embed] + */ + public static function HTML2BBCode($text) + { + // start parser only if 'oembed' is in text + if (strpos($text, "oembed")) { + + // convert non ascii chars to html entities + $html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text)); + + // If it doesn't parse at all, just return the text. + $dom = @DOMDocument::loadHTML($html_text); + if (!$dom) { + return $text; + } + $xpath = new DOMXPath($dom); + + $xattr = self::buildXPath("class", "oembed"); + $entries = $xpath->query("//div[$xattr]"); + + $xattr = "@rel='oembed'"; //oe_build_xpath("rel","oembed"); + foreach ($entries as $e) { + $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue; + if (!is_null($href)) { + $e->parentNode->replaceChild(new DOMText("[embed]" . $href . "[/embed]"), $e); + } + } + return self::getInnerHTML($dom->getElementsByTagName("body")->item(0)); + } else { + return $text; + } + } + + /** + * Determines if rich content OEmbed is allowed for the provided URL + * + * @brief Determines if rich content OEmbed is allowed for the provided URL + * @param string $url + * @return boolean + */ + public static function isAllowedURL($url) + { + if (!Config::get('system', 'no_oembed_rich_content')) { + return true; + } + + $domain = parse_url($url, PHP_URL_HOST); + if (!x($domain)) { + return false; + } + + $str_allowed = Config::get('system', 'allowed_oembed', ''); + if (!x($str_allowed)) { + return false; + } + + $allowed = explode(',', $str_allowed); + + return allowed_domain($domain, $allowed); + } + + public static function getHTML($url, $title = null) + { + // Always embed the SSL version + $url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"), + array("https://www.youtube.com/", "https://player.vimeo.com/"), $url); + + $o = OEmbed::fetchURL($url); + + if (!is_object($o) || $o->type == 'error') { + throw new Exception('OEmbed failed for URL: ' . $url); + } + + if (x($title)) { + $o->title = $title; + } + + $html = OEmbed::formatObject($o); + + return $html; + } + + /** + * @brief Generates the iframe HTML for an oembed attachment. + * + * Width and height are given by the remote, and are regularly too small for + * the generated iframe. + * + * The width is entirely discarded for the actual width of the post, while fixed + * height is used as a starting point before the inevitable resizing. + * + * Since the iframe is automatically resized on load, there are no need for ugly + * and impractical scrollbars. + * + * @todo This function is currently unused until someoneā„¢ adds support for a separate OEmbed domain + * + * @param string $src Original remote URL to embed + * @param string $width + * @param string $height + * @return string formatted HTML + * + * @see oembed_format_object() + */ + private static function iframe($src, $width, $height) + { + $a = get_app(); + + if (!$height || strstr($height, '%')) { + $height = '200'; + } + $width = '100%'; + + $src = System::baseUrl() . '/oembed/' . base64url_encode($src); + return ''; + } + + /** + * Generates an XPath query to select elements whose provided attribute contains + * the provided value in a space-separated list. + * + * @brief Generates attribute search XPath string + * + * @param string $attr Name of the attribute to seach + * @param string $value Value to search in a space-separated list + * @return string + */ + private static function buildXPath($attr, $value) + { + // https://www.westhoffswelt.de/blog/2009/6/9/select-html-elements-with-more-than-one-css-class-using-xpath + return "contains(normalize-space(@$attr), ' $value ') or substring(normalize-space(@$attr), 1, string-length('$value') + 1) = '$value ' or substring(normalize-space(@$attr), string-length(@$attr) - string-length('$value')) = ' $value' or @$attr = '$value'"; + } + + /** + * Returns the inner XML string of a provided DOMNode + * + * @brief Returns the inner XML string of a provided DOMNode + * + * @param DOMNode $node + * @return string + */ + private static function getInnerHTML(DOMNode $node) + { + $innerHTML = ''; + $children = $node->childNodes; + foreach ($children as $child) { + $innerHTML .= $child->ownerDocument->saveXML($child); + } + return $innerHTML; + } + +} diff --git a/src/Core/Cache.php b/src/Core/Cache.php index c65f416d79..dfb6591b9d 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -109,7 +109,7 @@ class Cache // Frequently clear cache self::clear(); - $r = dba::selectOne('cache', ['v'], ['k' => $key]); + $r = dba::selectFirst('cache', ['v'], ['k' => $key]); if (DBM::is_result($r)) { $cached = $r['v']; diff --git a/src/Core/Config.php b/src/Core/Config.php index 459433852e..3b08dee6b6 100644 --- a/src/Core/Config.php +++ b/src/Core/Config.php @@ -97,7 +97,7 @@ class Config } } - $ret = dba::selectOne('config', ['v'], ['cat' => $family, 'k' => $key]); + $ret = dba::selectFirst('config', ['v'], ['cat' => $family, 'k' => $key]); if (DBM::is_result($ret)) { // manage array value $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret['v']) ? unserialize($ret['v']) : $ret['v']); diff --git a/src/Core/PConfig.php b/src/Core/PConfig.php index 0acb930b74..50fea04469 100644 --- a/src/Core/PConfig.php +++ b/src/Core/PConfig.php @@ -90,7 +90,7 @@ class PConfig } } - $ret = dba::selectOne('pconfig', ['v'], ['uid' => $uid, 'cat' => $family, 'k' => $key]); + $ret = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $family, 'k' => $key]); 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; diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 116d64e7cb..96e4a5bb16 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -165,7 +165,7 @@ class Worker private static function highestPriority() { $condition = array("`executed` <= ? AND NOT `done`", NULL_DATE); - $s = dba::selectOne('workerqueue', ['priority'], $condition, ['order' => ['priority']]); + $s = dba::selectFirst('workerqueue', ['priority'], $condition, ['order' => ['priority']]); if (DBM::is_result($s)) { return $s["priority"]; } else { diff --git a/src/Model/Contact.php b/src/Model/Contact.php index bb8302e31d..a78c796edc 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -103,7 +103,7 @@ class Contact extends BaseObject return true; } - $user = dba::selectOne('user', ['uid', 'username', 'nickname'], ['uid' => $uid]); + $user = dba::selectFirst('user', ['uid', 'username', 'nickname'], ['uid' => $uid]); if (!DBM::is_result($user)) { return false; } @@ -145,7 +145,7 @@ class Contact extends BaseObject public static function remove($id) { // We want just to make sure that we don't delete our "self" contact - $r = dba::selectOne('contact', ['uid'], ['id' => $id, 'self' => false]); + $r = dba::selectFirst('contact', ['uid'], ['id' => $id, 'self' => false]); if (!DBM::is_result($r) || !intval($r['uid'])) { return; @@ -490,7 +490,7 @@ class Contact extends BaseObject return $menu; } - $r = dba::selectOne('contact', [], ['nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid]); + $r = dba::selectFirst('contact', [], ['nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid]); if ($r) { return self::photoMenu($r, $uid); } else { @@ -653,18 +653,18 @@ class Contact extends BaseObject /// @todo Verify if we can't use Contact::getDetailsByUrl instead of the following // We first try the nurl (http://server.tld/nick), most common case - $contact = dba::selectOne('contact', ['id', 'avatar-date'], ['nurl' => normalise_link($url), 'uid' => $uid]); + $contact = dba::selectFirst('contact', ['id', 'avatar-date'], ['nurl' => normalise_link($url), 'uid' => $uid]); // Then the addr (nick@server.tld) if (!DBM::is_result($contact)) { - $contact = dba::selectOne('contact', ['id', 'avatar-date'], ['addr' => $url, 'uid' => $uid]); + $contact = dba::selectFirst('contact', ['id', 'avatar-date'], ['addr' => $url, 'uid' => $uid]); } // Then the alias (which could be anything) if (!DBM::is_result($contact)) { // The link could be provided as http although we stored it as https $ssl_url = str_replace('http://', 'https://', $url); - $r = dba::selectOne('contact', ['id', 'avatar', 'avatar-date'], ['`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid]); + $r = dba::selectFirst('contact', ['id', 'avatar', 'avatar-date'], ['`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid]); $contact = dba::fetch($r); dba::close($r); } @@ -697,7 +697,7 @@ class Contact extends BaseObject } // Get data from the gcontact table - $gcontacts = dba::selectOne('gcontact', ['name', 'nick', 'url', 'photo', 'addr', 'alias', 'network'], ['nurl' => normalise_link($url)]); + $gcontacts = dba::selectFirst('gcontact', ['name', 'nick', 'url', 'photo', 'addr', 'alias', 'network'], ['nurl' => normalise_link($url)]); if (!DBM::is_result($gcontacts)) { return 0; } @@ -735,7 +735,7 @@ class Contact extends BaseObject $contact_id = $contacts[0]["id"]; // Update the newly created contact from data in the gcontact table - $gcontact = dba::selectOne('gcontact', ['location', 'about', 'keywords', 'gender'], ['nurl' => normalise_link($data["url"])]); + $gcontact = dba::selectFirst('gcontact', ['location', 'about', 'keywords', 'gender'], ['nurl' => normalise_link($data["url"])]); if (DBM::is_result($gcontact)) { // Only use the information when the probing hadn't fetched these values if ($data['keywords'] != '') { @@ -759,7 +759,7 @@ class Contact extends BaseObject self::updateAvatar($data["photo"], $uid, $contact_id); $fields = ['url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date', 'pubkey']; - $contact = dba::selectOne('contact', $fields, ['id' => $contact_id]); + $contact = dba::selectFirst('contact', $fields, ['id' => $contact_id]); // This condition should always be true if (!DBM::is_result($contact)) { @@ -817,7 +817,7 @@ class Contact extends BaseObject return false; } - $blocked = dba::selectOne('contact', ['blocked'], ['id' => $cid]); + $blocked = dba::selectFirst('contact', ['blocked'], ['id' => $cid]); if (!DBM::is_result($blocked)) { return false; } @@ -837,7 +837,7 @@ class Contact extends BaseObject return false; } - $hidden = dba::selectOne('contact', ['hidden'], ['id' => $cid]); + $hidden = dba::selectFirst('contact', ['hidden'], ['id' => $cid]); if (!DBM::is_result($hidden)) { return false; } @@ -980,7 +980,7 @@ class Contact extends BaseObject public static function updateAvatar($avatar, $uid, $cid, $force = false) { // Limit = 1 returns the row so no need for dba:inArray() - $r = dba::selectOne('contact', ['avatar', 'photo', 'thumb', 'micro', 'nurl'], ['id' => $cid]); + $r = dba::selectFirst('contact', ['avatar', 'photo', 'thumb', 'micro', 'nurl'], ['id' => $cid]); if (!DBM::is_result($r)) { return false; } else { @@ -999,7 +999,7 @@ class Contact extends BaseObject // Update the public contact (contact id = 0) if ($uid != 0) { - $pcontact = dba::selectOne('contact', ['id'], ['nurl' => $r[0]['nurl']]); + $pcontact = dba::selectFirst('contact', ['id'], ['nurl' => $r[0]['nurl']]); if (DBM::is_result($pcontact)) { self::updateAvatar($avatar, 0, $pcontact['id'], $force); } @@ -1023,7 +1023,7 @@ class Contact extends BaseObject This will reliably kill your communication with Friendica contacts. */ - $r = dba::selectOne('contact', ['url', 'nurl', 'addr', 'alias', 'batch', 'notify', 'poll', 'poco', 'network'], ['id' => $id]); + $r = dba::selectFirst('contact', ['url', 'nurl', 'addr', 'alias', 'batch', 'notify', 'poll', 'poco', 'network'], ['id' => $id]); if (!DBM::is_result($r)) { return false; } @@ -1246,7 +1246,7 @@ class Contact extends BaseObject ); } - $r = dba::selectOne('contact', ['url' => $ret['url'], 'network' => $ret['network'], 'uid' => $uid]); + $r = dba::selectFirst('contact', ['url' => $ret['url'], 'network' => $ret['network'], 'uid' => $uid]); if (!DBM::is_result($r)) { $result['message'] .= t('Unable to retrieve contact information.') . EOL; diff --git a/src/Model/GContact.php b/src/Model/GContact.php index b09af69987..510afdf164 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -888,7 +888,7 @@ class GContact 'network', 'bd', 'gender', 'keywords', 'alias', 'contact-type', 'url', 'location', 'about'); - $old_contact = dba::selectOne('contact', $fields, ['id' => $r[0]["id"]]); + $old_contact = dba::selectFirst('contact', $fields, ['id' => $r[0]["id"]]); // Update it with the current values $fields = array('name' => $contact['name'], 'nick' => $contact['nick'], diff --git a/src/Model/Group.php b/src/Model/Group.php index 345a055eb4..1746a3962e 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -39,7 +39,7 @@ class Group extends BaseObject // all the old members are gone, but the group remains so we don't break any security // access lists. What we're doing here is reviving the dead group, but old content which // was restricted to this group may now be seen by the new group members. - $group = dba::selectOne('group', ['deleted'], ['id' => $gid]); + $group = dba::selectFirst('group', ['deleted'], ['id' => $gid]); if (DBM::is_result($group) && $group['deleted']) { dba::update('group', ['deleted' => 0], ['gid' => $gid]); notice(t('A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); @@ -120,7 +120,7 @@ class Group extends BaseObject return false; } - $group = dba::selectOne('group', ['id'], ['uid' => $uid, 'name' => $name]); + $group = dba::selectFirst('group', ['id'], ['uid' => $uid, 'name' => $name]); if (DBM::is_result($group)) { return $group['id']; } @@ -139,13 +139,13 @@ class Group extends BaseObject return false; } - $group = dba::selectOne('group', ['uid'], ['gid' => $gid]); + $group = dba::selectFirst('group', ['uid'], ['gid' => $gid]); if (!DBM::is_result($group)) { return false; } // remove group from default posting lists - $user = dba::selectOne('user', ['def_gid', 'allow_gid', 'deny_gid'], ['uid' => $group['uid']]); + $user = dba::selectFirst('user', ['def_gid', 'allow_gid', 'deny_gid'], ['uid' => $group['uid']]); if (DBM::is_result($user)) { $change = false; diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 3156f5782b..a91636b672 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -38,14 +38,14 @@ class Photo */ public static function store(Image $Image, $uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '', $desc = '') { - $r = dba::selectOne('photo', ['guid'], ["`resource-id` = ? AND `guid` != ?", $rid, '']); + $r = dba::selectFirst('photo', ['guid'], ["`resource-id` = ? AND `guid` != ?", $rid, '']); if (DBM::is_result($r)) { $guid = $r['guid']; } else { $guid = get_guid(); } - $x = dba::selectOne('photo', ['id'], ['resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale]); + $x = dba::selectFirst('photo', ['id'], ['resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale]); $fields = array( 'uid' => $uid, @@ -88,7 +88,7 @@ class Photo */ public static function importProfilePhoto($photo, $uid, $cid, $quit_on_error = false) { - $r = dba::selectOne( + $r = dba::selectFirst( 'photo', ['resource-id'], ['uid' => $uid, 'contact-id' => $cid, 'scale' => 4, 'album' => 'Contact Photos'] ); diff --git a/src/Model/User.php b/src/Model/User.php index 927bcaa75f..7a6faaf66b 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -84,7 +84,7 @@ class User return $default_group; } - $user = dba::selectOne('user', ['def_gid'], ['uid' => $uid]); + $user = dba::selectFirst('user', ['def_gid'], ['uid' => $uid]); if (DBM::is_result($user)) { $default_group = $user["def_gid"]; @@ -112,7 +112,7 @@ class User if (is_object($user_info)) { $user = (array) $user_info; } elseif (is_int($user_info)) { - $user = dba::selectOne('user', ['uid', 'password'], + $user = dba::selectFirst('user', ['uid', 'password'], [ 'uid' => $user_info, 'blocked' => 0, @@ -328,7 +328,7 @@ class User if ($insert_result) { $uid = dba::lastInsertId(); - $user = dba::selectOne('user', [], ['uid' => $uid]); + $user = dba::selectFirst('user', [], ['uid' => $uid]); } else { throw new Exception(t('An error occurred during registration. Please try again.')); } @@ -530,7 +530,7 @@ class User logger('Removing user: ' . $uid); - $user = dba::selectOne('user', [], ['uid' => $uid]); + $user = dba::selectFirst('user', [], ['uid' => $uid]); call_hooks('remove_user', $user); diff --git a/src/Module/Login.php b/src/Module/Login.php index 5ab8bb904d..8ba4f1035f 100644 --- a/src/Module/Login.php +++ b/src/Module/Login.php @@ -1,306 +1,306 @@ -get_baseurl()); - } - - return self::form(self::getApp()->get_baseurl(), $a->config['register_policy'] != REGISTER_CLOSED); - } - - public static function post() - { - session_unset(); - // OpenId Login - if ( - !x($_POST, 'password') - && ( - x($_POST, 'openid_url') - || x($_POST, 'username') - ) - ) { - $noid = Config::get('system', 'no_openid'); - - $openid_url = trim($_POST['openid_url'] ? : $_POST['username']); - - // if it's an email address or doesn't resolve to a URL, fail. - if ($noid || strpos($openid_url, '@') || !validate_url($openid_url)) { - notice(t('Login failed.') . EOL); - goaway(self::getApp()->get_baseurl()); - // NOTREACHED - } - - // Otherwise it's probably an openid. - try { - require_once 'library/openid.php'; - $openid = new LightOpenID; - $openid->identity = $openid_url; - $_SESSION['openid'] = $openid_url; - $_SESSION['remember'] = $_POST['remember']; - $openid->returnUrl = self::getApp()->get_baseurl(true) . '/openid'; - goaway($openid->authUrl()); - } catch (Exception $e) { - notice(t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '

' . t('The error message was:') . ' ' . $e->getMessage()); - } - // NOTREACHED - } - - if (x($_POST, 'auth-params') && $_POST['auth-params'] === 'login') { - $record = null; - - $addon_auth = array( - 'username' => trim($_POST['username']), - 'password' => trim($_POST['password']), - 'authenticated' => 0, - 'user_record' => null - ); - - /* - * A plugin indicates successful login by setting 'authenticated' to non-zero value and returning a user record - * Plugins should never set 'authenticated' except to indicate success - as hooks may be chained - * and later plugins should not interfere with an earlier one that succeeded. - */ - call_hooks('authenticate', $addon_auth); - - if ($addon_auth['authenticated'] && count($addon_auth['user_record'])) { - $record = $addon_auth['user_record']; - } else { - $user_id = User::authenticate(trim($_POST['username']), trim($_POST['password'])); - if ($user_id) { - $record = dba::selectOne('user', [], ['uid' => $user_id]); - } - } - - if (!$record || !count($record)) { - logger('authenticate: failed login attempt: ' . notags(trim($_POST['username'])) . ' from IP ' . $_SERVER['REMOTE_ADDR']); - notice(t('Login failed.') . EOL); - goaway(self::getApp()->get_baseurl()); - } - - if (!$_POST['remember']) { - new_cookie(0); // 0 means delete on browser exit - } - - // if we haven't failed up this point, log them in. - $_SESSION['remember'] = $_POST['remember']; - $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); - authenticate_success($record, true, true); - - if (x($_SESSION, 'return_url')) { - $return_url = $_SESSION['return_url']; - unset($_SESSION['return_url']); - } else { - $return_url = ''; - } - - goaway($return_url); - } - } - - /** - * @brief Tries to auth the user from the cookie or session - * - * @todo Should be moved to Friendica\Core\Session when it's created - */ - public static function sessionAuth() - { - // When the "Friendica" cookie is set, take the value to authenticate and renew the cookie. - if (isset($_COOKIE["Friendica"])) { - $data = json_decode($_COOKIE["Friendica"]); - if (isset($data->uid)) { - - $user = dba::selectOne('user', [], - [ - 'uid' => $data->uid, - 'blocked' => false, - 'account_expired' => false, - 'account_removed' => false, - 'verified' => true, - ] - ); - if (DBM::is_result($user)) { - if ($data->hash != cookie_hash($user)) { - logger("Hash for user " . $data->uid . " doesn't fit."); - nuke_session(); - goaway(self::getApp()->get_baseurl()); - } - - // Renew the cookie - // Expires after 7 days by default, - // can be set via system.auth_cookie_lifetime - $authcookiedays = Config::get('system', 'auth_cookie_lifetime', 7); - new_cookie($authcookiedays * 24 * 60 * 60, $user); - - // Do the authentification if not done by now - if (!isset($_SESSION) || !isset($_SESSION['authenticated'])) { - authenticate_success($user); - - if (Config::get('system', 'paranoia')) { - $_SESSION['addr'] = $data->ip; - } - } - } - } - } - - if (isset($_SESSION) && x($_SESSION, 'authenticated')) { - if (x($_SESSION, 'visitor_id') && !x($_SESSION, 'uid')) { - $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", - intval($_SESSION['visitor_id']) - ); - if (DBM::is_result($r)) { - $a->contact = $r[0]; - } - } - - if (x($_SESSION, 'uid')) { - // already logged in user returning - $check = Config::get('system', 'paranoia'); - // extra paranoia - if the IP changed, log them out - if ($check && ($_SESSION['addr'] != $_SERVER['REMOTE_ADDR'])) { - logger('Session address changed. Paranoid setting in effect, blocking session. ' . - $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']); - nuke_session(); - goaway(self::getApp()->get_baseurl()); - } - - $user = dba::selectOne('user', [], - [ - 'uid' => $_SESSION['uid'], - 'blocked' => false, - 'account_expired' => false, - 'account_removed' => false, - 'verified' => true, - ] - ); - if (!DBM::is_result($user)) { - nuke_session(); - goaway(self::getApp()->get_baseurl()); - } - - // Make sure to refresh the last login time for the user if the user - // stays logged in for a long time, e.g. with "Remember Me" - $login_refresh = false; - if (!x($_SESSION['last_login_date'])) { - $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); - } - if (strcmp(datetime_convert('UTC', 'UTC', 'now - 12 hours'), $_SESSION['last_login_date']) > 0) { - $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); - $login_refresh = true; - } - authenticate_success($user, false, false, $login_refresh); - } - } - } - - /** - * @brief Wrapper for adding a login box. - * - * @param string $return_url The url relative to the base the user should be sent - * back to after login completes - * @param bool $register If $register == true provide a registration link. - * This will most always depend on the value of $a->config['register_policy']. - * @param array $hiddens optional - * - * @return string Returns the complete html for inserting into the page - * - * @hooks 'login_hook' string $o - */ - public static function form($return_url = null, $register = false, $hiddens = []) - { - $a = self::getApp(); - $o = ''; - $reg = false; - if ($register) { - $reg = array( - 'title' => t('Create a New Account'), - 'desc' => t('Register') - ); - } - - $noid = Config::get('system', 'no_openid'); - - if (is_null($return_url)) { - $return_url = $a->query_string; - } - - if (local_user()) { - $tpl = get_markup_template('logout.tpl'); - } else { - $a->page['htmlhead'] .= replace_macros( - get_markup_template('login_head.tpl'), - [ - '$baseurl' => $a->get_baseurl(true) - ] - ); - - $tpl = get_markup_template('login.tpl'); - $_SESSION['return_url'] = $return_url; - } - - $o .= replace_macros( - $tpl, - [ - '$dest_url' => self::getApp()->get_baseurl(true) . '/login', - '$logout' => t('Logout'), - '$login' => t('Login'), - - '$lname' => array('username', t('Nickname or Email: ') , '', ''), - '$lpassword' => array('password', t('Password: '), '', ''), - '$lremember' => array('remember', t('Remember me'), 0, ''), - - '$openid' => !$noid, - '$lopenid' => array('openid_url', t('Or login using OpenID: '),'',''), - - '$hiddens' => $hiddens, - - '$register' => $reg, - - '$lostpass' => t('Forgot your password?'), - '$lostlink' => t('Password Reset'), - - '$tostitle' => t('Website Terms of Service'), - '$toslink' => t('terms of service'), - - '$privacytitle' => t('Website Privacy Policy'), - '$privacylink' => t('privacy policy'), - ] - ); - - call_hooks('login_hook', $o); - - return $o; - } -} +get_baseurl()); + } + + return self::form(self::getApp()->get_baseurl(), $a->config['register_policy'] != REGISTER_CLOSED); + } + + public static function post() + { + session_unset(); + // OpenId Login + if ( + !x($_POST, 'password') + && ( + x($_POST, 'openid_url') + || x($_POST, 'username') + ) + ) { + $noid = Config::get('system', 'no_openid'); + + $openid_url = trim($_POST['openid_url'] ? : $_POST['username']); + + // if it's an email address or doesn't resolve to a URL, fail. + if ($noid || strpos($openid_url, '@') || !validate_url($openid_url)) { + notice(t('Login failed.') . EOL); + goaway(self::getApp()->get_baseurl()); + // NOTREACHED + } + + // Otherwise it's probably an openid. + try { + require_once 'library/openid.php'; + $openid = new LightOpenID; + $openid->identity = $openid_url; + $_SESSION['openid'] = $openid_url; + $_SESSION['remember'] = $_POST['remember']; + $openid->returnUrl = self::getApp()->get_baseurl(true) . '/openid'; + goaway($openid->authUrl()); + } catch (Exception $e) { + notice(t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '

' . t('The error message was:') . ' ' . $e->getMessage()); + } + // NOTREACHED + } + + if (x($_POST, 'auth-params') && $_POST['auth-params'] === 'login') { + $record = null; + + $addon_auth = array( + 'username' => trim($_POST['username']), + 'password' => trim($_POST['password']), + 'authenticated' => 0, + 'user_record' => null + ); + + /* + * A plugin indicates successful login by setting 'authenticated' to non-zero value and returning a user record + * Plugins should never set 'authenticated' except to indicate success - as hooks may be chained + * and later plugins should not interfere with an earlier one that succeeded. + */ + call_hooks('authenticate', $addon_auth); + + if ($addon_auth['authenticated'] && count($addon_auth['user_record'])) { + $record = $addon_auth['user_record']; + } else { + $user_id = User::authenticate(trim($_POST['username']), trim($_POST['password'])); + if ($user_id) { + $record = dba::selectFirst('user', [], ['uid' => $user_id]); + } + } + + if (!$record || !count($record)) { + logger('authenticate: failed login attempt: ' . notags(trim($_POST['username'])) . ' from IP ' . $_SERVER['REMOTE_ADDR']); + notice(t('Login failed.') . EOL); + goaway(self::getApp()->get_baseurl()); + } + + if (!$_POST['remember']) { + new_cookie(0); // 0 means delete on browser exit + } + + // if we haven't failed up this point, log them in. + $_SESSION['remember'] = $_POST['remember']; + $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); + authenticate_success($record, true, true); + + if (x($_SESSION, 'return_url')) { + $return_url = $_SESSION['return_url']; + unset($_SESSION['return_url']); + } else { + $return_url = ''; + } + + goaway($return_url); + } + } + + /** + * @brief Tries to auth the user from the cookie or session + * + * @todo Should be moved to Friendica\Core\Session when it's created + */ + public static function sessionAuth() + { + // When the "Friendica" cookie is set, take the value to authenticate and renew the cookie. + if (isset($_COOKIE["Friendica"])) { + $data = json_decode($_COOKIE["Friendica"]); + if (isset($data->uid)) { + + $user = dba::selectFirst('user', [], + [ + 'uid' => $data->uid, + 'blocked' => false, + 'account_expired' => false, + 'account_removed' => false, + 'verified' => true, + ] + ); + if (DBM::is_result($user)) { + if ($data->hash != cookie_hash($user)) { + logger("Hash for user " . $data->uid . " doesn't fit."); + nuke_session(); + goaway(self::getApp()->get_baseurl()); + } + + // Renew the cookie + // Expires after 7 days by default, + // can be set via system.auth_cookie_lifetime + $authcookiedays = Config::get('system', 'auth_cookie_lifetime', 7); + new_cookie($authcookiedays * 24 * 60 * 60, $user); + + // Do the authentification if not done by now + if (!isset($_SESSION) || !isset($_SESSION['authenticated'])) { + authenticate_success($user); + + if (Config::get('system', 'paranoia')) { + $_SESSION['addr'] = $data->ip; + } + } + } + } + } + + if (isset($_SESSION) && x($_SESSION, 'authenticated')) { + if (x($_SESSION, 'visitor_id') && !x($_SESSION, 'uid')) { + $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", + intval($_SESSION['visitor_id']) + ); + if (DBM::is_result($r)) { + $a->contact = $r[0]; + } + } + + if (x($_SESSION, 'uid')) { + // already logged in user returning + $check = Config::get('system', 'paranoia'); + // extra paranoia - if the IP changed, log them out + if ($check && ($_SESSION['addr'] != $_SERVER['REMOTE_ADDR'])) { + logger('Session address changed. Paranoid setting in effect, blocking session. ' . + $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']); + nuke_session(); + goaway(self::getApp()->get_baseurl()); + } + + $user = dba::selectFirst('user', [], + [ + 'uid' => $_SESSION['uid'], + 'blocked' => false, + 'account_expired' => false, + 'account_removed' => false, + 'verified' => true, + ] + ); + if (!DBM::is_result($user)) { + nuke_session(); + goaway(self::getApp()->get_baseurl()); + } + + // Make sure to refresh the last login time for the user if the user + // stays logged in for a long time, e.g. with "Remember Me" + $login_refresh = false; + if (!x($_SESSION['last_login_date'])) { + $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); + } + if (strcmp(datetime_convert('UTC', 'UTC', 'now - 12 hours'), $_SESSION['last_login_date']) > 0) { + $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); + $login_refresh = true; + } + authenticate_success($user, false, false, $login_refresh); + } + } + } + + /** + * @brief Wrapper for adding a login box. + * + * @param string $return_url The url relative to the base the user should be sent + * back to after login completes + * @param bool $register If $register == true provide a registration link. + * This will most always depend on the value of $a->config['register_policy']. + * @param array $hiddens optional + * + * @return string Returns the complete html for inserting into the page + * + * @hooks 'login_hook' string $o + */ + public static function form($return_url = null, $register = false, $hiddens = []) + { + $a = self::getApp(); + $o = ''; + $reg = false; + if ($register) { + $reg = array( + 'title' => t('Create a New Account'), + 'desc' => t('Register') + ); + } + + $noid = Config::get('system', 'no_openid'); + + if (is_null($return_url)) { + $return_url = $a->query_string; + } + + if (local_user()) { + $tpl = get_markup_template('logout.tpl'); + } else { + $a->page['htmlhead'] .= replace_macros( + get_markup_template('login_head.tpl'), + [ + '$baseurl' => $a->get_baseurl(true) + ] + ); + + $tpl = get_markup_template('login.tpl'); + $_SESSION['return_url'] = $return_url; + } + + $o .= replace_macros( + $tpl, + [ + '$dest_url' => self::getApp()->get_baseurl(true) . '/login', + '$logout' => t('Logout'), + '$login' => t('Login'), + + '$lname' => array('username', t('Nickname or Email: ') , '', ''), + '$lpassword' => array('password', t('Password: '), '', ''), + '$lremember' => array('remember', t('Remember me'), 0, ''), + + '$openid' => !$noid, + '$lopenid' => array('openid_url', t('Or login using OpenID: '),'',''), + + '$hiddens' => $hiddens, + + '$register' => $reg, + + '$lostpass' => t('Forgot your password?'), + '$lostlink' => t('Password Reset'), + + '$tostitle' => t('Website Terms of Service'), + '$toslink' => t('terms of service'), + + '$privacytitle' => t('Website Privacy Policy'), + '$privacylink' => t('privacy policy'), + ] + ); + + call_hooks('login_hook', $o); + + return $o; + } +} diff --git a/src/Network/FKOAuth1.php b/src/Network/FKOAuth1.php index 080e488ad5..07e15ad51e 100644 --- a/src/Network/FKOAuth1.php +++ b/src/Network/FKOAuth1.php @@ -40,7 +40,7 @@ class FKOAuth1 extends OAuthServer { logger("FKOAuth1::loginUser $uid"); $a = get_app(); - $record = dba::selectOne('user', [], ['uid' => $uid, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1]); + $record = dba::selectFirst('user', [], ['uid' => $uid, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1]); if (!DBM::is_result($record)) { logger('FKOAuth1::loginUser failure: ' . print_r($_SERVER, true), LOGGER_DEBUG); @@ -63,7 +63,7 @@ class FKOAuth1 extends OAuthServer $a->timezone = $a->user['timezone']; } - $r = dba::selectOne('contact', [], ['uid' => $_SESSION['uid'], 'self' => 1]); + $r = dba::selectFirst('contact', [], ['uid' => $_SESSION['uid'], 'self' => 1]); if (DBM::is_result($r)) { $a->contact = $r; diff --git a/src/Network/FKOAuthDataStore.php b/src/Network/FKOAuthDataStore.php index fe4dbdc163..ccb08ccbba 100644 --- a/src/Network/FKOAuthDataStore.php +++ b/src/Network/FKOAuthDataStore.php @@ -88,7 +88,7 @@ class FKOAuthDataStore extends OAuthDataStore */ public function lookup_nonce($consumer, $token, $nonce, $timestamp) { - $r = dba::selectOne('tokens', ['id', 'secret'], ['client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp]); + $r = dba::selectFirst('tokens', ['id', 'secret'], ['client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp]); if (DBM::is_result($r)) { return new \OAuthToken($r['id'], $r['secret']); diff --git a/src/Network/Probe.php b/src/Network/Probe.php index fb2e091619..57c1ed284c 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -406,7 +406,7 @@ class Probe $condition = array('nurl' => normalise_link($data["url"])); - $old_fields = dba::selectOne('gcontact', $fieldnames, $condition); + $old_fields = dba::selectFirst('gcontact', $fieldnames, $condition); dba::update('gcontact', $fields, $condition, $old_fields); @@ -439,7 +439,7 @@ class Probe $condition = array('nurl' => normalise_link($data["url"]), 'self' => false, 'uid' => 0); - $old_fields = dba::selectOne('contact', $fieldnames, $condition); + $old_fields = dba::selectFirst('contact', $fieldnames, $condition); dba::update('contact', $fields, $condition, $old_fields); } diff --git a/src/Object/Post.php b/src/Object/Post.php index 0997f45afb..2675fe2fc2 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -261,7 +261,7 @@ class Post extends BaseObject 'classundo' => $item['starred'] ? "" : "hidden", 'starred' => t('starred'), ); - $r = dba::selectOne('thread', ['ignored'], ['uid' => $item['uid'], 'iid' => $item['id']]); + $r = dba::selectFirst('thread', ['ignored'], ['uid' => $item['uid'], 'iid' => $item['id']]); if (DBM::is_result($r)) { $ignore = array( 'do' => t("ignore thread"), diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 7eae2373a3..23220d04cd 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -2015,7 +2015,7 @@ class Diaspora // like on comments have the comment as parent. So we need to fetch the toplevel parent if ($parent_item["id"] != $parent_item["parent"]) { - $toplevel = dba::selectOne('item', ['origin'], ['id' => $parent_item["parent"]]); + $toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]); $origin = $toplevel["origin"]; } else { $origin = $parent_item["origin"]; @@ -2317,7 +2317,7 @@ class Diaspora $arr["last-child"] = 1; - $user = dba::selectOne('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]]); + $user = dba::selectFirst('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]]); $arr["allow_cid"] = $user["allow_cid"]; $arr["allow_gid"] = $user["allow_gid"]; @@ -2741,7 +2741,7 @@ class Diaspora while ($item = dba::fetch($r)) { // Fetch the parent item - $parent = dba::selectOne('item', ['author-link', 'origin'], ['id' => $item["parent"]]); + $parent = dba::selectFirst('item', ['author-link', 'origin'], ['id' => $item["parent"]]); // Only delete it if the parent author really fits if (!link_compare($parent["author-link"], $contact["url"]) && !link_compare($item["author-link"], $contact["url"])) { @@ -3255,7 +3255,7 @@ class Diaspora // If the item belongs to a user, we take this user id. if ($item['uid'] == 0) { $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]; - $first_user = dba::selectOne('user', ['uid'], $condition); + $first_user = dba::selectFirst('user', ['uid'], $condition); $owner = User::getOwnerDataById($first_user['uid']); } else { $owner = User::getOwnerDataById($item['uid']); diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index 1bc8f513e0..af57ced7d4 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -254,7 +254,7 @@ class Feed { if (!$simulate) { $condition = ["`uid` = ? AND `uri` = ? AND `network` IN (?, ?)", $importer["uid"], $item["uri"], NETWORK_FEED, NETWORK_DFRN]; - $previous = dba::selectOne('item', ['id'], $condition); + $previous = dba::selectFirst('item', ['id'], $condition); if (DBM::is_result($previous)) { logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$previous["id"], LOGGER_DEBUG); continue; diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index e5786f517b..242af46045 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -72,7 +72,7 @@ class OStatus if ($aliaslink != '') { $condition = ["`uid` = ? AND `alias` = ? AND `network` != ?", $importer["uid"], $aliaslink, NETWORK_STATUSNET]; - $r = dba::selectOne('contact', [], $condition); + $r = dba::selectFirst('contact', [], $condition); if (DBM::is_result($r)) { $found = true; @@ -91,7 +91,7 @@ class OStatus $condition = ["`uid` = ? AND `nurl` IN (?, ?) AND `network` != ?", $importer["uid"], normalise_link($author["author-link"]), normalise_link($aliaslink), NETWORK_STATUSNET]; - $r = dba::selectOne('contact', [], $condition); + $r = dba::selectFirst('contact', [], $condition); if (DBM::is_result($r)) { $found = true; @@ -106,7 +106,7 @@ class OStatus if (!$found && ($addr != "")) { $condition = ["`uid` = ? AND `addr` = ? AND `network` != ?", $importer["uid"], $addr, NETWORK_STATUSNET]; - $r = dba::selectOne('contact', [], $condition); + $r = dba::selectFirst('contact', [], $condition); if (DBM::is_result($r)) { $found = true; @@ -208,7 +208,7 @@ class OStatus if ($cid) { $fields = ['url', 'nurl', 'name', 'nick', 'alias', 'about', 'location']; - $old_contact = dba::selectOne('contact', $fields, ['id' => $cid]); + $old_contact = dba::selectFirst('contact', $fields, ['id' => $cid]); // Update it with the current values $fields = array('url' => $author["author-link"], 'name' => $contact["name"], @@ -542,7 +542,7 @@ class OStatus private static function deleteNotice($item) { $condition = ['uid' => $item['uid'], 'author-link' => $item['author-link'], 'uri' => $item['uri']]; - $deleted = dba::selectOne('item', ['id', 'parent-uri'], $condition); + $deleted = dba::selectFirst('item', ['id', 'parent-uri'], $condition); if (!DBM::is_result($deleted)) { logger('Item from '.$item['author-link'].' with uri '.$item['uri'].' for user '.$item['uid']." wasn't found. We don't delete it. "); return; @@ -896,7 +896,7 @@ class OStatus private static function fetchRelated($related, $related_uri, $importer) { $condition = ['`item-uri` = ? AND `protocol` IN (?, ?)', $related_uri, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON]; - $conversation = dba::selectOne('conversation', ['source', 'protocol'], $condition); + $conversation = dba::selectFirst('conversation', ['source', 'protocol'], $condition); if (DBM::is_result($conversation)) { $stored = true; $xml = $conversation['source']; @@ -976,7 +976,7 @@ class OStatus // Finally we take the data that we fetched from "ostatus:conversation" if ($xml == '') { $condition = ['item-uri' => $related_uri, 'protocol' => PROTOCOL_SPLITTED_CONV]; - $conversation = dba::selectOne('conversation', ['source'], $condition); + $conversation = dba::selectFirst('conversation', ['source'], $condition); if (DBM::is_result($conversation)) { $stored = true; logger('Got cached XML from conversation for URI '.$related_uri, LOGGER_DEBUG); diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 7685826ba1..f579a40190 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -66,7 +66,7 @@ class PortableContact if ($cid) { if (!$url || !$uid) { - $r = dba::selectOne('contact', ['poco', 'uid'], ['id' => $cid]); + $r = dba::selectFirst('contact', ['poco', 'uid'], ['id' => $cid]); if (DBM::is_result($r)) { $url = $r['poco']; $uid = $r['uid']; @@ -813,7 +813,7 @@ class PortableContact return false; } - $servers = dba::selectOne('gserver', [], ['nurl' => normalise_link($server_url)]); + $servers = dba::selectFirst('gserver', [], ['nurl' => normalise_link($server_url)]); if (DBM::is_result($servers)) { if ($servers["created"] <= NULL_DATE) { $fields = ['created' => datetime_convert()]; diff --git a/src/Util/ExAuth.php b/src/Util/ExAuth.php index 777d410551..5ae24534ac 100644 --- a/src/Util/ExAuth.php +++ b/src/Util/ExAuth.php @@ -226,7 +226,7 @@ class ExAuth if ($a->get_hostname() == $aCommand[2]) { $this->writeLog(LOG_INFO, 'internal auth for ' . $sUser . '@' . $aCommand[2]); - $aUser = dba::selectOne('user', ['uid', 'password'], ['nickname' => $sUser]); + $aUser = dba::selectFirst('user', ['uid', 'password'], ['nickname' => $sUser]); if (DBM::is_result($aUser)) { $uid = $aUser['uid']; $success = User::authenticate($aUser, $aCommand[3]); diff --git a/src/Util/Lock.php b/src/Util/Lock.php index 166239a78e..66a568811d 100644 --- a/src/Util/Lock.php +++ b/src/Util/Lock.php @@ -126,7 +126,7 @@ class Lock do { dba::lock('locks'); - $lock = dba::selectOne('locks', ['locked', 'pid'], ['name' => $fn_name]); + $lock = dba::selectFirst('locks', ['locked', 'pid'], ['name' => $fn_name]); if (DBM::is_result($lock)) { if ($lock['locked']) { diff --git a/src/Worker/Expire.php b/src/Worker/Expire.php index f48680fb58..9b2308da37 100644 --- a/src/Worker/Expire.php +++ b/src/Worker/Expire.php @@ -39,7 +39,7 @@ class Expire { } return; } elseif (intval($param) > 0) { - $user = dba::selectOne('user', ['uid', 'username', 'expire'], ['uid' => $param]); + $user = dba::selectFirst('user', ['uid', 'username', 'expire'], ['uid' => $param]); if (DBM::is_result($user)) { logger('Expire items for user '.$user['uid'].' ('.$user['username'].') - interval: '.$user['expire'], LOGGER_DEBUG); item_expire($user['uid'], $user['expire']); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 50ac15200c..710bcfa13b 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -267,7 +267,7 @@ class Notifier { $fields = ['forum', 'prv']; $condition = ['id' => $target_item['contact-id']]; - $contact = dba::selectOne('contact', $fields, $condition); + $contact = dba::selectFirst('contact', $fields, $condition); if (!DBM::is_result($contact)) { // Should never happen return false; diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index f53c392c5a..08dd23ad8b 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -42,7 +42,7 @@ Class OnePoll $d = datetime_convert(); - $contact = dba::selectOne('contact', [], ['id' => $contact_id]); + $contact = dba::selectFirst('contact', [], ['id' => $contact_id]); if (!DBM::is_result($contact)) { logger('Contact not found or cannot be used.'); return; @@ -339,10 +339,10 @@ Class OnePoll logger("Mail: Enabled", LOGGER_DEBUG); $mbox = null; - $user = dba::selectOne('user', ['prvkey'], ['uid' => $importer_uid]); + $user = dba::selectFirst('user', ['prvkey'], ['uid' => $importer_uid]); $condition = ["`server` != '' AND `uid` = ?", $importer_uid]; - $mailconf = dba::selectOne('mailacct', [], $condition); + $mailconf = dba::selectFirst('mailacct', [], $condition); if (DBM::is_result($user) && DBM::is_result($mailconf)) { $mailbox = Email::constructMailboxName($mailconf); $password = ''; @@ -384,7 +384,7 @@ Class OnePoll // Have we seen it before? $fields = ['deleted', 'id']; $condition = ['uid' => $importer_uid, 'uri' => $datarray['uri']]; - $r = dba::selectOne('item', $fields, $condition); + $r = dba::selectFirst('item', $fields, $condition); if (DBM::is_result($r)) { logger("Mail: Seen before ".$msg_uid." for ".$mailconf['user']." UID: ".$importer_uid." URI: ".$datarray['uri'],LOGGER_DEBUG); diff --git a/src/Worker/Queue.php b/src/Worker/Queue.php index 6adc32b834..1b8620a9d3 100644 --- a/src/Worker/Queue.php +++ b/src/Worker/Queue.php @@ -80,7 +80,7 @@ class Queue $q_item = $r[0]; - $contact = dba::selectOne('contact', [], ['id' => $q_item['cid']]); + $contact = dba::selectFirst('contact', [], ['id' => $q_item['cid']]); if (!DBM::is_result($contact)) { remove_queue_item($q_item['id']); return; @@ -113,7 +113,7 @@ class Queue } } - $user = dba::selectOne('user', [], ['uid' => $contact['uid']]); + $user = dba::selectFirst('user', [], ['uid' => $contact['uid']]); if (!DBM::is_result($user)) { remove_queue_item($q_item['id']); return; diff --git a/util/global_community_silence.php b/util/global_community_silence.php index 4a324dd744..14cd06e7aa 100755 --- a/util/global_community_silence.php +++ b/util/global_community_silence.php @@ -57,7 +57,7 @@ if (in_array($net['network'], array(NETWORK_PHANTOM, NETWORK_MAIL))) { exit(1); } $nurl = normalise_link($net['url']); -$r = dba::selectOne("contact", ["id"], ["nurl" => $nurl, "uid" => 0]); +$r = dba::selectFirst("contact", ["id"], ["nurl" => $nurl, "uid" => 0]); if (DBM::is_result($r)) { dba::update("contact", array("hidden" => true), array("id" => $r["id"])); echo "NOTICE: The account should be silenced from the global community page\r\n"; From 483d1a1bcbe88408b60db8374b05847717cb47cb Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 10 Jan 2018 10:51:49 -0500 Subject: [PATCH 4/5] Rename selectOne to selectFirst in comment --- include/dba.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/dba.php b/include/dba.php index 293bfdc002..32fa88d95a 100644 --- a/include/dba.php +++ b/include/dba.php @@ -587,8 +587,8 @@ class dba { /** * Fetches the first row - * - * Please use dba::selectOne or dba::exists whenever this is possible. + * + * Please use dba::selectFirst or dba::exists whenever this is possible. * * @brief Fetches the first row * @param string $sql SQL statement @@ -1086,7 +1086,7 @@ class dba { /** * Retrieve a single record from a table and returns it in an associative array - * + * * @brief Retrieve a single record from a table * @param string $table * @param array $fields From 1fda0ae4ae60449bb8d260d00b6ccae411dfcf0c Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 10 Jan 2018 13:04:00 -0500 Subject: [PATCH 5/5] Replace select(limit => 1) by selectFirst() in Model\Term and include/enotify - Add new array declaration syntax - Add braces --- include/enotify.php | 4 ++-- src/Model/Term.php | 25 ++++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/include/enotify.php b/include/enotify.php index e128ae9bed..2869572562 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -50,8 +50,8 @@ function notification($params) } if ($params['type'] != SYSTEM_EMAIL) { - $user = dba::select('user', array('nickname', 'page-flags'), - array('uid' => $params['uid']), array('limit' => 1)); + $user = dba::selectFirst('user', ['nickname', 'page-flags'], + ['uid' => $params['uid']]); // There is no need to create notifications for forum accounts if (!DBM::is_result($user) || in_array($user["page-flags"], array(PAGE_COMMUNITY, PAGE_PRVGROUP))) { diff --git a/src/Model/Term.php b/src/Model/Term.php index 07dec52134..5f536cae42 100644 --- a/src/Model/Term.php +++ b/src/Model/Term.php @@ -16,13 +16,11 @@ class Term */ public static function createFromItem($itemid) { - $messages = dba::select('item', ['uid', 'deleted', 'file'], ['id' => $itemid], ['limit' => 1]); - if (!$messages) { + $message = dba::selectFirst('item', ['uid', 'deleted', 'file'], ['id' => $itemid]); + if (!\Friendica\Database\DBM::is_result($message)) { return; } - $message = $messages[0]; - // Clean up all tags q("DELETE FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", intval(TERM_OBJ_POST), @@ -30,18 +28,31 @@ class Term intval(TERM_FILE), intval(TERM_CATEGORY)); - if ($message["deleted"]) + if ($message["deleted"]) { return; + } if (preg_match_all("/\[(.*?)\]/ism", $message["file"], $files)) { foreach ($files[1] as $file) { - dba::insert('term', ['uid' => $message["uid"], 'oid' => $itemid, 'otype' => TERM_OBJ_POST, 'type' => TERM_FILE, 'term' => $file]); + dba::insert('term', [ + 'uid' => $message["uid"], + 'oid' => $itemid, + 'otype' => TERM_OBJ_POST, + 'type' => TERM_FILE, + 'term' => $file + ]); } } if (preg_match_all("/\<(.*?)\>/ism", $message["file"], $files)) { foreach ($files[1] as $file) { - dba::insert('term', ['uid' => $message["uid"], 'oid' => $itemid, 'otype' => TERM_OBJ_POST, 'type' => TERM_CATEGORY, 'term' => $file]); + dba::insert('term', [ + 'uid' => $message["uid"], + 'oid' => $itemid, + 'otype' => TERM_OBJ_POST, + 'type' => TERM_CATEGORY, + 'term' => $file + ]); } } }