Next steps to add all fields

This commit is contained in:
Michael Vogel 2016-01-27 15:57:11 +01:00
parent aeecd83ade
commit 1d4de96960
2 changed files with 121 additions and 16 deletions

View file

@ -396,7 +396,6 @@ class dfrn {
$root->setAttribute("xmlns:ostatus", NS_OSTATUS); $root->setAttribute("xmlns:ostatus", NS_OSTATUS);
$root->setAttribute("xmlns:statusnet", NS_STATUSNET); $root->setAttribute("xmlns:statusnet", NS_STATUSNET);
//xml_add_element($doc, $root, "id", app::get_baseurl()."/profile/".$owner["nick"]);
xml_add_element($doc, $root, "id", app::get_baseurl()."/profile/".$owner["nick"]); xml_add_element($doc, $root, "id", app::get_baseurl()."/profile/".$owner["nick"]);
xml_add_element($doc, $root, "title", $owner["name"]); xml_add_element($doc, $root, "title", $owner["name"]);
@ -409,9 +408,11 @@ class dfrn {
$attributes = array("rel" => "alternate", "type" => "text/html", "href" => $alternatelink); $attributes = array("rel" => "alternate", "type" => "text/html", "href" => $alternatelink);
xml_add_element($doc, $root, "link", "", $attributes); xml_add_element($doc, $root, "link", "", $attributes);
ostatus_hublinks($doc, $root);
if ($public) { if ($public) {
// DFRN itself doesn't uses this. But maybe someone else wants to subscribe to the public feed.
ostatus_hublinks($doc, $root);
$attributes = array("rel" => "salmon", "href" => app::get_baseurl()."/salmon/".$owner["nick"]); $attributes = array("rel" => "salmon", "href" => app::get_baseurl()."/salmon/".$owner["nick"]);
xml_add_element($doc, $root, "link", "", $attributes); xml_add_element($doc, $root, "link", "", $attributes);
@ -425,6 +426,8 @@ class dfrn {
if ($owner['page-flags'] == PAGE_COMMUNITY) if ($owner['page-flags'] == PAGE_COMMUNITY)
xml_add_element($doc, $root, "dfrn:community", 1); xml_add_element($doc, $root, "dfrn:community", 1);
/// @todo We need a way to transmit the different page flags like "PAGE_PRVGROUP"
xml_add_element($doc, $root, "updated", datetime_convert("UTC", "UTC", "now", ATOM_TIME)); xml_add_element($doc, $root, "updated", datetime_convert("UTC", "UTC", "now", ATOM_TIME));
$author = self::add_author($doc, $owner, $authorelement, $public); $author = self::add_author($doc, $owner, $authorelement, $public);
@ -727,9 +730,14 @@ class dfrn {
xml_add_element($doc, $entry, "published", datetime_convert("UTC","UTC",$item["created"]."+00:00",ATOM_TIME)); xml_add_element($doc, $entry, "published", datetime_convert("UTC","UTC",$item["created"]."+00:00",ATOM_TIME));
xml_add_element($doc, $entry, "updated", datetime_convert("UTC","UTC",$item["edited"]."+00:00",ATOM_TIME)); xml_add_element($doc, $entry, "updated", datetime_convert("UTC","UTC",$item["edited"]."+00:00",ATOM_TIME));
// "dfrn:env" is used to read the content
xml_add_element($doc, $entry, "dfrn:env", base64url_encode($body, true)); xml_add_element($doc, $entry, "dfrn:env", base64url_encode($body, true));
// The "content" field is not read by the receiver. We could remove it when the type is "text"
// We keep it at the moment, maybe there is some old version that doesn't read "dfrn:env"
xml_add_element($doc, $entry, "content", (($type === 'html') ? $htmlbody : $body), array("type" => $type)); xml_add_element($doc, $entry, "content", (($type === 'html') ? $htmlbody : $body), array("type" => $type));
// We save this value in "plink". Maybe we should read it from there as well?
xml_add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html", xml_add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html",
"href" => app::get_baseurl()."/display/".$item["guid"])); "href" => app::get_baseurl()."/display/".$item["guid"]));

View file

@ -25,7 +25,48 @@ define("NS_OSTATUS", "http://ostatus.org/schema/1.0");
define("NS_STATUSNET", "http://status.net/schema/api/1/"); define("NS_STATUSNET", "http://status.net/schema/api/1/");
class dfrn2 { class dfrn2 {
function fetchauthor($xpath, $context, $importer, $element, &$contact, $onlyfetch) { /**
* @brief Add new birthday event for this person
*
* @param array $contact Contact record
* @param string $birthday Birthday of the contact
*
*/
private function birthday_event($contact, $birthday) {
logger('updating birthday: '.$birthday.' for contact '.$contact['id']);
$bdtext = sprintf(t('%s\'s birthday'), $contact['name']);
$bdtext2 = sprintf(t('Happy Birthday %s'), ' [url=' . $contact['url'].']'.$contact['name'].'[/url]' ) ;
$r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`)
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
intval($contact['uid']),
intval($contact['id']),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(datetime_convert('UTC','UTC', $birthday)),
dbesc(datetime_convert('UTC','UTC', $birthday.' + 1 day ')),
dbesc($bdtext),
dbesc($bdtext2),
dbesc('birthday')
);
}
/**
* @brief Fetch the author data from head or entry items
*
* @param object $xpath XPath object
* @param object $context In which context should the data be searched
* @param array $importer Record of the importer contact
* @param string $element Element name from which the data is fetched
* @param array $contact The updated contact record of the author
* @param bool $onlyfetch Should the data only be fetched or should it update the contact record as well
*
* @return Returns an array with relevant data of the author
*/
private function fetchauthor($xpath, $context, $importer, $element, &$contact, $onlyfetch) {
$author = array(); $author = array();
$author["name"] = $xpath->evaluate($element.'/atom:name/text()', $context)->item(0)->nodeValue; $author["name"] = $xpath->evaluate($element.'/atom:name/text()', $context)->item(0)->nodeValue;
@ -55,6 +96,8 @@ class dfrn2 {
$href = $attributes->textContent; $href = $attributes->textContent;
if ($attributes->name == "width") if ($attributes->name == "width")
$width = $attributes->textContent; $width = $attributes->textContent;
if ($attributes->name == "updated")
$contact["avatar-date"] = $attributes->textContent;
} }
if (($width > 0) AND ($href != "")) if (($width > 0) AND ($href != ""))
$avatarlist[$width] = $href; $avatarlist[$width] = $href;
@ -65,7 +108,26 @@ class dfrn2 {
} }
if ($r AND !$onlyfetch) { if ($r AND !$onlyfetch) {
// When was the last change to name or uri?
$name_element = $xpath->query($element."/atom:name", $context)->item(0);
foreach($name_element->attributes AS $attributes)
if ($attributes->name == "updated")
$contact["name-date"] = $attributes->textContent;
$link_element = $xpath->query($element."/atom:link", $context)->item(0);
foreach($link_element->attributes AS $attributes)
if ($attributes->name == "updated")
$contact["uri-date"] = $attributes->textContent;
// is it a public forum? Private forums aren't supported by now with this method
$contact["forum"] = intval($xpath->evaluate($element.'/dfrn:community/text()', $context)->item(0)->nodeValue);
// Update contact data // Update contact data
$value = $xpath->evaluate($element.'/dfrn:handle/text()', $context)->item(0)->nodeValue;
if ($value != "")
$contact["addr"] = $value;
$value = $xpath->evaluate($element.'/poco:displayName/text()', $context)->item(0)->nodeValue; $value = $xpath->evaluate($element.'/poco:displayName/text()', $context)->item(0)->nodeValue;
if ($value != "") if ($value != "")
@ -83,13 +145,54 @@ class dfrn2 {
if ($value != "") if ($value != "")
$contact["location"] = $value; $contact["location"] = $value;
/// @todo /// @todo Add support for the following fields that we don't support by now in the contact table:
/// poco:birthday /// - poco:utcOffset
/// poco:utcOffset /// - poco:ims
/// poco:updated /// - poco:urls
/// poco:ims /// - poco:locality
/// poco:tags /// - poco:region
/// - poco:country
// Save the keywords into the contact table
$tags = array();
$tagelements = $xpath->evaluate($element.'/poco:tags/text()', $context);
foreach($tagelements AS $tag)
$tags[$tag->nodeValue] = $tag->nodeValue;
if (count($tags))
$contact["keywords"] = implode(", ", $tags);
// "dfrn:birthday" contains the birthday converted to UTC
$old_bdyear = $contact["bdyear"];
$birthday = $xpath->evaluate($element.'/dfrn:birthday/text()', $context)->item(0)->nodeValue;
if (strtotime($birthday) > time()) {
$bd_timestamp = strtotime($birthday);
$contact["bdyear"] = date("Y", $bd_timestamp);
}
// "poco:birthday" is the birthday in the format "yyyy-mm-dd"
$value = $xpath->evaluate($element.'/poco:birthday/text()', $context)->item(0)->nodeValue;
if (!in_array($value, array("", "0000-00-00"))) {
$bdyear = date("Y");
$value = str_replace("0000", $bdyear, $value);
if (strtotime($value) < time()) {
$value = str_replace($bdyear, $bdyear + 1, $value);
$bdyear = $bdyear + 1;
}
$contact["bd"] = $value;
}
if ($old_bdyear != $contact["bdyear"])
self::birthday_event($contact, $birthday;
print_r($contact);
die();
/* /*
if (($contact["name"] != $r[0]["name"]) OR ($contact["nick"] != $r[0]["nick"]) OR ($contact["about"] != $r[0]["about"]) OR ($contact["location"] != $r[0]["location"])) { if (($contact["name"] != $r[0]["name"]) OR ($contact["nick"] != $r[0]["nick"]) OR ($contact["about"] != $r[0]["about"]) OR ($contact["location"] != $r[0]["location"])) {
@ -162,13 +265,7 @@ class dfrn2 {
$item_id = 0; $item_id = 0;
// Reverse the order of the entries foreach ($entries AS $entry) {
$entrylist = array();
foreach ($entries AS $entry)
$entrylist[] = $entry;
foreach (array_reverse($entrylist) AS $entry) {
$item = $header; $item = $header;