From 82820d8e952dc648af572a55b6e205d448cfa138 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 9 Jan 2013 20:54:18 +0100 Subject: [PATCH 01/32] Now the third most likely languages are shown. In "vier" the tag line is now suppressed. It saves a little bit of space - and is redundant. --- include/items.php | 19 +++++++++++++++++-- mod/item.php | 18 ++++++++++++++++-- object/Item.php | 24 ++++++++++++++++++++++-- view/theme/vier/style.css | 3 +++ 4 files changed, 58 insertions(+), 6 deletions(-) diff --git a/include/items.php b/include/items.php index 7eb090136..6e856f960 100755 --- a/include/items.php +++ b/include/items.php @@ -898,8 +898,23 @@ function item_store($arr,$force_parent = false) { require_once('library/langdet/Text/LanguageDetect.php'); $naked_body = preg_replace('/\[(.+?)\]/','',$arr['body']); $l = new Text_LanguageDetect; - $lng = $l->detectConfidence($naked_body); - $arr['postopts'] = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : ''); + //$lng = $l->detectConfidence($naked_body); + //$arr['postopts'] = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : ''); + $lng = $l->detect($naked_body, 3); + + if (sizeof($lng) > 0) { + $postopts = ""; + + foreach ($lng as $language => $score) { + if ($postopts == "") + $postopts = "lang="; + else + $postopts .= ":"; + + $postopts .= $language.";".$score; + } + $arr['postopts'] = $postopts; + } } $arr['wall'] = ((x($arr,'wall')) ? intval($arr['wall']) : 0); diff --git a/mod/item.php b/mod/item.php index 2ed1b812a..8399b796d 100644 --- a/mod/item.php +++ b/mod/item.php @@ -236,9 +236,23 @@ function item_post(&$a) { if (version_compare(PHP_VERSION, '5.3.0', '>=')) { $l = new Text_LanguageDetect; - $lng = $l->detectConfidence($naked_body); + //$lng = $l->detectConfidence($naked_body); + //$postopts = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : ''); - $postopts = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : ''); + $lng = $l->detect($naked_body, 3); + + if (sizeof($lng) > 0) { + $postopts = ""; + + foreach ($lng as $language => $score) { + if ($postopts == "") + $postopts = "lang="; + else + $postopts .= ":"; + + $postopts .= $language.";".$score; + } + } logger('mod_item: detect language' . print_r($lng,true) . $naked_body, LOGGER_DATA); } diff --git a/object/Item.php b/object/Item.php index 0ea9954b0..e5aaecacd 100644 --- a/object/Item.php +++ b/object/Item.php @@ -213,8 +213,28 @@ class Item extends BaseObject { localize_item($item); if ($item["postopts"]) { - $langdata = explode(";", $item["postopts"]); - $langstr = substr($langdata[0], 5)." (".round($langdata[1]*100, 1)."%)"; + //$langdata = explode(";", $item["postopts"]); + //$langstr = substr($langdata[0], 5)." (".round($langdata[1]*100, 1)."%)"; + $langstr = ""; + if (substr($item["postopts"], 0, 5) == "lang=") { + $postopts = substr($item["postopts"], 5); + + $languages = explode(":", $postopts); + + if (sizeof($languages) == 1) { + $languages = array(); + $languages[] = $postopts; + } + + foreach ($languages as $language) { + $langdata = explode(";", $language); + if ($langstr != "") + $langstr .= ", "; + + //$langstr .= $langdata[0]." (".round($langdata[1]*100, 1)."%)"; + $langstr .= round($langdata[1]*100, 1)."% ".$langdata[0]; + } + } } $body = prepare_body($item,true); diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index f97fc2f59..dcf8d3425 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -1091,6 +1091,7 @@ border-bottom: 1px solid #D2D2D2; max-width: 660px; word-wrap: break-word; line-height: 1.36; + padding-bottom: 6px; } .wall-item-container .wall-item-content img { @@ -1304,7 +1305,9 @@ border-bottom: 1px solid #D2D2D2; .wall-item-tags { padding-top: 1px; padding-bottom: 2px; + display: none; } + .tag { color: rgb(153,153,153); padding-left: 3px; From 61c78711dfa9744e01c3acc9a3c5643c6a18b5cb Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 11 Jan 2013 01:20:16 +0100 Subject: [PATCH 02/32] Preparations for a new tag structure. Tags are now stored in a dedicated table. --- boot.php | 2 +- database.sql | 14 +++ include/items.php | 150 +++++++++++++++++------------- include/tags.php | 82 ++++++++++++++++ object/Item.php | 18 +++- update.php | 15 ++- view/theme/vier/profile_vcard.tpl | 2 +- view/theme/vier/style.css | 8 +- 8 files changed, 214 insertions(+), 77 deletions(-) create mode 100644 include/tags.php diff --git a/boot.php b/boot.php index a9e599805..bf0f86eae 100644 --- a/boot.php +++ b/boot.php @@ -14,7 +14,7 @@ require_once('include/features.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '3.1.1572' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1157 ); +define ( 'DB_UPDATE_VERSION', 1158 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 369637fe6..bc3c1aabd 100644 --- a/database.sql +++ b/database.sql @@ -1118,3 +1118,17 @@ CREATE TABLE IF NOT EXISTS `userd` ( `username` char(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tag` +-- + +CREATE TABLE IF NOT EXISTS `tag` ( + `iid` int(11) NOT NULL, + `tag` char(255) NOT NULL, + `link` char(255) NOT NULL, + PRIMARY KEY (`iid`, `tag`), + KEY `tag` (`tag`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/include/items.php b/include/items.php index 6e856f960..b93f56e17 100755 --- a/include/items.php +++ b/include/items.php @@ -5,7 +5,7 @@ require_once('include/oembed.php'); require_once('include/salmon.php'); require_once('include/crypto.php'); require_once('include/Photo.php'); - +require_once('include/tags.php'); function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) { @@ -26,7 +26,7 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) } } - + // default permissions - anonymous user @@ -670,7 +670,7 @@ function get_atom_elements($feed,$item) { } // translate OStatus unfollow to activity streams if it happened to get selected - + if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow')) $res['verb'] = ACTIVITY_UNFOLLOW; @@ -721,7 +721,7 @@ function get_atom_elements($feed,$item) { if($child[NAMESPACE_ACTIVITY]['object-type'][0]['data']) { $res['object-type'] = $child[NAMESPACE_ACTIVITY]['object-type'][0]['data']; $res['object'] .= '' . $child[NAMESPACE_ACTIVITY]['object-type'][0]['data'] . '' . "\n"; - } + } if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'id') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['id'][0]['data']) $res['object'] .= '' . $child[SIMPLEPIE_NAMESPACE_ATOM_10]['id'][0]['data'] . '' . "\n"; if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'link') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['link']) @@ -759,7 +759,7 @@ function get_atom_elements($feed,$item) { $child = $rawobj[0]['child']; if($child[NAMESPACE_ACTIVITY]['object-type'][0]['data']) { $res['target'] .= '' . $child[NAMESPACE_ACTIVITY]['object-type'][0]['data'] . '' . "\n"; - } + } if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'id') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['id'][0]['data']) $res['target'] .= '' . $child[SIMPLEPIE_NAMESPACE_ATOM_10]['id'][0]['data'] . '' . "\n"; if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'link') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['link']) @@ -1032,7 +1032,7 @@ function item_store($arr,$force_parent = false) { logger('item_store: item parent was not found - ignoring item'); return 0; } - + $parent_deleted = 0; } } @@ -1072,6 +1072,7 @@ function item_store($arr,$force_parent = false) { if(count($r)) { $current_post = $r[0]['id']; + create_tags_from_item($r[0]['id']); logger('item_store: created item ' . $current_post); } else { @@ -1087,7 +1088,7 @@ function item_store($arr,$force_parent = false) { ); } - if((! $parent_id) || ($arr['parent-uri'] === $arr['uri'])) + if((! $parent_id) || ($arr['parent-uri'] === $arr['uri'])) $parent_id = $current_post; if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid)) @@ -1108,6 +1109,7 @@ function item_store($arr,$force_parent = false) { intval($parent_deleted), intval($current_post) ); + create_tags_from_item($current_post); $arr['id'] = $current_post; $arr['parent'] = $parent_id; @@ -1287,7 +1289,7 @@ function tag_deliver($uid,$item_id) { intval($item_id) ); - proc_run('php','include/notifier.php','tgroup',$item_id); + proc_run('php','include/notifier.php','tgroup',$item_id); } @@ -1358,7 +1360,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { if($contact['duplex'] && $contact['dfrn-id']) $idtosend = '0:' . $orig_id; if($contact['duplex'] && $contact['issued-id']) - $idtosend = '1:' . $orig_id; + $idtosend = '1:' . $orig_id; $rino = ((function_exists('mcrypt_encrypt')) ? 1 : 0); @@ -1376,7 +1378,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { break; case SSL_POLICY_SELFSIGN: $ssl_policy = 'self'; - break; + break; case SSL_POLICY_NONE: default: $ssl_policy = 'none'; @@ -1429,7 +1431,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { intval(($perm == 'rw') ? 1 : 0), intval($contact['id']) ); - $contact['writable'] = (string) 1 - intval($contact['writable']); + $contact['writable'] = (string) 1 - intval($contact['writable']); } } @@ -1573,7 +1575,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) logger('consume_feed: empty input'); return; } - + $feed = new SimplePie(); $feed->set_raw_data($xml); if($datedir) @@ -1609,7 +1611,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) { $name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']; $new_name = $elems['name'][0]['data']; - } + } 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']; @@ -1652,12 +1654,12 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) intval($contact['uid']) ); } - + $img->scaleImageSquare(175); - + $hash = $resource_id; $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), 'Contact Photos', 4); - + $img->scaleImage(80); $r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), 'Contact Photos', 5); @@ -1666,7 +1668,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) $a = get_app(); - q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s' + 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.'.$img->getExt()), @@ -1716,7 +1718,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) * to contain a sparkle link and perhaps a photo. * */ - + $bdtext = sprintf( t('%s\'s birthday'), $contact['name']); $bdtext2 = sprintf( t('Happy Birthday %s'), ' [url=' . $contact['url'] . ']' . $contact['name'] . '[/url]' ) ; @@ -1733,7 +1735,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($bdtext2), dbesc('birthday') ); - + // update bdyear @@ -1825,6 +1827,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc(implode(',',$newtags)), intval($i[0]['id']) ); + create_tags_from_item($i[0]['id']); } } } @@ -1839,6 +1842,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($item['uri']), intval($importer['uid']) ); + create_tags_from_itemuri($item['uri'], $importer['uid']); } else { $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', @@ -1849,6 +1853,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($uri), intval($importer['uid']) ); + create_tags_from_itemuri($uri, $importer['uid']); if($item['last-child']) { // ensure that last-child is set in case the comment that had it just got wiped. q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ", @@ -1962,6 +1967,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($item_id), intval($importer['uid']) ); + create_tags_from_itemuri($item_id, $importer['uid']); } // update last-child if it changes @@ -2003,7 +2009,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($parent_uri) ); if($r && count($r)) - continue; + continue; } if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) { @@ -2026,6 +2032,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($r[0]['tag'] . (strlen($r[0]['tag']) ? ',' : '') . $newtag), intval($r[0]['id']) ); + create_tags_from_item($r[0]['id']); } } } @@ -2109,6 +2116,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) dbesc($item_id), intval($importer['uid']) ); + create_tags_from_itemuri($item_id, $importer['uid']); } // update last-child if it changes @@ -2246,7 +2254,7 @@ function local_delivery($importer,$data) { if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) { $name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']; $new_name = $elems['name'][0]['data']; - } + } 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']; @@ -2285,12 +2293,12 @@ function local_delivery($importer,$data) { intval($importer['importer_uid']) ); } - + $img->scaleImageSquare(175); - + $hash = $resource_id; $r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 4); - + $img->scaleImage(80); $r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 5); @@ -2299,7 +2307,7 @@ function local_delivery($importer,$data) { $a = get_app(); - q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s' + 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.'.$img->getExt()), @@ -2358,17 +2366,17 @@ function local_delivery($importer,$data) { /** relocated user must have original key pair */ /*$newloc['pubkey'] = notags(unxmlify($base['pubkey'][0]['data'])); $newloc['prvkey'] = notags(unxmlify($base['prvkey'][0]['data']));*/ - + logger("items:relocate contact ".print_r($newloc, true).print_r($importer, true), LOGGER_DEBUG); - + // update contact $r = q("SELECT photo, url FROM contact WHERE id=%d AND uid=%d;", intval($importer['id']), intval($importer['importer_uid'])); - if ($r === false) + if ($r === false) return 1; $old = $r[0]; - + $x = q("UPDATE contact SET name = '%s', photo = '%s', @@ -2411,7 +2419,7 @@ function local_delivery($importer,$data) { if ($x === false) return 1; } - + // TODO // merge with current record, current contents have priority // update record, set url-updated @@ -2485,7 +2493,7 @@ function local_delivery($importer,$data) { $hash = random_string(); - + $r = q("INSERT INTO `intro` ( `uid`, `fid`, `contact-id`, `note`, `hash`, `datetime`, `blocked` ) VALUES( %d, %d, %d, '%s', '%s', '%s', %d )", intval($fsugg['uid']), @@ -2539,7 +2547,7 @@ function local_delivery($importer,$data) { $msg['uri'] = notags(unxmlify($base['id'][0]['data'])); $msg['parent-uri'] = notags(unxmlify($base['in-reply-to'][0]['data'])); $msg['created'] = datetime_convert(notags(unxmlify('UTC','UTC',$base['sentdate'][0]['data']))); - + dbesc_array($msg); $r = dbq("INSERT INTO `mail` (`" . implode("`, `", array_keys($msg)) @@ -2563,12 +2571,12 @@ function local_delivery($importer,$data) { 'verb' => ACTIVITY_POST, 'otype' => 'mail' ); - + notification($notif_params); return 0; // NOTREACHED - } + } $community_page = 0; $rawtags = $feed->get_feed_tags( NAMESPACE_DFRN, 'community'); @@ -2582,7 +2590,7 @@ function local_delivery($importer,$data) { ); $importer['forum'] = (string) $community_page; } - + logger('local_delivery: feed item count = ' . $feed->get_item_quantity()); // process any deleted entries @@ -2692,14 +2700,14 @@ function local_delivery($importer,$data) { if(count($i)) { // For tags, the owner cannot remove the tag on the author's copy of the post. - + $owner_remove = (($item['contact-id'] == $i[0]['contact-id']) ? true: false); $author_remove = (($item['origin'] && $item['self']) ? true : false); - $author_copy = (($item['origin']) ? true : false); + $author_copy = (($item['origin']) ? true : false); if($owner_remove && $author_copy) continue; - if($author_remove || $owner_remove) { + if($author_remove || $owner_remove) { $tags = explode(',',$i[0]['tag']); $newtags = array(); if(count($tags)) { @@ -2711,6 +2719,7 @@ function local_delivery($importer,$data) { dbesc(implode(',',$newtags)), intval($i[0]['id']) ); + create_tags_from_item($i[0]['id']); } } } @@ -2725,6 +2734,7 @@ function local_delivery($importer,$data) { dbesc($item['uri']), intval($importer['importer_uid']) ); + create_tags_from_itemuri($item['uri'], $importer['importer_uid']); } else { $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', @@ -2735,6 +2745,7 @@ function local_delivery($importer,$data) { dbesc($uri), intval($importer['importer_uid']) ); + create_tags_from_itemuri($uri, $importer['importer_uid']); if($item['last-child']) { // ensure that last-child is set in case the comment that had it just got wiped. q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ", @@ -2742,7 +2753,7 @@ function local_delivery($importer,$data) { dbesc($item['parent-uri']), intval($item['uid']) ); - // who is the last child now? + // who is the last child now? $r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d ORDER BY `created` DESC LIMIT 1", dbesc($item['parent-uri']), @@ -2752,7 +2763,7 @@ function local_delivery($importer,$data) { q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", intval($r[0]['id']) ); - } + } } // if this is a relayed delete, propagate it to other recipients @@ -2846,11 +2857,11 @@ function local_delivery($importer,$data) { if(count($r)) { $iid = $r[0]['id']; if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { - + // do not accept (ignore) an earlier edit than one we currently have. if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited']) continue; - + logger('received updated comment' , LOGGER_DEBUG); $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($datarray['title']), @@ -2860,6 +2871,7 @@ function local_delivery($importer,$data) { dbesc($item_id), intval($importer['importer_uid']) ); + create_tags_from_itemuri($item_id, $importer['importer_uid']); proc_run('php',"include/notifier.php","comment-import",$iid); @@ -2896,14 +2908,14 @@ function local_delivery($importer,$data) { dbesc($datarray['verb']), dbesc($datarray['parent-uri']), dbesc($datarray['parent-uri']) - + ); if($r && count($r)) - continue; + continue; } if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) { - + $xo = parse_xml_string($datarray['object'],false); $xt = parse_xml_string($datarray['target'],false); @@ -2916,9 +2928,9 @@ function local_delivery($importer,$data) { intval($importer['importer_uid']) ); if(! count($tagp)) - continue; + continue; - // extract tag, if not duplicate, and this user allows tags, add to parent item + // extract tag, if not duplicate, and this user allows tags, add to parent item if($xo->id && $xo->content) { $newtag = '#[url=' . $xo->id . ']'. $xo->content . '[/url]'; @@ -2932,9 +2944,10 @@ function local_delivery($importer,$data) { intval($tagp[0]['id']), dbesc(datetime_convert()) ); + create_tags_from_item($tagp[0]['id']); } } - } + } } } @@ -2951,7 +2964,7 @@ function local_delivery($importer,$data) { $parent = $r[0]['parent']; $parent_uri = $r[0]['parent-uri']; } - + if(! $is_like) { $r1 = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d", dbesc(datetime_convert()), @@ -2969,7 +2982,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'])) { require_once('include/enotify.php'); @@ -3032,6 +3045,7 @@ function local_delivery($importer,$data) { dbesc($item_id), intval($importer['importer_uid']) ); + create_tags_from_itemuri($item_id, $importer['importer_uid']); } // update last-child if it changes @@ -3068,7 +3082,7 @@ function local_delivery($importer,$data) { dbesc($parent_uri) ); if($r && count($r)) - continue; + continue; } @@ -3083,24 +3097,25 @@ function local_delivery($importer,$data) { intval($importer['importer_uid']) ); if(! count($r)) - continue; + continue; - // extract tag, if not duplicate, add to parent item + // extract tag, if not duplicate, add to parent item if($xo->content) { if(! (stristr($r[0]['tag'],trim($xo->content)))) { q("UPDATE item SET tag = '%s' WHERE id = %d LIMIT 1", dbesc($r[0]['tag'] . (strlen($r[0]['tag']) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]'), intval($r[0]['id']) ); + create_tags_from_item($r[0]['id']); } - } + } } } $posted_id = item_store($datarray); // find out if our user is involved in this conversation and wants to be notified. - + if(!x($datarray['type']) || $datarray['type'] != 'activity') { $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0", @@ -3114,11 +3129,11 @@ function local_delivery($importer,$data) { // first make sure this isn't our own post coming back to us from a wall-to-wall event if(! link_compare($datarray['author-link'],$importer_url)) { - + foreach($myconv as $conv) { // now if we find a match, it means we're in this conversation - + if(! link_compare($conv['author-link'],$importer_url)) continue; @@ -3206,6 +3221,7 @@ function local_delivery($importer,$data) { dbesc($item_id), intval($importer['importer_uid']) ); + create_tags_from_itemuri($item_id, $importer['importer_uid']); } // update last-child if it changes @@ -3329,7 +3345,7 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) { // send email notification to owner? } else { - + // create contact record $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `name`, `nick`, `photo`, `network`, `rel`, @@ -3352,7 +3368,7 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) { if(count($r)) $contact_record = $r[0]; - // create notification + // create notification $hash = random_string(); if(is_array($contact_record)) { @@ -3390,7 +3406,7 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) { 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" . 'Content-transfer-encoding: 8bit' ); - + } } } @@ -3460,7 +3476,7 @@ function subscribe_to_hub($url,$importer,$contact,$hubmode = 'subscribe') { post_url($url,$params); logger('subscribe_to_hub: returns: ' . $a->get_curl_code(), LOGGER_DEBUG); - + return; } @@ -3793,16 +3809,16 @@ function item_expire($uid,$days) { $expire_items = get_pconfig($uid, 'expire','items'); $expire_items = (($expire_items===false)?1:intval($expire_items)); // default if not set: 1 - + $expire_notes = get_pconfig($uid, 'expire','notes'); $expire_notes = (($expire_notes===false)?1:intval($expire_notes)); // default if not set: 1 $expire_starred = get_pconfig($uid, 'expire','starred'); $expire_starred = (($expire_starred===false)?1:intval($expire_starred)); // default if not set: 1 - + $expire_photos = get_pconfig($uid, 'expire','photos'); $expire_photos = (($expire_photos===false)?0:intval($expire_photos)); // default if not set: 0 - + logger('expire: # items=' . count($r). "; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos"); foreach($r as $item) { @@ -3897,6 +3913,7 @@ function drop_item($id,$interactive = true) { dbesc(datetime_convert()), intval($item['id']) ); + create_tags_from_item($item['id']); // clean up categories and tags so they don't end up as orphans @@ -3962,6 +3979,7 @@ function drop_item($id,$interactive = true) { dbesc($item['parent-uri']), intval($item['uid']) ); + create_tags_from_item($item['parent-uri'], $item['uid']); // ignore the result } else { @@ -3971,7 +3989,7 @@ function drop_item($id,$interactive = true) { dbesc($item['parent-uri']), intval($item['uid']) ); - // who is the last child now? + // who is the last child now? $r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d ORDER BY `edited` DESC LIMIT 1", dbesc($item['parent-uri']), intval($item['uid']) @@ -4003,7 +4021,7 @@ function drop_item($id,$interactive = true) { goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); //NOTREACHED } - + } diff --git a/include/tags.php b/include/tags.php new file mode 100644 index 000000000..384d6581f --- /dev/null +++ b/include/tags.php @@ -0,0 +1,82 @@ +set_baseurl(get_config('system','url')); +*/ + +function create_tags_from_item($itemid) { + global $a; + + $searchpath = $a->get_baseurl()."/search?tag="; + + $messages = q("SELECT `uri`, `uid`, `id`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); + + if (!$messages) + return; + + $message = $messages[0]; + + // Clean up all tags + q("DELETE FROM `tag` WHERE `iid` = %d", intval($itemid)); + + if ($message["deleted"]) + return; + + $taglist = explode(",", $message["tag"]); + + $tags = ""; + foreach ($taglist as $tag) + if ((substr(trim($tag), 0, 1) == "#") OR (substr(trim($tag), 0, 1) == "@")) + $tags .= " ".trim($tag); + else + $tags .= " #".trim($tag); + + $data = " ".$message["title"]." ".$message["body"]." ".$tags." "; + + $tags = array(); + + $pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism"; + if (preg_match_all($pattern, $data, $matches)) + foreach ($matches[1] as $match) + $tags["#".strtolower($match)] = $searchpath.strtolower($match); + + $pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism"; + if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) + $tags[$match[1].strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2]; + } + + foreach ($tags as $tag=>$link) + $r = q("INSERT INTO `tag` (`iid`, `tag`, `link`) VALUES (%d, '%s', '%s')", + intval($itemid), dbesc($tag), dbesc($link)); +} + +function create_tags_from_itemuri($itemuri, $uid) { + $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid)); + + foreach ($messages as $message) + create_tags_from_item($message["id"]); +} + +function update_items() { + $messages = q("SELECT `id` FROM `item` where tag !='' ORDER BY `created` DESC LIMIT 100"); + + foreach ($messages as $message) + create_tags_from_item($message["id"]); +} + +//update_items(); +//create_tags_from_item(265194); +//create_tags_from_itemuri("infoagent@diasp.org:cce94abd104c06e8", 2); +?> diff --git a/object/Item.php b/object/Item.php index e5aaecacd..215c987b1 100644 --- a/object/Item.php +++ b/object/Item.php @@ -148,7 +148,18 @@ class Item extends BaseObject { $tags=array(); $hashtags = array(); $mentions = array(); - foreach(explode(',',$item['tag']) as $tag){ + + $taglist = q("select tag,link from tag where iid=%d", intval($item['id'])); + + foreach($taglist as $tag) { + $tags[] = substr($tag["tag"], 0, 1)."".substr($tag["tag"], 1).""; + if (substr($tag["tag"], 0, 1) == "#") + $hashtags[] = "#".substr($tag["tag"], 1).""; + elseif (substr($tag["tag"], 0, 1) == "@") + $mentions[] = "@".substr($tag["tag"], 1).""; + } + + /*foreach(explode(',',$item['tag']) as $tag){ $tag = trim($tag); if ($tag!="") { $t = bbcode($tag); @@ -158,8 +169,7 @@ class Item extends BaseObject { elseif($t[0] == '@') $mentions[] = $t; } - - } + }*/ $like = ((x($alike,$item['uri'])) ? format_like($alike[$item['uri']],$alike[$item['uri'] . '-l'],'like',$item['uri']) : ''); $dislike = ((x($dlike,$item['uri'])) ? format_like($dlike[$item['uri']],$dlike[$item['uri'] . '-l'],'dislike',$item['uri']) : ''); @@ -270,7 +280,7 @@ class Item extends BaseObject { 'has_cats' => ((count($categories)) ? 'true' : ''), 'has_folders' => ((count($folders)) ? 'true' : ''), 'categories' => $categories, - 'folders' => $folders, + 'folders' => $folders, 'body' => $body_e, 'text' => $text_e, 'id' => $this->get_id(), diff --git a/update.php b/update.php index b29afdb74..7308a6acf 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ {{ else }} -
+ {{ endif }} diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index dcf8d3425..aa66769db 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -1305,16 +1305,16 @@ border-bottom: 1px solid #D2D2D2; .wall-item-tags { padding-top: 1px; padding-bottom: 2px; - display: none; + /*display: none;*/ } .tag { color: rgb(153,153,153); - padding-left: 3px; - font-size: 10px; + /*padding-left: 3px; + font-size: 10px;*/ } .tag a { - padding-right: 8px; + /*padding-right: 8px;*/ color: rgb(153,153,153); } .wwto { From c26cf428a67de6b2c8f05eedc8ac6ac4886e4161 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 11 Jan 2013 08:51:58 +0100 Subject: [PATCH 03/32] The search now searches in the new tag table --- mod/search.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mod/search.php b/mod/search.php index 956816fed..6694fbc78 100644 --- a/mod/search.php +++ b/mod/search.php @@ -136,6 +136,11 @@ function search_content(&$a) { $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); } + if($tag) { + $sql_extra = sprintf(" AND `tag`.`tag` = '%s' ", '#'.dbesc(protect_sprintf($search))); + $sql_table = "`tag` LEFT JOIN `item` ON `item`.`id` = `tag`.`iid`"; + } else + $sql_table = "`item`"; @@ -146,7 +151,7 @@ function search_content(&$a) { if( (! get_config('alt_pager', 'global')) && (! get_pconfig(local_user(),'system','alt_pager')) ) { $r = q("SELECT distinct(`item`.`uri`) as `total` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0) OR `item`.`uid` = %d ) @@ -169,7 +174,7 @@ function search_content(&$a) { `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`, `user`.`nickname` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0 ) From 8cef0fa80d63e72fe0adb14aaa43eb9c23702a49 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 13 Jan 2013 09:37:15 +0100 Subject: [PATCH 04/32] Mentions are now displayed much faster. Attention: The related database update can last more than one minute. bbcode: The generated HTML is now cleaned up every time (using the DOM) since it happened that bad html broke the network page. --- boot.php | 2 +- database.sql | 2 ++ include/api.php | 29 +++++++++++++++++------------ include/bbcode.php | 5 +++-- include/tags.php | 7 ++++--- mod/item.php | 3 +++ mod/network.php | 10 ++++++++-- mod/search.php | 3 +++ update.php | 8 +++++++- 9 files changed, 48 insertions(+), 21 deletions(-) diff --git a/boot.php b/boot.php index bf0f86eae..7bd0fec4d 100644 --- a/boot.php +++ b/boot.php @@ -14,7 +14,7 @@ require_once('include/features.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '3.1.1572' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1158 ); +define ( 'DB_UPDATE_VERSION', 1159 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index bc3c1aabd..f7fdfa3d9 100644 --- a/database.sql +++ b/database.sql @@ -546,6 +546,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `deleted` tinyint(1) NOT NULL DEFAULT '0', `origin` tinyint(1) NOT NULL DEFAULT '0', `forum_mode` tinyint(1) NOT NULL DEFAULT '0', + `mention` tinyint(1) NOT NULL DEFAULT '0', `last-child` tinyint(1) unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id`), KEY `uri` (`uri`), @@ -575,6 +576,7 @@ CREATE TABLE IF NOT EXISTS `item` ( KEY `uid_commented` (`uid`, `commented`), KEY `uid_created` (`uid`, `created`), KEY `uid_unseen` (`uid`, `unseen`), + KEY `mention` (`mention`), FULLTEXT KEY `title` (`title`), FULLTEXT KEY `body` (`body`), FULLTEXT KEY `allow_cid` (`allow_cid`), diff --git a/include/api.php b/include/api.php index 2c5ddc626..1b33378b0 100644 --- a/include/api.php +++ b/include/api.php @@ -1040,18 +1040,23 @@ $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - if (get_config('system','use_fulltext_engine')) - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ", - dbesc(protect_sprintf($myurl)), - dbesc(protect_sprintf($myurl)), - dbesc(protect_sprintf($diasp_url)) - ); - else - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ", - dbesc(protect_sprintf('%' . $myurl)), - dbesc(protect_sprintf('%' . $myurl . ']%')), - dbesc(protect_sprintf('%' . $diasp_url . ']%')) - ); + /*if (get_config('system','use_fulltext_engine')) + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ", + dbesc(protect_sprintf($myurl)), + dbesc(protect_sprintf($myurl)), + dbesc(protect_sprintf($diasp_url)) + ); + else + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ", + dbesc(protect_sprintf('%' . $myurl)), + dbesc(protect_sprintf('%' . $myurl . ']%')), + dbesc(protect_sprintf('%' . $diasp_url . ']%')) + );*/ + + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", + dbesc(protect_sprintf($myurl)), + dbesc(protect_sprintf($myurl)) + ); if ($max_id > 0) $sql_extra .= ' AND `item`.`id` <= '.intval($max_id); diff --git a/include/bbcode.php b/include/bbcode.php index 08edc1934..a7cfa079d 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -603,7 +603,8 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) { // Clean up the HTML by loading and saving the HTML with the DOM // Only do it when it has to be done - for performance reasons - if (!$tryoembed) { + // Update: Now it is done every time - since bad structured html can break a whole page + //if (!$tryoembed) { $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; @@ -618,7 +619,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) { $Text = str_replace('
','', $Text); $Text = mb_convert_encoding($Text, "UTF-8", 'HTML-ENTITIES'); - } + //} call_hooks('bbcode',$Text); diff --git a/include/tags.php b/include/tags.php index 384d6581f..aabe40d1c 100644 --- a/include/tags.php +++ b/include/tags.php @@ -20,7 +20,7 @@ function create_tags_from_item($itemid) { $searchpath = $a->get_baseurl()."/search?tag="; - $messages = q("SELECT `uri`, `uid`, `id`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); + $messages = q("SELECT `uri`, `uid`, `id`, `created`, `edited`, `commented`, `received`, `changed`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); if (!$messages) return; @@ -58,8 +58,9 @@ function create_tags_from_item($itemid) { } foreach ($tags as $tag=>$link) - $r = q("INSERT INTO `tag` (`iid`, `tag`, `link`) VALUES (%d, '%s', '%s')", - intval($itemid), dbesc($tag), dbesc($link)); + $r = q("INSERT INTO `tag` (`iid`, `tag`, `link`, `created`, `edited`, `commented`, `received`, `changed`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s')", + intval($itemid), dbesc($tag), dbesc($link), dbesc($message["created"]), + dbesc($message["edited"]), dbesc($message["commented"]), dbesc($message["received"]), dbesc($message["changed"])); } function create_tags_from_itemuri($itemuri, $uid) { diff --git a/mod/item.php b/mod/item.php index 8399b796d..7096239b0 100644 --- a/mod/item.php +++ b/mod/item.php @@ -19,6 +19,7 @@ require_once('include/crypto.php'); require_once('include/enotify.php'); require_once('include/email.php'); require_once('library/langdet/Text/LanguageDetect.php'); +require_once('include/tags.php'); function item_post(&$a) { @@ -685,6 +686,7 @@ function item_post(&$a) { intval($post_id), intval($profile_uid) ); + create_tags_from_itemuri($post_id, $profile_uid); // update filetags in pconfig file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); @@ -750,6 +752,7 @@ function item_post(&$a) { if(count($r)) { $post_id = $r[0]['id']; logger('mod_item: saved item ' . $post_id); + create_tags_from_item($post_id); // update filetags in pconfig file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); diff --git a/mod/network.php b/mod/network.php index 2524ae063..ecef7c1df 100644 --- a/mod/network.php +++ b/mod/network.php @@ -674,8 +674,10 @@ function network_content(&$a, $update = 0) { $myurl = substr($myurl,strpos($myurl,'://')+3); $myurl = str_replace('www.','',$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - if (get_config('system','use_fulltext_engine')) + /*if (get_config('system','use_fulltext_engine')) $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ", + //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (`author-link` IN ('https://%s', 'http://%s') OR MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ", + //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($diasp_url)) @@ -685,8 +687,12 @@ function network_content(&$a, $update = 0) { dbesc(protect_sprintf('%' . $myurl)), dbesc(protect_sprintf('%' . $myurl . ']%')), dbesc(protect_sprintf('%' . $diasp_url . ']%')) - ); + );*/ + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", + dbesc(protect_sprintf($myurl)), + dbesc(protect_sprintf($myurl)) + ); } if($update) { diff --git a/mod/search.php b/mod/search.php index 6694fbc78..aedd63940 100644 --- a/mod/search.php +++ b/mod/search.php @@ -124,6 +124,9 @@ function search_content(&$a) { if(! $search) return $o; + if (get_config('system','only_tag_search')) + $tag = true; + if (get_config('system','use_fulltext_engine')) { if($tag) $sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('".'"%s"'."' in boolean mode) ", '#'.dbesc(protect_sprintf($search))); diff --git a/update.php b/update.php index 7308a6acf..04ae451a1 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sun, 13 Jan 2013 14:50:55 +0100 Subject: [PATCH 05/32] Changing the tag system to the "term" table. --- boot.php | 3 ++- database.sql | 26 ++++++++++++++----------- include/api.php | 9 +++++---- include/tags.php | 50 ++++++++++++++++++++++++++++++++++++++++-------- mod/network.php | 4 +++- mod/search.php | 23 +++++++++++++--------- object/Item.php | 21 ++++++++++++++------ update.php | 11 ++++------- 8 files changed, 100 insertions(+), 47 deletions(-) diff --git a/boot.php b/boot.php index 7bd0fec4d..6864e533d 100644 --- a/boot.php +++ b/boot.php @@ -204,10 +204,11 @@ define ( 'NOTIFY_SYSTEM', 0x8000 ); define ( 'TERM_UNKNOWN', 0 ); define ( 'TERM_HASHTAG', 1 ); -define ( 'TERM_MENTION', 2 ); +define ( 'TERM_MENTION', 2 ); define ( 'TERM_CATEGORY', 3 ); define ( 'TERM_PCATEGORY', 4 ); define ( 'TERM_FILE', 5 ); +define ( 'TERM_SAVEDSEARCH', 6 ); define ( 'TERM_OBJ_POST', 1 ); define ( 'TERM_OBJ_PHOTO', 2 ); diff --git a/database.sql b/database.sql index f7fdfa3d9..99d60429a 100644 --- a/database.sql +++ b/database.sql @@ -1017,18 +1017,22 @@ CREATE TABLE IF NOT EXISTS `spam` ( -- CREATE TABLE IF NOT EXISTS `term` ( - `tid` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `oid` INT UNSIGNED NOT NULL , - `otype` TINYINT( 3 ) UNSIGNED NOT NULL , - `type` TINYINT( 3 ) UNSIGNED NOT NULL , - `term` CHAR( 255 ) NOT NULL , - `url` CHAR( 255 ) NOT NULL, + `tid` int(10) unsigned NOT NULL AUTO_INCREMENT, + `aid` int(10) unsigned NOT NULL DEFAULT '0', + `uid` int(10) unsigned NOT NULL DEFAULT '0', + `oid` int(10) unsigned NOT NULL, + `otype` tinyint(3) unsigned NOT NULL, + `type` tinyint(3) unsigned NOT NULL, + `term` char(255) NOT NULL, + `url` char(255) NOT NULL, PRIMARY KEY (`tid`), - KEY `oid` ( `oid` ), - KEY `otype` ( `otype` ), - KEY `type` ( `type` ), - KEY `term` ( `term` ) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; + KEY `oid` (`oid`), + KEY `otype` (`otype`), + KEY `type` (`type`), + KEY `term` (`term`), + KEY `uid` (`uid`), + KEY `aid` (`aid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- diff --git a/include/api.php b/include/api.php index 1b33378b0..4efb0c614 100644 --- a/include/api.php +++ b/include/api.php @@ -1037,10 +1037,11 @@ $myurl = $a->get_baseurl() . '/profile/'. $a->user['nickname']; $myurl = substr($myurl,strpos($myurl,'://')+3); - $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); + //$myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); + $myurl = str_replace('www.','',$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - /*if (get_config('system','use_fulltext_engine')) +/* if (get_config('system','use_fulltext_engine')) $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ", dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($myurl)), @@ -1051,8 +1052,8 @@ dbesc(protect_sprintf('%' . $myurl)), dbesc(protect_sprintf('%' . $myurl . ']%')), dbesc(protect_sprintf('%' . $diasp_url . ']%')) - );*/ - + ); +*/ $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($myurl)) diff --git a/include/tags.php b/include/tags.php index aabe40d1c..6a5728a9b 100644 --- a/include/tags.php +++ b/include/tags.php @@ -12,12 +12,17 @@ if(is_null($db)) { unset($db_host, $db_user, $db_pass, $db_data); }; -$a->set_baseurl(get_config('system','url')); +$a->set_baseurl("https://pirati.ca"); */ function create_tags_from_item($itemid) { global $a; + $profile_base = $a->get_baseurl(); + $profile_data = parse_url($profile_base); + $profile_base_friendica = $profile_data['host'].$profile_data['path']."/profile/"; + $profile_base_diaspora = $profile_data['host'].$profile_data['path']."/u/"; + $searchpath = $a->get_baseurl()."/search?tag="; $messages = q("SELECT `uri`, `uid`, `id`, `created`, `edited`, `commented`, `received`, `changed`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); @@ -28,7 +33,11 @@ function create_tags_from_item($itemid) { $message = $messages[0]; // Clean up all tags - q("DELETE FROM `tag` WHERE `iid` = %d", intval($itemid)); + q("DELETE FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", + intval(TERM_OBJ_POST), + intval($itemid), + intval(TERM_HASHTAG), + intval(TERM_MENTION)); if ($message["deleted"]) return; @@ -49,7 +58,7 @@ function create_tags_from_item($itemid) { $pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism"; if (preg_match_all($pattern, $data, $matches)) foreach ($matches[1] as $match) - $tags["#".strtolower($match)] = $searchpath.strtolower($match); + $tags["#".strtolower($match)] = ""; // $searchpath.strtolower($match); $pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism"; if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) { @@ -57,10 +66,31 @@ function create_tags_from_item($itemid) { $tags[$match[1].strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2]; } - foreach ($tags as $tag=>$link) - $r = q("INSERT INTO `tag` (`iid`, `tag`, `link`, `created`, `edited`, `commented`, `received`, `changed`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s')", - intval($itemid), dbesc($tag), dbesc($link), dbesc($message["created"]), - dbesc($message["edited"]), dbesc($message["commented"]), dbesc($message["received"]), dbesc($message["changed"])); + foreach ($tags as $tag=>$link) { + + if (substr(trim($tag), 0, 1) == "#") { + $type = TERM_HASHTAG; + $term = substr($tag, 1); + } elseif (substr(trim($tag), 0, 1) == "@") { + $type = TERM_MENTION; + $term = substr($tag, 1); + } else { // This shouldn't happen + $type = TERM_HASHTAG; + $term = $tag; + } + + $r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`) VALUES (%d, %d, %d, %d, '%s', '%s')", + intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval($type), dbesc($term), dbesc($link)); + + // Search for mentions + if ((substr($tag, 0, 1) == '@') AND (strpos($link, $profile_base_friendica) OR strpos($link, $profile_base_diaspora))) { + $users = q("SELECT `uid` FROM `contact` WHERE self AND (`url` = '%s' OR `nurl` = '%s')", $link, $link); + foreach ($users AS $user) { + if ($user["uid"] == $message["uid"]) + q("UPDATE `item` SET `mention` = 1 WHERE `id` = %d", intval($itemid)); + } + } + } } function create_tags_from_itemuri($itemuri, $uid) { @@ -71,12 +101,16 @@ function create_tags_from_itemuri($itemuri, $uid) { } function update_items() { - $messages = q("SELECT `id` FROM `item` where tag !='' ORDER BY `created` DESC LIMIT 100"); + //$messages = q("SELECT `id` FROM `item` where tag !='' ORDER BY `created` DESC limit 10"); + $messages = q("SELECT `id` FROM `item` where tag !=''"); foreach ($messages as $message) create_tags_from_item($message["id"]); } +//print_r($tags); +//print_r($hashtags); +//print_r($mentions); //update_items(); //create_tags_from_item(265194); //create_tags_from_itemuri("infoagent@diasp.org:cce94abd104c06e8", 2); diff --git a/mod/network.php b/mod/network.php index ecef7c1df..4a8b54762 100644 --- a/mod/network.php +++ b/mod/network.php @@ -689,7 +689,9 @@ function network_content(&$a, $update = 0) { dbesc(protect_sprintf('%' . $diasp_url . ']%')) );*/ - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", + //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", + //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `mention`)", + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s'))", dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($myurl)) ); diff --git a/mod/search.php b/mod/search.php index aedd63940..c6d5989fb 100644 --- a/mod/search.php +++ b/mod/search.php @@ -23,7 +23,7 @@ function search_saved_searches() { ); } - + $tpl = get_markup_template("saved_searches_aside.tpl"); $o .= replace_macros($tpl, array( @@ -32,7 +32,7 @@ function search_saved_searches() { '$searchbox' => '', '$saved' => $saved, )); - } + } return $o; @@ -127,7 +127,7 @@ function search_content(&$a) { if (get_config('system','only_tag_search')) $tag = true; - if (get_config('system','use_fulltext_engine')) { + /*if (get_config('system','use_fulltext_engine')) { if($tag) $sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('".'"%s"'."' in boolean mode) ", '#'.dbesc(protect_sprintf($search))); else @@ -137,15 +137,20 @@ function search_content(&$a) { $sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ", dbesc('\\]' . protect_sprintf(preg_quote($search)) . '\\[')); else $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); - } + }*/ if($tag) { - $sql_extra = sprintf(" AND `tag`.`tag` = '%s' ", '#'.dbesc(protect_sprintf($search))); - $sql_table = "`tag` LEFT JOIN `item` ON `item`.`id` = `tag`.`iid`"; - } else + $sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d", + dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); + $sql_table = "`term` LEFT JOIN `item` ON `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` "; + } else { + if (get_config('system','use_fulltext_engine')) { + $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search))); + } else { + $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); + } $sql_table = "`item`"; - - + } // Here is the way permissions work in the search module... // Only public posts can be shown diff --git a/object/Item.php b/object/Item.php index 215c987b1..648b55807 100644 --- a/object/Item.php +++ b/object/Item.php @@ -145,18 +145,27 @@ class Item extends BaseObject { call_hooks('render_location',$locate); $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate)); + $searchpath = $a->get_baseurl()."/search?tag="; $tags=array(); $hashtags = array(); $mentions = array(); - $taglist = q("select tag,link from tag where iid=%d", intval($item['id'])); + $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", + intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION)); foreach($taglist as $tag) { - $tags[] = substr($tag["tag"], 0, 1)."".substr($tag["tag"], 1).""; - if (substr($tag["tag"], 0, 1) == "#") - $hashtags[] = "#".substr($tag["tag"], 1).""; - elseif (substr($tag["tag"], 0, 1) == "@") - $mentions[] = "@".substr($tag["tag"], 1).""; + + if ($tag["url"] == "") + $tag["url"] = $searchpath.strtolower($tag["term"]); + + if ($tag["type"] == TERM_HASHTAG) { + $hashtags[] = "#".$tag["term"].""; + $prefix = "#"; + } elseif ($tag["type"] == TERM_MENTION) { + $mentions[] = "@".$tag["term"].""; + $prefix = "@"; + } + $tags[] = $prefix."".$tag["term"].""; } /*foreach(explode(',',$item['tag']) as $tag){ diff --git a/update.php b/update.php index 04ae451a1..4bee3a3bc 100644 --- a/update.php +++ b/update.php @@ -1371,13 +1371,10 @@ ADD INDEX ( `datasize` ) "); } function update_1157() { - $r = q("CREATE TABLE IF NOT EXISTS `tag` ( - `iid` int(11) NOT NULL, - `tag` char(255) NOT NULL, - `link` char(255) NOT NULL, - PRIMARY KEY (`iid`, `tag`), - KEY `tag` (`tag`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8;"); + $r = q("ALTER TABLE `term` ADD `aid` int(10) unsigned NOT NULL DEFAULT '0', + ADD `uid` int(10) unsigned NOT NULL DEFAULT '0', + ADD INDEX (`uid`), + ADD INDEX (`aid`)"); if(!$r) return UPDATE_FAILED; return UPDATE_SUCCESS; From 3dc615dd9ddbd068f83ced55138e0f4f7a882ebe Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 13 Jan 2013 15:05:24 +0100 Subject: [PATCH 06/32] Adding the tag creating function to the function when a photo is tagged --- mod/photos.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mod/photos.php b/mod/photos.php index 7035c6690..118149227 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -5,7 +5,7 @@ require_once('include/acl_selectors.php'); require_once('include/bbcode.php'); require_once('include/security.php'); require_once('include/redir.php'); - +require_once('include/tags.php'); function photos_init(&$a) { @@ -559,6 +559,7 @@ function photos_post(&$a) { intval($item_id), intval($page_owner_uid) ); + create_tags_from_item($item_id); $best = 0; foreach($p as $scales) { From b9afb38f4d73c7a2c0e3c375a7a207fd6f6bfba7 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 13 Jan 2013 15:11:06 +0100 Subject: [PATCH 07/32] Some more function calls to ensure that the tags are deleted when an item is deleted --- mod/photos.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/mod/photos.php b/mod/photos.php index 118149227..37aab7c1f 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -228,6 +228,7 @@ function photos_post(&$a) { dbesc($rr['parent-uri']), intval($page_owner_uid) ); + create_tags_from_itemuri($rr['parent-uri'], $page_owner_uid); $drop_id = intval($rr['id']); @@ -275,6 +276,7 @@ function photos_post(&$a) { dbesc($i[0]['uri']), intval($page_owner_uid) ); + create_tags_from_itemuri($i[0]['uri'], $page_owner_uid); $url = $a->get_baseurl(); $drop_id = intval($i[0]['id']); @@ -335,7 +337,7 @@ function photos_post(&$a) { $ph->scaleImage(640); $width = $ph->getWidth(); $height = $ph->getHeight(); - + $x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 1 limit 1", dbesc($ph->imageString()), intval($height), @@ -357,7 +359,7 @@ function photos_post(&$a) { dbesc($resource_id), intval($page_owner_uid) ); - } + } } } } @@ -835,8 +837,8 @@ function photos_post(&$a) { intval($item_id) ); } - - if($visible) + + if($visible) proc_run('php', "include/notifier.php", 'wall-new', $item_id); call_hooks('photo_post_end',intval($item_id)); @@ -1341,7 +1343,7 @@ function photos_content(&$a) { intval($a->pager['itemspage']) ); - + if((local_user()) && (local_user() == $link_item['uid'])) { q("UPDATE `item` SET `unseen` = 0 WHERE `parent` = %d and `uid` = %d", intval($link_item['parent']), From 5501dd0759cdec41f74b4bc104fca526ecbb0eef Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 13 Jan 2013 17:13:01 +0100 Subject: [PATCH 08/32] Searching for tags has been enabled in all places. The tag detection has been improved for imports with missing line feeds. --- include/conversation.php | 23 ++++++++++++++-- include/dba.php | 2 +- include/network.php | 18 ++++++------ include/text.php | 5 ++-- mod/content.php | 59 ++++++++++++++++++++++++++++------------ mod/network.php | 56 +++++++++++++++++++++++++------------- 6 files changed, 112 insertions(+), 51 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 9420d8b74..766534273 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -523,7 +523,26 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $tags=array(); $hashtags = array(); $mentions = array(); - foreach(explode(',',$item['tag']) as $tag){ + + $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", + intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION)); + + foreach($taglist as $tag) { + + if ($tag["url"] == "") + $tag["url"] = $searchpath.strtolower($tag["term"]); + + if ($tag["type"] == TERM_HASHTAG) { + $hashtags[] = "#".$tag["term"].""; + $prefix = "#"; + } elseif ($tag["type"] == TERM_MENTION) { + $mentions[] = "@".$tag["term"].""; + $prefix = "@"; + } + $tags[] = $prefix."".$tag["term"].""; + } + + /*foreach(explode(',',$item['tag']) as $tag){ $tag = trim($tag); if ($tag!="") { $t = bbcode($tag); @@ -533,7 +552,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { elseif($t[0] == '@') $mentions[] = $t; } - } + }*/ $sp = false; $profile_link = best_link_url($item,$sp); diff --git a/include/dba.php b/include/dba.php index ad33705bf..a9f70aa40 100644 --- a/include/dba.php +++ b/include/dba.php @@ -89,7 +89,7 @@ class dba { if(x($a->config,'system') && x($a->config['system'],'db_log')) { $stamp2 = microtime(true); $duration = round($stamp2-$stamp1, 3); - if ($duration > $a->config["system"]["db_loglimit"]) { + if (($duration > $a->config["system"]["db_loglimit"])) { $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); @file_put_contents($a->config["system"]["db_log"], $duration."\t". basename($backtrace[1]["file"])."\t". diff --git a/include/network.php b/include/network.php index f6e6cc2a3..1ecee598c 100644 --- a/include/network.php +++ b/include/network.php @@ -918,7 +918,7 @@ function fix_contact_ssl_policy(&$contact,$new_policy) { * Return: The parsed XML in an array form. Use print_r() to see the resulting array structure. * Examples: $array = xml2array(file_get_contents('feed.xml')); * $array = xml2array(file_get_contents('feed.xml', true, 1, 'attribute')); - */ + */ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = 'attribute') { if(!$contents) return array(); @@ -976,7 +976,7 @@ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = $result = array(); $attributes_data = array(); - + if(isset($value)) { if($priority == 'tag') $result = $value; else $result['value'] = $value; // Put the value in a assoc array if we are in the 'Attribute' mode @@ -992,7 +992,7 @@ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = // See tag status and do the needed. if($namespaces && strpos($tag,':')) { - $namespc = substr($tag,0,strrpos($tag,':')); + $namespc = substr($tag,0,strrpos($tag,':')); $tag = strtolower(substr($tag,strlen($namespc)+1)); $result['@namespace'] = $namespc; } @@ -1015,7 +1015,7 @@ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = } else { // This section will make the value an array if multiple tags with the same name appear together $current[$tag] = array($current[$tag],$result); // This will combine the existing item and the new item together to make an array $repeated_tag_index[$tag.'_'.$level] = 2; - + if(isset($current[$tag.'_attr'])) { // The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); @@ -1038,7 +1038,7 @@ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = // ...push the new element into that array. $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; - + if($priority == 'tag' and $get_attributes and $attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } @@ -1049,11 +1049,11 @@ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $get_attributes) { if(isset($current[$tag.'_attr'])) { // The attribute of the last(0th) tag must be moved as well - + $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } - + if($attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } @@ -1066,6 +1066,6 @@ function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = $current = &$parent[$level-1]; } } - + return($xml_array); -} +} diff --git a/include/text.php b/include/text.php index 1d74d9cf5..5b64ef2f9 100644 --- a/include/text.php +++ b/include/text.php @@ -562,11 +562,12 @@ function get_tags($s) { $ret = array(); // ignore anything in a code block - $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s); - // ignore anything in a bbtag + // Force line feeds at bbtags + $s = str_replace(array("[", "]"), array("\n[", "]\n"), $s); + // ignore anything in a bbtag $s = preg_replace('/\[(.*?)\]/sm','',$s); // Match full names against @tags including the space between first and last diff --git a/mod/content.php b/mod/content.php index 318c37233..06f5d58b2 100644 --- a/mod/content.php +++ b/mod/content.php @@ -160,16 +160,26 @@ function content_content(&$a, $update = 0) { $sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` "); $sql_extra3 = (($nouveau) ? '' : $sql_extra3); + $sql_table = "`item`"; if(x($_GET,'search')) { $search = escape_tags($_GET['search']); - if (get_config('system','use_fulltext_engine')) { + + if(strpos($search,'#') === 0) { + $tag = true; + $search = substr($search,1); + } + + if (get_config('system','only_tag_search')) + $tag = true; + + /*if (get_config('system','use_fulltext_engine')) { if(strpos($search,'#') === 0) - $sql_extra .= sprintf(" AND (MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode)) ", + $sql_extra .= sprintf(" AND (MATCH(tag) AGAINST ('%s' in boolean mode)) ", dbesc(protect_sprintf($search)) ); else - $sql_extra .= sprintf(" AND (MATCH(`item`.`body`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode)) ", + $sql_extra .= sprintf(" AND (MATCH(`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode)) ", dbesc(protect_sprintf($search)), dbesc(protect_sprintf($search)) ); @@ -178,7 +188,19 @@ function content_content(&$a, $update = 0) { dbesc(protect_sprintf('%' . $search . '%')), dbesc(protect_sprintf('%]' . $search . '[%')) ); + }*/ + + if($tag) { + $sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d ", + dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); + $sql_table = "`term` LEFT JOIN `item` ON `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` "; + } else { + if (get_config('system','use_fulltext_engine')) + $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search))); + else + $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); } + } if(strlen($file)) { $sql_extra .= file_tag_file_query('item',unxmlify($file)); @@ -189,38 +211,39 @@ function content_content(&$a, $update = 0) { $myurl = substr($myurl,strpos($myurl,'://')+3); $myurl = str_replace('www.','',$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - if (get_config('system','use_fulltext_engine')) - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ", + /*if (get_config('system','use_fulltext_engine')) + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from $sql_table where (MATCH(`author-link`, `tag`) AGAINST ('%s' in boolean mode) or MATCH(tag) AGAINST ('%s' in boolean mode))) ", dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($diasp_url)) ); else - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ", + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from $sql_table where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ", dbesc(protect_sprintf('%' . $myurl)), dbesc(protect_sprintf('%' . $myurl . ']%')), dbesc(protect_sprintf('%' . $diasp_url . ']%')) - ); + );*/ + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", + dbesc(protect_sprintf($myurl)), + dbesc(protect_sprintf($myurl)) + ); } $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); - - if($nouveau) { // "New Item View" - show all items unthreaded in reverse created date order - $items = q("SELECT `item`.*, `item`.`id` AS `item_id`, + $items = q("SELECT `item`.*, `item`.`id` AS `item_id`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, `contact` - WHERE `item`.`uid` = %d AND `item`.`visible` = 1 + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 $simple_update - AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra $sql_nets ORDER BY `item`.`received` DESC $pager_sql ", @@ -241,7 +264,7 @@ function content_content(&$a, $update = 0) { $start = dba_timer(); $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` = `item`.`id` @@ -268,9 +291,9 @@ function content_content(&$a, $update = 0) { `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`, `contact`.`writable`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, `contact` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND `item`.`moderated` = 0 AND `contact`.`id` = `item`.`contact-id` + AND `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` IN ( %s ) $sql_extra ", @@ -287,7 +310,7 @@ function content_content(&$a, $update = 0) { } } - + logger('parent dba_timer: ' . sprintf('%01.4f',$first - $start)); logger('child dba_timer: ' . sprintf('%01.4f',$second - $first)); @@ -298,7 +321,7 @@ function content_content(&$a, $update = 0) { $o = render_content($a,$items,$mode,false); - + header('Content-type: application/json'); echo json_encode($o); killme(); diff --git a/mod/network.php b/mod/network.php index 4a8b54762..872c34da9 100644 --- a/mod/network.php +++ b/mod/network.php @@ -6,7 +6,7 @@ function network_init(&$a) { notice( t('Permission denied.') . EOL); return; } - + $is_a_date_query = false; if($a->argc > 1) { @@ -17,12 +17,12 @@ function network_init(&$a) { } } } - + // convert query string to array and remove first element (which is friendica args) $query_array = array(); parse_str($a->query_string, $query_array); array_shift($query_array); - + // fetch last used network view and redirect if needed if(! $is_a_date_query) { $sel_tabs = network_query_get_sel_tab($a); @@ -141,11 +141,11 @@ function network_init(&$a) { if(x($_GET['nets']) && $_GET['nets'] === 'all') unset($_GET['nets']); - + $group_id = (($a->argc > 1 && is_numeric($a->argv[1])) ? intval($a->argv[1]) : 0); set_pconfig(local_user(), 'network.view', 'group.selected', $group_id); - + require_once('include/group.php'); require_once('include/contact_widgets.php'); require_once('include/items.php'); @@ -500,7 +500,7 @@ function network_content(&$a, $update = 0) { - + $contact_id = $a->cid; @@ -645,16 +645,26 @@ function network_content(&$a, $update = 0) { $sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` "); $sql_extra3 = (($nouveau) ? '' : $sql_extra3); + $sql_table = "`item`"; if(x($_GET,'search')) { $search = escape_tags($_GET['search']); - if (get_config('system','use_fulltext_engine')) { + + if(strpos($search,'#') === 0) { + $tag = true; + $search = substr($search,1); + } + + if (get_config('system','only_tag_search')) + $tag = true; + + /*if (get_config('system','use_fulltext_engine')) { if(strpos($search,'#') === 0) $sql_extra .= sprintf(" AND (MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode)) ", dbesc(protect_sprintf($search)) ); else - $sql_extra .= sprintf(" AND (MATCH(`item`.`body`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode)) ", + $sql_extra .= sprintf(" AND (MATCH(`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode)) ", dbesc(protect_sprintf($search)), dbesc(protect_sprintf($search)) ); @@ -663,6 +673,17 @@ function network_content(&$a, $update = 0) { dbesc(protect_sprintf('%' . $search . '%')), dbesc(protect_sprintf('%]' . $search . '[%')) ); + }*/ + + if($tag) { + $sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d ", + dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); + $sql_table = "`term` LEFT JOIN `item` ON `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` "; + } else { + if (get_config('system','use_fulltext_engine')) + $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search))); + else + $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); } } if(strlen($file)) { @@ -689,9 +710,7 @@ function network_content(&$a, $update = 0) { dbesc(protect_sprintf('%' . $diasp_url . ']%')) );*/ - //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", - //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `mention`)", - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s'))", + $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", dbesc(protect_sprintf($myurl)), dbesc(protect_sprintf($myurl)) ); @@ -706,7 +725,7 @@ function network_content(&$a, $update = 0) { else { if( (! get_config('alt_pager', 'global')) && (! get_pconfig(local_user(),'system','alt_pager')) ) { $r = q("SELECT COUNT(*) AS `total` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra2 $sql_extra3 @@ -737,11 +756,10 @@ function network_content(&$a, $update = 0) { `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, `contact` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 $simple_update - AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra $sql_nets ORDER BY `item`.`received` DESC $pager_sql ", @@ -764,7 +782,7 @@ function network_content(&$a, $update = 0) { if($update) { $r = q("SELECT `parent` AS `item_id`, `contact`.`uid` AS `contact_uid` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND (`item`.`deleted` = 0 OR item.verb = '" . ACTIVITY_LIKE ."' OR item.verb = '" . ACTIVITY_DISLIKE . "') and `item`.`moderated` = 0 and `item`.`unseen` = 1 @@ -775,7 +793,7 @@ function network_content(&$a, $update = 0) { } else { $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` = `item`.`id` @@ -800,9 +818,9 @@ function network_content(&$a, $update = 0) { `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`, `contact`.`writable`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` - FROM `item`, `contact` + FROM $sql_table LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND `item`.`moderated` = 0 AND `contact`.`id` = `item`.`contact-id` + AND `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` IN ( %s ) $sql_extra ", @@ -824,7 +842,7 @@ function network_content(&$a, $update = 0) { // We aren't going to try and figure out at the item, group, and page // level which items you've seen and which you haven't. If you're looking // at the top level network page just mark everything seen. - + // The $update_unseen is a bit unreliable if you have stuff coming into your stream from a new contact - // and other feeds that bring in stuff from the past. One can't find it all. From 452ff19d7335906bdc7f2a921e77e3656ed11be9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 13 Jan 2013 18:51:48 +0100 Subject: [PATCH 09/32] Redirects sometimes only seems to send the hostname and no path. "fetch_url" respects this. --- include/network.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/include/network.php b/include/network.php index 1ecee598c..df23c2549 100644 --- a/include/network.php +++ b/include/network.php @@ -76,9 +76,17 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ } if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { - $matches = array(); - preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); - $newurl = trim(array_pop($matches)); + $new_location_info = @parse_url($curl_info["redirect_url"]); + $old_location_info = @parse_url($curl_info["url"]); + + $newurl = $curl_info["redirect_url"]; + + if (($new_location_info["path"] == "") AND ($new_location_info["host"] != "")) + $newurl = $new_location_info["scheme"]."://".$new_location_info["host"].$old_location_info["path"]; + + //$matches = array(); + //preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); + //$newurl = trim(array_pop($matches)); if(strpos($newurl,'/') === 0) $newurl = $url . $newurl; $url_parsed = @parse_url($newurl); From 82c00660e099070cf4dee8de82c2023d1232ef8d Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 17 Jan 2013 23:20:40 +0100 Subject: [PATCH 10/32] Preloading of items in the cache when receiving them. --- include/conversation.php | 2 +- include/items.php | 21 +++++++++++++++------ include/tags.php | 10 +++++++++- include/text.php | 4 +++- mod/item.php | 9 +++++++++ object/Item.php | 2 +- 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 766534273..7c4e606a7 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -524,7 +524,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $hashtags = array(); $mentions = array(); - $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", + $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`", intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION)); foreach($taglist as $tag) { diff --git a/include/items.php b/include/items.php index b93f56e17..377912684 100755 --- a/include/items.php +++ b/include/items.php @@ -6,6 +6,7 @@ require_once('include/salmon.php'); require_once('include/crypto.php'); require_once('include/Photo.php'); require_once('include/tags.php'); +require_once('include/text.php'); function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) { @@ -238,7 +239,7 @@ function construct_activity_object($item) { $r->link = str_replace('&','&', $r->link); $r->link = preg_replace('/\/','',$r->link); $o .= $r->link; - } + } else $o .= '' . "\r\n"; } @@ -270,7 +271,7 @@ function construct_activity_target($item) { $r->link = str_replace('&','&', $r->link); $r->link = preg_replace('/\/','',$r->link); $o .= $r->link; - } + } else $o .= '' . "\r\n"; } @@ -882,7 +883,7 @@ function item_store($arr,$force_parent = false) { $arr['gravity'] = 0; elseif(activity_match($arr['verb'],ACTIVITY_POST)) $arr['gravity'] = 6; - else + else $arr['gravity'] = 6; // extensible catchall if(! x($arr,'type')) @@ -1072,10 +1073,9 @@ function item_store($arr,$force_parent = false) { if(count($r)) { $current_post = $r[0]['id']; - create_tags_from_item($r[0]['id']); logger('item_store: created item ' . $current_post); - } - else { + create_tags_from_item($r[0]['id']); + } else { logger('item_store: could not locate created item'); return 0; } @@ -1153,6 +1153,15 @@ function item_store($arr,$force_parent = false) { tag_deliver($arr['uid'],$current_post); + // Store the fresh generated item into the cache + $cachefile = get_cachefile($arr["guid"]."-".hash("md5", $arr['body'])); + + if (($cachefile != '') AND !file_exists($cachefile)) { + $s = prepare_text($arr['body']); + file_put_contents($cachefile, $s); + logger('item_store: put item '.$current_post.' into cachefile '.$cachefile); + } + return $current_post; } diff --git a/include/tags.php b/include/tags.php index 6a5728a9b..b02adc3d8 100644 --- a/include/tags.php +++ b/include/tags.php @@ -25,7 +25,7 @@ function create_tags_from_item($itemid) { $searchpath = $a->get_baseurl()."/search?tag="; - $messages = q("SELECT `uri`, `uid`, `id`, `created`, `edited`, `commented`, `received`, `changed`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); + $messages = q("SELECT `guid`, `uid`, `id`, `edited`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); if (!$messages) return; @@ -42,6 +42,14 @@ function create_tags_from_item($itemid) { if ($message["deleted"]) return; + $cachefile = get_cachefile($message["guid"]."-".hash("md5", $message['body'])); + + if (($cachefile != '') AND !file_exists($cachefile)) { + $s = prepare_text($message['body']); + file_put_contents($cachefile, $s); + logger('create_tags_from_item: put item '.$message["id"].' into cachefile '.$cachefile); + } + $taglist = explode(",", $message["tag"]); $tags = ""; diff --git a/include/text.php b/include/text.php index 5b64ef2f9..54c9f39fa 100644 --- a/include/text.php +++ b/include/text.php @@ -1019,7 +1019,8 @@ function prepare_body($item,$attach = false) { $a = get_app(); call_hooks('prepare_body_init', $item); - $cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body'])); + //$cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body'])); + $cachefile = get_cachefile($item["guid"]."-".hash("md5", $item['body'])); if (($cachefile != '')) { if (file_exists($cachefile)) @@ -1027,6 +1028,7 @@ function prepare_body($item,$attach = false) { else { $s = prepare_text($item['body']); file_put_contents($cachefile, $s); + logger('prepare_body: put item '.$item["id"].' into cachefile '.$cachefile); } } else $s = prepare_text($item['body']); diff --git a/mod/item.php b/mod/item.php index 7096239b0..452ec8a36 100644 --- a/mod/item.php +++ b/mod/item.php @@ -757,6 +757,15 @@ function item_post(&$a) { // update filetags in pconfig file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); + // Store the fresh generated item into the cache + $cachefile = get_cachefile($datarray["guid"]."-".hash("md5", $datarray['body'])); + + if (($cachefile != '') AND !file_exists($cachefile)) { + $s = prepare_text($datarray['body']); + file_put_contents($cachefile, $s); + logger('mod_item: put item '.$r[0]['id'].' into cachefile '.$cachefile); + } + if($parent) { // This item is the last leaf and gets the comment box, clear any ancestors diff --git a/object/Item.php b/object/Item.php index 648b55807..de28da464 100644 --- a/object/Item.php +++ b/object/Item.php @@ -150,7 +150,7 @@ class Item extends BaseObject { $hashtags = array(); $mentions = array(); - $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)", + $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`", intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION)); foreach($taglist as $tag) { From 7ab335c9d620779c929d80cac3d083f183dba391 Mon Sep 17 00:00:00 2001 From: "Michael - piratica.eu" Date: Sun, 20 Jan 2013 14:08:28 +0100 Subject: [PATCH 11/32] Diaspora: Auto-adding users as friend who already sharing with us --- include/Scrape.php | 12 ++++++------ include/diaspora.php | 18 ++++++++++++++++-- include/follow.php | 6 +++--- include/network.php | 1 + include/poller.php | 12 ++++++------ view/theme/vier/profile_vcard.tpl | 2 +- 6 files changed, 33 insertions(+), 18 deletions(-) diff --git a/include/Scrape.php b/include/Scrape.php index 611cbda88..7b72a199d 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -346,7 +346,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { $network = null; $diaspora = false; $diaspora_base = ''; - $diaspora_guid = ''; + $diaspora_guid = ''; $diaspora_key = ''; $has_lrdd = false; $email_conversant = false; @@ -485,7 +485,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { } } } - } + } if($mode == PROBE_NORMAL) { if(strlen($zot)) { @@ -531,7 +531,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { } if(strpos($url,'@')) $addr = str_replace('acct:', '', $url); - } + } if($network !== NETWORK_ZOT && $network !== NETWORK_DFRN && $network !== NETWORK_MAIL) { if($diaspora) @@ -544,13 +544,13 @@ function probe_url($url, $mode = PROBE_NORMAL) { $vcard = scrape_vcard($hcard); // Google doesn't use absolute url in profile photos - + if((x($vcard,'photo')) && substr($vcard['photo'],0,1) == '/') { $h = @parse_url($hcard); if($h) $vcard['photo'] = $h['scheme'] . '://' . $h['host'] . $vcard['photo']; } - + logger('probe_url: scrape_vcard: ' . print_r($vcard,true), LOGGER_DATA); } @@ -561,7 +561,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { $vcard['nick'] = $addr_parts[0]; } - if($twitter) { + if($twitter) { logger('twitter: setup'); $tid = basename($url); $tapi = 'https://api.twitter.com/1/statuses/user_timeline.rss'; diff --git a/include/diaspora.php b/include/diaspora.php index 3b681e991..8e77f0333 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -557,7 +557,7 @@ function diaspora_decode($importer,$xml) { } - + function diaspora_request($importer,$xml) { $a = get_app(); @@ -567,7 +567,7 @@ function diaspora_request($importer,$xml) { if(! $sender_handle || ! $recipient_handle) return; - + $contact = diaspora_get_contact_by_handle($importer['uid'],$sender_handle); if($contact) { @@ -752,6 +752,20 @@ function diaspora_request($importer,$xml) { } function diaspora_post_allow($importer,$contact) { + + // perhaps we were already sharing with this person. Now they're sharing with us. + // That makes us friends. + // Normally this should have handled by getting a request - but this could get lost + if($contact['rel'] == CONTACT_IS_FOLLOWER && $importer['page-flags'] != PAGE_COMMUNITY) { + q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval(CONTACT_IS_FRIEND), + intval($contact['id']), + intval($importer['uid']) + ); + $contact['rel'] = CONTACT_IS_FRIEND; + logger('diaspora_post_allow: defining user '.$contact["nick"].' as friend'); + } + if(($contact['blocked']) || ($contact['readonly']) || ($contact['archive'])) return false; if($contact['rel'] == CONTACT_IS_SHARING || $contact['rel'] == CONTACT_IS_FRIEND) diff --git a/include/follow.php b/include/follow.php index 59f3b1a5f..fc167bb82 100644 --- a/include/follow.php +++ b/include/follow.php @@ -48,9 +48,9 @@ function new_contact($uid,$url,$interactive = false) { $myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']); else $myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname()); - + goaway($ret['request'] . "&addr=$myaddr"); - + // NOTREACHED } } @@ -61,7 +61,7 @@ function new_contact($uid,$url,$interactive = false) { return $result; } } - + diff --git a/include/network.php b/include/network.php index df23c2549..1de65c42c 100644 --- a/include/network.php +++ b/include/network.php @@ -367,6 +367,7 @@ function lrdd($uri, $debug = false) { logger('lrdd: constructed url: ' . $url); $xml = fetch_url($url); + $headers = $a->get_curl_headers(); if (! $xml) diff --git a/include/poller.php b/include/poller.php index 7df59f727..cc5f2a983 100644 --- a/include/poller.php +++ b/include/poller.php @@ -9,7 +9,7 @@ function poller_run(&$argv, &$argc){ if(is_null($a)) { $a = new App; } - + if(is_null($db)) { @include(".htconfig.php"); require_once("include/dba.php"); @@ -57,17 +57,17 @@ function poller_run(&$argv, &$argc){ load_hooks(); logger('poller: start'); - + // run queue delivery process in the background proc_run('php',"include/queue.php"); - + // expire any expired accounts q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0 AND `account_expires_on` != '0000-00-00 00:00:00' AND `account_expires_on` < UTC_TIMESTAMP() "); - + // delete user and contact records for recently removed accounts $r = q("SELECT * FROM `user` WHERE `account_removed` = 1 AND `account_expires_on` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); @@ -77,12 +77,12 @@ function poller_run(&$argv, &$argc){ q("DELETE FROM `user` WHERE `uid` = %d", intval($user['uid'])); } } - + $abandon_days = intval(get_config('system','account_abandon_days')); if($abandon_days < 1) $abandon_days = 0; - + // once daily run birthday_updates and then expire in background diff --git a/view/theme/vier/profile_vcard.tpl b/view/theme/vier/profile_vcard.tpl index 4537fd072..aa716f100 100644 --- a/view/theme/vier/profile_vcard.tpl +++ b/view/theme/vier/profile_vcard.tpl @@ -18,7 +18,7 @@ {{ else }} - +
{{ endif }} From 2c93067682cf193fa4b155928ba6ccaf824498f2 Mon Sep 17 00:00:00 2001 From: "Michael - piratica.eu" Date: Sat, 26 Jan 2013 16:46:43 +0100 Subject: [PATCH 12/32] Performance: Adding several variables for performance measuring. --- boot.php | 10 ++++++++-- include/dba.php | 10 ++++++---- include/network.php | 31 +++++++++++++++++++++++-------- include/text.php | 41 ++++++++++++++++++++++++----------------- 4 files changed, 61 insertions(+), 31 deletions(-) diff --git a/boot.php b/boot.php index cd7fa03b5..b851068f4 100644 --- a/boot.php +++ b/boot.php @@ -355,7 +355,8 @@ if(! class_exists('App')) { public $identities; public $is_mobile; public $is_tablet; - + public $performance = array(); + public $nav_sel; public $category; @@ -403,7 +404,7 @@ if(! class_exists('App')) { private $cached_profile_image; private $cached_profile_picdate; - + function __construct() { global $default_timezone, $argv, $argc; @@ -412,6 +413,11 @@ if(! class_exists('App')) { date_default_timezone_set($this->timezone); + $this->performance["start"] = microtime(true); + $this->performance["database"] = 0; + $this->performance["network"] = 0; + $this->performance["rendering"] = 0; + $this->config = array(); $this->page = array(); $this->pager= array(); diff --git a/include/dba.php b/include/dba.php index a9f70aa40..dd7f56bfd 100644 --- a/include/dba.php +++ b/include/dba.php @@ -78,18 +78,20 @@ class dba { $this->error = ''; - if(x($a->config,'system') && x($a->config['system'],'db_log')) - $stamp1 = microtime(true); + $stamp1 = microtime(true); if($this->mysqli) $result = @$this->db->query($sql); else $result = @mysql_query($sql,$this->db); + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $a->performance["database"] += (float)$duration; + if(x($a->config,'system') && x($a->config['system'],'db_log')) { - $stamp2 = microtime(true); - $duration = round($stamp2-$stamp1, 3); if (($duration > $a->config["system"]["db_loglimit"])) { + $duration = round($duration, 3); $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); @file_put_contents($a->config["system"]["db_log"], $duration."\t". basename($backtrace[1]["file"])."\t". diff --git a/include/network.php b/include/network.php index 1de65c42c..10590f8bf 100644 --- a/include/network.php +++ b/include/network.php @@ -7,10 +7,12 @@ if(! function_exists('fetch_url')) { function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_content=Null) { + $stamp1 = microtime(true); + $a = get_app(); $ch = @curl_init($url); - if(($redirects > 8) || (! $ch)) + if(($redirects > 8) || (! $ch)) return false; @curl_setopt($ch, CURLOPT_HEADER, true); @@ -101,6 +103,11 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ $body = substr($s,strlen($header)); $a->set_curl_headers($header); @curl_close($ch); + + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $a->performance["network"] += (float)$duration; + return($body); }} @@ -108,6 +115,9 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ if(! function_exists('post_url')) { function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) { + + $stamp1 = microtime(true); + $a = get_app(); $ch = curl_init($url); if(($redirects > 8) || (! $ch)) @@ -190,6 +200,11 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) $a->set_curl_headers($header); curl_close($ch); + + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $a->performance["network"] += (float)$duration; + return($body); }} @@ -299,9 +314,9 @@ function webfinger_dfrn($s,&$hcard) { if($link['@attributes']['rel'] === NAMESPACE_DFRN) $profile_link = $link['@attributes']['href']; if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) - $profile_link = 'stat:' . $link['@attributes']['template']; + $profile_link = 'stat:' . $link['@attributes']['template']; if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard') - $hcard = $link['@attributes']['href']; + $hcard = $link['@attributes']['href']; } } return $profile_link; @@ -417,7 +432,7 @@ function lrdd($uri, $debug = false) { elseif(x($link['@attributes'],'href')) $href = $link['@attributes']['href']; } - } + } } if((! isset($tpl)) || (! strpos($tpl,'{uri}'))) @@ -436,7 +451,7 @@ function lrdd($uri, $debug = false) { $lines = explode("\n",$headers); if(count($lines)) { - foreach($lines as $line) { + foreach($lines as $line) { if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) { return(fetch_xrd_links($matches[1])); break; @@ -482,7 +497,7 @@ function lrdd($uri, $debug = false) { $lines = explode("\n",$headers); if(count($lines)) { - foreach($lines as $line) { + foreach($lines as $line) { // TODO alter the following regex to support multiple relations (space separated) if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) { $pagelink = $matches[1]; @@ -598,14 +613,14 @@ function fetch_xrd_links($url) { if(! function_exists('validate_url')) { function validate_url(&$url) { - + // no naked subdomains (allow localhost for tests) if(strpos($url,'.') === false && strpos($url,'/localhost/') === false) return false; if(substr($url,0,4) != 'http') $url = 'http://' . $url; $h = @parse_url($url); - + if(($h) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR) || filter_var($h['host'], FILTER_VALIDATE_IP) )) { return true; } diff --git a/include/text.php b/include/text.php index 53dd06d1f..8f0b07bc9 100644 --- a/include/text.php +++ b/include/text.php @@ -6,16 +6,17 @@ // returns substituted string. // WARNING: this is pretty basic, and doesn't properly handle search strings that are substrings of each other. // For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing, -// depending on the order in which they were declared in the array. +// depending on the order in which they were declared in the array. require_once("include/template_processor.php"); require_once("include/friendica_smarty.php"); -if(! function_exists('replace_macros')) { +if(! function_exists('replace_macros')) { function replace_macros($s,$r) { global $t; -// $ts = microtime(); + $stamp1 = microtime(true); + $a = get_app(); if($a->theme['template_engine'] === 'smarty3') { @@ -34,12 +35,14 @@ function replace_macros($s,$r) { } else { $r = $t->replace($s,$r); - + $output = template_unescape($r); } -// $tt = microtime() - $ts; -// $a = get_app(); -// $a->page['debug'] .= "$tt
\n"; + $a = get_app(); + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $a->performance["rendering"] += (float)$duration; + return $output; }} @@ -427,12 +430,12 @@ function load_view_file($s) { $d = dirname($s); if(file_exists("$d/$lang/$b")) return file_get_contents("$d/$lang/$b"); - + $theme = current_theme(); if(file_exists("$d/theme/$theme/$b")) return file_get_contents("$d/theme/$theme/$b"); - + return file_get_contents($s); }} @@ -458,7 +461,8 @@ function get_intltext_template($s) { if(! function_exists('get_markup_template')) { function get_markup_template($s, $root = '') { -// $ts = microtime(); + $stamp1 = microtime(true); + $a = get_app(); if($a->theme['template_engine'] === 'smarty3') { @@ -467,18 +471,21 @@ function get_markup_template($s, $root = '') { $template = new FriendicaSmarty(); $template->filename = $template_file; -// $tt = microtime() - $ts; -// $a->page['debug'] .= "$tt
\n"; + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $a->performance["rendering"] += (float)$duration; + return $template; } else { $template_file = get_template_file($a, $s, $root); -// $file_contents = file_get_contents($template_file); -// $tt = microtime() - $ts; -// $a->page['debug'] .= "$tt
\n"; -// return $file_contents; + + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $a->performance["rendering"] += (float)$duration; + return file_get_contents($template_file); - } + } }} if(! function_exists("get_template_file")) { From fdee002f73bce767c364b58daafeccc8eff5927e Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 26 Jan 2013 18:35:39 +0100 Subject: [PATCH 13/32] Several improvements for performance measuring --- boot.php | 7 +++++ include/bbcode.php | 4 +++ include/dba.php | 7 ++++- include/items.php | 2 ++ include/network.php | 13 ++++----- include/plugin.php | 17 +++++++---- include/tags.php | 2 ++ include/text.php | 69 ++++++++++++++++++++++++++++++--------------- mod/item.php | 2 ++ 9 files changed, 87 insertions(+), 36 deletions(-) diff --git a/boot.php b/boot.php index b851068f4..b0e77a71f 100644 --- a/boot.php +++ b/boot.php @@ -417,6 +417,7 @@ if(! class_exists('App')) { $this->performance["database"] = 0; $this->performance["network"] = 0; $this->performance["rendering"] = 0; + $this->performance["parser"] = 0; $this->config = array(); $this->page = array(); @@ -725,6 +726,12 @@ if(! class_exists('App')) { return $this->rdelim[$engine]; } + function save_timestamp($stamp1, $value) { + $stamp2 = microtime(true); + $duration = (float)($stamp2-$stamp1); + $this->performance[$value] += (float)$duration; + } + } } diff --git a/include/bbcode.php b/include/bbcode.php index 613c2b7db..45213cc3b 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -283,6 +283,8 @@ function bb_ShareAttributes($match) { function bbcode($Text,$preserve_nl = false, $tryoembed = true) { + $stamp1 = microtime(true); + $a = get_app(); // Hide all [noparse] contained bbtags by spacefying them @@ -637,6 +639,8 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) { call_hooks('bbcode',$Text); + $a->save_timestamp($stamp1, "parser"); + return $Text; } diff --git a/include/dba.php b/include/dba.php index dd7f56bfd..50354b7f4 100644 --- a/include/dba.php +++ b/include/dba.php @@ -23,6 +23,9 @@ class dba { public $error = false; function __construct($server,$user,$pass,$db,$install = false) { + global $a; + + $stamp1 = microtime(true); $server = trim($server); $user = trim($user); @@ -64,6 +67,8 @@ class dba { if(! $install) system_unavailable(); } + + $a->save_timestamp($stamp1, "network"); } public function getdb() { @@ -87,7 +92,6 @@ class dba { $stamp2 = microtime(true); $duration = (float)($stamp2-$stamp1); - $a->performance["database"] += (float)$duration; if(x($a->config,'system') && x($a->config['system'],'db_log')) { if (($duration > $a->config["system"]["db_loglimit"])) { @@ -164,6 +168,7 @@ class dba { } } + $a->save_timestamp($stamp1, "database"); if($this->debug) logger('dba: ' . printable(print_r($r, true))); diff --git a/include/items.php b/include/items.php index 54b392b38..1a50ac204 100755 --- a/include/items.php +++ b/include/items.php @@ -1159,7 +1159,9 @@ function item_store($arr,$force_parent = false) { if (($cachefile != '') AND !file_exists($cachefile)) { $s = prepare_text($arr['body']); + $stamp1 = microtime(true); file_put_contents($cachefile, $s); + $a->save_timestamp($stamp1, "file"); logger('item_store: put item '.$current_post.' into cachefile '.$cachefile); } diff --git a/include/network.php b/include/network.php index 10590f8bf..400c1386b 100644 --- a/include/network.php +++ b/include/network.php @@ -104,9 +104,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_ $a->set_curl_headers($header); @curl_close($ch); - $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); - $a->performance["network"] += (float)$duration; + $a->save_timestamp($stamp1, "network"); return($body); }} @@ -201,9 +199,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) curl_close($ch); - $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); - $a->performance["network"] += (float)$duration; + $a->save_timestamp($stamp1, "network"); return($body); }} @@ -851,8 +847,11 @@ function scale_external_images($s, $include_link = true, $scale_replace = false) $i = fetch_url($scaled); $cachefile = get_cachefile(hash("md5", $scaled)); - if ($cachefile != '') + if ($cachefile != '') { + $stamp1 = microtime(true); file_put_contents($cachefile, $i); + $a->save_timestamp($stamp1, "file"); + } // guess mimetype from headers or filename $type = guess_image_type($mtch[1],true); diff --git a/include/plugin.php b/include/plugin.php index db3224f29..a6928793d 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -201,12 +201,15 @@ function get_plugin_info($plugin){ 'author' => array(), 'version' => "" ); - + if (!is_file("addon/$plugin/$plugin.php")) return $info; - + + $stamp1 = microtime(true); $f = file_get_contents("addon/$plugin/$plugin.php"); + $a->save_timestamp($stamp1, "file"); + $r = preg_match("|/\*.*\*/|msU", $f, $m); - + if ($r){ $ll = explode("\n", $m[0]); foreach( $ll as $l ) { @@ -266,11 +269,13 @@ function get_theme_info($theme){ $info['unsupported'] = true; if (!is_file("view/theme/$theme/theme.php")) return $info; - + + $stamp1 = microtime(true); $f = file_get_contents("view/theme/$theme/theme.php"); + $a->save_timestamp($stamp1, "file"); + $r = preg_match("|/\*.*\*/|msU", $f, $m); - - + if ($r){ $ll = explode("\n", $m[0]); foreach( $ll as $l ) { diff --git a/include/tags.php b/include/tags.php index b02adc3d8..c81a752d5 100644 --- a/include/tags.php +++ b/include/tags.php @@ -46,7 +46,9 @@ function create_tags_from_item($itemid) { if (($cachefile != '') AND !file_exists($cachefile)) { $s = prepare_text($message['body']); + $stamp1 = microtime(true); file_put_contents($cachefile, $s); + $a->save_timestamp($stamp1, "file"); logger('create_tags_from_item: put item '.$message["id"].' into cachefile '.$cachefile); } diff --git a/include/text.php b/include/text.php index 8f0b07bc9..83639ce85 100644 --- a/include/text.php +++ b/include/text.php @@ -428,15 +428,26 @@ function load_view_file($s) { $lang = 'en'; $b = basename($s); $d = dirname($s); - if(file_exists("$d/$lang/$b")) - return file_get_contents("$d/$lang/$b"); + if(file_exists("$d/$lang/$b")) { + $stamp1 = microtime(true); + $content = file_get_contents("$d/$lang/$b"); + $a->save_timestamp($stamp1, "file"); + return $content; + } $theme = current_theme(); - if(file_exists("$d/theme/$theme/$b")) - return file_get_contents("$d/theme/$theme/$b"); + if(file_exists("$d/theme/$theme/$b")) { + $stamp1 = microtime(true); + $content = file_get_contents("$d/theme/$theme/$b"); + $a->save_timestamp($stamp1, "file"); + return $content; + } - return file_get_contents($s); + $stamp1 = microtime(true); + $content = file_get_contents($s); + $a->save_timestamp($stamp1, "file"); + return $content; }} if(! function_exists('get_intltext_template')) { @@ -451,12 +462,22 @@ function get_intltext_template($s) { if(! isset($lang)) $lang = 'en'; - if(file_exists("view/$lang$engine/$s")) - return file_get_contents("view/$lang$engine/$s"); - elseif(file_exists("view/en$engine/$s")) - return file_get_contents("view/en$engine/$s"); - else - return file_get_contents("view$engine/$s"); + if(file_exists("view/$lang$engine/$s")) { + $stamp1 = microtime(true); + $content = file_get_contents("view/$lang$engine/$s"); + $a->save_timestamp($stamp1, "file"); + return $content; + } elseif(file_exists("view/en$engine/$s")) { + $stamp1 = microtime(true); + $content = file_get_contents("view/en$engine/$s"); + $a->save_timestamp($stamp1, "file"); + return $content; + } else { + $stamp1 = microtime(true); + $content = file_get_contents("view$engine/$s"); + $a->save_timestamp($stamp1, "file"); + return $content; + } }} if(! function_exists('get_markup_template')) { @@ -470,21 +491,19 @@ function get_markup_template($s, $root = '') { $template = new FriendicaSmarty(); $template->filename = $template_file; - - $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); - $a->performance["rendering"] += (float)$duration; + $a->save_timestamp($stamp1, "rendering"); return $template; } else { $template_file = get_template_file($a, $s, $root); + $a->save_timestamp($stamp1, "rendering"); - $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); - $a->performance["rendering"] += (float)$duration; + $stamp1 = microtime(true); + $content = file_get_contents($template_file); + $a->save_timestamp($stamp1, "file"); + return $content; - return file_get_contents($template_file); } }} @@ -541,8 +560,10 @@ function logger($msg,$level = 0) { if((! $debugging) || (! $logfile) || ($level > $loglevel)) return; - + + $stamp1 = microtime(true); @file_put_contents($logfile, datetime_convert() . ':' . session_id() . ' ' . $msg . "\n", FILE_APPEND); + $a->save_timestamp($stamp1, "file"); return; }} @@ -1029,11 +1050,15 @@ function prepare_body($item,$attach = false) { $cachefile = get_cachefile($item["guid"]."-".hash("md5", $item['body'])); if (($cachefile != '')) { - if (file_exists($cachefile)) + if (file_exists($cachefile)) { + $stamp1 = microtime(true); $s = file_get_contents($cachefile); - else { + $a->save_timestamp($stamp1, "file"); + } else { $s = prepare_text($item['body']); + $stamp1 = microtime(true); file_put_contents($cachefile, $s); + $a->save_timestamp($stamp1, "file"); logger('prepare_body: put item '.$item["id"].' into cachefile '.$cachefile); } } else diff --git a/mod/item.php b/mod/item.php index 452ec8a36..926fbbf52 100644 --- a/mod/item.php +++ b/mod/item.php @@ -762,7 +762,9 @@ function item_post(&$a) { if (($cachefile != '') AND !file_exists($cachefile)) { $s = prepare_text($datarray['body']); + $stamp1 = microtime(true); file_put_contents($cachefile, $s); + $a->save_timestamp($stamp1, "file"); logger('mod_item: put item '.$r[0]['id'].' into cachefile '.$cachefile); } From 2cb576d30523088900813d491f3accf9cbbf1857 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 27 Jan 2013 13:57:44 +0100 Subject: [PATCH 14/32] Bugfixing after adding timestamps --- boot.php | 13 ++++-- include/conversation.php | 1 - include/plugin.php | 16 +++++--- include/text.php | 4 +- index.php | 2 +- mod/admin.php | 85 +++++++++++++++++++--------------------- mod/network.php | 14 +++---- object/Conversation.php | 2 + 8 files changed, 72 insertions(+), 65 deletions(-) diff --git a/boot.php b/boot.php index b0e77a71f..da8ee8efa 100644 --- a/boot.php +++ b/boot.php @@ -418,6 +418,8 @@ if(! class_exists('App')) { $this->performance["network"] = 0; $this->performance["rendering"] = 0; $this->performance["parser"] = 0; + $this->performance["marktime"] = 0; + $this->performance["markstart"] = microtime(true); $this->config = array(); $this->page = array(); @@ -726,12 +728,17 @@ if(! class_exists('App')) { return $this->rdelim[$engine]; } - function save_timestamp($stamp1, $value) { - $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); + function save_timestamp($stamp, $value) { + $duration = (float)(microtime(true)-$stamp); + $this->performance[$value] += (float)$duration; + $this->performance["marktime"] += (float)$duration; } + function mark_timestamp($mark) { + //$this->performance["markstart"] -= microtime(true) - $this->performance["marktime"]; + $this->performance["markstart"] = microtime(true) - $this->performance["markstart"] - $this->performance["marktime"]; + } } } diff --git a/include/conversation.php b/include/conversation.php index cc66d380b..306799c52 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -368,7 +368,6 @@ function visible_activity($item) { if(!function_exists('conversation')) { function conversation(&$a, $items, $mode, $update, $preview = false) { - require_once('include/bbcode.php'); $ssl_state = ((local_user()) ? true : false); diff --git a/include/plugin.php b/include/plugin.php index a6928793d..7a4a96670 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -8,7 +8,7 @@ function uninstall_plugin($plugin){ q("DELETE FROM `addon` WHERE `name` = '%s' ", dbesc($plugin) ); - + @include_once('addon/' . $plugin . '/' . $plugin . '.php'); if(function_exists($plugin . '_uninstall')) { $func = $plugin . '_uninstall'; @@ -28,9 +28,9 @@ function install_plugin($plugin) { if(function_exists($plugin . '_install')) { $func = $plugin . '_install'; $func(); - + $plugin_admin = (function_exists($plugin."_plugin_admin")?1:0); - + $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`, `plugin_admin`) VALUES ( '%s', 1, %d , %d ) ", dbesc($plugin), intval($t), @@ -195,6 +195,9 @@ function call_hooks($name, &$data = null) { if (! function_exists('get_plugin_info')){ function get_plugin_info($plugin){ + + $a = get_app(); + $info=Array( 'name' => $plugin, 'description' => "", @@ -229,10 +232,10 @@ function get_plugin_info($plugin){ $info[$k]=$v; } } - + } } - + } return $info; }} @@ -241,7 +244,7 @@ function get_plugin_info($plugin){ /* * parse theme comment in search of theme infos. * like - * + * * * Name: My Theme * * Description: My Cool Theme * * Version: 1.2.3 @@ -270,6 +273,7 @@ function get_theme_info($theme){ if (!is_file("view/theme/$theme/theme.php")) return $info; + $a = get_app(); $stamp1 = microtime(true); $f = file_get_contents("view/theme/$theme/theme.php"); $a->save_timestamp($stamp1, "file"); diff --git a/include/text.php b/include/text.php index 83639ce85..9ff5c7907 100644 --- a/include/text.php +++ b/include/text.php @@ -39,9 +39,7 @@ function replace_macros($s,$r) { $output = template_unescape($r); } $a = get_app(); - $stamp2 = microtime(true); - $duration = (float)($stamp2-$stamp1); - $a->performance["rendering"] += (float)$duration; + $a->save_timestamp($stamp1, "rendering"); return $output; }} diff --git a/index.php b/index.php index 0ea09c0c7..49e6fccb0 100644 --- a/index.php +++ b/index.php @@ -33,7 +33,7 @@ $install = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? false $lang = get_browser_language(); - + load_translation_table($lang); /** diff --git a/mod/admin.php b/mod/admin.php index 89363541c..dd9ff8451 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -20,7 +20,7 @@ function admin_post(&$a){ if(x($_SESSION,'submanage') && intval($_SESSION['submanage'])) return; - + // urls @@ -54,7 +54,7 @@ function admin_post(&$a){ } info(t('Theme settings updated.')); if(is_ajax()) return; - + goaway($a->get_baseurl(true) . '/admin/themes/' . $theme ); return; break; @@ -100,9 +100,9 @@ function admin_content(&$a) { 'dbsync' => Array($a->get_baseurl(true)."/admin/dbsync/", t('DB updates'), "dbsync"), //'update' => Array($a->get_baseurl(true)."/admin/update/", t("Software Update") , "update") ); - + /* get plugins admin page */ - + $r = q("SELECT * FROM `addon` WHERE `plugin_admin`=1"); $aside['plugins_admin']=Array(); foreach ($r as $h){ @@ -111,7 +111,7 @@ function admin_content(&$a) { // temp plugins with admin $a->plugins_admin[] = $plugin; } - + $aside['logs'] = Array($a->get_baseurl(true)."/admin/logs/", t("Logs"), "logs"); $t = get_markup_template("admin_aside.tpl"); @@ -130,7 +130,6 @@ function admin_content(&$a) { * Page content */ $o = ''; - // urls if ($a->argc > 1){ switch ($a->argv[1]){ @@ -161,7 +160,7 @@ function admin_content(&$a) { } else { $o = admin_page_summary($a); } - + if(is_ajax()) { echo $o; killme(); @@ -431,14 +430,14 @@ function admin_page_site(&$a) { } } } - - + + /* Banner */ $banner = get_config('system','banner'); if($banner == false) $banner = 'logoFriendica'; $banner = htmlspecialchars($banner); - + //echo "
"; var_dump($lang_choices); die("
"); /* Register policy */ @@ -763,7 +762,7 @@ function admin_page_users(&$a){ * @return string */ function admin_page_plugins(&$a){ - + /** * Single plugin */ @@ -773,9 +772,9 @@ function admin_page_plugins(&$a){ notice( t("Item not found.") ); return ''; } - + if (x($_GET,"a") && $_GET['a']=="t"){ - check_form_security_token_redirectOnErr('/admin/plugins', 'admin_themes', 't'); + check_form_security_token_redirectOnErr('/admin/plugins', 'admin_themes', 't'); // Toggle plugin status $idx = array_search($plugin, $a->plugins); @@ -800,52 +799,53 @@ function admin_page_plugins(&$a){ } else { $status="off"; $action= t("Enable"); } - + $readme=Null; if (is_file("addon/$plugin/README.md")){ $readme = file_get_contents("addon/$plugin/README.md"); $readme = Markdown($readme); } else if (is_file("addon/$plugin/README")){ $readme = "
". file_get_contents("addon/$plugin/README") ."
"; - } - + } + $admin_form=""; if (is_array($a->plugins_admin) && in_array($plugin, $a->plugins_admin)){ @require_once("addon/$plugin/$plugin.php"); $func = $plugin.'_plugin_admin'; $func($a, $admin_form); } - + $t = get_markup_template("admin_plugins_details.tpl"); + return replace_macros($t, array( '$title' => t('Administration'), '$page' => t('Plugins'), '$toggle' => t('Toggle'), '$settings' => t('Settings'), '$baseurl' => $a->get_baseurl(true), - + '$plugin' => $plugin, '$status' => $status, '$action' => $action, '$info' => get_plugin_info($plugin), '$str_author' => t('Author: '), - '$str_maintainer' => t('Maintainer: '), - + '$str_maintainer' => t('Maintainer: '), + '$admin_form' => $admin_form, '$function' => 'plugins', '$screenshot' => '', '$readme' => $readme, - '$form_security_token' => get_form_security_token("admin_themes"), + '$form_security_token' => get_form_security_token("admin_themes"), )); - } - - - + } + + + /** * List plugins */ - + $plugins = array(); $files = glob("addon/*/"); if($files) { @@ -857,7 +857,7 @@ function admin_page_plugins(&$a){ } } } - + $t = get_markup_template("admin_plugins.tpl"); return replace_macros($t, array( '$title' => t('Administration'), @@ -928,7 +928,7 @@ function rebuild_theme_table($themes) { return $o; } - + /** * Themes admin page * @@ -936,7 +936,7 @@ function rebuild_theme_table($themes) { * @return string */ function admin_page_themes(&$a){ - + $allowed_themes_str = get_config('system','allowed_themes'); $allowed_themes_raw = explode(',',$allowed_themes_str); $allowed_themes = array(); @@ -972,9 +972,9 @@ function admin_page_themes(&$a){ notice( t("Item not found.") ); return ''; } - + if (x($_GET,"a") && $_GET['a']=="t"){ - check_form_security_token_redirectOnErr('/admin/themes', 'admin_themes', 't'); + check_form_security_token_redirectOnErr('/admin/themes', 'admin_themes', 't'); // Toggle theme status @@ -998,28 +998,27 @@ function admin_page_themes(&$a){ } else { $status="off"; $action= t("Enable"); } - + $readme=Null; if (is_file("view/theme/$theme/README.md")){ $readme = file_get_contents("view/theme/$theme/README.md"); $readme = Markdown($readme); } else if (is_file("view/theme/$theme/README")){ $readme = "
". file_get_contents("view/theme/$theme/README") ."
"; - } - + } + $admin_form=""; if (is_file("view/theme/$theme/config.php")){ require_once("view/theme/$theme/config.php"); if(function_exists("theme_admin")){ $admin_form = theme_admin($a); } - + } - $screenshot = array( get_theme_screenshot($theme), t('Screenshot')); if(! stristr($screenshot[0],$theme)) - $screenshot = null; + $screenshot = null; $t = get_markup_template("admin_plugins_details.tpl"); return replace_macros($t, array( @@ -1028,7 +1027,7 @@ function admin_page_themes(&$a){ '$toggle' => t('Toggle'), '$settings' => t('Settings'), '$baseurl' => $a->get_baseurl(true), - + '$plugin' => $theme, '$status' => $status, '$action' => $action, @@ -1042,21 +1041,19 @@ function admin_page_themes(&$a){ '$form_security_token' => get_form_security_token("admin_themes"), )); - } - - - + } + /** * List themes */ - + $xthemes = array(); if($themes) { foreach($themes as $th) { $xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"), get_theme_info($th['name'])); } } - + $t = get_markup_template("admin_plugins.tpl"); return replace_macros($t, array( '$title' => t('Administration'), diff --git a/mod/network.php b/mod/network.php index 872c34da9..9909cd445 100644 --- a/mod/network.php +++ b/mod/network.php @@ -321,7 +321,7 @@ function network_query_get_sel_net() { if(x($_GET,'nets')) { $network = $_GET['nets']; } - + return $network; } @@ -382,14 +382,14 @@ function network_content(&$a, $update = 0) { // item filter tabs // TODO: fix this logic, reduce duplication //$a->page['content'] .= '
'; - + list($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active) = network_query_get_sel_tab($a); // if no tabs are selected, defaults to comments if ($no_active=='active') $all_active='active'; //echo "
"; var_dump($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); killme();
 
 	$cmd = (($datequery) ? '' : $a->cmd);
-	$len_naked_cmd = strlen(str_replace('/new','',$cmd));		
+	$len_naked_cmd = strlen(str_replace('/new','',$cmd));
 
 	// tabs
 	$tabs = array(
@@ -435,10 +435,10 @@ function network_content(&$a, $update = 0) {
 //			'url'=>$a->get_baseurl(true) . '/network?f=&spam=1'
 //			'sel'=> $spam_active,
 //			'title' => t('Posts flagged as SPAM'),
-//		),	
+//		),
 
 	);
-	
+
 	if(feature_enabled(local_user(),'personal_tab')) {
 		$tabs[] = array(
 			'label' => t('Personal'),
@@ -571,11 +571,11 @@ function network_content(&$a, $update = 0) {
 	}
 
 
-	// We don't have to deal with ACL's on this page. You're looking at everything
+	// We don't have to deal with ACLs on this page. You're looking at everything
 	// that belongs to you, hence you can see all of it. We will filter by group if
 	// desired. 
 
-	
+
 	$sql_options  = (($star) ? " and starred = 1 " : '');
 	$sql_options .= (($bmark) ? " and bookmark = 1 " : '');
 
diff --git a/object/Conversation.php b/object/Conversation.php
index 8b838f7d0..bd7a95cf2 100644
--- a/object/Conversation.php
+++ b/object/Conversation.php
@@ -127,6 +127,7 @@ class Conversation extends BaseObject {
 	 *      _ false on failure
 	 */
 	public function get_template_data($alike, $dlike) {
+		global $a;
 		$result = array();
 
 		foreach($this->threads as $item) {
@@ -140,6 +141,7 @@ class Conversation extends BaseObject {
 			$result[] = $item_data;
 		}
 
+		//$a->mark_timestamp();
 		return $result;
 	}
 

From bc972e16ce513fd610615d190046cd43e01fb92d Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Sun, 27 Jan 2013 23:25:04 +0100
Subject: [PATCH 15/32] New function to complete threads from ostatus postings

---
 boot.php                         |   1 +
 include/items.php                |  34 ++++++++--
 include/ostatus_conversation.php | 112 +++++++++++++++++++++++++++++++
 include/plugin.php               |   3 +-
 object/Item.php                  |  16 ++---
 5 files changed, 152 insertions(+), 14 deletions(-)
 create mode 100644 include/ostatus_conversation.php

diff --git a/boot.php b/boot.php
index da8ee8efa..fa968ce42 100644
--- a/boot.php
+++ b/boot.php
@@ -208,6 +208,7 @@ define ( 'TERM_CATEGORY',  3 );
 define ( 'TERM_PCATEGORY', 4 );
 define ( 'TERM_FILE',      5 );
 define ( 'TERM_SAVEDSEARCH', 6 );
+define ( 'TERM_CONVERSATION', 7 );
 
 define ( 'TERM_OBJ_POST',  1 );
 define ( 'TERM_OBJ_PHOTO', 2 );
diff --git a/include/items.php b/include/items.php
index 1a50ac204..94835d7ad 100755
--- a/include/items.php
+++ b/include/items.php
@@ -831,15 +831,28 @@ function get_atom_elements($feed,$item) {
 		}
 	}
 
+	// Search for ostatus conversation url
+	$links = $item->feed->data["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["feed"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["entry"][0]["child"]["http://www.w3.org/2005/Atom"]["link"];
+
+	foreach ($links as $link) {
+		$conversation = array_shift($link["attribs"]);
+
+		if ($conversation["rel"] == "ostatus:conversation") {
+			$res["ostatus_conversation"] = $conversation["href"];
+			logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]);
+		}
+	};
+
 	$arr = array('feed' => $feed, 'item' => $item, 'result' => $res);
 
 	call_hooks('parse_atom', $arr);
 
 	//if (($res["title"] != "") or (strpos($res["body"], "RT @") > 0)) {
 	//if (strpos($res["body"], "RT @") !== false) {
-	//	$debugfile = tempnam("/home/ike/log", "item-res2-");
-	//	file_put_contents($debugfile, serialize($arr));
-	//}
+	/*if (strpos($res["body"], "@") !== false) {
+		$debugfile = tempnam("/var/www/virtual/pirati.ca/phptmp/", "item-res2-");
+		file_put_contents($debugfile, serialize($arr));
+	}*/
 
 	return $res;
 }
@@ -878,6 +891,15 @@ function item_store($arr,$force_parent = false) {
 		unset($arr['dsprsig']);
 	}
 
+	// if an OStatus conversation url was passed in, it is stored and then
+	// removed from the array.
+	$ostatus_conversation = null;
+
+	if (isset($arr["ostatus_conversation"])) {
+		$ostatus_conversation = $arr["ostatus_conversation"];
+	        unset($arr["ostatus_conversation"]);
+	}
+
 	if(x($arr, 'gravity'))
 		$arr['gravity'] = intval($arr['gravity']);
 	elseif($arr['parent-uri'] === $arr['uri'])
@@ -969,9 +991,9 @@ function item_store($arr,$force_parent = false) {
 		$deny_cid  = $arr['deny_cid'];
 		$deny_gid  = $arr['deny_gid'];
 	}
-	else { 
+	else {
 
-		// find the parent and snarf the item id and ACL's
+		// find the parent and snarf the item id and ACLs
 		// and anything else we need to inherit
 
 		$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1",
@@ -1076,6 +1098,7 @@ function item_store($arr,$force_parent = false) {
 		$current_post = $r[0]['id'];
 		logger('item_store: created item ' . $current_post);
 		create_tags_from_item($r[0]['id']);
+		// ostatus_conversation
 	} else {
 		logger('item_store: could not locate created item');
 		return 0;
@@ -1159,6 +1182,7 @@ function item_store($arr,$force_parent = false) {
 
 	if (($cachefile != '') AND !file_exists($cachefile)) {
 		$s = prepare_text($arr['body']);
+		$a = get_app();
 		$stamp1 = microtime(true);
 		file_put_contents($cachefile, $s);
 		$a->save_timestamp($stamp1, "file");
diff --git a/include/ostatus_conversation.php b/include/ostatus_conversation.php
new file mode 100644
index 000000000..a56673390
--- /dev/null
+++ b/include/ostatus_conversation.php
@@ -0,0 +1,112 @@
+items);
+
+		foreach ($items as $single_conv) {
+			//print_r($single_conv);
+
+			if (isset($single_conv->context->inReplyTo->id))
+				$parent_uri = $single_conv->context->inReplyTo->id;
+			else
+				$parent_uri = $parent["uri"];
+
+			$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
+						intval($message["uid"]), dbesc($single_conv->id));
+			if ($message_exists) {
+				$existing_message = $message_exists[0];
+				$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d LIMIT 1",
+					intval($parent["id"]),
+					dbesc($parent["uri"]),
+					dbesc($parent_uri),
+					intval($existing_message["id"]));
+				continue;
+			}
+
+			$arr = array();
+			$arr["uri"] = $single_conv->id;
+			$arr["uid"] = $message["uid"];
+			$arr["contact-id"] = $parent["contact-id"]; // To-Do
+			$arr["parent"] = $parent["id"];
+			$arr["parent-uri"] = $parent["uri"];
+			$arr["thr-parent"] = $parent_uri;
+			$arr["created"] = $single_conv->published;
+			$arr["edited"] = $single_conv->published;
+			$arr["owner-name"] = $single_conv->actor->contact->displayName;
+			//$arr["owner-name"] = $single_conv->actor->contact->preferredUsername;
+			$arr["owner-link"] = $single_conv->actor->id;
+			$arr["owner-avatar"] = $single_conv->actor->image->url;
+			$arr["author-name"] = $single_conv->actor->contact->displayName;
+			//$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
+			$arr["author-link"] = $single_conv->actor->id;
+			$arr["author-avatar"] = $single_conv->actor->image->url;
+			$arr["body"] = html2bbcode($single_conv->content);
+			$arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
+			if ($arr["app"] == "")
+				$arr["app"] = $single_conv->provider->displayName;
+			$arr["verb"] = $parent["verb"];
+			$arr["visible"] = $parent["visible"];
+			$arr["location"] = $single_conv->location->displayName;
+			$arr["coord"] = trim($single_conv->location->lat." ".$single_conv->location->lon);
+
+			if ($arr["location"] == "")
+				unset($arr["location"]);
+
+			if ($arr["coord"] == "")
+				unset($arr["coord"]);
+
+			item_store($arr);
+			//print_r($arr);
+		}
+	}
+}
+
+$id = 282481;
+$conversation = "http://identi.ca/conversation/98268580";
+
+complete_conversation($id, $conversation);
+?>
diff --git a/include/plugin.php b/include/plugin.php
index 7a4a96670..12c29d1a6 100644
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -158,6 +158,8 @@ function load_hooks() {
 
 if(! function_exists('call_hooks')) {
 function call_hooks($name, &$data = null) {
+	$stamp1 = microtime(true);
+
 	$a = get_app();
 
 	if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
@@ -177,7 +179,6 @@ function call_hooks($name, &$data = null) {
 			}
 		}
 	}
-
 }}
 
 
diff --git a/object/Item.php b/object/Item.php
index 18281e9bc..aa5828753 100644
--- a/object/Item.php
+++ b/object/Item.php
@@ -190,10 +190,10 @@ class Item extends BaseObject {
 		 * Maybe we should establish a way to be notified about conversation changes
 		 */
 		$this->check_wall_to_wall();
-		
+
 		if($this->is_wall_to_wall() && ($this->get_owner_url() == $this->get_redirect_url()))
 			$osparkle = ' sparkle';
-		
+
 		if($this->is_toplevel()) {
 			if($conv->get_profile_owner() == local_user()) {
 				$isstarred = (($item['starred']) ? "starred" : "unstarred");
@@ -283,14 +283,14 @@ class Item extends BaseObject {
 
 			'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
 			'tags' => $tags,
-            'hashtags' => $hashtags,
-            'mentions' => $mentions,
+			'hashtags' => $hashtags,
+			'mentions' => $mentions,
 			'txt_cats' => t('Categories:'),
 			'txt_folders' => t('Filed under:'),
 			'has_cats' => ((count($categories)) ? 'true' : ''),
 			'has_folders' => ((count($folders)) ? 'true' : ''),
-            'categories' => $categories,
-            'folders' => $folders,
+			'categories' => $categories,
+			'folders' => $folders,
 			'body' => $body_e,
 			'text' => $text_e,
 			'id' => $this->get_id(),
@@ -361,12 +361,12 @@ class Item extends BaseObject {
 				}
 			}
 		}
-		
+
         if ($this->is_toplevel()) {
             $result['total_comments_num'] = "$total_children";
             $result['total_comments_text'] = tt('comment', 'comments', $total_children);
         }
-        
+
 		$result['private'] = $item['private'];
 		$result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : '');
 

From e668fece109f529345e5f3377c0bdcd2ab15161f Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Mon, 28 Jan 2013 01:16:51 +0100
Subject: [PATCH 16/32] ostatus auto completion now seems to work.

---
 include/items.php                |  6 ++++-
 include/ostatus_conversation.php | 40 +++++++++++++++++++++++++++-----
 2 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/include/items.php b/include/items.php
index 94835d7ad..13566075b 100755
--- a/include/items.php
+++ b/include/items.php
@@ -8,6 +8,7 @@ require_once('include/Photo.php');
 require_once('include/tags.php');
 require_once('include/text.php');
 require_once('include/email.php');
+require_once('include/ostatus_conversation.php');
 
 function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) {
 
@@ -1098,7 +1099,6 @@ function item_store($arr,$force_parent = false) {
 		$current_post = $r[0]['id'];
 		logger('item_store: created item ' . $current_post);
 		create_tags_from_item($r[0]['id']);
-		// ostatus_conversation
 	} else {
 		logger('item_store: could not locate created item');
 		return 0;
@@ -1135,6 +1135,10 @@ function item_store($arr,$force_parent = false) {
 	);
 	create_tags_from_item($current_post);
 
+	// Complete ostatus threads
+	if ($ostatus_conversation)
+		complete_conversation($current_post, $ostatus_conversation);
+
         $arr['id'] = $current_post;
         $arr['parent'] = $parent_id;
         $arr['allow_cid'] = $allow_cid;
diff --git a/include/ostatus_conversation.php b/include/ostatus_conversation.php
index a56673390..2851fdb1f 100644
--- a/include/ostatus_conversation.php
+++ b/include/ostatus_conversation.php
@@ -1,5 +1,5 @@
 items);
 
 		foreach ($items as $single_conv) {
 			//print_r($single_conv);
 
+			if ($first_id == "") {
+				$first_id = $single_conv->id;
+
+				$new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
+					intval($message["uid"]), dbesc($first_id));
+				if ($new_parents)
+					$parent = $new_parents[0];
+
+				logger('complete_conversation: adopting new parent '.$parent["id"].' for '.$itemid);
+			}
+
 			if (isset($single_conv->context->inReplyTo->id))
 				$parent_uri = $single_conv->context->inReplyTo->id;
 			else
@@ -99,14 +116,25 @@ function complete_conversation($itemid, $conversation_url) {
 			if ($arr["coord"] == "")
 				unset($arr["coord"]);
 
-			item_store($arr);
+			$newitem = item_store($arr);
+
+			// If the newly created item is the top item then change the parent settings of the thread
+			if ($newitem AND ($arr["uri"] == $first_id)) {
+				logger('complete_conversation: changing parents to parent '.$newitem.' old parent: '.$parent["id"].' new uri: '.$arr["uri"]);
+				$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d",
+					intval($newitem),
+					dbesc($arr["uri"]),
+					intval($parent["id"]));
+				logger('complete_conversation: done changing parents to parent '.$newitem);
+			}
 			//print_r($arr);
 		}
 	}
 }
-
+/*
 $id = 282481;
 $conversation = "http://identi.ca/conversation/98268580";
 
 complete_conversation($id, $conversation);
+*/
 ?>

From 9967c9892d68b2c8f4c7085367891d2e74db8ddb Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Mon, 28 Jan 2013 01:22:00 +0100
Subject: [PATCH 17/32] only change parents when parents are changed.

---
 include/ostatus_conversation.php | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/ostatus_conversation.php b/include/ostatus_conversation.php
index 2851fdb1f..4bf80aa04 100644
--- a/include/ostatus_conversation.php
+++ b/include/ostatus_conversation.php
@@ -17,7 +17,7 @@ function complete_conversation($itemid, $conversation_url) {
 	require_once('include/html2bbcode.php');
 	require_once('include/items.php');
 
-	logger('complete_conversation: completing conversation url '.$conversation_url.' for id '.$itemid);
+	//logger('complete_conversation: completing conversation url '.$conversation_url.' for id '.$itemid);
 
 	$messages = q("SELECT `uid`, `parent` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
 	if (!$messages)
@@ -43,7 +43,7 @@ function complete_conversation($itemid, $conversation_url) {
 
 	$conv = str_replace("/conversation/", "/api/statusnet/conversation/", $conversation_url).".as";
 
-	logger('complete_conversation: fetching conversation url '.$conversation_url.' for '.$itemid);
+	logger('complete_conversation: fetching conversation url '.$conv.' for '.$itemid);
 	$conv_as = fetch_url($conv);
 
 	if ($conv_as) {
@@ -61,10 +61,10 @@ function complete_conversation($itemid, $conversation_url) {
 
 				$new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
 					intval($message["uid"]), dbesc($first_id));
-				if ($new_parents)
+				if ($new_parents AND ($itemid != $parent["id"])) {
 					$parent = $new_parents[0];
-
-				logger('complete_conversation: adopting new parent '.$parent["id"].' for '.$itemid);
+					logger('complete_conversation: adopting new parent '.$parent["id"].' for '.$itemid);
+				}
 			}
 
 			if (isset($single_conv->context->inReplyTo->id))

From 2350aa54ebae23394d9e36445247dcd2235e7173 Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Wed, 30 Jan 2013 01:31:27 +0100
Subject: [PATCH 18/32] OStatus-Conversation auto completion works now. Some
 performance issues added as well.

---
 database.sql                     |  1 +
 include/ostatus_conversation.php | 72 +++++++++++++++-----------------
 mod/community.php                |  3 +-
 mod/search.php                   |  5 ++-
 mods/readme.txt                  |  1 +
 5 files changed, 40 insertions(+), 42 deletions(-)

diff --git a/database.sql b/database.sql
index cf060ebf4..da0d8c3aa 100644
--- a/database.sql
+++ b/database.sql
@@ -591,6 +591,7 @@ CREATE TABLE IF NOT EXISTS `item` (
   KEY `uid_created` (`uid`, `created`),
   KEY `uid_unseen` (`uid`, `unseen`),
   KEY `mention` (`mention`),
+  KEY `resource-id` (`resource-id`),
   FULLTEXT KEY `title` (`title`),
   FULLTEXT KEY `body` (`body`),
   FULLTEXT KEY `allow_cid` (`allow_cid`),
diff --git a/include/ostatus_conversation.php b/include/ostatus_conversation.php
index 4bf80aa04..3d40d673d 100644
--- a/include/ostatus_conversation.php
+++ b/include/ostatus_conversation.php
@@ -1,16 +1,4 @@
 items);
 
 		foreach ($items as $single_conv) {
-			//print_r($single_conv);
-
 			if ($first_id == "") {
 				$first_id = $single_conv->id;
 
 				$new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
 					intval($message["uid"]), dbesc($first_id));
-				if ($new_parents AND ($itemid != $parent["id"])) {
+				if ($new_parents) {
 					$parent = $new_parents[0];
 					logger('complete_conversation: adopting new parent '.$parent["id"].' for '.$itemid);
+				} else {
+					$parent["id"] = 0;
+					$parent["uri"] = $first_id;
 				}
 			}
 
@@ -72,33 +61,37 @@ function complete_conversation($itemid, $conversation_url) {
 			else
 				$parent_uri = $parent["uri"];
 
-			$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
-						intval($message["uid"]), dbesc($single_conv->id));
-			if ($message_exists) {
-				$existing_message = $message_exists[0];
-				$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d LIMIT 1",
-					intval($parent["id"]),
-					dbesc($parent["uri"]),
-					dbesc($parent_uri),
-					intval($existing_message["id"]));
-				continue;
+			if ($parent["id"] != 0) {
+				$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
+							intval($message["uid"]), dbesc($single_conv->id));
+				if ($message_exists) {
+					$existing_message = $message_exists[0];
+					$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d LIMIT 1",
+						intval($parent["id"]),
+						dbesc($parent["uri"]),
+						dbesc($parent_uri),
+						intval($existing_message["id"]));
+					continue;
+				}
 			}
 
 			$arr = array();
 			$arr["uri"] = $single_conv->id;
+			$arr["plink"] = $single_conv->id;
 			$arr["uid"] = $message["uid"];
 			$arr["contact-id"] = $parent["contact-id"]; // To-Do
-			$arr["parent"] = $parent["id"];
+			if ($parent["id"] != 0)
+				$arr["parent"] = $parent["id"];
 			$arr["parent-uri"] = $parent["uri"];
 			$arr["thr-parent"] = $parent_uri;
 			$arr["created"] = $single_conv->published;
 			$arr["edited"] = $single_conv->published;
-			$arr["owner-name"] = $single_conv->actor->contact->displayName;
-			//$arr["owner-name"] = $single_conv->actor->contact->preferredUsername;
+			//$arr["owner-name"] = $single_conv->actor->contact->displayName;
+			$arr["owner-name"] = $single_conv->actor->contact->preferredUsername;
 			$arr["owner-link"] = $single_conv->actor->id;
 			$arr["owner-avatar"] = $single_conv->actor->image->url;
-			$arr["author-name"] = $single_conv->actor->contact->displayName;
-			//$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
+			//$arr["author-name"] = $single_conv->actor->contact->displayName;
+			$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
 			$arr["author-link"] = $single_conv->actor->id;
 			$arr["author-avatar"] = $single_conv->actor->image->url;
 			$arr["body"] = html2bbcode($single_conv->content);
@@ -120,21 +113,22 @@ function complete_conversation($itemid, $conversation_url) {
 
 			// If the newly created item is the top item then change the parent settings of the thread
 			if ($newitem AND ($arr["uri"] == $first_id)) {
-				logger('complete_conversation: changing parents to parent '.$newitem.' old parent: '.$parent["id"].' new uri: '.$arr["uri"]);
+				logger('complete_conversation: setting new parent to id '.$newitem);
+				$new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
+					intval($message["uid"]), intval($newitem));
+				if ($new_parents) {
+					$parent = $new_parents[0];
+					logger('complete_conversation: done changing parents to parent '.$newitem);
+				}
+
+				/*logger('complete_conversation: changing parents to parent '.$newitem.' old parent: '.$parent["id"].' new uri: '.$arr["uri"]);
 				$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d",
 					intval($newitem),
 					dbesc($arr["uri"]),
 					intval($parent["id"]));
-				logger('complete_conversation: done changing parents to parent '.$newitem);
+				logger('complete_conversation: done changing parents to parent '.$newitem.' '.print_r($r, true));*/
 			}
-			//print_r($arr);
 		}
 	}
 }
-/*
-$id = 282481;
-$conversation = "http://identi.ca/conversation/98268580";
-
-complete_conversation($id, $conversation);
-*/
 ?>
diff --git a/mod/community.php b/mod/community.php
index aa5bb7268..a7f5c9bf8 100644
--- a/mod/community.php
+++ b/mod/community.php
@@ -75,12 +75,13 @@ function community_content(&$a, $update = 0) {
 		AND `item`.`allow_cid` = ''  AND `item`.`allow_gid` = ''
 		AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = '' 
 		AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0
-		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 group by `item`.`uri`
+		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
 		ORDER BY `received` DESC LIMIT %d, %d ",
 		intval($a->pager['start']),
 		intval($a->pager['itemspage'])
 
 	);
+//		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 group by `item`.`uri`
 
 	if(! count($r)) {
 		info( t('No results.') . EOL);
diff --git a/mod/search.php b/mod/search.php
index c6d5989fb..b368deb49 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -164,9 +164,10 @@ function search_content(&$a) {
 		        AND (( `item`.`allow_cid` = ''  AND `item`.`allow_gid` = '' AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0) 
 			        OR `item`.`uid` = %d )
 		        AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
-		        $sql_extra group by `item`.`uri` ", 
+		        $sql_extra ",
 		        intval(local_user())
 	        );
+//		        $sql_extra group by `item`.`uri` ",
 
 	        if(count($r))
 		        $a->set_pager_total(count($r));
@@ -189,13 +190,13 @@ function search_content(&$a) {
 			OR `item`.`uid` = %d )
 		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
 		$sql_extra
-		group by `item`.`uri`	
 		ORDER BY `received` DESC LIMIT %d , %d ",
 		intval(local_user()),
 		intval($a->pager['start']),
 		intval($a->pager['itemspage'])
 
 	);
+//		group by `item`.`uri`
 
 	if(! count($r)) {
 		info( t('No results.') . EOL);
diff --git a/mods/readme.txt b/mods/readme.txt
index 9e79f843f..d74b846d0 100644
--- a/mods/readme.txt
+++ b/mods/readme.txt
@@ -3,3 +3,4 @@ Site speed can be improved when the following indexes are set. They cannot be se
 CREATE INDEX `uid_commented` ON `item` (`uid`, `commented`);
 CREATE INDEX `uid_created` ON `item` (`uid`, `created`);
 CREATE INDEX `uid_unseen` ON `item` (`uid`, `unseen`);
+CREATE INDEX `resource-id` ON `item` (`resource-id`);

From c9307eb96a1cd6f0f99ef01127a3ec6d356543ef Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Mon, 4 Feb 2013 00:57:23 +0100
Subject: [PATCH 19/32] OStatus conversation are now checked every 30 minutes
 for new answers.

---
 include/ostatus_conversation.php           | 61 ++++++++++++++++++----
 include/poller.php                         |  3 +-
 library/fancybox/jquery.fancybox-1.3.4.css | 16 +++---
 3 files changed, 60 insertions(+), 20 deletions(-)

diff --git a/include/ostatus_conversation.php b/include/ostatus_conversation.php
index 3d40d673d..cdaf80d76 100644
--- a/include/ostatus_conversation.php
+++ b/include/ostatus_conversation.php
@@ -1,9 +1,39 @@
  time()) {
+                        logger('complete_conversation: poll intervall not reached');
+                        return;
+                }
+        }
+
+        logger('complete_conversation: cron_start');
+
+        $start = date("Y-m-d H:i:s", time() - 86400);
+        $conversations = q("SELECT * FROM `term` WHERE `type` = 7 AND `term` > '%s'", 
+                                dbesc($start));
+        foreach ($conversations AS $conversation) {
+                $id = $conversation['oid'];
+                $url = $conversation['url'];
+                complete_conversation($id, $url);
+        }
+
+        logger('complete_conversation: cron_end');
+
+        set_config('system','ostatus_last_poll', time());
+}
+
+function complete_conversation($itemid, $conversation_url, $only_add_conversation = false) {
+	global $a;
 
 	//logger('complete_conversation: completing conversation url '.$conversation_url.' for id '.$itemid);
 
@@ -12,13 +42,6 @@ function complete_conversation($itemid, $conversation_url) {
 		return;
 	$message = $messages[0];
 
-	// Get the parent
-	$parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
-			intval($message["uid"]), intval($message["parent"]));
-	if (!$parents)
-		return;
-	$parent = $parents[0];
-
 	// Store conversation url if not done before
 	$conversation = q("SELECT `url` FROM `term` WHERE `uid` = %d AND `oid` = %d AND `otype` = %d AND `type` = %d",
 		intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION));
@@ -29,6 +52,19 @@ function complete_conversation($itemid, $conversation_url) {
 		logger('complete_conversation: Storing conversation url '.$conversation_url.' for id '.$itemid);
 	}
 
+	if ($only_add_conversation)
+		return;
+
+	// Get the parent
+	$parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
+			intval($message["uid"]), intval($message["parent"]));
+	if (!$parents)
+		return;
+	$parent = $parents[0];
+
+	require_once('include/html2bbcode.php');
+	require_once('include/items.php');
+
 	$conv = str_replace("/conversation/", "/api/statusnet/conversation/", $conversation_url).".as";
 
 	logger('complete_conversation: fetching conversation url '.$conv.' for '.$itemid);
@@ -111,6 +147,9 @@ function complete_conversation($itemid, $conversation_url) {
 
 			$newitem = item_store($arr);
 
+			// Add the conversation entry (but don't fetch the whole conversation)
+			complete_conversation($newitem, $conversation_url, true);
+
 			// If the newly created item is the top item then change the parent settings of the thread
 			if ($newitem AND ($arr["uri"] == $first_id)) {
 				logger('complete_conversation: setting new parent to id '.$newitem);
diff --git a/include/poller.php b/include/poller.php
index c9c46188f..e85a4555d 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -86,7 +86,8 @@ function poller_run(&$argv, &$argc){
 	if($abandon_days < 1)
 		$abandon_days = 0;
 
-
+	// Check OStatus conversations
+	check_conversations();
 
 	// once daily run birthday_updates and then expire in background
 
diff --git a/library/fancybox/jquery.fancybox-1.3.4.css b/library/fancybox/jquery.fancybox-1.3.4.css
index 6f53d8f4a..50dbd67a8 100644
--- a/library/fancybox/jquery.fancybox-1.3.4.css
+++ b/library/fancybox/jquery.fancybox-1.3.4.css
@@ -349,11 +349,11 @@
 
 .fancybox-ie .fancybox-bg { background: transparent !important; }
 
-.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
\ No newline at end of file
+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }

From 5e077e541ae5c627a9626454f1c36b2a1470d3c4 Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Wed, 6 Feb 2013 08:01:46 +0100
Subject: [PATCH 20/32] The community page is speeded up. Photos will be
 compressed before the output.

---
 mod/community.php |  7 ++++---
 mod/photo.php     | 12 ++++++------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/mod/community.php b/mod/community.php
index a7f5c9bf8..e267447e4 100644
--- a/mod/community.php
+++ b/mod/community.php
@@ -64,7 +64,8 @@ function community_content(&$a, $update = 0) {
 
 	}
 
-	$r = q("SELECT distinct(`item`.`uri`), `item`.*, `item`.`id` AS `item_id`, 
+	//$r = q("SELECT distinct(`item`.`uri`)
+	$r = q("SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`, 
 		`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,
 		`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, 
 		`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
@@ -75,13 +76,13 @@ function community_content(&$a, $update = 0) {
 		AND `item`.`allow_cid` = ''  AND `item`.`allow_gid` = ''
 		AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = '' 
 		AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0
-		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`self`
 		ORDER BY `received` DESC LIMIT %d, %d ",
 		intval($a->pager['start']),
 		intval($a->pager['itemspage'])
 
 	);
-//		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 group by `item`.`uri`
+//		group by `item`.`uri`
 
 	if(! count($r)) {
 		info( t('No results.') . EOL);
diff --git a/mod/photo.php b/mod/photo.php
index 93db82a64..c92ab387b 100644
--- a/mod/photo.php
+++ b/mod/photo.php
@@ -106,7 +106,7 @@ function photo_init(&$a) {
 			intval($resolution)
 		);
 		if(count($r)) {
-			
+
 			$sql_extra = permissions_sql($r[0]['uid']);
 
 			// Now we'll see if we can access the photo
@@ -169,13 +169,13 @@ function photo_init(&$a) {
 		}
 	}
 
-	if(isset($customres) && $customres > 0 && $customres < 500) {
-		$ph = new Photo($data, $mimetype);
-		if($ph->is_valid()) {
+	$ph = new Photo($data, $mimetype);
+	if($ph->is_valid()) {
+		if(isset($customres) && $customres > 0 && $customres < 500) {
 			$ph->scaleImageSquare($customres);
-			$data = $ph->imageString();
-			$mimetype = $ph->getType();
 		}
+		$data = $ph->imageString();
+		$mimetype = $ph->getType();
 	}
 
 	if(function_exists('header_remove')) {

From 3e58060b308f045613c3b57b62c0fb47890c7bdb Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Fri, 15 Feb 2013 20:14:45 +0100
Subject: [PATCH 21/32] API: beautify the output of repeated items Vier:
 Birthday reminder looks better

---
 include/api.php           | 22 +++++++++---------
 include/bbcode.php        | 49 ++++++++++++++++++++++++++++++++-------
 view/theme/vier/style.css |  5 +++-
 3 files changed, 55 insertions(+), 21 deletions(-)

diff --git a/include/api.php b/include/api.php
index 4efb0c614..81255ca37 100644
--- a/include/api.php
+++ b/include/api.php
@@ -516,13 +516,13 @@
                         $txt = $purifier->purify($txt);
 		}
 		$txt = html2bbcode($txt);
-		
+
                 $a->argv[1]=$user_info['screen_name']; //should be set to username?
-		
+
 		$_REQUEST['hush']='yeah'; //tell wall_upload function to return img info instead of echo
                 require_once('mod/wall_upload.php');
 		$bebop = wall_upload_post($a);
-                
+
 		//now that we have the img url in bbcode we can add it to the status and insert the wall item.
                 $_REQUEST['body']=$txt."\n\n".$bebop;
                 require_once('mod/item.php');
@@ -629,7 +629,7 @@
 
 		if (count($lastwall)>0){
 			$lastwall = $lastwall[0];
-			
+
 			$in_reply_to_status_id = '';
 			$in_reply_to_user_id = '';
 			$in_reply_to_screen_name = '';
@@ -637,9 +637,9 @@
 				$in_reply_to_status_id=$lastwall['parent'];
 				$in_reply_to_user_id = $lastwall['reply_uid'];
 				$in_reply_to_screen_name = $lastwall['reply_author'];
-			}  
+			}
 			$status_info = array(
-				'text' => html2plain(bbcode($lastwall['body']), 0),
+				'text' => html2plain(bbcode($lastwall['body'], false, false, true), 0),
 				'truncated' => false,
 				'created_at' => api_date($lastwall['created']),
 				'in_reply_to_status_id' => $in_reply_to_status_id,
@@ -694,11 +694,11 @@
 				$in_reply_to_status_id=$lastwall['parent'];
 				$in_reply_to_user_id = $lastwall['reply_uid'];
 				$in_reply_to_screen_name = $lastwall['reply_author'];
-			}  
+			}
 			$user_info['status'] = array(
 				'created_at' => api_date($lastwall['created']),
 				'id' => $lastwall['contact-id'],
-				'text' => html2plain(bbcode($lastwall['body']), 0),
+				'text' => html2plain(bbcode($lastwall['body'], false, false, true), 0),
 				'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'),
 				'truncated' => false,
 				'in_reply_to_status_id' => $in_reply_to_status_id,
@@ -1300,11 +1300,11 @@
 				$ret['text'] = bbcode($item['body']);
 			}
 			elseif ($_GET["getText"] == "plain") {
-				$ret['text'] = html2plain(bbcode($item['body']), 0);
+				$ret['text'] = html2plain(bbcode($item['body'], false, false, true), 0);
 			}
 		}
 		else {
-			$ret['text'] = $item['title']."\n".html2plain(bbcode($item['body']), 0);
+			$ret['text'] = $item['title']."\n".html2plain(bbcode($item['body'], false, false, true), 0);
 		}
 		if (isset($_GET["getUserObjects"]) && $_GET["getUserObjects"] == "false") {
 			unset($ret['sender']);
@@ -1348,7 +1348,7 @@
 			}
 
 			// Workaround for ostatus messages where the title is identically to the body
-			$statusbody = trim(html2plain(bbcode($item['body']), 0));
+			$statusbody = trim(html2plain(bbcode($item['body'], false, false, true), 0));
 			$statustitle = trim($item['title']);
 
 			if (($statustitle != '') and (strpos($statusbody, $statustitle) !== false))
diff --git a/include/bbcode.php b/include/bbcode.php
index 45213cc3b..a587d8c38 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -278,10 +278,37 @@ function bb_ShareAttributes($match) {
         return($text);
 }
 
+function bb_ShareAttributesSimple($match) {
+
+        $attributes = $match[1];
+
+        $author = "";
+        preg_match("/author='(.*?)'/ism", $attributes, $matches);
+        if ($matches[1] != "")
+                $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
+
+        preg_match('/author="(.*?)"/ism', $attributes, $matches);
+        if ($matches[1] != "")
+                $author = $matches[1];
+
+        $profile = "";
+        preg_match("/profile='(.*?)'/ism", $attributes, $matches);
+        if ($matches[1] != "")
+                $profile = $matches[1];
+
+        preg_match('/profile="(.*?)"/ism', $attributes, $matches);
+        if ($matches[1] != "")
+                $profile = $matches[1];
+
+        $text = "
".html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$author.":
»".$match[2]."«"; + + return($text); +} + // BBcode 2 HTML was written by WAY2WEB.net // extended to work with Mistpark/Friendica - Mike Macgirvin -function bbcode($Text,$preserve_nl = false, $tryoembed = true) { +function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = false) { $stamp1 = microtime(true); @@ -342,13 +369,14 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) { $Text = str_replace("\r\n","\n", $Text); // removing multiplicated newlines -// $search = array("\n\n\n", "\n ", " \n", "[/quote]\n\n", "\n[/quote]"); -// $replace = array("\n\n", "\n", "\n", "[/quote]\n", "[/quote]"); -// do { -// $oldtext = $Text; -// $Text = str_replace($search, $replace, $Text); -// } while ($oldtext != $Text); - + if (get_config("system", "remove_multiplicated_lines")) { + $search = array("\n\n\n", "\n ", " \n", "[/quote]\n\n", "\n[/quote]"); + $replace = array("\n\n", "\n", "\n", "[/quote]\n", "[/quote]"); + do { + $oldtext = $Text; + $Text = str_replace($search, $replace, $Text); + } while ($oldtext != $Text); + } $Text = str_replace(array("\r","\n"), array('
','
'), $Text); @@ -517,7 +545,10 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) { $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '' . t('Image/photo') . '', $Text); // Shared content - $Text = preg_replace_callback("/\[share(.*?)\](.*?)\[\/share\]/ism","bb_ShareAttributes",$Text); + if (!$simplehtml) + $Text = preg_replace_callback("/\[share(.*?)\](.*?)\[\/share\]/ism","bb_ShareAttributes",$Text); + else + $Text = preg_replace_callback("/\[share(.*?)\](.*?)\[\/share\]/ism","bb_ShareAttributesSimple",$Text); $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'
' . t('Encrypted content') . '
', $Text); $Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism",'
' . t('Encrypted content') . '
', $Text); diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index aa66769db..4a116c5b7 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -1020,6 +1020,9 @@ section { max-width: 766px; padding: 10px 10px 10px 10px; background-color: white; + border-bottom: 1px solid lightgray; + border-right: 1px solid lightgray; + border-left: 1px solid lightgray; } /* wall item */ .tread-wrapper { @@ -1727,7 +1730,7 @@ div.pager, .birthday-notice, ul.tabs a, #jot-preview-link, .comment-edit-submit- background: linear-gradient(top, #ffffff 0%,#ececf2 100%);*/ } -#event-notice:hover, ul.tabs li .active, ul.tabs a:hover, #jot-preview-link:hover, .comment-edit-submit-wrapper .fakelink:hover { +#event-notice:hover, #birthday-notice:hover, ul.tabs li .active, ul.tabs a:hover, #jot-preview-link:hover, .comment-edit-submit-wrapper .fakelink:hover { color: black; background-color: #e5e5e5; text-decoration: none; From fca8a23265413dadc384ce0239ce5bcd56a39201 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 17 Feb 2013 08:20:29 +0100 Subject: [PATCH 22/32] use enotify to send CC mails --- mod/item.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mod/item.php b/mod/item.php index d04ab71de..4fd4a23dc 100644 --- a/mod/item.php +++ b/mod/item.php @@ -872,14 +872,20 @@ function item_post(&$a) { } else { $subject = email_header_encode('[Friendica]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']),'UTF-8'); } - $headers = 'From: ' . email_header_encode($a->user['username'],'UTF-8') . ' <' . $a->user['email'] . '>' . "\n"; - $headers .= 'MIME-Version: 1.0' . "\n"; - $headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; - $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; $link = '' . $a->user['username'] . '

'; $html = prepare_body($datarray); $message = '' . $link . $html . $disclaimer . ''; - @mail($addr, $subject, $message, $headers); + include_once('include/html2plain.php'); + $params = array ( + 'fromName' => $a->user['username'], + 'fromEmail' => $a->user['email'], + 'toEmail' => $addr, + 'replyTo' => $a->user['email'], + 'messageSubject' => $subject, + 'htmlVersion' => $message, + 'textVersion' => html2plain($html.$disclaimer), + ); + enotify::send($params); } } } From 1a1984c78de11fd168e383f9151faff5584a7da1 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 17 Feb 2013 12:36:54 +0100 Subject: [PATCH 23/32] Updated from master --- library/fancybox/jquery.fancybox-1.3.4.css | 359 --------------------- 1 file changed, 359 deletions(-) delete mode 100644 library/fancybox/jquery.fancybox-1.3.4.css diff --git a/library/fancybox/jquery.fancybox-1.3.4.css b/library/fancybox/jquery.fancybox-1.3.4.css deleted file mode 100644 index 50dbd67a8..000000000 --- a/library/fancybox/jquery.fancybox-1.3.4.css +++ /dev/null @@ -1,359 +0,0 @@ -/* - * FancyBox - jQuery Plugin - * Simple and fancy lightbox alternative - * - * Examples and documentation at: http://fancybox.net - * - * Copyright (c) 2008 - 2010 Janis Skarnelis - * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. - * - * Version: 1.3.4 (11/11/2010) - * Requires: jQuery v1.3+ - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ - -#fancybox-loading { - position: fixed; - top: 50%; - left: 50%; - width: 40px; - height: 40px; - margin-top: -20px; - margin-left: -20px; - cursor: pointer; - overflow: hidden; - z-index: 1104; - display: none; -} - -#fancybox-loading div { - position: absolute; - top: 0; - left: 0; - width: 40px; - height: 480px; - background-image: url('fancybox.png'); -} - -#fancybox-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - z-index: 1100; - display: none; -} - -#fancybox-tmp { - padding: 0; - margin: 0; - border: 0; - overflow: auto; - display: none; -} - -#fancybox-wrap { - position: absolute; - top: 0; - left: 0; - padding: 20px; - z-index: 1101; - outline: none; - display: none; -} - -#fancybox-outer { - position: relative; - width: 100%; - height: 100%; - background: #fff; -} - -#fancybox-content { - width: 0; - height: 0; - padding: 0; - outline: none; - position: relative; - overflow: hidden; - z-index: 1102; - border: 0px solid #fff; -} - -#fancybox-hide-sel-frame { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: transparent; - z-index: 1101; -} - -#fancybox-close { - position: absolute; - top: -15px; - right: -15px; - width: 30px; - height: 30px; - background: transparent url('fancybox.png') -40px 0px; - cursor: pointer; - z-index: 1103; - display: none; -} - -#fancybox-error { - color: #444; - font: normal 12px/20px Arial; - padding: 14px; - margin: 0; -} - -#fancybox-img { - width: 100%; - height: 100%; - padding: 0; - margin: 0; - border: none; - outline: none; - line-height: 0; - vertical-align: top; -} - -#fancybox-frame { - width: 100%; - height: 100%; - border: none; - display: block; -} - -#fancybox-left, #fancybox-right { - position: absolute; - bottom: 0px; - height: 100%; - width: 35%; - cursor: pointer; - outline: none; - background: transparent url('blank.gif'); - z-index: 1102; - display: none; -} - -#fancybox-left { - left: 0px; -} - -#fancybox-right { - right: 0px; -} - -#fancybox-left-ico, #fancybox-right-ico { - position: absolute; - top: 50%; - left: -9999px; - width: 30px; - height: 30px; - margin-top: -15px; - cursor: pointer; - z-index: 1102; - display: block; -} - -#fancybox-left-ico { - background-image: url('fancybox.png'); - background-position: -40px -30px; -} - -#fancybox-right-ico { - background-image: url('fancybox.png'); - background-position: -40px -60px; -} - -#fancybox-left:hover, #fancybox-right:hover { - visibility: visible; /* IE6 */ -} - -#fancybox-left:hover span { - left: 20px; -} - -#fancybox-right:hover span { - left: auto; - right: 20px; -} - -.fancybox-bg { - position: absolute; - padding: 0; - margin: 0; - border: 0; - width: 20px; - height: 20px; - z-index: 1001; -} - -#fancybox-bg-n { - top: -20px; - left: 0; - width: 100%; - background-image: url('fancybox-x.png'); -} - -#fancybox-bg-ne { - top: -20px; - right: -20px; - background-image: url('fancybox.png'); - background-position: -40px -162px; -} - -#fancybox-bg-e { - top: 0; - right: -20px; - height: 100%; - background-image: url('fancybox-y.png'); - background-position: -20px 0px; -} - -#fancybox-bg-se { - bottom: -20px; - right: -20px; - background-image: url('fancybox.png'); - background-position: -40px -182px; -} - -#fancybox-bg-s { - bottom: -20px; - left: 0; - width: 100%; - background-image: url('fancybox-x.png'); - background-position: 0px -20px; -} - -#fancybox-bg-sw { - bottom: -20px; - left: -20px; - background-image: url('fancybox.png'); - background-position: -40px -142px; -} - -#fancybox-bg-w { - top: 0; - left: -20px; - height: 100%; - background-image: url('fancybox-y.png'); -} - -#fancybox-bg-nw { - top: -20px; - left: -20px; - background-image: url('fancybox.png'); - background-position: -40px -122px; -} - -#fancybox-title { - font-family: Helvetica; - font-size: 12px; - z-index: 1102; -} - -.fancybox-title-inside { - padding-bottom: 10px; - text-align: center; - color: #333; - background: #fff; - position: relative; -} - -.fancybox-title-outside { - padding-top: 10px; - color: #fff; -} - -.fancybox-title-over { - position: absolute; - bottom: 0; - left: 0; - color: #FFF; - text-align: left; -} - -#fancybox-title-over { - padding: 10px; - background-image: url('fancy_title_over.png'); - display: block; -} - -.fancybox-title-float { - position: absolute; - left: 0; - bottom: -20px; - height: 32px; -} - -#fancybox-title-float-wrap { - border: none; - border-collapse: collapse; - width: auto; -} - -#fancybox-title-float-wrap td { - border: none; - white-space: nowrap; -} - -#fancybox-title-float-left { - padding: 0 0 0 15px; - background: url('fancybox.png') -40px -90px no-repeat; -} - -#fancybox-title-float-main { - color: #FFF; - line-height: 29px; - font-weight: bold; - padding: 0 0 3px 0; - background: url('fancybox-x.png') 0px -40px; -} - -#fancybox-title-float-right { - padding: 0 0 0 15px; - background: url('fancybox.png') -55px -90px no-repeat; -} - -/* IE6 */ - -.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); } - -.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); } -.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); } - -.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } -.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); } -.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); } -.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); } - -.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { - height: expression(this.parentNode.clientHeight + "px"); -} - -#fancybox-loading.fancybox-ie6 { - position: absolute; margin-top: 0; - top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); -} - -#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); } - -/* IE6, IE7, IE8 */ - -.fancybox-ie .fancybox-bg { background: transparent !important; } - -.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_n.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_e.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_se.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_s.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_w.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='library/fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } From aa2f1c38e95b53e47bba0f7372e8e4e62fc5b232 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 17 Feb 2013 12:37:45 +0100 Subject: [PATCH 24/32] add 'hide_help' to admin panel --- mod/admin.php | 3 +++ view/admin_site.tpl | 1 + view/smarty3/admin_site.tpl | 1 + 3 files changed, 5 insertions(+) diff --git a/mod/admin.php b/mod/admin.php index 8a79fb108..6e18ec5c8 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -274,6 +274,7 @@ function admin_page_site_post(&$a){ $diaspora_enabled = ((x($_POST,'diaspora_enabled')) ? True : False); $ssl_policy = ((x($_POST,'ssl_policy')) ? intval($_POST['ssl_policy']) : 0); $new_share = ((x($_POST,'new_share')) ? True : False); + $hide_help = ((x($_POST,'hide_help')) ? True : False); $use_fulltext_engine = ((x($_POST,'use_fulltext_engine')) ? True : False); $itemcache = ((x($_POST,'itemcache')) ? notags(trim($_POST['itemcache'])) : ''); $itemcache_duration = ((x($_POST,'itemcache_duration')) ? intval($_POST['itemcache_duration']) : 0); @@ -380,6 +381,7 @@ function admin_page_site_post(&$a){ set_config('system','diaspora_enabled', $diaspora_enabled); set_config('system','new_share', $new_share); + set_config('system','hide_help', $hide_help); set_config('system','use_fulltext_engine', $use_fulltext_engine); set_config('system','itemcache', $itemcache); set_config('system','itemcache_duration', $itemcache_duration); @@ -474,6 +476,7 @@ function admin_page_site(&$a) { '$theme_mobile' => array('theme_mobile', t("Mobile system theme"), get_config('system','mobile-theme'), t("Theme for mobile devices"), $theme_choices_mobile), '$ssl_policy' => array('ssl_policy', t("SSL link policy"), (string) intval(get_config('system','ssl_policy')), t("Determines whether generated links should be forced to use SSL"), $ssl_choices), '$new_share' => array('new_share', t("'Share' element"), get_config('system','new_share'), t("Activates the bbcode element 'share' for repeating items.")), + '$hide_help' => array('hide_help', t("Hide help entry from navigation menu"), get_config('system','hide_help'), t("Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly.")), '$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")), '$maximagelength' => array('maximagelength', t("Maximum image length"), get_config('system','max_image_length'), t("Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.")), '$jpegimagequality' => array('jpegimagequality', t("JPEG image quality"), get_config('system','jpeg_quality'), t("Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality.")), diff --git a/view/admin_site.tpl b/view/admin_site.tpl index e8fdd4258..1a2a83339 100644 --- a/view/admin_site.tpl +++ b/view/admin_site.tpl @@ -51,6 +51,7 @@ {{ inc field_select.tpl with $field=$theme_mobile }}{{ endinc }} {{ inc field_select.tpl with $field=$ssl_policy }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$new_share }}{{ endinc }} + {{ inc field_checkbox.tpl with $field=$hide_help }}{{ endinc }}
diff --git a/view/smarty3/admin_site.tpl b/view/smarty3/admin_site.tpl index f033b52ee..af78ca734 100644 --- a/view/smarty3/admin_site.tpl +++ b/view/smarty3/admin_site.tpl @@ -56,6 +56,7 @@ {{include file="field_select.tpl" field=$theme_mobile}} {{include file="field_select.tpl" field=$ssl_policy}} {{include file="field_checkbox.tpl" field=$new_share}} + {{include file="field_checkbox.tpl" field=$hide_help}}
From 8e65e95d17035a222e52da153790ea6d91102138 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 17 Feb 2013 17:42:32 +0100 Subject: [PATCH 25/32] add multi vs. single user config to the admin panel --- mod/admin.php | 20 +++++++++++++++++--- view/admin_site.tpl | 1 + view/smarty3/admin_site.tpl | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 6e18ec5c8..9400a28e0 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -281,6 +281,7 @@ function admin_page_site_post(&$a){ $lockpath = ((x($_POST,'lockpath')) ? notags(trim($_POST['lockpath'])) : ''); $temppath = ((x($_POST,'temppath')) ? notags(trim($_POST['temppath'])) : ''); $basepath = ((x($_POST,'basepath')) ? notags(trim($_POST['basepath'])) : ''); + $singleuser = ((x($_POST,'singleuser')) ? notags(trim($_POST['singleuser'])) : ''); if($ssl_policy != intval(get_config('system','ssl_policy'))) { if($ssl_policy == SSL_POLICY_FULL) { @@ -342,7 +343,12 @@ function admin_page_site_post(&$a){ del_config('system','mobile-theme'); } else { set_config('system','mobile-theme', $theme_mobile); - } + } + if ( $singleuser === '---' ) { + del_config('system','singleuser'); + } else { + set_config('system','singleuser', $singleuser); + } set_config('system','maximagesize', $maximagesize); set_config('system','max_image_length', $maximagelength); set_config('system','jpeg_quality', $jpegimagequality); @@ -428,12 +434,19 @@ function admin_page_site(&$a) { if (file_exists($file . '/mobile')) { $theme_choices_mobile[$f] = $theme_name; } - else { + else { $theme_choices[$f] = $theme_name; } } } - + + /* get user names to make the install a personal install of X */ + $user_names = array(); + $user_names['---'] = t('Multi user instance'); + $users = q("SELECT username, nickname FROM `user`"); + foreach ($users as $user) { + $user_names[$user['nickname']] = $user['username']; + } /* Banner */ $banner = get_config('system','banner'); @@ -477,6 +490,7 @@ function admin_page_site(&$a) { '$ssl_policy' => array('ssl_policy', t("SSL link policy"), (string) intval(get_config('system','ssl_policy')), t("Determines whether generated links should be forced to use SSL"), $ssl_choices), '$new_share' => array('new_share', t("'Share' element"), get_config('system','new_share'), t("Activates the bbcode element 'share' for repeating items.")), '$hide_help' => array('hide_help', t("Hide help entry from navigation menu"), get_config('system','hide_help'), t("Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly.")), + '$singleuser' => array('singleuser', t("Single user instance"), get_config('system','singleuser'), t("Make this instance multi-user or single-user for the named user"), $user_names), '$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")), '$maximagelength' => array('maximagelength', t("Maximum image length"), get_config('system','max_image_length'), t("Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.")), '$jpegimagequality' => array('jpegimagequality', t("JPEG image quality"), get_config('system','jpeg_quality'), t("Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality.")), diff --git a/view/admin_site.tpl b/view/admin_site.tpl index 1a2a83339..a6fe2d789 100644 --- a/view/admin_site.tpl +++ b/view/admin_site.tpl @@ -52,6 +52,7 @@ {{ inc field_select.tpl with $field=$ssl_policy }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$new_share }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$hide_help }}{{ endinc }} + {{ inc field_select.tpl with $field=$singleuser }}{{ endinc }}
diff --git a/view/smarty3/admin_site.tpl b/view/smarty3/admin_site.tpl index af78ca734..bad0f5275 100644 --- a/view/smarty3/admin_site.tpl +++ b/view/smarty3/admin_site.tpl @@ -52,11 +52,12 @@ {{include file="field_input.tpl" field=$sitename}} {{include file="field_textarea.tpl" field=$banner}} {{include file="field_select.tpl" field=$language}} - {{include file="field_select.tpl" field=$theme}} + {{include file="field_select.tpl" field=$theme}} {{include file="field_select.tpl" field=$theme_mobile}} {{include file="field_select.tpl" field=$ssl_policy}} {{include file="field_checkbox.tpl" field=$new_share}} {{include file="field_checkbox.tpl" field=$hide_help}} + {{include file="field_select.tpl" field=$singleuser}}
From 7e154d5e4cb0c6be4631beef33a2ec1acc1fbdf5 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 17 Feb 2013 18:05:30 +0100 Subject: [PATCH 26/32] plugin: orphaned hooks weren't deleted. update: fixing update job for tags. --- boot.php | 2 +- include/plugin.php | 2 +- update.php | 11 ++++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index d77e653f1..0467524f6 100644 --- a/boot.php +++ b/boot.php @@ -14,7 +14,7 @@ require_once('include/features.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '3.1.1612' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1161 ); +define ( 'DB_UPDATE_VERSION', 1162 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/include/plugin.php b/include/plugin.php index 9795cacf9..b89cb2c53 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -175,7 +175,7 @@ function call_hooks($name, &$data = null) { } else { // remove orphan hooks - q("delete from hook where hook = '%s' and file = '$s' and function = '%s' limit 1", + q("delete from hook where hook = '%s' and file = '%s' and function = '%s' limit 1", dbesc($name), dbesc($hook[0]), dbesc($hook[1]) diff --git a/update.php b/update.php index 89b55cdb9..6dd58757b 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sun, 17 Feb 2013 18:46:39 +0100 Subject: [PATCH 27/32] added robots.txt to the igmnored files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 038ac32a5..bf4bd454b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ favicon.* home.html addon *~ +robots.txt #ignore documentation, it should be newly built doc/api From bd1c86ed49e257c411aa32f864f46757ba582b6c Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 18 Feb 2013 09:18:45 +0100 Subject: [PATCH 28/32] PL: update to the strings --- view/pl/messages.po | 1218 +++++++++++++++++++++++-------------------- view/pl/strings.php | 53 +- 2 files changed, 703 insertions(+), 568 deletions(-) diff --git a/view/pl/messages.po b/view/pl/messages.po index aaeee8af5..dd107db44 100644 --- a/view/pl/messages.po +++ b/view/pl/messages.po @@ -16,6 +16,7 @@ # , 2012. # , 2012. # , 2012. +# Mariusz Pisz , 2013. # , 2012. # , 2012. # , 2012. @@ -27,9 +28,9 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: http://bugs.friendica.com/\n" -"POT-Creation-Date: 2013-01-18 10:00-0800\n" -"PO-Revision-Date: 2013-01-21 09:03+0000\n" -"Last-Translator: Cyryl Sochacki \n" +"POT-Creation-Date: 2013-02-07 10:00-0800\n" +"PO-Revision-Date: 2013-02-17 11:50+0000\n" +"Last-Translator: Piszu \n" "Language-Team: Polish (http://www.transifex.com/projects/p/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -57,11 +58,11 @@ msgstr "Nie udało się zaktualizować kontaktu." #: ../../mod/crepair.php:115 ../../mod/wall_attach.php:55 #: ../../mod/fsuggest.php:78 ../../mod/events.php:140 ../../mod/api.php:26 -#: ../../mod/api.php:31 ../../mod/photos.php:133 ../../mod/photos.php:995 +#: ../../mod/api.php:31 ../../mod/photos.php:133 ../../mod/photos.php:1041 #: ../../mod/editpost.php:10 ../../mod/install.php:151 ../../mod/poke.php:135 #: ../../mod/notifications.php:66 ../../mod/contacts.php:147 #: ../../mod/settings.php:91 ../../mod/settings.php:542 -#: ../../mod/settings.php:547 ../../mod/manage.php:90 ../../mod/network.php:6 +#: ../../mod/settings.php:547 ../../mod/manage.php:96 ../../mod/network.php:6 #: ../../mod/notes.php:20 ../../mod/uimport.php:23 ../../mod/wallmessage.php:9 #: ../../mod/wallmessage.php:33 ../../mod/wallmessage.php:79 #: ../../mod/wallmessage.php:103 ../../mod/attach.php:33 @@ -70,18 +71,18 @@ msgstr "Nie udało się zaktualizować kontaktu." #: ../../mod/item.php:155 ../../mod/mood.php:114 #: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:169 #: ../../mod/profile_photo.php:180 ../../mod/profile_photo.php:193 -#: ../../mod/message.php:38 ../../mod/message.php:172 +#: ../../mod/message.php:38 ../../mod/message.php:174 #: ../../mod/allfriends.php:9 ../../mod/nogroup.php:25 #: ../../mod/wall_upload.php:66 ../../mod/follow.php:9 #: ../../mod/display.php:180 ../../mod/profiles.php:146 #: ../../mod/profiles.php:567 ../../mod/delegate.php:6 -#: ../../mod/suggest.php:28 ../../mod/invite.php:15 ../../mod/invite.php:83 +#: ../../mod/suggest.php:56 ../../mod/invite.php:15 ../../mod/invite.php:101 #: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:512 #: ../../addon/facebook/facebook.php:518 ../../addon/fbpost/fbpost.php:170 #: ../../addon/fbpost/fbpost.php:176 #: ../../addon/dav/friendica/layout.fnk.php:354 -#: ../../addon/tumblr/tumblr.php:34 ../../include/items.php:3987 -#: ../../index.php:340 ../../addon.old/facebook/facebook.php:510 +#: ../../addon/tumblr/tumblr.php:34 ../../include/items.php:4015 +#: ../../index.php:341 ../../addon.old/facebook/facebook.php:510 #: ../../addon.old/facebook/facebook.php:516 #: ../../addon.old/fbpost/fbpost.php:159 ../../addon.old/fbpost/fbpost.php:165 #: ../../addon.old/dav/friendica/layout.fnk.php:354 @@ -151,19 +152,20 @@ msgid "New photo from this URL" msgstr "Nowe zdjęcie z tej ścieżki" #: ../../mod/crepair.php:166 ../../mod/fsuggest.php:107 -#: ../../mod/events.php:466 ../../mod/photos.php:1028 -#: ../../mod/photos.php:1118 ../../mod/photos.php:1402 -#: ../../mod/photos.php:1442 ../../mod/photos.php:1486 -#: ../../mod/photos.php:1569 ../../mod/install.php:248 +#: ../../mod/events.php:478 ../../mod/photos.php:1075 +#: ../../mod/photos.php:1196 ../../mod/photos.php:1498 +#: ../../mod/photos.php:1549 ../../mod/photos.php:1593 +#: ../../mod/photos.php:1676 ../../mod/install.php:248 #: ../../mod/install.php:286 ../../mod/localtime.php:45 ../../mod/poke.php:199 -#: ../../mod/content.php:710 ../../mod/contacts.php:352 +#: ../../mod/content.php:710 ../../mod/contacts.php:386 #: ../../mod/settings.php:560 ../../mod/settings.php:670 #: ../../mod/settings.php:739 ../../mod/settings.php:811 -#: ../../mod/settings.php:1018 ../../mod/group.php:87 ../../mod/mood.php:137 -#: ../../mod/message.php:301 ../../mod/message.php:527 ../../mod/admin.php:461 -#: ../../mod/admin.php:728 ../../mod/admin.php:865 ../../mod/admin.php:1064 -#: ../../mod/admin.php:1151 ../../mod/profiles.php:626 -#: ../../mod/invite.php:121 ../../addon/fromgplus/fromgplus.php:44 +#: ../../mod/settings.php:1037 ../../mod/manage.php:110 ../../mod/group.php:87 +#: ../../mod/mood.php:137 ../../mod/message.php:335 ../../mod/message.php:564 +#: ../../mod/admin.php:461 ../../mod/admin.php:728 ../../mod/admin.php:865 +#: ../../mod/admin.php:1068 ../../mod/admin.php:1155 +#: ../../mod/profiles.php:626 ../../mod/invite.php:140 +#: ../../addon/fromgplus/fromgplus.php:44 #: ../../addon/facebook/facebook.php:621 #: ../../addon/snautofollow/snautofollow.php:64 #: ../../addon/fbpost/fbpost.php:280 ../../addon/yourls/yourls.php:76 @@ -197,7 +199,7 @@ msgstr "Nowe zdjęcie z tej ścieżki" #: ../../addon/numfriends/numfriends.php:85 ../../addon/gnot/gnot.php:88 #: ../../addon/wppost/wppost.php:110 ../../addon/showmore/showmore.php:48 #: ../../addon/piwik/piwik.php:89 ../../addon/twitter/twitter.php:191 -#: ../../addon/twitter/twitter.php:229 ../../addon/twitter/twitter.php:554 +#: ../../addon/twitter/twitter.php:229 ../../addon/twitter/twitter.php:556 #: ../../addon/irc/irc.php:55 ../../addon/fromapp/fromapp.php:77 #: ../../addon/blogger/blogger.php:102 ../../addon/posterous/posterous.php:103 #: ../../view/theme/cleanzero/config.php:80 @@ -258,15 +260,15 @@ msgid "Help:" msgstr "Pomoc:" #: ../../mod/help.php:84 ../../addon/dav/friendica/layout.fnk.php:225 -#: ../../include/nav.php:86 ../../addon.old/dav/friendica/layout.fnk.php:225 +#: ../../include/nav.php:113 ../../addon.old/dav/friendica/layout.fnk.php:225 msgid "Help" msgstr "Pomoc" -#: ../../mod/help.php:90 ../../index.php:225 +#: ../../mod/help.php:90 ../../index.php:226 msgid "Not Found" msgstr "Nie znaleziono" -#: ../../mod/help.php:93 ../../index.php:228 +#: ../../mod/help.php:93 ../../index.php:229 msgid "Page not found." msgstr "Strona nie znaleziona." @@ -296,87 +298,87 @@ msgstr "Zaproponuj znajomych dla %s" msgid "Event title and start time are required." msgstr "" -#: ../../mod/events.php:279 +#: ../../mod/events.php:291 msgid "l, F j" msgstr "d, M d " -#: ../../mod/events.php:301 +#: ../../mod/events.php:313 msgid "Edit event" msgstr "Edytuj wydarzenie" -#: ../../mod/events.php:323 ../../include/text.php:1246 +#: ../../mod/events.php:335 ../../include/text.php:1258 msgid "link to source" msgstr "link do źródła" -#: ../../mod/events.php:358 ../../view/theme/diabook/theme.php:91 -#: ../../include/nav.php:52 ../../boot.php:1836 +#: ../../mod/events.php:370 ../../view/theme/diabook/theme.php:91 +#: ../../include/nav.php:79 ../../boot.php:1857 msgid "Events" msgstr "Wydarzenia" -#: ../../mod/events.php:359 +#: ../../mod/events.php:371 msgid "Create New Event" msgstr "Stwórz nowe wydarzenie" -#: ../../mod/events.php:360 ../../addon/dav/friendica/layout.fnk.php:263 +#: ../../mod/events.php:372 ../../addon/dav/friendica/layout.fnk.php:263 #: ../../addon.old/dav/friendica/layout.fnk.php:263 msgid "Previous" msgstr "Poprzedni" -#: ../../mod/events.php:361 ../../mod/install.php:207 +#: ../../mod/events.php:373 ../../mod/install.php:207 #: ../../addon/dav/friendica/layout.fnk.php:266 #: ../../addon.old/dav/friendica/layout.fnk.php:266 msgid "Next" msgstr "Następny" -#: ../../mod/events.php:434 +#: ../../mod/events.php:446 msgid "hour:minute" msgstr "godzina:minuta" -#: ../../mod/events.php:444 +#: ../../mod/events.php:456 msgid "Event details" msgstr "Szczegóły wydarzenia" -#: ../../mod/events.php:445 +#: ../../mod/events.php:457 #, php-format msgid "Format is %s %s. Starting date and Title are required." msgstr "" -#: ../../mod/events.php:447 +#: ../../mod/events.php:459 msgid "Event Starts:" msgstr "Rozpoczęcie wydarzenia:" -#: ../../mod/events.php:447 ../../mod/events.php:461 +#: ../../mod/events.php:459 ../../mod/events.php:473 msgid "Required" msgstr "Wymagany" -#: ../../mod/events.php:450 +#: ../../mod/events.php:462 msgid "Finish date/time is not known or not relevant" msgstr "Data/czas zakończenia nie jest znana lub jest nieistotna" -#: ../../mod/events.php:452 +#: ../../mod/events.php:464 msgid "Event Finishes:" msgstr "Zakończenie wydarzenia:" -#: ../../mod/events.php:455 +#: ../../mod/events.php:467 msgid "Adjust for viewer timezone" -msgstr "" +msgstr "Dopasuj dla strefy czasowej widza" -#: ../../mod/events.php:457 +#: ../../mod/events.php:469 msgid "Description:" msgstr "Opis:" -#: ../../mod/events.php:459 ../../mod/directory.php:134 +#: ../../mod/events.php:471 ../../mod/directory.php:134 #: ../../addon/forumdirectory/forumdirectory.php:156 #: ../../include/event.php:40 ../../include/bb2diaspora.php:415 -#: ../../boot.php:1358 +#: ../../boot.php:1379 msgid "Location:" msgstr "Lokalizacja" -#: ../../mod/events.php:461 +#: ../../mod/events.php:473 msgid "Title:" msgstr "Tytuł:" -#: ../../mod/events.php:463 +#: ../../mod/events.php:475 msgid "Share this event" msgstr "Udostępnij te wydarzenie" @@ -384,11 +386,14 @@ msgstr "Udostępnij te wydarzenie" msgid "System down for maintenance" msgstr "" -#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 ../../mod/editpost.php:145 -#: ../../mod/dfrn_request.php:848 ../../mod/settings.php:561 -#: ../../mod/settings.php:587 ../../mod/fbrowser.php:81 -#: ../../mod/fbrowser.php:116 ../../addon/js_upload/js_upload.php:45 -#: ../../include/conversation.php:1040 +#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 ../../mod/photos.php:202 +#: ../../mod/photos.php:289 ../../mod/editpost.php:148 +#: ../../mod/dfrn_request.php:848 ../../mod/contacts.php:249 +#: ../../mod/settings.php:561 ../../mod/settings.php:587 +#: ../../mod/fbrowser.php:81 ../../mod/fbrowser.php:116 +#: ../../mod/message.php:212 ../../mod/suggest.php:32 +#: ../../addon/js_upload/js_upload.php:45 ../../include/items.php:3897 +#: ../../include/conversation.php:1062 #: ../../addon.old/js_upload/js_upload.php:45 msgid "Cancel" msgstr "Anuluj" @@ -411,7 +416,7 @@ msgstr "Wybierz tag do usunięcia" msgid "Remove" msgstr "Usuń" -#: ../../mod/dfrn_poll.php:99 ../../mod/dfrn_poll.php:530 +#: ../../mod/dfrn_poll.php:101 ../../mod/dfrn_poll.php:534 #, php-format msgid "%1$s welcomes %2$s" msgstr "" @@ -435,14 +440,16 @@ msgid "" msgstr "Czy chcesz umożliwić tej aplikacji dostęp do Twoich wpisów, kontaktów oraz pozwolić jej na pisanie za Ciebie postów?" #: ../../mod/api.php:105 ../../mod/dfrn_request.php:836 -#: ../../mod/settings.php:934 ../../mod/settings.php:940 -#: ../../mod/settings.php:948 ../../mod/settings.php:952 -#: ../../mod/settings.php:957 ../../mod/settings.php:963 -#: ../../mod/settings.php:969 ../../mod/settings.php:975 -#: ../../mod/settings.php:1005 ../../mod/settings.php:1006 -#: ../../mod/settings.php:1007 ../../mod/settings.php:1008 -#: ../../mod/settings.php:1009 ../../mod/register.php:239 -#: ../../mod/profiles.php:606 +#: ../../mod/contacts.php:246 ../../mod/settings.php:934 +#: ../../mod/settings.php:940 ../../mod/settings.php:948 +#: ../../mod/settings.php:952 ../../mod/settings.php:957 +#: ../../mod/settings.php:963 ../../mod/settings.php:969 +#: ../../mod/settings.php:975 ../../mod/settings.php:1005 +#: ../../mod/settings.php:1006 ../../mod/settings.php:1007 +#: ../../mod/settings.php:1008 ../../mod/settings.php:1009 +#: ../../mod/register.php:239 ../../mod/message.php:209 +#: ../../mod/profiles.php:606 ../../mod/suggest.php:29 +#: ../../include/items.php:3894 msgid "Yes" msgstr "Tak" @@ -458,20 +465,20 @@ msgstr "Tak" msgid "No" msgstr "Nie" -#: ../../mod/photos.php:51 ../../boot.php:1829 +#: ../../mod/photos.php:51 ../../boot.php:1850 msgid "Photo Albums" msgstr "Albumy zdjęć" -#: ../../mod/photos.php:59 ../../mod/photos.php:154 ../../mod/photos.php:1009 -#: ../../mod/photos.php:1102 ../../mod/photos.php:1125 -#: ../../mod/photos.php:1626 ../../mod/photos.php:1638 +#: ../../mod/photos.php:59 ../../mod/photos.php:154 ../../mod/photos.php:1055 +#: ../../mod/photos.php:1180 ../../mod/photos.php:1203 +#: ../../mod/photos.php:1733 ../../mod/photos.php:1745 #: ../../addon/communityhome/communityhome.php:115 #: ../../view/theme/diabook/theme.php:492 #: ../../addon.old/communityhome/communityhome.php:110 msgid "Contact Photos" msgstr "Zdjęcia kontaktu" -#: ../../mod/photos.php:66 ../../mod/photos.php:1141 ../../mod/photos.php:1685 +#: ../../mod/photos.php:66 ../../mod/photos.php:1219 ../../mod/photos.php:1792 msgid "Upload New Photos" msgstr "Wyślij nowe zdjęcie" @@ -483,8 +490,8 @@ msgstr "wszyscy" msgid "Contact information unavailable" msgstr "Informacje o kontakcie nie dostępne." -#: ../../mod/photos.php:154 ../../mod/photos.php:676 ../../mod/photos.php:1102 -#: ../../mod/photos.php:1125 ../../mod/profile_photo.php:74 +#: ../../mod/photos.php:154 ../../mod/photos.php:722 ../../mod/photos.php:1180 +#: ../../mod/photos.php:1203 ../../mod/profile_photo.php:74 #: ../../mod/profile_photo.php:81 ../../mod/profile_photo.php:88 #: ../../mod/profile_photo.php:204 ../../mod/profile_photo.php:296 #: ../../mod/profile_photo.php:305 @@ -499,213 +506,247 @@ msgstr "Zdjęcia profilowe" msgid "Album not found." msgstr "Album nie znaleziony" -#: ../../mod/photos.php:182 ../../mod/photos.php:1119 +#: ../../mod/photos.php:187 ../../mod/photos.php:199 ../../mod/photos.php:1197 msgid "Delete Album" msgstr "Usuń album" -#: ../../mod/photos.php:245 ../../mod/photos.php:1403 +#: ../../mod/photos.php:197 +msgid "Do you really want to delete this photo album and all its photos?" +msgstr "" + +#: ../../mod/photos.php:275 ../../mod/photos.php:286 ../../mod/photos.php:1499 msgid "Delete Photo" msgstr "Usuń zdjęcie" -#: ../../mod/photos.php:607 +#: ../../mod/photos.php:284 +msgid "Do you really want to delete this photo?" +msgstr "" + +#: ../../mod/photos.php:653 #, php-format msgid "%1$s was tagged in %2$s by %3$s" msgstr "" -#: ../../mod/photos.php:607 +#: ../../mod/photos.php:653 msgid "a photo" msgstr "zdjęcie" -#: ../../mod/photos.php:712 ../../addon/js_upload/js_upload.php:321 +#: ../../mod/photos.php:758 ../../addon/js_upload/js_upload.php:321 #: ../../addon.old/js_upload/js_upload.php:315 msgid "Image exceeds size limit of " msgstr "obrazek przekracza limit rozmiaru" -#: ../../mod/photos.php:720 +#: ../../mod/photos.php:766 msgid "Image file is empty." msgstr "Plik obrazka jest pusty." -#: ../../mod/photos.php:752 ../../mod/profile_photo.php:153 +#: ../../mod/photos.php:798 ../../mod/profile_photo.php:153 #: ../../mod/wall_upload.php:112 msgid "Unable to process image." msgstr "Przetwarzanie obrazu nie powiodło się." -#: ../../mod/photos.php:779 ../../mod/profile_photo.php:301 +#: ../../mod/photos.php:825 ../../mod/profile_photo.php:301 #: ../../mod/wall_upload.php:138 msgid "Image upload failed." msgstr "Przesyłanie obrazu nie powiodło się" -#: ../../mod/photos.php:865 ../../mod/community.php:18 +#: ../../mod/photos.php:911 ../../mod/community.php:18 #: ../../mod/dfrn_request.php:761 ../../mod/viewcontacts.php:17 #: ../../mod/display.php:19 ../../mod/search.php:89 ../../mod/directory.php:31 #: ../../addon/forumdirectory/forumdirectory.php:53 msgid "Public access denied." msgstr "Publiczny dostęp zabroniony" -#: ../../mod/photos.php:875 +#: ../../mod/photos.php:921 msgid "No photos selected" msgstr "Nie zaznaczono zdjęć" -#: ../../mod/photos.php:976 +#: ../../mod/photos.php:1022 msgid "Access to this item is restricted." msgstr "Dostęp do tego obiektu jest ograniczony." -#: ../../mod/photos.php:1037 +#: ../../mod/photos.php:1085 #, php-format msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." msgstr "" -#: ../../mod/photos.php:1053 +#: ../../mod/photos.php:1120 msgid "Upload Photos" msgstr "Prześlij zdjęcia" -#: ../../mod/photos.php:1057 ../../mod/photos.php:1114 +#: ../../mod/photos.php:1124 ../../mod/photos.php:1192 msgid "New album name: " msgstr "Nazwa nowego albumu:" -#: ../../mod/photos.php:1058 +#: ../../mod/photos.php:1125 msgid "or existing album name: " msgstr "lub istniejąca nazwa albumu:" -#: ../../mod/photos.php:1059 +#: ../../mod/photos.php:1126 msgid "Do not show a status post for this upload" msgstr "Nie pokazuj postów statusu dla tego wysłania" -#: ../../mod/photos.php:1061 ../../mod/photos.php:1398 +#: ../../mod/photos.php:1128 ../../mod/photos.php:1494 msgid "Permissions" msgstr "Uprawnienia" -#: ../../mod/photos.php:1129 +#: ../../mod/photos.php:1137 ../../mod/photos.php:1503 +#: ../../mod/settings.php:1070 +msgid "Show to Groups" +msgstr "" + +#: ../../mod/photos.php:1138 ../../mod/photos.php:1504 +#: ../../mod/settings.php:1071 +msgid "Show to Contacts" +msgstr "" + +#: ../../mod/photos.php:1139 +msgid "Private Photo" +msgstr "" + +#: ../../mod/photos.php:1140 +msgid "Public Photo" +msgstr "" + +#: ../../mod/photos.php:1207 msgid "Edit Album" msgstr "Edytuj album" -#: ../../mod/photos.php:1135 +#: ../../mod/photos.php:1213 msgid "Show Newest First" msgstr "Najpierw pokaż najnowsze" -#: ../../mod/photos.php:1137 +#: ../../mod/photos.php:1215 msgid "Show Oldest First" msgstr "Najpierw pokaż najstarsze" -#: ../../mod/photos.php:1170 ../../mod/photos.php:1668 +#: ../../mod/photos.php:1248 ../../mod/photos.php:1775 msgid "View Photo" msgstr "Zobacz zdjęcie" -#: ../../mod/photos.php:1205 +#: ../../mod/photos.php:1283 msgid "Permission denied. Access to this item may be restricted." msgstr "Odmowa dostępu. Dostęp do tych danych może być ograniczony." -#: ../../mod/photos.php:1207 +#: ../../mod/photos.php:1285 msgid "Photo not available" msgstr "Zdjęcie niedostępne" -#: ../../mod/photos.php:1263 +#: ../../mod/photos.php:1341 msgid "View photo" msgstr "Zobacz zdjęcie" -#: ../../mod/photos.php:1263 +#: ../../mod/photos.php:1341 msgid "Edit photo" msgstr "Edytuj zdjęcie" -#: ../../mod/photos.php:1264 +#: ../../mod/photos.php:1342 msgid "Use as profile photo" msgstr "Ustaw jako zdjęcie profilowe" -#: ../../mod/photos.php:1270 ../../mod/content.php:620 +#: ../../mod/photos.php:1348 ../../mod/content.php:620 #: ../../object/Item.php:106 msgid "Private Message" msgstr "Wiadomość prywatna" -#: ../../mod/photos.php:1289 +#: ../../mod/photos.php:1367 msgid "View Full Size" msgstr "Zobacz w pełnym rozmiarze" -#: ../../mod/photos.php:1363 +#: ../../mod/photos.php:1441 msgid "Tags: " msgstr "Tagi:" -#: ../../mod/photos.php:1366 +#: ../../mod/photos.php:1444 msgid "[Remove any tag]" msgstr "[Usunąć znacznik]" -#: ../../mod/photos.php:1388 +#: ../../mod/photos.php:1484 msgid "Rotate CW (right)" msgstr "" -#: ../../mod/photos.php:1389 +#: ../../mod/photos.php:1485 msgid "Rotate CCW (left)" msgstr "" -#: ../../mod/photos.php:1391 +#: ../../mod/photos.php:1487 msgid "New album name" msgstr "Nazwa nowego albumu" -#: ../../mod/photos.php:1394 +#: ../../mod/photos.php:1490 msgid "Caption" msgstr "Zawartość" -#: ../../mod/photos.php:1396 +#: ../../mod/photos.php:1492 msgid "Add a Tag" msgstr "Dodaj tag" -#: ../../mod/photos.php:1400 +#: ../../mod/photos.php:1496 msgid "" "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "Przykładowo: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -#: ../../mod/photos.php:1420 ../../mod/content.php:684 +#: ../../mod/photos.php:1505 +msgid "Private photo" +msgstr "" + +#: ../../mod/photos.php:1506 +msgid "Public photo" +msgstr "" + +#: ../../mod/photos.php:1526 ../../mod/content.php:684 #: ../../object/Item.php:204 msgid "I like this (toggle)" msgstr "Lubię to (zmień)" -#: ../../mod/photos.php:1421 ../../mod/content.php:685 +#: ../../mod/photos.php:1527 ../../mod/content.php:685 #: ../../object/Item.php:205 msgid "I don't like this (toggle)" msgstr "Nie lubię (zmień)" -#: ../../mod/photos.php:1422 ../../include/conversation.php:1000 +#: ../../mod/photos.php:1528 ../../include/conversation.php:1023 msgid "Share" msgstr "Podziel się" -#: ../../mod/photos.php:1423 ../../mod/editpost.php:121 +#: ../../mod/photos.php:1529 ../../mod/editpost.php:124 #: ../../mod/content.php:499 ../../mod/content.php:883 -#: ../../mod/wallmessage.php:152 ../../mod/message.php:300 -#: ../../mod/message.php:528 ../../include/conversation.php:645 -#: ../../include/conversation.php:1019 ../../object/Item.php:293 +#: ../../mod/wallmessage.php:156 ../../mod/message.php:334 +#: ../../mod/message.php:565 ../../include/conversation.php:646 +#: ../../include/conversation.php:1042 ../../object/Item.php:293 msgid "Please wait" msgstr "Proszę czekać" -#: ../../mod/photos.php:1439 ../../mod/photos.php:1483 -#: ../../mod/photos.php:1566 ../../mod/content.php:707 +#: ../../mod/photos.php:1546 ../../mod/photos.php:1590 +#: ../../mod/photos.php:1673 ../../mod/content.php:707 #: ../../object/Item.php:601 msgid "This is you" msgstr "To jesteś ty" -#: ../../mod/photos.php:1441 ../../mod/photos.php:1485 -#: ../../mod/photos.php:1568 ../../mod/content.php:709 ../../boot.php:641 +#: ../../mod/photos.php:1548 ../../mod/photos.php:1592 +#: ../../mod/photos.php:1675 ../../mod/content.php:709 ../../boot.php:641 #: ../../object/Item.php:290 ../../object/Item.php:603 msgid "Comment" msgstr "Komentarz" -#: ../../mod/photos.php:1443 ../../mod/photos.php:1487 -#: ../../mod/photos.php:1570 ../../mod/editpost.php:142 -#: ../../mod/content.php:719 ../../include/conversation.php:1037 +#: ../../mod/photos.php:1550 ../../mod/photos.php:1594 +#: ../../mod/photos.php:1677 ../../mod/editpost.php:145 +#: ../../mod/content.php:719 ../../include/conversation.php:1059 #: ../../object/Item.php:613 msgid "Preview" msgstr "Podgląd" -#: ../../mod/photos.php:1527 ../../mod/content.php:439 +#: ../../mod/photos.php:1634 ../../mod/content.php:439 #: ../../mod/content.php:741 ../../mod/settings.php:623 #: ../../mod/group.php:171 ../../mod/admin.php:735 -#: ../../include/conversation.php:569 ../../object/Item.php:120 +#: ../../include/conversation.php:570 ../../object/Item.php:120 msgid "Delete" msgstr "Usuń" -#: ../../mod/photos.php:1674 +#: ../../mod/photos.php:1781 msgid "View Album" msgstr "Zobacz album" -#: ../../mod/photos.php:1683 +#: ../../mod/photos.php:1790 msgid "Recent Photos" msgstr "Ostatnio dodane zdjęcia" @@ -714,7 +755,7 @@ msgid "Not available." msgstr "Niedostępne." #: ../../mod/community.php:32 ../../view/theme/diabook/theme.php:93 -#: ../../include/nav.php:101 +#: ../../include/nav.php:128 msgid "Community" msgstr "Społeczność" @@ -763,96 +804,92 @@ msgstr "Artykuł nie znaleziony" msgid "Edit post" msgstr "Edytuj post" -#: ../../mod/editpost.php:91 ../../include/conversation.php:986 -msgid "Post to Email" -msgstr "Wyślij poprzez email" - -#: ../../mod/editpost.php:106 ../../mod/content.php:728 +#: ../../mod/editpost.php:109 ../../mod/content.php:728 #: ../../mod/settings.php:622 ../../object/Item.php:110 msgid "Edit" msgstr "Edytuj" -#: ../../mod/editpost.php:107 ../../mod/wallmessage.php:150 -#: ../../mod/message.php:298 ../../mod/message.php:525 -#: ../../include/conversation.php:1001 +#: ../../mod/editpost.php:110 ../../mod/wallmessage.php:154 +#: ../../mod/message.php:332 ../../mod/message.php:562 +#: ../../include/conversation.php:1024 msgid "Upload photo" msgstr "Wyślij zdjęcie" -#: ../../mod/editpost.php:108 ../../include/conversation.php:1002 +#: ../../mod/editpost.php:111 ../../include/conversation.php:1025 msgid "upload photo" msgstr "dodaj zdjęcie" -#: ../../mod/editpost.php:109 ../../include/conversation.php:1003 +#: ../../mod/editpost.php:112 ../../include/conversation.php:1026 msgid "Attach file" msgstr "Przyłącz plik" -#: ../../mod/editpost.php:110 ../../include/conversation.php:1004 +#: ../../mod/editpost.php:113 ../../include/conversation.php:1027 msgid "attach file" msgstr "załącz plik" -#: ../../mod/editpost.php:111 ../../mod/wallmessage.php:151 -#: ../../mod/message.php:299 ../../mod/message.php:526 -#: ../../include/conversation.php:1005 +#: ../../mod/editpost.php:114 ../../mod/wallmessage.php:155 +#: ../../mod/message.php:333 ../../mod/message.php:563 +#: ../../include/conversation.php:1028 msgid "Insert web link" msgstr "Wstaw link" -#: ../../mod/editpost.php:112 ../../include/conversation.php:1006 +#: ../../mod/editpost.php:115 ../../include/conversation.php:1029 msgid "web link" msgstr "Adres www" -#: ../../mod/editpost.php:113 ../../include/conversation.php:1007 +#: ../../mod/editpost.php:116 ../../include/conversation.php:1030 msgid "Insert video link" msgstr "Wstaw link wideo" -#: ../../mod/editpost.php:114 ../../include/conversation.php:1008 +#: ../../mod/editpost.php:117 ../../include/conversation.php:1031 msgid "video link" msgstr "link do filmu" -#: ../../mod/editpost.php:115 ../../include/conversation.php:1009 +#: ../../mod/editpost.php:118 ../../include/conversation.php:1032 msgid "Insert audio link" msgstr "Wstaw link audio" -#: ../../mod/editpost.php:116 ../../include/conversation.php:1010 +#: ../../mod/editpost.php:119 ../../include/conversation.php:1033 msgid "audio link" msgstr "Link audio" -#: ../../mod/editpost.php:117 ../../include/conversation.php:1011 +#: ../../mod/editpost.php:120 ../../include/conversation.php:1034 msgid "Set your location" msgstr "Ustaw swoje położenie" -#: ../../mod/editpost.php:118 ../../include/conversation.php:1012 +#: ../../mod/editpost.php:121 ../../include/conversation.php:1035 msgid "set location" msgstr "wybierz lokalizację" -#: ../../mod/editpost.php:119 ../../include/conversation.php:1013 +#: ../../mod/editpost.php:122 ../../include/conversation.php:1036 msgid "Clear browser location" msgstr "Wyczyść położenie przeglądarki" -#: ../../mod/editpost.php:120 ../../include/conversation.php:1014 +#: ../../mod/editpost.php:123 ../../include/conversation.php:1037 msgid "clear location" msgstr "wyczyść lokalizację" -#: ../../mod/editpost.php:122 ../../include/conversation.php:1020 +#: ../../mod/editpost.php:125 ../../include/conversation.php:1043 msgid "Permission settings" msgstr "Ustawienia uprawnień" -#: ../../mod/editpost.php:130 ../../include/conversation.php:1029 +#: ../../mod/editpost.php:133 ../../include/conversation.php:1052 msgid "CC: email addresses" msgstr "CC: adresy e-mail" -#: ../../mod/editpost.php:131 ../../include/conversation.php:1030 +#: ../../mod/editpost.php:134 ../../include/conversation.php:1053 msgid "Public post" msgstr "Publiczny post" -#: ../../mod/editpost.php:134 ../../include/conversation.php:1016 +#: ../../mod/editpost.php:137 ../../include/conversation.php:1039 msgid "Set title" msgstr "Ustaw tytuł" -#: ../../mod/editpost.php:136 ../../include/conversation.php:1018 +#: ../../mod/editpost.php:139 ../../include/conversation.php:1041 msgid "Categories (comma-separated list)" msgstr "" -#: ../../mod/editpost.php:137 ../../include/conversation.php:1032 +#: ../../mod/editpost.php:140 ../../include/conversation.php:1055 msgid "Example: bob@example.com, mary@example.com" msgstr "Przykład: bob@example.com, mary@example.com" @@ -1046,7 +1083,7 @@ msgstr "Twój zidentyfikowany adres:" msgid "Submit Request" msgstr "Wyślij zgłoszenie" -#: ../../mod/uexport.php:9 ../../mod/settings.php:30 ../../include/nav.php:140 +#: ../../mod/uexport.php:9 ../../mod/settings.php:30 ../../include/nav.php:167 msgid "Account settings" msgstr "Ustawienia konta" @@ -1075,10 +1112,10 @@ msgid "Remove account" msgstr "Usuń konto" #: ../../mod/uexport.php:48 ../../mod/settings.php:74 -#: ../../mod/newmember.php:22 ../../mod/admin.php:824 ../../mod/admin.php:1029 +#: ../../mod/newmember.php:22 ../../mod/admin.php:824 ../../mod/admin.php:1033 #: ../../addon/dav/friendica/layout.fnk.php:225 #: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:537 -#: ../../view/theme/diabook/theme.php:658 ../../include/nav.php:140 +#: ../../view/theme/diabook/theme.php:658 ../../include/nav.php:167 #: ../../addon.old/dav/friendica/layout.fnk.php:225 #: ../../addon.old/mathjax/mathjax.php:36 msgid "Settings" @@ -1305,7 +1342,7 @@ msgstr "Błąd: moduł PHP mb_string jest wymagany ale nie jest zainstalowany" msgid "" "The web installer needs to be able to create a file called \".htconfig.php\"" " in the top folder of your web server and it is unable to do so." -msgstr "" +msgstr "Instalator WWW musi być w stanie utworzyć plik o nazwie \". Htconfig.php\" i nie jest w stanie tego zrobić." #: ../../mod/install.php:424 msgid "" @@ -1454,8 +1491,8 @@ msgstr "Brak słów-kluczy do wyszukania. Dodaj słowa-klucze do swojego domyśl msgid "is interested in:" msgstr "interesuje się:" -#: ../../mod/match.php:58 ../../mod/suggest.php:59 -#: ../../include/contact_widgets.php:9 ../../boot.php:1296 +#: ../../mod/match.php:58 ../../mod/suggest.php:88 +#: ../../include/contact_widgets.php:9 ../../boot.php:1317 msgid "Connect" msgstr "Połącz" @@ -1472,37 +1509,37 @@ msgstr "Dane prywatne nie są dostępne zdalnie " msgid "Visible to:" msgstr "Widoczne dla:" -#: ../../mod/content.php:119 ../../mod/network.php:594 +#: ../../mod/content.php:119 ../../mod/network.php:596 msgid "No such group" msgstr "Nie ma takiej grupy" -#: ../../mod/content.php:130 ../../mod/network.php:605 +#: ../../mod/content.php:130 ../../mod/network.php:607 msgid "Group is empty" msgstr "Grupa jest pusta" -#: ../../mod/content.php:134 ../../mod/network.php:609 +#: ../../mod/content.php:134 ../../mod/network.php:611 msgid "Group: " msgstr "Grupa:" #: ../../mod/content.php:438 ../../mod/content.php:740 -#: ../../include/conversation.php:568 ../../object/Item.php:119 +#: ../../include/conversation.php:569 ../../object/Item.php:119 msgid "Select" msgstr "Wybierz" #: ../../mod/content.php:472 ../../mod/content.php:852 -#: ../../mod/content.php:853 ../../include/conversation.php:608 +#: ../../mod/content.php:853 ../../include/conversation.php:609 #: ../../object/Item.php:258 ../../object/Item.php:259 #, php-format msgid "View %s's profile @ %s" msgstr "Pokaż %s's profil @ %s" #: ../../mod/content.php:482 ../../mod/content.php:864 -#: ../../include/conversation.php:628 ../../object/Item.php:272 +#: ../../include/conversation.php:629 ../../object/Item.php:272 #, php-format msgid "%s from %s" msgstr "%s od %s" -#: ../../mod/content.php:497 ../../include/conversation.php:643 +#: ../../mod/content.php:497 ../../include/conversation.php:644 msgid "View in context" msgstr "Zobacz w kontekście" @@ -1514,7 +1551,7 @@ msgstr[0] " %d komentarz" msgstr[1] " %d komentarzy" msgstr[2] " %d komentarzy" -#: ../../mod/content.php:605 ../../include/text.php:1502 +#: ../../mod/content.php:605 ../../include/text.php:1514 #: ../../object/Item.php:315 ../../object/Item.php:328 msgid "comment" msgid_plural "comments" @@ -1608,11 +1645,11 @@ msgstr "do" #: ../../mod/content.php:855 ../../object/Item.php:262 msgid "Wall-to-Wall" -msgstr "" +msgstr "Wall-to-Wall" #: ../../mod/content.php:856 ../../object/Item.php:263 msgid "via Wall-To-Wall:" -msgstr "" +msgstr "via Wall-To-Wall:" #: ../../mod/home.php:34 ../../addon/communityhome/communityhome.php:189 #: ../../addon.old/communityhome/communityhome.php:179 @@ -1630,8 +1667,8 @@ msgid "Discard" msgstr "Odrzuć" #: ../../mod/notifications.php:51 ../../mod/notifications.php:164 -#: ../../mod/notifications.php:210 ../../mod/contacts.php:325 -#: ../../mod/contacts.php:379 +#: ../../mod/notifications.php:210 ../../mod/contacts.php:359 +#: ../../mod/contacts.php:413 msgid "Ignore" msgstr "Ignoruj" @@ -1639,7 +1676,7 @@ msgstr "Ignoruj" msgid "System" msgstr "System" -#: ../../mod/notifications.php:83 ../../include/nav.php:113 +#: ../../mod/notifications.php:83 ../../include/nav.php:140 msgid "Network" msgstr "Sieć" @@ -1648,16 +1685,16 @@ msgid "Personal" msgstr "Osobiste" #: ../../mod/notifications.php:93 ../../view/theme/diabook/theme.php:87 -#: ../../include/nav.php:77 ../../include/nav.php:116 +#: ../../include/nav.php:104 ../../include/nav.php:143 msgid "Home" msgstr "Dom" -#: ../../mod/notifications.php:98 ../../include/nav.php:122 +#: ../../mod/notifications.php:98 ../../include/nav.php:149 msgid "Introductions" msgstr "Wstępy" -#: ../../mod/notifications.php:103 ../../mod/message.php:180 -#: ../../include/nav.php:129 +#: ../../mod/notifications.php:103 ../../mod/message.php:182 +#: ../../include/nav.php:156 msgid "Messages" msgstr "Wiadomości" @@ -1683,7 +1720,7 @@ msgid "suggested by %s" msgstr "zaproponowane przez %s" #: ../../mod/notifications.php:157 ../../mod/notifications.php:204 -#: ../../mod/contacts.php:385 +#: ../../mod/contacts.php:419 msgid "Hide this contact from others" msgstr "Ukryj ten kontakt przed innymi" @@ -1740,7 +1777,7 @@ msgstr "Nowy obserwator" msgid "No introductions." msgstr "Brak wstępu." -#: ../../mod/notifications.php:220 ../../include/nav.php:123 +#: ../../mod/notifications.php:220 ../../include/nav.php:150 msgid "Notifications" msgstr "Powiadomienia" @@ -1841,51 +1878,55 @@ msgstr "Kontakt został zarchiwizowany" msgid "Contact has been unarchived" msgstr "" -#: ../../mod/contacts.php:233 +#: ../../mod/contacts.php:244 +msgid "Do you really want to delete this contact?" +msgstr "" + +#: ../../mod/contacts.php:263 msgid "Contact has been removed." msgstr "Kontakt został usunięty." -#: ../../mod/contacts.php:267 +#: ../../mod/contacts.php:301 #, php-format msgid "You are mutual friends with %s" msgstr "Jesteś już znajomym z %s" -#: ../../mod/contacts.php:271 +#: ../../mod/contacts.php:305 #, php-format msgid "You are sharing with %s" msgstr "Współdzielisz z %s" -#: ../../mod/contacts.php:276 +#: ../../mod/contacts.php:310 #, php-format msgid "%s is sharing with you" msgstr "%s współdzieli z tobą" -#: ../../mod/contacts.php:293 +#: ../../mod/contacts.php:327 msgid "Private communications are not available for this contact." msgstr "Prywatna rozmowa jest niemożliwa dla tego kontaktu" -#: ../../mod/contacts.php:296 +#: ../../mod/contacts.php:330 msgid "Never" msgstr "Nigdy" -#: ../../mod/contacts.php:300 +#: ../../mod/contacts.php:334 msgid "(Update was successful)" msgstr "(Aktualizacja przebiegła pomyślnie)" -#: ../../mod/contacts.php:300 +#: ../../mod/contacts.php:334 msgid "(Update was not successful)" msgstr "(Aktualizacja nie powiodła się)" -#: ../../mod/contacts.php:302 +#: ../../mod/contacts.php:336 msgid "Suggest friends" msgstr "Osoby, które możesz znać" -#: ../../mod/contacts.php:306 +#: ../../mod/contacts.php:340 #, php-format msgid "Network type: %s" msgstr "Typ sieci: %s" -#: ../../mod/contacts.php:309 ../../include/contact_widgets.php:199 +#: ../../mod/contacts.php:343 ../../include/contact_widgets.php:199 #, php-format msgid "%d contact in common" msgid_plural "%d contacts in common" @@ -1893,221 +1934,221 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: ../../mod/contacts.php:314 +#: ../../mod/contacts.php:348 msgid "View all contacts" msgstr "Zobacz wszystkie kontakty" -#: ../../mod/contacts.php:319 ../../mod/contacts.php:378 +#: ../../mod/contacts.php:353 ../../mod/contacts.php:412 #: ../../mod/admin.php:737 msgid "Unblock" msgstr "Odblokuj" -#: ../../mod/contacts.php:319 ../../mod/contacts.php:378 +#: ../../mod/contacts.php:353 ../../mod/contacts.php:412 #: ../../mod/admin.php:736 msgid "Block" msgstr "Zablokuj" -#: ../../mod/contacts.php:322 +#: ../../mod/contacts.php:356 msgid "Toggle Blocked status" msgstr "" -#: ../../mod/contacts.php:325 ../../mod/contacts.php:379 +#: ../../mod/contacts.php:359 ../../mod/contacts.php:413 msgid "Unignore" msgstr "Odblokuj" -#: ../../mod/contacts.php:328 +#: ../../mod/contacts.php:362 msgid "Toggle Ignored status" msgstr "" -#: ../../mod/contacts.php:332 +#: ../../mod/contacts.php:366 msgid "Unarchive" msgstr "" -#: ../../mod/contacts.php:332 +#: ../../mod/contacts.php:366 msgid "Archive" msgstr "Archiwum" -#: ../../mod/contacts.php:335 +#: ../../mod/contacts.php:369 msgid "Toggle Archive status" msgstr "" -#: ../../mod/contacts.php:338 +#: ../../mod/contacts.php:372 msgid "Repair" msgstr "Napraw" -#: ../../mod/contacts.php:341 +#: ../../mod/contacts.php:375 msgid "Advanced Contact Settings" msgstr "Zaawansowane ustawienia kontaktów" -#: ../../mod/contacts.php:347 +#: ../../mod/contacts.php:381 msgid "Communications lost with this contact!" msgstr "" -#: ../../mod/contacts.php:350 +#: ../../mod/contacts.php:384 msgid "Contact Editor" msgstr "Edytor kontaktów" -#: ../../mod/contacts.php:353 +#: ../../mod/contacts.php:387 msgid "Profile Visibility" msgstr "Widoczność profilu" -#: ../../mod/contacts.php:354 +#: ../../mod/contacts.php:388 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " "profile securely." msgstr "Wybierz profil, który chcesz bezpiecznie wyświetlić %s" -#: ../../mod/contacts.php:355 +#: ../../mod/contacts.php:389 msgid "Contact Information / Notes" msgstr "Informacja o kontakcie / Notka" -#: ../../mod/contacts.php:356 +#: ../../mod/contacts.php:390 msgid "Edit contact notes" msgstr "Edytuj notatki kontaktu" -#: ../../mod/contacts.php:361 ../../mod/contacts.php:553 +#: ../../mod/contacts.php:395 ../../mod/contacts.php:585 #: ../../mod/viewcontacts.php:62 ../../mod/nogroup.php:40 #, php-format msgid "Visit %s's profile [%s]" msgstr "Obejrzyj %s's profil [%s]" -#: ../../mod/contacts.php:362 +#: ../../mod/contacts.php:396 msgid "Block/Unblock contact" msgstr "Zablokuj/odblokuj kontakt" -#: ../../mod/contacts.php:363 +#: ../../mod/contacts.php:397 msgid "Ignore contact" msgstr "Ignoruj kontakt" -#: ../../mod/contacts.php:364 +#: ../../mod/contacts.php:398 msgid "Repair URL settings" msgstr "Napraw ustawienia adresu" -#: ../../mod/contacts.php:365 +#: ../../mod/contacts.php:399 msgid "View conversations" msgstr "Zobacz rozmowę" -#: ../../mod/contacts.php:367 +#: ../../mod/contacts.php:401 msgid "Delete contact" msgstr "Usuń kontakt" -#: ../../mod/contacts.php:371 +#: ../../mod/contacts.php:405 msgid "Last update:" msgstr "Ostatnia aktualizacja:" -#: ../../mod/contacts.php:373 +#: ../../mod/contacts.php:407 msgid "Update public posts" msgstr "Zaktualizuj publiczne posty" -#: ../../mod/contacts.php:375 ../../mod/admin.php:1209 +#: ../../mod/contacts.php:409 ../../mod/admin.php:1213 msgid "Update now" msgstr "Aktualizuj teraz" -#: ../../mod/contacts.php:382 +#: ../../mod/contacts.php:416 msgid "Currently blocked" msgstr "Obecnie zablokowany" -#: ../../mod/contacts.php:383 +#: ../../mod/contacts.php:417 msgid "Currently ignored" msgstr "Obecnie zignorowany" -#: ../../mod/contacts.php:384 +#: ../../mod/contacts.php:418 msgid "Currently archived" msgstr "Obecnie zarchiwizowany" -#: ../../mod/contacts.php:385 +#: ../../mod/contacts.php:419 msgid "" "Replies/likes to your public posts may still be visible" msgstr "Odpowiedzi/kliknięcia \"lubię to\" do twoich publicznych postów nadal mogą być widoczne" -#: ../../mod/contacts.php:438 +#: ../../mod/contacts.php:470 msgid "Suggestions" msgstr "Sugestie" -#: ../../mod/contacts.php:441 +#: ../../mod/contacts.php:473 msgid "Suggest potential friends" msgstr "Sugerowani znajomi" -#: ../../mod/contacts.php:444 ../../mod/group.php:194 +#: ../../mod/contacts.php:476 ../../mod/group.php:194 msgid "All Contacts" msgstr "Wszystkie kontakty" -#: ../../mod/contacts.php:447 +#: ../../mod/contacts.php:479 msgid "Show all contacts" msgstr "Pokaż wszystkie kontakty" -#: ../../mod/contacts.php:450 +#: ../../mod/contacts.php:482 msgid "Unblocked" msgstr "Odblokowany" -#: ../../mod/contacts.php:453 +#: ../../mod/contacts.php:485 msgid "Only show unblocked contacts" msgstr "Pokaż tylko odblokowane kontakty" -#: ../../mod/contacts.php:457 +#: ../../mod/contacts.php:489 msgid "Blocked" msgstr "Zablokowany" -#: ../../mod/contacts.php:460 +#: ../../mod/contacts.php:492 msgid "Only show blocked contacts" msgstr "Pokaż tylko zablokowane kontakty" -#: ../../mod/contacts.php:464 +#: ../../mod/contacts.php:496 msgid "Ignored" msgstr "Zignorowany" -#: ../../mod/contacts.php:467 +#: ../../mod/contacts.php:499 msgid "Only show ignored contacts" msgstr "Pokaż tylko ignorowane kontakty" -#: ../../mod/contacts.php:471 +#: ../../mod/contacts.php:503 msgid "Archived" msgstr "" -#: ../../mod/contacts.php:474 +#: ../../mod/contacts.php:506 msgid "Only show archived contacts" msgstr "Pokaż tylko zarchiwizowane kontakty" -#: ../../mod/contacts.php:478 +#: ../../mod/contacts.php:510 msgid "Hidden" msgstr "Ukryty" -#: ../../mod/contacts.php:481 +#: ../../mod/contacts.php:513 msgid "Only show hidden contacts" msgstr "Pokaż tylko ukryte kontakty" -#: ../../mod/contacts.php:529 +#: ../../mod/contacts.php:561 msgid "Mutual Friendship" msgstr "Wzajemna przyjaźń" -#: ../../mod/contacts.php:533 +#: ../../mod/contacts.php:565 msgid "is a fan of yours" msgstr "jest twoim fanem" -#: ../../mod/contacts.php:537 +#: ../../mod/contacts.php:569 msgid "you are a fan of" msgstr "jesteś fanem" -#: ../../mod/contacts.php:554 ../../mod/nogroup.php:41 +#: ../../mod/contacts.php:586 ../../mod/nogroup.php:41 msgid "Edit contact" msgstr "Edytuj kontakt" -#: ../../mod/contacts.php:575 ../../view/theme/diabook/theme.php:89 -#: ../../include/nav.php:144 +#: ../../mod/contacts.php:607 ../../view/theme/diabook/theme.php:89 +#: ../../include/nav.php:171 msgid "Contacts" msgstr "Kontakty" -#: ../../mod/contacts.php:579 +#: ../../mod/contacts.php:611 msgid "Search your contacts" msgstr "Wyszukaj w kontaktach" -#: ../../mod/contacts.php:580 ../../mod/directory.php:59 +#: ../../mod/contacts.php:612 ../../mod/directory.php:59 #: ../../addon/forumdirectory/forumdirectory.php:81 msgid "Finding: " msgstr "Znalezione:" -#: ../../mod/contacts.php:581 ../../mod/directory.php:61 +#: ../../mod/contacts.php:613 ../../mod/directory.php:61 #: ../../addon/forumdirectory/forumdirectory.php:83 #: ../../include/contact_widgets.php:33 msgid "Find" @@ -2132,7 +2173,7 @@ msgid "" "Password reset failed." msgstr "Prośba nie może być zweryfikowana. (Mogłeś już ją poprzednio wysłać.) Reset hasła nie powiódł się." -#: ../../mod/lostpass.php:84 ../../boot.php:1030 +#: ../../mod/lostpass.php:84 ../../boot.php:1051 msgid "Password Reset" msgstr "Zresetuj hasło" @@ -2251,7 +2292,7 @@ msgstr "" #: ../../addon/impressum/impressum.php:78 #: ../../addon/openstreetmap/openstreetmap.php:104 #: ../../addon/altpager/altpager.php:107 ../../addon/mathjax/mathjax.php:66 -#: ../../addon/piwik/piwik.php:105 ../../addon/twitter/twitter.php:548 +#: ../../addon/piwik/piwik.php:105 ../../addon/twitter/twitter.php:550 #: ../../addon.old/facebook/facebook.php:495 #: ../../addon.old/fbpost/fbpost.php:144 #: ../../addon.old/impressum/impressum.php:78 @@ -2582,149 +2623,161 @@ msgstr "Wygasające zdjęcia:" msgid "Only expire posts by others:" msgstr "" -#: ../../mod/settings.php:1016 +#: ../../mod/settings.php:1035 msgid "Account Settings" msgstr "Ustawienia konta" -#: ../../mod/settings.php:1024 +#: ../../mod/settings.php:1043 msgid "Password Settings" msgstr "Ustawienia hasła" -#: ../../mod/settings.php:1025 +#: ../../mod/settings.php:1044 msgid "New Password:" msgstr "Nowe hasło:" -#: ../../mod/settings.php:1026 +#: ../../mod/settings.php:1045 msgid "Confirm:" msgstr "Potwierdź:" -#: ../../mod/settings.php:1026 +#: ../../mod/settings.php:1045 msgid "Leave password fields blank unless changing" msgstr "Pozostaw pola hasła puste, chyba że chcesz je zmienić." -#: ../../mod/settings.php:1030 +#: ../../mod/settings.php:1049 msgid "Basic Settings" msgstr "Ustawienia podstawowe" -#: ../../mod/settings.php:1031 ../../include/profile_advanced.php:15 +#: ../../mod/settings.php:1050 ../../include/profile_advanced.php:15 msgid "Full Name:" msgstr "Imię i nazwisko:" -#: ../../mod/settings.php:1032 +#: ../../mod/settings.php:1051 msgid "Email Address:" msgstr "Adres email:" -#: ../../mod/settings.php:1033 +#: ../../mod/settings.php:1052 msgid "Your Timezone:" msgstr "Twoja strefa czasowa:" -#: ../../mod/settings.php:1034 +#: ../../mod/settings.php:1053 msgid "Default Post Location:" msgstr "Standardowa lokalizacja wiadomości:" -#: ../../mod/settings.php:1035 +#: ../../mod/settings.php:1054 msgid "Use Browser Location:" msgstr "Użyj położenia przeglądarki:" -#: ../../mod/settings.php:1038 +#: ../../mod/settings.php:1057 msgid "Security and Privacy Settings" msgstr "Ustawienia bezpieczeństwa i prywatności" -#: ../../mod/settings.php:1040 +#: ../../mod/settings.php:1059 msgid "Maximum Friend Requests/Day:" msgstr "Maksymalna liczba zaproszeń do grona przyjaciół na dzień:" -#: ../../mod/settings.php:1040 ../../mod/settings.php:1059 +#: ../../mod/settings.php:1059 ../../mod/settings.php:1089 msgid "(to prevent spam abuse)" msgstr "(aby zapobiec spamowaniu)" -#: ../../mod/settings.php:1041 +#: ../../mod/settings.php:1060 msgid "Default Post Permissions" msgstr "Domyślne prawa dostępu wiadomości" -#: ../../mod/settings.php:1042 +#: ../../mod/settings.php:1061 msgid "(click to open/close)" msgstr "(kliknij by otworzyć/zamknąć)" -#: ../../mod/settings.php:1059 +#: ../../mod/settings.php:1072 +msgid "Default Private Post" +msgstr "" + +#: ../../mod/settings.php:1073 +msgid "Default Public Post" +msgstr "" + +#: ../../mod/settings.php:1077 +msgid "Default Permissions for New Posts" +msgstr "" + +#: ../../mod/settings.php:1089 msgid "Maximum private messages per day from unknown people:" msgstr "" -#: ../../mod/settings.php:1062 +#: ../../mod/settings.php:1092 msgid "Notification Settings" msgstr "Ustawienia powiadomień" -#: ../../mod/settings.php:1063 +#: ../../mod/settings.php:1093 msgid "By default post a status message when:" msgstr "" -#: ../../mod/settings.php:1064 +#: ../../mod/settings.php:1094 msgid "accepting a friend request" msgstr "" -#: ../../mod/settings.php:1065 +#: ../../mod/settings.php:1095 msgid "joining a forum/community" msgstr "" -#: ../../mod/settings.php:1066 +#: ../../mod/settings.php:1096 msgid "making an interesting profile change" msgstr "" -#: ../../mod/settings.php:1067 +#: ../../mod/settings.php:1097 msgid "Send a notification email when:" msgstr "Wyślij powiadmonienia na email, kiedy:" -#: ../../mod/settings.php:1068 +#: ../../mod/settings.php:1098 msgid "You receive an introduction" msgstr "Otrzymałeś zaproszenie" -#: ../../mod/settings.php:1069 +#: ../../mod/settings.php:1099 msgid "Your introductions are confirmed" msgstr "Dane zatwierdzone" -#: ../../mod/settings.php:1070 +#: ../../mod/settings.php:1100 msgid "Someone writes on your profile wall" msgstr "Ktoś pisze na twojej ścianie profilowej" -#: ../../mod/settings.php:1071 +#: ../../mod/settings.php:1101 msgid "Someone writes a followup comment" msgstr "Ktoś pisze komentarz nawiązujący." -#: ../../mod/settings.php:1072 +#: ../../mod/settings.php:1102 msgid "You receive a private message" msgstr "Otrzymałeś prywatną wiadomość" -#: ../../mod/settings.php:1073 +#: ../../mod/settings.php:1103 msgid "You receive a friend suggestion" msgstr "Otrzymane propozycje znajomych" -#: ../../mod/settings.php:1074 +#: ../../mod/settings.php:1104 msgid "You are tagged in a post" msgstr "Jesteś oznaczony w poście" -#: ../../mod/settings.php:1075 +#: ../../mod/settings.php:1105 msgid "You are poked/prodded/etc. in a post" msgstr "" -#: ../../mod/settings.php:1078 +#: ../../mod/settings.php:1108 msgid "Advanced Account/Page Type Settings" msgstr "" -#: ../../mod/settings.php:1079 +#: ../../mod/settings.php:1109 msgid "Change the behaviour of this account for special situations" msgstr "" -#: ../../mod/manage.php:94 +#: ../../mod/manage.php:106 msgid "Manage Identities and/or Pages" msgstr "Zarządzaj Tożsamościami i/lub Stronami." -#: ../../mod/manage.php:97 +#: ../../mod/manage.php:107 msgid "" "Toggle between different identities or community/group pages which share " "your account details or which you have been granted \"manage\" permissions" msgstr "" -#: ../../mod/manage.php:99 +#: ../../mod/manage.php:108 msgid "Select an identity to manage: " msgstr "Wybierz tożsamość do zarządzania:" @@ -2802,19 +2855,19 @@ msgstr[2] "Uwaga: Ta grupa posiada %s członków z niezabezpieczonej sieci." msgid "Private messages to this group are at risk of public disclosure." msgstr "Prywatne wiadomości do tej grupy mogą zostać publicznego ujawnienia" -#: ../../mod/network.php:619 +#: ../../mod/network.php:621 msgid "Contact: " msgstr "Kontakt: " -#: ../../mod/network.php:621 +#: ../../mod/network.php:623 msgid "Private messages to this person are at risk of public disclosure." msgstr "Prywatne wiadomości do tej osoby mogą zostać publicznie ujawnione " -#: ../../mod/network.php:626 +#: ../../mod/network.php:628 msgid "Invalid contact." msgstr "Zły kontakt" -#: ../../mod/notes.php:44 ../../boot.php:1843 +#: ../../mod/notes.php:44 ../../boot.php:1864 msgid "Personal Notes" msgstr "Osobiste notatki" @@ -2902,36 +2955,36 @@ msgstr "Wysłano." msgid "No recipient." msgstr "Brak odbiorcy." -#: ../../mod/wallmessage.php:123 ../../mod/wallmessage.php:131 -#: ../../mod/message.php:249 ../../mod/message.php:257 -#: ../../mod/message.php:429 ../../mod/message.php:437 -#: ../../include/conversation.php:936 ../../include/conversation.php:954 +#: ../../mod/wallmessage.php:127 ../../mod/wallmessage.php:135 +#: ../../mod/message.php:283 ../../mod/message.php:291 +#: ../../mod/message.php:466 ../../mod/message.php:474 +#: ../../include/conversation.php:940 ../../include/conversation.php:958 msgid "Please enter a link URL:" msgstr "Proszę wpisać adres URL:" -#: ../../mod/wallmessage.php:138 ../../mod/message.php:285 +#: ../../mod/wallmessage.php:142 ../../mod/message.php:319 msgid "Send Private Message" msgstr "Wyślij prywatną wiadomość" -#: ../../mod/wallmessage.php:139 +#: ../../mod/wallmessage.php:143 #, php-format msgid "" "If you wish for %s to respond, please check that the privacy settings on " "your site allow private mail from unknown senders." msgstr "" -#: ../../mod/wallmessage.php:140 ../../mod/message.php:286 -#: ../../mod/message.php:516 +#: ../../mod/wallmessage.php:144 ../../mod/message.php:320 +#: ../../mod/message.php:553 msgid "To:" msgstr "Do:" -#: ../../mod/wallmessage.php:141 ../../mod/message.php:291 -#: ../../mod/message.php:518 +#: ../../mod/wallmessage.php:145 ../../mod/message.php:325 +#: ../../mod/message.php:555 msgid "Subject:" msgstr "Temat:" -#: ../../mod/wallmessage.php:147 ../../mod/message.php:295 -#: ../../mod/message.php:521 ../../mod/invite.php:115 +#: ../../mod/wallmessage.php:151 ../../mod/message.php:329 +#: ../../mod/message.php:558 ../../mod/invite.php:134 msgid "Your message:" msgstr "Twoja wiadomość:" @@ -2987,8 +3040,8 @@ msgstr "" #: ../../mod/newmember.php:32 ../../mod/profperm.php:103 #: ../../view/theme/diabook/theme.php:88 ../../include/profile_advanced.php:7 -#: ../../include/profile_advanced.php:84 ../../include/nav.php:50 -#: ../../boot.php:1819 +#: ../../include/profile_advanced.php:84 ../../include/nav.php:77 +#: ../../boot.php:1840 msgid "Profile" msgstr "Profil" @@ -3159,7 +3212,7 @@ msgstr "Nie znaleziono grupy" msgid "Group name changed." msgstr "Nazwa grupy zmieniona" -#: ../../mod/group.php:72 ../../mod/profperm.php:19 ../../index.php:339 +#: ../../mod/group.php:72 ../../mod/profperm.php:19 ../../index.php:340 msgid "Permission denied" msgstr "Odmowa dostępu" @@ -3293,7 +3346,7 @@ msgstr "Wybierz login. Login musi zaczynać się literą. Adres twojego profilu msgid "Choose a nickname: " msgstr "Wybierz pseudonim:" -#: ../../mod/register.php:275 ../../include/nav.php:81 ../../boot.php:991 +#: ../../mod/register.php:275 ../../include/nav.php:108 ../../boot.php:1012 msgid "Register" msgstr "Zarejestruj" @@ -3301,40 +3354,40 @@ msgstr "Zarejestruj" msgid "People Search" msgstr "Szukaj osób" -#: ../../mod/like.php:145 ../../mod/subthread.php:87 ../../mod/tagger.php:62 +#: ../../mod/like.php:151 ../../mod/subthread.php:87 ../../mod/tagger.php:62 #: ../../addon/communityhome/communityhome.php:171 -#: ../../view/theme/diabook/theme.php:464 ../../include/text.php:1498 -#: ../../include/diaspora.php:1860 ../../include/conversation.php:125 -#: ../../include/conversation.php:253 +#: ../../view/theme/diabook/theme.php:464 ../../include/text.php:1510 +#: ../../include/diaspora.php:1860 ../../include/conversation.php:126 +#: ../../include/conversation.php:254 #: ../../addon.old/communityhome/communityhome.php:163 msgid "photo" msgstr "zdjęcie" -#: ../../mod/like.php:145 ../../mod/like.php:298 ../../mod/subthread.php:87 +#: ../../mod/like.php:151 ../../mod/like.php:322 ../../mod/subthread.php:87 #: ../../mod/tagger.php:62 ../../addon/facebook/facebook.php:1600 #: ../../addon/communityhome/communityhome.php:166 #: ../../addon/communityhome/communityhome.php:175 #: ../../view/theme/diabook/theme.php:459 #: ../../view/theme/diabook/theme.php:468 ../../include/diaspora.php:1860 -#: ../../include/conversation.php:120 ../../include/conversation.php:129 -#: ../../include/conversation.php:248 ../../include/conversation.php:257 +#: ../../include/conversation.php:121 ../../include/conversation.php:130 +#: ../../include/conversation.php:249 ../../include/conversation.php:258 #: ../../addon.old/facebook/facebook.php:1598 #: ../../addon.old/communityhome/communityhome.php:158 #: ../../addon.old/communityhome/communityhome.php:167 msgid "status" msgstr "status" -#: ../../mod/like.php:162 ../../addon/facebook/facebook.php:1604 +#: ../../mod/like.php:168 ../../addon/facebook/facebook.php:1604 #: ../../addon/communityhome/communityhome.php:180 #: ../../view/theme/diabook/theme.php:473 ../../include/diaspora.php:1876 -#: ../../include/conversation.php:136 +#: ../../include/conversation.php:137 #: ../../addon.old/facebook/facebook.php:1602 #: ../../addon.old/communityhome/communityhome.php:172 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s lubi %2$s's %3$s" -#: ../../mod/like.php:164 ../../include/conversation.php:139 +#: ../../mod/like.php:170 ../../include/conversation.php:140 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s nie lubi %2$s's %3$s" @@ -3350,7 +3403,7 @@ msgid "Access denied." msgstr "Brak dostępu" #: ../../mod/fbrowser.php:25 ../../view/theme/diabook/theme.php:90 -#: ../../include/nav.php:51 ../../boot.php:1826 +#: ../../include/nav.php:78 ../../boot.php:1847 msgid "Photos" msgstr "Zdjęcia" @@ -3375,44 +3428,44 @@ msgstr "Proszę się zalogować." msgid "Unable to locate original post." msgstr "Nie można zlokalizować oryginalnej wiadomości." -#: ../../mod/item.php:288 +#: ../../mod/item.php:292 msgid "Empty post discarded." msgstr "Pusty wpis wyrzucony." -#: ../../mod/item.php:424 ../../mod/wall_upload.php:135 +#: ../../mod/item.php:428 ../../mod/wall_upload.php:135 #: ../../mod/wall_upload.php:144 ../../mod/wall_upload.php:151 #: ../../include/message.php:144 msgid "Wall Photos" msgstr "Tablica zdjęć" -#: ../../mod/item.php:837 +#: ../../mod/item.php:841 msgid "System error. Post not saved." msgstr "Błąd. Post niezapisany." -#: ../../mod/item.php:862 +#: ../../mod/item.php:866 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendica social " "network." msgstr "Wiadomość została wysłana do ciebie od %s , członka portalu Friendica" -#: ../../mod/item.php:864 +#: ../../mod/item.php:868 #, php-format msgid "You may visit them online at %s" msgstr "Możesz ich odwiedzić online u %s" -#: ../../mod/item.php:865 +#: ../../mod/item.php:869 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." msgstr "Skontaktuj się z nadawcą odpowiadając na ten post jeśli nie chcesz otrzymywać tych wiadomości." -#: ../../mod/item.php:867 +#: ../../mod/item.php:871 #, php-format msgid "%s posted an update." msgstr "%s zaktualizował wpis." -#: ../../mod/mood.php:62 ../../include/conversation.php:226 +#: ../../mod/mood.php:62 ../../include/conversation.php:227 #, php-format msgid "%1$s is currently %2$s" msgstr "" @@ -3506,7 +3559,15 @@ msgstr "Kompletne usunięcie konta. Jeżeli zostanie wykonane, konto nie może z msgid "Please enter your password for verification:" msgstr "Wprowadź hasło w celu weryfikacji." -#: ../../mod/message.php:9 ../../include/nav.php:132 +#: ../../mod/navigation.php:20 ../../include/nav.php:34 +msgid "Nothing new here" +msgstr "Brak nowych zdarzeń" + +#: ../../mod/navigation.php:24 ../../include/nav.php:38 +msgid "Clear notifications" +msgstr "" + +#: ../../mod/message.php:9 ../../include/nav.php:159 msgid "New Message" msgstr "Nowa wiadomość" @@ -3514,42 +3575,46 @@ msgstr "Nowa wiadomość" msgid "Unable to locate contact information." msgstr "Niezdolny do uzyskania informacji kontaktowych." -#: ../../mod/message.php:195 +#: ../../mod/message.php:207 +msgid "Do you really want to delete this message?" +msgstr "" + +#: ../../mod/message.php:227 msgid "Message deleted." msgstr "Wiadomość usunięta." -#: ../../mod/message.php:225 +#: ../../mod/message.php:258 msgid "Conversation removed." msgstr "Rozmowa usunięta." -#: ../../mod/message.php:334 +#: ../../mod/message.php:371 msgid "No messages." msgstr "Brak wiadomości." -#: ../../mod/message.php:341 +#: ../../mod/message.php:378 #, php-format msgid "Unknown sender - %s" msgstr "" -#: ../../mod/message.php:344 +#: ../../mod/message.php:381 #, php-format msgid "You and %s" msgstr "Ty i %s" -#: ../../mod/message.php:347 +#: ../../mod/message.php:384 #, php-format msgid "%s and You" msgstr "%s i ty" -#: ../../mod/message.php:368 ../../mod/message.php:509 +#: ../../mod/message.php:405 ../../mod/message.php:546 msgid "Delete conversation" msgstr "Usuń rozmowę" -#: ../../mod/message.php:371 +#: ../../mod/message.php:408 msgid "D, d M Y - g:i A" msgstr "D, d M R - g:m AM/PM" -#: ../../mod/message.php:374 +#: ../../mod/message.php:411 #, php-format msgid "%d message" msgid_plural "%d messages" @@ -3557,21 +3622,21 @@ msgstr[0] " %d wiadomość" msgstr[1] " %d wiadomości" msgstr[2] " %d wiadomości" -#: ../../mod/message.php:413 +#: ../../mod/message.php:450 msgid "Message not available." msgstr "Wiadomość nie jest dostępna." -#: ../../mod/message.php:483 +#: ../../mod/message.php:520 msgid "Delete message" msgstr "Usuń wiadomość" -#: ../../mod/message.php:511 +#: ../../mod/message.php:548 msgid "" "No secure communications available. You may be able to " "respond from the sender's profile page." msgstr "" -#: ../../mod/message.php:515 +#: ../../mod/message.php:552 msgid "Send Reply" msgstr "Odpowiedz" @@ -3600,7 +3665,7 @@ msgstr "Użytkownicy" msgid "Plugins" msgstr "Wtyczki" -#: ../../mod/admin.php:99 ../../mod/admin.php:1027 ../../mod/admin.php:1063 +#: ../../mod/admin.php:99 ../../mod/admin.php:1031 ../../mod/admin.php:1067 msgid "Themes" msgstr "Temat" @@ -3608,11 +3673,11 @@ msgstr "Temat" msgid "DB updates" msgstr "" -#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1150 +#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1154 msgid "Logs" msgstr "Logi" -#: ../../mod/admin.php:120 ../../include/nav.php:151 +#: ../../mod/admin.php:120 ../../include/nav.php:178 msgid "Admin" msgstr "Administator" @@ -3630,7 +3695,7 @@ msgstr "Konto normalne" #: ../../mod/admin.php:184 ../../mod/admin.php:699 msgid "Soapbox Account" -msgstr "" +msgstr "Konto Soapbox" #: ../../mod/admin.php:185 ../../mod/admin.php:700 msgid "Community/Celebrity Account" @@ -3653,8 +3718,8 @@ msgid "Message queues" msgstr "" #: ../../mod/admin.php:212 ../../mod/admin.php:459 ../../mod/admin.php:726 -#: ../../mod/admin.php:821 ../../mod/admin.php:863 ../../mod/admin.php:1026 -#: ../../mod/admin.php:1062 ../../mod/admin.php:1149 +#: ../../mod/admin.php:821 ../../mod/admin.php:863 ../../mod/admin.php:1030 +#: ../../mod/admin.php:1066 ../../mod/admin.php:1153 msgid "Administration" msgstr "Administracja" @@ -3992,7 +4057,7 @@ msgstr "URL Proxy" #: ../../mod/admin.php:504 msgid "Network timeout" -msgstr "" +msgstr "Network timeout" #: ../../mod/admin.php:504 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." @@ -4209,23 +4274,23 @@ msgstr "Wtyczka %s wyłączona." msgid "Plugin %s enabled." msgstr "Wtyczka %s właczona." -#: ../../mod/admin.php:799 ../../mod/admin.php:997 +#: ../../mod/admin.php:799 ../../mod/admin.php:1001 msgid "Disable" msgstr "Wyłącz" -#: ../../mod/admin.php:801 ../../mod/admin.php:999 +#: ../../mod/admin.php:801 ../../mod/admin.php:1003 msgid "Enable" msgstr "Zezwól" -#: ../../mod/admin.php:823 ../../mod/admin.php:1028 +#: ../../mod/admin.php:823 ../../mod/admin.php:1032 msgid "Toggle" msgstr "Włącz" -#: ../../mod/admin.php:831 ../../mod/admin.php:1038 +#: ../../mod/admin.php:831 ../../mod/admin.php:1042 msgid "Author: " msgstr "Autor: " -#: ../../mod/admin.php:832 ../../mod/admin.php:1039 +#: ../../mod/admin.php:832 ../../mod/admin.php:1043 msgid "Maintainer: " msgstr "" @@ -4233,65 +4298,65 @@ msgstr "" msgid "No themes found." msgstr "Nie znaleziono tematu." -#: ../../mod/admin.php:1020 +#: ../../mod/admin.php:1024 msgid "Screenshot" msgstr "Zrzut ekranu" -#: ../../mod/admin.php:1068 +#: ../../mod/admin.php:1072 msgid "[Experimental]" msgstr "[Eksperymentalne]" -#: ../../mod/admin.php:1069 +#: ../../mod/admin.php:1073 msgid "[Unsupported]" msgstr "[Niewspieralne]" -#: ../../mod/admin.php:1096 +#: ../../mod/admin.php:1100 msgid "Log settings updated." msgstr "" -#: ../../mod/admin.php:1152 +#: ../../mod/admin.php:1156 msgid "Clear" msgstr "Wyczyść" -#: ../../mod/admin.php:1158 +#: ../../mod/admin.php:1162 msgid "Debugging" msgstr "Naprawianie" -#: ../../mod/admin.php:1159 +#: ../../mod/admin.php:1163 msgid "Log file" msgstr "Plik logów" -#: ../../mod/admin.php:1159 +#: ../../mod/admin.php:1163 msgid "" "Must be writable by web server. Relative to your Friendica top-level " "directory." msgstr "" -#: ../../mod/admin.php:1160 +#: ../../mod/admin.php:1164 msgid "Log level" msgstr "Poziom logów" -#: ../../mod/admin.php:1210 +#: ../../mod/admin.php:1214 msgid "Close" msgstr "Zamknij" -#: ../../mod/admin.php:1216 +#: ../../mod/admin.php:1220 msgid "FTP Host" msgstr "Założyciel FTP" -#: ../../mod/admin.php:1217 +#: ../../mod/admin.php:1221 msgid "FTP Path" msgstr "Ścieżka FTP" -#: ../../mod/admin.php:1218 +#: ../../mod/admin.php:1222 msgid "FTP User" msgstr "Użytkownik FTP" -#: ../../mod/admin.php:1219 +#: ../../mod/admin.php:1223 msgid "FTP Password" msgstr "FTP Hasło" -#: ../../mod/profile.php:21 ../../boot.php:1204 +#: ../../mod/profile.php:21 ../../boot.php:1225 msgid "Requested profile is not available." msgstr "Żądany profil jest niedostępny" @@ -4400,7 +4465,7 @@ msgid "No installed applications." msgstr "Brak zainstalowanych aplikacji." #: ../../mod/search.php:99 ../../include/text.php:738 -#: ../../include/text.php:739 ../../include/nav.php:91 +#: ../../include/text.php:739 ../../include/nav.php:118 msgid "Search" msgstr "Szukaj" @@ -4698,28 +4763,28 @@ msgstr "Wiek: " msgid "Edit/Manage Profiles" msgstr "Edytuj/Zarządzaj Profilami" -#: ../../mod/profiles.php:722 ../../boot.php:1324 +#: ../../mod/profiles.php:722 ../../boot.php:1345 msgid "Change profile photo" msgstr "Zmień zdjęcie profilowe" -#: ../../mod/profiles.php:723 ../../boot.php:1325 +#: ../../mod/profiles.php:723 ../../boot.php:1346 msgid "Create New Profile" msgstr "Stwórz nowy profil" -#: ../../mod/profiles.php:734 ../../boot.php:1335 +#: ../../mod/profiles.php:734 ../../boot.php:1356 msgid "Profile Image" msgstr "Obraz profilowy" -#: ../../mod/profiles.php:736 ../../boot.php:1338 +#: ../../mod/profiles.php:736 ../../boot.php:1359 msgid "visible to everybody" msgstr "widoczne dla wszystkich" -#: ../../mod/profiles.php:737 ../../boot.php:1339 +#: ../../mod/profiles.php:737 ../../boot.php:1360 msgid "Edit visibility" msgstr "Edytuj widoczność" -#: ../../mod/filer.php:30 ../../include/conversation.php:940 -#: ../../include/conversation.php:958 +#: ../../mod/filer.php:30 ../../include/conversation.php:944 +#: ../../include/conversation.php:962 msgid "Save to Folder:" msgstr "Zapisz w folderze:" @@ -4727,7 +4792,7 @@ msgstr "Zapisz w folderze:" msgid "- select -" msgstr "- wybierz -" -#: ../../mod/tagger.php:95 ../../include/conversation.php:265 +#: ../../mod/tagger.php:95 ../../include/conversation.php:266 #, php-format msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "%1$s zaznaczył %2$s'go %3$s przy użyciu %4$s" @@ -4736,7 +4801,7 @@ msgstr "%1$s zaznaczył %2$s'go %3$s przy użyciu %4$s" msgid "No potential page delegates located." msgstr "" -#: ../../mod/delegate.php:121 ../../include/nav.php:138 +#: ../../mod/delegate.php:121 ../../include/nav.php:165 msgid "Delegate Page Management" msgstr "" @@ -4815,18 +4880,22 @@ msgstr "" msgid "diaspora2bb: " msgstr "" -#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:520 +#: ../../mod/suggest.php:27 +msgid "Do you really want to delete this suggestion?" +msgstr "" + +#: ../../mod/suggest.php:66 ../../view/theme/diabook/theme.php:520 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "Osoby, które możesz znać" -#: ../../mod/suggest.php:44 +#: ../../mod/suggest.php:72 msgid "" "No suggestions available. If this is a new site, please try again in 24 " "hours." msgstr "" -#: ../../mod/suggest.php:61 +#: ../../mod/suggest.php:90 msgid "Ignore/Hide" msgstr "Ignoruj/Ukryj" @@ -4850,19 +4919,19 @@ msgstr "Płeć: " #: ../../mod/directory.php:136 #: ../../addon/forumdirectory/forumdirectory.php:158 -#: ../../include/profile_advanced.php:17 ../../boot.php:1360 +#: ../../include/profile_advanced.php:17 ../../boot.php:1381 msgid "Gender:" msgstr "Płeć:" #: ../../mod/directory.php:138 #: ../../addon/forumdirectory/forumdirectory.php:160 -#: ../../include/profile_advanced.php:37 ../../boot.php:1363 +#: ../../include/profile_advanced.php:37 ../../boot.php:1384 msgid "Status:" msgstr "Status" #: ../../mod/directory.php:140 #: ../../addon/forumdirectory/forumdirectory.php:162 -#: ../../include/profile_advanced.php:48 ../../boot.php:1365 +#: ../../include/profile_advanced.php:48 ../../boot.php:1386 msgid "Homepage:" msgstr "Strona główna:" @@ -4873,25 +4942,33 @@ msgid "About:" msgstr "O:" #: ../../mod/directory.php:187 -#: ../../addon/forumdirectory/forumdirectory.php:203 +#: ../../addon/forumdirectory/forumdirectory.php:201 msgid "No entries (some entries may be hidden)." msgstr "Brak odwiedzin (niektóre odwiedziny mogą być ukryte)." -#: ../../mod/invite.php:37 +#: ../../mod/invite.php:27 +msgid "Total invitation limit exceeded." +msgstr "" + +#: ../../mod/invite.php:49 #, php-format msgid "%s : Not a valid email address." msgstr "%s : Niepoprawny adres email." -#: ../../mod/invite.php:61 +#: ../../mod/invite.php:73 msgid "Please join us on Friendica" msgstr "Dołącz do nas na Friendica" -#: ../../mod/invite.php:71 +#: ../../mod/invite.php:84 +msgid "Invitation limit exceeded. Please contact your site administrator." +msgstr "" + +#: ../../mod/invite.php:89 #, php-format msgid "%s : Message delivery failed." msgstr "%s : Dostarczenie wiadomości nieudane." -#: ../../mod/invite.php:75 +#: ../../mod/invite.php:93 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." @@ -4899,11 +4976,11 @@ msgstr[0] "%d wiadomość wysłana." msgstr[1] "%d wiadomości wysłane." msgstr[2] "%d wysłano ." -#: ../../mod/invite.php:94 +#: ../../mod/invite.php:112 msgid "You have no more invitations available" msgstr "Nie masz więcej zaproszeń" -#: ../../mod/invite.php:102 +#: ../../mod/invite.php:120 #, php-format msgid "" "Visit %s for a list of public sites that you can join. Friendica members on " @@ -4911,14 +4988,14 @@ msgid "" " other social networks." msgstr "" -#: ../../mod/invite.php:104 +#: ../../mod/invite.php:122 #, php-format msgid "" "To accept this invitation, please visit and register at %s or any other " "public Friendica website." msgstr "" -#: ../../mod/invite.php:105 +#: ../../mod/invite.php:123 #, php-format msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " @@ -4927,36 +5004,36 @@ msgid "" "sites you can join." msgstr "" -#: ../../mod/invite.php:108 +#: ../../mod/invite.php:126 msgid "" "Our apologies. This system is not currently configured to connect with other" " public sites or invite members." msgstr "" -#: ../../mod/invite.php:113 +#: ../../mod/invite.php:132 msgid "Send invitations" msgstr "Wyślij zaproszenia" -#: ../../mod/invite.php:114 +#: ../../mod/invite.php:133 msgid "Enter email addresses, one per line:" msgstr "Wprowadź adresy email, jeden na linijkę:" -#: ../../mod/invite.php:116 +#: ../../mod/invite.php:135 msgid "" "You are cordially invited to join me and other close friends on Friendica - " "and help us to create a better social web." msgstr "" -#: ../../mod/invite.php:118 +#: ../../mod/invite.php:137 msgid "You will need to supply this invitation code: $invite_code" msgstr "" -#: ../../mod/invite.php:118 +#: ../../mod/invite.php:137 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "Gdy już się zarejestrujesz, skontaktuj się ze mną przez moją stronkę profilową :" -#: ../../mod/invite.php:120 +#: ../../mod/invite.php:139 msgid "" "For more information about the Friendica project and why we feel it is " "important, please visit http://friendica.com" @@ -4998,7 +5075,7 @@ msgid "Unable to set contact photo." msgstr "Nie można ustawić zdjęcia kontaktu." #: ../../mod/dfrn_confirm.php:477 ../../include/diaspora.php:621 -#: ../../include/conversation.php:171 +#: ../../include/conversation.php:172 #, php-format msgid "%1$s is now friends with %2$s" msgstr "%1$s jest teraz znajomym z %2$s" @@ -5768,8 +5845,8 @@ msgid "Forum Directory" msgstr "Katalog Forum" #: ../../addon/communityhome/communityhome.php:28 -#: ../../addon/communityhome/communityhome.php:34 ../../include/nav.php:64 -#: ../../boot.php:1016 ../../addon.old/communityhome/communityhome.php:28 +#: ../../addon/communityhome/communityhome.php:34 ../../include/nav.php:91 +#: ../../boot.php:1037 ../../addon.old/communityhome/communityhome.php:28 #: ../../addon.old/communityhome/communityhome.php:34 #: ../../addon.old/communityhome/twillingham/communityhome.php:28 #: ../../addon.old/communityhome/twillingham/communityhome.php:34 @@ -5805,8 +5882,8 @@ msgid "Latest likes" msgstr "Ostatnie polubienia" #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:456 ../../include/text.php:1496 -#: ../../include/conversation.php:117 ../../include/conversation.php:245 +#: ../../view/theme/diabook/theme.php:456 ../../include/text.php:1508 +#: ../../include/conversation.php:118 ../../include/conversation.php:246 #: ../../addon.old/communityhome/communityhome.php:155 msgid "event" msgstr "wydarzenie" @@ -6597,7 +6674,7 @@ msgstr "Ustawienia Randplace" #: ../../addon/randplace/randplace.php:171 #: ../../addon.old/randplace/randplace.php:171 msgid "Enable Randplace Plugin" -msgstr "" +msgstr "Włącz Randplace Plugin" #: ../../addon/dwpost/dwpost.php:39 ../../addon.old/dwpost/dwpost.php:39 msgid "Post to Dreamwidth" @@ -7304,7 +7381,7 @@ msgstr "" msgid "Add contact" msgstr "Dodaj kontakt" -#: ../../addon/viewsrc/viewsrc.php:37 ../../addon.old/viewsrc/viewsrc.php:37 +#: ../../addon/viewsrc/viewsrc.php:39 ../../addon.old/viewsrc/viewsrc.php:37 msgid "View Source" msgstr "Podgląd źródła" @@ -7333,7 +7410,7 @@ msgstr "Ustawienia StatusNet zaktualizowane" #: ../../addon/statusnet/statusnet.php:269 #: ../../addon.old/statusnet/statusnet.php:257 msgid "StatusNet Posting Settings" -msgstr "" +msgstr "Ustawienia StatusNet" #: ../../addon/statusnet/statusnet.php:283 #: ../../addon.old/statusnet/statusnet.php:271 @@ -7410,7 +7487,7 @@ msgstr "Aktualnym StatusNet API jest" #: ../../addon/statusnet/statusnet.php:334 #: ../../addon.old/statusnet/statusnet.php:322 msgid "Cancel StatusNet Connection" -msgstr "" +msgstr "Anuluj połączenie StatusNet" #: ../../addon/statusnet/statusnet.php:345 ../../addon/twitter/twitter.php:200 #: ../../addon.old/statusnet/statusnet.php:333 @@ -7438,7 +7515,7 @@ msgstr "" #: ../../addon/statusnet/statusnet.php:351 #: ../../addon.old/statusnet/statusnet.php:339 msgid "Allow posting to StatusNet" -msgstr "" +msgstr "Pozwól zamieszczać posty na StatusNet" #: ../../addon/statusnet/statusnet.php:354 #: ../../addon.old/statusnet/statusnet.php:342 @@ -7719,14 +7796,23 @@ msgstr "" msgid "Send linked #-tags and @-names to Twitter" msgstr "" -#: ../../addon/twitter/twitter.php:556 ../../addon.old/twitter/twitter.php:396 +#: ../../addon/twitter/twitter.php:558 ../../addon.old/twitter/twitter.php:396 msgid "Consumer key" msgstr "Klucz konsumenta" -#: ../../addon/twitter/twitter.php:557 ../../addon.old/twitter/twitter.php:397 +#: ../../addon/twitter/twitter.php:559 ../../addon.old/twitter/twitter.php:397 msgid "Consumer secret" msgstr "Sekret konsumenta" +#: ../../addon/twitter/twitter.php:560 +msgid "Name of the Twitter Application" +msgstr "" + +#: ../../addon/twitter/twitter.php:560 +msgid "" +"set this to avoid mirroring postings from ~friendica back to ~friendica" +msgstr "" + #: ../../addon/irc/irc.php:44 ../../addon.old/irc/irc.php:44 msgid "IRC Settings" msgstr "Ustawienia IRC" @@ -7861,12 +7947,12 @@ msgstr "" msgid "Color scheme" msgstr "" -#: ../../view/theme/diabook/theme.php:87 ../../include/nav.php:49 -#: ../../include/nav.php:116 +#: ../../view/theme/diabook/theme.php:87 ../../include/nav.php:76 +#: ../../include/nav.php:143 msgid "Your posts and conversations" msgstr "Twoje posty i rozmowy" -#: ../../view/theme/diabook/theme.php:88 ../../include/nav.php:50 +#: ../../view/theme/diabook/theme.php:88 ../../include/nav.php:77 msgid "Your profile page" msgstr "Twoja strona profilowa" @@ -7874,19 +7960,19 @@ msgstr "Twoja strona profilowa" msgid "Your contacts" msgstr "Twoje kontakty" -#: ../../view/theme/diabook/theme.php:90 ../../include/nav.php:51 +#: ../../view/theme/diabook/theme.php:90 ../../include/nav.php:78 msgid "Your photos" msgstr "Twoje zdjęcia" -#: ../../view/theme/diabook/theme.php:91 ../../include/nav.php:52 +#: ../../view/theme/diabook/theme.php:91 ../../include/nav.php:79 msgid "Your events" msgstr "Twoje wydarzenia" -#: ../../view/theme/diabook/theme.php:92 ../../include/nav.php:53 +#: ../../view/theme/diabook/theme.php:92 ../../include/nav.php:80 msgid "Personal notes" msgstr "Osobiste notatki" -#: ../../view/theme/diabook/theme.php:92 ../../include/nav.php:53 +#: ../../view/theme/diabook/theme.php:92 ../../include/nav.php:80 msgid "Your personal photos" msgstr "Twoje osobiste zdjęcia" @@ -7982,12 +8068,12 @@ msgid "Set twitter search term" msgstr "" #: ../../view/theme/diabook/theme.php:629 -#: ../../view/theme/diabook/config.php:146 ../../include/acl_selectors.php:313 +#: ../../view/theme/diabook/config.php:146 ../../include/acl_selectors.php:327 msgid "don't show" msgstr "nie pokazuj" #: ../../view/theme/diabook/theme.php:629 -#: ../../view/theme/diabook/config.php:146 ../../include/acl_selectors.php:312 +#: ../../view/theme/diabook/config.php:146 ../../include/acl_selectors.php:326 msgid "show" msgstr "pokaż" @@ -8458,7 +8544,7 @@ msgstr[2] "%d kontakty" msgid "poke" msgstr "zaczep" -#: ../../include/text.php:779 ../../include/conversation.php:210 +#: ../../include/text.php:779 ../../include/conversation.php:211 msgid "poked" msgstr "zaczepiony" @@ -8630,31 +8716,31 @@ msgstr "Listopad" msgid "December" msgstr "Grudzień" -#: ../../include/text.php:1066 +#: ../../include/text.php:1078 msgid "bytes" msgstr "bajty" -#: ../../include/text.php:1093 ../../include/text.php:1105 +#: ../../include/text.php:1105 ../../include/text.php:1117 msgid "Click to open/close" msgstr "Kliknij aby otworzyć/zamknąć" -#: ../../include/text.php:1278 ../../include/user.php:237 +#: ../../include/text.php:1290 ../../include/user.php:237 msgid "default" msgstr "standardowe" -#: ../../include/text.php:1290 +#: ../../include/text.php:1302 msgid "Select an alternate language" msgstr "Wybierz alternatywny język" -#: ../../include/text.php:1500 +#: ../../include/text.php:1512 msgid "activity" msgstr "aktywność" -#: ../../include/text.php:1503 +#: ../../include/text.php:1515 msgid "post" msgstr "post" -#: ../../include/text.php:1658 +#: ../../include/text.php:1670 msgid "Item filed" msgstr "" @@ -8750,125 +8836,129 @@ msgstr "Stwórz nową grupę" msgid "Contacts not in any group" msgstr "Kontakt nie jest w żadnej grupie" -#: ../../include/nav.php:46 ../../boot.php:1015 +#: ../../include/nav.php:73 ../../boot.php:1036 msgid "Logout" msgstr "Wyloguj się" -#: ../../include/nav.php:46 +#: ../../include/nav.php:73 msgid "End this session" msgstr "Zakończ sesję" -#: ../../include/nav.php:49 ../../boot.php:1812 +#: ../../include/nav.php:76 ../../boot.php:1833 msgid "Status" msgstr "Status" -#: ../../include/nav.php:64 +#: ../../include/nav.php:91 msgid "Sign in" msgstr "Zaloguj się" -#: ../../include/nav.php:77 +#: ../../include/nav.php:104 msgid "Home Page" msgstr "Strona startowa" -#: ../../include/nav.php:81 +#: ../../include/nav.php:108 msgid "Create an account" msgstr "Załóż konto" -#: ../../include/nav.php:86 +#: ../../include/nav.php:113 msgid "Help and documentation" msgstr "Pomoc i dokumentacja" -#: ../../include/nav.php:89 +#: ../../include/nav.php:116 msgid "Apps" msgstr "Aplikacje" -#: ../../include/nav.php:89 +#: ../../include/nav.php:116 msgid "Addon applications, utilities, games" msgstr "Wtyczki, aplikacje, narzędzia, gry" -#: ../../include/nav.php:91 +#: ../../include/nav.php:118 msgid "Search site content" msgstr "Przeszukaj zawartość strony" -#: ../../include/nav.php:101 +#: ../../include/nav.php:128 msgid "Conversations on this site" msgstr "Rozmowy na tej stronie" -#: ../../include/nav.php:103 +#: ../../include/nav.php:130 msgid "Directory" msgstr "Katalog" -#: ../../include/nav.php:103 +#: ../../include/nav.php:130 msgid "People directory" msgstr "" -#: ../../include/nav.php:113 +#: ../../include/nav.php:140 msgid "Conversations from your friends" msgstr "Rozmowy Twoich przyjaciół" -#: ../../include/nav.php:114 +#: ../../include/nav.php:141 msgid "Network Reset" msgstr "" -#: ../../include/nav.php:114 +#: ../../include/nav.php:141 msgid "Load Network page with no filters" msgstr "" -#: ../../include/nav.php:122 +#: ../../include/nav.php:149 msgid "Friend Requests" msgstr "Podania o przyjęcie do grona znajomych" -#: ../../include/nav.php:124 +#: ../../include/nav.php:151 msgid "See all notifications" msgstr "Zobacz wszystkie powiadomienia" -#: ../../include/nav.php:125 +#: ../../include/nav.php:152 msgid "Mark all system notifications seen" msgstr "" -#: ../../include/nav.php:129 +#: ../../include/nav.php:156 msgid "Private mail" msgstr "Prywatne maile" -#: ../../include/nav.php:130 +#: ../../include/nav.php:157 msgid "Inbox" msgstr "Odebrane" -#: ../../include/nav.php:131 +#: ../../include/nav.php:158 msgid "Outbox" msgstr "Wysłane" -#: ../../include/nav.php:135 +#: ../../include/nav.php:162 msgid "Manage" msgstr "Zarządzaj" -#: ../../include/nav.php:135 +#: ../../include/nav.php:162 msgid "Manage other pages" msgstr "Zarządzaj innymi stronami" -#: ../../include/nav.php:138 +#: ../../include/nav.php:165 msgid "Delegations" msgstr "" -#: ../../include/nav.php:142 ../../boot.php:1318 +#: ../../include/nav.php:169 ../../boot.php:1339 msgid "Profiles" msgstr "Profile" -#: ../../include/nav.php:142 +#: ../../include/nav.php:169 msgid "Manage/Edit Profiles" msgstr "" -#: ../../include/nav.php:144 +#: ../../include/nav.php:171 msgid "Manage/edit friends and contacts" msgstr "Zarządzaj listą przyjaciół i kontaktami" -#: ../../include/nav.php:151 +#: ../../include/nav.php:178 msgid "Site setup and configuration" msgstr "Konfiguracja i ustawienia instancji" -#: ../../include/nav.php:175 -msgid "Nothing new here" -msgstr "Brak nowych zdarzeń" +#: ../../include/nav.php:182 +msgid "Navigation" +msgstr "" + +#: ../../include/nav.php:182 +msgid "Site map" +msgstr "" #: ../../include/contact_widgets.php:6 msgid "Add New Contact" @@ -9187,7 +9277,7 @@ msgstr "Nie można zlokalizować serwera DNS dla bazy danych '%s'" msgid "[no subject]" msgstr "[bez tematu]" -#: ../../include/acl_selectors.php:311 +#: ../../include/acl_selectors.php:325 msgid "Visible to everybody" msgstr "Widoczny dla wszystkich" @@ -9233,146 +9323,146 @@ msgstr "prywatna wiadomość" msgid "Please visit %s to view and/or reply to your private messages." msgstr "Odwiedź %s żeby zobaczyć i/lub odpowiedzieć na twoje prywatne wiadomości" -#: ../../include/enotify.php:89 +#: ../../include/enotify.php:90 #, php-format msgid "%1$s commented on [url=%2$s]a %3$s[/url]" msgstr "" -#: ../../include/enotify.php:96 +#: ../../include/enotify.php:97 #, php-format msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]" msgstr "" -#: ../../include/enotify.php:104 +#: ../../include/enotify.php:105 #, php-format msgid "%1$s commented on [url=%2$s]your %3$s[/url]" msgstr "" -#: ../../include/enotify.php:114 +#: ../../include/enotify.php:115 #, php-format msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s" msgstr "" -#: ../../include/enotify.php:115 +#: ../../include/enotify.php:116 #, php-format msgid "%s commented on an item/conversation you have been following." msgstr "%s skomentował rozmowę którą śledzisz" -#: ../../include/enotify.php:118 ../../include/enotify.php:133 -#: ../../include/enotify.php:146 ../../include/enotify.php:164 -#: ../../include/enotify.php:177 +#: ../../include/enotify.php:119 ../../include/enotify.php:134 +#: ../../include/enotify.php:147 ../../include/enotify.php:165 +#: ../../include/enotify.php:178 #, php-format msgid "Please visit %s to view and/or reply to the conversation." msgstr "Odwiedź %s żeby zobaczyć i/lub odpowiedzieć na rozmowę" -#: ../../include/enotify.php:125 +#: ../../include/enotify.php:126 #, php-format msgid "[Friendica:Notify] %s posted to your profile wall" msgstr "[Friendica:Notify] %s napisał na twoim profilu" -#: ../../include/enotify.php:127 +#: ../../include/enotify.php:128 #, php-format msgid "%1$s posted to your profile wall at %2$s" msgstr "" -#: ../../include/enotify.php:129 +#: ../../include/enotify.php:130 #, php-format msgid "%1$s posted to [url=%2$s]your wall[/url]" msgstr "" -#: ../../include/enotify.php:140 +#: ../../include/enotify.php:141 #, php-format msgid "[Friendica:Notify] %s tagged you" msgstr "[Friendica:Notify] %s oznaczył cię" -#: ../../include/enotify.php:141 +#: ../../include/enotify.php:142 #, php-format msgid "%1$s tagged you at %2$s" msgstr "" -#: ../../include/enotify.php:142 +#: ../../include/enotify.php:143 #, php-format msgid "%1$s [url=%2$s]tagged you[/url]." msgstr "" -#: ../../include/enotify.php:154 +#: ../../include/enotify.php:155 #, php-format msgid "[Friendica:Notify] %1$s poked you" msgstr "" -#: ../../include/enotify.php:155 +#: ../../include/enotify.php:156 #, php-format msgid "%1$s poked you at %2$s" msgstr "" -#: ../../include/enotify.php:156 +#: ../../include/enotify.php:157 #, php-format msgid "%1$s [url=%2$s]poked you[/url]." msgstr "" -#: ../../include/enotify.php:171 +#: ../../include/enotify.php:172 #, php-format msgid "[Friendica:Notify] %s tagged your post" msgstr "" -#: ../../include/enotify.php:172 +#: ../../include/enotify.php:173 #, php-format msgid "%1$s tagged your post at %2$s" msgstr "" -#: ../../include/enotify.php:173 +#: ../../include/enotify.php:174 #, php-format msgid "%1$s tagged [url=%2$s]your post[/url]" msgstr "" -#: ../../include/enotify.php:184 -msgid "[Friendica:Notify] Introduction received" -msgstr "" - #: ../../include/enotify.php:185 -#, php-format -msgid "You've received an introduction from '%1$s' at %2$s" +msgid "[Friendica:Notify] Introduction received" msgstr "" #: ../../include/enotify.php:186 #, php-format +msgid "You've received an introduction from '%1$s' at %2$s" +msgstr "" + +#: ../../include/enotify.php:187 +#, php-format msgid "You've received [url=%1$s]an introduction[/url] from %2$s." msgstr "" -#: ../../include/enotify.php:189 ../../include/enotify.php:207 +#: ../../include/enotify.php:190 ../../include/enotify.php:208 #, php-format msgid "You may visit their profile at %s" msgstr "Możesz obejrzeć ich profile na %s" -#: ../../include/enotify.php:191 +#: ../../include/enotify.php:192 #, php-format msgid "Please visit %s to approve or reject the introduction." msgstr "Odwiedż %s aby zatwierdzić lub odrzucić przedstawienie." -#: ../../include/enotify.php:198 +#: ../../include/enotify.php:199 msgid "[Friendica:Notify] Friend suggestion received" msgstr "" -#: ../../include/enotify.php:199 +#: ../../include/enotify.php:200 #, php-format msgid "You've received a friend suggestion from '%1$s' at %2$s" msgstr "" -#: ../../include/enotify.php:200 +#: ../../include/enotify.php:201 #, php-format msgid "" "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." msgstr "" -#: ../../include/enotify.php:205 +#: ../../include/enotify.php:206 msgid "Name:" msgstr "Imię:" -#: ../../include/enotify.php:206 +#: ../../include/enotify.php:207 msgid "Photo:" msgstr "Zdjęcie:" -#: ../../include/enotify.php:209 +#: ../../include/enotify.php:210 #, php-format msgid "Please visit %s to approve or reject the suggestion." msgstr "" @@ -9400,7 +9490,7 @@ msgstr "Autor lub nazwa nie zostało znalezione." #: ../../include/follow.php:84 msgid "No browser URL could be matched to this address." -msgstr "" +msgstr "Przeglądarka WWW nie może odnaleźć podanego adresu" #: ../../include/follow.php:86 msgid "" @@ -9440,7 +9530,11 @@ msgstr "" msgid "You have a new follower at " msgstr "" -#: ../../include/items.php:4057 +#: ../../include/items.php:3892 +msgid "Do you really want to delete this item?" +msgstr "" + +#: ../../include/items.php:4085 msgid "Archives" msgstr "Archiwum" @@ -9524,7 +9618,7 @@ msgstr "Proszę dodać zdjęcie profilowe." msgid "Welcome back " msgstr "Witaj ponownie " -#: ../../include/security.php:357 +#: ../../include/security.php:366 msgid "" "The form security token was not correct. This probably happened because the " "form has been opened for too long (>3 hours) before submitting it." @@ -9534,147 +9628,163 @@ msgstr "" msgid "stopped following" msgstr "przestań obserwować" -#: ../../include/Contact.php:225 ../../include/conversation.php:816 +#: ../../include/Contact.php:225 ../../include/conversation.php:820 msgid "Poke" msgstr "Zaczepka" -#: ../../include/Contact.php:226 ../../include/conversation.php:810 +#: ../../include/Contact.php:226 ../../include/conversation.php:814 msgid "View Status" msgstr "Zobacz status" -#: ../../include/Contact.php:227 ../../include/conversation.php:811 +#: ../../include/Contact.php:227 ../../include/conversation.php:815 msgid "View Profile" msgstr "Zobacz profil" -#: ../../include/Contact.php:228 ../../include/conversation.php:812 +#: ../../include/Contact.php:228 ../../include/conversation.php:816 msgid "View Photos" msgstr "Zobacz zdjęcia" -#: ../../include/Contact.php:229 ../../include/Contact.php:242 -#: ../../include/conversation.php:813 +#: ../../include/Contact.php:229 ../../include/Contact.php:251 +#: ../../include/conversation.php:817 msgid "Network Posts" msgstr "" -#: ../../include/Contact.php:230 ../../include/Contact.php:242 -#: ../../include/conversation.php:814 +#: ../../include/Contact.php:230 ../../include/Contact.php:251 +#: ../../include/conversation.php:818 msgid "Edit Contact" msgstr "Edytuj kontakt" -#: ../../include/Contact.php:231 ../../include/Contact.php:242 -#: ../../include/conversation.php:815 +#: ../../include/Contact.php:231 ../../include/Contact.php:251 +#: ../../include/conversation.php:819 msgid "Send PM" msgstr "Wyślij prywatną wiadomość" -#: ../../include/conversation.php:206 +#: ../../include/conversation.php:207 #, php-format msgid "%1$s poked %2$s" msgstr "" -#: ../../include/conversation.php:290 +#: ../../include/conversation.php:291 msgid "post/item" msgstr "" -#: ../../include/conversation.php:291 +#: ../../include/conversation.php:292 #, php-format msgid "%1$s marked %2$s's %3$s as favorite" msgstr "" -#: ../../include/conversation.php:620 ../../object/Item.php:249 +#: ../../include/conversation.php:621 ../../object/Item.php:249 msgid "Categories:" msgstr "Kategorie:" -#: ../../include/conversation.php:621 ../../object/Item.php:250 +#: ../../include/conversation.php:622 ../../object/Item.php:250 msgid "Filed under:" msgstr "" -#: ../../include/conversation.php:706 +#: ../../include/conversation.php:710 msgid "remove" msgstr "usuń" -#: ../../include/conversation.php:710 +#: ../../include/conversation.php:714 msgid "Delete Selected Items" msgstr "Usuń zaznaczone elementy" -#: ../../include/conversation.php:809 +#: ../../include/conversation.php:813 msgid "Follow Thread" msgstr "" -#: ../../include/conversation.php:878 +#: ../../include/conversation.php:882 #, php-format msgid "%s likes this." msgstr "%s lubi to." -#: ../../include/conversation.php:878 +#: ../../include/conversation.php:882 #, php-format msgid "%s doesn't like this." msgstr "%s nie lubi tego." -#: ../../include/conversation.php:883 +#: ../../include/conversation.php:887 #, php-format msgid "%2$d people like this" msgstr "" -#: ../../include/conversation.php:886 +#: ../../include/conversation.php:890 #, php-format msgid "%2$d people don't like this" msgstr "" -#: ../../include/conversation.php:900 +#: ../../include/conversation.php:904 msgid "and" msgstr "i" -#: ../../include/conversation.php:906 +#: ../../include/conversation.php:910 #, php-format msgid ", and %d other people" msgstr ", i %d innych ludzi" -#: ../../include/conversation.php:908 +#: ../../include/conversation.php:912 #, php-format msgid "%s like this." msgstr "%s lubi to." -#: ../../include/conversation.php:908 +#: ../../include/conversation.php:912 #, php-format msgid "%s don't like this." msgstr "%s nie lubi tego." -#: ../../include/conversation.php:935 ../../include/conversation.php:953 +#: ../../include/conversation.php:939 ../../include/conversation.php:957 msgid "Visible to everybody" msgstr "Widoczne dla wszystkich" -#: ../../include/conversation.php:937 ../../include/conversation.php:955 +#: ../../include/conversation.php:941 ../../include/conversation.php:959 msgid "Please enter a video link/URL:" msgstr "Podaj link do filmu" -#: ../../include/conversation.php:938 ../../include/conversation.php:956 +#: ../../include/conversation.php:942 ../../include/conversation.php:960 msgid "Please enter an audio link/URL:" msgstr "Podaj link do muzyki" -#: ../../include/conversation.php:939 ../../include/conversation.php:957 +#: ../../include/conversation.php:943 ../../include/conversation.php:961 msgid "Tag term:" msgstr "" -#: ../../include/conversation.php:941 ../../include/conversation.php:959 +#: ../../include/conversation.php:945 ../../include/conversation.php:963 msgid "Where are you right now?" msgstr "Gdzie teraz jesteś?" -#: ../../include/conversation.php:942 +#: ../../include/conversation.php:946 msgid "Delete item(s)?" msgstr "" -#: ../../include/conversation.php:1021 +#: ../../include/conversation.php:988 +msgid "Post to Email" +msgstr "Wyślij poprzez email" + +#: ../../include/conversation.php:1044 msgid "permissions" msgstr "zezwolenia" -#: ../../include/plugin.php:389 ../../include/plugin.php:391 +#: ../../include/conversation.php:1068 +msgid "Post to Groups" +msgstr "" + +#: ../../include/conversation.php:1069 +msgid "Post to Contacts" +msgstr "" + +#: ../../include/conversation.php:1070 +msgid "Private post" +msgstr "" + +#: ../../include/plugin.php:429 ../../include/plugin.php:431 msgid "Click here to upgrade." msgstr "Kliknij tu, aby zaktualizować." -#: ../../include/plugin.php:397 +#: ../../include/plugin.php:437 msgid "This action exceeds the limits set by your subscription plan." msgstr "" -#: ../../include/plugin.php:402 +#: ../../include/plugin.php:442 msgid "This action is not available under your subscription plan." msgstr "" @@ -9686,117 +9796,117 @@ msgstr "Usunąć ten element?" msgid "show fewer" msgstr "Pokaż mniej" -#: ../../boot.php:878 +#: ../../boot.php:899 #, php-format msgid "Update %s failed. See error logs." msgstr "" -#: ../../boot.php:880 +#: ../../boot.php:901 #, php-format msgid "Update Error at %s" msgstr "" -#: ../../boot.php:990 +#: ../../boot.php:1011 msgid "Create a New Account" msgstr "Załóż nowe konto" -#: ../../boot.php:1018 +#: ../../boot.php:1039 msgid "Nickname or Email address: " msgstr "Nick lub adres email:" -#: ../../boot.php:1019 +#: ../../boot.php:1040 msgid "Password: " msgstr "Hasło:" -#: ../../boot.php:1020 +#: ../../boot.php:1041 msgid "Remember me" msgstr "Zapamiętaj mnie" -#: ../../boot.php:1023 +#: ../../boot.php:1044 msgid "Or login using OpenID: " msgstr "Lub zaloguj się korzystając z OpenID:" -#: ../../boot.php:1029 +#: ../../boot.php:1050 msgid "Forgot your password?" msgstr "Zapomniałeś swojego hasła?" -#: ../../boot.php:1032 +#: ../../boot.php:1053 msgid "Website Terms of Service" msgstr "" -#: ../../boot.php:1033 +#: ../../boot.php:1054 msgid "terms of service" msgstr "" -#: ../../boot.php:1035 +#: ../../boot.php:1056 msgid "Website Privacy Policy" msgstr "" -#: ../../boot.php:1036 +#: ../../boot.php:1057 msgid "privacy policy" msgstr "" -#: ../../boot.php:1165 +#: ../../boot.php:1186 msgid "Requested account is not available." msgstr "" -#: ../../boot.php:1244 +#: ../../boot.php:1265 msgid "Edit profile" msgstr "Edytuj profil" -#: ../../boot.php:1310 +#: ../../boot.php:1331 msgid "Message" msgstr "Wiadomość" -#: ../../boot.php:1318 +#: ../../boot.php:1339 msgid "Manage/edit profiles" msgstr "Zarządzaj profilami" -#: ../../boot.php:1440 ../../boot.php:1526 +#: ../../boot.php:1461 ../../boot.php:1547 msgid "g A l F d" -msgstr "" +msgstr "g A I F d" -#: ../../boot.php:1441 ../../boot.php:1527 +#: ../../boot.php:1462 ../../boot.php:1548 msgid "F d" msgstr "" -#: ../../boot.php:1486 ../../boot.php:1567 +#: ../../boot.php:1507 ../../boot.php:1588 msgid "[today]" msgstr "[dziś]" -#: ../../boot.php:1498 +#: ../../boot.php:1519 msgid "Birthday Reminders" msgstr "Przypomnienia o urodzinach" -#: ../../boot.php:1499 +#: ../../boot.php:1520 msgid "Birthdays this week:" msgstr "Urodziny w tym tygodniu:" -#: ../../boot.php:1560 +#: ../../boot.php:1581 msgid "[No description]" msgstr "[Brak opisu]" -#: ../../boot.php:1578 +#: ../../boot.php:1599 msgid "Event Reminders" msgstr "Przypominacze wydarzeń" -#: ../../boot.php:1579 +#: ../../boot.php:1600 msgid "Events this week:" msgstr "Wydarzenia w tym tygodniu:" -#: ../../boot.php:1815 +#: ../../boot.php:1836 msgid "Status Messages and Posts" msgstr "Status wiadomości i postów" -#: ../../boot.php:1822 +#: ../../boot.php:1843 msgid "Profile Details" msgstr "Szczegóły profilu" -#: ../../boot.php:1839 +#: ../../boot.php:1860 msgid "Events and Calendar" msgstr "Wydarzenia i kalendarz" -#: ../../boot.php:1846 +#: ../../boot.php:1867 msgid "Only You Can See This" msgstr "Tylko ty możesz to zobaczyć" @@ -9804,7 +9914,7 @@ msgstr "Tylko ty możesz to zobaczyć" msgid "via" msgstr "" -#: ../../index.php:399 +#: ../../index.php:400 msgid "toggle mobile" msgstr "" diff --git a/view/pl/strings.php b/view/pl/strings.php index 68439ebdf..b070090d5 100644 --- a/view/pl/strings.php +++ b/view/pl/strings.php @@ -48,7 +48,7 @@ $a->strings["Event Starts:"] = "Rozpoczęcie wydarzenia:"; $a->strings["Required"] = "Wymagany"; $a->strings["Finish date/time is not known or not relevant"] = "Data/czas zakończenia nie jest znana lub jest nieistotna"; $a->strings["Event Finishes:"] = "Zakończenie wydarzenia:"; -$a->strings["Adjust for viewer timezone"] = ""; +$a->strings["Adjust for viewer timezone"] = "Dopasuj dla strefy czasowej widza"; $a->strings["Description:"] = "Opis:"; $a->strings["Location:"] = "Lokalizacja"; $a->strings["Title:"] = "Tytuł:"; @@ -74,7 +74,9 @@ $a->strings["Contact information unavailable"] = "Informacje o kontakcie nie dos $a->strings["Profile Photos"] = "Zdjęcia profilowe"; $a->strings["Album not found."] = "Album nie znaleziony"; $a->strings["Delete Album"] = "Usuń album"; +$a->strings["Do you really want to delete this photo album and all its photos?"] = ""; $a->strings["Delete Photo"] = "Usuń zdjęcie"; +$a->strings["Do you really want to delete this photo?"] = ""; $a->strings["%1\$s was tagged in %2\$s by %3\$s"] = ""; $a->strings["a photo"] = "zdjęcie"; $a->strings["Image exceeds size limit of "] = "obrazek przekracza limit rozmiaru"; @@ -90,6 +92,10 @@ $a->strings["New album name: "] = "Nazwa nowego albumu:"; $a->strings["or existing album name: "] = "lub istniejąca nazwa albumu:"; $a->strings["Do not show a status post for this upload"] = "Nie pokazuj postów statusu dla tego wysłania"; $a->strings["Permissions"] = "Uprawnienia"; +$a->strings["Show to Groups"] = ""; +$a->strings["Show to Contacts"] = ""; +$a->strings["Private Photo"] = ""; +$a->strings["Public Photo"] = ""; $a->strings["Edit Album"] = "Edytuj album"; $a->strings["Show Newest First"] = "Najpierw pokaż najnowsze"; $a->strings["Show Oldest First"] = "Najpierw pokaż najstarsze"; @@ -109,6 +115,8 @@ $a->strings["New album name"] = "Nazwa nowego albumu"; $a->strings["Caption"] = "Zawartość"; $a->strings["Add a Tag"] = "Dodaj tag"; $a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Przykładowo: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; +$a->strings["Private photo"] = ""; +$a->strings["Public photo"] = ""; $a->strings["I like this (toggle)"] = "Lubię to (zmień)"; $a->strings["I don't like this (toggle)"] = "Nie lubię (zmień)"; $a->strings["Share"] = "Podziel się"; @@ -131,7 +139,6 @@ $a->strings["Installed plugins/addons/apps:"] = ""; $a->strings["No installed plugins/addons/apps"] = "Brak zainstalowanych pluginów/dodatków/aplikacji"; $a->strings["Item not found"] = "Artykuł nie znaleziony"; $a->strings["Edit post"] = "Edytuj post"; -$a->strings["Post to Email"] = "Wyślij poprzez email"; $a->strings["Edit"] = "Edytuj"; $a->strings["Upload photo"] = "Wyślij zdjęcie"; $a->strings["upload photo"] = "dodaj zdjęcie"; @@ -254,7 +261,7 @@ $a->strings["Error: GD graphics PHP module with JPEG support required but not in $a->strings["Error: openssl PHP module required but not installed."] = "Błąd: openssl PHP wymagany moduł, lecz nie zainstalowany."; $a->strings["Error: mysqli PHP module required but not installed."] = "Błąd: mysqli PHP wymagany moduł, lecz nie zainstalowany."; $a->strings["Error: mb_string PHP module required but not installed."] = "Błąd: moduł PHP mb_string jest wymagany ale nie jest zainstalowany"; -$a->strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = ""; +$a->strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "Instalator WWW musi być w stanie utworzyć plik o nazwie \". Htconfig.php\" i nie jest w stanie tego zrobić."; $a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = ""; $a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = ""; $a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = ""; @@ -326,8 +333,8 @@ $a->strings["starred"] = ""; $a->strings["add tag"] = "dodaj tag"; $a->strings["save to folder"] = "zapisz w folderze"; $a->strings["to"] = "do"; -$a->strings["Wall-to-Wall"] = ""; -$a->strings["via Wall-To-Wall:"] = ""; +$a->strings["Wall-to-Wall"] = "Wall-to-Wall"; +$a->strings["via Wall-To-Wall:"] = "via Wall-To-Wall:"; $a->strings["Welcome to %s"] = "Witamy w %s"; $a->strings["Invalid request identifier."] = "Niewłaściwy identyfikator wymagania."; $a->strings["Discard"] = "Odrzuć"; @@ -380,6 +387,7 @@ $a->strings["Contact has been ignored"] = "Kontakt jest ignorowany"; $a->strings["Contact has been unignored"] = "Kontakt nie jest ignorowany"; $a->strings["Contact has been archived"] = "Kontakt został zarchiwizowany"; $a->strings["Contact has been unarchived"] = ""; +$a->strings["Do you really want to delete this contact?"] = ""; $a->strings["Contact has been removed."] = "Kontakt został usunięty."; $a->strings["You are mutual friends with %s"] = "Jesteś już znajomym z %s"; $a->strings["You are sharing with %s"] = "Współdzielisz z %s"; @@ -572,6 +580,9 @@ $a->strings["Maximum Friend Requests/Day:"] = "Maksymalna liczba zaproszeń do g $a->strings["(to prevent spam abuse)"] = "(aby zapobiec spamowaniu)"; $a->strings["Default Post Permissions"] = "Domyślne prawa dostępu wiadomości"; $a->strings["(click to open/close)"] = "(kliknij by otworzyć/zamknąć)"; +$a->strings["Default Private Post"] = ""; +$a->strings["Default Public Post"] = ""; +$a->strings["Default Permissions for New Posts"] = ""; $a->strings["Maximum private messages per day from unknown people:"] = ""; $a->strings["Notification Settings"] = "Ustawienia powiadomień"; $a->strings["By default post a status message when:"] = ""; @@ -754,8 +765,11 @@ $a->strings["No profile"] = "Brak profilu"; $a->strings["Remove My Account"] = "Usuń konto"; $a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Kompletne usunięcie konta. Jeżeli zostanie wykonane, konto nie może zostać odzyskane."; $a->strings["Please enter your password for verification:"] = "Wprowadź hasło w celu weryfikacji."; +$a->strings["Nothing new here"] = "Brak nowych zdarzeń"; +$a->strings["Clear notifications"] = ""; $a->strings["New Message"] = "Nowa wiadomość"; $a->strings["Unable to locate contact information."] = "Niezdolny do uzyskania informacji kontaktowych."; +$a->strings["Do you really want to delete this message?"] = ""; $a->strings["Message deleted."] = "Wiadomość usunięta."; $a->strings["Conversation removed."] = "Rozmowa usunięta."; $a->strings["No messages."] = "Brak wiadomości."; @@ -786,7 +800,7 @@ $a->strings["Admin"] = "Administator"; $a->strings["Plugin Features"] = "Polecane wtyczki"; $a->strings["User registrations waiting for confirmation"] = "Rejestracje użytkownika czekają na potwierdzenie."; $a->strings["Normal Account"] = "Konto normalne"; -$a->strings["Soapbox Account"] = ""; +$a->strings["Soapbox Account"] = "Konto Soapbox"; $a->strings["Community/Celebrity Account"] = "Konto społeczności/gwiazdy"; $a->strings["Automatic Friend Account"] = "Automatyczny przyjaciel konta"; $a->strings["Blog Account"] = ""; @@ -867,7 +881,7 @@ $a->strings["Verify SSL"] = "Weryfikacja SSL"; $a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = ""; $a->strings["Proxy user"] = "Użytkownik proxy"; $a->strings["Proxy URL"] = "URL Proxy"; -$a->strings["Network timeout"] = ""; +$a->strings["Network timeout"] = "Network timeout"; $a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = ""; $a->strings["Delivery interval"] = ""; $a->strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = ""; @@ -1066,6 +1080,7 @@ $a->strings["bb2dia2bb: "] = ""; $a->strings["bb2md2html2bb: "] = ""; $a->strings["Source input (Diaspora format): "] = ""; $a->strings["diaspora2bb: "] = ""; +$a->strings["Do you really want to delete this suggestion?"] = ""; $a->strings["Friend Suggestions"] = "Osoby, które możesz znać"; $a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = ""; $a->strings["Ignore/Hide"] = "Ignoruj/Ukryj"; @@ -1078,8 +1093,10 @@ $a->strings["Status:"] = "Status"; $a->strings["Homepage:"] = "Strona główna:"; $a->strings["About:"] = "O:"; $a->strings["No entries (some entries may be hidden)."] = "Brak odwiedzin (niektóre odwiedziny mogą być ukryte)."; +$a->strings["Total invitation limit exceeded."] = ""; $a->strings["%s : Not a valid email address."] = "%s : Niepoprawny adres email."; $a->strings["Please join us on Friendica"] = "Dołącz do nas na Friendica"; +$a->strings["Invitation limit exceeded. Please contact your site administrator."] = ""; $a->strings["%s : Message delivery failed."] = "%s : Dostarczenie wiadomości nieudane."; $a->strings["%d message sent."] = array( 0 => "%d wiadomość wysłana.", @@ -1408,7 +1425,7 @@ $a->strings["You won!"] = "Wygrałeś!"; $a->strings["\"Cat\" game!"] = "Gra \"Kot\"!"; $a->strings["I won!"] = "Wygrałem!"; $a->strings["Randplace Settings"] = "Ustawienia Randplace"; -$a->strings["Enable Randplace Plugin"] = ""; +$a->strings["Enable Randplace Plugin"] = "Włącz Randplace Plugin"; $a->strings["Post to Dreamwidth"] = "Opublikuj na Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = ""; $a->strings["Enable dreamwidth Post Plugin"] = ""; @@ -1550,7 +1567,7 @@ $a->strings["Post to StatusNet"] = "Wyślij do sieci StatusNet"; $a->strings["Please contact your site administrator.
The provided API URL is not valid."] = "Proszę się skontaktować z administratorem strony.
API URL nie jest poprawne"; $a->strings["We could not contact the StatusNet API with the Path you entered."] = ""; $a->strings["StatusNet settings updated."] = "Ustawienia StatusNet zaktualizowane"; -$a->strings["StatusNet Posting Settings"] = ""; +$a->strings["StatusNet Posting Settings"] = "Ustawienia StatusNet"; $a->strings["Globally Available StatusNet OAuthKeys"] = ""; $a->strings["There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance (see below)."] = ""; $a->strings["Provide your own OAuth Credentials"] = ""; @@ -1563,11 +1580,11 @@ $a->strings["Log in with StatusNet"] = "Zaloguj się przez StatusNet"; $a->strings["Copy the security code from StatusNet here"] = "Tutaj skopiuj kod bezpieczeństwa z StatusNet"; $a->strings["Cancel Connection Process"] = "Anuluj proces łączenia"; $a->strings["Current StatusNet API is"] = "Aktualnym StatusNet API jest"; -$a->strings["Cancel StatusNet Connection"] = ""; +$a->strings["Cancel StatusNet Connection"] = "Anuluj połączenie StatusNet"; $a->strings["Currently connected to: "] = "Obecnie połączone z:"; $a->strings["If enabled all your public postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = ""; $a->strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to StatusNet will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = ""; -$a->strings["Allow posting to StatusNet"] = ""; +$a->strings["Allow posting to StatusNet"] = "Pozwól zamieszczać posty na StatusNet"; $a->strings["Send public postings to StatusNet by default"] = ""; $a->strings["Mirror all posts from statusnet that are no replies or repeated messages"] = ""; $a->strings["Shortening method that optimizes the post"] = ""; @@ -1629,6 +1646,8 @@ $a->strings["Shortening method that optimizes the tweet"] = ""; $a->strings["Send linked #-tags and @-names to Twitter"] = ""; $a->strings["Consumer key"] = "Klucz konsumenta"; $a->strings["Consumer secret"] = "Sekret konsumenta"; +$a->strings["Name of the Twitter Application"] = ""; +$a->strings["set this to avoid mirroring postings from ~friendica back to ~friendica"] = ""; $a->strings["IRC Settings"] = "Ustawienia IRC"; $a->strings["Channel(s) to auto connect (comma separated)"] = ""; $a->strings["Popular Channels (comma separated)"] = ""; @@ -1908,7 +1927,8 @@ $a->strings["Profiles"] = "Profile"; $a->strings["Manage/Edit Profiles"] = ""; $a->strings["Manage/edit friends and contacts"] = "Zarządzaj listą przyjaciół i kontaktami"; $a->strings["Site setup and configuration"] = "Konfiguracja i ustawienia instancji"; -$a->strings["Nothing new here"] = "Brak nowych zdarzeń"; +$a->strings["Navigation"] = ""; +$a->strings["Site map"] = ""; $a->strings["Add New Contact"] = "Dodaj nowy kontakt"; $a->strings["Enter address or web location"] = "Wpisz adres lub lokalizację sieciową"; $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Przykład: bob@przykład.com, http://przykład.com/barbara"; @@ -2033,7 +2053,7 @@ $a->strings["This site is not configured to allow communications with other netw $a->strings["No compatible communication protocols or feeds were discovered."] = ""; $a->strings["The profile address specified does not provide adequate information."] = "Dany adres profilu nie dostarcza odpowiednich informacji."; $a->strings["An author or name was not found."] = "Autor lub nazwa nie zostało znalezione."; -$a->strings["No browser URL could be matched to this address."] = ""; +$a->strings["No browser URL could be matched to this address."] = "Przeglądarka WWW nie może odnaleźć podanego adresu"; $a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = ""; $a->strings["Use mailto: in front of address to force email check."] = ""; $a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Określony adres profilu należy do sieci, która została wyłączona na tej stronie."; @@ -2042,6 +2062,7 @@ $a->strings["Unable to retrieve contact information."] = "Nie można otrzymać i $a->strings["following"] = "następujący"; $a->strings["A new person is sharing with you at "] = ""; $a->strings["You have a new follower at "] = ""; +$a->strings["Do you really want to delete this item?"] = ""; $a->strings["Archives"] = "Archiwum"; $a->strings["An invitation is required."] = "Wymagane zaproszenie."; $a->strings["Invitation could not be verified."] = "Zaproszenie niezweryfikowane."; @@ -2093,7 +2114,11 @@ $a->strings["Please enter an audio link/URL:"] = "Podaj link do muzyki"; $a->strings["Tag term:"] = ""; $a->strings["Where are you right now?"] = "Gdzie teraz jesteś?"; $a->strings["Delete item(s)?"] = ""; +$a->strings["Post to Email"] = "Wyślij poprzez email"; $a->strings["permissions"] = "zezwolenia"; +$a->strings["Post to Groups"] = ""; +$a->strings["Post to Contacts"] = ""; +$a->strings["Private post"] = ""; $a->strings["Click here to upgrade."] = "Kliknij tu, aby zaktualizować."; $a->strings["This action exceeds the limits set by your subscription plan."] = ""; $a->strings["This action is not available under your subscription plan."] = ""; @@ -2115,7 +2140,7 @@ $a->strings["Requested account is not available."] = ""; $a->strings["Edit profile"] = "Edytuj profil"; $a->strings["Message"] = "Wiadomość"; $a->strings["Manage/edit profiles"] = "Zarządzaj profilami"; -$a->strings["g A l F d"] = ""; +$a->strings["g A l F d"] = "g A I F d"; $a->strings["F d"] = ""; $a->strings["[today]"] = "[dziś]"; $a->strings["Birthday Reminders"] = "Przypomnienia o urodzinach"; From 39d8fec290613cac87c2821b9f7b20fa94d319ca Mon Sep 17 00:00:00 2001 From: 23n Date: Wed, 20 Feb 2013 21:01:19 +0100 Subject: [PATCH 29/32] no more googlegroups googlegroup links deleted, librelist mail list archive added --- doc/Home.md | 3 +-- doc/de/Home.md | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/Home.md b/doc/Home.md index b54ce3585..e986c89ac 100644 --- a/doc/Home.md +++ b/doc/Home.md @@ -36,8 +36,7 @@ Friendica Documentation and Resources **External Resources** * [Main Website](http://friendica.com) -* [Forums](http://groups.google.com/group/friendica) -* [Developer Forums](http://groups.google.com/group/friendica-dev) +* [Mailing List Archive](http://librelist.com/browser/friendica/) **About** diff --git a/doc/de/Home.md b/doc/de/Home.md index b2d8c52e4..260e368a9 100644 --- a/doc/de/Home.md +++ b/doc/de/Home.md @@ -36,8 +36,7 @@ Friendica - Dokumentation und Ressourcen **Externe Ressourcen** * [Haupt-Webseite](http://friendica.com) -* [Foren](http://groups.google.com/group/friendica) -* [Entwickler-Foren](http://groups.google.com/group/friendica-dev) +* [Mailing Liste](http://librelist.com/browser/friendica/) * [Deutsches Friendica-Wiki](http://wiki.toktan.org/doku.php) **Über diese Seite** From 7a1947b88a688505298959020e000c186139c806 Mon Sep 17 00:00:00 2001 From: pixelroot Date: Wed, 20 Feb 2013 21:03:02 +0100 Subject: [PATCH 30/32] modified: view/theme/smoothly/style.css modified: view/theme/smoothly/theme.php --- view/theme/smoothly/style.css | 73 +++++++++++++++++++++++++++++------ view/theme/smoothly/theme.php | 2 +- 2 files changed, 62 insertions(+), 13 deletions(-) diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css index 8e240da3e..e347ce4e1 100644 --- a/view/theme/smoothly/style.css +++ b/view/theme/smoothly/style.css @@ -2,7 +2,7 @@ style.css Smoothly - Created by alex@friendica.pixelbits.de on 2013-01-11 + Created by alex@friendica.pixelbits.de on 2013-02-20 ** Colors ** Blue links - #1873a2 @@ -3522,7 +3522,7 @@ margin-left: 0px; /* ========= */ #adminpage { - width: 80%; + width: 90%; } #pending-update { @@ -3630,13 +3630,25 @@ margin-left: 0px; /* =============== */ .field { - width: 90%; + margin-bottom: 10px; + overflow: auto; + padding-bottom: 0px; + width: 100%; +} + +.field.radio .field_help { + margin-left: 205px; +} + +.field .field_help { + color: #666666; + display: block; + margin-left: 200px; } .field label { - float: left; - min-width: 120px; - margin: 5px 10px 0 0; + float: left; + width: 200px; } .field checkbox { @@ -3646,17 +3658,13 @@ margin-left: 0px; .field input, .field textarea { - width: 220px; + width: 400px; border: 1px solid #CDCDCD; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } -.field textarea { - height: 100px; -} - .field password { height: 100px; margin-left: 150px; @@ -4346,6 +4354,12 @@ div #datebrowse-sidebar.widget { margin:10px 10px 0 0; } +#id_maxreq, +#id_cntunkmail, +#id_expire { + width: 75px; +} + #id_post_newfriend, #id_post_joingroup, #id_post_profilechange, @@ -4358,7 +4372,7 @@ div #datebrowse-sidebar.widget { #id_notify7, #id_notify8, #id_allow_location { - margin: 6px 0 0 0; + margin: 6px 0 0 10px; } #settings-form {} @@ -4374,6 +4388,7 @@ div #datebrowse-sidebar.widget { } #settings-notifications { + width: 400px; border: 1px solid #7C7D7B; box-shadow: 0 0 8px #BDBDBD; -moz-box-shadow: 3px 3px 4px #959494; @@ -4426,3 +4441,37 @@ div #datebrowse-sidebar.widget { width: auto !important; margin-bottom: 5px !important; } + +.onoff { + margin-right: 10px; +} + +.settings-heading { + margin: 25px 0 25px 0; +} + +#id_itemcache, +#id_basepath, +#id_temppath, +#id_lockpath, +#id_proxyuser, +#id_proxy, +#id_allowed_email, +#id_allowed_sites, +#id_directory_submit_url, +#id_register_text { + width: 440px; +} + +#id_itemcache_duration, +#id_abandon_days, +#id_maxloadavg, +#id_poll_interval, +#id_delivery_interval, +#id_timeout, +#id_jpegimagequality, +#id_maximagelength, +#id_maximagesize, +#id_max_daily_registrations { + width: 75px; +} diff --git a/view/theme/smoothly/theme.php b/view/theme/smoothly/theme.php index 16a33d678..c88b27827 100644 --- a/view/theme/smoothly/theme.php +++ b/view/theme/smoothly/theme.php @@ -3,7 +3,7 @@ /* * Name: Smoothly * Description: Like coffee with milk. Theme optimized for iPad[2]. - * Version: Version 0.132 + * Version: Version 0.21 * Author: Alex * Maintainer: Alex * Screenshot: Screenshot From c90272e2ae52ecab496c6aab068a485b8b22e19a Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 20 Feb 2013 21:47:36 +0100 Subject: [PATCH 31/32] supressing warning when importing items. Speeding up community. Changed query for the search. --- include/items.php | 16 +++++++++------- mod/community.php | 2 +- mod/search.php | 10 +++++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/include/items.php b/include/items.php index 46eafdc25..b7be27932 100755 --- a/include/items.php +++ b/include/items.php @@ -835,14 +835,16 @@ function get_atom_elements($feed,$item) { // Search for ostatus conversation url $links = $item->feed->data["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["feed"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["entry"][0]["child"]["http://www.w3.org/2005/Atom"]["link"]; - foreach ($links as $link) { - $conversation = array_shift($link["attribs"]); + if (is_array($links)) { + foreach ($links as $link) { + $conversation = array_shift($link["attribs"]); - if ($conversation["rel"] == "ostatus:conversation") { - $res["ostatus_conversation"] = $conversation["href"]; - logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]); - } - }; + if ($conversation["rel"] == "ostatus:conversation") { + $res["ostatus_conversation"] = $conversation["href"]; + logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]); + } + }; + } $arr = array('feed' => $feed, 'item' => $item, 'result' => $res); diff --git a/mod/community.php b/mod/community.php index e267447e4..27a9e2194 100644 --- a/mod/community.php +++ b/mod/community.php @@ -70,7 +70,7 @@ function community_content(&$a, $update = 0) { `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`, `user`.`nickname`, `user`.`hidewall` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM `item` FORCE INDEX (`received`) LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' diff --git a/mod/search.php b/mod/search.php index 93feebdd9..f7d235d45 100644 --- a/mod/search.php +++ b/mod/search.php @@ -140,9 +140,13 @@ function search_content(&$a) { }*/ if($tag) { - $sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d", + //$sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d", + // dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); + //$sql_table = "`term` LEFT JOIN `item` ON `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` "; + + $sql_extra = sprintf(" AND EXISTS (SELECT * FROM `term` WHERE `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d) GROUP BY `item`.`uri` ", dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); - $sql_table = "`term` LEFT JOIN `item` ON `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` "; + $sql_table = "`item` FORCE INDEX (`uri`) "; } else { if (get_config('system','use_fulltext_engine')) { $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search))); @@ -178,7 +182,7 @@ function search_content(&$a) { } } - $r = q("SELECT distinct(`item`.`uri`), `item`.*, `item`.`id` AS `item_id`, + $r = q("SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`, `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`, From 5c6562a996ceed10154cb8305b6a6950f22dc2db Mon Sep 17 00:00:00 2001 From: pixelroot Date: Thu, 21 Feb 2013 08:46:30 +0100 Subject: [PATCH 32/32] modified: view/theme/smoothly/style.css --- view/theme/smoothly/style.css | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css index e347ce4e1..cbce920e7 100644 --- a/view/theme/smoothly/style.css +++ b/view/theme/smoothly/style.css @@ -2,7 +2,7 @@ style.css Smoothly - Created by alex@friendica.pixelbits.de on 2013-02-20 + Created by alex@friendica.pixelbits.de on 2013-02-21 ** Colors ** Blue links - #1873a2 @@ -202,6 +202,12 @@ section { clear: both; } +.login-extra-links { + width: 100%; + margin-left: 145px; + clear: both; +} + #login-extra-links a { display: block; margin: 10px; @@ -215,7 +221,7 @@ section { } #login_standard { - width: 250px; + width: 260px; float: left; border: 1px solid #7C7D7B; border-radius: 5px; @@ -256,7 +262,7 @@ section { } #login-submit-button { - width: 271px; + width: 280px; } .login-form, @@ -4475,3 +4481,4 @@ div #datebrowse-sidebar.widget { #id_max_daily_registrations { width: 75px; } +