diff --git a/boot.php b/boot.php index 72cb8a3418..b09da9c17f 100644 --- a/boot.php +++ b/boot.php @@ -18,7 +18,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_CODENAME', 'Ginger'); define ( 'FRIENDICA_VERSION', '3.3.2' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1177 ); +define ( 'DB_UPDATE_VERSION', 1178 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/include/Scrape.php b/include/Scrape.php index fa2d7944a3..7df86d9f2d 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -345,7 +345,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { $result = Cache::get("probe_url:".$mode.":".$url); if (!is_null($result)) { - $result = unserialize($result); + $result = unserialize($result); return $result; } @@ -356,6 +356,23 @@ function probe_url($url, $mode = PROBE_NORMAL) { $diaspora_key = ''; $has_lrdd = false; $email_conversant = false; + $connectornetworks = false; + $appnet = false; + + if (strpos($url,'twitter.com')) { + $connectornetworks = true; + $network = NETWORK_TWITTER; + } + + if (strpos($url,'www.facebook.com')) { + $connectornetworks = true; + $network = NETWORK_FACEBOOK; + } + + if (strpos($url,'alpha.app.net')) { + $appnet = true; + $network = NETWORK_APPNET; + } // Twitter is deactivated since twitter closed its old API //$twitter = ((strpos($url,'twitter.com') !== false) ? true : false); @@ -363,7 +380,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { $at_addr = ((strpos($url,'@') !== false) ? true : false); - if((! $twitter) && (! $lastfm)) { + if((!$appnet) && (!$lastfm) && !$connectornetworks) { if(strpos($url,'mailto:') !== false && $at_addr) { $url = str_replace('mailto:','',$url); @@ -606,13 +623,16 @@ function probe_url($url, $mode = PROBE_NORMAL) { // Will leave it to others to figure out how to grab the avatar, which is on the $url page in the open graph meta links } - if($twitter || ! $poll) + if($appnet || ! $poll) $check_feed = true; if((! isset($vcard)) || (! x($vcard,'fn')) || (! $profile)) $check_feed = true; if(($at_addr) && (! count($links))) $check_feed = false; + if ($connectornetworks) + $check_feed = false; + if($check_feed) { $feedret = scrape_feed(($poll) ? $poll : $url); diff --git a/include/dbstructure.php b/include/dbstructure.php index d0a7324e27..adb826c8b4 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -415,6 +415,8 @@ function db_definition() { "nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "about" => array("type" => "text", "not null" => "1"), + "keywords" => array("type" => "text", "not null" => "1"), + "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "attag" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "text", "not null" => "1"), "thumb" => array("type" => "text", "not null" => "1"), @@ -619,6 +621,10 @@ function db_definition() { "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "connect" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "updated" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "about" => array("type" => "text", "not null" => "1"), + "keywords" => array("type" => "text", "not null" => "1"), + "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), ), "indexes" => array( diff --git a/include/diaspora.php b/include/diaspora.php index 0cc97713ee..affd59d489 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -2252,7 +2252,19 @@ function diaspora_profile($importer,$xml,$msg) { $birthday = unxmlify($xml->birthday); $location = diaspora2bb(unxmlify($xml->location)); $about = diaspora2bb(unxmlify($xml->bio)); + $gender = unxmlify($xml->gender); + $tags = unxmlify($xml->tag_string); + $tags = explode("#", $tags); + + $keywords = array(); + foreach ($tags as $tag) { + $tag = trim(strtolower($tag)); + if ($tag != "") + $keywords[] = $tag; + } + + $keywords = implode(", ", $keywords); $handle_parts = explode("@", $diaspora_handle); if($name === '') { @@ -2288,7 +2300,7 @@ function diaspora_profile($importer,$xml,$msg) { // TODO: update name on item['author-name'] if the name changed. See consume_feed() // Not doing this currently because D* protocol is scheduled for revision soon. - $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s', `location` = '%s', `about` = '%s' WHERE `id` = %d AND `uid` = %d", + $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `id` = %d AND `uid` = %d", dbesc($name), dbesc(datetime_convert()), dbesc($images[0]), @@ -2298,10 +2310,18 @@ function diaspora_profile($importer,$xml,$msg) { dbesc($birthday), dbesc($location), dbesc($about), + dbesc($keywords), + dbesc($gender), intval($contact['id']), intval($importer['uid']) ); + if (unxmlify($xml->searchable) == "true") { + require_once('include/socgraph.php'); + poco_check($contact['url'], $name, NETWORK_DIASPORA, $images[0], $about, $location, $gender, $keywords, "", + datetime_convert(), $contact['id'], $importer['uid']); + } + $profileurl = ""; $author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($contact['url']))); diff --git a/include/items.php b/include/items.php index 77337fe0d9..344b06ec8b 100644 --- a/include/items.php +++ b/include/items.php @@ -1350,6 +1350,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa return 0; } + // Store the unescaped version + $unescaped = $arr; + dbesc_array($arr); logger('item_store: ' . print_r($arr,true), LOGGER_DATA); @@ -1360,10 +1363,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa . implode("', '", array_values($arr)) . "')" ); - // find the item we just created + // And restore it + $arr = $unescaped; + // find the item we just created $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC ", - $arr['uri'], // already dbesc'd + dbesc($arr['uri']), intval($arr['uid']) ); @@ -1374,8 +1379,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa // Add every contact to the global contact table // Contacts from the statusnet connector are also added since you could add them in OStatus as well. if (!$arr['private'] AND in_array($arr["network"], - array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) - poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", $arr["received"], $arr['contact-id'], $arr['uid']); + array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) { + poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", "", "", "", "", $arr["received"], $arr["contact-id"], $arr["uid"]); + + // Maybe its a body with a shared item? Then extract a global contact from it. + poco_contact_from_body($arr["body"], $arr["received"], $arr["contact-id"], $arr["uid"]); + } // Set "success_update" to the date of the last time we heard from this contact // This can be used to filter for inactive contacts and poco. @@ -1437,7 +1446,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa if(count($r) > 1) { logger('item_store: duplicated post occurred. Removing duplicates.'); q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `id` != %d ", - $arr['uri'], + dbesc($arr['uri']), intval($arr['uid']), intval($current_post) ); diff --git a/include/socgraph.php b/include/socgraph.php index 0a85037901..07bbee32ac 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -39,7 +39,7 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) { if(! $url) return; - $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network' : '?fields=displayName,urls,photos,updated,network') ; + $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender') ; logger('poco_load: ' . $url, LOGGER_DEBUG); @@ -69,6 +69,10 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) { $name = ''; $network = ''; $updated = '0000-00-00 00:00:00'; + $location = ''; + $about = ''; + $keywords = ''; + $gender = ''; $name = $entry->displayName; @@ -99,8 +103,31 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) { if(isset($entry->network)) $network = $entry->network; - poco_check($profile_url, $name, $network, $profile_photo, $connect_url, $updated, $cid, $uid, $zcid); + if(isset($entry->currentLocation)) + $location = $entry->currentLocation; + if(isset($entry->aboutMe)) + $about = $entry->aboutMe; + + if(isset($entry->gender)) + $gender = $entry->gender; + + if(isset($entry->tags)) + foreach($entry->tags as $tag) + $keywords = implode(", ", $tag); + + poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $cid, $uid, $zcid); + + // Update the Friendica contacts. Diaspora is doing it via a message. (See include/diaspora.php) + if (($location != "") OR ($about != "") OR ($keywords != "") OR ($gender != "")) + q("UPDATE `contact` SET `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s' + WHERE `nurl` = '%s' AND NOT `self` AND `network` = '%s'", + dbesc($location), + dbesc($about), + dbesc($keywords), + dbesc($gender), + dbesc(normalise_link($profile_url)), + dbesc(NETWORK_DFRN)); } logger("poco_load: loaded $total entries",LOGGER_DEBUG); @@ -112,23 +139,60 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) { } -function poco_check($profile_url, $name, $network, $profile_photo, $connect_url, $updated, $cid = 0, $uid = 0, $zcid = 0) { +function poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $cid = 0, $uid = 0, $zcid = 0) { $gcid = ""; - if (($profile_url == "") OR ($name == "") OR ($profile_photo == "")) + if ($profile_url == "") return $gcid; - logger("profile-check URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG); - $x = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", dbesc(normalise_link($profile_url)) ); + if(count($x)) + $network = $x[0]["network"]; + + if (($network == "") OR ($name == "") OR ($profile_photo == "")) { + require_once("include/Scrape.php"); + + $data = probe_url($profile_url, PROBE_DIASPORA); + $network = $data["network"]; + $name = $data["name"]; + $profile_photo = $data["photo"]; + } + + if (count($x) AND ($x[0]["network"] == "") AND ($network != "")) { + q("UPDATE `gcontact` SET `network` = '%s' WHERE `nurl` = '%s'", + dbesc($network), + dbesc(normalise_link($profile_url)) + ); + } + + if (($name == "") OR ($profile_photo == "")) + return $gcid; + + if (!in_array($network, array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_STATUSNET))) + return $gcid; + + logger("profile-check URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG); if(count($x)) { $gcid = $x[0]['id']; + if (($location == "") AND ($x[0]['location'] != "")) + $location = $x[0]['location']; + + if (($about == "") AND ($x[0]['about'] != "")) + $about = $x[0]['about']; + + if (($gender == "") AND ($x[0]['gender'] != "")) + $gender = $x[0]['gender']; + + if (($keywords == "") AND ($x[0]['keywords'] != "")) + $keywords = $x[0]['keywords']; + if($x[0]['name'] != $name || $x[0]['photo'] != $profile_photo || $x[0]['updated'] < $updated) { - q("update gcontact set `name` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', `updated` = '%s' + q("update gcontact set `name` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', + `updated` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s' where `nurl` = '%s'", dbesc($name), dbesc($network), @@ -136,19 +200,27 @@ function poco_check($profile_url, $name, $network, $profile_photo, $connect_url, dbesc($connect_url), dbesc($profile_url), dbesc($updated), + dbesc($location), + dbesc($about), + dbesc($keywords), + dbesc($gender), dbesc(normalise_link($profile_url)) ); } } else { - q("insert into `gcontact` (`name`,`network`, `url`,`nurl`,`photo`,`connect`, `updated`) - values ('%s', '%s', '%s', '%s', '%s','%s', '%s')", + q("insert into `gcontact` (`name`,`network`, `url`,`nurl`,`photo`,`connect`, `updated`, `location`, `about`, `keywords`, `gender`) + values ('%s', '%s', '%s', '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s')", dbesc($name), dbesc($network), dbesc($profile_url), dbesc(normalise_link($profile_url)), dbesc($profile_photo), dbesc($connect_url), - dbesc($updated) + dbesc($updated), + dbesc($location), + dbesc($about), + dbesc($keywords), + dbesc($gender) ); $x = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", dbesc(normalise_link($profile_url)) @@ -194,6 +266,30 @@ function poco_check($profile_url, $name, $network, $profile_photo, $connect_url, return $gcid; } +function poco_contact_from_body($body, $created, $cid, $uid) { + preg_replace_callback("/\[share(.*?)\].*?\[\/share\]/ism", + function ($match) use ($created, $cid, $uid){ + return(sub_poco_from_share($match, $created, $cid, $uid)); + }, $body); +} + +function sub_poco_from_share($share, $created, $cid, $uid) { + $profile = ""; + preg_match("/profile='(.*?)'/ism", $share[1], $matches); + if ($matches[1] != "") + $profile = $matches[1]; + + preg_match('/profile="(.*?)"/ism', $share[1], $matches); + if ($matches[1] != "") + $profile = $matches[1]; + + if ($profile == "") + return; + + logger("prepare poco_check for profile ".$profile, LOGGER_DEBUG); + poco_check($profile, "", "", "", "", "", "", "", "", $created, $cid, $uid); +} + function count_common_friends($uid,$cid) { $r = q("SELECT count(*) as `total` diff --git a/mod/poco.php b/mod/poco.php index 154f13c7ec..c8d8f72e83 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -22,7 +22,12 @@ function poco_init(&$a) { $format = (($_GET['format']) ? $_GET['format'] : 'json'); $justme = false; + $global = false; + if($a->argc > 1 && $a->argv[1] === '@global') { + $global = true; + $update_limit = date("Y-m-d H:i:s", time() - 30 * 86400); + } if($a->argc > 2 && $a->argv[2] === '@me') $justme = true; if($a->argc > 3 && $a->argv[3] === '@all') @@ -33,7 +38,7 @@ function poco_init(&$a) { $cid = intval($a->argv[4]); - if(! $system_mode) { + if(!$system_mode AND !$global) { $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid` where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1", dbesc($user) @@ -46,13 +51,21 @@ function poco_init(&$a) { if($justme) $sql_extra = " AND `contact`.`self` = 1 "; - else - $sql_extra = " AND `contact`.`self` = 0 "; +// else +// $sql_extra = " AND `contact`.`self` = 0 "; if($cid) $sql_extra = sprintf(" AND `contact`.`id` = %d ",intval($cid)); - if($system_mode) { + if(x($_GET,'updatedSince')) + $update_limit = date("Y-m-d H:i:s",strtotime($_GET['updatedSince'])); + + if ($global) { + $r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `network` IN ('%s')", + dbesc($update_limit), + dbesc(NETWORK_DFRN) + ); + } elseif($system_mode) { $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s', '') AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) ", dbesc(NETWORK_DFRN), @@ -60,8 +73,7 @@ function poco_init(&$a) { dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) ); - } - else { + } else { $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 AND `network` IN ('%s', '%s', '%s', '%s', '') $sql_extra", intval($user['uid']), @@ -82,9 +94,18 @@ function poco_init(&$a) { $itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); - if($system_mode) { - $r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s', '') - AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) LIMIT %d, %d", + if ($global) { + $r = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND `network` IN ('%s') LIMIT %d, %d", + dbesc($update_limit), + dbesc(NETWORK_DFRN), + intval($startIndex), + intval($itemsPerPage) + ); + } elseif($system_mode) { + $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, `profile`.`gender` AS `pgender` + FROM `contact` INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid` + WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s', '') AND `profile`.`is-default` + AND `contact`.`uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) LIMIT %d, %d", dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), @@ -92,8 +113,7 @@ function poco_init(&$a) { intval($startIndex), intval($itemsPerPage) ); - } - else { + } else { $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 AND `network` IN ('%s', '%s', '%s', '%s', '') $sql_extra LIMIT %d, %d", intval($user['uid']), @@ -105,13 +125,14 @@ function poco_init(&$a) { intval($itemsPerPage) ); } + $ret = array(); if(x($_GET,'sorted')) - $ret['sorted'] = 'false'; + $ret['sorted'] = false; if(x($_GET,'filtered')) - $ret['filtered'] = 'false'; - if(x($_GET,'updatedSince')) - $ret['updateSince'] = 'false'; + $ret['filtered'] = false; + if(x($_GET,'updatedSince') AND !$global) + $ret['updatedSince'] = false; $ret['startIndex'] = (string) $startIndex; $ret['itemsPerPage'] = (string) $itemsPerPage; @@ -128,7 +149,9 @@ function poco_init(&$a) { 'photos' => false, 'aboutMe' => false, 'currentLocation' => false, - 'network' => false + 'network' => false, + 'gender' => false, + 'tags' => false ); if((! x($_GET,'fields')) || ($_GET['fields'] === '@all')) @@ -143,6 +166,18 @@ function poco_init(&$a) { if(is_array($r)) { if(count($r)) { foreach($r as $rr) { + if (($rr['about'] == "") AND isset($rr['pabout'])) + $rr['about'] = $rr['pabout']; + + if (($rr['location'] == "") AND isset($rr['plocation'])) + $rr['location'] = $rr['plocation']; + + if (($rr['gender'] == "") AND isset($rr['pgender'])) + $rr['gender'] = $rr['pgender']; + + if (($rr['keywords'] == "") AND isset($rr['pub_keywords'])) + $rr['keywords'] = $rr['pub_keywords']; + $entry = array(); if($fields_ret['id']) $entry['id'] = $rr['id']; @@ -152,6 +187,8 @@ function poco_init(&$a) { $entry['aboutMe'] = bbcode($rr['about'], false, false); if($fields_ret['currentLocation']) $entry['currentLocation'] = $rr['location']; + if($fields_ret['gender']) + $entry['gender'] = $rr['gender']; if($fields_ret['urls']) { $entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile')); if($rr['addr'] && ($rr['network'] !== NETWORK_MAIL)) @@ -160,16 +197,19 @@ function poco_init(&$a) { if($fields_ret['preferredUsername']) $entry['preferredUsername'] = $rr['nick']; if($fields_ret['updated']) { - $entry['updated'] = $rr['success_update']; + if (!$global) { + $entry['updated'] = $rr['success_update']; - if ($rr['name-date'] > $entry['updated']) - $entry['updated'] = $rr['name-date']; + if ($rr['name-date'] > $entry['updated']) + $entry['updated'] = $rr['name-date']; - if ($rr['uri-date'] > $entry['updated']) - $entry['updated'] = $rr['uri-date']; + if ($rr['uri-date'] > $entry['updated']) + $entry['updated'] = $rr['uri-date']; - if ($rr['avatar-date'] > $entry['updated']) - $entry['updated'] = $rr['avatar-date']; + if ($rr['avatar-date'] > $entry['updated']) + $entry['updated'] = $rr['avatar-date']; + } else + $entry['updated'] = $rr['updated']; $entry['updated'] = date("c", strtotime($entry['updated'])); } @@ -182,6 +222,20 @@ function poco_init(&$a) { if (($entry['network'] == "") AND ($rr['self'])) $entry['network'] = NETWORK_DFRN; } + if($fields_ret['tags']) { + $tags = str_replace(","," ",$rr['keywords']); + $tags = explode(" ", $tags); + + $cleaned = array(); + foreach ($tags as $tag) { + $tag = trim(strtolower($tag)); + if ($tag != "") + $cleaned[] = $tag; + } + + $entry['tags'] = array($cleaned); + } + $ret['entry'][] = $entry; } } diff --git a/mod/profiles.php b/mod/profiles.php index e08b621c02..befeedb2ef 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -142,6 +142,23 @@ function profiles_init(&$a) { } +function profile_clean_keywords($keywords) { + $keywords = str_replace(","," ",$keywords); + $keywords = explode(" ", $keywords); + + $cleaned = array(); + foreach ($keywords as $keyword) { + $keyword = trim(strtolower($keyword)); + $keyword = trim($keyword, "#"); + if ($keyword != "") + $cleaned[] = $keyword; + } + + $keywords = implode(", ", $cleaned); + + return $keywords; +} + function profiles_post(&$a) { if(! local_user()) { @@ -212,8 +229,8 @@ function profiles_post(&$a) { $region = notags(trim($_POST['region'])); $postal_code = notags(trim($_POST['postal_code'])); $country_name = notags(trim($_POST['country_name'])); - $pub_keywords = notags(trim($_POST['pub_keywords'])); - $prv_keywords = notags(trim($_POST['prv_keywords'])); + $pub_keywords = profile_clean_keywords(notags(trim($_POST['pub_keywords']))); + $prv_keywords = profile_clean_keywords(notags(trim($_POST['prv_keywords']))); $marital = notags(trim($_POST['marital'])); $howlong = notags(trim($_POST['howlong'])); @@ -469,9 +486,11 @@ function profiles_post(&$a) { if($is_default) { - $r = q("UPDATE `contact` SET `about` = '%s', `location` = '%s' WHERE `self` = 1 AND `uid` = %d", + $r = q("UPDATE `contact` SET `about` = '%s', `location` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `self` = 1 AND `uid` = %d", dbesc($about), dbesc($locality), + dbesc($pub_keywords), + dbesc($gender), intval(local_user()) ); diff --git a/update.php b/update.php index b4fb640486..e80de3526a 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@