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 7eb090136f..6e856f9602 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 2ed1b812a4..8399b796dc 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 0ea9954b0a..e5aaecacd7 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 f97fc2f590..dcf8d34253 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 a9e5998055..bf0f86eaee 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 369637fe60..bc3c1aabd1 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 6e856f9602..b93f56e179 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 0000000000..384d6581fa --- /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 e5aaecacd7..215c987b19 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 b29afdb741..7308a6acf7 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 dcf8d34253..aa66769db2 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 956816fed0..6694fbc780 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 bf0f86eaee..7bd0fec4db 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 bc3c1aabd1..f7fdfa3d9e 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 2c5ddc626f..1b33378b0a 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 08edc19340..a7cfa079d1 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 384d6581fa..aabe40d1c6 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 8399b796dc..7096239b0f 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 2524ae0634..ecef7c1dfb 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 6694fbc780..aedd639403 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 7308a6acf7..04ae451a1c 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 7bd0fec4db..6864e533d8 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 f7fdfa3d9e..99d60429ae 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 1b33378b0a..4efb0c614a 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 aabe40d1c6..6a5728a9ba 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 ecef7c1dfb..4a8b54762c 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 aedd639403..c6d5989fb5 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 215c987b19..648b558071 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 04ae451a1c..4bee3a3bc1 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 7035c66904..118149227e 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 118149227e..37aab7c1f2 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 9420d8b74a..7665342739 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 ad33705bf1..a9f70aa40d 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 f6e6cc2a30..1ecee598cf 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 1d74d9cf5c..5b64ef2f94 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 318c37233c..06f5d58b22 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 4a8b54762c..872c34da95 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 1ecee598cf..df23c2549c 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 7665342739..7c4e606a72 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 b93f56e179..3779126840 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 6a5728a9ba..b02adc3d83 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 5b64ef2f94..54c9f39fa6 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 7096239b0f..452ec8a36d 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 648b558071..de28da4642 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 611cbda886..7b72a199df 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 3b681e9918..8e77f03336 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 59f3b1a5fc..fc167bb82b 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 df23c2549c..1de65c42cb 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 7df59f727a..cc5f2a9834 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 4537fd0720..aa716f100b 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 cd7fa03b59..b851068f40 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 a9f70aa40d..dd7f56bfd9 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 1de65c42cb..10590f8bf4 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 53dd06d1fd..8f0b07bc93 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 b851068f40..b0e77a71fb 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 613c2b7db0..45213cc3b7 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 dd7f56bfd9..50354b7f49 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 54b392b386..1a50ac204a 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 10590f8bf4..400c1386be 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 db3224f296..a6928793d4 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 b02adc3d83..c81a752d54 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 8f0b07bc93..83639ce85c 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 452ec8a36d..926fbbf525 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 b0e77a71fb..da8ee8efa8 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 cc66d380b7..306799c52c 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 a6928793d4..7a4a96670d 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 83639ce85c..9ff5c79077 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 0ea09c0c7a..49e6fccb05 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 89363541ca..dd9ff84512 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 872c34da95..9909cd4451 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 8b838f7d00..bd7a95cf2a 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 da8ee8efa8..fa968ce42e 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 1a50ac204a..94835d7ad1 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 0000000000..a566733905
--- /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 7a4a96670d..12c29d1a6e 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 18281e9bcb..aa58287532 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 94835d7ad1..13566075ba 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 a566733905..2851fdb1f9 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 2851fdb1f9..4bf80aa042 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 cf060ebf49..da0d8c3aae 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 4bf80aa042..3d40d673d1 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 aa5bb7268d..a7f5c9bf82 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 c6d5989fb5..b368deb49d 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 9e79f843fe..d74b846d00 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 3d40d673d1..cdaf80d76b 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 c9c46188f6..e85a4555d3 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 6f53d8f4a2..50dbd67a89 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 a7f5c9bf82..e267447e41 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 93db82a641..c92ab387b0 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 4efb0c614a..81255ca37f 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 45213cc3b7..a587d8c380 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 aa66769db2..4a116c5b72 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 d04ab71dea..4fd4a23dc0 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 50dbd67a89..0000000000 --- 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 8a79fb108c..6e18ec5c86 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 e8fdd42589..1a2a83339b 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 f033b52eef..af78ca734b 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 6e18ec5c86..9400a28e04 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 1a2a83339b..a6fe2d789c 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 af78ca734b..bad0f52756 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 d77e653f14..0467524f68 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 9795cacf92..b89cb2c53d 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 89b55cdb9c..6dd58757b9 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 038ac32a55..bf4bd454b1 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 aaeee8af5b..dd107db441 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 68439ebdf1..b070090d5c 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 b54ce35856..e986c89ac9 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 b2d8c52e4f..260e368a9e 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 8e240da3ef..e347ce4e1c 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 16a33d678c..c88b278274 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 46eafdc25b..b7be27932f 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 e267447e41..27a9e21941 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 93feebdd9a..f7d235d458 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 e347ce4e1c..cbce920e73 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; } +