diff --git a/boot.php b/boot.php index 6f6403398..b47164f10 100644 --- a/boot.php +++ b/boot.php @@ -364,6 +364,7 @@ if(! class_exists('App')) { public $sourcename = ''; public $videowidth = 425; public $videoheight = 350; + public $force_max_items = 0; private $scheme; private $hostname; diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 9ede42f6c..b0e12027a 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -196,6 +196,14 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // The bbcode parser now handles youtube-links (and the other stuff) correctly. // Additionally the html code is now fixed so that lists are now working. + /** + * Transform #tags, strip off the [url] and replace spaces with underscore + */ + $Text = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match', + 'return \'#\'. str_replace(\' \', \'_\', $match[2]);' + ), $Text); + + // Converting images with size parameters to simple images. Markdown doesn't know it. $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); diff --git a/include/diaspora.php b/include/diaspora.php index 96b0b184e..3e9f20a47 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -102,6 +102,37 @@ function diaspora_dispatch($importer,$msg) { return $ret; } +function diaspora_handle_from_contact($contact_id) { + $handle = False; + + logger("diaspora_handle_from_contact: contact id is " . $contact_id, LOGGER_DEBUG); + + $r = q("SELECT network, addr, self, url, nick FROM contact WHERE id = %d", + intval($contact_id) + ); + if($r) { + $contact = $r[0]; + + logger("diaspora_handle_from_contact: contact 'self' = " . $contact['self'] . " 'url' = " . $contact['url'], LOGGER_DEBUG); + + if($contact['network'] === NETWORK_DIASPORA) { + $handle = $contact['addr']; + +// logger("diaspora_handle_from_contact: contact id is a Diaspora person, handle = " . $handle, LOGGER_DEBUG); + } + elseif(($contact['network'] === NETWORK_DFRN) || ($contact['self'] == 1)) { + $baseurl_start = strpos($contact['url'],'://') + 3; + $baseurl_length = strpos($contact['url'],'/profile') - $baseurl_start; // allows installations in a subdirectory--not sure how Diaspora will handle + $baseurl = substr($contact['url'], $baseurl_start, $baseurl_length); + $handle = $contact['nick'] . '@' . $baseurl; + +// logger("diaspora_handle_from_contact: contact id is a DFRN person, handle = " . $handle, LOGGER_DEBUG); + } + } + + return $handle; +} + function diaspora_get_contact_by_handle($uid,$handle) { $r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1", dbesc(NETWORK_DIASPORA), @@ -1282,7 +1313,7 @@ function diaspora_comment($importer,$xml,$msg) { // the existence of parent_author_signature means the parent_author or owner // is already relaying. - proc_run('php','include/notifier.php','comment',$message_id); + proc_run('php','include/notifier.php','comment-import',$message_id); } $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ", @@ -1867,7 +1898,7 @@ EOT; // is already relaying. The parent_item['origin'] indicates the message was created on our system if(($parent_item['origin']) && (! $parent_author_signature)) - proc_run('php','include/notifier.php','comment',$message_id); + proc_run('php','include/notifier.php','comment-import',$message_id); return; } @@ -1993,7 +2024,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) { // is already relaying. logger('diaspora_signed_retraction: relaying relayable_retraction'); - proc_run('php','include/notifier.php','relayable_retraction',$r[0]['id']); + proc_run('php','include/notifier.php','drop',$r[0]['id']); } } } @@ -2153,12 +2184,6 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { } } */ - /** - * Transform #tags, strip off the [url] and replace spaces with underscore - */ - $body = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match', - 'return \'#\'. str_replace(\' \', \'_\', $match[2]);' - ), $body); //if(strlen($title)) // $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body; @@ -2344,8 +2369,8 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent. // The only item with `parent` and `id` as the parent id is the parent item. $p = q("select guid, type, uri, `parent-uri` from item where parent = %d and id = %d limit 1", - intval($item['parent']), - intval($item['parent']) + intval($item['parent']), + intval($item['parent']) ); //} if(count($p)) @@ -2368,7 +2393,6 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { $like = true; $target_type = ( $parent['uri'] === $parent['parent-uri'] ? 'Post' : 'Comment'); -// $target_type = (strpos($parent['type'], 'comment') ? 'Comment' : 'Post'); // $positive = (($item['deleted']) ? 'false' : 'true'); $positive = 'true'; @@ -2382,7 +2406,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { // fetch the original signature if the relayable was created by a Diaspora // or DFRN user. Relayables for other networks are not supported. - $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1", +/* $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1", intval($item['id']) ); if(count($r)) { @@ -2398,7 +2422,25 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { // function is called logger('diaspora_send_relay: original author signature not found, cannot send relayable'); return; - } + }*/ + + /* Since the author signature is only checked by the parent, not by the relay recipients, + * I think it may not be necessary for us to do so much work to preserve all the original + * signatures. The important thing that Diaspora DOES need is the original creator's handle. + * Let's just generate that and forget about all the original author signature stuff. + * + * Note: this might be more of an problem if we want to support likes on comments for older + * versions of Diaspora (diaspora-pistos), but since there are a number of problems with + * doing that, let's ignore it for now. + * + * Currently, only DFRN contacts are supported. StatusNet shouldn't be hard, but it hasn't + * been done yet + */ + + $handle = diaspora_handle_from_contact($item['contact-id']); + if(! $handle) + return; + if($relay_retract) $sender_signed_text = $item['guid'] . ';' . $target_type; diff --git a/include/items.php b/include/items.php index 93200cc4b..0ba40e0fa 100755 --- a/include/items.php +++ b/include/items.php @@ -2459,6 +2459,7 @@ function local_delivery($importer,$data) { $is_a_remote_delete = false; + // POSSIBLE CLEANUP --> Why select so many fields when only forum_mode and wall are used? $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`, `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` @@ -2472,7 +2473,7 @@ function local_delivery($importer,$data) { intval($importer['importer_uid']) ); if($r && count($r)) - $is_a_remote_delete = true; + $is_a_remote_delete = true; // Does this have the characteristics of a community or private group comment? // If it's a reply to a wall post on a community/prvgroup page it's a @@ -2799,7 +2800,7 @@ function local_delivery($importer,$data) { } if($posted_id && $parent) { - + proc_run('php',"include/notifier.php","comment-import","$posted_id"); if((! $is_like) && (! $importer['self'])) { diff --git a/include/notifier.php b/include/notifier.php index f54efba31..947818d59 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -18,6 +18,31 @@ require_once('include/html2plain.php'); * us by hosting providers. */ +/* + * The notifier is typically called with: + * + * proc_run('php', "include/notifier.php", COMMAND, ITEM_ID); + * + * where COMMAND is one of the following: + * + * activity (in diaspora.php, dfrn_confirm.php, profiles.php) + * comment-import (in diaspora.php, items.php) + * comment-new (in item.php) + * drop (in diaspora.php, items.php, photos.php) + * edit_post (in item.php) + * event (in events.php) + * expire (in items.php) + * like (in like.php, poke.php) + * mail (in message.php) + * suggest (in fsuggest.php) + * tag (in photos.php, poke.php, tagger.php) + * tgroup (in items.php) + * wall-new (in photos.php, item.php) + * + * and ITEM_ID is the id of the item in the database that needs to be sent to others. + */ + + function notifier_run($argv, $argc){ global $a, $db; diff --git a/mod/network.php b/mod/network.php index 17368ab92..97f00eeda 100644 --- a/mod/network.php +++ b/mod/network.php @@ -563,7 +563,7 @@ function network_content(&$a, $update = 0) { } else { - if(! get_pconfig(local_user(),'system','alt_pager')) { + if(! get_pconfig(local_user(),'system','alt_pager')) { $r = q("SELECT COUNT(*) AS `total` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 @@ -576,10 +576,15 @@ function network_content(&$a, $update = 0) { if(count($r)) { $a->set_pager_total($r[0]['total']); } - } - $itemspage_network = get_pconfig(local_user(),'system','itemspage_network'); - $a->set_pager_itemspage(((intval($itemspage_network)) ? $itemspage_network : 40)); - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + } + + $itemspage_network = get_pconfig(local_user(),'system','itemspage_network'); + $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40); + if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network)) + $itemspage_network = $a->force_max_items; + + $a->set_pager_itemspage($itemspage_network); + $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); } $simple_update = (($update) ? " and `item`.`unseen` = 1 " : ''); diff --git a/view/theme/frost-mobile/TODO b/view/theme/frost-mobile/TODO index 940d9e588..0ffd4f8c3 100644 --- a/view/theme/frost-mobile/TODO +++ b/view/theme/frost-mobile/TODO @@ -12,11 +12,18 @@ Photo album display? - Admin: access to more pages than summary? -- Embedded video playback is way too big +- Find a way to show embedded videos at the normal size for tablets that can handle it + +- Need to find a way to deal with freakin annoying elements that don't respect screen width limits. + Specifically, need to find a way to keep them from forcing a horizontal scroll bar to show up and + making the rest of the body text overflow the item's borders that is screen-width sensitive (it's + annoying to have a 300px truncated code block on a 1024px wide screen). At least the following cause problems: + - code blocks + - blockquote blocks + - #reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongtags - Needs to be faster! - Reduce DOM elements (~2400 for 10 items, ~8400 for 40 items) - - Automatically set limit of 10 items for Network and Profile? diff --git a/view/theme/frost-mobile/head.tpl b/view/theme/frost-mobile/head.tpl index 8496667e1..a849f4459 100644 --- a/view/theme/frost-mobile/head.tpl +++ b/view/theme/frost-mobile/head.tpl @@ -1,7 +1,10 @@ - + + + +