X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fitems.php;h=584236f78001f41c0abcc04415f6ae69525319be;hb=c2086ec50ed339fb864c8f0a93fbc40ff530c666;hp=133d1299b37b9469febf80eab578c8ca8ccee803;hpb=05236adf0f1dd821c14ae0ffed2aaa08b9c606a2;p=friendica.git diff --git a/include/items.php b/include/items.php index 133d1299b3..584236f780 100644 --- a/include/items.php +++ b/include/items.php @@ -293,7 +293,7 @@ function get_atom_elements($feed,$item) { // No photo/profile-link on the item - look at the feed level - if((! $res['author-link']) || (! $res['author-avatar'])) { + if((! (x($res,'author-link'))) || (! (x($res,'author-avatar')))) { $rawauthor = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author'); if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) { $base = $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']; @@ -316,7 +316,7 @@ function get_atom_elements($feed,$item) { foreach($base as $link) { if($link['attribs']['']['rel'] === 'alternate' && (! $res['author-link'])) $res['author-link'] = unxmlify($link['attribs']['']['href']); - if(! $res['author-avatar']) { + if(! (x($res,'author-avatar'))) { if($link['attribs']['']['rel'] === 'avatar' || $link['attribs']['']['rel'] === 'photo') $res['author-avatar'] = unxmlify($link['attribs']['']['href']); } @@ -517,62 +517,82 @@ function item_store($arr) { $arr['gravity'] = 0; elseif(activity_match($arr['verb'],ACTIVITY_POST)) $arr['gravity'] = 6; + else + $arr['gravity'] = 6; // extensible catchall if(! x($arr,'type')) - $arr['type'] = 'remote'; - $arr['wall'] = ((intval($arr['wall'])) ? 1 : 0); - $arr['uri'] = notags(trim($arr['uri'])); - $arr['author-name'] = notags(trim($arr['author-name'])); - $arr['author-link'] = notags(trim($arr['author-link'])); - $arr['author-avatar'] = notags(trim($arr['author-avatar'])); - $arr['owner-name'] = notags(trim($arr['owner-name'])); - $arr['owner-link'] = notags(trim($arr['owner-link'])); - $arr['owner-avatar'] = notags(trim($arr['owner-avatar'])); - $arr['created'] = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert()); - $arr['edited'] = ((x($arr,'edited') !== false) ? datetime_convert('UTC','UTC',$arr['edited']) : datetime_convert()); - $arr['changed'] = datetime_convert(); - $arr['title'] = notags(trim($arr['title'])); - $arr['location'] = notags(trim($arr['location'])); - $arr['coord'] = notags(trim($arr['coord'])); - $arr['body'] = escape_tags(trim($arr['body'])); - $arr['last-child'] = intval($arr['last-child']); - $arr['visible'] = ((x($arr,'visible') !== false) ? intval($arr['visible']) : 1); - $arr['deleted'] = 0; - $arr['parent-uri'] = notags(trim($arr['parent-uri'])); - $arr['verb'] = notags(trim($arr['verb'])); - $arr['object-type'] = notags(trim($arr['object-type'])); - $arr['object'] = trim($arr['object']); - - $parent_id = 0; - $parent_missing = false; + $arr['type'] = 'remote'; + $arr['wall'] = ((x($arr,'wall')) ? intval($arr['wall']) : 0); + $arr['uri'] = ((x($arr,'uri')) ? notags(trim($arr['uri'])) : random_string()); + $arr['author-name'] = ((x($arr,'author-name')) ? notags(trim($arr['author-name'])) : ''); + $arr['author-link'] = ((x($arr,'author-link')) ? notags(trim($arr['author-link'])) : ''); + $arr['author-avatar'] = ((x($arr,'author-avatar')) ? notags(trim($arr['author-avatar'])) : ''); + $arr['owner-name'] = ((x($arr,'owner-name')) ? notags(trim($arr['owner-name'])) : ''); + $arr['owner-link'] = ((x($arr,'owner-link')) ? notags(trim($arr['owner-link'])) : ''); + $arr['owner-avatar'] = ((x($arr,'owner-avatar')) ? notags(trim($arr['owner-avatar'])) : ''); + $arr['created'] = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert()); + $arr['edited'] = ((x($arr,'edited') !== false) ? datetime_convert('UTC','UTC',$arr['edited']) : datetime_convert()); + $arr['changed'] = datetime_convert(); + $arr['title'] = ((x($arr,'title')) ? notags(trim($arr['title'])) : ''); + $arr['location'] = ((x($arr,'location')) ? notags(trim($arr['location'])) : ''); + $arr['coord'] = ((x($arr,'coord')) ? notags(trim($arr['coord'])) : ''); + $arr['body'] = ((x($arr,'body')) ? escape_tags(trim($arr['body'])) : ''); + $arr['last-child'] = ((x($arr,'last-child')) ? intval($arr['last-child']) : 0 ); + $arr['visible'] = ((x($arr,'visible') !== false) ? intval($arr['visible']) : 1 ); + $arr['deleted'] = 0; + $arr['parent-uri'] = ((x($arr,'parent-uri')) ? notags(trim($arr['parent-uri'])) : ''); + $arr['verb'] = ((x($arr,'verb')) ? notags(trim($arr['verb'])) : ''); + $arr['object-type'] = ((x($arr,'object-type')) ? notags(trim($arr['object-type'])) : ''); + $arr['object'] = ((x($arr,'object')) ? trim($arr['object']) : ''); + $arr['target-type'] = ((x($arr,'target-type')) ? notags(trim($arr['target-type'])) : ''); + $arr['target'] = ((x($arr,'target')) ? trim($arr['target']) : ''); + $arr['allow_cid'] = ((x($arr,'allow_cid')) ? trim($arr['allow_cid']) : ''); + $arr['allow_gid'] = ((x($arr,'allow_gid')) ? trim($arr['allow_gid']) : ''); + $arr['deny_cid'] = ((x($arr,'deny_cid')) ? trim($arr['deny_cid']) : ''); + $arr['deny_gid'] = ((x($arr,'deny_gid')) ? trim($arr['deny_gid']) : ''); + + + + if($arr['parent-uri'] === $arr['uri']) { + $parent_id = 0; + $allow_cid = $arr['allow_cid']; + $allow_gid = $arr['allow_gid']; + $deny_cid = $arr['deny_cid']; + $deny_gid = $arr['deny_gid']; + } + else { + + // find the parent and snarf the item id and ACL's + + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($arr['parent-uri']), + intval($arr['uid']) + ); + + if(count($r)) { + $parent_id = $r[0]['id']; + $allow_cid = $r[0]['allow_cid']; + $allow_gid = $r[0]['allow_gid']; + $deny_cid = $r[0]['deny_cid']; + $deny_gid = $r[0]['deny_gid']; + } + else { + logger('item_store: item parent was not found - ignoring item'); + return 0; + } + } dbesc_array($arr); logger('item_store: ' . print_r($arr,true), LOGGER_DATA); - $r = q("INSERT INTO `item` (`" + $r = dbq("INSERT INTO `item` (`" . implode("`, `", array_keys($arr)) . "`) VALUES ('" . implode("', '", array_values($arr)) . "')" ); - // find the parent and snarf the item id and ACL's - - $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($arr['parent-uri']), - intval($arr['uid']) - ); - - if(count($r)) { - $parent_id = $r[0]['id']; - $allow_cid = $r[0]['allow_cid']; - $allow_gid = $r[0]['allow_gid']; - $deny_cid = $r[0]['deny_cid']; - $deny_gid = $r[0]['deny_gid']; - } - else { - $parent_missing = true; - } + // find the item we just created $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", $arr['uri'], // already dbesc'd @@ -582,23 +602,15 @@ function item_store($arr) { $current_post = $r[0]['id']; logger('item_store: created item ' . $current_post); } - else - return 0; - - if($parent_missing) { - - logger('item_store: item parent was not found - ignoring item'); - - // perhaps the parent was deleted, but in any case, this thread is dead - // and unfortunately our brand new item now has to be destroyed - - q("DELETE FROM `item` WHERE `id` = %d LIMIT 1", - intval($current_post) - ); + else { + logger('item_store: could not locate created item'); return 0; } - // Set parent id - all of the parent's ACL's are also inherited by this post + if($arr['parent-uri'] === $arr['uri']) + $parent_id = $current_post; + + // Set parent id - and also make sure to inherit the parent's ACL's. $r = q("UPDATE `item` SET `parent` = %d, `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `id` = %d LIMIT 1", @@ -723,13 +735,16 @@ function dfrn_deliver($owner,$contact,$atom) { * */ -function consume_feed($xml,$importer,$contact, &$hub) { +function consume_feed($xml,$importer,$contact, &$hub, $datedir = 0) { require_once('simplepie/simplepie.inc'); $feed = new SimplePie(); $feed->set_raw_data($xml); - $feed->enable_order_by_date(false); + if($datedir) + $feed->enable_order_by_date(true); + else + $feed->enable_order_by_date(false); $feed->init(); // Check at the feed level for updated contact name and/or photo @@ -753,22 +768,17 @@ function consume_feed($xml,$importer,$contact, &$hub) { $name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']; $new_name = $elems['name'][0]['data']; } - if(($elems['link'][0]['attribs']['']['rel'] === 'photo') && ($elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated'])) { + if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo') && ($elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated'])) { $photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']); $photo_url = $elems['link'][0]['attribs']['']['href']; } } - if(! $photo_timestamp) { - $photo_rawupdate = $feed->get_feed_tags(NAMESPACE_DFRN,'icon-updated'); - if($photo_rawupdate) { - $photo_timestamp = datetime_convert('UTC','UTC',$photo_rawupdate[0]['data']); - $photo_url = $feed->get_image_url(); - } - } - if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) { + if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) { + logger('Consume feed: Updating photo for ' . $contact['name']); require_once("Photo.php"); $photo_failure = false; + $have_photo = false; $r = q("SELECT `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d LIMIT 1", intval($contact['id']), @@ -776,33 +786,45 @@ function consume_feed($xml,$importer,$contact, &$hub) { ); if(count($r)) { $resource_id = $r[0]['resource-id']; - $img_str = fetch_url($photo_url,true); - $img = new Photo($img_str); - if($img->is_valid()) { - q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND contact-id` = %d AND `uid` = %d", + $have_photo = true; + } + else { + $resource_id = photo_new_resource(); + } + + $img_str = fetch_url($photo_url,true); + $img = new Photo($img_str); + if($img->is_valid()) { + if($have_photo) { + q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d", dbesc($resource_id), intval($contact['id']), intval($contact['uid']) ); - - $img->scaleImageSquare(175); + } - $hash = $resource_id; - $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), t('Contact Photos') , 4); + $img->scaleImageSquare(175); - $img->scaleImage(80); - $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), t('Contact Photos') , 5); - - $img->scaleImage(48); - $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), t('Contact Photos') , 6); - - if($r) - q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1", - dbesc(datetime_convert()), - intval($contact['uid']), - intval($contact['id']) - ); - } + $hash = $resource_id; + $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), t('Contact Photos') , 4); + + $img->scaleImage(80); + $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), t('Contact Photos') , 5); + + $img->scaleImage(48); + $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), t('Contact Photos') , 6); + + $a = get_app(); + + q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s' + WHERE `uid` = %d AND `id` = %d LIMIT 1", + dbesc(datetime_convert()), + dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.jpg'), + dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.jpg'), + dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.jpg'), + intval($contact['uid']), + intval($contact['id']) + ); } } @@ -906,7 +928,7 @@ function consume_feed($xml,$importer,$contact, &$hub) { // FIXME update content if 'updated' changes if(count($r)) { $allow = $item->get_item_tags( NAMESPACE_DFRN, 'comment-allow'); - if($allow && $allow[0]['data'] != $r[0]['last-child']) { + if(($allow) && ($allow[0]['data'] != $r[0]['last-child'])) { $r = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d", dbesc(datetime_convert()), dbesc($parent_uri), @@ -918,13 +940,20 @@ function consume_feed($xml,$importer,$contact, &$hub) { dbesc($item_id), intval($importer['uid']) ); - } continue; } $datarray = get_atom_elements($feed,$item); - if($contact['network'] === 'stat' && strlen($datarray['title'])) - unset($datarray['title']); + if($contact['network'] === 'stat') { + if(strlen($datarray['title'])) + unset($datarray['title']); + $r = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d", + dbesc(datetime_convert()), + dbesc($parent_uri), + intval($importer['uid']) + ); + $datarray['last-child'] = 1; + } $datarray['parent-uri'] = $parent_uri; $datarray['uid'] = $importer['uid']; $datarray['contact-id'] = $contact['id']; @@ -974,9 +1003,9 @@ function consume_feed($xml,$importer,$contact, &$hub) { if($contact['network'] === 'stat') { if(strlen($datarray['title'])) unset($datarray['title']); - if(($contact['rel'] == REL_VIP) || ($contact['rel'] == REL_BUD)) - $datarray['last-child'] = 1; + $datarray['last-child'] = 1; } + $datarray['parent-uri'] = $item_id; $datarray['uid'] = $importer['uid']; $datarray['contact-id'] = $contact['id']; @@ -1061,7 +1090,7 @@ function new_follower($importer,$contact,$datarray,$item) { $res = mail($r[0]['email'], t("You have a new follower at ") . $a->config['sitename'], $email, - 'From: ' . t('Administrator') . '@' . $_SERVER[SERVER_NAME] ); + 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] ); } } @@ -1162,8 +1191,12 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { $o .= '' . "\r\n"; if($comment) $o .= '' . intval($item['last-child']) . '' . "\r\n"; - if($item['location']) + + if($item['location']) { $o .= '' . xmlify($item['location']) . '' . "\r\n"; + $o .= '' . xmlify($item['location']) . '' . "\r\n"; + } + if($item['coord']) $o .= '' . xmlify($item['coord']) . '' . "\r\n";