X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FDiaspora.php;h=bd66f487ac597f2f4d4083f7f1463cf0c8b43b8d;hb=d75bb8e97053dbfe7a5c0c444d6fed1bff274e26;hp=f8e4f35c18d62f5d05a3df011ed4280295488312;hpb=26b335ef3d8b1ec4e1b4e22cd7d3c34e66d2549d;p=friendica.git diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index f8e4f35c18..bd66f487ac 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -9,30 +9,31 @@ */ namespace Friendica\Protocol; -use Friendica\App; -use Friendica\Core\System; use Friendica\Core\Cache; use Friendica\Core\Config; +use Friendica\Core\L10n; use Friendica\Core\PConfig; +use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\Contact; use Friendica\Model\GContact; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Profile; +use Friendica\Model\Queue; use Friendica\Model\User; use Friendica\Network\Probe; use Friendica\Util\Crypto; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; use Friendica\Util\XML; - use dba; use SimpleXMLElement; require_once 'include/dba.php'; require_once 'include/items.php'; require_once 'include/bb2diaspora.php'; -require_once 'include/datetime.php'; -require_once 'include/queue_fn.php'; /** * @brief This class contain functions to create and send Diaspora XML files @@ -74,7 +75,7 @@ class Diaspora $r = q( "INSERT INTO `contact` (`uid`, `created`, `name`, `nick`, `addr`, `url`, `nurl`, `batch`, `network`, `rel`, `blocked`, `pending`, `writable`, `name-date`, `uri-date`, `avatar-date`) VALUES (0, '%s', '%s', 'relay', '%s', '%s', '%s', '%s', '%s', %d, 0, 0, 1, '%s', '%s', '%s')", - datetime_convert(), + DateTimeFormat::utcNow(), dbesc($addr), dbesc($addr), dbesc($server), @@ -82,9 +83,9 @@ class Diaspora dbesc($batch), dbesc(NETWORK_DIASPORA), intval(CONTACT_IS_FOLLOWER), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()) + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()) ); $relais = q("SELECT `batch`, `id`, `name`,`network` FROM `contact` WHERE `uid` = 0 AND `batch` = '%s' LIMIT 1", dbesc($batch)); @@ -185,7 +186,7 @@ class Diaspora */ private static function verifyMagicEnvelope($envelope) { - $basedom = parse_xml_string($envelope); + $basedom = XML::parseString($envelope); if (!is_object($basedom)) { logger("Envelope is no XML file"); @@ -284,7 +285,7 @@ class Diaspora if (!is_object($j_outer_key_bundle)) { logger('Outer Salmon did not verify. Discarding.'); - http_status_exit(400); + System::httpExit(400); } $outer_iv = base64_decode($j_outer_key_bundle->iv); @@ -295,11 +296,11 @@ class Diaspora $xml = $raw; } - $basedom = parse_xml_string($xml); + $basedom = XML::parseString($xml); if (!is_object($basedom)) { logger('Received data does not seem to be an XML. Discarding. '.$xml); - http_status_exit(400); + System::httpExit(400); } $base = $basedom->children(NAMESPACE_SALMON_ME); @@ -324,7 +325,7 @@ class Diaspora $verify = Crypto::rsaVerify($signed_data, $signature, $key); if (!$verify) { logger('Message did not verify. Discarding.'); - http_status_exit(400); + System::httpExit(400); } return ['message' => (string)base64url_decode($base->data), @@ -346,7 +347,7 @@ class Diaspora public static function decode($importer, $xml) { $public = false; - $basedom = parse_xml_string($xml); + $basedom = XML::parseString($xml); if (!is_object($basedom)) { logger("XML is not parseable."); @@ -380,7 +381,7 @@ class Diaspora $decrypted = self::aesDecrypt($outer_key, $outer_iv, $ciphertext); logger('decrypted: '.$decrypted, LOGGER_DEBUG); - $idom = parse_xml_string($decrypted); + $idom = XML::parseString($decrypted); $inner_iv = base64_decode($idom->iv); $inner_aes_key = base64_decode($idom->aes_key); @@ -402,7 +403,7 @@ class Diaspora if (!$base) { logger('unable to locate salmon data in xml'); - http_status_exit(400); + System::httpExit(400); } @@ -440,7 +441,7 @@ class Diaspora if (!$author_link) { logger('Could not retrieve author URI.'); - http_status_exit(400); + System::httpExit(400); } // Once we have the author URI, go to the web and try to find their public key // (first this will look it up locally if it is in the fcontact cache) @@ -451,14 +452,14 @@ class Diaspora if (!$key) { logger('Could not retrieve author key.'); - http_status_exit(400); + System::httpExit(400); } $verify = Crypto::rsaVerify($signed_data, $signature, $key); if (!$verify) { logger('Message did not verify. Discarding.'); - http_status_exit(400); + System::httpExit(400); } logger('Message verified.'); @@ -630,7 +631,7 @@ class Diaspora */ private static function validPosting($msg) { - $data = parse_xml_string($msg["message"]); + $data = XML::parseString($msg["message"]); if (!is_object($data)) { logger("No valid XML ".$msg["message"], LOGGER_DEBUG); @@ -868,7 +869,7 @@ class Diaspora dbesc($arr["confirm"]), dbesc($arr["alias"]), dbesc($arr["pubkey"]), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), dbesc($arr["url"]), dbesc($arr["network"]) ); @@ -891,7 +892,7 @@ class Diaspora dbesc($arr["network"]), dbesc($arr["alias"]), dbesc($arr["pubkey"]), - dbesc(datetime_convert()) + dbesc(DateTimeFormat::utcNow()) ); } @@ -1256,7 +1257,7 @@ class Diaspora logger("Fetch post from ".$source_url, LOGGER_DEBUG); - $envelope = fetch_url($source_url); + $envelope = Network::fetchUrl($source_url); if ($envelope) { logger("Envelope was fetched.", LOGGER_DEBUG); $x = self::verifyMagicEnvelope($envelope); @@ -1274,13 +1275,13 @@ class Diaspora $source_url = $server."/p/".urlencode($guid).".xml"; logger("Fetch post from ".$source_url, LOGGER_DEBUG); - $x = fetch_url($source_url); + $x = Network::fetchUrl($source_url); if (!$x) { return false; } } - $source_xml = parse_xml_string($x); + $source_xml = XML::parseString($x); if (!is_object($source_xml)) { return false; @@ -1651,9 +1652,9 @@ class Diaspora $text = unxmlify($data->text); if (isset($data->created_at)) { - $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at))); } else { - $created_at = datetime_convert(); + $created_at = DateTimeFormat::utcNow(); } if (isset($data->thread_parent_guid)) { @@ -1729,7 +1730,7 @@ class Diaspora self::fetchGuid($datarray); - $message_id = item_store($datarray); + $message_id = Item::insert($datarray); if ($message_id <= 0) { return false; @@ -1783,7 +1784,7 @@ class Diaspora $msg_guid = notags(unxmlify($mesg->guid)); $msg_conversation_guid = notags(unxmlify($mesg->conversation_guid)); $msg_text = unxmlify($mesg->text); - $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at))); + $msg_created_at = DateTimeFormat::utc(notags(unxmlify($mesg->created_at))); if ($msg_conversation_guid != $guid) { logger("message conversation guid does not belong to the current conversation."); @@ -1828,7 +1829,7 @@ class Diaspora dba::unlock(); - dba::update('conv', ['updated' => datetime_convert()], ['id' => $conversation["id"]]); + dba::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]); notification( [ @@ -1862,7 +1863,7 @@ class Diaspora $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); $subject = notags(unxmlify($data->subject)); - $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at))); $participants = notags(unxmlify($data->participants)); $messages = $data->message; @@ -1894,7 +1895,7 @@ class Diaspora dbesc($guid), dbesc($author), dbesc($created_at), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), dbesc($subject), dbesc($participants) ); @@ -1933,11 +1934,11 @@ class Diaspora */ private static function constructLikeBody($contact, $parent_item, $guid) { - $bodyverb = t('%1$s likes %2$s\'s %3$s'); + $bodyverb = L10n::t('%1$s likes %2$s\'s %3$s'); $ulink = "[url=".$contact["url"]."]".$contact["name"]."[/url]"; $alink = "[url=".$parent_item["author-link"]."]".$parent_item["author-name"]."[/url]"; - $plink = "[url=".System::baseUrl()."/display/".urlencode($guid)."]".t("status")."[/url]"; + $plink = "[url=".System::baseUrl()."/display/".urlencode($guid)."]".L10n::t("status")."[/url]"; return sprintf($bodyverb, $ulink, $alink, $plink); } @@ -2050,7 +2051,7 @@ class Diaspora $datarray["body"] = self::constructLikeBody($contact, $parent_item, $guid); - $message_id = item_store($datarray); + $message_id = Item::insert($datarray); if ($message_id <= 0) { return false; @@ -2095,7 +2096,7 @@ class Diaspora $guid = notags(unxmlify($data->guid)); $conversation_guid = notags(unxmlify($data->conversation_guid)); $text = unxmlify($data->text); - $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at))); $contact = self::allowedContactByHandle($importer, $author, true); if (!$contact) { @@ -2161,7 +2162,7 @@ class Diaspora dba::unlock(); - dba::update('conv', ['updated' => datetime_convert()], ['id' => $conversation["id"]]); + dba::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]); return true; } @@ -2312,7 +2313,7 @@ class Diaspora $birthday = str_replace("1000", "1901", $birthday); if ($birthday != "") { - $birthday = datetime_convert("UTC", "UTC", $birthday, "Y-m-d"); + $birthday = DateTimeFormat::utc($birthday, "Y-m-d"); } // this is to prevent multiple birthday notifications in a single year @@ -2328,7 +2329,7 @@ class Diaspora dbesc($name), dbesc($nick), dbesc($author), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), dbesc($birthday), dbesc($location), dbesc($about), @@ -2405,12 +2406,10 @@ class Diaspora $A = "[url=".$self[0]["url"]."]".$self[0]["name"]."[/url]"; $B = "[url=".$contact["url"]."]".$contact["name"]."[/url]"; $BPhoto = "[url=".$contact["url"]."][img]".$contact["thumb"]."[/img][/url]"; - $arr["body"] = sprintf(t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$BPhoto; + $arr["body"] = L10n::t('%1$s is now friends with %2$s', $A, $B)."\n\n\n".$BPhoto; $arr["object"] = self::constructNewFriendObject($contact); - $arr["last-child"] = 1; - $user = dba::selectFirst('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]]); $arr["allow_cid"] = $user["allow_cid"]; @@ -2418,7 +2417,7 @@ class Diaspora $arr["deny_cid"] = $user["deny_cid"]; $arr["deny_gid"] = $user["deny_gid"]; - $i = item_store($arr); + $i = Item::insert($arr); if ($i) { Worker::add(PRIORITY_HIGH, "Notifier", "activity", $i); } @@ -2502,7 +2501,7 @@ class Diaspora return true; } else { logger("Author ".$author." doesn't want to follow us anymore.", LOGGER_DEBUG); - lose_follower($importer, $contact); + Contact::removeFollower($importer, $contact); return true; } } @@ -2536,7 +2535,7 @@ class Diaspora intval($importer["uid"]), dbesc($ret["network"]), dbesc($ret["addr"]), - datetime_convert(), + DateTimeFormat::utcNow(), dbesc($ret["url"]), dbesc(normalise_link($ret["url"])), dbesc($batch), @@ -2577,9 +2576,9 @@ class Diaspora intval($contact_record["id"]), 0, 0, - dbesc(t("Sharing notification from Diaspora network")), + dbesc(L10n::t("Sharing notification from Diaspora network")), dbesc($hash), - dbesc(datetime_convert()) + dbesc(DateTimeFormat::utcNow()) ); } else { // automatic friend approval @@ -2610,8 +2609,8 @@ class Diaspora WHERE `id` = %d ", intval($new_relation), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), intval($contact_record["id"]) ); @@ -2715,7 +2714,7 @@ class Diaspora { $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); - $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at))); $root_author = notags(unxmlify($data->root_author)); $root_guid = notags(unxmlify($data->root_guid)); /// @todo handle unprocessed property "provider_display_name" @@ -2781,7 +2780,7 @@ class Diaspora $datarray["object-type"] = $original_item["object-type"]; self::fetchGuid($datarray); - $message_id = item_store($datarray); + $message_id = Item::insert($datarray); self::sendParticipation($contact, $datarray); @@ -2851,8 +2850,8 @@ class Diaspora 'deleted' => true, 'title' => '', 'body' => '', - 'edited' => datetime_convert(), - 'changed' => datetime_convert()], + 'edited' => DateTimeFormat::utcNow(), + 'changed' => DateTimeFormat::utcNow()], ['id' => $item["id"]] ); @@ -2929,7 +2928,7 @@ class Diaspora { $author = notags(unxmlify($data->author)); $guid = notags(unxmlify($data->guid)); - $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at))); + $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at))); $public = notags(unxmlify($data->public)); $text = unxmlify($data->text); $provider_display_name = notags(unxmlify($data->provider_display_name)); @@ -3021,7 +3020,7 @@ class Diaspora } self::fetchGuid($datarray); - $message_id = item_store($datarray); + $message_id = Item::insert($datarray); self::sendParticipation($contact, $datarray); @@ -3224,13 +3223,13 @@ class Diaspora logger("transmit: ".$logid."-".$guid." ".$dest_url); - if (!$queue_run && was_recently_delayed($contact["id"])) { + if (!$queue_run && Queue::wasDelayed($contact["id"])) { $return_code = 0; } else { if (!intval(Config::get("system", "diaspora_test"))) { $content_type = (($public_batch) ? "application/magic-envelope+xml" : "application/json"); - post_url($dest_url."/", $envelope, ["Content-Type: ".$content_type]); + Network::post($dest_url."/", $envelope, ["Content-Type: ".$content_type]); $return_code = $a->get_curl_code(); } else { logger("test_mode"); @@ -3254,7 +3253,7 @@ class Diaspora logger("add_to_queue ignored - identical item already in queue"); } else { // queue message for redelivery - add_to_queue($contact["id"], NETWORK_DIASPORA, $envelope, $public_batch); + Queue::add($contact["id"], NETWORK_DIASPORA, $envelope, $public_batch); // The message could not be delivered. We mark the contact as "dead" Contact::markForArchival($contact); @@ -3311,7 +3310,7 @@ class Diaspora $envelope = self::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $contact['pubkey'], $public_batch); if ($spool) { - add_to_queue($contact['id'], NETWORK_DIASPORA, $envelope, $public_batch); + Queue::add($contact['id'], NETWORK_DIASPORA, $envelope, $public_batch); return true; } else { $return_code = self::transmit($owner, $contact, $envelope, $public_batch, false, $guid); @@ -3592,7 +3591,7 @@ class Diaspora $eventdata['guid'] = $event['guid']; } - $mask = 'Y-m-d\TH:i:s\Z'; + $mask = DateTimeFormat::ATOM; /// @todo - establish "all day" events in Friendica $eventdata["all_day"] = "false"; @@ -3606,10 +3605,10 @@ class Diaspora } if ($event['start']) { - $eventdata['start'] = datetime_convert($eventdata['timezone'], "UTC", $event['start'], $mask); + $eventdata['start'] = DateTimeFormat::convert($event['start'], "UTC", $eventdata['timezone'], $mask); } if ($event['finish'] && !$event['nofinish']) { - $eventdata['end'] = datetime_convert($eventdata['timezone'], "UTC", $event['finish'], $mask); + $eventdata['end'] = DateTimeFormat::convert($event['finish'], "UTC", $eventdata['timezone'], $mask); } if ($event['summary']) { $eventdata['summary'] = html_entity_decode(bb2diaspora($event['summary'])); @@ -3651,7 +3650,7 @@ class Diaspora $public = (($item["private"]) ? "false" : "true"); - $created = datetime_convert("UTC", "UTC", $item["created"], 'Y-m-d\TH:i:s\Z'); + $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); // Detect a share element and do a reshare if (!$item['private'] && ($ret = self::isReshare($item["body"]))) { @@ -3679,7 +3678,7 @@ class Diaspora if ($item["attach"]) { $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism', $item["attach"], $matches, PREG_SET_ORDER); if (cnt) { - $body .= "\n".t("Attachments:")."\n"; + $body .= "\n".L10n::t("Attachments:")."\n"; foreach ($matches as $mtch) { $body .= "[".$mtch[3]."](".$mtch[1].")\n"; } @@ -3854,7 +3853,7 @@ class Diaspora $parent = $p[0]; $text = html_entity_decode(bb2diaspora($item["body"])); - $created = datetime_convert("UTC", "UTC", $item["created"], 'Y-m-d\TH:i:s\Z'); + $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); $comment = ["author" => self::myHandle($owner), "guid" => $item["guid"], @@ -4085,12 +4084,12 @@ class Diaspora "author" => $cnv["creator"], "guid" => $cnv["guid"], "subject" => $cnv["subject"], - "created_at" => datetime_convert("UTC", "UTC", $cnv['created'], 'Y-m-d\TH:i:s\Z'), + "created_at" => DateTimeFormat::utc($cnv['created'], DateTimeFormat::ATOM), "participants" => $cnv["recips"] ]; $body = bb2diaspora($item["body"]); - $created = datetime_convert("UTC", "UTC", $item["created"], 'Y-m-d\TH:i:s\Z'); + $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); $msg = [ "author" => $myaddr, @@ -4108,7 +4107,7 @@ class Diaspora "author" => $cnv["creator"], "guid" => $cnv["guid"], "subject" => $cnv["subject"], - "created_at" => datetime_convert("UTC", "UTC", $cnv['created'], 'Y-m-d\TH:i:s\Z'), + "created_at" => DateTimeFormat::utc($cnv['created'], DateTimeFormat::ATOM), "participants" => $cnv["recips"], "message" => $msg]; @@ -4209,10 +4208,14 @@ class Diaspora $searchable = (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false'); if ($searchable === 'true') { - $dob = '1000-00-00'; + $dob = ''; - if (($profile['dob']) && ($profile['dob'] > '0001-01-01')) { - $dob = ((intval($profile['dob'])) ? intval($profile['dob']) : '1000') .'-'. datetime_convert('UTC', 'UTC', $profile['dob'],'m-d'); + if ($profile['dob'] && ($profile['dob'] > '0000-00-00')) { + list($year, $month, $day) = sscanf($profile['dob'], '%4d-%2d-%2d'); + if ($year < 1004) { + $year = 1004; + } + $dob = DateTimeFormat::utc($year . '-' . $month . '-'. $day, 'Y-m-d'); } $about = $profile['about']; @@ -4286,7 +4289,7 @@ class Diaspora foreach ($recips as $recip) { logger("Send updated profile data for user ".$uid." to contact ".$recip["id"], LOGGER_DEBUG); - self::buildAndTransmit($owner, $recip, "profile", $message, false, "", true); + self::buildAndTransmit($owner, $recip, "profile", $message, false, "", false); } }