diff --git a/boot.php b/boot.php index dd70040c64..94e1e0ab8c 100644 --- a/boot.php +++ b/boot.php @@ -590,15 +590,6 @@ class App { if(x($_SERVER,'SERVER_NAME')) { $this->hostname = $_SERVER['SERVER_NAME']; - // See bug 437 - this didn't work so disabling it - //if(stristr($this->hostname,'xn--')) { - // PHP or webserver may have converted idn to punycode, so - // convert punycode back to utf-8 - // require_once('library/simplepie/idn/idna_convert.class.php'); - // $x = new idna_convert(); - // $this->hostname = $x->decode($_SERVER['SERVER_NAME']); - //} - if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) $this->hostname .= ':' . $_SERVER['SERVER_PORT']; /* @@ -1039,19 +1030,29 @@ class App { $this->performance[$value] += (float)$duration; $this->performance["marktime"] += (float)$duration; - // Trace the different functions with their timestamps - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5); + $callstack = $this->callstack(); + $this->callstack[$value][$callstack] += (float)$duration; + + } + + /** + * @brief Returns a string with a callstack. Can be used for logging. + * + * @return string + */ + function callstack() { + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 6); + + // We remove the first two items from the list since they contain data that we don't need. + array_shift($trace); array_shift($trace); - $function = array(); + $callstack = array(); foreach ($trace AS $func) - $function[] = $func["function"]; - - $function = implode(", ", $function); - - $this->callstack[$value][$function] += (float)$duration; + $callstack[] = $func["function"]; + return implode(", ", $callstack); } function mark_timestamp($mark) { diff --git a/database.sql b/database.sql index 70b315ea24..25faf0f4c0 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.5-dev (Asparagus) --- DB_UPDATE_VERSION 1193 +-- DB_UPDATE_VERSION 1194 -- ------------------------------------------ @@ -119,6 +119,7 @@ CREATE TABLE IF NOT EXISTS `contact` ( `keywords` text NOT NULL, `gender` varchar(32) NOT NULL DEFAULT '', `attag` varchar(255) NOT NULL DEFAULT '', + `avatar` varchar(255) NOT NULL DEFAULT '', `photo` text NOT NULL, `thumb` text NOT NULL, `micro` text NOT NULL, @@ -411,21 +412,6 @@ CREATE TABLE IF NOT EXISTS `gserver` ( INDEX `nurl` (`nurl`) ) DEFAULT CHARSET=utf8; --- --- TABLE guid --- -CREATE TABLE IF NOT EXISTS `guid` ( - `id` int(10) unsigned NOT NULL auto_increment, - `guid` varchar(255) NOT NULL DEFAULT '', - `plink` varchar(255) NOT NULL DEFAULT '', - `uri` varchar(255) NOT NULL DEFAULT '', - `network` varchar(32) NOT NULL DEFAULT '', - PRIMARY KEY(`id`), - INDEX `guid` (`guid`), - INDEX `plink` (`plink`), - INDEX `uri` (`uri`) -) DEFAULT CHARSET=utf8; - -- -- TABLE hook -- diff --git a/include/Scrape.php b/include/Scrape.php index ca6489b16a..e8e9a97a16 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -2,6 +2,7 @@ require_once('library/HTML5/Parser.php'); require_once('include/crypto.php'); +require_once('include/feed.php'); if(! function_exists('scrape_dfrn')) { function scrape_dfrn($url, $dont_probe = false) { @@ -12,6 +13,20 @@ function scrape_dfrn($url, $dont_probe = false) { logger('scrape_dfrn: url=' . $url); + // Try to fetch the data from noscrape. This is faster than parsing the HTML + $noscrape = str_replace("/hcard/", "/noscrape/", $url); + $noscrapejson = fetch_url($noscrape); + $noscrapedata = array(); + if ($noscrapejson) { + $noscrapedata = json_decode($noscrapejson, true); + + if (is_array($noscrapedata)) { + if ($noscrapedata["nick"] != "") + return($noscrapedata); + } else + $noscrapedata = array(); + } + $s = fetch_url($url); if(! $s) @@ -91,8 +106,7 @@ function scrape_dfrn($url, $dont_probe = false) { } } } - - return $ret; + return array_merge($ret, $noscrapedata); }} @@ -366,8 +380,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { $network = NETWORK_TWITTER; } - // Twitter is deactivated since twitter closed its old API - //$twitter = ((strpos($url,'twitter.com') !== false) ? true : false); $lastfm = ((strpos($url,'last.fm/user') !== false) ? true : false); $at_addr = ((strpos($url,'@') !== false) ? true : false); @@ -604,21 +616,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { $vcard['nick'] = $addr_parts[0]; } - /* if($twitter) { - logger('twitter: setup'); - $tid = basename($url); - $tapi = 'https://api.twitter.com/1/statuses/user_timeline.rss'; - if(intval($tid)) - $poll = $tapi . '?user_id=' . $tid; - else - $poll = $tapi . '?screen_name=' . $tid; - $profile = 'http://twitter.com/#!/' . $tid; - //$vcard['photo'] = 'https://api.twitter.com/1/users/profile_image/' . $tid; - $vcard['photo'] = 'https://api.twitter.com/1/users/profile_image?screen_name=' . $tid . '&size=bigger'; - $vcard['nick'] = $tid; - $vcard['fn'] = $tid; - } */ - if($lastfm) { $profile = $url; $poll = str_replace(array('www.','last.fm/'),array('','ws.audioscrobbler.com/1.0/'),$url) . '/recenttracks.rss'; @@ -662,85 +659,34 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { if(x($feedret,'photo') && (! x($vcard,'photo'))) $vcard['photo'] = $feedret['photo']; - require_once('library/simplepie/simplepie.inc'); - $feed = new SimplePie(); + $cookiejar = tempnam(get_temppath(), 'cookiejar-scrape-feed-'); $xml = fetch_url($poll, false, $redirects, 0, Null, $cookiejar); unlink($cookiejar); logger('probe_url: fetch feed: ' . $poll . ' returns: ' . $xml, LOGGER_DATA); - $a = get_app(); - logger('probe_url: scrape_feed: headers: ' . $a->get_curl_headers(), LOGGER_DATA); - - // Don't try and parse an empty string - $feed->set_raw_data(($xml) ? $xml : ''); - - $feed->init(); - if($feed->error()) { - logger('probe_url: scrape_feed: Error parsing XML: ' . $feed->error()); + if ($xml == "") { + logger("scrape_feed: XML is empty for feed ".$poll); $network = NETWORK_PHANTOM; - } + } else { + $data = feed_import($xml,$dummy1,$dummy2, $dummy3, true); - if(! x($vcard,'photo')) - $vcard['photo'] = $feed->get_image_url(); - $author = $feed->get_author(); + if (!is_array($data)) { + logger("scrape_feed: This doesn't seem to be a feed: ".$poll); + $network = NETWORK_PHANTOM; + } else { + if (($vcard["photo"] == "") AND ($data["header"]["author-avatar"] != "")) + $vcard["photo"] = $data["header"]["author-avatar"]; - if($author) { - $vcard['fn'] = unxmlify(trim($author->get_name())); - if(! $vcard['fn']) - $vcard['fn'] = trim(unxmlify($author->get_email())); - if(strpos($vcard['fn'],'@') !== false) - $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@')); + if (($vcard["fn"] == "") AND ($data["header"]["author-name"] != "")) + $vcard["fn"] = $data["header"]["author-name"]; - $email = unxmlify($author->get_email()); - if(! $profile && $author->get_link()) - $profile = trim(unxmlify($author->get_link())); - if(! $vcard['photo']) { - $rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); - if($rawtags) { - $elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]; - if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo')) - $vcard['photo'] = $elems['link'][0]['attribs']['']['href']; - } - } - // Fetch fullname via poco:displayName - $pocotags = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); - if ($pocotags) { - $elems = $pocotags[0]['child']['http://portablecontacts.net/spec/1.0']; - if (isset($elems["displayName"])) - $vcard['fn'] = $elems["displayName"][0]["data"]; - if (isset($elems["preferredUsername"])) - $vcard['nick'] = $elems["preferredUsername"][0]["data"]; - } - } - else { - $item = $feed->get_item(0); - if($item) { - $author = $item->get_author(); - if($author) { - $vcard['fn'] = trim(unxmlify($author->get_name())); - if(! $vcard['fn']) - $vcard['fn'] = trim(unxmlify($author->get_email())); - if(strpos($vcard['fn'],'@') !== false) - $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@')); - $email = unxmlify($author->get_email()); - if(! $profile && $author->get_link()) - $profile = trim(unxmlify($author->get_link())); - } - if(! $vcard['photo']) { - $rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail'); - if($rawmedia && $rawmedia[0]['attribs']['']['url']) - $vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']); - } - if(! $vcard['photo']) { - $rawtags = $item->get_item_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); - if($rawtags) { - $elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]; - if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo')) - $vcard['photo'] = $elems['link'][0]['attribs']['']['href']; - } - } + if (($vcard["nick"] == "") AND ($data["header"]["author-nick"] != "")) + $vcard["nick"] = $data["header"]["author-nick"]; + + if(!$profile AND ($data["header"]["author-link"] != "") AND !in_array($network, array("", NETWORK_FEED))) + $profile = $data["header"]["author-link"]; } } @@ -783,27 +729,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { } } - if((! $vcard['photo']) && strlen($email)) - $vcard['photo'] = avatar_img($email); - if($poll === $profile) - $lnk = $feed->get_permalink(); - if(isset($lnk) && strlen($lnk)) - $profile = $lnk; - - if(! $network) { + if(! $network) $network = NETWORK_FEED; - // If it is a feed, don't take the author name as feed name - unset($vcard['fn']); - } - if(! (x($vcard,'fn'))) - $vcard['fn'] = notags($feed->get_title()); - if(! (x($vcard,'fn'))) - $vcard['fn'] = notags($feed->get_description()); - if(strpos($vcard['fn'],'Twitter / ') !== false) { - $vcard['fn'] = substr($vcard['fn'],strpos($vcard['fn'],'/')+1); - $vcard['fn'] = trim($vcard['fn']); - } if(! x($vcard,'nick')) { $vcard['nick'] = strtolower(notags(unxmlify($vcard['fn']))); if(strpos($vcard['nick'],' ')) @@ -816,7 +744,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { if(! x($vcard,'photo')) { $a = get_app(); - $vcard['photo'] = $a->get_baseurl() . '/images/person-175.jpg' ; + $vcard['photo'] = App::get_baseurl() . '/images/person-175.jpg' ; } if(! $profile) @@ -828,18 +756,18 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { $vcard['fn'] = $url; if (($notify != "") AND ($poll != "")) { - $baseurl = matching(normalise_link($notify), normalise_link($poll)); + $baseurl = matching_url(normalise_link($notify), normalise_link($poll)); - $baseurl2 = matching($baseurl, normalise_link($profile)); + $baseurl2 = matching_url($baseurl, normalise_link($profile)); if ($baseurl2 != "") $baseurl = $baseurl2; } if (($baseurl == "") AND ($notify != "")) - $baseurl = matching(normalise_link($profile), normalise_link($notify)); + $baseurl = matching_url(normalise_link($profile), normalise_link($notify)); if (($baseurl == "") AND ($poll != "")) - $baseurl = matching(normalise_link($profile), normalise_link($poll)); + $baseurl = matching_url(normalise_link($profile), normalise_link($poll)); $baseurl = rtrim($baseurl, "/"); @@ -894,19 +822,56 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { return $result; } -function matching($part1, $part2) { - $len = min(strlen($part1), strlen($part2)); +/** + * @brief Find the matching part between two url + * + * @param string $url1 + * @param string $url2 + * @return string The matching part + */ +function matching_url($url1, $url2) { + + if (($url1 == "") OR ($url2 == "")) + return ""; + + $url1 = normalise_link($url1); + $url2 = normalise_link($url2); + + $parts1 = parse_url($url1); + $parts2 = parse_url($url2); + + if (!isset($parts1["host"]) OR !isset($parts2["host"])) + return ""; + + if ($parts1["scheme"] != $parts2["scheme"]) + return ""; + + if ($parts1["host"] != $parts2["host"]) + return ""; + + if ($parts1["port"] != $parts2["port"]) + return ""; + + $match = $parts1["scheme"]."://".$parts1["host"]; + + if ($parts1["port"]) + $match .= ":".$parts1["port"]; + + $pathparts1 = explode("/", $parts1["path"]); + $pathparts2 = explode("/", $parts2["path"]); - $match = ""; - $matching = true; $i = 0; - while (($i <= $len) AND $matching) { - if (substr($part1, $i, 1) == substr($part2, $i, 1)) - $match .= substr($part1, $i, 1); - else - $matching = false; + $path = ""; + do { + $path1 = $pathparts1[$i]; + $path2 = $pathparts2[$i]; - $i++; - } - return($match); + if ($path1 == $path2) + $path .= $path1."/"; + + } while (($path1 == $path2) AND ($i++ <= count($pathparts1))); + + $match .= $path; + + return normalise_link($match); } diff --git a/include/contact_selectors.php b/include/contact_selectors.php index f104866232..a884a6b52b 100644 --- a/include/contact_selectors.php +++ b/include/contact_selectors.php @@ -99,8 +99,16 @@ function network_to_name($s, $profile = "") { $networkname = str_replace($search,$replace,$s); - if (($s == NETWORK_DIASPORA) AND ($profile != "") AND diaspora_is_redmatrix($profile)) - $networkname = t("Redmatrix"); + if (($s == NETWORK_DIASPORA) AND ($profile != "") AND diaspora_is_redmatrix($profile)) { + $networkname = t("Hubzilla/Redmatrix"); + + $r = q("SELECT `gserver`.`platform` FROM `gcontact` + INNER JOIN `gserver` ON `gserver`.`nurl` = `gcontact`.`server_url` + WHERE `gcontact`.`nurl` = '%s' AND `platform` != ''", + dbesc(normalise_link($profile))); + if ($r) + $networkname = $r[0]["platform"]; + } return $networkname; } diff --git a/include/dfrn.php b/include/dfrn.php index a96d2830e4..f7a05bdb63 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -95,7 +95,7 @@ class dfrn { $sql_extra = " AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' "; - $r = q("SELECT `contact`.*, `user`.`uid` AS `user_uid`, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags` + $r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags` FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid` WHERE `contact`.`self` = 1 AND `user`.`nickname` = '%s' LIMIT 1", dbesc($owner_nick) @@ -105,7 +105,7 @@ class dfrn { killme(); $owner = $r[0]; - $owner_id = $owner['user_uid']; + $owner_id = $owner['uid']; $owner_nick = $owner['nickname']; $sql_post_table = ""; @@ -483,7 +483,7 @@ class dfrn { "media:width" => 175, "media:height" => 175, "href" => $owner['photo']); xml_add_element($doc, $author, "link", "", $attributes); - $birthday = feed_birthday($owner['user_uid'], $owner['timezone']); + $birthday = feed_birthday($owner['uid'], $owner['timezone']); if ($birthday) xml_add_element($doc, $author, "dfrn:birthday", $birthday); @@ -498,7 +498,7 @@ class dfrn { FROM `profile` INNER JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `profile`.`is-default` AND NOT `user`.`hidewall` AND `user`.`uid` = %d", - intval($owner['user_uid'])); + intval($owner['uid'])); if ($r) { $profile = $r[0]; xml_add_element($doc, $author, "poco:displayName", $profile["name"]); @@ -1114,13 +1114,13 @@ class dfrn { * * @return Returns an array with relevant data of the author */ - private function fetchauthor($xpath, $context, $importer, $element, $onlyfetch) { + private function fetchauthor($xpath, $context, $importer, $element, $onlyfetch, $xml = "") { $author = array(); $author["name"] = $xpath->evaluate($element."/atom:name/text()", $context)->item(0)->nodeValue; $author["link"] = $xpath->evaluate($element."/atom:uri/text()", $context)->item(0)->nodeValue; - $r = q("SELECT `id`, `uid`, `network`, `avatar-date`, `name-date`, `uri-date`, `addr`, + $r = q("SELECT `id`, `uid`, `url`, `network`, `avatar-date`, `name-date`, `uri-date`, `addr`, `name`, `nick`, `about`, `location`, `keywords`, `bdyear`, `bd` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", intval($importer["uid"]), dbesc(normalise_link($author["link"])), dbesc(NETWORK_STATUSNET)); @@ -1129,6 +1129,9 @@ class dfrn { $author["contact-id"] = $r[0]["id"]; $author["network"] = $r[0]["network"]; } else { + if (!$onlyfetch) + logger("Contact ".$author["link"]." wasn't found for user ".$importer["uid"]." XML: ".$xml, LOGGER_DEBUG); + $author["contact-id"] = $importer["id"]; $author["network"] = $importer["network"]; $onlyfetch = true; @@ -1158,38 +1161,41 @@ class dfrn { } if ($r AND !$onlyfetch) { + logger("Check if contact details for contact ".$r[0]["id"]." (".$r[0]["nick"].") have to be updated.", LOGGER_DEBUG); + + $poco = array("url" => $contact["url"]); // When was the last change to name or uri? $name_element = $xpath->query($element."/atom:name", $context)->item(0); foreach($name_element->attributes AS $attributes) if ($attributes->name == "updated") - $contact["name-date"] = $attributes->textContent; + $poco["name-date"] = $attributes->textContent; $link_element = $xpath->query($element."/atom:link", $context)->item(0); foreach($link_element->attributes AS $attributes) if ($attributes->name == "updated") - $contact["uri-date"] = $attributes->textContent; + $poco["uri-date"] = $attributes->textContent; // Update contact data $value = $xpath->evaluate($element."/dfrn:handle/text()", $context)->item(0)->nodeValue; if ($value != "") - $contact["addr"] = $value; + $poco["addr"] = $value; $value = $xpath->evaluate($element."/poco:displayName/text()", $context)->item(0)->nodeValue; if ($value != "") - $contact["name"] = $value; + $poco["name"] = $value; $value = $xpath->evaluate($element."/poco:preferredUsername/text()", $context)->item(0)->nodeValue; if ($value != "") - $contact["nick"] = $value; + $poco["nick"] = $value; $value = $xpath->evaluate($element."/poco:note/text()", $context)->item(0)->nodeValue; if ($value != "") - $contact["about"] = $value; + $poco["about"] = $value; $value = $xpath->evaluate($element."/poco:address/poco:formatted/text()", $context)->item(0)->nodeValue; if ($value != "") - $contact["location"] = $value; + $poco["location"] = $value; /// @todo Add support for the following fields that we don't support by now in the contact table: /// - poco:utcOffset @@ -1206,7 +1212,7 @@ class dfrn { $tags[$tag->nodeValue] = $tag->nodeValue; if (count($tags)) - $contact["keywords"] = implode(", ", $tags); + $poco["keywords"] = implode(", ", $tags); // "dfrn:birthday" contains the birthday converted to UTC $old_bdyear = $contact["bdyear"]; @@ -1216,7 +1222,7 @@ class dfrn { if (strtotime($birthday) > time()) { $bd_timestamp = strtotime($birthday); - $contact["bdyear"] = date("Y", $bd_timestamp); + $poco["bdyear"] = date("Y", $bd_timestamp); } // "poco:birthday" is the birthday in the format "yyyy-mm-dd" @@ -1231,9 +1237,11 @@ class dfrn { $bdyear = $bdyear + 1; } - $contact["bd"] = $value; + $poco["bd"] = $value; } + $contact = array_merge($contact, $poco); + if ($old_bdyear != $contact["bdyear"]) self::birthday_event($contact, $birthday); @@ -1244,6 +1252,7 @@ class dfrn { unset($fields["id"]); unset($fields["uid"]); + unset($fields["url"]); unset($fields["avatar-date"]); unset($fields["name-date"]); unset($fields["uri-date"]); @@ -1263,7 +1272,7 @@ class dfrn { } if ($update) { - logger("Update contact data for contact ".$contact["id"], LOGGER_DEBUG); + logger("Update contact data for contact ".$contact["id"]." (".$contact["nick"].")", LOGGER_DEBUG); q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `about` = '%s', `location` = '%s', `addr` = '%s', `keywords` = '%s', `bdyear` = '%s', `bd` = '%s', @@ -1282,9 +1291,10 @@ class dfrn { // It is used in the socgraph.php to prevent that old contact data // that was relayed over several servers can overwrite contact // data that we received directly. - $contact["generation"] = 2; - $contact["photo"] = $author["avatar"]; - update_gcontact($contact); + + $poco["generation"] = 2; + $poco["photo"] = $author["avatar"]; + update_gcontact($poco); } return($author); @@ -1954,6 +1964,8 @@ class dfrn { $item['body'] = @html2bbcode($item['body']); } + /// @todo We should check for a repeated post and if we know the repeated author. + // We don't need the content element since "dfrn:env" is always present //$item["body"] = $xpath->query("atom:content/text()", $entry)->item(0)->nodeValue; @@ -2368,8 +2380,14 @@ class dfrn { $header["contact-id"] = $importer["id"]; // Update the contact table if the data has changed + + // The "atom:author" is only present in feeds + if ($xpath->query("/atom:feed/atom:author")->length > 0) + self::fetchauthor($xpath, $doc->firstChild, $importer, "atom:author", false, $xml); + // Only the "dfrn:owner" in the head section contains all data - self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false); + if ($xpath->query("/atom:feed/dfrn:owner")->length > 0) + self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false, $xml); logger("Import DFRN message for user ".$importer["uid"]." from contact ".$importer["id"], LOGGER_DEBUG); diff --git a/include/feed.php b/include/feed.php index eb91f7efd4..04cfba75a6 100644 --- a/include/feed.php +++ b/include/feed.php @@ -2,7 +2,18 @@ require_once("include/html2bbcode.php"); require_once("include/items.php"); -function feed_import($xml,$importer,&$contact, &$hub) { +/** + * @brief Read a RSS/RDF/Atom feed and create an item entry for it + * + * @param string $xml The feed data + * @param array $importer The user record of the importer + * @param array $contact The contact record of the feed + * @param string $hub Unused dummy value for compatibility reasons + * @param bool $simulate If enabled, no data is imported + * + * @return array In simulation mode it returns the header and the first item + */ +function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $a = get_app(); @@ -14,18 +25,19 @@ function feed_import($xml,$importer,&$contact, &$hub) { $doc = new DOMDocument(); @$doc->loadXML($xml); $xpath = new DomXPath($doc); - $xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom"); + $xpath->registerNamespace('atom', NAMESPACE_ATOM1); $xpath->registerNamespace('dc', "http://purl.org/dc/elements/1.1/"); $xpath->registerNamespace('content', "http://purl.org/rss/1.0/modules/content/"); $xpath->registerNamespace('rdf', "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); $xpath->registerNamespace('rss', "http://purl.org/rss/1.0/"); $xpath->registerNamespace('media', "http://search.yahoo.com/mrss/"); + $xpath->registerNamespace('poco', NAMESPACE_POCO); $author = array(); // Is it RDF? if ($xpath->query('/rdf:RDF/rss:channel')->length > 0) { - //$author["author-link"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:link/text()')->item(0)->nodeValue; + $author["author-link"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:link/text()')->item(0)->nodeValue; $author["author-name"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:title/text()')->item(0)->nodeValue; if ($author["author-name"] == "") @@ -36,19 +48,27 @@ function feed_import($xml,$importer,&$contact, &$hub) { // Is it Atom? if ($xpath->query('/atom:feed/atom:entry')->length > 0) { - //$self = $xpath->query("/atom:feed/atom:link[@rel='self']")->item(0)->attributes; - //if (is_object($self)) - // foreach($self AS $attributes) - // if ($attributes->name == "href") - // $author["author-link"] = $attributes->textContent; + $alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes; + if (is_object($alternate)) + foreach($alternate AS $attributes) + if ($attributes->name == "href") + $author["author-link"] = $attributes->textContent; - //if ($author["author-link"] == "") { - // $alternate = $xpath->query("/atom:feed/atom:link[@rel='alternate']")->item(0)->attributes; - // if (is_object($alternate)) - // foreach($alternate AS $attributes) - // if ($attributes->name == "href") - // $author["author-link"] = $attributes->textContent; - //} + if ($author["author-link"] == "") + $author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue; + + if ($author["author-link"] == "") { + $self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes; + if (is_object($self)) + foreach($self AS $attributes) + if ($attributes->name == "href") + $author["author-link"] = $attributes->textContent; + } + + if ($author["author-link"] == "") + $author["author-link"] = $xpath->evaluate('/atom:feed/atom:id/text()')->item(0)->nodeValue; + + $author["author-avatar"] = $xpath->evaluate('/atom:feed/atom:logo/text()')->item(0)->nodeValue; $author["author-name"] = $xpath->evaluate('/atom:feed/atom:title/text()')->item(0)->nodeValue; @@ -58,7 +78,13 @@ function feed_import($xml,$importer,&$contact, &$hub) { if ($author["author-name"] == "") $author["author-name"] = $xpath->evaluate('/atom:feed/atom:author/atom:name/text()')->item(0)->nodeValue; - //$author["author-avatar"] = $xpath->evaluate('/atom:feed/atom:logo/text()')->item(0)->nodeValue; + $value = $xpath->evaluate('atom:author/poco:displayName/text()')->item(0)->nodeValue; + if ($value != "") + $author["author-name"] = $value; + + $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()')->item(0)->nodeValue; + if ($value != "") + $author["author-nick"] = $value; $author["edited"] = $author["created"] = $xpath->query('/atom:feed/atom:updated/text()')->item(0)->nodeValue; @@ -69,9 +95,10 @@ function feed_import($xml,$importer,&$contact, &$hub) { // Is it RSS? if ($xpath->query('/rss/channel')->length > 0) { - //$author["author-link"] = $xpath->evaluate('/rss/channel/link/text()')->item(0)->nodeValue; + $author["author-link"] = $xpath->evaluate('/rss/channel/link/text()')->item(0)->nodeValue; + $author["author-name"] = $xpath->evaluate('/rss/channel/title/text()')->item(0)->nodeValue; - //$author["author-avatar"] = $xpath->evaluate('/rss/channel/image/url/text()')->item(0)->nodeValue; + $author["author-avatar"] = $xpath->evaluate('/rss/channel/image/url/text()')->item(0)->nodeValue; if ($author["author-name"] == "") $author["author-name"] = $xpath->evaluate('/rss/channel/copyright/text()')->item(0)->nodeValue; @@ -86,18 +113,21 @@ function feed_import($xml,$importer,&$contact, &$hub) { $entries = $xpath->query('/rss/channel/item'); } - //if ($author["author-link"] == "") + if (!$simulate) { $author["author-link"] = $contact["url"]; - if ($author["author-name"] == "") - $author["author-name"] = $contact["name"]; + if ($author["author-name"] == "") + $author["author-name"] = $contact["name"]; - //if ($author["author-avatar"] == "") $author["author-avatar"] = $contact["thumb"]; - $author["owner-link"] = $contact["url"]; - $author["owner-name"] = $contact["name"]; - $author["owner-avatar"] = $contact["thumb"]; + $author["owner-link"] = $contact["url"]; + $author["owner-name"] = $contact["name"]; + $author["owner-avatar"] = $contact["thumb"]; + + // This is no field in the item table. So we have to unset it. + unset($author["author-nick"]); + } $header = array(); $header["uid"] = $importer["uid"]; @@ -120,6 +150,8 @@ function feed_import($xml,$importer,&$contact, &$hub) { if (!is_object($entries)) return; + $items = array(); + $entrylist = array(); foreach ($entries AS $entry) @@ -201,13 +233,13 @@ function feed_import($xml,$importer,&$contact, &$hub) { if ($creator != "") $item["author-name"] = $creator; - //$item["object"] = $xml; - - $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')", - intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN)); - if ($r) { - logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG); - continue; + if (!$simulate) { + $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')", + intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN)); + if ($r) { + logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG); + continue; + } } /// @TODO ? @@ -272,14 +304,21 @@ function feed_import($xml,$importer,&$contact, &$hub) { $item["body"] = html2bbcode($body); } - logger("Stored feed: ".print_r($item, true), LOGGER_DEBUG); + if (!$simulate) { + logger("Stored feed: ".print_r($item, true), LOGGER_DEBUG); - $notify = item_is_remote_self($contact, $item); - $id = item_store($item, false, $notify); + $notify = item_is_remote_self($contact, $item); + $id = item_store($item, false, $notify); - //print_r($item); + logger("Feed for contact ".$contact["url"]." stored under id ".$id); + } else + $items[] = $item; - logger("Feed for contact ".$contact["url"]." stored under id ".$id); + if ($simulate) + break; } + + if ($simulate) + return array("header" => $author, "items" => $items); } ?> diff --git a/include/follow.php b/include/follow.php index 22ff079b63..410e0e58aa 100644 --- a/include/follow.php +++ b/include/follow.php @@ -1,5 +1,6 @@ NETWORK_OSTATUS, "generation" => 3); + + if (isset($actor->url)) + $contact["url"] = $actor->url; + + if (isset($actor->displayName)) + $contact["name"] = $actor->displayName; + + if (isset($actor->portablecontacts_net->displayName)) + $contact["name"] = $actor->portablecontacts_net->displayName; + + if (isset($actor->portablecontacts_net->preferredUsername)) + $contact["nick"] = $actor->portablecontacts_net->preferredUsername; + + if (isset($actor->id)) + $contact["alias"] = $actor->id; + + if (isset($actor->summary)) + $contact["about"] = $actor->summary; + + if (isset($actor->portablecontacts_net->note)) + $contact["about"] = $actor->portablecontacts_net->note; + + if (isset($actor->portablecontacts_net->addresses->formatted)) + $contact["location"] = $actor->portablecontacts_net->addresses->formatted; + + + if (isset($actor->image->url)) + $contact["photo"] = $actor->image->url; + + if (isset($actor->image->width)) + $avatarwidth = $actor->image->width; + + if (is_array($actor->status_net->avatarLinks)) + foreach ($actor->status_net->avatarLinks AS $avatar) { + if ($avatarsize < $avatar->width) { + $contact["photo"] = $avatar->url; + $avatarsize = $avatar->width; + } + } + + update_gcontact($contact); +} + + function ostatus_completion($conversation_url, $uid, $item = array()) { $a = get_app(); @@ -729,6 +780,9 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { foreach ($items as $single_conv) { + // Update the gcontact table + ostatus_conv_fetch_actor($single_conv->actor); + // Test - remove before flight //$tempfile = tempnam(get_temppath(), "conversation"); //file_put_contents($tempfile, json_encode($single_conv)); diff --git a/include/socgraph.php b/include/socgraph.php index 3b8e9140f8..bd5b1817f0 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -10,7 +10,8 @@ require_once('include/datetime.php'); require_once("include/Scrape.php"); require_once("include/html2bbcode.php"); - +require_once("include/Contact.php"); +require_once("include/Photo.php"); /* * poco_load @@ -428,7 +429,7 @@ function poco_last_updated($profile, $force = false) { if (($gcontacts[0]["server_url"] != "") AND ($gcontacts[0]["nick"] != "")) { // Use noscrape if possible - $server = q("SELECT `noscrape` FROM `gserver` WHERE `nurl` = '%s' AND `noscrape` != ''", dbesc(normalise_link($gcontacts[0]["server_url"]))); + $server = q("SELECT `noscrape`, `network` FROM `gserver` WHERE `nurl` = '%s' AND `noscrape` != ''", dbesc(normalise_link($gcontacts[0]["server_url"]))); if ($server) { $noscraperet = z_fetch_url($server[0]["noscrape"]."/".$gcontacts[0]["nick"]); @@ -437,67 +438,42 @@ function poco_last_updated($profile, $force = false) { $noscrape = json_decode($noscraperet["body"], true); - if (($noscrape["fn"] != "") AND ($noscrape["fn"] != $gcontacts[0]["name"])) - q("UPDATE `gcontact` SET `name` = '%s' WHERE `nurl` = '%s'", - dbesc($noscrape["fn"]), dbesc(normalise_link($profile))); + $contact = array("url" => $profile, + "network" => $server[0]["network"], + "generation" => $gcontacts[0]["generation"]); - if (($noscrape["photo"] != "") AND ($noscrape["photo"] != $gcontacts[0]["photo"])) - q("UPDATE `gcontact` SET `photo` = '%s' WHERE `nurl` = '%s'", - dbesc($noscrape["photo"]), dbesc(normalise_link($profile))); + $contact["name"] = $noscrape["fn"]; + $contact["community"] = $noscrape["comm"]; - if (($noscrape["updated"] != "") AND ($noscrape["updated"] != $gcontacts[0]["updated"])) - q("UPDATE `gcontact` SET `updated` = '%s' WHERE `nurl` = '%s'", - dbesc($noscrape["updated"]), dbesc(normalise_link($profile))); - - if (($noscrape["gender"] != "") AND ($noscrape["gender"] != $gcontacts[0]["gender"])) - q("UPDATE `gcontact` SET `gender` = '%s' WHERE `nurl` = '%s'", - dbesc($noscrape["gender"]), dbesc(normalise_link($profile))); - - if (($noscrape["pdesc"] != "") AND ($noscrape["pdesc"] != $gcontacts[0]["about"])) - q("UPDATE `gcontact` SET `about` = '%s' WHERE `nurl` = '%s'", - dbesc($noscrape["pdesc"]), dbesc(normalise_link($profile))); - - if (($noscrape["about"] != "") AND ($noscrape["about"] != $gcontacts[0]["about"])) - q("UPDATE `gcontact` SET `about` = '%s' WHERE `nurl` = '%s'", - dbesc($noscrape["about"]), dbesc(normalise_link($profile))); - - if (isset($noscrape["comm"]) AND ($noscrape["comm"] != $gcontacts[0]["community"])) - q("UPDATE `gcontact` SET `community` = %d WHERE `nurl` = '%s'", - intval($noscrape["comm"]), dbesc(normalise_link($profile))); - - if (isset($noscrape["tags"])) + if (isset($noscrape["tags"])) { $keywords = implode(" ", $noscrape["tags"]); - else - $keywords = ""; - - if (($keywords != "") AND ($keywords != $gcontacts[0]["keywords"])) - q("UPDATE `gcontact` SET `keywords` = '%s' WHERE `nurl` = '%s'", - dbesc($keywords), dbesc(normalise_link($profile))); - - $location = $noscrape["locality"]; - - if ($noscrape["region"] != "") { - if ($location != "") - $location .= ", "; - - $location .= $noscrape["region"]; + if ($keywords != "") + $contact["keywords"] = $keywords; } - if ($noscrape["country-name"] != "") { - if ($location != "") - $location .= ", "; + $location = formatted_location($noscrape); + if ($location) + $contact["location"] = $location; - $location .= $noscrape["country-name"]; - } + $contact["notify"] = $noscrape["dfrn-notify"]; - if (($location != "") AND ($location != $gcontacts[0]["location"])) - q("UPDATE `gcontact` SET `location` = '%s' WHERE `nurl` = '%s'", - dbesc($location), dbesc(normalise_link($profile))); + // Remove all fields that are not present in the gcontact table + unset($noscrape["fn"]); + unset($noscrape["key"]); + unset($noscrape["homepage"]); + unset($noscrape["comm"]); + unset($noscrape["tags"]); + unset($noscrape["locality"]); + unset($noscrape["region"]); + unset($noscrape["country-name"]); + unset($noscrape["contacts"]); + unset($noscrape["dfrn-request"]); + unset($noscrape["dfrn-confirm"]); + unset($noscrape["dfrn-notify"]); + unset($noscrape["dfrn-poll"]); - // If we got data from noscrape then mark the contact as reachable - if (is_array($noscrape) AND count($noscrape)) - q("UPDATE `gcontact` SET `last_contact` = '%s' WHERE `nurl` = '%s'", - dbesc(datetime_convert()), dbesc(normalise_link($profile))); + $contact = array_merge($contact, $noscrape); + update_gcontact($contact); return $noscrape["updated"]; } @@ -534,25 +510,22 @@ function poco_last_updated($profile, $force = false) { return false; } - if (($data["name"] != "") AND ($data["name"] != $gcontacts[0]["name"])) - q("UPDATE `gcontact` SET `name` = '%s' WHERE `nurl` = '%s'", - dbesc($data["name"]), dbesc(normalise_link($profile))); + $contact = array("generation" => $gcontacts[0]["generation"]); - if (($data["nick"] != "") AND ($data["nick"] != $gcontacts[0]["nick"])) - q("UPDATE `gcontact` SET `nick` = '%s' WHERE `nurl` = '%s'", - dbesc($data["nick"]), dbesc(normalise_link($profile))); + $contact = array_merge($contact, $data); - if (($data["addr"] != "") AND ($data["addr"] != $gcontacts[0]["connect"])) - q("UPDATE `gcontact` SET `connect` = '%s' WHERE `nurl` = '%s'", - dbesc($data["addr"]), dbesc(normalise_link($profile))); + $contact["server_url"] = $data["baseurl"]; - if (($data["photo"] != "") AND ($data["photo"] != $gcontacts[0]["photo"])) - q("UPDATE `gcontact` SET `photo` = '%s' WHERE `nurl` = '%s'", - dbesc($data["photo"]), dbesc(normalise_link($profile))); + unset($contact["batch"]); + unset($contact["poll"]); + unset($contact["request"]); + unset($contact["confirm"]); + unset($contact["poco"]); + unset($contact["priority"]); + unset($contact["pubkey"]); + unset($contact["baseurl"]); - if (($data["baseurl"] != "") AND ($data["baseurl"] != $gcontacts[0]["server_url"])) - q("UPDATE `gcontact` SET `server_url` = '%s' WHERE `nurl` = '%s'", - dbesc($data["baseurl"]), dbesc(normalise_link($profile))); + update_gcontact($contact); $feedret = z_fetch_url($data["poll"]); @@ -921,88 +894,6 @@ function poco_check_server($server_url, $network = "", $force = false) { return !$failure; } -function poco_contact_from_body($body, $created, $cid, $uid) { - preg_replace_callback("/\[share(.*?)\].*?\[\/share\]/ism", - function ($match) use ($created, $cid, $uid){ - return(sub_poco_from_share($match, $created, $cid, $uid)); - }, $body); -} - -function sub_poco_from_share($share, $created, $cid, $uid) { - $profile = ""; - preg_match("/profile='(.*?)'/ism", $share[1], $matches); - if ($matches[1] != "") - $profile = $matches[1]; - - preg_match('/profile="(.*?)"/ism', $share[1], $matches); - if ($matches[1] != "") - $profile = $matches[1]; - - if ($profile == "") - return; - - logger("prepare poco_check for profile ".$profile, LOGGER_DEBUG); - poco_check($profile, "", "", "", "", "", "", "", "", $created, 3, $cid, $uid); -} - -function poco_store($item) { - - // Isn't it public? - if ($item['private']) - return; - - // Or is it from a network where we don't store the global contacts? - if (!in_array($item["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) - return; - - // Is it a global copy? - $store_gcontact = ($item["uid"] == 0); - - // Is it a comment on a global copy? - if (!$store_gcontact AND ($item["uri"] != $item["parent-uri"])) { - $q = q("SELECT `id` FROM `item` WHERE `uri`='%s' AND `uid` = 0", $item["parent-uri"]); - $store_gcontact = count($q); - } - - if (!$store_gcontact) - return; - - // "3" means: We don't know this contact directly (Maybe a reshared item) - $generation = 3; - $network = ""; - $profile_url = $item["author-link"]; - - // Is it a user from our server? - $q = q("SELECT `id` FROM `contact` WHERE `self` AND `nurl` = '%s' LIMIT 1", - dbesc(normalise_link($item["author-link"]))); - if (count($q)) { - logger("Our user (generation 1): ".$item["author-link"], LOGGER_DEBUG); - $generation = 1; - $network = NETWORK_DFRN; - } else { // Is it a contact from a user on our server? - $q = q("SELECT `network`, `url` FROM `contact` WHERE `uid` != 0 AND `network` != '' - AND (`nurl` = '%s' OR `alias` IN ('%s', '%s')) AND `network` != '%s' LIMIT 1", - dbesc(normalise_link($item["author-link"])), - dbesc(normalise_link($item["author-link"])), - dbesc($item["author-link"]), - dbesc(NETWORK_STATUSNET)); - if (count($q)) { - $generation = 2; - $network = $q[0]["network"]; - $profile_url = $q[0]["url"]; - logger("Known contact (generation 2): ".$profile_url, LOGGER_DEBUG); - } - } - - if ($generation == 3) - logger("Unknown contact (generation 3): ".$item["author-link"], LOGGER_DEBUG); - - poco_check($profile_url, $item["author-name"], $network, $item["author-avatar"], "", "", "", "", "", $item["received"], $generation, $item["contact-id"], $item["uid"]); - - // Maybe its a body with a shared item? Then extract a global contact from it. - poco_contact_from_body($item["body"], $item["received"], $item["contact-id"], $item["uid"]); -} - function count_common_friends($uid,$cid) { $r = q("SELECT count(*) as `total` @@ -1531,9 +1422,17 @@ function update_gcontact($contact) { unset($fields["url"]); unset($fields["updated"]); + // Bugfix: We had an error in the storing of keywords which lead to the "0" + // This value is still transmitted via poco. + if ($contact["keywords"] == "0") + unset($contact["keywords"]); + + if ($r[0]["keywords"] == "0") + $r[0]["keywords"] = ""; + // assign all unassigned fields from the database entry foreach ($fields AS $field => $data) - if (!isset($contact[$field])) + if (!isset($contact[$field]) OR ($contact[$field] == "")) $contact[$field] = $r[0][$field]; if ($contact["network"] == NETWORK_STATUSNET) @@ -1542,18 +1441,48 @@ function update_gcontact($contact) { if (!isset($contact["updated"])) $contact["updated"] = datetime_convert(); + if ($contact["server_url"] == "") { + $server_url = $contact["url"]; + + $server_url = matching_url($server_url, $contact["alias"]); + if ($server_url != "") + $contact["server_url"] = $server_url; + + $server_url = matching_url($server_url, $contact["photo"]); + if ($server_url != "") + $contact["server_url"] = $server_url; + + $server_url = matching_url($server_url, $contact["notify"]); + if ($server_url != "") + $contact["server_url"] = $server_url; + } else + $contact["server_url"] = normalise_link($contact["server_url"]); + + if (($contact["addr"] == "") AND ($contact["server_url"] != "") AND ($contact["nick"] != "")) { + $hostname = str_replace("http://", "", $contact["server_url"]); + $contact["addr"] = $contact["nick"]."@".$hostname; + } + // Check if any field changed $update = false; unset($fields["generation"]); - foreach ($fields AS $field => $data) - if ($contact[$field] != $r[0][$field]) - $update = true; + if ((($contact["generation"] > 0) AND ($contact["generation"] <= $r[0]["generation"])) OR ($r[0]["generation"] == 0)) { + foreach ($fields AS $field => $data) + if ($contact[$field] != $r[0][$field]) { + logger("Difference for contact ".$contact["url"]." in field '".$field."'. New value: '".$contact[$field]."', old value '".$r[0][$field]."'", LOGGER_DEBUG); + $update = true; + } - if ($contact["generation"] < $r[0]["generation"]) - $update = true; + if ($contact["generation"] < $r[0]["generation"]) { + logger("Difference for contact ".$contact["url"]." in field 'generation'. new value: '".$contact["generation"]."', old value '".$r[0]["generation"]."'", LOGGER_DEBUG); + $update = true; + } + } if ($update) { + logger("Update gcontact for ".$contact["url"]." Callstack: ".App::callstack(), LOGGER_DEBUG); + q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s', `birthday` = '%s', `gender` = '%s', `keywords` = '%s', `hide` = %d, `nsfw` = %d, `alias` = '%s', `notify` = '%s', `url` = '%s', @@ -1568,6 +1497,28 @@ function update_gcontact($contact) { intval($contact["generation"]), dbesc($contact["updated"]), dbesc($contact["server_url"]), dbesc($contact["connect"]), dbesc(normalise_link($contact["url"])), intval($contact["generation"])); + + + // Now update the contact entry with the user id "0" as well. + // This is used for the shadow copies of public items. + $r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = 0 ORDER BY `id` LIMIT 1", + dbesc(normalise_link($contact["url"]))); + + if ($r) { + logger("Update shadow contact ".$r[0]["id"], LOGGER_DEBUG); + + update_contact_avatar($contact["photo"], 0, $r[0]["id"]); + + q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `addr` = '%s', + `network` = '%s', `bd` = '%s', `gender` = '%s', + `keywords` = '%s', `alias` = '%s', `url` = '%s', + `location` = '%s', `about` = '%s' + WHERE `id` = %d", + dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["addr"]), + dbesc($contact["network"]), dbesc($contact["birthday"]), dbesc($contact["gender"]), + dbesc($contact["keywords"]), dbesc($contact["alias"]), dbesc($contact["url"]), + dbesc($contact["location"]), dbesc($contact["about"]), intval($r[0]["id"])); + } } return $gcontact_id; @@ -1581,8 +1532,10 @@ function update_gcontact($contact) { function update_gcontact_from_probe($url) { $data = probe_url($url); - if ($data["network"] != NETWORK_PHANTOM) - update_gcontact($data); + if ($data["network"] == NETWORK_PHANTOM) + return; + + update_gcontact($data); } /** diff --git a/library/simplepie/LICENSE.txt b/library/simplepie/LICENSE.txt deleted file mode 100644 index a822a4bd98..0000000000 --- a/library/simplepie/LICENSE.txt +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - - * Neither the name of the SimplePie Team nor the names of its contributors may be used - to endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS -AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/library/simplepie/README.markdown b/library/simplepie/README.markdown deleted file mode 100644 index e5ca021ced..0000000000 --- a/library/simplepie/README.markdown +++ /dev/null @@ -1,53 +0,0 @@ -# SimplePie - -## Authors and contributors - -* [Ryan Parman](http://ryanparman.com) -* [Geoffrey Sneddon](http://gsnedders.com) -* [Ryan McCue](http://ryanmccue.info) -* [Michael Shipley](http://michaelpshipley.com) -* [Steve Minutillo](http://minutillo.com/steve/) - - -## License - -[New BSD license](http://www.opensource.org/licenses/bsd-license.php) - - -## Project status - -SimplePie is currently maintained by Ryan McCue. - -At the moment, there isn't a lot of active development happening. If the community decides that SimplePie is a valuable tool, then the community will come together to maintain it into the future. - -If you're interested in getting involved with SimplePie, please get in touch with Ryan McCue. - - -## What comes in the package? - -1. `simplepie.inc` - The SimplePie library. This is all that's required for your pages. -2. `README.markdown` - This document. -3. `LICENSE.txt` - A copy of the BSD license. -4. `compatibility_test/` - The SimplePie compatibility test that checks your server for required settings. -5. `demo/` - A basic feed reader demo that shows off some of SimplePie's more noticable features. -6. `idn/` - A third-party library that SimplePie can optionally use to understand Internationalized Domain Names (IDNs). -7. `test/` - SimplePie's unit test suite. - - -## To start the demo - -1. Upload this package to your webserver. -2. Make sure that the cache folder inside of the demo folder is server-writable. -3. Navigate your browser to the demo folder. - - -## Need support? - -For further setup and install documentation, function references, etc., visit: -[http://simplepie.org/wiki/](http://simplepie.org/wiki/) - -For bug reports and feature requests, visit: -[http://github.com/rmccue/simplepie/issues](http://github.com/rmccue/simplepie/issues) - -Support mailing list -- powered by users, for users. -[http://tech.groups.yahoo.com/group/simplepie-support/](http://tech.groups.yahoo.com/group/simplepie-support/) diff --git a/library/simplepie/compatibility_test/COMPATIBILITY README.txt b/library/simplepie/compatibility_test/COMPATIBILITY README.txt deleted file mode 100644 index 5b24989927..0000000000 --- a/library/simplepie/compatibility_test/COMPATIBILITY README.txt +++ /dev/null @@ -1,7 +0,0 @@ -SIMPLEPIE COMPATIBILITY TEST - -1) Upload sp_compatibility_test.php to the web-accessible root of your website. -For example, if your website is www.example.com, upload it so that you can get -to it at www.example.com/sp_compatibility_test.php - -2) Open your web browser and go to the page you just uploaded. \ No newline at end of file diff --git a/library/simplepie/compatibility_test/sp_compatibility_test.php b/library/simplepie/compatibility_test/sp_compatibility_test.php deleted file mode 100644 index a7a7f5fde2..0000000000 --- a/library/simplepie/compatibility_test/sp_compatibility_test.php +++ /dev/null @@ -1,330 +0,0 @@ -=')); -$pcre_ok = extension_loaded('pcre'); -$curl_ok = function_exists('curl_exec'); -$zlib_ok = extension_loaded('zlib'); -$mbstring_ok = extension_loaded('mbstring'); -$iconv_ok = extension_loaded('iconv'); -if (extension_loaded('xmlreader')) -{ - $xml_ok = true; -} -elseif (extension_loaded('xml')) -{ - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '&', $values); - xml_parser_free($parser_check); - $xml_ok = isset($values[0]['value']); -} -else -{ - $xml_ok = false; -} - -header('Content-type: text/html; charset=UTF-8'); - -?> - - - -SimplePie: Server Compatibility Test 1.2 - - - - - - - - - -
-
- -
-

SimplePie Compatibility Test

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestShould BeWhat You Have
PHP¹4.3.0 or higher
XMLEnabled
PCRE²Enabled
cURLEnabled
ZlibEnabled
mbstringEnabled
iconvEnabled
-
- -
-

What does this mean?

-
    - -
  1. You have everything you need to run SimplePie properly! Congratulations!
  2. - - -
  3. PHP: You are running a supported version of PHP. No problems here.
  4. - -
  5. XML: You have XMLReader support or a version of XML support that isn't broken installed. No problems here.
  6. - -
  7. PCRE: You have PCRE support installed. No problems here.
  8. - -
  9. cURL: You have cURL support installed. No problems here.
  10. - -
  11. cURL: The cURL extension is not available. SimplePie will use fsockopen() instead.
  12. - - - -
  13. Zlib: You have Zlib enabled. This allows SimplePie to support GZIP-encoded feeds. No problems here.
  14. - -
  15. Zlib: The Zlib extension is not available. SimplePie will ignore any GZIP-encoding, and instead handle feeds as uncompressed text.
  16. - - - -
  17. mbstring and iconv: You have both mbstring and iconv installed! This will allow SimplePie to handle the greatest number of languages. Check the Supported Character Encodings chart to see what's supported on your webhost.
  18. - -
  19. mbstring: mbstring is installed, but iconv is not. Check the Supported Character Encodings chart to see what's supported on your webhost.
  20. - -
  21. iconv: iconv is installed, but mbstring is not. Check the Supported Character Encodings chart to see what's supported on your webhost.
  22. - -
  23. mbstring and iconv: You do not have either of the extensions installed. This will significantly impair your ability to read non-English feeds, as well as even some English ones. Check the Supported Character Encodings chart to see what's supported on your webhost.
  24. - - -
  25. PCRE: Your PHP installation doesn't support Perl-Compatible Regular Expressions. SimplePie is a no-go at the moment.
  26. - - -
  27. XML: Your PHP installation doesn't support XML parsing. SimplePie is a no-go at the moment.
  28. - - -
  29. PHP: You are running an unsupported version of PHP. SimplePie is a no-go at the moment.
  30. - - -
-
- -
- -

Bottom Line: Yes, you can!

-

Your webhost has its act together!

-

You can download the latest version of SimplePie from SimplePie.org and install it by following the instructions. You can find example uses with SimplePie Ideas.

-

Take the time to read Requirements and Getting Started to make sure you're prepared to use SimplePie. No seriously, read them.

-

Note: Passing this test does not guarantee that SimplePie will run on your webhost — it only ensures that the basic requirements have been addressed.

- -

Bottom Line: Yes, you can!

-

For most feeds, it'll run with no problems. There are certain languages that you might have a hard time with though.

-

You can download the latest version of SimplePie from SimplePie.org and install it by following the instructions. You can find example uses with SimplePie Ideas.

-

Take the time to read Requirements and Getting Started to make sure you're prepared to use SimplePie. No seriously, read them.

-

Note: Passing this test does not guarantee that SimplePie will run on your webhost — it only ensures that the basic requirements have been addressed.

- -

Bottom Line: We're sorry…

-

Your webhost does not support the minimum requirements for SimplePie. It may be a good idea to contact your webhost, and ask them to install a more recent version of PHP as well as the xmlreader, xml, mbstring, iconv, curl, and zlib extensions.

- -
- -
-

¹ — SimplePie 2 will not support PHP 4.x. The core PHP team has discontinued PHP 4.x patches and support. Read the announcement.

-

² — Some recent versions of the PCRE (PERL-Compatible Regular Expression) engine compiled into PHP have been buggy, and are the source of PHP segmentation faults (e.g. crashes) which cause random things like blank, white screens. Check the Support Forums for the latest information on patches and ongoing fixes.

-
- -
- -
- - - \ No newline at end of file diff --git a/library/simplepie/create.php b/library/simplepie/create.php deleted file mode 100644 index 908ed182bd..0000000000 --- a/library/simplepie/create.php +++ /dev/null @@ -1,178 +0,0 @@ -success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - return false; - } - else - { - $data = explode("\n", $file->body); - unset($file); - - foreach ($data as $line) - { - // New character set - if (substr($line, 0, 5) === 'Name:') - { - // If we already have one, push it on to the array - if (isset($aliases)) - { - for ($i = 0, $count = count($aliases); $i < $count; $i++) - { - $aliases[$i] = normalize_character_set($aliases[$i]); - } - $charsets[$preferred] = array_unique($aliases); - natsort($charsets[$preferred]); - } - - $start = 5 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 5); - $chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start); - $aliases = array(substr($line, $start, $chars)); - $preferred = end($aliases); - } - // Another alias - elseif(substr($line, 0, 6) === 'Alias:') - { - $start = 7 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 7); - $chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start); - $aliases[] = substr($line, $start, $chars); - - if (end($aliases) === 'None') - { - array_pop($aliases); - } - elseif (substr($line, 7 + $chars + 1, 21) === '(preferred MIME name)') - { - $preferred = end($aliases); - } - } - } - - // Compatibility replacements - $compat = array( - 'EUC-KR' => 'windows-949', - 'GB2312' => 'GBK', - 'GB_2312-80' => 'GBK', - 'ISO-8859-1' => 'windows-1252', - 'ISO-8859-9' => 'windows-1254', - 'ISO-8859-11' => 'windows-874', - 'KS_C_5601-1987' => 'windows-949', - 'TIS-620' => 'windows-874', - //'US-ASCII' => 'windows-1252', - 'x-x-big5' => 'Big5', - ); - - foreach ($compat as $real => $replace) - { - if (isset($charsets[$real]) && isset($charsets[$replace])) - { - $charsets[$replace] = array_merge($charsets[$replace], $charsets[$real]); - unset($charsets[$real]); - } - elseif (isset($charsets[$real])) - { - $charsets[$replace] = $charsets[$real]; - $charsets[$replace][] = normalize_character_set($replace); - unset($charsets[$real]); - } - else - { - $charsets[$replace][] = normalize_character_set($real); - } - $charsets[$replace] = array_unique($charsets[$replace]); - natsort($charsets[$replace]); - } - - // Sort it - uksort($charsets, 'strnatcasecmp'); - - // Check that nothing matches more than one - $all = call_user_func_array('array_merge', $charsets); - $all_count = array_count_values($all); - if (max($all_count) > 1) - { - echo "Duplicated charsets:\n"; - foreach ($all_count as $charset => $count) - { - if ($count > 1) - { - echo "$charset\n"; - } - } - } - - // And we're done! - return $charsets; - } -} - -function charset($charset) -{ - $normalized_charset = normalize_character_set($charset); - if ($charsets = build_character_set_list()) - { - foreach ($charsets as $preferred => $aliases) - { - if (in_array($normalized_charset, $aliases)) - { - return $preferred; - } - } - return $charset; - } - else - { - return false; - } -} - -function build_function() -{ - if ($charsets = build_character_set_list()) - { - $return = << $aliases) - { - foreach ($aliases as $alias) - { - $return .= "\t\tcase " . var_export($alias, true) . ":\n"; - } - $return .= "\t\t\treturn " . var_export($preferred, true) . ";\n\n"; - } - $return .= << \ No newline at end of file diff --git a/library/simplepie/db.sql b/library/simplepie/db.sql deleted file mode 100644 index 13f504c214..0000000000 --- a/library/simplepie/db.sql +++ /dev/null @@ -1,38 +0,0 @@ -/* SQLite */ -CREATE TABLE cache_data ( - id TEXT NOT NULL, - items SMALLINT NOT NULL DEFAULT 0, - data BLOB NOT NULL, - mtime INTEGER UNSIGNED NOT NULL -); -CREATE UNIQUE INDEX id ON cache_data(id); - -CREATE TABLE items ( - feed_id TEXT NOT NULL, - id TEXT NOT NULL, - data TEXT NOT NULL, - posted INTEGER UNSIGNED NOT NULL -); -CREATE INDEX feed_id ON items(feed_id); - - -/* MySQL */ -CREATE TABLE `cache_data` ( - `id` TEXT CHARACTER SET utf8 NOT NULL, - `items` SMALLINT NOT NULL DEFAULT 0, - `data` BLOB NOT NULL, - `mtime` INT UNSIGNED NOT NULL, - UNIQUE ( - `id`(125) - ) -); - -CREATE TABLE `items` ( - `feed_id` TEXT CHARACTER SET utf8 NOT NULL, - `id` TEXT CHARACTER SET utf8 NOT NULL, - `data` TEXT CHARACTER SET utf8 NOT NULL, - `posted` INT UNSIGNED NOT NULL, - INDEX `feed_id` ( - `feed_id`(125) - ) -); \ No newline at end of file diff --git a/library/simplepie/demo/cli_test.php b/library/simplepie/demo/cli_test.php deleted file mode 100644 index ec933c5ad7..0000000000 --- a/library/simplepie/demo/cli_test.php +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/php -set_feed_url($argv[1]); - $feed->enable_cache(false); - $feed->init(); -} - -$items = $feed->get_items(); - -foreach ($items as $item) -{ - echo $item->get_title() . "\n"; -} - -var_dump($feed->get_item_quantity()); - -?> \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/alternate_favicon.png b/library/simplepie/demo/for_the_demo/alternate_favicon.png deleted file mode 100644 index 063fb28054..0000000000 Binary files a/library/simplepie/demo/for_the_demo/alternate_favicon.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/background_blockquote.png b/library/simplepie/demo/for_the_demo/background_blockquote.png deleted file mode 100644 index 8267e23a23..0000000000 Binary files a/library/simplepie/demo/for_the_demo/background_blockquote.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/background_menuitem.gif b/library/simplepie/demo/for_the_demo/background_menuitem.gif deleted file mode 100644 index fa765d670e..0000000000 Binary files a/library/simplepie/demo/for_the_demo/background_menuitem.gif and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/background_menuitem_off.gif b/library/simplepie/demo/for_the_demo/background_menuitem_off.gif deleted file mode 100644 index 236cf406dc..0000000000 Binary files a/library/simplepie/demo/for_the_demo/background_menuitem_off.gif and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif b/library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif deleted file mode 100644 index 95cfb820d4..0000000000 Binary files a/library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/alternate.png b/library/simplepie/demo/for_the_demo/favicons/alternate.png deleted file mode 100644 index 063fb28054..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/alternate.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/blinklist.png b/library/simplepie/demo/for_the_demo/favicons/blinklist.png deleted file mode 100644 index 53200b3c62..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/blinklist.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/blogmarks.png b/library/simplepie/demo/for_the_demo/favicons/blogmarks.png deleted file mode 100644 index c5372614a4..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/blogmarks.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/delicious.png b/library/simplepie/demo/for_the_demo/favicons/delicious.png deleted file mode 100644 index 2e6021d26e..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/delicious.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/digg.png b/library/simplepie/demo/for_the_demo/favicons/digg.png deleted file mode 100644 index 3aa96770e8..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/digg.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/magnolia.png b/library/simplepie/demo/for_the_demo/favicons/magnolia.png deleted file mode 100644 index da519f5ab9..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/magnolia.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/myweb2.png b/library/simplepie/demo/for_the_demo/favicons/myweb2.png deleted file mode 100644 index 2a12968d5e..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/myweb2.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/newsvine.png b/library/simplepie/demo/for_the_demo/favicons/newsvine.png deleted file mode 100644 index 5cdbb31c69..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/newsvine.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/reddit.png b/library/simplepie/demo/for_the_demo/favicons/reddit.png deleted file mode 100644 index 65c38867cd..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/reddit.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/segnalo.png b/library/simplepie/demo/for_the_demo/favicons/segnalo.png deleted file mode 100644 index 748149b371..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/segnalo.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/simpy.png b/library/simplepie/demo/for_the_demo/favicons/simpy.png deleted file mode 100644 index 30b23c1a55..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/simpy.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/spurl.png b/library/simplepie/demo/for_the_demo/favicons/spurl.png deleted file mode 100644 index f5be3963dc..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/spurl.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/technorati.png b/library/simplepie/demo/for_the_demo/favicons/technorati.png deleted file mode 100644 index 0f19e824e6..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/technorati.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/favicons/wists.png b/library/simplepie/demo/for_the_demo/favicons/wists.png deleted file mode 100644 index 2e2d294d1e..0000000000 Binary files a/library/simplepie/demo/for_the_demo/favicons/wists.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/feed.png b/library/simplepie/demo/for_the_demo/feed.png deleted file mode 100644 index e23c50c85b..0000000000 Binary files a/library/simplepie/demo/for_the_demo/feed.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/logo_simplepie_demo.png b/library/simplepie/demo/for_the_demo/logo_simplepie_demo.png deleted file mode 100644 index eda2d868b5..0000000000 Binary files a/library/simplepie/demo/for_the_demo/logo_simplepie_demo.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/lucida-grande-bold.swf b/library/simplepie/demo/for_the_demo/lucida-grande-bold.swf deleted file mode 100644 index 0a41e15eb8..0000000000 Binary files a/library/simplepie/demo/for_the_demo/lucida-grande-bold.swf and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/mediaplayer.swf b/library/simplepie/demo/for_the_demo/mediaplayer.swf deleted file mode 100644 index bf78fd919a..0000000000 Binary files a/library/simplepie/demo/for_the_demo/mediaplayer.swf and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/mediaplayer_readme.htm b/library/simplepie/demo/for_the_demo/mediaplayer_readme.htm deleted file mode 100644 index 56e12c309e..0000000000 --- a/library/simplepie/demo/for_the_demo/mediaplayer_readme.htm +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/mini_podcast.png b/library/simplepie/demo/for_the_demo/mini_podcast.png deleted file mode 100644 index fd6faf2a31..0000000000 Binary files a/library/simplepie/demo/for_the_demo/mini_podcast.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/place_audio.png b/library/simplepie/demo/for_the_demo/place_audio.png deleted file mode 100644 index 560ea00393..0000000000 Binary files a/library/simplepie/demo/for_the_demo/place_audio.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/place_video.png b/library/simplepie/demo/for_the_demo/place_video.png deleted file mode 100644 index be5ec8219e..0000000000 Binary files a/library/simplepie/demo/for_the_demo/place_video.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/sIFR-print.css b/library/simplepie/demo/for_the_demo/sIFR-print.css deleted file mode 100644 index ec89b1961e..0000000000 --- a/library/simplepie/demo/for_the_demo/sIFR-print.css +++ /dev/null @@ -1,35 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - - -/* This is the print stylesheet to hide the Flash headlines from the browser... regular browser text headlines will now print as normal */ - -.sIFR-flash { - display: none !important; - height: 0; - width: 0; - position: absolute; - overflow: hidden; -} - -.sIFR-alternate { - visibility: visible !important; - display: block !important; - position: static !important; - left: auto !important; - top: auto !important; -} \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/sIFR-screen.css b/library/simplepie/demo/for_the_demo/sIFR-screen.css deleted file mode 100644 index 778e09d2b6..0000000000 --- a/library/simplepie/demo/for_the_demo/sIFR-screen.css +++ /dev/null @@ -1,39 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -/*---- sIFR ---*/ -.sIFR-flash { - visibility: visible !important; - margin: 0; - padding: 0; -} - -.sIFR-replaced { - visibility: visible !important; -} - -.sIFR-alternate { - position: absolute; - left: 0; - top: 0; - width: 0; - height: 0; - display: block; - overflow: hidden; -} - -/*---- Header styling ---*/ diff --git a/library/simplepie/demo/for_the_demo/sifr-config.js b/library/simplepie/demo/for_the_demo/sifr-config.js deleted file mode 100644 index e7066b3613..0000000000 --- a/library/simplepie/demo/for_the_demo/sifr-config.js +++ /dev/null @@ -1,40 +0,0 @@ -var yanone_kaffeesatz = { - src: './for_the_demo/yanone-kaffeesatz-bold.swf' -}; - -var lucida_grande = { - src: './for_the_demo/lucida-grande-bold.swf' -}; - -sIFR.activate(yanone_kaffeesatz); -//sIFR.activate(lucida_grande); - -sIFR.replace(yanone_kaffeesatz, { -//sIFR.replace(lucida_grande, { - - selector: 'h3.header', - wmode: 'transparent', - css: { - '.sIFR-root': { - 'text-align': 'center', - 'color': '#000000', - 'font-weight': 'bold', - 'background-color': '#EEFFEE', - - 'font-size': '50px', // For Yanone Kaffeesatz - //'font-size': '40px', // For Lucida Grande - - 'letter-spacing': '0' // For Yanone Kaffeesatz - //'letter-spacing': '-4' // For Lucida Grande - - }, - 'a': { - 'text-decoration': 'none', - 'color': '#000000' - }, - 'a:hover': { - 'text-decoration': 'none', - 'color': '#666666' - } - } -}); diff --git a/library/simplepie/demo/for_the_demo/sifr.js b/library/simplepie/demo/for_the_demo/sifr.js deleted file mode 100644 index 0a8b1b6dc0..0000000000 --- a/library/simplepie/demo/for_the_demo/sifr.js +++ /dev/null @@ -1,19 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3, revision 245 - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -var parseSelector=(function(){var _1=/\s*,\s*/;var _2=/\s*([\s>+~(),]|^|$)\s*/g;var _3=/([\s>+~,]|[^(]\+|^)([#.:@])/g;var _4=/^[^\s>+~]/;var _5=/[\s#.:>+~()@]|[^\s#.:>+~()@]+/g;function parseSelector(_6,_7){_7=_7||document.documentElement;var _8=_6.split(_1),_9=[];for(var i=0;i<_8.length;i++){var _b=[_7],_c=toStream(_8[i]);for(var j=0;j<_c.length;){var _e=_c[j++],_f=_c[j++],_10="";if(_c[j]=="("){while(_c[j++]!=")"&&j<_c.length){_10+=_c[j]}_10=_10.slice(0,-1)}_b=select(_b,_e,_f,_10)}_9=_9.concat(_b)}return _9}function toStream(_11){var _12=_11.replace(_2,"$1").replace(_3,"$1*$2");if(_4.test(_12)){_12=" "+_12}return _12.match(_5)||[]}function select(_13,_14,_15,_16){return (_17[_14])?_17[_14](_13,_15,_16):[]}var _18={toArray:function(_19){var a=[];for(var i=0;i<_19.length;i++){a.push(_19[i])}return a}};var dom={isTag:function(_1d,tag){return (tag=="*")||(tag.toLowerCase()==_1d.nodeName.toLowerCase())},previousSiblingElement:function(_1f){do{_1f=_1f.previousSibling}while(_1f&&_1f.nodeType!=1);return _1f},nextSiblingElement:function(_20){do{_20=_20.nextSibling}while(_20&&_20.nodeType!=1);return _20},hasClass:function(_21,_22){return (_22.className||"").match("(^|\\s)"+_21+"(\\s|$)")},getByTag:function(tag,_24){return _24.getElementsByTagName(tag)}};var _17={"#":function(_25,_26){for(var i=0;i<_25.length;i++){if(_25[i].getAttribute("id")==_26){return [_25[i]]}}return []}," ":function(_28,_29){var _2a=[];for(var i=0;i<_28.length;i++){_2a=_2a.concat(_18.toArray(dom.getByTag(_29,_28[i])))}return _2a},">":function(_2c,_2d){var _2e=[];for(var i=0,_30;i<_2c.length;i++){_30=_2c[i];for(var j=0,_32;j<_30.childNodes.length;j++){_32=_30.childNodes[j];if(_32.nodeType==1&&dom.isTag(_32,_2d)){_2e.push(_32)}}}return _2e},".":function(_33,_34){var _35=[];for(var i=0,_37;i<_33.length;i++){_37=_33[i];if(dom.hasClass([_34],_37)){_35.push(_37)}}return _35},":":function(_38,_39,_3a){return (pseudoClasses[_39])?pseudoClasses[_39](_38,_3a):[]}};parseSelector.selectors=_17;parseSelector.pseudoClasses={};parseSelector.util=_18;parseSelector.dom=dom;return parseSelector})(); -var sIFR=new function(){var _3b=this;var _3c="sIFR-active";var _3d="sIFR-replaced";var _3e="sIFR-replacing";var _3f="sIFR-flash";var _40="sIFR-ignore";var _41="sIFR-alternate";var _42="sIFR-class";var _43="sIFR-layout";var _44=6;var _45=126;var _46=8;var _47="SIFR-PREFETCHED";var _48=[10,1.55,19,1.45,32,1.35,71,1.3,1.25];var _49=5;this.isActive=false;this.isEnabled=true;this.hideElements=true;this.preserveSingleWhitespace=false;this.fixWrap=true;this.fixHover=true;this.registerEvents=true;this.setPrefetchCookie=true;this.cookiePath="/";this.domains=[];this.fromLocal=true;this.forceClear=false;this.forceWidth=false;this.fitExactly=false;this.forceTextTransform=true;this.useDomContentLoaded=true;this.debugMode=false;this.hasFlashClassSet=false;this.delayCss=false;this.callbacks=[];var _4a=0;var _4b=false,_4c=false;var dom=new function(){var _4e="http://www.w3.org/1999/xhtml";this.getBody=function(){var _4f=document.getElementsByTagName("body");if(_4f.length==1){return _4f[0]}return null};this.addClass=function(_50,_51){if(_51){_51.className=((_51.className||"")==""?"":_51.className+" ")+_50}};this.removeClass=function(_52,_53){if(_53){_53.className=_53.className.replace(new RegExp("(^|\\s)"+_52+"(\\s|$)"),"").replace(/^\s+|(\s)\s+/g,"$1")}};this.hasClass=function(_54,_55){return new RegExp("(^|\\s)"+_54+"(\\s|$)").test(_55.className)};this.hasOneOfClassses=function(_56,_57){for(var i=0;i<_56.length;i++){if(this.hasClass(_56[i],_57)){return true}}return false};this.create=function(_59){if(document.createElementNS){return document.createElementNS(_4e,_59)}return document.createElement(_59)};this.setInnerHtml=function(_5a,_5b){if(ua.innerHtmlSupport){_5a.innerHTML=_5b}else{if(ua.xhtmlSupport){_5b=["",_5b,""].join("");var xml=(new DOMParser()).parseFromString(_5b,"text/xml");xml=document.importNode(xml.documentElement,true);while(_5a.firstChild){_5a.removeChild(_5a.firstChild)}while(xml.firstChild){_5a.appendChild(xml.firstChild)}}}};this.nodeFromHtml=function(_5d){var _5e=this.create("div");_5e.innerHTML=_5d;return _5e.firstChild};this.getComputedStyle=function(_5f,_60){var _61;if(document.defaultView&&document.defaultView.getComputedStyle){_61=document.defaultView.getComputedStyle(_5f,null)[_60]}else{if(_5f.currentStyle){_61=_5f.currentStyle[_60]}}return _61||""};this.getStyleAsInt=function(_62,_63,_64){var _65=this.getComputedStyle(_62,_63);if(_64&&!/px$/.test(_65)){return 0}_65=parseInt(_65);return isNaN(_65)?0:_65};this.getZoom=function(){return _66.zoom.getLatest()}};this.dom=dom;var ua=new function(){var ua=navigator.userAgent.toLowerCase();var _69=(navigator.product||"").toLowerCase();this.macintosh=ua.indexOf("mac")>-1;this.windows=ua.indexOf("windows")>-1;this.quicktime=false;this.opera=ua.indexOf("opera")>-1;this.konqueror=_69.indexOf("konqueror")>-1;this.ie=false/*@cc_on || true @*/;this.ieSupported=this.ie&&!/ppc|smartphone|iemobile|msie\s5\.5/.test(ua)/*@cc_on && @_jscript_version >= 5.5 @*/;this.ieWin=this.ie&&this.windows/*@cc_on && @_jscript_version >= 5.1 @*/;this.windows=this.windows&&(!this.ie||this.ieWin);this.ieMac=this.ie&&this.macintosh/*@cc_on && @_jscript_version < 5.1 @*/;this.macintosh=this.macintosh&&(!this.ie||this.ieMac);this.safari=ua.indexOf("safari")>-1;this.webkit=ua.indexOf("applewebkit")>-1&&!this.konqueror;this.khtml=this.webkit||this.konqueror;this.gecko=!this.webkit&&_69=="gecko";this.operaVersion=this.opera&&/.*opera(\s|\/)(\d+\.\d+)/.exec(ua)?parseInt(RegExp.$2):0;this.webkitVersion=this.webkit&&/.*applewebkit\/(\d+).*/.exec(ua)?parseInt(RegExp.$1):0;this.geckoBuildDate=this.gecko&&/.*gecko\/(\d{8}).*/.exec(ua)?parseInt(RegExp.$1):0;this.konquerorVersion=this.konqueror&&/.*konqueror\/(\d\.\d).*/.exec(ua)?parseInt(RegExp.$1):0;this.flashVersion=0;if(this.ieWin){var axo;var _6b=false;try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(e){try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");this.flashVersion=6;axo.AllowScriptAccess="always"}catch(e){_6b=this.flashVersion==6}if(!_6b){try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(e){}}}if(!_6b&&axo){this.flashVersion=parseFloat(/([\d,?]+)/.exec(axo.GetVariable("$version"))[1].replace(/,/g,"."))}}else{if(navigator.plugins&&navigator.plugins["Shockwave Flash"]){var _6c=navigator.plugins["Shockwave Flash"];this.flashVersion=parseFloat(/(\d+\.?\d*)/.exec(_6c.description)[1]);var i=0;while(this.flashVersion>=_46&&i-1){this.flashVersion=0;this.quicktime=true}i++}}}this.flash=this.flashVersion>=_46;this.transparencySupport=this.macintosh||this.windows;this.computedStyleSupport=this.ie||document.defaultView&&document.defaultView.getComputedStyle&&(!this.gecko||this.geckoBuildDate>=20030624);this.css=true;if(this.computedStyleSupport){try{var _6f=document.getElementsByTagName("head")[0];_6f.style.backgroundColor="#FF0000";var _70=dom.getComputedStyle(_6f,"backgroundColor");this.css=!_70||/\#F{2}0{4}|rgb\(255,\s?0,\s?0\)/i.test(_70);_6f.style.backgroundColor="";_6f=null}catch(e){}}this.xhtmlSupport=!!window.DOMParser&&!!document.importNode;try{var n=dom.create("span");if(!this.ieMac){n.innerHTML="x"}this.innerHtmlSupport=n.innerHTML=="x"}catch(e){this.innerHtmlSupport=false}this.zoomSupport=!!(this.opera&&document.documentElement);this.geckoXml=this.gecko&&(document.contentType||"").indexOf("xml")>-1;this.requiresPrefetch=this.ieWin||this.khtml;this.verifiedKonqueror=false;this.supported=this.flash&&this.css&&(!this.ie||this.ieSupported)&&(!this.opera||this.operaVersion>=8)&&(!this.webkit||this.webkitVersion>=412)&&(!this.konqueror||this.konquerorVersion>3.5)&&this.computedStyleSupport&&(this.innerHtmlSupport||!this.khtml&&this.xhtmlSupport)};this.ua=ua;var _72=new function(){var _73={leading:true,"margin-left":true,"margin-right":true,"text-indent":true};var _74=" ";function capitalize($){return $.toUpperCase()}this.normalize=function(str){if(_3b.preserveSingleWhitespace){return str.replace(/\s/g,_74)}return str.replace(/(\s)\s+/g,"$1").replace(/\xA0/,_74)};this.textTransform=function(_77,str){switch(_77){case "uppercase":str=str.toUpperCase();break;case "lowercase":str=str.toLowerCase();break;case "capitalize":var _79=str;str=str.replace(/^\w|\s\w/g,capitalize);if(str.indexOf("function capitalize")!=-1){var _7a=_79.replace(/(^|\s)(\w)/g,"$1$1$2$2").split(/^\w|\s\w/g);str="";for(var i=0;i<_7a.length;i++){str+=_7a[i].charAt(0).toUpperCase()+_7a[i].substring(1)}}break}return str};this.toHexString=function(str){if(typeof (str)!="string"||!str.charAt(0)=="#"||str.length!=4&&str.length!=7){return str}str=str.replace(/#/,"");if(str.length==3){str=str.replace(/(.)(.)(.)/,"$1$1$2$2$3$3")}return "0x"+str};this.toJson=function(obj){var _7e="";switch(typeof (obj)){case "string":_7e="\""+obj+"\"";break;case "number":case "boolean":_7e=obj.toString();break;case "object":_7e=[];for(var _7f in obj){if(obj[_7f]==Object.prototype[_7f]){continue}_7e.push("\""+_7f+"\":"+_72.toJson(obj[_7f]))}_7e="{"+_7e.join(",")+"}";break}return _7e};this.convertCssArg=function(arg){if(!arg){return {}}if(typeof (arg)=="object"){if(arg.constructor==Array){arg=arg.join("")}else{return arg}}var obj={};var _82=arg.split("}");for(var i=0;i<_82.length;i++){var $=_82[i].match(/([^\s{]+)\s*\{(.+)\s*;?\s*/);if(!$||$.length!=3){continue}if(!obj[$[1]]){obj[$[1]]={}}var _85=$[2].split(";");for(var j=0;j<_85.length;j++){var $2=_85[j].match(/\s*([^:\s]+)\s*\:\s*([^\s;]+)/);if(!$2||$2.length!=3){continue}obj[$[1]][$2[1]]=$2[2]}}return obj};this.extractFromCss=function(css,_89,_8a,_8b){var _8c=null;if(css&&css[_89]&&css[_89][_8a]){_8c=css[_89][_8a];if(_8b){delete css[_89][_8a]}}return _8c};this.cssToString=function(arg){var css=[];for(var _8f in arg){var _90=arg[_8f];if(_90==Object.prototype[_8f]){continue}css.push(_8f,"{");for(var _91 in _90){if(_90[_91]==Object.prototype[_91]){continue}var _92=_90[_91];if(_73[_91]){_92=parseInt(_92,10)}css.push(_91,":",_92,";")}css.push("}")}return escape(css.join(""))};this.bind=function(_93,_94){return function(){_93[_94].apply(_93,arguments)}}};this.util=_72;var _66={};_66.fragmentIdentifier=new function(){this.fix=true;var _95;this.cache=function(){_95=document.title};function doFix(){document.title=_95}this.restore=function(){if(this.fix){setTimeout(doFix,0)}}};_66.synchronizer=new function(){this.isBlocked=false;this.block=function(){this.isBlocked=true};this.unblock=function(){this.isBlocked=false;_96.replaceAll()}};_66.zoom=new function(){var _97=100;this.getLatest=function(){return _97};if(ua.zoomSupport&&ua.opera){var _98=document.createElement("div");_98.style.position="fixed";_98.style.left="-65536px";_98.style.top="0";_98.style.height="100%";_98.style.width="1px";_98.style.zIndex="-32";document.documentElement.appendChild(_98);function updateZoom(){if(!_98){return}var _99=window.innerHeight/_98.offsetHeight;var _9a=Math.round(_99*100)%10;if(_9a>5){_99=Math.round(_99*100)+10-_9a}else{_99=Math.round(_99*100)-_9a}_97=isNaN(_99)?100:_99;_66.synchronizer.unblock();document.documentElement.removeChild(_98);_98=null}_66.synchronizer.block();setTimeout(updateZoom,54)}};this.hacks=_66;var _9b={kwargs:[],replaceAll:function(){for(var i=0;i-1){_9f=_9f.substr(_a0+1);var _a1=_9d.lastIndexOf(_9f);if(_a1>-1&&(_a1+_9f.length)==_9d.length){return true}}}return false}this.activate=function(){if(!ua.supported||!this.isEnabled||this.isActive||!isValidDomain()){return}if(arguments.length>0){this.prefetch.apply(this,arguments)}this.isActive=true;if(this.hideElements){this.setFlashClass()}if(ua.ieWin&&_66.fragmentIdentifier.fix&&window.location.hash!=""){_66.fragmentIdentifier.cache()}else{_66.fragmentIdentifier.fix=false}if(!this.registerEvents){return}function handler(evt){_3b.initialize();if(evt&&evt.type=="load"){if(document.removeEventListener){document.removeEventListener("DOMContentLoaded",handler,false)}if(window.removeEventListener){window.removeEventListener("load",handler,false)}}}if(window.addEventListener){if(_3b.useDomContentLoaded&&ua.gecko){document.addEventListener("DOMContentLoaded",handler,false)}window.addEventListener("load",handler,false)}else{if(ua.ieWin){if(_3b.useDomContentLoaded){document.write("");document.getElementById("__sifr_ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){handler();this.removeNode()}}}window.attachEvent("onload",handler)}}};this.setFlashClass=function(){if(this.hasFlashClassSet){return}dom.addClass(_3c,dom.getBody()||document.documentElement);this.hasFlashClassSet=true};this.removeFlashClass=function(){if(!this.hasFlashClassSet){return}dom.removeClass(_3c,dom.getBody());dom.removeClass(_3c,document.documentElement);this.hasFlashClassSet=false};this.initialize=function(){if(_4c||!this.isActive||!this.isEnabled){return}_4c=true;_9b.replaceAll();clearPrefetch()};function getSource(src){if(typeof (src)!="string"){if(src.src){src=src.src}if(typeof (src)!="string"){var _a4=[];for(var _a5 in src){if(src[_a5]!=Object.prototype[_a5]){_a4.push(_a5)}}_a4.sort().reverse();var _a6="";var i=-1;while(!_a6&&++i<_a4.length){if(parseFloat(_a4[i])<=ua.flashVersion){_a6=src[_a4[i]]}}src=_a6}}if(!src&&_3b.debugMode){throw new Error("sIFR: Could not determine appropriate source")}if(ua.ie&&src.charAt(0)=="/"){src=window.location.toString().replace(/([^:]+)(:\/?\/?)([^\/]+).*/,"$1$2$3")+src}return src}this.prefetch=function(){if(!ua.requiresPrefetch||!ua.supported||!this.isEnabled||!isValidDomain()){return}if(this.setPrefetchCookie&&new RegExp(";?"+_47+"=true;?").test(document.cookie)){return}try{_4b=true;if(ua.ieWin){prefetchIexplore(arguments)}else{prefetchLight(arguments)}if(this.setPrefetchCookie){document.cookie=_47+"=true;path="+this.cookiePath}}catch(e){if(_3b.debugMode){throw e}}};function prefetchIexplore(_a8){for(var i=0;i<_a8.length;i++){document.write("")}}function prefetchLight(_aa){for(var i=0;i<_aa.length;i++){new Image().src=getSource(_aa[i])}}function clearPrefetch(){if(!ua.ieWin||!_4b){return}try{var _ac=document.getElementsByTagName("script");for(var i=_ac.length-1;i>=0;i--){var _ae=_ac[i];if(_ae.type=="sifr/prefetch"){_ae.parentNode.removeChild(_ae)}}}catch(e){}}function getRatio(_af,_b0){for(var i=0;i<_b0.length;i+=2){if(_af<=_b0[i]){return _b0[i+1]}}return _b0[_b0.length-1]}function getFilters(obj){var _b3=[];for(var _b4 in obj){if(obj[_b4]==Object.prototype[_b4]){continue}var _b5=obj[_b4];_b4=[_b4.replace(/filter/i,"")+"Filter"];for(var _b6 in _b5){if(_b5[_b6]==Object.prototype[_b6]){continue}_b4.push(_b6+":"+escape(_72.toJson(_72.toHexString(_b5[_b6]))))}_b3.push(_b4.join(","))}return _b3.join(";")}function calculate(_b7){var _b8,_b9;if(!ua.ie){_b8=dom.getStyleAsInt(_b7,"lineHeight");_b9=Math.floor(dom.getStyleAsInt(_b7,"height")/_b8)}else{if(ua.ie){var _ba=_b7.innerHTML;_b7.style.visibility="visible";_b7.style.overflow="visible";_b7.style.position="static";_b7.style.zoom="normal";_b7.style.writingMode="lr-tb";_b7.style.width=_b7.style.height="auto";_b7.style.maxWidth=_b7.style.maxHeight=_b7.style.styleFloat="none";var _bb=_b7;var _bc=_b7.currentStyle.hasLayout;if(_bc){dom.setInnerHtml(_b7,"
X
X
X
");_bb=_b7.firstChild}else{dom.setInnerHtml(_b7,"X
X
X")}var _bd=_bb.getClientRects();_b8=_bd[1].bottom-_bd[1].top;_b8=Math.ceil(_b8*0.8);if(_bc){dom.setInnerHtml(_b7,"
"+_ba+"
");_bb=_b7.firstChild}else{dom.setInnerHtml(_b7,_ba)}_bd=_bb.getClientRects();_b9=_bd.length;if(_bc){dom.setInnerHtml(_b7,_ba)}_b7.style.visibility=_b7.style.width=_b7.style.height=_b7.style.maxWidth=_b7.style.maxHeight=_b7.style.overflow=_b7.style.styleFloat=_b7.style.position=_b7.style.zoom=_b7.style.writingMode=""}}return {lineHeight:_b8,lines:_b9}}this.replace=function(_be,_bf){if(!ua.supported){return}if(_bf){for(var _c0 in _be){if(typeof (_bf[_c0])=="undefined"){_bf[_c0]=_be[_c0]}}_be=_bf}if(!_4c){return _9b.kwargs.push(_be)}if(_66.synchronizer.isBlocked){return _96.kwargs.push(_be)}var _c1=_be.elements;if(!_c1&&parseSelector){_c1=parseSelector(_be.selector)}if(_c1.length==0){return}this.setFlashClass();var src=getSource(_be.src);var css=_72.convertCssArg(_be.css);var _c4=getFilters(_be.filters);var _c5=(_be.forceClear==null)?_3b.forceClear:_be.forceClear;var _c6=(_be.fitExactly==null)?_3b.fitExactly:_be.fitExactly;var _c7=_c6||(_be.forceWidth==null?_3b.forceWidth:_be.forceWidth);var _c8=parseInt(_72.extractFromCss(css,".sIFR-root","leading"))||0;var _c9=_72.extractFromCss(css,".sIFR-root","font-size",true)||0;var _ca=_72.extractFromCss(css,".sIFR-root","background-color",true)||"#FFFFFF";var _cb=_72.extractFromCss(css,".sIFR-root","kerning",true)||"";var _cc=_be.gridFitType||_72.extractFromCss(css,".sIFR-root","text-align")=="right"?"subpixel":"pixel";var _cd=_3b.forceTextTransform?_72.extractFromCss(css,".sIFR-root","text-transform",true)||"none":"none";var _ce=_72.extractFromCss(css,".sIFR-root","opacity",true)||"100";var _cf=_be.pixelFont||false;var _d0=_be.ratios||_48;if(parseInt(_c9).toString()!=_c9&&_c9.indexOf("px")==-1){_c9=0}else{_c9=parseInt(_c9)}if(parseFloat(_ce)<1){_ce=100*parseFloat(_ce)}var _d1=null;var _d2="";if(_c6){_72.extractFromCss(css,".sIFR-root","text-align",true)}if(!_be.modifyCss){_d2=_72.cssToString(css);_d1=_3b.fixHover&&_d2.indexOf("%3Ahover")>-1}var _d3=!ua.opera&&_3b.delayCss;var _d4=_be.wmode||"";if(!_d4){if(_be.transparent){_d4="transparent"}else{if(_be.opaque){_d4="opaque"}}}if(_d4=="transparent"){if(!ua.transparencySupport){_d4="opaque"}else{_ca="transparent"}}for(var i=0;i<_c1.length;i++){var _d6=_c1[i];if(!ua.verifiedKonqueror){if(dom.getComputedStyle(_d6,"lineHeight").match(/e\+08px/)){ua.supported=_3b.isEnabled=false;this.removeFlashClass();return}ua.verifiedKonqueror=true}if(dom.hasOneOfClassses([_3d,_3e,_40,_41],_d6)){continue}var _d7=_d6.offsetHeight;var _d8=_d6.offsetWidth;var _d9=dom.getComputedStyle(_d6,"display");if(!_d7||!_d8||_d9==null||_d9=="none"){continue}if(_c5&&ua.gecko){_d6.style.clear="both"}var _da=null;if(_3b.fixWrap&&ua.ie&&_d9=="block"){_da=_d6.innerHTML;dom.setInnerHtml(_d6,"X")}_d8=dom.getStyleAsInt(_d6,"width",ua.ie);if(_d8==0){var _db=dom.getStyleAsInt(_d6,"paddingRight",true);var _dc=dom.getStyleAsInt(_d6,"paddingLeft",true);var _dd=dom.getStyleAsInt(_d6,"borderRightWidth",true);var _de=dom.getStyleAsInt(_d6,"borderLeftWidth",true);_d8=_d6.offsetWidth-_dc-_db-_de-_dd}if(_da&&_3b.fixWrap&&ua.ie){dom.setInnerHtml(_d6,_da)}var _df,_e0;if(!_c9){var _e1=calculate(_d6);_df=Math.min(_45,Math.max(_44,_e1.lineHeight));if(_cf){_df=Math.max(8,8*Math.round(_df/8))}_e0=_e1.lines;if(isNaN(_e0)||!isFinite(_e0)||_e0==0){_e0=1}if(_e0>1&&_c8){_d7+=Math.round((_e0-1)*_c8)}}else{_df=_c9;_e0=1}_d7=Math.round(_e0*_df);if(_c5&&ua.gecko){_d6.style.clear=""}var _e2=dom.create("span");_e2.className=_41;var _e3=_d6.cloneNode(true);for(var j=0,l=_e3.childNodes.length;j-1}var _e6=handleContent(_e3,_cd);if(_be.modifyContentString){_e6=_be.modifyContentString(_e6,_be.selector)}if(_e6==""){continue}var _e7=["content="+_e6,"width="+_d8,"height="+_d7,"fitexactly="+(_c6?"true":""),"tunewidth="+(_be.tuneWidth||""),"tuneheight="+(_be.tuneHeight||""),"offsetleft="+(_be.offsetLeft||""),"offsettop="+(_be.offsetTop||""),"thickness="+(_be.thickness||""),"sharpness="+(_be.sharpness||""),"kerning="+_cb,"gridfittype="+_cc,"zoomsupport="+ua.zoomSupport,"flashfilters="+_c4,"opacity="+_ce,"blendmode="+(_be.blendMode||""),"size="+_df,"zoom="+dom.getZoom(),"css="+_d2,"selectable="+(_be.selectable==null?"true":_be.selectable),"lines="+_e0];var _e8=encodeURI(_e7.join("&"));var _e9="sIFR_callback_"+_4a++;var _ea=new CallbackInfo(_e9,_e7,_be.onReplacement,_d1);window[_e9+"_DoFSCommand"]=(function(_eb){return function(_ec,arg){_eb.handle(_ec,arg)}})(_ea);_d7=Math.round(_e0*getRatio(_df,_d0)*_df)+_49;var _ee=_c7?_d8:"100%";var _ef;if(ua.ie){_ef=["","","","","","","","","","",_e9,"_DoFSCommand(info, args);",""].join("")}else{_ef=[""].join("")}dom.setInnerHtml(_d6,_ef);_ea.flashNode=_d6.firstChild;_ea.html=_ef;_3b.callbacks.push(_ea);if(_be.selector){if(!_3b.callbacks[_be.selector]){_3b.callbacks[_be.selector]=[_ea]}else{_3b.callbacks[_be.selector].push(_ea)}}_d6.appendChild(_e2);dom.addClass(_d3?_3e:_3d,_d6);_ea.setupFixHover()}_66.fragmentIdentifier.restore()};this.getCallbackByFlashElement=function(_f0){for(var i=0;i<_3b.callbacks.length;i++){if(_3b.callbacks[i].id==_f0.getAttribute("id")){return _3b.callbacks[i]}}};function handleContent(_f2,_f3){var _f4=[],_f5=[];var _f6=_f2.childNodes;var i=0;while(i<_f6.length){var _f8=_f6[i];if(_f8.nodeType==3){var _f9=_72.normalize(_f8.nodeValue);_f9=_72.textTransform(_f3,_f9);_f5.push(_f9.replace(/\%/g,"%25").replace(/\&/g,"%26").replace(/\,/g,"%2C").replace(/\+/g,"%2B"))}if(_f8.nodeType==1){var _fa=[];var _fb=_f8.nodeName.toLowerCase();var _fc=_f8.className||"";if(/\s+/.test(_fc)){if(_fc.indexOf(_42)>-1){_fc=_fc.match("(\\s|^)"+_42+"-([^\\s$]*)(\\s|$)")[2]}else{_fc=_fc.match(/^([^\s]+)/)[1]}}if(_fc!=""){_fa.push("class=\""+_fc+"\"")}if(_fb=="a"){var _fd=_f8.getAttribute("href")||"";var _fe=_f8.getAttribute("target")||"";_fa.push("href=\""+_fd+"\"","target=\""+_fe+"\"")}_f5.push("<"+_fb+(_fa.length>0?" ":"")+escape(_fa.join(" "))+">");if(_f8.hasChildNodes()){_f4.push(i);i=0;_f6=_f8.childNodes;continue}else{if(!/^(br|img)$/i.test(_f8.nodeName)){_f5.push("")}}}if(_f4.length>0&&!_f8.nextSibling){do{i=_f4.pop();_f6=_f8.parentNode.parentNode.childNodes;_f8=_f6[i];if(_f8){_f5.push("")}}while(i==_f6.length-1&&_f4.length>0)}i++}return _f5.join("").replace(/\n|\r/g,"")}function CallbackInfo(id,vars,_101,_102){this.id=id;this.vars=vars;this._replacementHandler=_101;this._firedReplacementEvent=!(this._replacementHandler!=null);this._fixHover=_102;this._setClasses=!_3b.delayCss;this.html="";this._pings=0}CallbackInfo.prototype.getFlashElement=function(){return document.getElementById(this.id)};CallbackInfo.prototype.handle=function(info,arg){if(/(FSCommand\:)?resize/.test(info)){var _105=this.getFlashElement();var $=arg.split(/\:|,/);_105.setAttribute($[0],$[1]);if($.length>2){_105.setAttribute($[2],$[3])}if(!this._setClasses){if(!ua.ie&&!ua.opera){dom.addClass(_3f,_105)}dom.removeClass(_3e,_105.parentNode);dom.addClass(_3d,_105.parentNode);this._setClasses=true}if(ua.khtml){var _107=_105.offsetHeight}if(!this._firedReplacementEvent){this._replacementHandler(this);this._firedReplacementEvent=true}}else{if(/(FSCommand\:)?resetmovie/.test(info)){this.resetMovie()}else{if(/(FSCommand\:)?ping/.test(info)){if(this._pings>0){this.setupFixHover()}this._pings++}else{if(this.debugHandler&&/(FSCommand\:)?debug/.test(info)){this.debugHandler(info,arg)}}}}};CallbackInfo.prototype.call=function(type,_109){var _10a=this.getFlashElement();if(!_10a){return}_10a.SetVariable("callbackType",type);_10a.SetVariable("callbackValue",_109);_10a.SetVariable("callbackTrigger",true)};CallbackInfo.prototype.replaceText=function(_10b){_10b=escape(_10b);this.call("replacetext",_10b);this.vars[0]="content="+_10b;this.html=this.html.replace(/(flashvars(=|\"\svalue=)\")[^\"]+/,"$1"+encodeURI(this.vars.join("&")))};CallbackInfo.prototype.resetMovie=function(){var _10c=this.getFlashElement();var node=_10c.parentNode;node.replaceChild(dom.nodeFromHtml(this.html),_10c);this.setupFixHover()};CallbackInfo.prototype.setupFixHover=function(){var _10e=this.getFlashElement();if(!this._fixHover||!_10e){return}var node=_10e.parentNode;if(node.addEventListener){node.addEventListener("mouseout",_72.bind(this,"fixHover"),false)}else{if(node.attachEvent){node.attachEvent("onmouseout",_72.bind(this,"fixHover"))}}};CallbackInfo.prototype.fixHover=function(){this.call("resettext")}}; \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/simplepie.css b/library/simplepie/demo/for_the_demo/simplepie.css deleted file mode 100644 index 3753cb96de..0000000000 --- a/library/simplepie/demo/for_the_demo/simplepie.css +++ /dev/null @@ -1,397 +0,0 @@ -/* -Theme Name: SimplePie -Theme URI: http://simplepie.org -Description: A simple, yet beautiful theme inspired by several cleanly designed websites. -Version: 1.4 -Author: Ryan Parman -Author URI: http://skyzyx.com -Updated: 21 June 2007 -*/ - - -/********************************************* -HYPERLINK STYLES -*********************************************/ -a { - color:#369; - text-decoration:underline; - padding:0 1px; -} - -a:hover { - color:#fff !important; - background-color:#333; - text-decoration:none; - padding:0 1px; -} - -a.nohover { - text-decoration:none; - border:none; -} - -a.nohover:hover { - background-color:transparent; - border:none; -} - -a.namelink { - padding:0; - margin:0; - overflow:hidden; - height:1px; -} - -h4 a, -.sample_feeds a { - color:#000; -} - - -/********************************************* -GENERAL STYLES -*********************************************/ -body { - /*font:12px/18px Verdana, sans-serif;*/ - font:14px/1.5em "Lucida Grande", Tahoma, sans-serif; - letter-spacing:0px; - color:#333; - background-color:#fff; - margin:0; - padding:0; -} - -div#site { - width:600px; - margin:50px auto 0 auto; -} - -h1#logo { - margin:0; - padding:0; - text-align:center; -} - -h1#logo a, -h1#logo a:hover { - background-color:transparent; - text-decoration:none; - padding:0; -} - -h2.image { - margin:0; - padding:0; - text-align:center; -} - -h3 { - margin:20px 0 0 0; - padding:0; - font-size:1.5em; -} - -h4 { - margin:20px 0 0 0; - padding:0; - font-size:1.2em; - letter-spacing:-1px; -} - -h5 { - margin:10px 0 0 0; - padding:0; - font-size:1em; - font-weight:bold; -} - -em { - font-style:normal; - background-color:#ffc; -} - -p { - margin:0; - padding:5px 0; -} - -ul, ol { - margin:10px 0 10px 20px; - padding:0 0 0 15px; -} - -ul li, ol li { - margin:0 0 7px 0; - padding:0 0 0 3px; -} - -form { - margin:0; - padding:0; -} - -code { - font-size:1em; - background-color:#f3f3ff; - color:#000; -} - -div#site pre { - background-color:#f3f3ff; - color:#000080; - border:1px dotted #000080; - overflow:auto; - padding:3px 5px; -} - -blockquote { - font-size:1em; - color:#666; - border-left:4px solid #666; - margin:10px 0 10px 30px; - padding:0 5px 0 10px; - background:#f3f3f3 url(background_blockquote.png) repeat top left; -} - -input, select, textarea { - font-size:12px; - line-height:1.2em; - padding:2px; -} - -input[type=text], select, textarea { - background-color:#e9f5ff; - border:1px solid #333; -} - -input[type=text]:focus, select:focus, textarea:focus { - background-color:#ffe; -} - -.clearLeft {clear:left;} -.clearRight {clear:right;} -.clearBoth {clear:both;} -.hide {display:none;} - - -/********************************************* -NAVIGATION STYLES -*********************************************/ -div#header { - background:#fff url(top_gradient.gif) repeat-x top left; - margin:0; - padding:0; -} - -div#header form { - margin:0; - padding:0; -} - -div#header div#headerInner { - margin:0; - padding:0; -} - -div#header div#headerInner div#logoContainer {} - -div#header div#headerInner div#logoContainerInner { - width:550px; - margin:0 auto; - padding:20px; -} - -div#header div#headerInner div#logoContainer div#logo { - float:left; - width:200px; -} - -div#header div#headerInner div#logoContainer div#logo a, -div#header div#headerInner div#logoContainer div#logo a:hover { - border:none; - background:none; -} - -div#header div#headerInner div#logoContainer div#feed { - float:right; - width:300px; - text-align:right; - padding:10px 0 0 0; -} - -div#header div#headerInner div#logoContainer div#feed input.text { - width:60%; -} - -div#header div#headerInner div#menu { - background:#eee url(background_menuitem_shadow.gif) repeat-x top left; - border-top:2px solid #ccc; - border-bottom:1px solid #ddd; - text-align:center; -} - -div#header div#headerInner div#menu table { - width:auto; - margin:0 auto; -} - -div#header div#headerInner div#menu ul { - display:block; - width:100%; - margin:0 auto; - padding:0; - font-size:12px; -} - -div#header div#headerInner div#menu ul li { - display:block; - float:left; -} - -div#header div#headerInner div#menu ul li a { - display:block; - margin:-2px 0 0 0; - padding:5px 7px 8px 7px; - text-decoration:none; - color:#666 !important; - background-color:transparent; -} - -div#header div#headerInner div#menu ul li a:hover { - display:block; - margin:-2px 0 0 0; - padding:5px 7px 8px 7px; - text-decoration:none; - color:#666; - background:#fff url(background_menuitem_off.gif) no-repeat bottom right; -} - -body#bodydemo div#header div#headerInner div#menu ul li#demo a { - display:block; - margin:-2px 0 0 0; - padding:5px 7px 8px 7px; - text-decoration:none; - color:#333; - font-weight:bold; - background:#fff url(background_menuitem.gif) no-repeat bottom right; -} - - -/********************************************* -CONTENT STYLES -*********************************************/ -div.chunk { - margin:20px 0 0 0; - padding:0 0 10px 0; - border-bottom:1px solid #ccc; -} - -div.topchunk { - margin:0 !important; -} - -.footnote, -.footnote a { - font-size:12px; - line-height:1.3em; - color:#aaa; -} - -.footnote em { - background-color:transparent; - font-style:italic; -} - -.footnote code { - background-color:transparent; - font:11px/14px monospace; - color:#aaa; -} - -p.subscribe { - background-color:#f3f3f3; - font-size:12px; - text-align:center; -} - -p.highlight { - background-color:#ffc; - font-size:12px; - text-align:center; -} - -p.sample_feeds { - font-size:12px; - line-height:1.2em; -} - -div.sp_errors { - background-color:#eee; - padding:5px; - text-align:center; - font-size:12px; -} - -.noborder { - border:none !important; -} - -img.favicon { - margin:0 4px -2px 0; - width:16px; - height:16px; -} - -p.favicons a, -p.favicons a:hover { - border:none; - background-color:transparent; -} - -p.favicons img { - border:none; -} - - -/********************************************* -DEMO STYLES -*********************************************/ -div#sp_input { - background-color:#ffc; - border:2px solid #f90; - padding:5px; - text-align:center; -} - -div#sp_input input.text { - border:1px solid #999; - background:#e9f5ff url(feed.png) no-repeat 4px 50%; - width:75%; - padding:2px 2px 2px 28px; - font:18px/22px "Lucida Grande", Verdana, sans-serif; - font-weight:bold; - letter-spacing:-1px; -} - -form#sp_form { - margin:15px 0; -} - -div.focus { - margin:0; - padding:10px 20px; - background-color:#efe; -} - -p.sample_feeds { - text-align:justify; -} - - -/********************************************* -SIFR STYLES -*********************************************/ -.sIFR-active h3.header { - visibility:hidden; - line-height:1em; -} diff --git a/library/simplepie/demo/for_the_demo/sleight.js b/library/simplepie/demo/for_the_demo/sleight.js deleted file mode 100644 index 4b5058e9a6..0000000000 --- a/library/simplepie/demo/for_the_demo/sleight.js +++ /dev/null @@ -1,31 +0,0 @@ -/********************************************************** -Sleight -(c) 2001, Aaron Boodman -http://www.youngpup.net -**********************************************************/ - -if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) -{ - document.writeln(''); - window.attachEvent("onload", fnLoadPngs); -} - -function fnLoadPngs() -{ - var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, ''); - var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5); - - for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--) - { - if (itsAllGood && img.src.match(/\.png$/i) != null) - { - var src = img.src; - var div = document.createElement("DIV"); - div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')" - div.style.width = img.width + "px"; - div.style.height = img.height + "px"; - img.replaceNode(div); - } - img.style.visibility = "visible"; - } -} diff --git a/library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png b/library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png deleted file mode 100644 index 2bfd87d0ce..0000000000 Binary files a/library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png b/library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png deleted file mode 100644 index d0629769cf..0000000000 Binary files a/library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as deleted file mode 100644 index 6a98ca5522..0000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as +++ /dev/null @@ -1,71 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -import TextField.StyleSheet; - -class SifrStyleSheet extends TextField.StyleSheet { - public var fontSize; - public var latestLeading = 0; - - public function parseCSS(cssText:String) { - var native = new TextField.StyleSheet(); - var parsed = native.parseCSS(cssText); - - if(!parsed) return false; - - var selectors = native.getStyleNames(); - for(var i = selectors.length - 1; i >= 0; i--) { - var selector = selectors[i]; - var nativeStyle = native.getStyle(selector); - var style = this.getStyle(selector) || nativeStyle; - if(style != nativeStyle) { - for(var property in nativeStyle) style[property] = nativeStyle[property]; - } - this.setStyle(selector, style); - } - - return true; - } - - // Apply leading to the textFormat. Much thanks to . - private function applyLeading(format, leading) { - this.latestLeading = leading; - - if(leading >= 0) { - format.leading = leading; - return format; - } - - // Workaround for negative leading, which is ignored otherwise. - var newFormat = new TextFormat(null, null, null, null, null, null, null, null, null, null, null, null, leading); - for(var property in format) if(property != 'leading') newFormat[property] = format[property]; - - return newFormat; - } - - public function transform(style) { - var format = super.transform(style); - if(style.leading) format = applyLeading(format, style.leading); - if(style.letterSpacing) format.letterSpacing = style.letterSpacing; - // Support font sizes relative to the size of .sIFR-root. - if(this.fontSize && style.fontSize && style.fontSize.indexOf('%')) { - format.size = this.fontSize * parseInt(style.fontSize) / 100; - } - format.kerning = _root.kerning == 'true' || !(_root.kerning == 'false') || sIFR.defaultKerning; - return format; - } -} \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt deleted file mode 100644 index 2b9d32d202..0000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt +++ /dev/null @@ -1,12 +0,0 @@ -This is a pre-release nightly of sIFR 3 (r245 to be exact). We (the SimplePie team) will be updating the -sIFR code and font files from time to time as new releases of sIFR 3 are made available. - -In this folder you'll find a few Flash 8 files. The only one of you might want to mess with is sifr.fla. - * Open it up - * Double-click the rectangle in the middle - * Select all - * Change the font - -More information about sIFR 3 can be found here: - * http://dev.novemberborn.net/sifr3/ - * http://wiki.novemberborn.net/sifr3/ \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as deleted file mode 100644 index 4d371954bc..0000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as +++ /dev/null @@ -1,12 +0,0 @@ -// MTASC only parses as-files with class definitions, so here goes... -class Options { - public static function apply() { - sIFR.fromLocal = true; - sIFR.domains = ['*']; - - // Parsing `p.foo` might not work, see: - // Appearantly you have to use hex color codes as well, names are not supported! - - sIFR.styles.parseCSS('.foo { text-decoration: underline; }'); - } -} diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as deleted file mode 100644 index 4902e003f3..0000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as +++ /dev/null @@ -1,359 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -import SifrStyleSheet; - -class sIFR { - public static var DEFAULT_TEXT = 'Rendered with sIFR 3, revision 245'; - public static var CSS_ROOT_CLASS = 'sIFR-root'; - public static var DEFAULT_WIDTH = 300; - public static var DEFAULT_HEIGHT = 100; - public static var DEFAULT_ANTI_ALIAS_TYPE = 'advanced'; - public static var MARGIN_LEFT = -3; - public static var PADDING_BOTTOM = 5; // Extra padding to make sure the movie is high enough in most cases. - public static var LEADING_REMAINDER = 2; // Flash uses the specified leading minus 2 as the applied leading. - - public static var MAX_FONT_SIZE = 126; - public static var ALIASING_MAX_FONT_SIZE = 48; - - //= Holds CSS properties and other rendering properties for the Flash movie. - // *Don't overwrite!* - public static var styles:SifrStyleSheet = new SifrStyleSheet(); - //= Allow sIFR to be run from localhost - public static var fromLocal:Boolean = true; - //= Array containing domains for which sIFR may render text. Used to prevent - // hotlinking. Use `*` to allow all domains. - public static var domains:Array = []; - //= Whether kerning is enabled by default. This can be overriden from the client side. - // See also . - public static var defaultKerning:Boolean = true; - //= Default value which can be overriden from the client side. - // See also . - public static var defaultSharpness:Number = 0; - //= Default value which can be overriden from the client side. - // See also . - public static var defaultThickness:Number = 0; - //= Default value which can be overriden from the client side. - // See also . - public static var defaultOpacity:Number = -1; // Use client settings - //= Default value which can be overriden from the client side. - // See also . - public static var defaultBlendMode:Number = -1; // Use cliest settings - //= Overrides the grid fit type as defined on the client side. - // See also . - public static var enforcedGridFitType:String = null; - //= If `true` sIFR won't override the anti aliasing set in the Flash IDE when exporting. - // Thickness and sharpness won't be affected either. - public static var preserveAntiAlias:Boolean = false; - //= If `true` sIFR will disable anti-aliasing if the font size is larger than `ALIASING_MAX_FONT_SIZE`. - // This setting is *independent* from `preserveAntiAlias`. - public static var conditionalAntiAlias:Boolean = true; - //= Sets the anti alias type. By default it's `DEFAULT_ANTI_ALIAS_TYPE`. - // See also . - public static var antiAliasType:String = null; - //= Flash filters can be added to this array and will be applied to the text field. - public static var filters:Array = []; - //= A mapping from the names of the filters to their actual objecs, used when transforming - // filters defined on the client. You can add additional filters here so they'll be supported - // when defined on the client. - public static var filterMap:Object = { - DisplacementMapFilter : flash.filters.DisplacementMapFilter, - ColorMatrixFilter : flash.filters.ColorMatrixFilter, - ConvolutionFilter : flash.filters.ConvolutionFilter, - GradientBevelFilter : flash.filters.GradientBevelFilter, - GradientGlowFilter : flash.filters.GradientGlowFilter, - BevelFilter : flash.filters.BevelFilter, - GlowFilter : flash.filters.GlowFilter, - BlurFilter : flash.filters.BlurFilter, - DropShadowFilter : flash.filters.DropShadowFilter - }; - - private static var instance; - - private var textField; - private var content; - private var realHeight; - private var originalHeight; - private var currentHeight; - private var fontSize; - private var tuneWidth; - private var tuneHeight; - - - - //= Sets the default styles for `sIFR.styles`. This method is called - // directly in `sifr.fla`, before options are applied. - public static function setDefaultStyles() { - sIFR.styles.parseCSS([ - '.', CSS_ROOT_CLASS, ' { color: #000000; }', - 'strong { display: inline; font-weight: bold; } ', - 'em { display: inline; font-style: italic; }', - 'a { color: #0000FF; text-decoration: underline; }', - 'a:hover { color: #0000FF; text-decoration: none; }' - ].join('')); - } - - //= Validates the domain sIFR is being used on. - // Returns `true` if the domain is valid, `false` otherwise. - public static function checkDomain():Boolean { - if(sIFR.domains.length == 0) return true; - - var domain = (new LocalConnection()).domain(); - if(sIFR.fromLocal) sIFR.domains.push('localhost'); - - for(var i = 0; i < sIFR.domains.length; i++) { - var match = sIFR.domains[i]; - if(match == '*' || match == domain) return true; - - var wildcard = match.lastIndexOf('*'); - if(wildcard > -1) { - match = match.substr(wildcard + 1); - var matchPosition = domain.lastIndexOf(match); - if(matchPosition > -1 && (matchPosition + match.length) == domain.length) return true; - } - } - - return false; - } - - //= Runs sIFR. Called automatically. - public static function run() { - var holder = _root.holder; - var content = checkDomain() ? unescape(_root.content) : DEFAULT_TEXT - if(content == 'undefined' || content == '') { - content = DEFAULT_TEXT; - fscommand('resetmovie', ''); - } else fscommand('ping', ''); - - // Sets stage parameters - Stage.scaleMode = 'noscale'; - Stage.align = 'TL'; - Stage.showMenu = false; - - // Other parameters - var opacity = parseInt(_root.opacity); - if(!isNaN(opacity)) holder._alpha = sIFR.defaultOpacity == -1 ? opacity : sIFR.defaultOpacity; - else holder._alpha = 100; - _root.blendMode = sIFR.defaultBlendMode == -1 ? _root.blendmode : sIFR.defaultBlendMode; - - sIFR.instance = new sIFR(holder.txtF, content); - // This should ignore resizes from the callback. Disabled for now. -/* if(_root.zoomsupport == 'true') Stage.addListener({onResize: function() { sIFR.instance.scale() }});*/ - - // Setup callbacks - _root.watch('callbackTrigger', function() { - sIFR.callback(); - return false; - }); - } - - private static function eval(str) { - var as; - - if(str.charAt(0) == '{') { // Ah, we need to create an object - as = {}; - str = str.substring(1, str.length - 1); - var $ = str.split(','); - for(var i = 0; i < $.length; i++) { - var $1 = $[i].split(':'); - as[$1[0]] = sIFR.eval($1[1]); - } - } else if(str.charAt(0) == '"') { // String - as = str.substring(1, str.length - 1); - } else if(str == 'true' || str == 'false') { // Boolean - as = str == 'true'; - } else { // Float - as = parseFloat(str); - } - - return as; - } - - private function applyFilters() { - var $filters = this.textField.filters; - $filters = $filters.concat(sIFR.filters); - - var $ = _root.flashfilters.split(';'); // name,prop:value,...; - for(var i = 0; i < $.length; i++) { - var $1 = $[i].split(','); - - var newFilter = new sIFR.filterMap[$1[0]](); - for(var j = 1; j < $1.length; j++) { - var $2 = $1[j].split(':'); - newFilter[$2[0]] = sIFR.eval(unescape($2[1])); - } - - $filters.push(newFilter); - } - - this.textField.filters = $filters; - } - - private function sIFR(textField, content) { - this.textField = textField; - this.content = content; - - var offsetLeft = parseInt(_root.offsetleft); - textField._x = MARGIN_LEFT + (isNaN(offsetLeft) ? 0 : offsetLeft); - var offsetTop = parseInt(_root.offsettop); - if(!isNaN(offsetTop)) textField._y += offsetTop; - - tuneWidth = parseInt(_root.tunewidth); - if(isNaN(tuneWidth)) tuneWidth = 0; - tuneHeight = parseInt(_root.tuneheight); - if(isNaN(tuneHeight)) tuneHeight = 0; - - textField._width = tuneWidth + (isNaN(parseInt(_root.width)) ? DEFAULT_WIDTH : parseInt(_root.width)); - textField._height = tuneHeight + (isNaN(parseInt(_root.height)) ? DEFAULT_HEIGHT : parseInt(_root.height)); - textField.wordWrap = true; - textField.selectable = _root.selectable == 'true'; - textField.gridFitType = sIFR.enforcedGridFitType || _root.gridfittype; - this.applyFilters(); - - // Determine font-size and the number of lines - this.fontSize = parseInt(_root.size); - if(isNaN(this.fontSize)) this.fontSize = 26; - styles.fontSize = this.fontSize; - - if(!sIFR.preserveAntiAlias && (sIFR.conditionalAntiAlias && this.fontSize < ALIASING_MAX_FONT_SIZE - || !sIFR.conditionalAntiAlias)) { - textField.antiAliasType = sIFR.antiAliasType || DEFAULT_ANTI_ALIAS_TYPE; - } - - if(!sIFR.preserveAntiAlias || !isNaN(parseInt(_root.sharpness))) { - textField.sharpness = parseInt(_root.sharpness); - } - if(isNaN(textField.sharpness)) textField.sharpness = sIFR.defaultSharpness; - - if(!sIFR.preserveAntiAlias || !isNaN(parseInt(_root.thickness))) { - textField.thickness = parseInt(_root.thickness); - } - if(isNaN(textField.thickness)) textField.thickness = sIFR.defaultThickness; - - // Set font-size and other styles - sIFR.styles.parseCSS(unescape(_root.css)); - - var rootStyle = styles.getStyle('.sIFR-root') || {}; - rootStyle.fontSize = this.fontSize; // won't go higher than 126! - styles.setStyle('.sIFR-root', rootStyle); - textField.styleSheet = styles; - - this.write(content); - this.repaint(); - } - - private function repaint() { - var leadingFix = this.isSingleLine() ? sIFR.styles.latestLeading : 0; - if(leadingFix > 0) leadingFix -= LEADING_REMAINDER; - - // Flash wants to scroll the movie by one line, by adding the fontSize to the - // textField height this is no longer happens. We also add the absolute tuneHeight, - // to prevent a negative value from triggering the bug. We won't send the fake - // value to the JavaScript side, though. - textField._height = textField.textHeight + PADDING_BOTTOM + this.fontSize + Math.abs(tuneHeight) + tuneHeight - leadingFix; - this.realHeight = textField._height - this.fontSize - Math.abs(tuneHeight); - var arg = 'height:' + this.realHeight; - if(_root.fitexactly == 'true') arg += ',width:' + (textField.textWidth + tuneWidth); - fscommand('resize', arg); - - this.originalHeight = textField._height; - this.currentHeight = Stage.height; - - textField._xscale = textField._yscale = parseInt(_root.zoom); - } - - private function write(content) { - this.textField.htmlText = ['

', - content, '

' - ].join(''); - } - - private function isSingleLine() { - return Math.round((this.textField.textHeight - sIFR.styles.latestLeading) / this.fontSize) == 1; - } - - //= Scales the text field to the new scale of the Flash movie itself. - public function scale() { - this.currentHeight = Stage.height; - var scale = 100 * Math.round(this.currentHeight / this.originalHeight); - textField._xscale = textField._yscale = scale; - } - - private function calculateRatios() { - var strings = ['X', 'X
X', 'X
X
X', 'X
X
X
X']; - var results = {}; - - for(var i = 1; i <= strings.length; i++) { - var size = 6; - - this.write(strings[i - 1]); - while(size < MAX_FONT_SIZE) { - var rootStyle = sIFR.styles.getStyle('.sIFR-root') || {}; - rootStyle.fontSize = size; - sIFR.styles.setStyle('.sIFR-root', rootStyle); - this.textField.styleSheet = sIFR.styles; - this.repaint(); - var ratio = (this.realHeight - PADDING_BOTTOM) / i / size; - if(!results[size]) results[size] = ratio; - else results[size] = ((i - 1) * results[size] + ratio) / i; - size++; - } - } - - var sizes = [], ratios = []; - var ratiosToSizes = {}, sizesToRatios = {}; - - for(var size in results) { - if(results[size] == Object.prototype[size]) continue; - var ratio = results[size]; - ratiosToSizes[ratio] = Math.max(ratio, parseInt(size)); - } - - for(var ratio in ratiosToSizes) { - if(ratiosToSizes[ratio] == Object.prototype[ratio]) continue; - sizesToRatios[ratiosToSizes[ratio]] = roundDecimals(ratio, 2); - sizes.push(ratiosToSizes[ratio]); - } - - sizes.sort(function(a, b) { return a - b; }); - for(var j = 0; j < sizes.length - 1; j++) ratios.push(sizes[j], sizesToRatios[sizes[j]]); - ratios.push(sizesToRatios[sizes[sizes.length - 1]]); - - fscommand('debug:ratios', '[' + ratios.join(',') + ']'); - } - - private function roundDecimals(value, decimals) { - return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals); - } - - public static function callback() { - switch(_root.callbackType) { - case 'replacetext': - sIFR.instance.content = _root.callbackValue; - sIFR.instance.write(_root.callbackValue); - sIFR.instance.repaint(); - break; - case 'resettext': - sIFR.instance.write(''); - sIFR.instance.write(sIFR.instance.content); - break; - case 'ratios': - sIFR.instance.calculateRatios(); - break; - } - } -} diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla deleted file mode 100644 index 2aa3f647f4..0000000000 Binary files a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/top_gradient.gif b/library/simplepie/demo/for_the_demo/top_gradient.gif deleted file mode 100644 index f77bd38f97..0000000000 Binary files a/library/simplepie/demo/for_the_demo/top_gradient.gif and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/verdana.swf b/library/simplepie/demo/for_the_demo/verdana.swf deleted file mode 100644 index baf0350473..0000000000 Binary files a/library/simplepie/demo/for_the_demo/verdana.swf and /dev/null differ diff --git a/library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf b/library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf deleted file mode 100644 index c812a79dcf..0000000000 Binary files a/library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf and /dev/null differ diff --git a/library/simplepie/demo/handler_image.php b/library/simplepie/demo/handler_image.php deleted file mode 100644 index 49c3ec89b2..0000000000 --- a/library/simplepie/demo/handler_image.php +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/library/simplepie/demo/index.php b/library/simplepie/demo/index.php deleted file mode 100644 index 1481ba9172..0000000000 --- a/library/simplepie/demo/index.php +++ /dev/null @@ -1,295 +0,0 @@ -force_fsockopen(true); - -// Make sure that page is getting passed a URL -if (isset($_GET['feed']) && $_GET['feed'] !== '') -{ - // Strip slashes if magic quotes is enabled (which automatically escapes certain characters) - if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) - { - $_GET['feed'] = stripslashes($_GET['feed']); - } - - // Use the URL that was passed to the page in SimplePie - $feed->set_feed_url($_GET['feed']); - - // XML dump - $feed->enable_xml_dump(isset($_GET['xmldump']) ? true : false); -} - -// Allow us to change the input encoding from the URL string if we want to. (optional) -if (!empty($_GET['input'])) -{ - $feed->set_input_encoding($_GET['input']); -} - -// Allow us to choose to not re-order the items by date. (optional) -if (!empty($_GET['orderbydate']) && $_GET['orderbydate'] == 'false') -{ - $feed->enable_order_by_date(false); -} - -// Allow us to cache images in feeds. This will also bypass any hotlink blocking put in place by the website. -if (!empty($_GET['image']) && $_GET['image'] == 'true') -{ - $feed->set_image_handler('./handler_image.php'); -} - -// We'll enable the discovering and caching of favicons. -$feed->set_favicon_handler('./handler_image.php'); - -// Initialize the whole SimplePie object. Read the feed, process it, parse it, cache it, and -// all that other good stuff. The feed's information will not be available to SimplePie before -// this is called. -$success = $feed->init(); - -// We'll make sure that the right content type and character encoding gets set automatically. -// This function will grab the proper character encoding, as well as set the content type to text/html. -$feed->handle_content_type(); - -// When we end our PHP block, we want to make sure our DOCTYPE is on the top line to make -// sure that the browser snaps into Standards Mode. -?> - - - -SimplePie: Demo - - - - - - - - - - - - - - - -
- -
- -
-
-
- - - -

 

- - -
-
- - - error()) - { - // If so, start a
element with a classname so we can style it. - echo '
' . "\r\n"; - - // ... and display it. - echo '

' . htmlspecialchars($feed->error()) . "

\r\n"; - - // Close the
element we opened. - echo '
' . "\r\n"; - } - ?> - - -

Or try one of the following: - 詹姆斯.com, - adult swim, - Afterdawn, - Ajaxian, - Andy Budd, - Ask a Ninja, - AtomEnabled.org, - BBC News, - BBC Arabic, - BBC China, - BBC Russia, - Brent Simmons, - Channel Frederator, - CNN, - Digg, - Diggnation, - Flickr, - Google News, - Google Video, - Harvard Law, - Hebrew Language, - InfoWorld, - iTunes, - Japanese Language, - Korean Language, - mir.aculo.us, - Movie Trailers, - Newspond, - Nick Bradbury, - OK/Cancel, - OS News, - Phil Ringnalda, - Photoshop Videocast, - Romanian Language, - Russian Language, - Traditional Chinese Language, - Technorati, - Tim Bray, - TUAW, - TVgasm, - UNEASYsilence, - Web 2.0 Show, - Windows Vista Blog, - XKCD, - Yahoo! News, - You Tube, - Zeldman

- -
- -
- - - -
- - -

get_link()) echo ''; echo $feed->get_title(); if ($feed->get_link()) echo ''; ?>

- - - get_description(); ?> - -
- - - - - - - get_items() as $item): ?> -
- - get_favicon()) - { - $favicon = './for_the_demo/favicons/alternate.png'; - } - ?> - - -

Faviconget_permalink()) echo ''; echo $item->get_title(); if ($item->get_permalink()) echo ''; ?> get_date('j M Y, g:i a'); ?>

- - - get_content(); ?> - - get_enclosure(0)) - { - // Use the embed() method to embed the enclosure into the page inline. - echo '
'; - echo '

' . $enclosure->embed(array( - 'audio' => './for_the_demo/place_audio.png', - 'video' => './for_the_demo/place_video.png', - 'mediaplayer' => './for_the_demo/mediaplayer.swf', - 'altclass' => 'download' - )) . '

'; - - if ($enclosure->get_link() && $enclosure->get_type()) - { - echo '

(' . $enclosure->get_type(); - if ($enclosure->get_size()) - { - echo '; ' . $enclosure->get_size() . ' MB'; - } - echo ')

'; - } - if ($enclosure->get_thumbnail()) - { - echo '
'; - } - echo '
'; - } - ?> - - -

- Blinklist - Blogmarks - del.icio.us - Digg - Ma.gnolia - My Web 2.0 - Newsvine - Reddit - Segnalo - Simpy - Spurl - Wists - Technorati -

- -
- - - - - - - -
- -
- -

Page processed in seconds.

- - -

Powered by . Run the SimplePie Compatibility Test. SimplePie is © 2004–, Ryan Parman and Geoffrey Sneddon, and licensed under the BSD License.

-
- -
- -
- - - diff --git a/library/simplepie/demo/minimalistic.php b/library/simplepie/demo/minimalistic.php deleted file mode 100644 index 56509c00cb..0000000000 --- a/library/simplepie/demo/minimalistic.php +++ /dev/null @@ -1,137 +0,0 @@ -=')) - { - return microtime(true); - } - else - { - list($usec, $sec) = explode(' ', microtime()); - return ((float) $usec + (float) $sec); - } -} - -$start = microtime_float(); - -include('../simplepie.inc'); - -// Parse it -$feed = new SimplePie(); -if (!empty($_GET['feed'])) -{ - if (get_magic_quotes_gpc()) - { - $_GET['feed'] = stripslashes($_GET['feed']); - } - $feed->set_feed_url($_GET['feed']); - $feed->init(); -} -$feed->handle_content_type(); - -?> - - - -<?php echo (empty($_GET['feed'])) ? 'SimplePie' : 'SimplePie: ' . $feed->get_title(); ?> - - - - - - - - - - -

get_title(); ?>

- -
-

 

-
- -
- data): ?> - get_items(); ?> -

Displaying get_item_quantity(); ?> most recent entries.

- -
-

get_title(); ?> get_date('j M Y'); ?>

- get_content(); ?> - get_enclosure(0)) - echo '

Podcast

'; - ?> -
- -
- -
- - - - diff --git a/library/simplepie/demo/multifeeds.php b/library/simplepie/demo/multifeeds.php deleted file mode 100644 index b23d792a2f..0000000000 --- a/library/simplepie/demo/multifeeds.php +++ /dev/null @@ -1,108 +0,0 @@ -set_feed_url(array( - 'http://rss.news.yahoo.com/rss/topstories', - 'http://news.google.com/?output=atom', - 'http://rss.cnn.com/rss/cnn_topstories.rss' -)); - -// When we set these, we need to make sure that the handler_image.php file is also trying to read from the same cache directory that we are. -$feed->set_favicon_handler('./handler_image.php'); -$feed->set_image_handler('./handler_image.php'); - -// Initialize the feed. -$feed->init(); - -// Make sure the page is being served with the UTF-8 headers. -$feed->handle_content_type(); - -// Begin the (X)HTML page. -?> - - - Multifeeds Test page - - - - -
- - error): ?> -

error()?>

- - -
-

Quick-n-Dirty Multifeeds Demo

-
- - get_items() as $item): - - // Let's give ourselves a reference to the parent $feed object for this particular item. - $feed = $item->get_feed(); - ?> - -
-

get_title(), ENT_QUOTES, 'UTF-8'); ?>

- - - get_content(); ?> - - get_enclosure()): ?> -
- native_embed(array( - // New 'mediaplayer' attribute shows off Flash-based MP3 and FLV playback. - 'mediaplayer' => '../demo/for_the_demo/mediaplayer.swf' - )); ?> -
- - -

Source: get_title(); ?> | get_date('j M Y | g:i a'); ?>

-
- - - -

This is a test of the emergency broadcast system. This is only a test… beeeeeeeeeeeeeeeeeeeeeeeeeep!

- -
- - \ No newline at end of file diff --git a/library/simplepie/demo/test.php b/library/simplepie/demo/test.php deleted file mode 100644 index 5b9943abbc..0000000000 --- a/library/simplepie/demo/test.php +++ /dev/null @@ -1,62 +0,0 @@ -set_feed_url($_GET['feed']); - $feed->enable_cache(false); - $starttime = explode(' ', microtime()); - $starttime = $starttime[1] + $starttime[0]; - $feed->init(); - $endtime = explode(' ', microtime()); - $endtime = $endtime[1] + $endtime[0]; - $time = $endtime - $starttime; -} -else -{ - $time = 'null'; -} - -$feed->handle_content_type(); - -?> - -SimplePie Test -
-
-
\ No newline at end of file diff --git a/library/simplepie/idn/LICENCE b/library/simplepie/idn/LICENCE deleted file mode 100644 index 25a1d22dfe..0000000000 --- a/library/simplepie/idn/LICENCE +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/library/simplepie/idn/ReadMe.txt b/library/simplepie/idn/ReadMe.txt deleted file mode 100644 index 7ca8c7e6de..0000000000 --- a/library/simplepie/idn/ReadMe.txt +++ /dev/null @@ -1,123 +0,0 @@ -******************************************************************************* -* * -* IDNA Convert (idna_convert.class.php) * -* * -* http://idnaconv.phlymail.de mailto:phlymail@phlylabs.de * -******************************************************************************* -* (c) 2004-2007 phlyLabs, Berlin * -* This file is encoded in UTF-8 * -******************************************************************************* - -Introduction ------------- - -The class idna_convert allows to convert internationalized domain names -(see RFC 3490, 3491, 3492 and 3454 for detials) as they can be used with various -registries worldwide to be translated between their original (localized) form -and their encoded form as it will be used in the DNS (Domain Name System). - -The class provides two public methods, encode() and decode(), which do exactly -what you would expect them to do. You are allowed to use complete domain names, -simple strings and complete email addresses as well. That means, that you might -use any of the following notations: - -- www.nörgler.com -- xn--nrgler-wxa -- xn--brse-5qa.xn--knrz-1ra.info - -Errors, incorrectly encoded or invalid strings will lead to either a FALSE -response (when in strict mode) or to only partially converted strings. -You can query the occured error by calling the method get_last_error(). - -Unicode strings are expected to be either UTF-8 strings, UCS-4 strings or UCS-4 -arrays. The default format is UTF-8. For setting different encodings, you can -call the method setParams() - please see the inline documentation for details. -ACE strings (the Punycode form) are always 7bit ASCII strings. - -ATTENTION: We no longer supply the PHP5 version of the class. It is not -necessary for achieving a successfull conversion, since the supplied PHP code is -compatible with both PHP4 and PHP5. We expect to see no compatibility issues -with the upcoming PHP6, too. - - -Files ------ - -idna_convert.class.php - The actual class -idna_convert.create.npdata.php - Useful for (re)creating the NPData file -npdata.ser - Serialized data for NamePrep -example.php - An example web page for converting -ReadMe.txt - This file -LICENCE - The LGPL licence file - -The class is contained in idna_convert.class.php. -MAKE SURE to copy the npdata.ser file into the same folder as the class file -itself! - - -Examples --------- - -1. Say we wish to encode the domain name nörgler.com: - -// Include the class -include_once('idna_convert.class.php'); -// Instantiate it * -$IDN = new idna_convert(); -// The input string, if input is not UTF-8 or UCS-4, it must be converted before -$input = utf8_encode('nörgler.com'); -// Encode it to its punycode presentation -$output = $IDN->encode($input); -// Output, what we got now -echo $output; // This will read: xn--nrgler-wxa.com - - -2. We received an email from a punycoded domain and are willing to learn, how - the domain name reads originally - -// Include the class -include_once('idna_convert.class.php'); -// Instantiate it (depending on the version you are using) with -$IDN = new idna_convert(); -// The input string -$input = 'andre@xn--brse-5qa.xn--knrz-1ra.info'; -// Encode it to its punycode presentation -$output = $IDN->decode($input); -// Output, what we got now, if output should be in a format different to UTF-8 -// or UCS-4, you will have to convert it before outputting it -echo utf8_decode($output); // This will read: andre@börse.knörz.info - - -3. The input is read from a UCS-4 coded file and encoded line by line. By - appending the optional second parameter we tell enode() about the input - format to be used - -// Include the class -include_once('idna_convert.class.php'); -// Instantiate it -$IDN = new dinca_convert(); -// Iterate through the input file line by line -foreach (file('ucs4-domains.txt') as $line) { - echo $IDN->encode(trim($line), 'ucs4_string'); - echo "\n"; -} - - -NPData ------- - -Should you need to recreate the npdata.ser file, which holds all necessary translation -tables in a serialized format, you can run the file idna_convert.create.npdata.php, which -creates the file for you and stores it in the same folder, where it is placed. -Should you need to do changes to the tables you can do so, but beware of the consequences. - - -Contact us ----------- - -In case of errors, bugs, questions, wishes, please don't hesitate to contact us -under the email address above. - -The team of phlyLabs -http://phlylabs.de -mailto:phlymail@phlylabs.de \ No newline at end of file diff --git a/library/simplepie/idn/idna_convert.class.php b/library/simplepie/idn/idna_convert.class.php deleted file mode 100644 index ed2bae26db..0000000000 --- a/library/simplepie/idn/idna_convert.class.php +++ /dev/null @@ -1,969 +0,0 @@ - - * @copyright 2004-2007 phlyLabs Berlin, http://phlylabs.de - * @version 0.5.1 - * - */ -class idna_convert -{ - /** - * Holds all relevant mapping tables, loaded from a seperate file on construct - * See RFC3454 for details - * - * @var array - * @access private - */ - var $NP = array(); - - // Internal settings, do not mess with them - var $_punycode_prefix = 'xn--'; - var $_invalid_ucs = 0x80000000; - var $_max_ucs = 0x10FFFF; - var $_base = 36; - var $_tmin = 1; - var $_tmax = 26; - var $_skew = 38; - var $_damp = 700; - var $_initial_bias = 72; - var $_initial_n = 0x80; - var $_sbase = 0xAC00; - var $_lbase = 0x1100; - var $_vbase = 0x1161; - var $_tbase = 0x11A7; - var $_lcount = 19; - var $_vcount = 21; - var $_tcount = 28; - var $_ncount = 588; // _vcount * _tcount - var $_scount = 11172; // _lcount * _tcount * _vcount - var $_error = false; - - // See {@link set_paramter()} for details of how to change the following - // settings from within your script / application - var $_api_encoding = 'utf8'; // Default input charset is UTF-8 - var $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden - var $_strict_mode = false; // Behave strict or not - - // The constructor - function idna_convert($options = false) - { - $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; - if (function_exists('file_get_contents')) { - $this->NP = unserialize(file_get_contents(dirname(__FILE__).'/npdata.ser')); - } else { - $this->NP = unserialize(join('', file(dirname(__FILE__).'/npdata.ser'))); - } - // If parameters are given, pass these to the respective method - if (is_array($options)) { - return $this->set_parameter($options); - } - return true; - } - - /** - * Sets a new option value. Available options and values: - * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, - * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] - * [overlong - Unicode does not allow unnecessarily long encodings of chars, - * to allow this, set this parameter to true, else to false; - * default is false.] - * [strict - true: strict mode, good for registration purposes - Causes errors - * on failures; false: loose mode, ideal for "wildlife" applications - * by silently ignoring errors and returning the original input instead - * - * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) - * @param string Value to use (if parameter 1 is a string) - * @return boolean true on success, false otherwise - * @access public - */ - function set_parameter($option, $value = false) - { - if (!is_array($option)) { - $option = array($option => $value); - } - foreach ($option as $k => $v) { - switch ($k) { - case 'encoding': - switch ($v) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - $this->_api_encoding = $v; - break; - default: - $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); - return false; - } - break; - case 'overlong': - $this->_allow_overlong = ($v) ? true : false; - break; - case 'strict': - $this->_strict_mode = ($v) ? true : false; - break; - default: - $this->_error('Set Parameter: Unknown option '.$k); - return false; - } - } - return true; - } - - /** - * Decode a given ACE domain name - * @param string Domain name (ACE string) - * [@param string Desired output encoding, see {@link set_parameter}] - * @return string Decoded Domain name (UTF-8 or UCS-4) - * @access public - */ - function decode($input, $one_time_encoding = false) - { - // Optionally set - if ($one_time_encoding) { - switch ($one_time_encoding) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - break; - default: - $this->_error('Unknown encoding '.$one_time_encoding); - return false; - } - } - // Make sure to drop any newline characters around - $input = trim($input); - - // Negotiate input and try to determine, whether it is a plain string, - // an email address or something like a complete URL - if (strpos($input, '@')) { // Maybe it is an email address - // No no in strict mode - if ($this->_strict_mode) { - $this->_error('Only simple domain name parts can be handled in strict mode'); - return false; - } - list ($email_pref, $input) = explode('@', $input, 2); - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - } - $input = join('.', $arr); - $arr = explode('.', $email_pref); - foreach ($arr as $k => $v) { - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - } - $email_pref = join('.', $arr); - $return = $email_pref . '@' . $input; - } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) - // No no in strict mode - if ($this->_strict_mode) { - $this->_error('Only simple domain name parts can be handled in strict mode'); - return false; - } - $parsed = parse_url($input); - if (isset($parsed['host'])) { - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - $parsed['host'] = join('.', $arr); - $return = - (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) - .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') - .$parsed['host'] - .(empty($parsed['port']) ? '' : ':'.$parsed['port']) - .(empty($parsed['path']) ? '' : $parsed['path']) - .(empty($parsed['query']) ? '' : '?'.$parsed['query']) - .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); - } else { // parse_url seems to have failed, try without it - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - $arr[$k] = ($conv) ? $conv : $v; - } - $return = join('.', $arr); - } - } else { // Otherwise we consider it being a pure domain name string - $return = $this->_decode($input); - if (!$return) $return = $input; - } - // The output is UTF-8 by default, other output formats need conversion here - // If one time encoding is given, use this, else the objects property - switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - return $return; - break; - case 'ucs4_string': - return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); - break; - case 'ucs4_array': - return $this->_utf8_to_ucs4($return); - break; - default: - $this->_error('Unsupported output format'); - return false; - } - } - - /** - * Encode a given UTF-8 domain name - * @param string Domain name (UTF-8 or UCS-4) - * [@param string Desired input encoding, see {@link set_parameter}] - * @return string Encoded Domain name (ACE string) - * @access public - */ - function encode($decoded, $one_time_encoding = false) - { - // Forcing conversion of input to UCS4 array - // If one time encoding is given, use this, else the objects property - switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - $decoded = $this->_utf8_to_ucs4($decoded); - break; - case 'ucs4_string': - $decoded = $this->_ucs4_string_to_ucs4($decoded); - case 'ucs4_array': - break; - default: - $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding)); - return false; - } - - // No input, no output, what else did you expect? - if (empty($decoded)) return ''; - - // Anchors for iteration - $last_begin = 0; - // Output string - $output = ''; - foreach ($decoded as $k => $v) { - // Make sure to use just the plain dot - switch($v) { - case 0x3002: - case 0xFF0E: - case 0xFF61: - $decoded[$k] = 0x2E; - // Right, no break here, the above are converted to dots anyway - // Stumbling across an anchoring character - case 0x2E: - case 0x2F: - case 0x3A: - case 0x3F: - case 0x40: - // Neither email addresses nor URLs allowed in strict mode - if ($this->_strict_mode) { - $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); - return false; - } else { - // Skip first char - if ($k) { - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); - } - $output .= chr($decoded[$k]); - } - $last_begin = $k + 1; - } - } - } - // Catch the rest of the string - if ($last_begin) { - $inp_len = sizeof($decoded); - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - } - return $output; - } else { - if ($output = $this->_encode($decoded)) { - return $output; - } else { - return $this->_ucs4_to_utf8($decoded); - } - } - } - - /** - * Use this method to get the last error ocurred - * @param void - * @return string The last error, that occured - * @access public - */ - function get_last_error() - { - return $this->_error; - } - - /** - * The actual decoding algorithm - * @access private - */ - function _decode($encoded) - { - // We do need to find the Punycode prefix - if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) { - $this->_error('This is not a punycode string'); - return false; - } - $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded); - // If nothing left after removing the prefix, it is hopeless - if (!$encode_test) { - $this->_error('The given encoded string was empty'); - return false; - } - // Find last occurence of the delimiter - $delim_pos = strrpos($encoded, '-'); - if ($delim_pos > strlen($this->_punycode_prefix)) { - for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) { - $decoded[] = ord($encoded{$k}); - } - } else { - $decoded = array(); - } - $deco_len = count($decoded); - $enco_len = strlen($encoded); - - // Wandering through the strings; init - $is_first = true; - $bias = $this->_initial_bias; - $idx = 0; - $char = $this->_initial_n; - - for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { - for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { - $digit = $this->_decode_digit($encoded{$enco_idx++}); - $idx += $digit * $w; - $t = ($k <= $bias) ? $this->_tmin : - (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); - if ($digit < $t) break; - $w = (int) ($w * ($this->_base - $t)); - } - $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); - $is_first = false; - $char += (int) ($idx / ($deco_len + 1)); - $idx %= ($deco_len + 1); - if ($deco_len > 0) { - // Make room for the decoded char - for ($i = $deco_len; $i > $idx; $i--) { - $decoded[$i] = $decoded[($i - 1)]; - } - } - $decoded[$idx++] = $char; - } - return $this->_ucs4_to_utf8($decoded); - } - - /** - * The actual encoding algorithm - * @access private - */ - function _encode($decoded) - { - // We cannot encode a domain name containing the Punycode prefix - $extract = strlen($this->_punycode_prefix); - $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); - $check_deco = array_slice($decoded, 0, $extract); - - if ($check_pref == $check_deco) { - $this->_error('This is already a punycode string'); - return false; - } - // We will not try to encode strings consisting of basic code points only - $encodable = false; - foreach ($decoded as $k => $v) { - if ($v > 0x7a) { - $encodable = true; - break; - } - } - if (!$encodable) { - $this->_error('The given string does not contain encodable chars'); - return false; - } - - // Do NAMEPREP - $decoded = $this->_nameprep($decoded); - if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed - - $deco_len = count($decoded); - if (!$deco_len) return false; // Empty array - - $codecount = 0; // How many chars have been consumed - - $encoded = ''; - // Copy all basic code points to output - for ($i = 0; $i < $deco_len; ++$i) { - $test = $decoded[$i]; - // Will match [-0-9a-zA-Z] - if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) - || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) { - $encoded .= chr($decoded[$i]); - $codecount++; - } - } - if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones - - // Start with the prefix; copy it to output - $encoded = $this->_punycode_prefix.$encoded; - - // If we have basic code points in output, add an hyphen to the end - if ($codecount) $encoded .= '-'; - - // Now find and encode all non-basic code points - $is_first = true; - $cur_code = $this->_initial_n; - $bias = $this->_initial_bias; - $delta = 0; - while ($codecount < $deco_len) { - // Find the smallest code point >= the current code point and - // remember the last ouccrence of it in the input - for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { - if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { - $next_code = $decoded[$i]; - } - } - - $delta += ($next_code - $cur_code) * ($codecount + 1); - $cur_code = $next_code; - - // Scan input again and encode all characters whose code point is $cur_code - for ($i = 0; $i < $deco_len; $i++) { - if ($decoded[$i] < $cur_code) { - $delta++; - } elseif ($decoded[$i] == $cur_code) { - for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { - $t = ($k <= $bias) ? $this->_tmin : - (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); - if ($q < $t) break; - $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval() - $q = (int) (($q - $t) / ($this->_base - $t)); - } - $encoded .= $this->_encode_digit($q); - $bias = $this->_adapt($delta, $codecount+1, $is_first); - $codecount++; - $delta = 0; - $is_first = false; - } - } - $delta++; - $cur_code++; - } - return $encoded; - } - - /** - * Adapt the bias according to the current code point and position - * @access private - */ - function _adapt($delta, $npoints, $is_first) - { - $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2)); - $delta += intval($delta / $npoints); - for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { - $delta = intval($delta / ($this->_base - $this->_tmin)); - } - return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); - } - - /** - * Encoding a certain digit - * @access private - */ - function _encode_digit($d) - { - return chr($d + 22 + 75 * ($d < 26)); - } - - /** - * Decode a certain digit - * @access private - */ - function _decode_digit($cp) - { - $cp = ord($cp); - return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); - } - - /** - * Internal error handling method - * @access private - */ - function _error($error = '') - { - $this->_error = $error; - } - - /** - * Do Nameprep according to RFC3491 and RFC3454 - * @param array Unicode Characters - * @return string Unicode Characters, Nameprep'd - * @access private - */ - function _nameprep($input) - { - $output = array(); - $error = false; - // - // Mapping - // Walking through the input array, performing the required steps on each of - // the input chars and putting the result into the output array - // While mapping required chars we apply the cannonical ordering - foreach ($input as $v) { - // Map to nothing == skip that code point - if (in_array($v, $this->NP['map_nothing'])) continue; - - // Try to find prohibited input - if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) { - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); - return false; - } - foreach ($this->NP['prohibit_ranges'] as $range) { - if ($range[0] <= $v && $v <= $range[1]) { - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); - return false; - } - } - // - // Hangul syllable decomposition - if (0xAC00 <= $v && $v <= 0xD7AF) { - foreach ($this->_hangul_decompose($v) as $out) { - $output[] = (int) $out; - } - // There's a decomposition mapping for that code point - } elseif (isset($this->NP['replacemaps'][$v])) { - foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) { - $output[] = (int) $out; - } - } else { - $output[] = (int) $v; - } - } - // Before applying any Combining, try to rearrange any Hangul syllables - $output = $this->_hangul_compose($output); - // - // Combine code points - // - $last_class = 0; - $last_starter = 0; - $out_len = count($output); - for ($i = 0; $i < $out_len; ++$i) { - $class = $this->_get_combining_class($output[$i]); - if ((!$last_class || $last_class > $class) && $class) { - // Try to match - $seq_len = $i - $last_starter; - $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); - // On match: Replace the last starter with the composed character and remove - // the now redundant non-starter(s) - if ($out) { - $output[$last_starter] = $out; - if (count($out) != $seq_len) { - for ($j = $i+1; $j < $out_len; ++$j) { - $output[$j-1] = $output[$j]; - } - unset($output[$out_len]); - } - // Rewind the for loop by one, since there can be more possible compositions - $i--; - $out_len--; - $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]); - continue; - } - } - // The current class is 0 - if (!$class) $last_starter = $i; - $last_class = $class; - } - return $output; - } - - /** - * Decomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param integer 32bit UCS4 code point - * @return array Either Hangul Syllable decomposed or original 32bit value as one value array - * @access private - */ - function _hangul_decompose($char) - { - $sindex = (int) $char - $this->_sbase; - if ($sindex < 0 || $sindex >= $this->_scount) { - return array($char); - } - $result = array(); - $result[] = (int) $this->_lbase + $sindex / $this->_ncount; - $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount; - $T = intval($this->_tbase + $sindex % $this->_tcount); - if ($T != $this->_tbase) $result[] = $T; - return $result; - } - /** - * Ccomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param array Decomposed UCS4 sequence - * @return array UCS4 sequence with syllables composed - * @access private - */ - function _hangul_compose($input) - { - $inp_len = count($input); - if (!$inp_len) return array(); - $result = array(); - $last = (int) $input[0]; - $result[] = $last; // copy first char from input to output - - for ($i = 1; $i < $inp_len; ++$i) { - $char = (int) $input[$i]; - $sindex = $last - $this->_sbase; - $lindex = $last - $this->_lbase; - $vindex = $char - $this->_vbase; - $tindex = $char - $this->_tbase; - // Find out, whether two current characters are LV and T - if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) - && 0 <= $tindex && $tindex <= $this->_tcount) { - // create syllable of form LVT - $last += $tindex; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // Find out, whether two current characters form L and V - if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) { - // create syllable of form LV - $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // if neither case was true, just add the character - $last = $char; - $result[] = $char; - } - return $result; - } - - /** - * Returns the combining class of a certain wide char - * @param integer Wide char to check (32bit integer) - * @return integer Combining class if found, else 0 - * @access private - */ - function _get_combining_class($char) - { - return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0; - } - - /** - * Apllies the cannonical ordering of a decomposed UCS4 sequence - * @param array Decomposed UCS4 sequence - * @return array Ordered USC4 sequence - * @access private - */ - function _apply_cannonical_ordering($input) - { - $swap = true; - $size = count($input); - while ($swap) { - $swap = false; - $last = $this->_get_combining_class(intval($input[0])); - for ($i = 0; $i < $size-1; ++$i) { - $next = $this->_get_combining_class(intval($input[$i+1])); - if ($next != 0 && $last > $next) { - // Move item leftward until it fits - for ($j = $i + 1; $j > 0; --$j) { - if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break; - $t = intval($input[$j]); - $input[$j] = intval($input[$j-1]); - $input[$j-1] = $t; - $swap = true; - } - // Reentering the loop looking at the old character again - $next = $last; - } - $last = $next; - } - } - return $input; - } - - /** - * Do composition of a sequence of starter and non-starter - * @param array UCS4 Decomposed sequence - * @return array Ordered USC4 sequence - * @access private - */ - function _combine($input) - { - $inp_len = count($input); - foreach ($this->NP['replacemaps'] as $np_src => $np_target) { - if ($np_target[0] != $input[0]) continue; - if (count($np_target) != $inp_len) continue; - $hit = false; - foreach ($input as $k2 => $v2) { - if ($v2 == $np_target[$k2]) { - $hit = true; - } else { - $hit = false; - break; - } - } - if ($hit) return $np_src; - } - return false; - } - - /** - * This converts an UTF-8 encoded string to its UCS-4 representation - * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing - * each of the "chars". This is due to PHP not being able to handle strings with - * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. - * The following UTF-8 encodings are supported: - * bytes bits representation - * 1 7 0xxxxxxx - * 2 11 110xxxxx 10xxxxxx - * 3 16 1110xxxx 10xxxxxx 10xxxxxx - * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * Each x represents a bit that can be used to store character data. - * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 - * @access private - */ - function _utf8_to_ucs4($input) - { - $output = array(); - $out_len = 0; - $inp_len = strlen($input); - $mode = 'next'; - $test = 'none'; - for ($k = 0; $k < $inp_len; ++$k) { - $v = ord($input{$k}); // Extract byte from input string - - if ($v < 128) { // We found an ASCII char - put into stirng as is - $output[$out_len] = $v; - ++$out_len; - if ('add' == $mode) { - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - return false; - } - continue; - } - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char - $start_byte = $v; - $mode = 'add'; - $test = 'range'; - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left - $v = ($v - 192) << 6; - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx - $next_byte = 1; - $v = ($v - 224) << 12; - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 2; - $v = ($v - 240) << 18; - } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 3; - $v = ($v - 248) << 24; - } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 4; - $v = ($v - 252) << 30; - } else { - $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k); - return false; - } - if ('add' == $mode) { - $output[$out_len] = (int) $v; - ++$out_len; - continue; - } - } - if ('add' == $mode) { - if (!$this->_allow_overlong && $test == 'range') { - $test = 'none'; - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { - $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k); - return false; - } - } - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx - $v = ($v - 128) << ($next_byte * 6); - $output[($out_len - 1)] += $v; - --$next_byte; - } else { - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - return false; - } - if ($next_byte < 0) { - $mode = 'next'; - } - } - } // for - return $output; - } - - /** - * Convert UCS-4 string into UTF-8 string - * See _utf8_to_ucs4() for details - * @access private - */ - function _ucs4_to_utf8($input) - { - $output = ''; - $k = 0; - foreach ($input as $v) { - ++$k; - // $v = ord($v); - if ($v < 128) { // 7bit are transferred literally - $output .= chr($v); - } elseif ($v < (1 << 11)) { // 2 bytes - $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 16)) { // 3 bytes - $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 21)) { // 4 bytes - $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 26)) { // 5 bytes - $output .= chr(248 + ($v >> 24)) . chr(128 + (($v >> 18) & 63)) - . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) - . chr(128 + ($v & 63)); - } elseif ($v < (1 << 31)) { // 6 bytes - $output .= chr(252 + ($v >> 30)) . chr(128 + (($v >> 24) & 63)) - . chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } else { - $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); - return false; - } - } - return $output; - } - - /** - * Convert UCS-4 array into UCS-4 string - * - * @access private - */ - function _ucs4_to_ucs4_string($input) - { - $output = ''; - // Take array values and split output to 4 bytes per value - // The bit mask is 255, which reads &11111111 - foreach ($input as $v) { - $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); - } - return $output; - } - - /** - * Convert UCS-4 strin into UCS-4 garray - * - * @access private - */ - function _ucs4_string_to_ucs4($input) - { - $output = array(); - $inp_len = strlen($input); - // Input length must be dividable by 4 - if ($inp_len % 4) { - $this->_error('Input UCS4 string is broken'); - return false; - } - // Empty input - return empty output - if (!$inp_len) return $output; - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { - // Increment output position every 4 input bytes - if (!($i % 4)) { - $out_len++; - $output[$out_len] = 0; - } - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); - } - return $output; - } -} - -/** -* Adapter class for aligning the API of idna_convert with that of Net_IDNA -* @author Matthias Sommerfeld -*/ -class Net_IDNA_php4 extends idna_convert -{ - /** - * Sets a new option value. Available options and values: - * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, - * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] - * [overlong - Unicode does not allow unnecessarily long encodings of chars, - * to allow this, set this parameter to true, else to false; - * default is false.] - * [strict - true: strict mode, good for registration purposes - Causes errors - * on failures; false: loose mode, ideal for "wildlife" applications - * by silently ignoring errors and returning the original input instead - * - * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) - * @param string Value to use (if parameter 1 is a string) - * @return boolean true on success, false otherwise - * @access public - */ - function setParams($option, $param = false) - { - return $this->IC->set_parameters($option, $param); - } -} - -?> \ No newline at end of file diff --git a/library/simplepie/idn/npdata.ser b/library/simplepie/idn/npdata.ser deleted file mode 100644 index d7ce6d03f2..0000000000 --- a/library/simplepie/idn/npdata.ser +++ /dev/null @@ -1 +0,0 @@ -a:6:{s:11:"map_nothing";a:27:{i:0;i:173;i:1;i:847;i:2;i:6150;i:3;i:6155;i:4;i:6156;i:5;i:6157;i:6;i:8203;i:7;i:8204;i:8;i:8205;i:9;i:8288;i:10;i:65024;i:11;i:65025;i:12;i:65026;i:13;i:65027;i:14;i:65028;i:15;i:65029;i:16;i:65030;i:17;i:65031;i:18;i:65032;i:19;i:65033;i:20;i:65034;i:21;i:65035;i:22;i:65036;i:23;i:65037;i:24;i:65038;i:25;i:65039;i:26;i:65279;}s:18:"general_prohibited";a:64:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13;i:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i:22;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:31;i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;i:41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:47;i:46;i:59;i:47;i:60;i:48;i:61;i:49;i:62;i:50;i:63;i:51;i:64;i:52;i:91;i:53;i:92;i:54;i:93;i:55;i:94;i:56;i:95;i:57;i:96;i:58;i:123;i:59;i:124;i:60;i:125;i:61;i:126;i:62;i:127;i:63;i:12290;}s:8:"prohibit";a:84:{i:0;i:160;i:1;i:5760;i:2;i:8192;i:3;i:8193;i:4;i:8194;i:5;i:8195;i:6;i:8196;i:7;i:8197;i:8;i:8198;i:9;i:8199;i:10;i:8200;i:11;i:8201;i:12;i:8202;i:13;i:8203;i:14;i:8239;i:15;i:8287;i:16;i:12288;i:17;i:1757;i:18;i:1807;i:19;i:6158;i:20;i:8204;i:21;i:8205;i:22;i:8232;i:23;i:8233;i:24;i:65279;i:25;i:65529;i:26;i:65530;i:27;i:65531;i:28;i:65532;i:29;i:65534;i:30;i:65535;i:31;i:131070;i:32;i:131071;i:33;i:196606;i:34;i:196607;i:35;i:262142;i:36;i:262143;i:37;i:327678;i:38;i:327679;i:39;i:393214;i:40;i:393215;i:41;i:458750;i:42;i:458751;i:43;i:524286;i:44;i:524287;i:45;i:589822;i:46;i:589823;i:47;i:655358;i:48;i:655359;i:49;i:720894;i:50;i:720895;i:51;i:786430;i:52;i:786431;i:53;i:851966;i:54;i:851967;i:55;i:917502;i:56;i:917503;i:57;i:983038;i:58;i:983039;i:59;i:1048574;i:60;i:1048575;i:61;i:1114110;i:62;i:1114111;i:63;i:65529;i:64;i:65530;i:65;i:65531;i:66;i:65532;i:67;i:65533;i:68;i:832;i:69;i:833;i:70;i:8206;i:71;i:8207;i:72;i:8234;i:73;i:8235;i:74;i:8236;i:75;i:8237;i:76;i:8238;i:77;i:8298;i:78;i:8299;i:79;i:8300;i:80;i:8301;i:81;i:8302;i:82;i:8303;i:83;i:917505;}s:15:"prohibit_ranges";a:10:{i:0;a:2:{i:0;i:128;i:1;i:159;}i:1;a:2:{i:0;i:8288;i:1;i:8303;}i:2;a:2:{i:0;i:119155;i:1;i:119162;}i:3;a:2:{i:0;i:57344;i:1;i:63743;}i:4;a:2:{i:0;i:983040;i:1;i:1048573;}i:5;a:2:{i:0;i:1048576;i:1;i:1114109;}i:6;a:2:{i:0;i:64976;i:1;i:65007;}i:7;a:2:{i:0;i:55296;i:1;i:57343;}i:8;a:2:{i:0;i:12272;i:1;i:12283;}i:9;a:2:{i:0;i:917536;i:1;i:917631;}}s:11:"replacemaps";a:1401:{i:65;a:1:{i:0;i:97;}i:66;a:1:{i:0;i:98;}i:67;a:1:{i:0;i:99;}i:68;a:1:{i:0;i:100;}i:69;a:1:{i:0;i:101;}i:70;a:1:{i:0;i:102;}i:71;a:1:{i:0;i:103;}i:72;a:1:{i:0;i:104;}i:73;a:1:{i:0;i:105;}i:74;a:1:{i:0;i:106;}i:75;a:1:{i:0;i:107;}i:76;a:1:{i:0;i:108;}i:77;a:1:{i:0;i:109;}i:78;a:1:{i:0;i:110;}i:79;a:1:{i:0;i:111;}i:80;a:1:{i:0;i:112;}i:81;a:1:{i:0;i:113;}i:82;a:1:{i:0;i:114;}i:83;a:1:{i:0;i:115;}i:84;a:1:{i:0;i:116;}i:85;a:1:{i:0;i:117;}i:86;a:1:{i:0;i:118;}i:87;a:1:{i:0;i:119;}i:88;a:1:{i:0;i:120;}i:89;a:1:{i:0;i:121;}i:90;a:1:{i:0;i:122;}i:181;a:1:{i:0;i:956;}i:192;a:1:{i:0;i:224;}i:193;a:1:{i:0;i:225;}i:194;a:1:{i:0;i:226;}i:195;a:1:{i:0;i:227;}i:196;a:1:{i:0;i:228;}i:197;a:1:{i:0;i:229;}i:198;a:1:{i:0;i:230;}i:199;a:1:{i:0;i:231;}i:200;a:1:{i:0;i:232;}i:201;a:1:{i:0;i:233;}i:202;a:1:{i:0;i:234;}i:203;a:1:{i:0;i:235;}i:204;a:1:{i:0;i:236;}i:205;a:1:{i:0;i:237;}i:206;a:1:{i:0;i:238;}i:207;a:1:{i:0;i:239;}i:208;a:1:{i:0;i:240;}i:209;a:1:{i:0;i:241;}i:210;a:1:{i:0;i:242;}i:211;a:1:{i:0;i:243;}i:212;a:1:{i:0;i:244;}i:213;a:1:{i:0;i:245;}i:214;a:1:{i:0;i:246;}i:216;a:1:{i:0;i:248;}i:217;a:1:{i:0;i:249;}i:218;a:1:{i:0;i:250;}i:219;a:1:{i:0;i:251;}i:220;a:1:{i:0;i:252;}i:221;a:1:{i:0;i:253;}i:222;a:1:{i:0;i:254;}i:223;a:2:{i:0;i:115;i:1;i:115;}i:256;a:1:{i:0;i:257;}i:258;a:1:{i:0;i:259;}i:260;a:1:{i:0;i:261;}i:262;a:1:{i:0;i:263;}i:264;a:1:{i:0;i:265;}i:266;a:1:{i:0;i:267;}i:268;a:1:{i:0;i:269;}i:270;a:1:{i:0;i:271;}i:272;a:1:{i:0;i:273;}i:274;a:1:{i:0;i:275;}i:276;a:1:{i:0;i:277;}i:278;a:1:{i:0;i:279;}i:280;a:1:{i:0;i:281;}i:282;a:1:{i:0;i:283;}i:284;a:1:{i:0;i:285;}i:286;a:1:{i:0;i:287;}i:288;a:1:{i:0;i:289;}i:290;a:1:{i:0;i:291;}i:292;a:1:{i:0;i:293;}i:294;a:1:{i:0;i:295;}i:296;a:1:{i:0;i:297;}i:298;a:1:{i:0;i:299;}i:300;a:1:{i:0;i:301;}i:302;a:1:{i:0;i:303;}i:304;a:2:{i:0;i:105;i:1;i:775;}i:306;a:1:{i:0;i:307;}i:308;a:1:{i:0;i:309;}i:310;a:1:{i:0;i:311;}i:313;a:1:{i:0;i:314;}i:315;a:1:{i:0;i:316;}i:317;a:1:{i:0;i:318;}i:319;a:1:{i:0;i:320;}i:321;a:1:{i:0;i:322;}i:323;a:1:{i:0;i:324;}i:325;a:1:{i:0;i:326;}i:327;a:1:{i:0;i:328;}i:329;a:2:{i:0;i:700;i:1;i:110;}i:330;a:1:{i:0;i:331;}i:332;a:1:{i:0;i:333;}i:334;a:1:{i:0;i:335;}i:336;a:1:{i:0;i:337;}i:338;a:1:{i:0;i:339;}i:340;a:1:{i:0;i:341;}i:342;a:1:{i:0;i:343;}i:344;a:1:{i:0;i:345;}i:346;a:1:{i:0;i:347;}i:348;a:1:{i:0;i:349;}i:350;a:1:{i:0;i:351;}i:352;a:1:{i:0;i:353;}i:354;a:1:{i:0;i:355;}i:356;a:1:{i:0;i:357;}i:358;a:1:{i:0;i:359;}i:360;a:1:{i:0;i:361;}i:362;a:1:{i:0;i:363;}i:364;a:1:{i:0;i:365;}i:366;a:1:{i:0;i:367;}i:368;a:1:{i:0;i:369;}i:370;a:1:{i:0;i:371;}i:372;a:1:{i:0;i:373;}i:374;a:1:{i:0;i:375;}i:376;a:1:{i:0;i:255;}i:377;a:1:{i:0;i:378;}i:379;a:1:{i:0;i:380;}i:381;a:1:{i:0;i:382;}i:383;a:1:{i:0;i:115;}i:385;a:1:{i:0;i:595;}i:386;a:1:{i:0;i:387;}i:388;a:1:{i:0;i:389;}i:390;a:1:{i:0;i:596;}i:391;a:1:{i:0;i:392;}i:393;a:1:{i:0;i:598;}i:394;a:1:{i:0;i:599;}i:395;a:1:{i:0;i:396;}i:398;a:1:{i:0;i:477;}i:399;a:1:{i:0;i:601;}i:400;a:1:{i:0;i:603;}i:401;a:1:{i:0;i:402;}i:403;a:1:{i:0;i:608;}i:404;a:1:{i:0;i:611;}i:406;a:1:{i:0;i:617;}i:407;a:1:{i:0;i:616;}i:408;a:1:{i:0;i:409;}i:412;a:1:{i:0;i:623;}i:413;a:1:{i:0;i:626;}i:415;a:1:{i:0;i:629;}i:416;a:1:{i:0;i:417;}i:418;a:1:{i:0;i:419;}i:420;a:1:{i:0;i:421;}i:422;a:1:{i:0;i:640;}i:423;a:1:{i:0;i:424;}i:425;a:1:{i:0;i:643;}i:428;a:1:{i:0;i:429;}i:430;a:1:{i:0;i:648;}i:431;a:1:{i:0;i:432;}i:433;a:1:{i:0;i:650;}i:434;a:1:{i:0;i:651;}i:435;a:1:{i:0;i:436;}i:437;a:1:{i:0;i:438;}i:439;a:1:{i:0;i:658;}i:440;a:1:{i:0;i:441;}i:444;a:1:{i:0;i:445;}i:452;a:1:{i:0;i:454;}i:453;a:1:{i:0;i:454;}i:455;a:1:{i:0;i:457;}i:456;a:1:{i:0;i:457;}i:458;a:1:{i:0;i:460;}i:459;a:1:{i:0;i:460;}i:461;a:1:{i:0;i:462;}i:463;a:1:{i:0;i:464;}i:465;a:1:{i:0;i:466;}i:467;a:1:{i:0;i:468;}i:469;a:1:{i:0;i:470;}i:471;a:1:{i:0;i:472;}i:473;a:1:{i:0;i:474;}i:475;a:1:{i:0;i:476;}i:478;a:1:{i:0;i:479;}i:480;a:1:{i:0;i:481;}i:482;a:1:{i:0;i:483;}i:484;a:1:{i:0;i:485;}i:486;a:1:{i:0;i:487;}i:488;a:1:{i:0;i:489;}i:490;a:1:{i:0;i:491;}i:492;a:1:{i:0;i:493;}i:494;a:1:{i:0;i:495;}i:496;a:2:{i:0;i:106;i:1;i:780;}i:497;a:1:{i:0;i:499;}i:498;a:1:{i:0;i:499;}i:500;a:1:{i:0;i:501;}i:502;a:1:{i:0;i:405;}i:503;a:1:{i:0;i:447;}i:504;a:1:{i:0;i:505;}i:506;a:1:{i:0;i:507;}i:508;a:1:{i:0;i:509;}i:510;a:1:{i:0;i:511;}i:512;a:1:{i:0;i:513;}i:514;a:1:{i:0;i:515;}i:516;a:1:{i:0;i:517;}i:518;a:1:{i:0;i:519;}i:520;a:1:{i:0;i:521;}i:522;a:1:{i:0;i:523;}i:524;a:1:{i:0;i:525;}i:526;a:1:{i:0;i:527;}i:528;a:1:{i:0;i:529;}i:530;a:1:{i:0;i:531;}i:532;a:1:{i:0;i:533;}i:534;a:1:{i:0;i:535;}i:536;a:1:{i:0;i:537;}i:538;a:1:{i:0;i:539;}i:540;a:1:{i:0;i:541;}i:542;a:1:{i:0;i:543;}i:544;a:1:{i:0;i:414;}i:546;a:1:{i:0;i:547;}i:548;a:1:{i:0;i:549;}i:550;a:1:{i:0;i:551;}i:552;a:1:{i:0;i:553;}i:554;a:1:{i:0;i:555;}i:556;a:1:{i:0;i:557;}i:558;a:1:{i:0;i:559;}i:560;a:1:{i:0;i:561;}i:562;a:1:{i:0;i:563;}i:837;a:1:{i:0;i:953;}i:890;a:2:{i:0;i:32;i:1;i:953;}i:902;a:1:{i:0;i:940;}i:904;a:1:{i:0;i:941;}i:905;a:1:{i:0;i:942;}i:906;a:1:{i:0;i:943;}i:908;a:1:{i:0;i:972;}i:910;a:1:{i:0;i:973;}i:911;a:1:{i:0;i:974;}i:912;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:913;a:1:{i:0;i:945;}i:914;a:1:{i:0;i:946;}i:915;a:1:{i:0;i:947;}i:916;a:1:{i:0;i:948;}i:917;a:1:{i:0;i:949;}i:918;a:1:{i:0;i:950;}i:919;a:1:{i:0;i:951;}i:920;a:1:{i:0;i:952;}i:921;a:1:{i:0;i:953;}i:922;a:1:{i:0;i:954;}i:923;a:1:{i:0;i:955;}i:924;a:1:{i:0;i:956;}i:925;a:1:{i:0;i:957;}i:926;a:1:{i:0;i:958;}i:927;a:1:{i:0;i:959;}i:928;a:1:{i:0;i:960;}i:929;a:1:{i:0;i:961;}i:931;a:1:{i:0;i:963;}i:932;a:1:{i:0;i:964;}i:933;a:1:{i:0;i:965;}i:934;a:1:{i:0;i:966;}i:935;a:1:{i:0;i:967;}i:936;a:1:{i:0;i:968;}i:937;a:1:{i:0;i:969;}i:938;a:1:{i:0;i:970;}i:939;a:1:{i:0;i:971;}i:944;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:962;a:1:{i:0;i:963;}i:976;a:1:{i:0;i:946;}i:977;a:1:{i:0;i:952;}i:978;a:1:{i:0;i:965;}i:979;a:1:{i:0;i:973;}i:980;a:1:{i:0;i:971;}i:981;a:1:{i:0;i:966;}i:982;a:1:{i:0;i:960;}i:984;a:1:{i:0;i:985;}i:986;a:1:{i:0;i:987;}i:988;a:1:{i:0;i:989;}i:990;a:1:{i:0;i:991;}i:992;a:1:{i:0;i:993;}i:994;a:1:{i:0;i:995;}i:996;a:1:{i:0;i:997;}i:998;a:1:{i:0;i:999;}i:1000;a:1:{i:0;i:1001;}i:1002;a:1:{i:0;i:1003;}i:1004;a:1:{i:0;i:1005;}i:1006;a:1:{i:0;i:1007;}i:1008;a:1:{i:0;i:954;}i:1009;a:1:{i:0;i:961;}i:1010;a:1:{i:0;i:963;}i:1012;a:1:{i:0;i:952;}i:1013;a:1:{i:0;i:949;}i:1024;a:1:{i:0;i:1104;}i:1025;a:1:{i:0;i:1105;}i:1026;a:1:{i:0;i:1106;}i:1027;a:1:{i:0;i:1107;}i:1028;a:1:{i:0;i:1108;}i:1029;a:1:{i:0;i:1109;}i:1030;a:1:{i:0;i:1110;}i:1031;a:1:{i:0;i:1111;}i:1032;a:1:{i:0;i:1112;}i:1033;a:1:{i:0;i:1113;}i:1034;a:1:{i:0;i:1114;}i:1035;a:1:{i:0;i:1115;}i:1036;a:1:{i:0;i:1116;}i:1037;a:1:{i:0;i:1117;}i:1038;a:1:{i:0;i:1118;}i:1039;a:1:{i:0;i:1119;}i:1040;a:1:{i:0;i:1072;}i:1041;a:1:{i:0;i:1073;}i:1042;a:1:{i:0;i:1074;}i:1043;a:1:{i:0;i:1075;}i:1044;a:1:{i:0;i:1076;}i:1045;a:1:{i:0;i:1077;}i:1046;a:1:{i:0;i:1078;}i:1047;a:1:{i:0;i:1079;}i:1048;a:1:{i:0;i:1080;}i:1049;a:1:{i:0;i:1081;}i:1050;a:1:{i:0;i:1082;}i:1051;a:1:{i:0;i:1083;}i:1052;a:1:{i:0;i:1084;}i:1053;a:1:{i:0;i:1085;}i:1054;a:1:{i:0;i:1086;}i:1055;a:1:{i:0;i:1087;}i:1056;a:1:{i:0;i:1088;}i:1057;a:1:{i:0;i:1089;}i:1058;a:1:{i:0;i:1090;}i:1059;a:1:{i:0;i:1091;}i:1060;a:1:{i:0;i:1092;}i:1061;a:1:{i:0;i:1093;}i:1062;a:1:{i:0;i:1094;}i:1063;a:1:{i:0;i:1095;}i:1064;a:1:{i:0;i:1096;}i:1065;a:1:{i:0;i:1097;}i:1066;a:1:{i:0;i:1098;}i:1067;a:1:{i:0;i:1099;}i:1068;a:1:{i:0;i:1100;}i:1069;a:1:{i:0;i:1101;}i:1070;a:1:{i:0;i:1102;}i:1071;a:1:{i:0;i:1103;}i:1120;a:1:{i:0;i:1121;}i:1122;a:1:{i:0;i:1123;}i:1124;a:1:{i:0;i:1125;}i:1126;a:1:{i:0;i:1127;}i:1128;a:1:{i:0;i:1129;}i:1130;a:1:{i:0;i:1131;}i:1132;a:1:{i:0;i:1133;}i:1134;a:1:{i:0;i:1135;}i:1136;a:1:{i:0;i:1137;}i:1138;a:1:{i:0;i:1139;}i:1140;a:1:{i:0;i:1141;}i:1142;a:1:{i:0;i:1143;}i:1144;a:1:{i:0;i:1145;}i:1146;a:1:{i:0;i:1147;}i:1148;a:1:{i:0;i:1149;}i:1150;a:1:{i:0;i:1151;}i:1152;a:1:{i:0;i:1153;}i:1162;a:1:{i:0;i:1163;}i:1164;a:1:{i:0;i:1165;}i:1166;a:1:{i:0;i:1167;}i:1168;a:1:{i:0;i:1169;}i:1170;a:1:{i:0;i:1171;}i:1172;a:1:{i:0;i:1173;}i:1174;a:1:{i:0;i:1175;}i:1176;a:1:{i:0;i:1177;}i:1178;a:1:{i:0;i:1179;}i:1180;a:1:{i:0;i:1181;}i:1182;a:1:{i:0;i:1183;}i:1184;a:1:{i:0;i:1185;}i:1186;a:1:{i:0;i:1187;}i:1188;a:1:{i:0;i:1189;}i:1190;a:1:{i:0;i:1191;}i:1192;a:1:{i:0;i:1193;}i:1194;a:1:{i:0;i:1195;}i:1196;a:1:{i:0;i:1197;}i:1198;a:1:{i:0;i:1199;}i:1200;a:1:{i:0;i:1201;}i:1202;a:1:{i:0;i:1203;}i:1204;a:1:{i:0;i:1205;}i:1206;a:1:{i:0;i:1207;}i:1208;a:1:{i:0;i:1209;}i:1210;a:1:{i:0;i:1211;}i:1212;a:1:{i:0;i:1213;}i:1214;a:1:{i:0;i:1215;}i:1217;a:1:{i:0;i:1218;}i:1219;a:1:{i:0;i:1220;}i:1221;a:1:{i:0;i:1222;}i:1223;a:1:{i:0;i:1224;}i:1225;a:1:{i:0;i:1226;}i:1227;a:1:{i:0;i:1228;}i:1229;a:1:{i:0;i:1230;}i:1232;a:1:{i:0;i:1233;}i:1234;a:1:{i:0;i:1235;}i:1236;a:1:{i:0;i:1237;}i:1238;a:1:{i:0;i:1239;}i:1240;a:1:{i:0;i:1241;}i:1242;a:1:{i:0;i:1243;}i:1244;a:1:{i:0;i:1245;}i:1246;a:1:{i:0;i:1247;}i:1248;a:1:{i:0;i:1249;}i:1250;a:1:{i:0;i:1251;}i:1252;a:1:{i:0;i:1253;}i:1254;a:1:{i:0;i:1255;}i:1256;a:1:{i:0;i:1257;}i:1258;a:1:{i:0;i:1259;}i:1260;a:1:{i:0;i:1261;}i:1262;a:1:{i:0;i:1263;}i:1264;a:1:{i:0;i:1265;}i:1266;a:1:{i:0;i:1267;}i:1268;a:1:{i:0;i:1269;}i:1272;a:1:{i:0;i:1273;}i:1280;a:1:{i:0;i:1281;}i:1282;a:1:{i:0;i:1283;}i:1284;a:1:{i:0;i:1285;}i:1286;a:1:{i:0;i:1287;}i:1288;a:1:{i:0;i:1289;}i:1290;a:1:{i:0;i:1291;}i:1292;a:1:{i:0;i:1293;}i:1294;a:1:{i:0;i:1295;}i:1329;a:1:{i:0;i:1377;}i:1330;a:1:{i:0;i:1378;}i:1331;a:1:{i:0;i:1379;}i:1332;a:1:{i:0;i:1380;}i:1333;a:1:{i:0;i:1381;}i:1334;a:1:{i:0;i:1382;}i:1335;a:1:{i:0;i:1383;}i:1336;a:1:{i:0;i:1384;}i:1337;a:1:{i:0;i:1385;}i:1338;a:1:{i:0;i:1386;}i:1339;a:1:{i:0;i:1387;}i:1340;a:1:{i:0;i:1388;}i:1341;a:1:{i:0;i:1389;}i:1342;a:1:{i:0;i:1390;}i:1343;a:1:{i:0;i:1391;}i:1344;a:1:{i:0;i:1392;}i:1345;a:1:{i:0;i:1393;}i:1346;a:1:{i:0;i:1394;}i:1347;a:1:{i:0;i:1395;}i:1348;a:1:{i:0;i:1396;}i:1349;a:1:{i:0;i:1397;}i:1350;a:1:{i:0;i:1398;}i:1351;a:1:{i:0;i:1399;}i:1352;a:1:{i:0;i:1400;}i:1353;a:1:{i:0;i:1401;}i:1354;a:1:{i:0;i:1402;}i:1355;a:1:{i:0;i:1403;}i:1356;a:1:{i:0;i:1404;}i:1357;a:1:{i:0;i:1405;}i:1358;a:1:{i:0;i:1406;}i:1359;a:1:{i:0;i:1407;}i:1360;a:1:{i:0;i:1408;}i:1361;a:1:{i:0;i:1409;}i:1362;a:1:{i:0;i:1410;}i:1363;a:1:{i:0;i:1411;}i:1364;a:1:{i:0;i:1412;}i:1365;a:1:{i:0;i:1413;}i:1366;a:1:{i:0;i:1414;}i:1415;a:2:{i:0;i:1381;i:1;i:1410;}i:7680;a:1:{i:0;i:7681;}i:7682;a:1:{i:0;i:7683;}i:7684;a:1:{i:0;i:7685;}i:7686;a:1:{i:0;i:7687;}i:7688;a:1:{i:0;i:7689;}i:7690;a:1:{i:0;i:7691;}i:7692;a:1:{i:0;i:7693;}i:7694;a:1:{i:0;i:7695;}i:7696;a:1:{i:0;i:7697;}i:7698;a:1:{i:0;i:7699;}i:7700;a:1:{i:0;i:7701;}i:7702;a:1:{i:0;i:7703;}i:7704;a:1:{i:0;i:7705;}i:7706;a:1:{i:0;i:7707;}i:7708;a:1:{i:0;i:7709;}i:7710;a:1:{i:0;i:7711;}i:7712;a:1:{i:0;i:7713;}i:7714;a:1:{i:0;i:7715;}i:7716;a:1:{i:0;i:7717;}i:7718;a:1:{i:0;i:7719;}i:7720;a:1:{i:0;i:7721;}i:7722;a:1:{i:0;i:7723;}i:7724;a:1:{i:0;i:7725;}i:7726;a:1:{i:0;i:7727;}i:7728;a:1:{i:0;i:7729;}i:7730;a:1:{i:0;i:7731;}i:7732;a:1:{i:0;i:7733;}i:7734;a:1:{i:0;i:7735;}i:7736;a:1:{i:0;i:7737;}i:7738;a:1:{i:0;i:7739;}i:7740;a:1:{i:0;i:7741;}i:7742;a:1:{i:0;i:7743;}i:7744;a:1:{i:0;i:7745;}i:7746;a:1:{i:0;i:7747;}i:7748;a:1:{i:0;i:7749;}i:7750;a:1:{i:0;i:7751;}i:7752;a:1:{i:0;i:7753;}i:7754;a:1:{i:0;i:7755;}i:7756;a:1:{i:0;i:7757;}i:7758;a:1:{i:0;i:7759;}i:7760;a:1:{i:0;i:7761;}i:7762;a:1:{i:0;i:7763;}i:7764;a:1:{i:0;i:7765;}i:7766;a:1:{i:0;i:7767;}i:7768;a:1:{i:0;i:7769;}i:7770;a:1:{i:0;i:7771;}i:7772;a:1:{i:0;i:7773;}i:7774;a:1:{i:0;i:7775;}i:7776;a:1:{i:0;i:7777;}i:7778;a:1:{i:0;i:7779;}i:7780;a:1:{i:0;i:7781;}i:7782;a:1:{i:0;i:7783;}i:7784;a:1:{i:0;i:7785;}i:7786;a:1:{i:0;i:7787;}i:7788;a:1:{i:0;i:7789;}i:7790;a:1:{i:0;i:7791;}i:7792;a:1:{i:0;i:7793;}i:7794;a:1:{i:0;i:7795;}i:7796;a:1:{i:0;i:7797;}i:7798;a:1:{i:0;i:7799;}i:7800;a:1:{i:0;i:7801;}i:7802;a:1:{i:0;i:7803;}i:7804;a:1:{i:0;i:7805;}i:7806;a:1:{i:0;i:7807;}i:7808;a:1:{i:0;i:7809;}i:7810;a:1:{i:0;i:7811;}i:7812;a:1:{i:0;i:7813;}i:7814;a:1:{i:0;i:7815;}i:7816;a:1:{i:0;i:7817;}i:7818;a:1:{i:0;i:7819;}i:7820;a:1:{i:0;i:7821;}i:7822;a:1:{i:0;i:7823;}i:7824;a:1:{i:0;i:7825;}i:7826;a:1:{i:0;i:7827;}i:7828;a:1:{i:0;i:7829;}i:7830;a:2:{i:0;i:104;i:1;i:817;}i:7831;a:2:{i:0;i:116;i:1;i:776;}i:7832;a:2:{i:0;i:119;i:1;i:778;}i:7833;a:2:{i:0;i:121;i:1;i:778;}i:7834;a:2:{i:0;i:97;i:1;i:702;}i:7835;a:1:{i:0;i:7777;}i:7840;a:1:{i:0;i:7841;}i:7842;a:1:{i:0;i:7843;}i:7844;a:1:{i:0;i:7845;}i:7846;a:1:{i:0;i:7847;}i:7848;a:1:{i:0;i:7849;}i:7850;a:1:{i:0;i:7851;}i:7852;a:1:{i:0;i:7853;}i:7854;a:1:{i:0;i:7855;}i:7856;a:1:{i:0;i:7857;}i:7858;a:1:{i:0;i:7859;}i:7860;a:1:{i:0;i:7861;}i:7862;a:1:{i:0;i:7863;}i:7864;a:1:{i:0;i:7865;}i:7866;a:1:{i:0;i:7867;}i:7868;a:1:{i:0;i:7869;}i:7870;a:1:{i:0;i:7871;}i:7872;a:1:{i:0;i:7873;}i:7874;a:1:{i:0;i:7875;}i:7876;a:1:{i:0;i:7877;}i:7878;a:1:{i:0;i:7879;}i:7880;a:1:{i:0;i:7881;}i:7882;a:1:{i:0;i:7883;}i:7884;a:1:{i:0;i:7885;}i:7886;a:1:{i:0;i:7887;}i:7888;a:1:{i:0;i:7889;}i:7890;a:1:{i:0;i:7891;}i:7892;a:1:{i:0;i:7893;}i:7894;a:1:{i:0;i:7895;}i:7896;a:1:{i:0;i:7897;}i:7898;a:1:{i:0;i:7899;}i:7900;a:1:{i:0;i:7901;}i:7902;a:1:{i:0;i:7903;}i:7904;a:1:{i:0;i:7905;}i:7906;a:1:{i:0;i:7907;}i:7908;a:1:{i:0;i:7909;}i:7910;a:1:{i:0;i:7911;}i:7912;a:1:{i:0;i:7913;}i:7914;a:1:{i:0;i:7915;}i:7916;a:1:{i:0;i:7917;}i:7918;a:1:{i:0;i:7919;}i:7920;a:1:{i:0;i:7921;}i:7922;a:1:{i:0;i:7923;}i:7924;a:1:{i:0;i:7925;}i:7926;a:1:{i:0;i:7927;}i:7928;a:1:{i:0;i:7929;}i:7944;a:1:{i:0;i:7936;}i:7945;a:1:{i:0;i:7937;}i:7946;a:1:{i:0;i:7938;}i:7947;a:1:{i:0;i:7939;}i:7948;a:1:{i:0;i:7940;}i:7949;a:1:{i:0;i:7941;}i:7950;a:1:{i:0;i:7942;}i:7951;a:1:{i:0;i:7943;}i:7960;a:1:{i:0;i:7952;}i:7961;a:1:{i:0;i:7953;}i:7962;a:1:{i:0;i:7954;}i:7963;a:1:{i:0;i:7955;}i:7964;a:1:{i:0;i:7956;}i:7965;a:1:{i:0;i:7957;}i:7976;a:1:{i:0;i:7968;}i:7977;a:1:{i:0;i:7969;}i:7978;a:1:{i:0;i:7970;}i:7979;a:1:{i:0;i:7971;}i:7980;a:1:{i:0;i:7972;}i:7981;a:1:{i:0;i:7973;}i:7982;a:1:{i:0;i:7974;}i:7983;a:1:{i:0;i:7975;}i:7992;a:1:{i:0;i:7984;}i:7993;a:1:{i:0;i:7985;}i:7994;a:1:{i:0;i:7986;}i:7995;a:1:{i:0;i:7987;}i:7996;a:1:{i:0;i:7988;}i:7997;a:1:{i:0;i:7989;}i:7998;a:1:{i:0;i:7990;}i:7999;a:1:{i:0;i:7991;}i:8008;a:1:{i:0;i:8000;}i:8009;a:1:{i:0;i:8001;}i:8010;a:1:{i:0;i:8002;}i:8011;a:1:{i:0;i:8003;}i:8012;a:1:{i:0;i:8004;}i:8013;a:1:{i:0;i:8005;}i:8016;a:2:{i:0;i:965;i:1;i:787;}i:8018;a:3:{i:0;i:965;i:1;i:787;i:2;i:768;}i:8020;a:3:{i:0;i:965;i:1;i:787;i:2;i:769;}i:8022;a:3:{i:0;i:965;i:1;i:787;i:2;i:834;}i:8025;a:1:{i:0;i:8017;}i:8027;a:1:{i:0;i:8019;}i:8029;a:1:{i:0;i:8021;}i:8031;a:1:{i:0;i:8023;}i:8040;a:1:{i:0;i:8032;}i:8041;a:1:{i:0;i:8033;}i:8042;a:1:{i:0;i:8034;}i:8043;a:1:{i:0;i:8035;}i:8044;a:1:{i:0;i:8036;}i:8045;a:1:{i:0;i:8037;}i:8046;a:1:{i:0;i:8038;}i:8047;a:1:{i:0;i:8039;}i:8064;a:2:{i:0;i:7936;i:1;i:953;}i:8065;a:2:{i:0;i:7937;i:1;i:953;}i:8066;a:2:{i:0;i:7938;i:1;i:953;}i:8067;a:2:{i:0;i:7939;i:1;i:953;}i:8068;a:2:{i:0;i:7940;i:1;i:953;}i:8069;a:2:{i:0;i:7941;i:1;i:953;}i:8070;a:2:{i:0;i:7942;i:1;i:953;}i:8071;a:2:{i:0;i:7943;i:1;i:953;}i:8072;a:2:{i:0;i:7936;i:1;i:953;}i:8073;a:2:{i:0;i:7937;i:1;i:953;}i:8074;a:2:{i:0;i:7938;i:1;i:953;}i:8075;a:2:{i:0;i:7939;i:1;i:953;}i:8076;a:2:{i:0;i:7940;i:1;i:953;}i:8077;a:2:{i:0;i:7941;i:1;i:953;}i:8078;a:2:{i:0;i:7942;i:1;i:953;}i:8079;a:2:{i:0;i:7943;i:1;i:953;}i:8080;a:2:{i:0;i:7968;i:1;i:953;}i:8081;a:2:{i:0;i:7969;i:1;i:953;}i:8082;a:2:{i:0;i:7970;i:1;i:953;}i:8083;a:2:{i:0;i:7971;i:1;i:953;}i:8084;a:2:{i:0;i:7972;i:1;i:953;}i:8085;a:2:{i:0;i:7973;i:1;i:953;}i:8086;a:2:{i:0;i:7974;i:1;i:953;}i:8087;a:2:{i:0;i:7975;i:1;i:953;}i:8088;a:2:{i:0;i:7968;i:1;i:953;}i:8089;a:2:{i:0;i:7969;i:1;i:953;}i:8090;a:2:{i:0;i:7970;i:1;i:953;}i:8091;a:2:{i:0;i:7971;i:1;i:953;}i:8092;a:2:{i:0;i:7972;i:1;i:953;}i:8093;a:2:{i:0;i:7973;i:1;i:953;}i:8094;a:2:{i:0;i:7974;i:1;i:953;}i:8095;a:2:{i:0;i:7975;i:1;i:953;}i:8096;a:2:{i:0;i:8032;i:1;i:953;}i:8097;a:2:{i:0;i:8033;i:1;i:953;}i:8098;a:2:{i:0;i:8034;i:1;i:953;}i:8099;a:2:{i:0;i:8035;i:1;i:953;}i:8100;a:2:{i:0;i:8036;i:1;i:953;}i:8101;a:2:{i:0;i:8037;i:1;i:953;}i:8102;a:2:{i:0;i:8038;i:1;i:953;}i:8103;a:2:{i:0;i:8039;i:1;i:953;}i:8104;a:2:{i:0;i:8032;i:1;i:953;}i:8105;a:2:{i:0;i:8033;i:1;i:953;}i:8106;a:2:{i:0;i:8034;i:1;i:953;}i:8107;a:2:{i:0;i:8035;i:1;i:953;}i:8108;a:2:{i:0;i:8036;i:1;i:953;}i:8109;a:2:{i:0;i:8037;i:1;i:953;}i:8110;a:2:{i:0;i:8038;i:1;i:953;}i:8111;a:2:{i:0;i:8039;i:1;i:953;}i:8114;a:2:{i:0;i:8048;i:1;i:953;}i:8115;a:2:{i:0;i:945;i:1;i:953;}i:8116;a:2:{i:0;i:940;i:1;i:953;}i:8118;a:2:{i:0;i:945;i:1;i:834;}i:8119;a:3:{i:0;i:945;i:1;i:834;i:2;i:953;}i:8120;a:1:{i:0;i:8112;}i:8121;a:1:{i:0;i:8113;}i:8122;a:1:{i:0;i:8048;}i:8123;a:1:{i:0;i:8049;}i:8124;a:2:{i:0;i:945;i:1;i:953;}i:8126;a:1:{i:0;i:953;}i:8130;a:2:{i:0;i:8052;i:1;i:953;}i:8131;a:2:{i:0;i:951;i:1;i:953;}i:8132;a:2:{i:0;i:942;i:1;i:953;}i:8134;a:2:{i:0;i:951;i:1;i:834;}i:8135;a:3:{i:0;i:951;i:1;i:834;i:2;i:953;}i:8136;a:1:{i:0;i:8050;}i:8137;a:1:{i:0;i:8051;}i:8138;a:1:{i:0;i:8052;}i:8139;a:1:{i:0;i:8053;}i:8140;a:2:{i:0;i:951;i:1;i:953;}i:8146;a:3:{i:0;i:953;i:1;i:776;i:2;i:768;}i:8147;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:8150;a:2:{i:0;i:953;i:1;i:834;}i:8151;a:3:{i:0;i:953;i:1;i:776;i:2;i:834;}i:8152;a:1:{i:0;i:8144;}i:8153;a:1:{i:0;i:8145;}i:8154;a:1:{i:0;i:8054;}i:8155;a:1:{i:0;i:8055;}i:8162;a:3:{i:0;i:965;i:1;i:776;i:2;i:768;}i:8163;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:8164;a:2:{i:0;i:961;i:1;i:787;}i:8166;a:2:{i:0;i:965;i:1;i:834;}i:8167;a:3:{i:0;i:965;i:1;i:776;i:2;i:834;}i:8168;a:1:{i:0;i:8160;}i:8169;a:1:{i:0;i:8161;}i:8170;a:1:{i:0;i:8058;}i:8171;a:1:{i:0;i:8059;}i:8172;a:1:{i:0;i:8165;}i:8178;a:2:{i:0;i:8060;i:1;i:953;}i:8179;a:2:{i:0;i:969;i:1;i:953;}i:8180;a:2:{i:0;i:974;i:1;i:953;}i:8182;a:2:{i:0;i:969;i:1;i:834;}i:8183;a:3:{i:0;i:969;i:1;i:834;i:2;i:953;}i:8184;a:1:{i:0;i:8056;}i:8185;a:1:{i:0;i:8057;}i:8186;a:1:{i:0;i:8060;}i:8187;a:1:{i:0;i:8061;}i:8188;a:2:{i:0;i:969;i:1;i:953;}i:8360;a:2:{i:0;i:114;i:1;i:115;}i:8450;a:1:{i:0;i:99;}i:8451;a:2:{i:0;i:176;i:1;i:99;}i:8455;a:1:{i:0;i:603;}i:8457;a:2:{i:0;i:176;i:1;i:102;}i:8459;a:1:{i:0;i:104;}i:8460;a:1:{i:0;i:104;}i:8461;a:1:{i:0;i:104;}i:8464;a:1:{i:0;i:105;}i:8465;a:1:{i:0;i:105;}i:8466;a:1:{i:0;i:108;}i:8469;a:1:{i:0;i:110;}i:8470;a:2:{i:0;i:110;i:1;i:111;}i:8473;a:1:{i:0;i:112;}i:8474;a:1:{i:0;i:113;}i:8475;a:1:{i:0;i:114;}i:8476;a:1:{i:0;i:114;}i:8477;a:1:{i:0;i:114;}i:8480;a:2:{i:0;i:115;i:1;i:109;}i:8481;a:3:{i:0;i:116;i:1;i:101;i:2;i:108;}i:8482;a:2:{i:0;i:116;i:1;i:109;}i:8484;a:1:{i:0;i:122;}i:8486;a:1:{i:0;i:969;}i:8488;a:1:{i:0;i:122;}i:8490;a:1:{i:0;i:107;}i:8491;a:1:{i:0;i:229;}i:8492;a:1:{i:0;i:98;}i:8493;a:1:{i:0;i:99;}i:8496;a:1:{i:0;i:101;}i:8497;a:1:{i:0;i:102;}i:8499;a:1:{i:0;i:109;}i:8510;a:1:{i:0;i:947;}i:8511;a:1:{i:0;i:960;}i:8517;a:1:{i:0;i:100;}i:8544;a:1:{i:0;i:8560;}i:8545;a:1:{i:0;i:8561;}i:8546;a:1:{i:0;i:8562;}i:8547;a:1:{i:0;i:8563;}i:8548;a:1:{i:0;i:8564;}i:8549;a:1:{i:0;i:8565;}i:8550;a:1:{i:0;i:8566;}i:8551;a:1:{i:0;i:8567;}i:8552;a:1:{i:0;i:8568;}i:8553;a:1:{i:0;i:8569;}i:8554;a:1:{i:0;i:8570;}i:8555;a:1:{i:0;i:8571;}i:8556;a:1:{i:0;i:8572;}i:8557;a:1:{i:0;i:8573;}i:8558;a:1:{i:0;i:8574;}i:8559;a:1:{i:0;i:8575;}i:9398;a:1:{i:0;i:9424;}i:9399;a:1:{i:0;i:9425;}i:9400;a:1:{i:0;i:9426;}i:9401;a:1:{i:0;i:9427;}i:9402;a:1:{i:0;i:9428;}i:9403;a:1:{i:0;i:9429;}i:9404;a:1:{i:0;i:9430;}i:9405;a:1:{i:0;i:9431;}i:9406;a:1:{i:0;i:9432;}i:9407;a:1:{i:0;i:9433;}i:9408;a:1:{i:0;i:9434;}i:9409;a:1:{i:0;i:9435;}i:9410;a:1:{i:0;i:9436;}i:9411;a:1:{i:0;i:9437;}i:9412;a:1:{i:0;i:9438;}i:9413;a:1:{i:0;i:9439;}i:9414;a:1:{i:0;i:9440;}i:9415;a:1:{i:0;i:9441;}i:9416;a:1:{i:0;i:9442;}i:9417;a:1:{i:0;i:9443;}i:9418;a:1:{i:0;i:9444;}i:9419;a:1:{i:0;i:9445;}i:9420;a:1:{i:0;i:9446;}i:9421;a:1:{i:0;i:9447;}i:9422;a:1:{i:0;i:9448;}i:9423;a:1:{i:0;i:9449;}i:13169;a:3:{i:0;i:104;i:1;i:112;i:2;i:97;}i:13171;a:2:{i:0;i:97;i:1;i:117;}i:13173;a:2:{i:0;i:111;i:1;i:118;}i:13184;a:2:{i:0;i:112;i:1;i:97;}i:13185;a:2:{i:0;i:110;i:1;i:97;}i:13186;a:2:{i:0;i:956;i:1;i:97;}i:13187;a:2:{i:0;i:109;i:1;i:97;}i:13188;a:2:{i:0;i:107;i:1;i:97;}i:13189;a:2:{i:0;i:107;i:1;i:98;}i:13190;a:2:{i:0;i:109;i:1;i:98;}i:13191;a:2:{i:0;i:103;i:1;i:98;}i:13194;a:2:{i:0;i:112;i:1;i:102;}i:13195;a:2:{i:0;i:110;i:1;i:102;}i:13196;a:2:{i:0;i:956;i:1;i:102;}i:13200;a:2:{i:0;i:104;i:1;i:122;}i:13201;a:3:{i:0;i:107;i:1;i:104;i:2;i:122;}i:13202;a:3:{i:0;i:109;i:1;i:104;i:2;i:122;}i:13203;a:3:{i:0;i:103;i:1;i:104;i:2;i:122;}i:13204;a:3:{i:0;i:116;i:1;i:104;i:2;i:122;}i:13225;a:2:{i:0;i:112;i:1;i:97;}i:13226;a:3:{i:0;i:107;i:1;i:112;i:2;i:97;}i:13227;a:3:{i:0;i:109;i:1;i:112;i:2;i:97;}i:13228;a:3:{i:0;i:103;i:1;i:112;i:2;i:97;}i:13236;a:2:{i:0;i:112;i:1;i:118;}i:13237;a:2:{i:0;i:110;i:1;i:118;}i:13238;a:2:{i:0;i:956;i:1;i:118;}i:13239;a:2:{i:0;i:109;i:1;i:118;}i:13240;a:2:{i:0;i:107;i:1;i:118;}i:13241;a:2:{i:0;i:109;i:1;i:118;}i:13242;a:2:{i:0;i:112;i:1;i:119;}i:13243;a:2:{i:0;i:110;i:1;i:119;}i:13244;a:2:{i:0;i:956;i:1;i:119;}i:13245;a:2:{i:0;i:109;i:1;i:119;}i:13246;a:2:{i:0;i:107;i:1;i:119;}i:13247;a:2:{i:0;i:109;i:1;i:119;}i:13248;a:2:{i:0;i:107;i:1;i:969;}i:13249;a:2:{i:0;i:109;i:1;i:969;}i:13251;a:2:{i:0;i:98;i:1;i:113;}i:13254;a:4:{i:0;i:99;i:1;i:8725;i:2;i:107;i:3;i:103;}i:13255;a:3:{i:0;i:99;i:1;i:111;i:2;i:46;}i:13256;a:2:{i:0;i:100;i:1;i:98;}i:13257;a:2:{i:0;i:103;i:1;i:121;}i:13259;a:2:{i:0;i:104;i:1;i:112;}i:13261;a:2:{i:0;i:107;i:1;i:107;}i:13262;a:2:{i:0;i:107;i:1;i:109;}i:13271;a:2:{i:0;i:112;i:1;i:104;}i:13273;a:3:{i:0;i:112;i:1;i:112;i:2;i:109;}i:13274;a:2:{i:0;i:112;i:1;i:114;}i:13276;a:2:{i:0;i:115;i:1;i:118;}i:13277;a:2:{i:0;i:119;i:1;i:98;}i:64256;a:2:{i:0;i:102;i:1;i:102;}i:64257;a:2:{i:0;i:102;i:1;i:105;}i:64258;a:2:{i:0;i:102;i:1;i:108;}i:64259;a:3:{i:0;i:102;i:1;i:102;i:2;i:105;}i:64260;a:3:{i:0;i:102;i:1;i:102;i:2;i:108;}i:64261;a:2:{i:0;i:115;i:1;i:116;}i:64262;a:2:{i:0;i:115;i:1;i:116;}i:64275;a:2:{i:0;i:1396;i:1;i:1398;}i:64276;a:2:{i:0;i:1396;i:1;i:1381;}i:64277;a:2:{i:0;i:1396;i:1;i:1387;}i:64278;a:2:{i:0;i:1406;i:1;i:1398;}i:64279;a:2:{i:0;i:1396;i:1;i:1389;}i:65313;a:1:{i:0;i:65345;}i:65314;a:1:{i:0;i:65346;}i:65315;a:1:{i:0;i:65347;}i:65316;a:1:{i:0;i:65348;}i:65317;a:1:{i:0;i:65349;}i:65318;a:1:{i:0;i:65350;}i:65319;a:1:{i:0;i:65351;}i:65320;a:1:{i:0;i:65352;}i:65321;a:1:{i:0;i:65353;}i:65322;a:1:{i:0;i:65354;}i:65323;a:1:{i:0;i:65355;}i:65324;a:1:{i:0;i:65356;}i:65325;a:1:{i:0;i:65357;}i:65326;a:1:{i:0;i:65358;}i:65327;a:1:{i:0;i:65359;}i:65328;a:1:{i:0;i:65360;}i:65329;a:1:{i:0;i:65361;}i:65330;a:1:{i:0;i:65362;}i:65331;a:1:{i:0;i:65363;}i:65332;a:1:{i:0;i:65364;}i:65333;a:1:{i:0;i:65365;}i:65334;a:1:{i:0;i:65366;}i:65335;a:1:{i:0;i:65367;}i:65336;a:1:{i:0;i:65368;}i:65337;a:1:{i:0;i:65369;}i:65338;a:1:{i:0;i:65370;}i:66560;a:1:{i:0;i:66600;}i:66561;a:1:{i:0;i:66601;}i:66562;a:1:{i:0;i:66602;}i:66563;a:1:{i:0;i:66603;}i:66564;a:1:{i:0;i:66604;}i:66565;a:1:{i:0;i:66605;}i:66566;a:1:{i:0;i:66606;}i:66567;a:1:{i:0;i:66607;}i:66568;a:1:{i:0;i:66608;}i:66569;a:1:{i:0;i:66609;}i:66570;a:1:{i:0;i:66610;}i:66571;a:1:{i:0;i:66611;}i:66572;a:1:{i:0;i:66612;}i:66573;a:1:{i:0;i:66613;}i:66574;a:1:{i:0;i:66614;}i:66575;a:1:{i:0;i:66615;}i:66576;a:1:{i:0;i:66616;}i:66577;a:1:{i:0;i:66617;}i:66578;a:1:{i:0;i:66618;}i:66579;a:1:{i:0;i:66619;}i:66580;a:1:{i:0;i:66620;}i:66581;a:1:{i:0;i:66621;}i:66582;a:1:{i:0;i:66622;}i:66583;a:1:{i:0;i:66623;}i:66584;a:1:{i:0;i:66624;}i:66585;a:1:{i:0;i:66625;}i:66586;a:1:{i:0;i:66626;}i:66587;a:1:{i:0;i:66627;}i:66588;a:1:{i:0;i:66628;}i:66589;a:1:{i:0;i:66629;}i:66590;a:1:{i:0;i:66630;}i:66591;a:1:{i:0;i:66631;}i:66592;a:1:{i:0;i:66632;}i:66593;a:1:{i:0;i:66633;}i:66594;a:1:{i:0;i:66634;}i:66595;a:1:{i:0;i:66635;}i:66596;a:1:{i:0;i:66636;}i:66597;a:1:{i:0;i:66637;}i:119808;a:1:{i:0;i:97;}i:119809;a:1:{i:0;i:98;}i:119810;a:1:{i:0;i:99;}i:119811;a:1:{i:0;i:100;}i:119812;a:1:{i:0;i:101;}i:119813;a:1:{i:0;i:102;}i:119814;a:1:{i:0;i:103;}i:119815;a:1:{i:0;i:104;}i:119816;a:1:{i:0;i:105;}i:119817;a:1:{i:0;i:106;}i:119818;a:1:{i:0;i:107;}i:119819;a:1:{i:0;i:108;}i:119820;a:1:{i:0;i:109;}i:119821;a:1:{i:0;i:110;}i:119822;a:1:{i:0;i:111;}i:119823;a:1:{i:0;i:112;}i:119824;a:1:{i:0;i:113;}i:119825;a:1:{i:0;i:114;}i:119826;a:1:{i:0;i:115;}i:119827;a:1:{i:0;i:116;}i:119828;a:1:{i:0;i:117;}i:119829;a:1:{i:0;i:118;}i:119830;a:1:{i:0;i:119;}i:119831;a:1:{i:0;i:120;}i:119832;a:1:{i:0;i:121;}i:119833;a:1:{i:0;i:122;}i:119860;a:1:{i:0;i:97;}i:119861;a:1:{i:0;i:98;}i:119862;a:1:{i:0;i:99;}i:119863;a:1:{i:0;i:100;}i:119864;a:1:{i:0;i:101;}i:119865;a:1:{i:0;i:102;}i:119866;a:1:{i:0;i:103;}i:119867;a:1:{i:0;i:104;}i:119868;a:1:{i:0;i:105;}i:119869;a:1:{i:0;i:106;}i:119870;a:1:{i:0;i:107;}i:119871;a:1:{i:0;i:108;}i:119872;a:1:{i:0;i:109;}i:119873;a:1:{i:0;i:110;}i:119874;a:1:{i:0;i:111;}i:119875;a:1:{i:0;i:112;}i:119876;a:1:{i:0;i:113;}i:119877;a:1:{i:0;i:114;}i:119878;a:1:{i:0;i:115;}i:119879;a:1:{i:0;i:116;}i:119880;a:1:{i:0;i:117;}i:119881;a:1:{i:0;i:118;}i:119882;a:1:{i:0;i:119;}i:119883;a:1:{i:0;i:120;}i:119884;a:1:{i:0;i:121;}i:119885;a:1:{i:0;i:122;}i:119912;a:1:{i:0;i:97;}i:119913;a:1:{i:0;i:98;}i:119914;a:1:{i:0;i:99;}i:119915;a:1:{i:0;i:100;}i:119916;a:1:{i:0;i:101;}i:119917;a:1:{i:0;i:102;}i:119918;a:1:{i:0;i:103;}i:119919;a:1:{i:0;i:104;}i:119920;a:1:{i:0;i:105;}i:119921;a:1:{i:0;i:106;}i:119922;a:1:{i:0;i:107;}i:119923;a:1:{i:0;i:108;}i:119924;a:1:{i:0;i:109;}i:119925;a:1:{i:0;i:110;}i:119926;a:1:{i:0;i:111;}i:119927;a:1:{i:0;i:112;}i:119928;a:1:{i:0;i:113;}i:119929;a:1:{i:0;i:114;}i:119930;a:1:{i:0;i:115;}i:119931;a:1:{i:0;i:116;}i:119932;a:1:{i:0;i:117;}i:119933;a:1:{i:0;i:118;}i:119934;a:1:{i:0;i:119;}i:119935;a:1:{i:0;i:120;}i:119936;a:1:{i:0;i:121;}i:119937;a:1:{i:0;i:122;}i:119964;a:1:{i:0;i:97;}i:119966;a:1:{i:0;i:99;}i:119967;a:1:{i:0;i:100;}i:119970;a:1:{i:0;i:103;}i:119973;a:1:{i:0;i:106;}i:119974;a:1:{i:0;i:107;}i:119977;a:1:{i:0;i:110;}i:119978;a:1:{i:0;i:111;}i:119979;a:1:{i:0;i:112;}i:119980;a:1:{i:0;i:113;}i:119982;a:1:{i:0;i:115;}i:119983;a:1:{i:0;i:116;}i:119984;a:1:{i:0;i:117;}i:119985;a:1:{i:0;i:118;}i:119986;a:1:{i:0;i:119;}i:119987;a:1:{i:0;i:120;}i:119988;a:1:{i:0;i:121;}i:119989;a:1:{i:0;i:122;}i:120016;a:1:{i:0;i:97;}i:120017;a:1:{i:0;i:98;}i:120018;a:1:{i:0;i:99;}i:120019;a:1:{i:0;i:100;}i:120020;a:1:{i:0;i:101;}i:120021;a:1:{i:0;i:102;}i:120022;a:1:{i:0;i:103;}i:120023;a:1:{i:0;i:104;}i:120024;a:1:{i:0;i:105;}i:120025;a:1:{i:0;i:106;}i:120026;a:1:{i:0;i:107;}i:120027;a:1:{i:0;i:108;}i:120028;a:1:{i:0;i:109;}i:120029;a:1:{i:0;i:110;}i:120030;a:1:{i:0;i:111;}i:120031;a:1:{i:0;i:112;}i:120032;a:1:{i:0;i:113;}i:120033;a:1:{i:0;i:114;}i:120034;a:1:{i:0;i:115;}i:120035;a:1:{i:0;i:116;}i:120036;a:1:{i:0;i:117;}i:120037;a:1:{i:0;i:118;}i:120038;a:1:{i:0;i:119;}i:120039;a:1:{i:0;i:120;}i:120040;a:1:{i:0;i:121;}i:120041;a:1:{i:0;i:122;}i:120068;a:1:{i:0;i:97;}i:120069;a:1:{i:0;i:98;}i:120071;a:1:{i:0;i:100;}i:120072;a:1:{i:0;i:101;}i:120073;a:1:{i:0;i:102;}i:120074;a:1:{i:0;i:103;}i:120077;a:1:{i:0;i:106;}i:120078;a:1:{i:0;i:107;}i:120079;a:1:{i:0;i:108;}i:120080;a:1:{i:0;i:109;}i:120081;a:1:{i:0;i:110;}i:120082;a:1:{i:0;i:111;}i:120083;a:1:{i:0;i:112;}i:120084;a:1:{i:0;i:113;}i:120086;a:1:{i:0;i:115;}i:120087;a:1:{i:0;i:116;}i:120088;a:1:{i:0;i:117;}i:120089;a:1:{i:0;i:118;}i:120090;a:1:{i:0;i:119;}i:120091;a:1:{i:0;i:120;}i:120092;a:1:{i:0;i:121;}i:120120;a:1:{i:0;i:97;}i:120121;a:1:{i:0;i:98;}i:120123;a:1:{i:0;i:100;}i:120124;a:1:{i:0;i:101;}i:120125;a:1:{i:0;i:102;}i:120126;a:1:{i:0;i:103;}i:120128;a:1:{i:0;i:105;}i:120129;a:1:{i:0;i:106;}i:120130;a:1:{i:0;i:107;}i:120131;a:1:{i:0;i:108;}i:120132;a:1:{i:0;i:109;}i:120134;a:1:{i:0;i:111;}i:120138;a:1:{i:0;i:115;}i:120139;a:1:{i:0;i:116;}i:120140;a:1:{i:0;i:117;}i:120141;a:1:{i:0;i:118;}i:120142;a:1:{i:0;i:119;}i:120143;a:1:{i:0;i:120;}i:120144;a:1:{i:0;i:121;}i:120172;a:1:{i:0;i:97;}i:120173;a:1:{i:0;i:98;}i:120174;a:1:{i:0;i:99;}i:120175;a:1:{i:0;i:100;}i:120176;a:1:{i:0;i:101;}i:120177;a:1:{i:0;i:102;}i:120178;a:1:{i:0;i:103;}i:120179;a:1:{i:0;i:104;}i:120180;a:1:{i:0;i:105;}i:120181;a:1:{i:0;i:106;}i:120182;a:1:{i:0;i:107;}i:120183;a:1:{i:0;i:108;}i:120184;a:1:{i:0;i:109;}i:120185;a:1:{i:0;i:110;}i:120186;a:1:{i:0;i:111;}i:120187;a:1:{i:0;i:112;}i:120188;a:1:{i:0;i:113;}i:120189;a:1:{i:0;i:114;}i:120190;a:1:{i:0;i:115;}i:120191;a:1:{i:0;i:116;}i:120192;a:1:{i:0;i:117;}i:120193;a:1:{i:0;i:118;}i:120194;a:1:{i:0;i:119;}i:120195;a:1:{i:0;i:120;}i:120196;a:1:{i:0;i:121;}i:120197;a:1:{i:0;i:122;}i:120224;a:1:{i:0;i:97;}i:120225;a:1:{i:0;i:98;}i:120226;a:1:{i:0;i:99;}i:120227;a:1:{i:0;i:100;}i:120228;a:1:{i:0;i:101;}i:120229;a:1:{i:0;i:102;}i:120230;a:1:{i:0;i:103;}i:120231;a:1:{i:0;i:104;}i:120232;a:1:{i:0;i:105;}i:120233;a:1:{i:0;i:106;}i:120234;a:1:{i:0;i:107;}i:120235;a:1:{i:0;i:108;}i:120236;a:1:{i:0;i:109;}i:120237;a:1:{i:0;i:110;}i:120238;a:1:{i:0;i:111;}i:120239;a:1:{i:0;i:112;}i:120240;a:1:{i:0;i:113;}i:120241;a:1:{i:0;i:114;}i:120242;a:1:{i:0;i:115;}i:120243;a:1:{i:0;i:116;}i:120244;a:1:{i:0;i:117;}i:120245;a:1:{i:0;i:118;}i:120246;a:1:{i:0;i:119;}i:120247;a:1:{i:0;i:120;}i:120248;a:1:{i:0;i:121;}i:120249;a:1:{i:0;i:122;}i:120276;a:1:{i:0;i:97;}i:120277;a:1:{i:0;i:98;}i:120278;a:1:{i:0;i:99;}i:120279;a:1:{i:0;i:100;}i:120280;a:1:{i:0;i:101;}i:120281;a:1:{i:0;i:102;}i:120282;a:1:{i:0;i:103;}i:120283;a:1:{i:0;i:104;}i:120284;a:1:{i:0;i:105;}i:120285;a:1:{i:0;i:106;}i:120286;a:1:{i:0;i:107;}i:120287;a:1:{i:0;i:108;}i:120288;a:1:{i:0;i:109;}i:120289;a:1:{i:0;i:110;}i:120290;a:1:{i:0;i:111;}i:120291;a:1:{i:0;i:112;}i:120292;a:1:{i:0;i:113;}i:120293;a:1:{i:0;i:114;}i:120294;a:1:{i:0;i:115;}i:120295;a:1:{i:0;i:116;}i:120296;a:1:{i:0;i:117;}i:120297;a:1:{i:0;i:118;}i:120298;a:1:{i:0;i:119;}i:120299;a:1:{i:0;i:120;}i:120300;a:1:{i:0;i:121;}i:120301;a:1:{i:0;i:122;}i:120328;a:1:{i:0;i:97;}i:120329;a:1:{i:0;i:98;}i:120330;a:1:{i:0;i:99;}i:120331;a:1:{i:0;i:100;}i:120332;a:1:{i:0;i:101;}i:120333;a:1:{i:0;i:102;}i:120334;a:1:{i:0;i:103;}i:120335;a:1:{i:0;i:104;}i:120336;a:1:{i:0;i:105;}i:120337;a:1:{i:0;i:106;}i:120338;a:1:{i:0;i:107;}i:120339;a:1:{i:0;i:108;}i:120340;a:1:{i:0;i:109;}i:120341;a:1:{i:0;i:110;}i:120342;a:1:{i:0;i:111;}i:120343;a:1:{i:0;i:112;}i:120344;a:1:{i:0;i:113;}i:120345;a:1:{i:0;i:114;}i:120346;a:1:{i:0;i:115;}i:120347;a:1:{i:0;i:116;}i:120348;a:1:{i:0;i:117;}i:120349;a:1:{i:0;i:118;}i:120350;a:1:{i:0;i:119;}i:120351;a:1:{i:0;i:120;}i:120352;a:1:{i:0;i:121;}i:120353;a:1:{i:0;i:122;}i:120380;a:1:{i:0;i:97;}i:120381;a:1:{i:0;i:98;}i:120382;a:1:{i:0;i:99;}i:120383;a:1:{i:0;i:100;}i:120384;a:1:{i:0;i:101;}i:120385;a:1:{i:0;i:102;}i:120386;a:1:{i:0;i:103;}i:120387;a:1:{i:0;i:104;}i:120388;a:1:{i:0;i:105;}i:120389;a:1:{i:0;i:106;}i:120390;a:1:{i:0;i:107;}i:120391;a:1:{i:0;i:108;}i:120392;a:1:{i:0;i:109;}i:120393;a:1:{i:0;i:110;}i:120394;a:1:{i:0;i:111;}i:120395;a:1:{i:0;i:112;}i:120396;a:1:{i:0;i:113;}i:120397;a:1:{i:0;i:114;}i:120398;a:1:{i:0;i:115;}i:120399;a:1:{i:0;i:116;}i:120400;a:1:{i:0;i:117;}i:120401;a:1:{i:0;i:118;}i:120402;a:1:{i:0;i:119;}i:120403;a:1:{i:0;i:120;}i:120404;a:1:{i:0;i:121;}i:120405;a:1:{i:0;i:122;}i:120432;a:1:{i:0;i:97;}i:120433;a:1:{i:0;i:98;}i:120434;a:1:{i:0;i:99;}i:120435;a:1:{i:0;i:100;}i:120436;a:1:{i:0;i:101;}i:120437;a:1:{i:0;i:102;}i:120438;a:1:{i:0;i:103;}i:120439;a:1:{i:0;i:104;}i:120440;a:1:{i:0;i:105;}i:120441;a:1:{i:0;i:106;}i:120442;a:1:{i:0;i:107;}i:120443;a:1:{i:0;i:108;}i:120444;a:1:{i:0;i:109;}i:120445;a:1:{i:0;i:110;}i:120446;a:1:{i:0;i:111;}i:120447;a:1:{i:0;i:112;}i:120448;a:1:{i:0;i:113;}i:120449;a:1:{i:0;i:114;}i:120450;a:1:{i:0;i:115;}i:120451;a:1:{i:0;i:116;}i:120452;a:1:{i:0;i:117;}i:120453;a:1:{i:0;i:118;}i:120454;a:1:{i:0;i:119;}i:120455;a:1:{i:0;i:120;}i:120456;a:1:{i:0;i:121;}i:120457;a:1:{i:0;i:122;}i:120488;a:1:{i:0;i:945;}i:120489;a:1:{i:0;i:946;}i:120490;a:1:{i:0;i:947;}i:120491;a:1:{i:0;i:948;}i:120492;a:1:{i:0;i:949;}i:120493;a:1:{i:0;i:950;}i:120494;a:1:{i:0;i:951;}i:120495;a:1:{i:0;i:952;}i:120496;a:1:{i:0;i:953;}i:120497;a:1:{i:0;i:954;}i:120498;a:1:{i:0;i:955;}i:120499;a:1:{i:0;i:956;}i:120500;a:1:{i:0;i:957;}i:120501;a:1:{i:0;i:958;}i:120502;a:1:{i:0;i:959;}i:120503;a:1:{i:0;i:960;}i:120504;a:1:{i:0;i:961;}i:120505;a:1:{i:0;i:952;}i:120506;a:1:{i:0;i:963;}i:120507;a:1:{i:0;i:964;}i:120508;a:1:{i:0;i:965;}i:120509;a:1:{i:0;i:966;}i:120510;a:1:{i:0;i:967;}i:120511;a:1:{i:0;i:968;}i:120512;a:1:{i:0;i:969;}i:120531;a:1:{i:0;i:963;}i:120546;a:1:{i:0;i:945;}i:120547;a:1:{i:0;i:946;}i:120548;a:1:{i:0;i:947;}i:120549;a:1:{i:0;i:948;}i:120550;a:1:{i:0;i:949;}i:120551;a:1:{i:0;i:950;}i:120552;a:1:{i:0;i:951;}i:120553;a:1:{i:0;i:952;}i:120554;a:1:{i:0;i:953;}i:120555;a:1:{i:0;i:954;}i:120556;a:1:{i:0;i:955;}i:120557;a:1:{i:0;i:956;}i:120558;a:1:{i:0;i:957;}i:120559;a:1:{i:0;i:958;}i:120560;a:1:{i:0;i:959;}i:120561;a:1:{i:0;i:960;}i:120562;a:1:{i:0;i:961;}i:120563;a:1:{i:0;i:952;}i:120564;a:1:{i:0;i:963;}i:120565;a:1:{i:0;i:964;}i:120566;a:1:{i:0;i:965;}i:120567;a:1:{i:0;i:966;}i:120568;a:1:{i:0;i:967;}i:120569;a:1:{i:0;i:968;}i:120570;a:1:{i:0;i:969;}i:120589;a:1:{i:0;i:963;}i:120604;a:1:{i:0;i:945;}i:120605;a:1:{i:0;i:946;}i:120606;a:1:{i:0;i:947;}i:120607;a:1:{i:0;i:948;}i:120608;a:1:{i:0;i:949;}i:120609;a:1:{i:0;i:950;}i:120610;a:1:{i:0;i:951;}i:120611;a:1:{i:0;i:952;}i:120612;a:1:{i:0;i:953;}i:120613;a:1:{i:0;i:954;}i:120614;a:1:{i:0;i:955;}i:120615;a:1:{i:0;i:956;}i:120616;a:1:{i:0;i:957;}i:120617;a:1:{i:0;i:958;}i:120618;a:1:{i:0;i:959;}i:120619;a:1:{i:0;i:960;}i:120620;a:1:{i:0;i:961;}i:120621;a:1:{i:0;i:952;}i:120622;a:1:{i:0;i:963;}i:120623;a:1:{i:0;i:964;}i:120624;a:1:{i:0;i:965;}i:120625;a:1:{i:0;i:966;}i:120626;a:1:{i:0;i:967;}i:120627;a:1:{i:0;i:968;}i:120628;a:1:{i:0;i:969;}i:120647;a:1:{i:0;i:963;}i:120662;a:1:{i:0;i:945;}i:120663;a:1:{i:0;i:946;}i:120664;a:1:{i:0;i:947;}i:120665;a:1:{i:0;i:948;}i:120666;a:1:{i:0;i:949;}i:120667;a:1:{i:0;i:950;}i:120668;a:1:{i:0;i:951;}i:120669;a:1:{i:0;i:952;}i:120670;a:1:{i:0;i:953;}i:120671;a:1:{i:0;i:954;}i:120672;a:1:{i:0;i:955;}i:120673;a:1:{i:0;i:956;}i:120674;a:1:{i:0;i:957;}i:120675;a:1:{i:0;i:958;}i:120676;a:1:{i:0;i:959;}i:120677;a:1:{i:0;i:960;}i:120678;a:1:{i:0;i:961;}i:120679;a:1:{i:0;i:952;}i:120680;a:1:{i:0;i:963;}i:120681;a:1:{i:0;i:964;}i:120682;a:1:{i:0;i:965;}i:120683;a:1:{i:0;i:966;}i:120684;a:1:{i:0;i:967;}i:120685;a:1:{i:0;i:968;}i:120686;a:1:{i:0;i:969;}i:120705;a:1:{i:0;i:963;}i:120720;a:1:{i:0;i:945;}i:120721;a:1:{i:0;i:946;}i:120722;a:1:{i:0;i:947;}i:120723;a:1:{i:0;i:948;}i:120724;a:1:{i:0;i:949;}i:120725;a:1:{i:0;i:950;}i:120726;a:1:{i:0;i:951;}i:120727;a:1:{i:0;i:952;}i:120728;a:1:{i:0;i:953;}i:120729;a:1:{i:0;i:954;}i:120730;a:1:{i:0;i:955;}i:120731;a:1:{i:0;i:956;}i:120732;a:1:{i:0;i:957;}i:120733;a:1:{i:0;i:958;}i:120734;a:1:{i:0;i:959;}i:120735;a:1:{i:0;i:960;}i:120736;a:1:{i:0;i:961;}i:120737;a:1:{i:0;i:952;}i:120738;a:1:{i:0;i:963;}i:120739;a:1:{i:0;i:964;}i:120740;a:1:{i:0;i:965;}i:120741;a:1:{i:0;i:966;}i:120742;a:1:{i:0;i:967;}i:120743;a:1:{i:0;i:968;}i:120744;a:1:{i:0;i:969;}i:120763;a:1:{i:0;i:963;}i:1017;a:1:{i:0;i:963;}i:7468;a:1:{i:0;i:97;}i:7469;a:1:{i:0;i:230;}i:7470;a:1:{i:0;i:98;}i:7472;a:1:{i:0;i:100;}i:7473;a:1:{i:0;i:101;}i:7474;a:1:{i:0;i:477;}i:7475;a:1:{i:0;i:103;}i:7476;a:1:{i:0;i:104;}i:7477;a:1:{i:0;i:105;}i:7478;a:1:{i:0;i:106;}i:7479;a:1:{i:0;i:107;}i:7480;a:1:{i:0;i:108;}i:7481;a:1:{i:0;i:109;}i:7482;a:1:{i:0;i:110;}i:7484;a:1:{i:0;i:111;}i:7485;a:1:{i:0;i:547;}i:7486;a:1:{i:0;i:112;}i:7487;a:1:{i:0;i:114;}i:7488;a:1:{i:0;i:116;}i:7489;a:1:{i:0;i:117;}i:7490;a:1:{i:0;i:119;}i:8507;a:3:{i:0;i:102;i:1;i:97;i:2;i:120;}i:12880;a:3:{i:0;i:112;i:1;i:116;i:2;i:101;}i:13004;a:2:{i:0;i:104;i:1;i:103;}i:13006;a:2:{i:0;i:101;i:1;i:118;}i:13007;a:3:{i:0;i:108;i:1;i:116;i:2;i:100;}i:13178;a:2:{i:0;i:105;i:1;i:117;}i:13278;a:3:{i:0;i:118;i:1;i:8725;i:2;i:109;}i:13279;a:3:{i:0;i:97;i:1;i:8725;i:2;i:109;}}s:12:"norm_combcls";a:341:{i:820;i:1;i:821;i:1;i:822;i:1;i:823;i:1;i:824;i:1;i:2364;i:7;i:2492;i:7;i:2620;i:7;i:2748;i:7;i:2876;i:7;i:3260;i:7;i:4151;i:7;i:12441;i:8;i:12442;i:8;i:2381;i:9;i:2509;i:9;i:2637;i:9;i:2765;i:9;i:2893;i:9;i:3021;i:9;i:3149;i:9;i:3277;i:9;i:3405;i:9;i:3530;i:9;i:3642;i:9;i:3972;i:9;i:4153;i:9;i:5908;i:9;i:5940;i:9;i:6098;i:9;i:1456;i:10;i:1457;i:11;i:1458;i:12;i:1459;i:13;i:1460;i:14;i:1461;i:15;i:1462;i:16;i:1463;i:17;i:1464;i:18;i:1465;i:19;i:1467;i:20;i:1468;i:21;i:1469;i:22;i:1471;i:23;i:1473;i:24;i:1474;i:25;i:64286;i:26;i:1611;i:27;i:1612;i:28;i:1613;i:29;i:1614;i:30;i:1615;i:31;i:1616;i:32;i:1617;i:33;i:1618;i:34;i:1648;i:35;i:1809;i:36;i:3157;i:84;i:3158;i:91;i:3640;i:103;i:3641;i:103;i:3656;i:107;i:3657;i:107;i:3658;i:107;i:3659;i:107;i:3768;i:118;i:3769;i:118;i:3784;i:122;i:3785;i:122;i:3786;i:122;i:3787;i:122;i:3953;i:129;i:3954;i:130;i:3962;i:130;i:3963;i:130;i:3964;i:130;i:3965;i:130;i:3968;i:130;i:3956;i:132;i:801;i:202;i:802;i:202;i:807;i:202;i:808;i:202;i:795;i:216;i:3897;i:216;i:119141;i:216;i:119142;i:216;i:119150;i:216;i:119151;i:216;i:119152;i:216;i:119153;i:216;i:119154;i:216;i:12330;i:218;i:790;i:220;i:791;i:220;i:792;i:220;i:793;i:220;i:796;i:220;i:797;i:220;i:798;i:220;i:799;i:220;i:800;i:220;i:803;i:220;i:804;i:220;i:805;i:220;i:806;i:220;i:809;i:220;i:810;i:220;i:811;i:220;i:812;i:220;i:813;i:220;i:814;i:220;i:815;i:220;i:816;i:220;i:817;i:220;i:818;i:220;i:819;i:220;i:825;i:220;i:826;i:220;i:827;i:220;i:828;i:220;i:839;i:220;i:840;i:220;i:841;i:220;i:845;i:220;i:846;i:220;i:851;i:220;i:852;i:220;i:853;i:220;i:854;i:220;i:1425;i:220;i:1430;i:220;i:1435;i:220;i:1443;i:220;i:1444;i:220;i:1445;i:220;i:1446;i:220;i:1447;i:220;i:1450;i:220;i:1621;i:220;i:1622;i:220;i:1763;i:220;i:1770;i:220;i:1773;i:220;i:1841;i:220;i:1844;i:220;i:1847;i:220;i:1848;i:220;i:1849;i:220;i:1851;i:220;i:1852;i:220;i:1854;i:220;i:1858;i:220;i:1860;i:220;i:1862;i:220;i:1864;i:220;i:2386;i:220;i:3864;i:220;i:3865;i:220;i:3893;i:220;i:3895;i:220;i:4038;i:220;i:6459;i:220;i:8424;i:220;i:119163;i:220;i:119164;i:220;i:119165;i:220;i:119166;i:220;i:119167;i:220;i:119168;i:220;i:119169;i:220;i:119170;i:220;i:119178;i:220;i:119179;i:220;i:1434;i:222;i:1453;i:222;i:6441;i:222;i:12333;i:222;i:12334;i:224;i:12335;i:224;i:119149;i:226;i:1454;i:228;i:6313;i:228;i:12331;i:228;i:768;i:230;i:769;i:230;i:770;i:230;i:771;i:230;i:772;i:230;i:773;i:230;i:774;i:230;i:775;i:230;i:776;i:230;i:777;i:230;i:778;i:230;i:779;i:230;i:780;i:230;i:781;i:230;i:782;i:230;i:783;i:230;i:784;i:230;i:785;i:230;i:786;i:230;i:787;i:230;i:788;i:230;i:829;i:230;i:830;i:230;i:831;i:230;i:832;i:230;i:833;i:230;i:834;i:230;i:835;i:230;i:836;i:230;i:838;i:230;i:842;i:230;i:843;i:230;i:844;i:230;i:848;i:230;i:849;i:230;i:850;i:230;i:855;i:230;i:867;i:230;i:868;i:230;i:869;i:230;i:870;i:230;i:871;i:230;i:872;i:230;i:873;i:230;i:874;i:230;i:875;i:230;i:876;i:230;i:877;i:230;i:878;i:230;i:879;i:230;i:1155;i:230;i:1156;i:230;i:1157;i:230;i:1158;i:230;i:1426;i:230;i:1427;i:230;i:1428;i:230;i:1429;i:230;i:1431;i:230;i:1432;i:230;i:1433;i:230;i:1436;i:230;i:1437;i:230;i:1438;i:230;i:1439;i:230;i:1440;i:230;i:1441;i:230;i:1448;i:230;i:1449;i:230;i:1451;i:230;i:1452;i:230;i:1455;i:230;i:1476;i:230;i:1552;i:230;i:1553;i:230;i:1554;i:230;i:1555;i:230;i:1556;i:230;i:1557;i:230;i:1619;i:230;i:1620;i:230;i:1623;i:230;i:1624;i:230;i:1750;i:230;i:1751;i:230;i:1752;i:230;i:1753;i:230;i:1754;i:230;i:1755;i:230;i:1756;i:230;i:1759;i:230;i:1760;i:230;i:1761;i:230;i:1762;i:230;i:1764;i:230;i:1767;i:230;i:1768;i:230;i:1771;i:230;i:1772;i:230;i:1840;i:230;i:1842;i:230;i:1843;i:230;i:1845;i:230;i:1846;i:230;i:1850;i:230;i:1853;i:230;i:1855;i:230;i:1856;i:230;i:1857;i:230;i:1859;i:230;i:1861;i:230;i:1863;i:230;i:1865;i:230;i:1866;i:230;i:2385;i:230;i:2387;i:230;i:2388;i:230;i:3970;i:230;i:3971;i:230;i:3974;i:230;i:3975;i:230;i:5901;i:230;i:6458;i:230;i:8400;i:230;i:8401;i:230;i:8404;i:230;i:8405;i:230;i:8406;i:230;i:8407;i:230;i:8411;i:230;i:8412;i:230;i:8417;i:230;i:8423;i:230;i:8425;i:230;i:65056;i:230;i:65057;i:230;i:65058;i:230;i:65059;i:230;i:119173;i:230;i:119174;i:230;i:119175;i:230;i:119177;i:230;i:119176;i:230;i:119210;i:230;i:119211;i:230;i:119212;i:230;i:119213;i:230;i:789;i:232;i:794;i:232;i:12332;i:232;i:863;i:233;i:866;i:233;i:861;i:234;i:862;i:234;i:864;i:234;i:865;i:234;i:837;i:240;}} \ No newline at end of file diff --git a/library/simplepie/simplepie.inc b/library/simplepie/simplepie.inc deleted file mode 100644 index 96ad06678e..0000000000 --- a/library/simplepie/simplepie.inc +++ /dev/null @@ -1,15150 +0,0 @@ -' . SIMPLEPIE_NAME . ''); - -/** - * No Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_NONE', 0); - -/** - * Feed Link Element Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1); - -/** - * Local Feed Extension Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2); - -/** - * Local Feed Body Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4); - -/** - * Remote Feed Extension Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8); - -/** - * Remote Feed Body Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16); - -/** - * All Feed Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_ALL', 31); - -/** - * No known feed type - */ -define('SIMPLEPIE_TYPE_NONE', 0); - -/** - * RSS 0.90 - */ -define('SIMPLEPIE_TYPE_RSS_090', 1); - -/** - * RSS 0.91 (Netscape) - */ -define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2); - -/** - * RSS 0.91 (Userland) - */ -define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4); - -/** - * RSS 0.91 (both Netscape and Userland) - */ -define('SIMPLEPIE_TYPE_RSS_091', 6); - -/** - * RSS 0.92 - */ -define('SIMPLEPIE_TYPE_RSS_092', 8); - -/** - * RSS 0.93 - */ -define('SIMPLEPIE_TYPE_RSS_093', 16); - -/** - * RSS 0.94 - */ -define('SIMPLEPIE_TYPE_RSS_094', 32); - -/** - * RSS 1.0 - */ -define('SIMPLEPIE_TYPE_RSS_10', 64); - -/** - * RSS 2.0 - */ -define('SIMPLEPIE_TYPE_RSS_20', 128); - -/** - * RDF-based RSS - */ -define('SIMPLEPIE_TYPE_RSS_RDF', 65); - -/** - * Non-RDF-based RSS (truly intended as syndication format) - */ -define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190); - -/** - * All RSS - */ -define('SIMPLEPIE_TYPE_RSS_ALL', 255); - -/** - * Atom 0.3 - */ -define('SIMPLEPIE_TYPE_ATOM_03', 256); - -/** - * Atom 1.0 - */ -define('SIMPLEPIE_TYPE_ATOM_10', 512); - -/** - * All Atom - */ -define('SIMPLEPIE_TYPE_ATOM_ALL', 768); - -/** - * All feed types - */ -define('SIMPLEPIE_TYPE_ALL', 1023); - -/** - * No construct - */ -define('SIMPLEPIE_CONSTRUCT_NONE', 0); - -/** - * Text construct - */ -define('SIMPLEPIE_CONSTRUCT_TEXT', 1); - -/** - * HTML construct - */ -define('SIMPLEPIE_CONSTRUCT_HTML', 2); - -/** - * XHTML construct - */ -define('SIMPLEPIE_CONSTRUCT_XHTML', 4); - -/** - * base64-encoded construct - */ -define('SIMPLEPIE_CONSTRUCT_BASE64', 8); - -/** - * IRI construct - */ -define('SIMPLEPIE_CONSTRUCT_IRI', 16); - -/** - * A construct that might be HTML - */ -define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32); - -/** - * All constructs - */ -define('SIMPLEPIE_CONSTRUCT_ALL', 63); - -/** - * Don't change case - */ -define('SIMPLEPIE_SAME_CASE', 1); - -/** - * Change to lowercase - */ -define('SIMPLEPIE_LOWERCASE', 2); - -/** - * Change to uppercase - */ -define('SIMPLEPIE_UPPERCASE', 4); - -/** - * PCRE for HTML attributes - */ -define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*'); - -/** - * PCRE for XML attributes - */ -define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*'); - -/** - * XML Namespace - */ -define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace'); - -/** - * Atom 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom'); - -/** - * Atom 0.3 Namespace - */ -define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#'); - -/** - * RDF Namespace - */ -define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); - -/** - * RSS 0.90 Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/'); - -/** - * RSS 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/'); - -/** - * RSS 1.0 Content Module Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/'); - -/** - * RSS 2.0 Namespace - * (Stupid, I know, but I'm certain it will confuse people less with support.) - */ -define('SIMPLEPIE_NAMESPACE_RSS_20', ''); - -/** - * DC 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/'); - -/** - * DC 1.1 Namespace - */ -define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/'); - -/** - * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace - */ -define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#'); - -/** - * GeoRSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss'); - -/** - * Media RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/'); - -/** - * Wrong Media RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss'); - -/** - * iTunes RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - -/** - * XHTML Namespace - */ -define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml'); - -/** - * IANA Link Relations Registry - */ -define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/'); - -/** - * Whether we're running on PHP5 - */ -define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>=')); - -/** - * No file source - */ -define('SIMPLEPIE_FILE_SOURCE_NONE', 0); - -/** - * Remote file source - */ -define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1); - -/** - * Local file source - */ -define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2); - -/** - * fsockopen() file source - */ -define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4); - -/** - * cURL file source - */ -define('SIMPLEPIE_FILE_SOURCE_CURL', 8); - -/** - * file_get_contents() file source - */ -define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16); - -/** - * SimplePie - * - * @package SimplePie - */ -class SimplePie -{ - /** - * @var array Raw data - * @access private - */ - var $data = array(); - - /** - * @var mixed Error string - * @access private - */ - var $error; - - /** - * @var object Instance of SimplePie_Sanitize (or other class) - * @see SimplePie::set_sanitize_class() - * @access private - */ - var $sanitize; - - /** - * @var string SimplePie Useragent - * @see SimplePie::set_useragent() - * @access private - */ - var $useragent = SIMPLEPIE_USERAGENT; - - /** - * @var string Feed URL - * @see SimplePie::set_feed_url() - * @access private - */ - var $feed_url; - - /** - * @var object Instance of SimplePie_File to use as a feed - * @see SimplePie::set_file() - * @access private - */ - var $file; - - /** - * @var string Raw feed data - * @see SimplePie::set_raw_data() - * @access private - */ - var $raw_data; - - /** - * @var int Timeout for fetching remote files - * @see SimplePie::set_timeout() - * @access private - */ - var $timeout = 10; - - /** - * @var bool Forces fsockopen() to be used for remote files instead - * of cURL, even if a new enough version is installed - * @see SimplePie::force_fsockopen() - * @access private - */ - var $force_fsockopen = false; - - /** - * @var bool Force the given data/URL to be treated as a feed no matter what - * it appears like - * @see SimplePie::force_feed() - * @access private - */ - var $force_feed = false; - - /** - * @var bool Enable/Disable XML dump - * @see SimplePie::enable_xml_dump() - * @access private - */ - var $xml_dump = false; - - /** - * @var bool Enable/Disable Caching - * @see SimplePie::enable_cache() - * @access private - */ - var $cache = true; - - /** - * @var int Cache duration (in seconds) - * @see SimplePie::set_cache_duration() - * @access private - */ - var $cache_duration = 3600; - - /** - * @var int Auto-discovery cache duration (in seconds) - * @see SimplePie::set_autodiscovery_cache_duration() - * @access private - */ - var $autodiscovery_cache_duration = 604800; // 7 Days. - - /** - * @var string Cache location (relative to executing script) - * @see SimplePie::set_cache_location() - * @access private - */ - var $cache_location = './cache'; - - /** - * @var string Function that creates the cache filename - * @see SimplePie::set_cache_name_function() - * @access private - */ - var $cache_name_function = 'md5'; - - /** - * @var bool Reorder feed by date descending - * @see SimplePie::enable_order_by_date() - * @access private - */ - var $order_by_date = true; - - /** - * @var mixed Force input encoding to be set to the follow value - * (false, or anything type-cast to false, disables this feature) - * @see SimplePie::set_input_encoding() - * @access private - */ - var $input_encoding = false; - - /** - * @var int Feed Autodiscovery Level - * @see SimplePie::set_autodiscovery_level() - * @access private - */ - var $autodiscovery = SIMPLEPIE_LOCATOR_ALL; - - /** - * @var string Class used for caching feeds - * @see SimplePie::set_cache_class() - * @access private - */ - var $cache_class = 'SimplePie_Cache'; - - /** - * @var string Class used for locating feeds - * @see SimplePie::set_locator_class() - * @access private - */ - var $locator_class = 'SimplePie_Locator'; - - /** - * @var string Class used for parsing feeds - * @see SimplePie::set_parser_class() - * @access private - */ - var $parser_class = 'SimplePie_Parser'; - - /** - * @var string Class used for fetching feeds - * @see SimplePie::set_file_class() - * @access private - */ - var $file_class = 'SimplePie_File'; - - /** - * @var string Class used for items - * @see SimplePie::set_item_class() - * @access private - */ - var $item_class = 'SimplePie_Item'; - - /** - * @var string Class used for authors - * @see SimplePie::set_author_class() - * @access private - */ - var $author_class = 'SimplePie_Author'; - - /** - * @var string Class used for categories - * @see SimplePie::set_category_class() - * @access private - */ - var $category_class = 'SimplePie_Category'; - - /** - * @var string Class used for enclosures - * @see SimplePie::set_enclosures_class() - * @access private - */ - var $enclosure_class = 'SimplePie_Enclosure'; - - /** - * @var string Class used for Media RSS captions - * @see SimplePie::set_caption_class() - * @access private - */ - var $caption_class = 'SimplePie_Caption'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_copyright_class() - * @access private - */ - var $copyright_class = 'SimplePie_Copyright'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_credit_class() - * @access private - */ - var $credit_class = 'SimplePie_Credit'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_rating_class() - * @access private - */ - var $rating_class = 'SimplePie_Rating'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_restriction_class() - * @access private - */ - var $restriction_class = 'SimplePie_Restriction'; - - /** - * @var string Class used for content-type sniffing - * @see SimplePie::set_content_type_sniffer_class() - * @access private - */ - var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; - - /** - * @var string Class used for item sources. - * @see SimplePie::set_source_class() - * @access private - */ - var $source_class = 'SimplePie_Source'; - - /** - * @var mixed Set javascript query string parameter (false, or - * anything type-cast to false, disables this feature) - * @see SimplePie::set_javascript() - * @access private - */ - var $javascript = 'js'; - - /** - * @var int Maximum number of feeds to check with autodiscovery - * @see SimplePie::set_max_checked_feeds() - * @access private - */ - var $max_checked_feeds = 10; - - /** - * @var array All the feeds found during the autodiscovery process - * @see SimplePie::get_all_discovered_feeds() - * @access private - */ - var $all_discovered_feeds = array(); - - /** - * @var string Web-accessible path to the handler_favicon.php file. - * @see SimplePie::set_favicon_handler() - * @access private - */ - var $favicon_handler = ''; - - /** - * @var string Web-accessible path to the handler_image.php file. - * @see SimplePie::set_image_handler() - * @access private - */ - var $image_handler = ''; - - /** - * @var array Stores the URLs when multiple feeds are being initialized. - * @see SimplePie::set_feed_url() - * @access private - */ - var $multifeed_url = array(); - - /** - * @var array Stores SimplePie objects when multiple feeds initialized. - * @access private - */ - var $multifeed_objects = array(); - - /** - * @var array Stores the get_object_vars() array for use with multifeeds. - * @see SimplePie::set_feed_url() - * @access private - */ - var $config_settings = null; - - /** - * @var integer Stores the number of items to return per-feed with multifeeds. - * @see SimplePie::set_item_limit() - * @access private - */ - var $item_limit = 0; - - /** - * @var array Stores the default attributes to be stripped by strip_attributes(). - * @see SimplePie::strip_attributes() - * @access private - */ - var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); - - /** - * @var array Stores the default tags to be stripped by strip_htmltags(). - * @see SimplePie::strip_htmltags() - * @access private - */ - var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); - - /** - * The SimplePie class contains feed level data and options - * - * There are two ways that you can create a new SimplePie object. The first - * is by passing a feed URL as a parameter to the SimplePie constructor - * (as well as optionally setting the cache location and cache expiry). This - * will initialise the whole feed with all of the default settings, and you - * can begin accessing methods and properties immediately. - * - * The second way is to create the SimplePie object with no parameters - * at all. This will enable you to set configuration options. After setting - * them, you must initialise the feed using $feed->init(). At that point the - * object's methods and properties will be available to you. This format is - * what is used throughout this documentation. - * - * @access public - * @since 1.0 Preview Release - * @param string $feed_url This is the URL you want to parse. - * @param string $cache_location This is where you want the cache to be stored. - * @param int $cache_duration This is the number of seconds that you want to store the cache file for. - */ - function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null) - { - // Other objects, instances created here so we can set options on them - $this->sanitize = new SimplePie_Sanitize; - - // Set options if they're passed to the constructor - if ($cache_location !== null) - { - $this->set_cache_location($cache_location); - } - - if ($cache_duration !== null) - { - $this->set_cache_duration($cache_duration); - } - - // Only init the script if we're passed a feed URL - if ($feed_url !== null) - { - $this->set_feed_url($feed_url); - $this->init(); - } - } - - /** - * Used for converting object to a string - */ - function __toString() - { - return md5(serialize($this->data)); - } - - /** - * Remove items that link back to this before destroying this object - */ - function __destruct() - { - if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) - { - if (!empty($this->data['items'])) - { - foreach ($this->data['items'] as $item) - { - $item->__destruct(); - } - unset($item, $this->data['items']); - } - if (!empty($this->data['ordered_items'])) - { - foreach ($this->data['ordered_items'] as $item) - { - $item->__destruct(); - } - unset($item, $this->data['ordered_items']); - } - } - } - - /** - * Force the given data/URL to be treated as a feed no matter what it - * appears like - * - * @access public - * @since 1.1 - * @param bool $enable Force the given data/URL to be treated as a feed - */ - function force_feed($enable = false) - { - $this->force_feed = (bool) $enable; - } - - /** - * This is the URL of the feed you want to parse. - * - * This allows you to enter the URL of the feed you want to parse, or the - * website you want to try to use auto-discovery on. This takes priority - * over any set raw data. - * - * You can set multiple feeds to mash together by passing an array instead - * of a string for the $url. Remember that with each additional feed comes - * additional processing and resources. - * - * @access public - * @since 1.0 Preview Release - * @param mixed $url This is the URL (or array of URLs) that you want to parse. - * @see SimplePie::set_raw_data() - */ - function set_feed_url($url) - { - if (is_array($url)) - { - $this->multifeed_url = array(); - foreach ($url as $value) - { - $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1); - } - } - else - { - $this->feed_url = SimplePie_Misc::fix_protocol($url, 1); - } - } - - /** - * Provides an instance of SimplePie_File to use as a feed - * - * @access public - * @param object &$file Instance of SimplePie_File (or subclass) - * @return bool True on success, false on failure - */ - function set_file(&$file) - { - if (is_a($file, 'SimplePie_File')) - { - $this->feed_url = $file->url; - $this->file =& $file; - return true; - } - return false; - } - - /** - * Allows you to use a string of RSS/Atom data instead of a remote feed. - * - * If you have a feed available as a string in PHP, you can tell SimplePie - * to parse that data string instead of a remote feed. Any set feed URL - * takes precedence. - * - * @access public - * @since 1.0 Beta 3 - * @param string $data RSS or Atom data as a string. - * @see SimplePie::set_feed_url() - */ - function set_raw_data($data) - { - $this->raw_data = $data; - } - - /** - * Allows you to override the default timeout for fetching remote feeds. - * - * This allows you to change the maximum time the feed's server to respond - * and send the feed back. - * - * @access public - * @since 1.0 Beta 3 - * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed. - */ - function set_timeout($timeout = 10) - { - $this->timeout = (int) $timeout; - } - - /** - * Forces SimplePie to use fsockopen() instead of the preferred cURL - * functions. - * - * @access public - * @since 1.0 Beta 3 - * @param bool $enable Force fsockopen() to be used - */ - function force_fsockopen($enable = false) - { - $this->force_fsockopen = (bool) $enable; - } - - /** - * Outputs the raw XML content of the feed, after it has gone through - * SimplePie's filters. - * - * Used only for debugging, this function will output the XML content as - * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up - * before trying to parse it. Many parts of the feed are re-written in - * memory, and in the end, you have a parsable feed. XML dump shows you the - * actual XML that SimplePie tries to parse, which may or may not be very - * different from the original feed. - * - * @access public - * @since 1.0 Preview Release - * @param bool $enable Enable XML dump - */ - function enable_xml_dump($enable = false) - { - $this->xml_dump = (bool) $enable; - } - - /** - * Enables/disables caching in SimplePie. - * - * This option allows you to disable caching all-together in SimplePie. - * However, disabling the cache can lead to longer load times. - * - * @access public - * @since 1.0 Preview Release - * @param bool $enable Enable caching - */ - function enable_cache($enable = true) - { - $this->cache = (bool) $enable; - } - - /** - * Set the length of time (in seconds) that the contents of a feed - * will be cached. - * - * @access public - * @param int $seconds The feed content cache duration. - */ - function set_cache_duration($seconds = 3600) - { - $this->cache_duration = (int) $seconds; - } - - /** - * Set the length of time (in seconds) that the autodiscovered feed - * URL will be cached. - * - * @access public - * @param int $seconds The autodiscovered feed URL cache duration. - */ - function set_autodiscovery_cache_duration($seconds = 604800) - { - $this->autodiscovery_cache_duration = (int) $seconds; - } - - /** - * Set the file system location where the cached files should be stored. - * - * @access public - * @param string $location The file system location. - */ - function set_cache_location($location = './cache') - { - $this->cache_location = (string) $location; - } - - /** - * Determines whether feed items should be sorted into reverse chronological order. - * - * @access public - * @param bool $enable Sort as reverse chronological order. - */ - function enable_order_by_date($enable = true) - { - $this->order_by_date = (bool) $enable; - } - - /** - * Allows you to override the character encoding reported by the feed. - * - * @access public - * @param string $encoding Character encoding. - */ - function set_input_encoding($encoding = false) - { - if ($encoding) - { - $this->input_encoding = (string) $encoding; - } - else - { - $this->input_encoding = false; - } - } - - /** - * Set how much feed autodiscovery to do - * - * @access public - * @see SIMPLEPIE_LOCATOR_NONE - * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY - * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION - * @see SIMPLEPIE_LOCATOR_LOCAL_BODY - * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION - * @see SIMPLEPIE_LOCATOR_REMOTE_BODY - * @see SIMPLEPIE_LOCATOR_ALL - * @param int $level Feed Autodiscovery Level (level can be a - * combination of the above constants, see bitwise OR operator) - */ - function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL) - { - $this->autodiscovery = (int) $level; - } - - /** - * Allows you to change which class SimplePie uses for caching. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_cache_class($class = 'SimplePie_Cache') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache')) - { - $this->cache_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for auto-discovery. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_locator_class($class = 'SimplePie_Locator') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator')) - { - $this->locator_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for XML parsing. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_parser_class($class = 'SimplePie_Parser') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser')) - { - $this->parser_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for remote file fetching. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_file_class($class = 'SimplePie_File') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File')) - { - $this->file_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for data sanitization. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_sanitize_class($class = 'SimplePie_Sanitize') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize')) - { - $this->sanitize = new $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for handling feed items. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_item_class($class = 'SimplePie_Item') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item')) - { - $this->item_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for handling author data. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_author_class($class = 'SimplePie_Author') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author')) - { - $this->author_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for handling category data. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_category_class($class = 'SimplePie_Category') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category')) - { - $this->category_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for feed enclosures. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_enclosure_class($class = 'SimplePie_Enclosure') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure')) - { - $this->enclosure_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for captions - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_caption_class($class = 'SimplePie_Caption') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption')) - { - $this->caption_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_copyright_class($class = 'SimplePie_Copyright') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright')) - { - $this->copyright_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_credit_class($class = 'SimplePie_Credit') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit')) - { - $this->credit_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_rating_class($class = 'SimplePie_Rating') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating')) - { - $this->rating_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_restriction_class($class = 'SimplePie_Restriction') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction')) - { - $this->restriction_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for content-type sniffing. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Content_Type_Sniffer')) - { - $this->content_type_sniffer_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses item sources. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_source_class($class = 'SimplePie_Source') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Source')) - { - $this->source_class = $class; - return true; - } - return false; - } - - /** - * Allows you to override the default user agent string. - * - * @access public - * @param string $ua New user agent string. - */ - function set_useragent($ua = SIMPLEPIE_USERAGENT) - { - $this->useragent = (string) $ua; - } - - /** - * Set callback function to create cache filename with - * - * @access public - * @param mixed $function Callback function - */ - function set_cache_name_function($function = 'md5') - { - if (is_callable($function)) - { - $this->cache_name_function = $function; - } - } - - /** - * Set javascript query string parameter - * - * @access public - * @param mixed $get Javascript query string parameter - */ - function set_javascript($get = 'js') - { - if ($get) - { - $this->javascript = (string) $get; - } - else - { - $this->javascript = false; - } - } - - /** - * Set options to make SP as fast as possible. Forgoes a - * substantial amount of data sanitization in favor of speed. - * - * @access public - * @param bool $set Whether to set them or not - */ - function set_stupidly_fast($set = false) - { - if ($set) - { - $this->enable_order_by_date(false); - $this->remove_div(false); - $this->strip_comments(false); - $this->strip_htmltags(false); - $this->strip_attributes(false); - $this->set_image_handler(false); - } - } - - /** - * Set maximum number of feeds to check with autodiscovery - * - * @access public - * @param int $max Maximum number of feeds to check - */ - function set_max_checked_feeds($max = 10) - { - $this->max_checked_feeds = (int) $max; - } - - function remove_div($enable = true) - { - $this->sanitize->remove_div($enable); - } - - function strip_htmltags($tags = '', $encode = null) - { - if ($tags === '') - { - $tags = $this->strip_htmltags; - } - $this->sanitize->strip_htmltags($tags); - if ($encode !== null) - { - $this->sanitize->encode_instead_of_strip($tags); - } - } - - function encode_instead_of_strip($enable = true) - { - $this->sanitize->encode_instead_of_strip($enable); - } - - function strip_attributes($attribs = '') - { - if ($attribs === '') - { - $attribs = $this->strip_attributes; - } - $this->sanitize->strip_attributes($attribs); - } - - function set_output_encoding($encoding = 'UTF-8') - { - $this->sanitize->set_output_encoding($encoding); - } - - function strip_comments($strip = false) - { - $this->sanitize->strip_comments($strip); - } - - /** - * Set element/attribute key/value pairs of HTML attributes - * containing URLs that need to be resolved relative to the feed - * - * @access public - * @since 1.0 - * @param array $element_attribute Element/attribute key/value pairs - */ - function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) - { - $this->sanitize->set_url_replacements($element_attribute); - } - - /** - * Set the handler to enable the display of cached favicons. - * - * @access public - * @param str $page Web-accessible path to the handler_favicon.php file. - * @param str $qs The query string that the value should be passed to. - */ - function set_favicon_handler($page = false, $qs = 'i') - { - if ($page !== false) - { - $this->favicon_handler = $page . '?' . $qs . '='; - } - else - { - $this->favicon_handler = ''; - } - } - - /** - * Set the handler to enable the display of cached images. - * - * @access public - * @param str $page Web-accessible path to the handler_image.php file. - * @param str $qs The query string that the value should be passed to. - */ - function set_image_handler($page = false, $qs = 'i') - { - if ($page !== false) - { - $this->sanitize->set_image_handler($page . '?' . $qs . '='); - } - else - { - $this->image_handler = ''; - } - } - - /** - * Set the limit for items returned per-feed with multifeeds. - * - * @access public - * @param integer $limit The maximum number of items to return. - */ - function set_item_limit($limit = 0) - { - $this->item_limit = (int) $limit; - } - - function init() - { - // Check absolute bare minimum requirements. - if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre')) - { - return false; - } - // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader. - elseif (!extension_loaded('xmlreader')) - { - static $xml_is_sane = null; - if ($xml_is_sane === null) - { - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '&', $values); - xml_parser_free($parser_check); - $xml_is_sane = isset($values[0]['value']); - } - if (!$xml_is_sane) - { - return false; - } - } - - if (isset($_GET[$this->javascript])) - { - SimplePie_Misc::output_javascript(); - exit; - } - - // Pass whatever was set with config options over to the sanitizer. - $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class); - $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen); - - if ($this->feed_url !== null || $this->raw_data !== null) - { - $this->data = array(); - $this->multifeed_objects = array(); - $cache = false; - - if ($this->feed_url !== null) - { - $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url); - // Decide whether to enable caching - if ($this->cache && $parsed_feed_url['scheme'] !== '') - { - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'); - } - // If it's enabled and we don't want an XML dump, use the cache - if ($cache && !$this->xml_dump) - { - // Load the Cache - $this->data = $cache->load(); - if (!empty($this->data)) - { - // If the cache is for an outdated build of SimplePie - if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD) - { - $cache->unlink(); - $this->data = array(); - } - // If we've hit a collision just rerun it with caching disabled - elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) - { - $cache = false; - $this->data = array(); - } - // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL. - elseif (isset($this->data['feed_url'])) - { - // If the autodiscovery cache is still valid use it. - if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) - { - // Do not need to do feed autodiscovery yet. - if ($this->data['feed_url'] === $this->data['url']) - { - $cache->unlink(); - $this->data = array(); - } - else - { - $this->set_feed_url($this->data['feed_url']); - return $this->init(); - } - } - } - // Check if the cache has been updated - elseif ($cache->mtime() + $this->cache_duration < time()) - { - // If we have last-modified and/or etag set - if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) - { - $headers = array(); - if (isset($this->data['headers']['last-modified'])) - { - $headers['if-modified-since'] = $this->data['headers']['last-modified']; - } - if (isset($this->data['headers']['etag'])) - { - $headers['if-none-match'] = '"' . $this->data['headers']['etag'] . '"'; - } - $file = new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen); - if ($file->success) - { - if ($file->status_code === 304) - { - $cache->touch(); - return true; - } - else - { - $headers = $file->headers; - } - } - else - { - unset($file); - } - } - } - // If the cache is still valid, just return true - else - { - return true; - } - } - // If the cache is empty, delete it - else - { - $cache->unlink(); - $this->data = array(); - } - } - // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it. - if (!isset($file)) - { - if (is_a($this->file, 'SimplePie_File') && $this->file->url === $this->feed_url) - { - $file =& $this->file; - } - else - { - $file = new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen); - } - } - // If the file connection has an error, set SimplePie::error to that and quit - if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - $this->error = $file->error; - if (!empty($this->data)) - { - return true; - } - else - { - return false; - } - } - - if (!$this->force_feed) - { - // Check if the supplied URL is a feed, if it isn't, look for it. - $locate = new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds, $this->content_type_sniffer_class); - if (!$locate->is_feed($file)) - { - // We need to unset this so that if SimplePie::set_file() has been called that object is untouched - unset($file); - if ($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds)) - { - if ($cache) - { - $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); - if (!$cache->save($this)) - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'); - } - $this->feed_url = $file->url; - } - else - { - $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed."; - SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); - return false; - } - } - $locate = null; - } - - $headers = $file->headers; - $data = $file->body; - $sniffer = new $this->content_type_sniffer_class($file); - $sniffed = $sniffer->get_type(); - } - else - { - $data = $this->raw_data; - } - - // Set up array of possible encodings - $encodings = array(); - - // First check to see if input has been overridden. - if ($this->input_encoding !== false) - { - $encodings[] = $this->input_encoding; - } - - $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'); - $text_types = array('text/xml', 'text/xml-external-parsed-entity'); - - // RFC 3023 (only applies to sniffed content) - if (isset($sniffed)) - { - if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') - { - if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) - { - $encodings[] = strtoupper($charset[1]); - } - $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); - $encodings[] = 'UTF-8'; - } - elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') - { - if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) - { - $encodings[] = $charset[1]; - } - $encodings[] = 'US-ASCII'; - } - // Text MIME-type default - elseif (substr($sniffed, 0, 5) === 'text/') - { - $encodings[] = 'US-ASCII'; - } - } - - // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1 - $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); - $encodings[] = 'UTF-8'; - $encodings[] = 'ISO-8859-1'; - - // There's no point in trying an encoding twice - $encodings = array_unique($encodings); - - // If we want the XML, just output that with the most likely encoding and quit - if ($this->xml_dump) - { - header('Content-type: text/xml; charset=' . $encodings[0]); - echo $data; - exit; - } - - // Loop through each possible encoding, till we return something, or run out of possibilities - foreach ($encodings as $encoding) - { - // Change the encoding to UTF-8 (as we always use UTF-8 internally) - if ($utf8_data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8')) - { - // Create new parser - $parser = new $this->parser_class(); - - // If it's parsed fine - if ($parser->parse($utf8_data, 'UTF-8')) - { - $this->data = $parser->get_data(); - if ($this->get_type() & ~SIMPLEPIE_TYPE_NONE) - { - if (isset($headers)) - { - $this->data['headers'] = $headers; - } - $this->data['build'] = SIMPLEPIE_BUILD; - - // Cache the file if caching is enabled - if ($cache && !$cache->save($this)) - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - return true; - } - else - { - $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed."; - SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); - return false; - } - } - } - } - if (isset($parser)) - { - // We have an error, just set SimplePie_Misc::error to it and quit - $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); - } - else - { - $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.'; - } - SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); - return false; - } - elseif (!empty($this->multifeed_url)) - { - $i = 0; - $success = 0; - $this->multifeed_objects = array(); - foreach ($this->multifeed_url as $url) - { - if (SIMPLEPIE_PHP5) - { - // This keyword needs to defy coding standards for PHP4 compatibility - $this->multifeed_objects[$i] = clone($this); - } - else - { - $this->multifeed_objects[$i] = $this; - } - $this->multifeed_objects[$i]->set_feed_url($url); - $success |= $this->multifeed_objects[$i]->init(); - $i++; - } - return (bool) $success; - } - else - { - return false; - } - } - - /** - * Return the error message for the occured error - * - * @access public - * @return string Error message - */ - function error() - { - return $this->error; - } - - function get_encoding() - { - return $this->sanitize->output_encoding; - } - - function handle_content_type($mime = 'text/html') - { - if (!headers_sent()) - { - $header = "Content-type: $mime;"; - if ($this->get_encoding()) - { - $header .= ' charset=' . $this->get_encoding(); - } - else - { - $header .= ' charset=UTF-8'; - } - header($header); - } - } - - function get_type() - { - if (!isset($this->data['type'])) - { - $this->data['type'] = SIMPLEPIE_TYPE_ALL; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10; - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03; - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'])) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10; - } - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090; - } - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) - { - switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) - { - case '0.91': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) - { - switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) - { - case '0': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE; - break; - - case '24': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND; - break; - } - } - break; - - case '0.92': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092; - break; - - case '0.93': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093; - break; - - case '0.94': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094; - break; - - case '2.0': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20; - break; - } - } - } - else - { - $this->data['type'] = SIMPLEPIE_TYPE_NONE; - } - } - return $this->data['type']; - } - - /** - * Returns the URL for the favicon of the feed's website. - * - * @todo Cache atom:icon - * @access public - * @since 1.0 - */ - function get_favicon() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url)) - { - $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url); - - if ($this->cache && $this->favicon_handler) - { - $favicon_filename = call_user_func($this->cache_name_function, $favicon); - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $favicon_filename, 'spi'); - - if ($cache->load()) - { - return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $file = new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); - - if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0) - { - $sniffer = new $this->content_type_sniffer_class($file); - if (substr($sniffer->get_type(), 0, 6) === 'image/') - { - if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) - { - return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - trigger_error("$cache->name is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); - } - } - // not an image - else - { - return false; - } - } - } - } - else - { - return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); - } - } - return false; - } - - /** - * @todo If we have a perm redirect we should return the new URL - * @todo When we make the above change, let's support as well - * @todo Also, |atom:link|@rel=self - */ - function subscribe_url() - { - if ($this->feed_url !== null) - { - return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_feed() - { - if ($this->feed_url !== null) - { - return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_outlook() - { - if ($this->feed_url !== null) - { - return $this->sanitize('outlook' . SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_podcast() - { - if ($this->feed_url !== null) - { - return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_itunes() - { - if ($this->feed_url !== null) - { - return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - /** - * Creates the subscribe_* methods' return data - * - * @access private - * @param string $feed_url String to prefix to the feed URL - * @param string $site_url String to prefix to the site URL (and - * suffix to the feed URL) - * @return mixed URL if feed exists, false otherwise - */ - function subscribe_service($feed_url, $site_url = null) - { - if ($this->subscribe_url()) - { - $return = $feed_url . rawurlencode($this->feed_url); - if ($site_url !== null && $this->get_link() !== null) - { - $return .= $site_url . rawurlencode($this->get_link()); - } - return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_aol() - { - return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url='); - } - - function subscribe_bloglines() - { - return $this->subscribe_service('http://www.bloglines.com/sub/'); - } - - function subscribe_eskobo() - { - return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage='); - } - - function subscribe_feedfeeds() - { - return $this->subscribe_service('http://www.feedfeeds.com/add?feed='); - } - - function subscribe_feedster() - { - return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl='); - } - - function subscribe_google() - { - return $this->subscribe_service('http://fusion.google.com/add?feedurl='); - } - - function subscribe_gritwire() - { - return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl='); - } - - function subscribe_msn() - { - return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru='); - } - - function subscribe_netvibes() - { - return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url='); - } - - function subscribe_newsburst() - { - return $this->subscribe_service('http://www.newsburst.com/Source/?add='); - } - - function subscribe_newsgator() - { - return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url='); - } - - function subscribe_odeo() - { - return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed='); - } - - function subscribe_podnova() - { - return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url='); - } - - function subscribe_rojo() - { - return $this->subscribe_service('http://www.rojo.com/add-subscription?resource='); - } - - function subscribe_yahoo() - { - return $this->subscribe_service('http://add.my.yahoo.com/rss?url='); - } - - function get_feed_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_ATOM_10) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_ATOM_03) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_RDF) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]; - } - } - return null; - } - - function get_channel_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_ATOM_ALL) - { - if ($return = $this->get_feed_tags($namespace, $tag)) - { - return $return; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_10) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_090) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - return null; - } - - function get_image_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_RSS_10) - { - if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_090) - { - if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - return null; - } - - function get_base($element = array()) - { - if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) - { - return $element['xml_base']; - } - elseif ($this->get_link() !== null) - { - return $this->get_link(); - } - else - { - return $this->subscribe_url(); - } - } - - function sanitize($data, $type, $base = '') - { - return $this->sanitize->sanitize($data, $type, $base); - } - - function get_title() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->category_class($term, $scheme, $label); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = new $this->category_class($term, $scheme, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($categories)) - { - return SimplePie_Misc::array_unique($categories); - } - else - { - return null; - } - } - - function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - function get_authors() - { - $authors = array(); - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - $avatar = null; - $name_date = null; - $uri_date = null; - $avatar_date = null; - - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'])) - { - $avatar = $this->sanitize($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0])); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data'])) - { - $name_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data'])) - { - $uri_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data'])) - { - $avatar_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data']; - } - - if ($name !== null || $email !== null || $uri !== null || $avatar !== null || $name_date !== null || $uri_date !== null || $avatar_date !== null ) - { - $authors[] = new $this->author_class($name, $uri, $email, $avatar, $name_date, $uri_date, $avatar_date); - } - } - if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = new $this->author_class($name, $url, $email); - } - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($authors)) - { - return SimplePie_Misc::array_unique($authors); - } - else - { - return null; - } - } - - function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = new $this->author_class($name, $uri, $email); - } - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = new $this->author_class($name, $url, $email); - } - } - - if (!empty($contributors)) - { - return SimplePie_Misc::array_unique($contributors); - } - else - { - return null; - } - } - - function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if (isset($links[$key])) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Added for parity between the parent-level and the item/entry-level. - */ - function get_permalink() - { - return $this->get_link(0); - } - - function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if (SimplePie_Misc::is_isegment_nz_nc($key)) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - function get_all_discovered_feeds() - { - return $this->all_discovered_feeds; - } - - function get_description() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_copyright() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_language() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['headers']['content-language'])) - { - return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_latitude() - { - - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - function get_longitude() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - function get_image_title() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_image_url() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) - { - return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_image_link() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_image_width() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width')) - { - return round($return[0]['data']); - } - elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return 88.0; - } - else - { - return null; - } - } - - function get_image_height() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height')) - { - return round($return[0]['data']); - } - elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return 31.0; - } - else - { - return null; - } - } - - function get_item_quantity($max = 0) - { - $max = (int) $max; - $qty = count($this->get_items()); - if ($max === 0) - { - return $qty; - } - else - { - return ($qty > $max) ? $max : $qty; - } - } - - function get_item($key = 0) - { - $items = $this->get_items(); - if (isset($items[$key])) - { - return $items[$key]; - } - else - { - return null; - } - } - - function get_items($start = 0, $end = 0) - { - if (!isset($this->data['items'])) - { - if (!empty($this->multifeed_objects)) - { - $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); - } - else - { - $this->data['items'] = array(); - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - } - } - - if (!empty($this->data['items'])) - { - // If we want to order it by date, check if all items have a date, and then sort it - if ($this->order_by_date && empty($this->multifeed_objects)) - { - if (!isset($this->data['ordered_items'])) - { - $do_sort = true; - foreach ($this->data['items'] as $item) - { - if (!$item->get_date('U')) - { - $do_sort = false; - break; - } - } - $item = null; - $this->data['ordered_items'] = $this->data['items']; - if ($do_sort) - { - usort($this->data['ordered_items'], array(&$this, 'sort_items')); - } - } - $items = $this->data['ordered_items']; - } - else - { - $items = $this->data['items']; - } - - // Slice the data as desired - if ($end === 0) - { - return array_slice($items, $start); - } - else - { - return array_slice($items, $start, $end); - } - } - else - { - return array(); - } - } - - /** - * @static - */ - function sort_items($a, $b) - { - return $a->get_date('U') <= $b->get_date('U'); - } - - /** - * @static - */ - function merge_items($urls, $start = 0, $end = 0, $limit = 0) - { - if (is_array($urls) && sizeof($urls) > 0) - { - $items = array(); - foreach ($urls as $arg) - { - if (is_a($arg, 'SimplePie')) - { - $items = array_merge($items, $arg->get_items(0, $limit)); - } - else - { - trigger_error('Arguments must be SimplePie objects', E_USER_WARNING); - } - } - - $do_sort = true; - foreach ($items as $item) - { - if (!$item->get_date('U')) - { - $do_sort = false; - break; - } - } - $item = null; - if ($do_sort) - { - usort($items, array('SimplePie', 'sort_items')); - } - - if ($end === 0) - { - return array_slice($items, $start); - } - else - { - return array_slice($items, $start, $end); - } - } - else - { - trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); - return array(); - } - } -} - -class SimplePie_Item -{ - var $feed; - var $data = array(); - - function SimplePie_Item($feed, $data) - { - $this->feed = $feed; - $this->data = $data; - } - - function __toString() - { - return md5(serialize($this->data)); - } - - /** - * Remove items that link back to this before destroying this object - */ - function __destruct() - { - if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) - { - unset($this->feed); - } - } - - function get_item_tags($namespace, $tag) - { - if (isset($this->data['child'][$namespace][$tag])) - { - return $this->data['child'][$namespace][$tag]; - } - else - { - return null; - } - } - - function get_base($element = array()) - { - return $this->feed->get_base($element); - } - - function sanitize($data, $type, $base = '') - { - return $this->feed->sanitize($data, $type, $base); - } - - function get_feed() - { - return $this->feed; - } - - function get_id($hash = false) - { - if (!$hash) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (($return = $this->get_permalink()) !== null) - { - return $return; - } - elseif (($return = $this->get_title()) !== null) - { - return $return; - } - } - if ($this->get_permalink() !== null || $this->get_title() !== null) - { - return md5($this->get_permalink() . $this->get_title()); - } - else - { - return md5(serialize($this->data)); - } - } - - function get_title() - { - if (!isset($this->data['title'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $this->data['title'] = null; - } - } - return $this->data['title']; - } - - function get_description($description_only = false) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (!$description_only) - { - return $this->get_content(true); - } - else - { - return null; - } - } - - function get_content($content_only = false) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif (!$content_only) - { - return $this->get_description(true); - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = new $this->feed->category_class($term, $scheme, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($categories)) - { - return SimplePie_Misc::array_unique($categories); - } - else - { - return null; - } - } - - function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = new $this->feed->author_class($name, $uri, $email); - } - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = new $this->feed->author_class($name, $url, $email); - } - } - - if (!empty($contributors)) - { - return SimplePie_Misc::array_unique($contributors); - } - else - { - return null; - } - } - - function get_authors() - { - $authors = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - $avatar = null; - $name_date = null; - $uri_date = null; - $avatar_date = null; - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'])) - { - $avatar = $this->sanitize($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0])); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data'])) - { - $name_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data'])) - { - $uri_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data'])) - { - $avatar_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data']; - } - - if ($name !== null || $email !== null || $uri !== null || $avatar !== null || $name_date !== null || $uri_date !== null || $avatar_date !== null ) - { - $authors[] = new $this->feed->author_class($name, $uri, $email, $avatar, $name_date, $uri_date, $avatar_date); - } - } - if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = new $this->feed->author_class($name, $url, $email); - } - } - if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author')) - { - $authors[] = new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($authors)) - { - return SimplePie_Misc::array_unique($authors); - } - elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) - { - return $authors; - } - elseif ($authors = $this->feed->get_authors()) - { - return $authors; - } - else - { - return null; - } - } - - function get_copyright() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_date($date_format = 'j F Y, g:i a') - { - if (!isset($this->data['date'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - - if (!empty($this->data['date']['raw'])) - { - $parser = SimplePie_Parse_Date::get(); - $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']); - } - else - { - $this->data['date'] = null; - } - } - if ($this->data['date']) - { - $date_format = (string) $date_format; - switch ($date_format) - { - case '': - return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); - - case 'U': - return $this->data['date']['parsed']; - - default: - return date($date_format, $this->data['date']['parsed']); - } - } - else - { - return null; - } - } - - function get_local_date($date_format = '%c') - { - if (!$date_format) - { - return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (($date = $this->get_date('U')) !== null) - { - return strftime($date_format, $date); - } - else - { - return null; - } - } - - function get_permalink() - { - $link = $this->get_link(); - $enclosure = $this->get_enclosure(0); - if ($link !== null) - { - return $link; - } - elseif ($enclosure !== null) - { - return $enclosure->get_link(); - } - else - { - return null; - } - } - - function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if ($links[$key] !== null) - { - return $links[$key]; - } - else - { - return null; - } - } - - function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) - { - if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if (SimplePie_Misc::is_isegment_nz_nc($key)) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - /** - * @todo Add ability to prefer one type of content over another (in a media group). - */ - function get_enclosure($key = 0, $prefer = null) - { - $enclosures = $this->get_enclosures(); - if (isset($enclosures[$key])) - { - return $enclosures[$key]; - } - else - { - return null; - } - } - - /** - * Grabs all available enclosures (podcasts, etc.) - * - * Supports the RSS tag, as well as Media RSS and iTunes RSS. - * - * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support. - * - * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4). - * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists). - */ - function get_enclosures() - { - if (!isset($this->data['enclosures'])) - { - $this->data['enclosures'] = array(); - - // Elements - $captions_parent = null; - $categories_parent = null; - $copyrights_parent = null; - $credits_parent = null; - $description_parent = null; - $duration_parent = null; - $hashes_parent = null; - $keywords_parent = null; - $player_parent = null; - $ratings_parent = null; - $restrictions_parent = null; - $thumbnails_parent = null; - $title_parent = null; - - // Let's do the channel and item-level ones first, and just re-use them if we need to. - $parent = $this->get_feed(); - - // CAPTIONS - if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) - { - foreach ($captions as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions_parent[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - } - elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) - { - foreach ($captions as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions_parent[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - } - if (is_array($captions_parent)) - { - $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent)); - } - - // CATEGORIES - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - } - foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - } - foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category) - { - $term = null; - $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; - $label = null; - if (isset($category['attribs']['']['text'])) - { - $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - - if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'])) - { - foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory) - { - if (isset($subcategory['attribs']['']['text'])) - { - $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - } - } - } - if (is_array($categories_parent)) - { - $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - - // COPYRIGHT - if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) - { - $copyright_url = null; - $copyright_label = null; - if (isset($copyright[0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($copyright[0]['data'])) - { - $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights_parent = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) - { - $copyright_url = null; - $copyright_label = null; - if (isset($copyright[0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($copyright[0]['data'])) - { - $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights_parent = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - - // CREDITS - if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) - { - foreach ($credits as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits_parent[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - } - elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) - { - foreach ($credits as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits_parent[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - } - if (is_array($credits_parent)) - { - $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent)); - } - - // DESCRIPTION - if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) - { - if (isset($description_parent[0]['data'])) - { - $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) - { - if (isset($description_parent[0]['data'])) - { - $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - - // DURATION - if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration')) - { - $seconds = null; - $minutes = null; - $hours = null; - if (isset($duration_parent[0]['data'])) - { - $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - if (sizeof($temp) > 0) - { - (int) $seconds = array_pop($temp); - } - if (sizeof($temp) > 0) - { - (int) $minutes = array_pop($temp); - $seconds += $minutes * 60; - } - if (sizeof($temp) > 0) - { - (int) $hours = array_pop($temp); - $seconds += $hours * 3600; - } - unset($temp); - $duration_parent = $seconds; - } - } - - // HASHES - if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) - { - foreach ($hashes_iterator as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes_parent[] = $algo.':'.$value; - } - } - elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) - { - foreach ($hashes_iterator as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes_parent[] = $algo.':'.$value; - } - } - if (is_array($hashes_parent)) - { - $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent)); - } - - // KEYWORDS - if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - if (is_array($keywords_parent)) - { - $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent)); - } - - // PLAYER - if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) - { - if (isset($player_parent[0]['attribs']['']['url'])) - { - $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) - { - if (isset($player_parent[0]['attribs']['']['url'])) - { - $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - - // RATINGS - if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) - { - foreach ($ratings as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) - { - foreach ($ratings as $rating) - { - $rating_scheme = 'urn:itunes'; - $rating_value = null; - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) - { - foreach ($ratings as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) - { - foreach ($ratings as $rating) - { - $rating_scheme = 'urn:itunes'; - $rating_value = null; - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - if (is_array($ratings_parent)) - { - $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent)); - } - - // RESTRICTIONS - if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = 'allow'; - $restriction_type = null; - $restriction_value = 'itunes'; - if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') - { - $restriction_relationship = 'deny'; - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = 'allow'; - $restriction_type = null; - $restriction_value = 'itunes'; - if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') - { - $restriction_relationship = 'deny'; - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - if (is_array($restrictions_parent)) - { - $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent)); - } - - // THUMBNAILS - if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) - { - foreach ($thumbnails as $thumbnail) - { - if (isset($thumbnail['attribs']['']['url'])) - { - $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - } - elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) - { - foreach ($thumbnails as $thumbnail) - { - if (isset($thumbnail['attribs']['']['url'])) - { - $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - } - - // TITLES - if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) - { - if (isset($title_parent[0]['data'])) - { - $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) - { - if (isset($title_parent[0]['data'])) - { - $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - - // Clear the memory - unset($parent); - - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // If we have media:group tags, loop through them. - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) - { - if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) - { - // If we have media:content tags, loop through them. - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - if (is_array($captions)) - { - $captions = array_values(SimplePie_Misc::array_unique($captions)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - if (is_array($captions)) - { - $captions = array_values(SimplePie_Misc::array_unique($captions)); - } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - else - { - $copyrights = $copyrights_parent; - } - - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - if (is_array($credits)) - { - $credits = array_values(SimplePie_Misc::array_unique($credits)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - if (is_array($credits)) - { - $credits = array_values(SimplePie_Misc::array_unique($credits)); - } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); - } - } - else - { - $hashes = $hashes_parent; - } - - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } - - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - if (is_array($ratings)) - { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - if (is_array($ratings)) - { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); - } - } - else - { - $ratings = $ratings_parent; - } - - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - if (is_array($restrictions)) - { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - if (is_array($restrictions)) - { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); - } - } - else - { - $restrictions = $restrictions_parent; - } - - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); - } - } - else - { - $thumbnails = $thumbnails_parent; - } - - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; - } - - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); - } - } - } - } - - // If we have standalone media:content tags, loop through them. - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) - { - foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - if (is_array($captions)) - { - $captions = array_values(SimplePie_Misc::array_unique($captions)); - } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - else - { - $categories = null; - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - else - { - $copyrights = $copyrights_parent; - } - - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - if (is_array($credits)) - { - $credits = array_values(SimplePie_Misc::array_unique($credits)); - } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); - } - } - else - { - $hashes = $hashes_parent; - } - - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } - - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - if (is_array($ratings)) - { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); - } - } - else - { - $ratings = $ratings_parent; - } - - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - if (is_array($restrictions)) - { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); - } - } - else - { - $restrictions = $restrictions_parent; - } - - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); - } - } - else - { - $thumbnails = $thumbnails_parent; - } - - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; - } - - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); - } - } - } - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) - { - if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - $title = $title_parent; - - $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - if (isset($link['attribs']['']['type'])) - { - $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($link['attribs']['']['length'])) - { - $length = ceil($link['attribs']['']['length']); - } - if (isset($link['attribs']['']['title'])) - { - $title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width); - } - } - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) - { - if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - if (isset($link['attribs']['']['type'])) - { - $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($link['attribs']['']['length'])) - { - $length = ceil($link['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); - } - } - - if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure')) - { - if (isset($enclosure[0]['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); - if (isset($enclosure[0]['attribs']['']['type'])) - { - $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($enclosure[0]['attribs']['']['length'])) - { - $length = ceil($enclosure[0]['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); - } - } - - if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) - { - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); - } - - $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures'])); - } - if (!empty($this->data['enclosures'])) - { - return $this->data['enclosures']; - } - else - { - return null; - } - } - - function get_latitude() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - function get_longitude() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - function get_source() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source')) - { - return new $this->feed->source_class($this, $return[0]); - } - else - { - return null; - } - } - - /** - * Creates the add_to_* methods' return data - * - * @access private - * @param string $item_url String to prefix to the item permalink - * @param string $title_url String to prefix to the item title - * (and suffix to the item permalink) - * @return mixed URL if feed exists, false otherwise - */ - function add_to_service($item_url, $title_url = null, $summary_url = null) - { - if ($this->get_permalink() !== null) - { - $return = $item_url . rawurlencode($this->get_permalink()); - if ($title_url !== null && $this->get_title() !== null) - { - $return .= $title_url . rawurlencode($this->get_title()); - } - if ($summary_url !== null && $this->get_description() !== null) - { - $return .= $summary_url . rawurlencode($this->get_description()); - } - return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function add_to_blinklist() - { - return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title='); - } - - function add_to_blogmarks() - { - return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title='); - } - - function add_to_delicious() - { - return $this->add_to_service('http://del.icio.us/post/?v=4&url=', '&title='); - } - - function add_to_digg() - { - return $this->add_to_service('http://digg.com/submit?url=', '&title=', '&bodytext='); - } - - function add_to_furl() - { - return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t='); - } - - function add_to_magnolia() - { - return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title='); - } - - function add_to_myweb20() - { - return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t='); - } - - function add_to_newsvine() - { - return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h='); - } - - function add_to_reddit() - { - return $this->add_to_service('http://reddit.com/submit?url=', '&title='); - } - - function add_to_segnalo() - { - return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title='); - } - - function add_to_simpy() - { - return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title='); - } - - function add_to_spurl() - { - return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title='); - } - - function add_to_wists() - { - return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title='); - } - - function search_technorati() - { - return $this->add_to_service('http://www.technorati.com/search/'); - } -} - -class SimplePie_Source -{ - var $item; - var $data = array(); - - function SimplePie_Source($item, $data) - { - $this->item = $item; - $this->data = $data; - } - - function __toString() - { - return md5(serialize($this->data)); - } - - function get_source_tags($namespace, $tag) - { - if (isset($this->data['child'][$namespace][$tag])) - { - return $this->data['child'][$namespace][$tag]; - } - else - { - return null; - } - } - - function get_base($element = array()) - { - return $this->item->get_base($element); - } - - function sanitize($data, $type, $base = '') - { - return $this->item->sanitize($data, $type, $base); - } - - function get_item() - { - return $this->item; - } - - function get_title() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->item->feed->category_class($term, $scheme, $label); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = new $this->item->feed->category_class($term, $scheme, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($categories)) - { - return SimplePie_Misc::array_unique($categories); - } - else - { - return null; - } - } - - function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - function get_authors() - { - $authors = array(); - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - $avatar = null; - $name_date = null; - $uri_date = null; - $avatar_date = null; - - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'])) - { - $avatar = $this->sanitize($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0])); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data'])) - { - $name_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data'])) - { - $uri_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data'])) - { - $avatar_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data']; - } - - if ($name !== null || $email !== null || $uri !== null || $avatar !== null || $name_date !== null || $uri_date !== null || $avatar_date !== null ) - { - $authors[] = new $this->item->feed->author_class($name, $uri, $email, $avatar, $name_date, $uri_date, $avatar_date); - } - } - if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = new $this->item->feed->author_class($name, $url, $email); - } - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($authors)) - { - return SimplePie_Misc::array_unique($authors); - } - else - { - return null; - } - } - - function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = new $this->item->feed->author_class($name, $uri, $email); - } - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = new $this->item->feed->author_class($name, $url, $email); - } - } - - if (!empty($contributors)) - { - return SimplePie_Misc::array_unique($contributors); - } - else - { - return null; - } - } - - function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if (isset($links[$key])) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Added for parity between the parent-level and the item/entry-level. - */ - function get_permalink() - { - return $this->get_link(0); - } - - function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if (SimplePie_Misc::is_isegment_nz_nc($key)) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - function get_description() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_copyright() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_language() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['xml_lang'])) - { - return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_latitude() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - function get_longitude() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - function get_image_url() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) - { - return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } -} - -class SimplePie_Author -{ - var $name; - var $link; - var $email; - var $avatar; - var $name_date; - var $uri_date; - var $avatar_date; - - // Constructor, used to input the data - function SimplePie_Author($name = null, $link = null, $email = null, $avatar = null, $name_date = null, $uri_date = null, $avatar_date = null) - { - $this->name = $name; - $this->link = $link; - $this->email = $email; - $this->avatar = $avatar; - $this->name_date = $name_date; - $this->uri_date = $uri_date; - $this->avatar_date = $avatar_date; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_name() - { - if ($this->name !== null) - { - return $this->name; - } - else - { - return null; - } - } - - function get_link() - { - if ($this->link !== null) - { - return $this->link; - } - else - { - return null; - } - } - - function get_email() - { - if ($this->email !== null) - { - return $this->email; - } - else - { - return null; - } - } - - function get_avatar() - { - if ($this->avatar !== null) - { - return $this->avatar; - } - else - { - return null; - } - } - - function get_name_date() - { - if ($this->name_date !== null) - { - return $this->name_date; - } - else - { - return null; - } - } - function get_uri_date() - { - if ($this->uri_date !== null) - { - return $this->uri_date; - } - else - { - return null; - } - } - function get_avatar_date() - { - if ($this->avatar_date !== null) - { - return $this->avatar_date; - } - else - { - return null; - } - } - - -} - -class SimplePie_Category -{ - var $term; - var $scheme; - var $label; - - // Constructor, used to input the data - function SimplePie_Category($term = null, $scheme = null, $label = null) - { - $this->term = $term; - $this->scheme = $scheme; - $this->label = $label; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_term() - { - if ($this->term !== null) - { - return $this->term; - } - else - { - return null; - } - } - - function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - function get_label() - { - if ($this->label !== null) - { - return $this->label; - } - else - { - return $this->get_term(); - } - } -} - -class SimplePie_Enclosure -{ - var $bitrate; - var $captions; - var $categories; - var $channels; - var $copyright; - var $credits; - var $description; - var $duration; - var $expression; - var $framerate; - var $handler; - var $hashes; - var $height; - var $javascript; - var $keywords; - var $lang; - var $length; - var $link; - var $medium; - var $player; - var $ratings; - var $restrictions; - var $samplingrate; - var $thumbnails; - var $title; - var $type; - var $width; - - // Constructor, used to input the data - function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null) - { - $this->bitrate = $bitrate; - $this->captions = $captions; - $this->categories = $categories; - $this->channels = $channels; - $this->copyright = $copyright; - $this->credits = $credits; - $this->description = $description; - $this->duration = $duration; - $this->expression = $expression; - $this->framerate = $framerate; - $this->hashes = $hashes; - $this->height = $height; - $this->javascript = $javascript; - $this->keywords = $keywords; - $this->lang = $lang; - $this->length = $length; - $this->link = $link; - $this->medium = $medium; - $this->player = $player; - $this->ratings = $ratings; - $this->restrictions = $restrictions; - $this->samplingrate = $samplingrate; - $this->thumbnails = $thumbnails; - $this->title = $title; - $this->type = $type; - $this->width = $width; - if (class_exists('idna_convert')) - { - $idn = new idna_convert; - $parsed = SimplePie_Misc::parse_url($link); - $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); - } - $this->handler = $this->get_handler(); // Needs to load last - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_bitrate() - { - if ($this->bitrate !== null) - { - return $this->bitrate; - } - else - { - return null; - } - } - - function get_caption($key = 0) - { - $captions = $this->get_captions(); - if (isset($captions[$key])) - { - return $captions[$key]; - } - else - { - return null; - } - } - - function get_captions() - { - if ($this->captions !== null) - { - return $this->captions; - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - if ($this->categories !== null) - { - return $this->categories; - } - else - { - return null; - } - } - - function get_channels() - { - if ($this->channels !== null) - { - return $this->channels; - } - else - { - return null; - } - } - - function get_copyright() - { - if ($this->copyright !== null) - { - return $this->copyright; - } - else - { - return null; - } - } - - function get_credit($key = 0) - { - $credits = $this->get_credits(); - if (isset($credits[$key])) - { - return $credits[$key]; - } - else - { - return null; - } - } - - function get_credits() - { - if ($this->credits !== null) - { - return $this->credits; - } - else - { - return null; - } - } - - function get_description() - { - if ($this->description !== null) - { - return $this->description; - } - else - { - return null; - } - } - - function get_duration($convert = false) - { - if ($this->duration !== null) - { - if ($convert) - { - $time = SimplePie_Misc::time_hms($this->duration); - return $time; - } - else - { - return $this->duration; - } - } - else - { - return null; - } - } - - function get_expression() - { - if ($this->expression !== null) - { - return $this->expression; - } - else - { - return 'full'; - } - } - - function get_extension() - { - if ($this->link !== null) - { - $url = SimplePie_Misc::parse_url($this->link); - if ($url['path'] !== '') - { - return pathinfo($url['path'], PATHINFO_EXTENSION); - } - } - return null; - } - - function get_framerate() - { - if ($this->framerate !== null) - { - return $this->framerate; - } - else - { - return null; - } - } - - function get_handler() - { - return $this->get_real_type(true); - } - - function get_hash($key = 0) - { - $hashes = $this->get_hashes(); - if (isset($hashes[$key])) - { - return $hashes[$key]; - } - else - { - return null; - } - } - - function get_hashes() - { - if ($this->hashes !== null) - { - return $this->hashes; - } - else - { - return null; - } - } - - function get_height() - { - if ($this->height !== null) - { - return $this->height; - } - else - { - return null; - } - } - - function get_language() - { - if ($this->lang !== null) - { - return $this->lang; - } - else - { - return null; - } - } - - function get_keyword($key = 0) - { - $keywords = $this->get_keywords(); - if (isset($keywords[$key])) - { - return $keywords[$key]; - } - else - { - return null; - } - } - - function get_keywords() - { - if ($this->keywords !== null) - { - return $this->keywords; - } - else - { - return null; - } - } - - function get_length() - { - if ($this->length !== null) - { - return $this->length; - } - else - { - return null; - } - } - - function get_link() - { - if ($this->link !== null) - { - return urldecode($this->link); - } - else - { - return null; - } - } - - function get_medium() - { - if ($this->medium !== null) - { - return $this->medium; - } - else - { - return null; - } - } - - function get_player() - { - if ($this->player !== null) - { - return $this->player; - } - else - { - return null; - } - } - - function get_rating($key = 0) - { - $ratings = $this->get_ratings(); - if (isset($ratings[$key])) - { - return $ratings[$key]; - } - else - { - return null; - } - } - - function get_ratings() - { - if ($this->ratings !== null) - { - return $this->ratings; - } - else - { - return null; - } - } - - function get_restriction($key = 0) - { - $restrictions = $this->get_restrictions(); - if (isset($restrictions[$key])) - { - return $restrictions[$key]; - } - else - { - return null; - } - } - - function get_restrictions() - { - if ($this->restrictions !== null) - { - return $this->restrictions; - } - else - { - return null; - } - } - - function get_sampling_rate() - { - if ($this->samplingrate !== null) - { - return $this->samplingrate; - } - else - { - return null; - } - } - - function get_size() - { - $length = $this->get_length(); - if ($length !== null) - { - return round($length/1048576, 2); - } - else - { - return null; - } - } - - function get_thumbnail($key = 0) - { - $thumbnails = $this->get_thumbnails(); - if (isset($thumbnails[$key])) - { - return $thumbnails[$key]; - } - else - { - return null; - } - } - - function get_thumbnails() - { - if ($this->thumbnails !== null) - { - return $this->thumbnails; - } - else - { - return null; - } - } - - function get_title() - { - if ($this->title !== null) - { - return $this->title; - } - else - { - return null; - } - } - - function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } - - function get_width() - { - if ($this->width !== null) - { - return $this->width; - } - else - { - return null; - } - } - - function native_embed($options='') - { - return $this->embed($options, true); - } - - /** - * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'. - */ - function embed($options = '', $native = false) - { - // Set up defaults - $audio = ''; - $video = ''; - $alt = ''; - $altclass = ''; - $loop = 'false'; - $width = 'auto'; - $height = 'auto'; - $bgcolor = '#ffffff'; - $mediaplayer = ''; - $widescreen = false; - $handler = $this->get_handler(); - $type = $this->get_real_type(); - - // Process options and reassign values as necessary - if (is_array($options)) - { - extract($options); - } - else - { - $options = explode(',', $options); - foreach($options as $option) - { - $opt = explode(':', $option, 2); - if (isset($opt[0], $opt[1])) - { - $opt[0] = trim($opt[0]); - $opt[1] = trim($opt[1]); - switch ($opt[0]) - { - case 'audio': - $audio = $opt[1]; - break; - - case 'video': - $video = $opt[1]; - break; - - case 'alt': - $alt = $opt[1]; - break; - - case 'altclass': - $altclass = $opt[1]; - break; - - case 'loop': - $loop = $opt[1]; - break; - - case 'width': - $width = $opt[1]; - break; - - case 'height': - $height = $opt[1]; - break; - - case 'bgcolor': - $bgcolor = $opt[1]; - break; - - case 'mediaplayer': - $mediaplayer = $opt[1]; - break; - - case 'widescreen': - $widescreen = $opt[1]; - break; - } - } - } - } - - $mime = explode('/', $type, 2); - $mime = $mime[0]; - - // Process values for 'auto' - if ($width === 'auto') - { - if ($mime === 'video') - { - if ($height === 'auto') - { - $width = 480; - } - elseif ($widescreen) - { - $width = round((intval($height)/9)*16); - } - else - { - $width = round((intval($height)/3)*4); - } - } - else - { - $width = '100%'; - } - } - - if ($height === 'auto') - { - if ($mime === 'audio') - { - $height = 0; - } - elseif ($mime === 'video') - { - if ($width === 'auto') - { - if ($widescreen) - { - $height = 270; - } - else - { - $height = 360; - } - } - elseif ($widescreen) - { - $height = round((intval($width)/16)*9); - } - else - { - $height = round((intval($width)/4)*3); - } - } - else - { - $height = 376; - } - } - elseif ($mime === 'audio') - { - $height = 0; - } - - // Set proper placeholder value - if ($mime === 'audio') - { - $placeholder = $audio; - } - elseif ($mime === 'video') - { - $placeholder = $video; - } - - $embed = ''; - - // Make sure the JS library is included - if (!$native) - { - static $javascript_outputted = null; - if (!$javascript_outputted && $this->javascript) - { - $embed .= ''; - $javascript_outputted = true; - } - } - - // Odeo Feed MP3's - if ($handler === 'odeo') - { - if ($native) - { - $embed .= ''; - } - else - { - $embed .= ''; - } - } - - // Flash - elseif ($handler === 'flash') - { - if ($native) - { - $embed .= "get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\">"; - } - else - { - $embed .= ""; - } - } - - // Flash Media Player file types. - // Preferred handler for MP3 file types. - elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) - { - $height += 20; - if ($native) - { - $embed .= "get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\">"; - } - else - { - $embed .= ""; - } - } - - // QuickTime 7 file types. Need to test with QuickTime 6. - // Only handle MP3's if the Flash Media Player is not present. - elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) - { - $height += 16; - if ($native) - { - if ($placeholder !== '') - { - $embed .= "get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; - } - else - { - $embed .= "get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; - } - } - else - { - $embed .= ""; - } - } - - // Windows Media - elseif ($handler === 'wmedia') - { - $height += 45; - if ($native) - { - $embed .= "get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\">"; - } - else - { - $embed .= ""; - } - } - - // Everything else - else $embed .= '' . $alt . ''; - - return $embed; - } - - function get_real_type($find_handler = false) - { - // If it's Odeo, let's get it out of the way. - if (substr(strtolower($this->get_link()), 0, 15) === 'http://odeo.com') - { - return 'odeo'; - } - - // Mime-types by handler. - $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash - $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player - $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime - $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media - $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3 - - if ($this->get_type() !== null) - { - $type = strtolower($this->type); - } - else - { - $type = null; - } - - // If we encounter an unsupported mime-type, check the file extension and guess intelligently. - if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) - { - switch (strtolower($this->get_extension())) - { - // Audio mime-types - case 'aac': - case 'adts': - $type = 'audio/acc'; - break; - - case 'aif': - case 'aifc': - case 'aiff': - case 'cdda': - $type = 'audio/aiff'; - break; - - case 'bwf': - $type = 'audio/wav'; - break; - - case 'kar': - case 'mid': - case 'midi': - case 'smf': - $type = 'audio/midi'; - break; - - case 'm4a': - $type = 'audio/x-m4a'; - break; - - case 'mp3': - case 'swa': - $type = 'audio/mp3'; - break; - - case 'wav': - $type = 'audio/wav'; - break; - - case 'wax': - $type = 'audio/x-ms-wax'; - break; - - case 'wma': - $type = 'audio/x-ms-wma'; - break; - - // Video mime-types - case '3gp': - case '3gpp': - $type = 'video/3gpp'; - break; - - case '3g2': - case '3gp2': - $type = 'video/3gpp2'; - break; - - case 'asf': - $type = 'video/x-ms-asf'; - break; - - case 'flv': - $type = 'video/x-flv'; - break; - - case 'm1a': - case 'm1s': - case 'm1v': - case 'm15': - case 'm75': - case 'mp2': - case 'mpa': - case 'mpeg': - case 'mpg': - case 'mpm': - case 'mpv': - $type = 'video/mpeg'; - break; - - case 'm4v': - $type = 'video/x-m4v'; - break; - - case 'mov': - case 'qt': - $type = 'video/quicktime'; - break; - - case 'mp4': - case 'mpg4': - $type = 'video/mp4'; - break; - - case 'sdv': - $type = 'video/sd-video'; - break; - - case 'wm': - $type = 'video/x-ms-wm'; - break; - - case 'wmv': - $type = 'video/x-ms-wmv'; - break; - - case 'wvx': - $type = 'video/x-ms-wvx'; - break; - - // Flash mime-types - case 'spl': - $type = 'application/futuresplash'; - break; - - case 'swf': - $type = 'application/x-shockwave-flash'; - break; - } - } - - if ($find_handler) - { - if (in_array($type, $types_flash)) - { - return 'flash'; - } - elseif (in_array($type, $types_fmedia)) - { - return 'fmedia'; - } - elseif (in_array($type, $types_quicktime)) - { - return 'quicktime'; - } - elseif (in_array($type, $types_wmedia)) - { - return 'wmedia'; - } - elseif (in_array($type, $types_mp3)) - { - return 'mp3'; - } - else - { - return null; - } - } - else - { - return $type; - } - } -} - -class SimplePie_Caption -{ - var $type; - var $lang; - var $startTime; - var $endTime; - var $text; - - // Constructor, used to input the data - function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null) - { - $this->type = $type; - $this->lang = $lang; - $this->startTime = $startTime; - $this->endTime = $endTime; - $this->text = $text; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_endtime() - { - if ($this->endTime !== null) - { - return $this->endTime; - } - else - { - return null; - } - } - - function get_language() - { - if ($this->lang !== null) - { - return $this->lang; - } - else - { - return null; - } - } - - function get_starttime() - { - if ($this->startTime !== null) - { - return $this->startTime; - } - else - { - return null; - } - } - - function get_text() - { - if ($this->text !== null) - { - return $this->text; - } - else - { - return null; - } - } - - function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } -} - -class SimplePie_Credit -{ - var $role; - var $scheme; - var $name; - - // Constructor, used to input the data - function SimplePie_Credit($role = null, $scheme = null, $name = null) - { - $this->role = $role; - $this->scheme = $scheme; - $this->name = $name; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_role() - { - if ($this->role !== null) - { - return $this->role; - } - else - { - return null; - } - } - - function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - function get_name() - { - if ($this->name !== null) - { - return $this->name; - } - else - { - return null; - } - } -} - -class SimplePie_Copyright -{ - var $url; - var $label; - - // Constructor, used to input the data - function SimplePie_Copyright($url = null, $label = null) - { - $this->url = $url; - $this->label = $label; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_url() - { - if ($this->url !== null) - { - return $this->url; - } - else - { - return null; - } - } - - function get_attribution() - { - if ($this->label !== null) - { - return $this->label; - } - else - { - return null; - } - } -} - -class SimplePie_Rating -{ - var $scheme; - var $value; - - // Constructor, used to input the data - function SimplePie_Rating($scheme = null, $value = null) - { - $this->scheme = $scheme; - $this->value = $value; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - function get_value() - { - if ($this->value !== null) - { - return $this->value; - } - else - { - return null; - } - } -} - -class SimplePie_Restriction -{ - var $relationship; - var $type; - var $value; - - // Constructor, used to input the data - function SimplePie_Restriction($relationship = null, $type = null, $value = null) - { - $this->relationship = $relationship; - $this->type = $type; - $this->value = $value; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_relationship() - { - if ($this->relationship !== null) - { - return $this->relationship; - } - else - { - return null; - } - } - - function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } - - function get_value() - { - if ($this->value !== null) - { - return $this->value; - } - else - { - return null; - } - } -} - -/** - * @todo Move to properly supporting RFC2616 (HTTP/1.1) - */ -class SimplePie_File -{ - var $url; - var $useragent; - var $success = true; - var $headers = array(); - var $body; - var $status_code; - var $redirects = 0; - var $error; - var $method = SIMPLEPIE_FILE_SOURCE_NONE; - - function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) - { - if (class_exists('idna_convert')) - { - $idn = new idna_convert; - $parsed = SimplePie_Misc::parse_url($url); - $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); - } - $this->url = $url; - $this->useragent = $useragent; - if (preg_match('/^http(s)?:\/\//i', $url)) - { - if ($useragent === null) - { - $useragent = ini_get('user_agent'); - $this->useragent = $useragent; - } - if (!is_array($headers)) - { - $headers = array(); - } - if (!$force_fsockopen && function_exists('curl_exec')) - { - $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; - $fp = curl_init(); - $headers2 = array(); - foreach ($headers as $key => $value) - { - $headers2[] = "$key: $value"; - } - if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=')) - { - curl_setopt($fp, CURLOPT_ENCODING, ''); - } - curl_setopt($fp, CURLOPT_URL, $url); - curl_setopt($fp, CURLOPT_HEADER, 1); - curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_REFERER, $url); - curl_setopt($fp, CURLOPT_USERAGENT, $useragent); - curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); - if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>=')) - { - curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1); - curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects); - } - - $this->headers = curl_exec($fp); - if (curl_errno($fp) === 23 || curl_errno($fp) === 61) - { - curl_setopt($fp, CURLOPT_ENCODING, 'none'); - $this->headers = curl_exec($fp); - } - if (curl_errno($fp)) - { - $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); - $this->success = false; - } - else - { - $info = curl_getinfo($fp); - curl_close($fp); - $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); - $this->headers = array_pop($this->headers); - $parser = new SimplePie_HTTP_Parser($this->headers); - if ($parser->parse()) - { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) - { - $this->redirects++; - $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); - return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); - } - } - } - } - else - { - $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; - $url_parts = parse_url($url); - if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') - { - $url_parts['host'] = "ssl://$url_parts[host]"; - $url_parts['port'] = 443; - } - if (!isset($url_parts['port'])) - { - $url_parts['port'] = 80; - } - $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout); - if (!$fp) - { - $this->error = 'fsockopen error: ' . $errstr; - $this->success = false; - } - else - { - stream_set_timeout($fp, $timeout); - if (isset($url_parts['path'])) - { - if (isset($url_parts['query'])) - { - $get = "$url_parts[path]?$url_parts[query]"; - } - else - { - $get = $url_parts['path']; - } - } - else - { - $get = '/'; - } - $out = "GET $get HTTP/1.0\r\n"; - $out .= "Host: $url_parts[host]\r\n"; - $out .= "User-Agent: $useragent\r\n"; - if (extension_loaded('zlib')) - { - $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; - } - - if (isset($url_parts['user']) && isset($url_parts['pass'])) - { - $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; - } - foreach ($headers as $key => $value) - { - $out .= "$key: $value\r\n"; - } - $out .= "Connection: Close\r\n\r\n"; - fwrite($fp, $out); - - $info = stream_get_meta_data($fp); - - $this->headers = ''; - while (!$info['eof'] && !$info['timed_out']) - { - $this->headers .= fread($fp, 1160); - $info = stream_get_meta_data($fp); - } - if (!$info['timed_out']) - { - $parser = new SimplePie_HTTP_Parser($this->headers); - if ($parser->parse()) - { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) - { - $this->redirects++; - $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); - return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); - } - if (isset($this->headers['content-encoding'])) - { - // Hey, we act dumb elsewhere, so let's do that here too - switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) - { - case 'gzip': - case 'x-gzip': - $decoder = new SimplePie_gzdecode($this->body); - if (!$decoder->parse()) - { - $this->error = 'Unable to decode HTTP "gzip" stream'; - $this->success = false; - } - else - { - $this->body = $decoder->data; - } - break; - - case 'deflate': - if (($body = gzuncompress($this->body)) === false) - { - if (($body = gzinflate($this->body)) === false) - { - $this->error = 'Unable to decode HTTP "deflate" stream'; - $this->success = false; - } - } - $this->body = $body; - break; - - default: - $this->error = 'Unknown content coding'; - $this->success = false; - } - } - } - } - else - { - $this->error = 'fsocket timed out'; - $this->success = false; - } - fclose($fp); - } - } - } - else - { - $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS; - if (!$this->body = file_get_contents($url)) - { - $this->error = 'file_get_contents could not read the file'; - $this->success = false; - } - } - } -} - -/** - * HTTP Response Parser - * - * @package SimplePie - */ -class SimplePie_HTTP_Parser -{ - /** - * HTTP Version - * - * @access public - * @var float - */ - var $http_version = 0.0; - - /** - * Status code - * - * @access public - * @var int - */ - var $status_code = 0; - - /** - * Reason phrase - * - * @access public - * @var string - */ - var $reason = ''; - - /** - * Key/value pairs of the headers - * - * @access public - * @var array - */ - var $headers = array(); - - /** - * Body of the response - * - * @access public - * @var string - */ - var $body = ''; - - /** - * Current state of the state machine - * - * @access private - * @var string - */ - var $state = 'http_version'; - - /** - * Input data - * - * @access private - * @var string - */ - var $data = ''; - - /** - * Input data length (to avoid calling strlen() everytime this is needed) - * - * @access private - * @var int - */ - var $data_length = 0; - - /** - * Current position of the pointer - * - * @var int - * @access private - */ - var $position = 0; - - /** - * Name of the hedaer currently being parsed - * - * @access private - * @var string - */ - var $name = ''; - - /** - * Value of the hedaer currently being parsed - * - * @access private - * @var string - */ - var $value = ''; - - /** - * Create an instance of the class with the input data - * - * @access public - * @param string $data Input data - */ - function SimplePie_HTTP_Parser($data) - { - $this->data = $data; - $this->data_length = strlen($this->data); - } - - /** - * Parse the input data - * - * @access public - * @return bool true on success, false on failure - */ - function parse() - { - while ($this->state && $this->state !== 'emit' && $this->has_data()) - { - $state = $this->state; - $this->$state(); - } - $this->data = ''; - if ($this->state === 'emit' || $this->state === 'body') - { - return true; - } - else - { - $this->http_version = ''; - $this->status_code = ''; - $this->reason = ''; - $this->headers = array(); - $this->body = ''; - return false; - } - } - - /** - * Check whether there is data beyond the pointer - * - * @access private - * @return bool true if there is further data, false if not - */ - function has_data() - { - return (bool) ($this->position < $this->data_length); - } - - /** - * See if the next character is LWS - * - * @access private - * @return bool true if the next character is LWS, false if not - */ - function is_linear_whitespace() - { - return (bool) ($this->data[$this->position] === "\x09" - || $this->data[$this->position] === "\x20" - || ($this->data[$this->position] === "\x0A" - && isset($this->data[$this->position + 1]) - && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20"))); - } - - /** - * Parse the HTTP version - * - * @access private - */ - function http_version() - { - if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') - { - $len = strspn($this->data, '0123456789.', 5); - $this->http_version = substr($this->data, 5, $len); - $this->position += 5 + $len; - if (substr_count($this->http_version, '.') <= 1) - { - $this->http_version = (float) $this->http_version; - $this->position += strspn($this->data, "\x09\x20", $this->position); - $this->state = 'status'; - } - else - { - $this->state = false; - } - } - else - { - $this->state = false; - } - } - - /** - * Parse the status code - * - * @access private - */ - function status() - { - if ($len = strspn($this->data, '0123456789', $this->position)) - { - $this->status_code = (int) substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'reason'; - } - else - { - $this->state = false; - } - } - - /** - * Parse the reason phrase - * - * @access private - */ - function reason() - { - $len = strcspn($this->data, "\x0A", $this->position); - $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20"); - $this->position += $len + 1; - $this->state = 'new_line'; - } - - /** - * Deal with a new line, shifting data around as needed - * - * @access private - */ - function new_line() - { - $this->value = trim($this->value, "\x0D\x20"); - if ($this->name !== '' && $this->value !== '') - { - $this->name = strtolower($this->name); - if (isset($this->headers[$this->name])) - { - $this->headers[$this->name] .= ', ' . $this->value; - } - else - { - $this->headers[$this->name] = $this->value; - } - } - $this->name = ''; - $this->value = ''; - if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") - { - $this->position += 2; - $this->state = 'body'; - } - elseif ($this->data[$this->position] === "\x0A") - { - $this->position++; - $this->state = 'body'; - } - else - { - $this->state = 'name'; - } - } - - /** - * Parse a header name - * - * @access private - */ - function name() - { - $len = strcspn($this->data, "\x0A:", $this->position); - if (isset($this->data[$this->position + $len])) - { - if ($this->data[$this->position + $len] === "\x0A") - { - $this->position += $len; - $this->state = 'new_line'; - } - else - { - $this->name = substr($this->data, $this->position, $len); - $this->position += $len + 1; - $this->state = 'value'; - } - } - else - { - $this->state = false; - } - } - - /** - * Parse LWS, replacing consecutive LWS characters with a single space - * - * @access private - */ - function linear_whitespace() - { - do - { - if (substr($this->data, $this->position, 2) === "\x0D\x0A") - { - $this->position += 2; - } - elseif ($this->data[$this->position] === "\x0A") - { - $this->position++; - } - $this->position += strspn($this->data, "\x09\x20", $this->position); - } while ($this->has_data() && $this->is_linear_whitespace()); - $this->value .= "\x20"; - } - - /** - * See what state to move to while within non-quoted header values - * - * @access private - */ - function value() - { - if ($this->is_linear_whitespace()) - { - $this->linear_whitespace(); - } - else - { - switch ($this->data[$this->position]) - { - case '"': - $this->position++; - $this->state = 'quote'; - break; - - case "\x0A": - $this->position++; - $this->state = 'new_line'; - break; - - default: - $this->state = 'value_char'; - break; - } - } - } - - /** - * Parse a header value while outside quotes - * - * @access private - */ - function value_char() - { - $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position); - $this->value .= substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'value'; - } - - /** - * See what state to move to while within quoted header values - * - * @access private - */ - function quote() - { - if ($this->is_linear_whitespace()) - { - $this->linear_whitespace(); - } - else - { - switch ($this->data[$this->position]) - { - case '"': - $this->position++; - $this->state = 'value'; - break; - - case "\x0A": - $this->position++; - $this->state = 'new_line'; - break; - - case '\\': - $this->position++; - $this->state = 'quote_escaped'; - break; - - default: - $this->state = 'quote_char'; - break; - } - } - } - - /** - * Parse a header value while within quotes - * - * @access private - */ - function quote_char() - { - $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position); - $this->value .= substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'value'; - } - - /** - * Parse an escaped character within quotes - * - * @access private - */ - function quote_escaped() - { - $this->value .= $this->data[$this->position]; - $this->position++; - $this->state = 'quote'; - } - - /** - * Parse the body - * - * @access private - */ - function body() - { - $this->body = substr($this->data, $this->position); - $this->state = 'emit'; - } -} - -/** - * gzdecode - * - * @package SimplePie - */ -class SimplePie_gzdecode -{ - /** - * Compressed data - * - * @access private - * @see gzdecode::$data - */ - var $compressed_data; - - /** - * Size of compressed data - * - * @access private - */ - var $compressed_size; - - /** - * Minimum size of a valid gzip string - * - * @access private - */ - var $min_compressed_size = 18; - - /** - * Current position of pointer - * - * @access private - */ - var $position = 0; - - /** - * Flags (FLG) - * - * @access private - */ - var $flags; - - /** - * Uncompressed data - * - * @access public - * @see gzdecode::$compressed_data - */ - var $data; - - /** - * Modified time - * - * @access public - */ - var $MTIME; - - /** - * Extra Flags - * - * @access public - */ - var $XFL; - - /** - * Operating System - * - * @access public - */ - var $OS; - - /** - * Subfield ID 1 - * - * @access public - * @see gzdecode::$extra_field - * @see gzdecode::$SI2 - */ - var $SI1; - - /** - * Subfield ID 2 - * - * @access public - * @see gzdecode::$extra_field - * @see gzdecode::$SI1 - */ - var $SI2; - - /** - * Extra field content - * - * @access public - * @see gzdecode::$SI1 - * @see gzdecode::$SI2 - */ - var $extra_field; - - /** - * Original filename - * - * @access public - */ - var $filename; - - /** - * Human readable comment - * - * @access public - */ - var $comment; - - /** - * Don't allow anything to be set - * - * @access public - */ - function __set($name, $value) - { - trigger_error("Cannot write property $name", E_USER_ERROR); - } - - /** - * Set the compressed string and related properties - * - * @access public - */ - function SimplePie_gzdecode($data) - { - $this->compressed_data = $data; - $this->compressed_size = strlen($data); - } - - /** - * Decode the GZIP stream - * - * @access public - */ - function parse() - { - if ($this->compressed_size >= $this->min_compressed_size) - { - // Check ID1, ID2, and CM - if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") - { - return false; - } - - // Get the FLG (FLaGs) - $this->flags = ord($this->compressed_data[3]); - - // FLG bits above (1 << 4) are reserved - if ($this->flags > 0x1F) - { - return false; - } - - // Advance the pointer after the above - $this->position += 4; - - // MTIME - $mtime = substr($this->compressed_data, $this->position, 4); - // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness - if (current(unpack('S', "\x00\x01")) === 1) - { - $mtime = strrev($mtime); - } - $this->MTIME = current(unpack('l', $mtime)); - $this->position += 4; - - // Get the XFL (eXtra FLags) - $this->XFL = ord($this->compressed_data[$this->position++]); - - // Get the OS (Operating System) - $this->OS = ord($this->compressed_data[$this->position++]); - - // Parse the FEXTRA - if ($this->flags & 4) - { - // Read subfield IDs - $this->SI1 = $this->compressed_data[$this->position++]; - $this->SI2 = $this->compressed_data[$this->position++]; - - // SI2 set to zero is reserved for future use - if ($this->SI2 === "\x00") - { - return false; - } - - // Get the length of the extra field - $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - $position += 2; - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 4; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the extra field to the given data - $this->extra_field = substr($this->compressed_data, $this->position, $len); - $this->position += $len; - } - else - { - return false; - } - } - - // Parse the FNAME - if ($this->flags & 8) - { - // Get the length of the filename - $len = strcspn($this->compressed_data, "\x00", $this->position); - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 1; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the original filename to the given string - $this->filename = substr($this->compressed_data, $this->position, $len); - $this->position += $len + 1; - } - else - { - return false; - } - } - - // Parse the FCOMMENT - if ($this->flags & 16) - { - // Get the length of the comment - $len = strcspn($this->compressed_data, "\x00", $this->position); - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 1; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the original comment to the given string - $this->comment = substr($this->compressed_data, $this->position, $len); - $this->position += $len + 1; - } - else - { - return false; - } - } - - // Parse the FHCRC - if ($this->flags & 2) - { - // Check the length of the string is still valid - $this->min_compressed_size += $len + 2; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Read the CRC - $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - - // Check the CRC matches - if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) - { - $this->position += 2; - } - else - { - return false; - } - } - else - { - return false; - } - } - - // Decompress the actual data - if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) - { - return false; - } - else - { - $this->position = $this->compressed_size - 8; - } - - // Check CRC of data - $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); - $this->position += 4; - /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc)) - { - return false; - }*/ - - // Check ISIZE of data - $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4))); - $this->position += 4; - if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) - { - return false; - } - - // Wow, against all odds, we've actually got a valid gzip string - return true; - } - else - { - return false; - } - } -} - -class SimplePie_Cache -{ - /** - * Don't call the constructor. Please. - * - * @access private - */ - function SimplePie_Cache() - { - trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR); - } - - /** - * Create a new SimplePie_Cache object - * - * @static - * @access public - */ - function create($location, $filename, $extension) - { - $location_iri = new SimplePie_IRI($location); - switch ($location_iri->get_scheme()) - { - case 'mysql': - if (extension_loaded('mysql')) - { - return new SimplePie_Cache_MySQL($location_iri, $filename, $extension); - } - break; - - default: - return new SimplePie_Cache_File($location, $filename, $extension); - } - } -} - -class SimplePie_Cache_File -{ - var $location; - var $filename; - var $extension; - var $name; - - function SimplePie_Cache_File($location, $filename, $extension) - { - $this->location = $location; - $this->filename = $filename; - $this->extension = $extension; - $this->name = "$this->location/$this->filename.$this->extension"; - } - - function save($data) - { - if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location)) - { - if (is_a($data, 'SimplePie')) - { - $data = $data->data; - } - - $data = serialize($data); - - if (function_exists('file_put_contents')) - { - return (bool) file_put_contents($this->name, $data); - } - else - { - $fp = fopen($this->name, 'wb'); - if ($fp) - { - fwrite($fp, $data); - fclose($fp); - return true; - } - } - } - return false; - } - - function load() - { - if (file_exists($this->name) && is_readable($this->name)) - { - return unserialize(file_get_contents($this->name)); - } - return false; - } - - function mtime() - { - if (file_exists($this->name)) - { - return filemtime($this->name); - } - return false; - } - - function touch() - { - if (file_exists($this->name)) - { - return touch($this->name); - } - return false; - } - - function unlink() - { - if (file_exists($this->name)) - { - return unlink($this->name); - } - return false; - } -} - -class SimplePie_Cache_DB -{ - function prepare_simplepie_object_for_cache($data) - { - $items = $data->get_items(); - $items_by_id = array(); - - if (!empty($items)) - { - foreach ($items as $item) - { - $items_by_id[$item->get_id()] = $item; - } - - if (count($items_by_id) !== count($items)) - { - $items_by_id = array(); - foreach ($items as $item) - { - $items_by_id[$item->get_id(true)] = $item; - } - } - - if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]; - } - else - { - $channel = null; - } - - if ($channel !== null) - { - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']); - } - } - if (isset($data->data['items'])) - { - unset($data->data['items']); - } - if (isset($data->data['ordered_items'])) - { - unset($data->data['ordered_items']); - } - } - return array(serialize($data->data), $items_by_id); - } -} - -class SimplePie_Cache_MySQL extends SimplePie_Cache_DB -{ - var $mysql; - var $options; - var $id; - - function SimplePie_Cache_MySQL($mysql_location, $name, $extension) - { - $host = $mysql_location->get_host(); - if (SimplePie_Misc::stripos($host, 'unix(') === 0 && substr($host, -1) === ')') - { - $server = ':' . substr($host, 5, -1); - } - else - { - $server = $host; - if ($mysql_location->get_port() !== null) - { - $server .= ':' . $mysql_location->get_port(); - } - } - - if (strpos($mysql_location->get_userinfo(), ':') !== false) - { - list($username, $password) = explode(':', $mysql_location->get_userinfo(), 2); - } - else - { - $username = $mysql_location->get_userinfo(); - $password = null; - } - - if ($this->mysql = mysql_connect($server, $username, $password)) - { - $this->id = $name . $extension; - $this->options = SimplePie_Misc::parse_str($mysql_location->get_query()); - if (!isset($this->options['prefix'][0])) - { - $this->options['prefix'][0] = ''; - } - - if (mysql_select_db(ltrim($mysql_location->get_path(), '/')) - && mysql_query('SET NAMES utf8') - && ($query = mysql_unbuffered_query('SHOW TABLES'))) - { - $db = array(); - while ($row = mysql_fetch_row($query)) - { - $db[] = $row[0]; - } - - if (!in_array($this->options['prefix'][0] . 'cache_data', $db)) - { - if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))')) - { - $this->mysql = null; - } - } - - if (!in_array($this->options['prefix'][0] . 'items', $db)) - { - if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))')) - { - $this->mysql = null; - } - } - } - else - { - $this->mysql = null; - } - } - } - - function save($data) - { - if ($this->mysql) - { - $feed_id = "'" . mysql_real_escape_string($this->id) . "'"; - - if (is_a($data, 'SimplePie')) - { - if (SIMPLEPIE_PHP5) - { - // This keyword needs to defy coding standards for PHP4 compatibility - $data = clone($data); - } - - $prepared = $this->prepare_simplepie_object_for_cache($data); - - if ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql)) - { - if (mysql_num_rows($query)) - { - $items = count($prepared[1]); - if ($items) - { - $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = ' . $items . ', `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id; - } - else - { - $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id; - } - - if (!mysql_query($sql, $this->mysql)) - { - return false; - } - } - elseif (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(' . $feed_id . ', ' . count($prepared[1]) . ', \'' . mysql_real_escape_string($prepared[0]) . '\', ' . time() . ')', $this->mysql)) - { - return false; - } - - $ids = array_keys($prepared[1]); - if (!empty($ids)) - { - foreach ($ids as $id) - { - $database_ids[] = mysql_real_escape_string($id); - } - - if ($query = mysql_unbuffered_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'items` WHERE `id` = \'' . implode('\' OR `id` = \'', $database_ids) . '\' AND `feed_id` = ' . $feed_id, $this->mysql)) - { - $existing_ids = array(); - while ($row = mysql_fetch_row($query)) - { - $existing_ids[] = $row[0]; - } - - $new_ids = array_diff($ids, $existing_ids); - - foreach ($new_ids as $new_id) - { - if (!($date = $prepared[1][$new_id]->get_date('U'))) - { - $date = time(); - } - - if (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(' . $feed_id . ', \'' . mysql_real_escape_string($new_id) . '\', \'' . mysql_real_escape_string(serialize($prepared[1][$new_id]->data)) . '\', ' . $date . ')', $this->mysql)) - { - return false; - } - } - return true; - } - } - else - { - return true; - } - } - } - elseif ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql)) - { - if (mysql_num_rows($query)) - { - if (mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = 0, `data` = \'' . mysql_real_escape_string(serialize($data)) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id, $this->mysql)) - { - return true; - } - } - elseif (mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(\'' . mysql_real_escape_string($this->id) . '\', 0, \'' . mysql_real_escape_string(serialize($data)) . '\', ' . time() . ')', $this->mysql)) - { - return true; - } - } - } - return false; - } - - function load() - { - if ($this->mysql && ($query = mysql_query('SELECT `items`, `data` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query))) - { - $data = unserialize($row[1]); - - if (isset($this->options['items'][0])) - { - $items = (int) $this->options['items'][0]; - } - else - { - $items = (int) $row[0]; - } - - if ($items !== 0) - { - if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]; - } - else - { - $feed = null; - } - - if ($feed !== null) - { - $sql = 'SELECT `data` FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . '\' ORDER BY `posted` DESC'; - if ($items > 0) - { - $sql .= ' LIMIT ' . $items; - } - - if ($query = mysql_unbuffered_query($sql, $this->mysql)) - { - while ($row = mysql_fetch_row($query)) - { - $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row[0]); - } - } - else - { - return false; - } - } - } - return $data; - } - return false; - } - - function mtime() - { - if ($this->mysql && ($query = mysql_query('SELECT `mtime` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query))) - { - return $row[0]; - } - else - { - return false; - } - } - - function touch() - { - if ($this->mysql && ($query = mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `mtime` = ' . time() . ' WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && mysql_affected_rows($this->mysql)) - { - return true; - } - else - { - return false; - } - } - - function unlink() - { - if ($this->mysql && ($query = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($query2 = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql))) - { - return true; - } - else - { - return false; - } - } -} - -class SimplePie_Misc -{ - function time_hms($seconds) - { - $time = ''; - - $hours = floor($seconds / 3600); - $remainder = $seconds % 3600; - if ($hours > 0) - { - $time .= $hours.':'; - } - - $minutes = floor($remainder / 60); - $seconds = $remainder % 60; - if ($minutes < 10 && $hours > 0) - { - $minutes = '0' . $minutes; - } - if ($seconds < 10) - { - $seconds = '0' . $seconds; - } - - $time .= $minutes.':'; - $time .= $seconds; - - return $time; - } - - function absolutize_url($relative, $base) - { -return $relative; - $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative); - return $iri->get_iri(); - } - - function remove_dot_segments($input) - { - $output = ''; - while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') - { - // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, - if (strpos($input, '../') === 0) - { - $input = substr($input, 3); - } - elseif (strpos($input, './') === 0) - { - $input = substr($input, 2); - } - // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, - elseif (strpos($input, '/./') === 0) - { - $input = substr_replace($input, '/', 0, 3); - } - elseif ($input === '/.') - { - $input = '/'; - } - // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, - elseif (strpos($input, '/../') === 0) - { - $input = substr_replace($input, '/', 0, 4); - $output = substr_replace($output, '', strrpos($output, '/')); - } - elseif ($input === '/..') - { - $input = '/'; - $output = substr_replace($output, '', strrpos($output, '/')); - } - // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, - elseif ($input === '.' || $input === '..') - { - $input = ''; - } - // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer - elseif (($pos = strpos($input, '/', 1)) !== false) - { - $output .= substr($input, 0, $pos); - $input = substr_replace($input, '', 0, $pos); - } - else - { - $output .= $input; - $input = ''; - } - } - return $output . $input; - } - - function get_element($realname, $string) - { - $return = array(); - $name = preg_quote($realname, '/'); - if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) - { - for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) - { - $return[$i]['tag'] = $realname; - $return[$i]['full'] = $matches[$i][0][0]; - $return[$i]['offset'] = $matches[$i][0][1]; - if (strlen($matches[$i][3][0]) <= 2) - { - $return[$i]['self_closing'] = true; - } - else - { - $return[$i]['self_closing'] = false; - $return[$i]['content'] = $matches[$i][4][0]; - } - $return[$i]['attribs'] = array(); - if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) - { - for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) - { - if (count($attribs[$j]) === 2) - { - $attribs[$j][2] = $attribs[$j][1]; - } - $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8'); - } - } - } - } - return $return; - } - - function element_implode($element) - { - $full = "<$element[tag]"; - foreach ($element['attribs'] as $key => $value) - { - $key = strtolower($key); - $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; - } - if ($element['self_closing']) - { - $full .= ' />'; - } - else - { - $full .= ">$element[content]"; - } - return $full; - } - - function error($message, $level, $file, $line) - { - if ((ini_get('error_reporting') & $level) > 0) - { - switch ($level) - { - case E_USER_ERROR: - $note = 'PHP Error'; - break; - case E_USER_WARNING: - $note = 'PHP Warning'; - break; - case E_USER_NOTICE: - $note = 'PHP Notice'; - break; - default: - $note = 'Unknown Error'; - break; - } - - $log_error = true; - if (!function_exists('error_log')) - { - $log_error = false; - } - - $log_file = @ini_get('error_log'); - if (!empty($log_file) && ('syslog' != $log_file) && !@is_writable($log_file)) - { - $log_error = false; - } - - if ($log_error) - { - @error_log("$note: $message in $file on line $line", 0); - } - } - - return $message; - } - - /** - * If a file has been cached, retrieve and display it. - * - * This is most useful for caching images (get_favicon(), etc.), - * however it works for all cached files. This WILL NOT display ANY - * file/image/page/whatever, but rather only display what has already - * been cached by SimplePie. - * - * @access public - * @see SimplePie::get_favicon() - * @param str $identifier_url URL that is used to identify the content. - * This may or may not be the actual URL of the live content. - * @param str $cache_location Location of SimplePie's cache. Defaults - * to './cache'. - * @param str $cache_extension The file extension that the file was - * cached with. Defaults to 'spc'. - * @param str $cache_class Name of the cache-handling class being used - * in SimplePie. Defaults to 'SimplePie_Cache', and should be left - * as-is unless you've overloaded the class. - * @param str $cache_name_function Obsolete. Exists for backwards - * compatibility reasons only. - */ - function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5') - { - $cache = call_user_func(array($cache_class, 'create'), $cache_location, $identifier_url, $cache_extension); - - if ($file = $cache->load()) - { - if (isset($file['headers']['content-type'])) - { - header('Content-type:' . $file['headers']['content-type']); - } - else - { - header('Content-type: application/octet-stream'); - } - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days - echo $file['body']; - exit; - } - - die('Cached file for ' . $identifier_url . ' cannot be found.'); - } - - function fix_protocol($url, $http = 1) - { - $url = SimplePie_Misc::normalize_url($url); - $parsed = SimplePie_Misc::parse_url($url); - if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') - { - return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); - } - - if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) - { - return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); - } - - if ($http === 2 && $parsed['scheme'] !== '') - { - return "feed:$url"; - } - elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') - { - return substr_replace($url, 'podcast', 0, 4); - } - elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') - { - return substr_replace($url, 'itpc', 0, 4); - } - else - { - return $url; - } - } - - function parse_url($url) - { - $iri = new SimplePie_IRI($url); - return array( - 'scheme' => (string) $iri->get_scheme(), - 'authority' => (string) $iri->get_authority(), - 'path' => (string) $iri->get_path(), - 'query' => (string) $iri->get_query(), - 'fragment' => (string) $iri->get_fragment() - ); - } - - function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') - { - $iri = new SimplePie_IRI(''); - $iri->set_scheme($scheme); - $iri->set_authority($authority); - $iri->set_path($path); - $iri->set_query($query); - $iri->set_fragment($fragment); - return $iri->get_iri(); - } - - function normalize_url($url) - { - $iri = new SimplePie_IRI($url); - return $iri->get_iri(); - } - - function percent_encoding_normalization($match) - { - $integer = hexdec($match[1]); - if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) - { - return chr($integer); - } - else - { - return strtoupper($match[0]); - } - } - - /** - * Remove bad UTF-8 bytes - * - * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C - * FAQ: Multilingual Forms (modified to include full ASCII range) - * - * @author Geoffrey Sneddon - * @see http://www.w3.org/International/questions/qa-forms-utf-8 - * @param string $str String to remove bad UTF-8 bytes from - * @return string UTF-8 string - */ - function utf8_bad_replace($str) - { - if (function_exists('iconv') && ($return = @iconv('UTF-8', 'UTF-8//IGNORE', $str))) - { - return $return; - } - elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($str, 'UTF-8', 'UTF-8'))) - { - return $return; - } - elseif (preg_match_all('/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})+/', $str, $matches)) - { - return implode("\xEF\xBF\xBD", $matches[0]); - } - elseif ($str !== '') - { - return "\xEF\xBF\xBD"; - } - else - { - return ''; - } - } - - /** - * Converts a Windows-1252 encoded string to a UTF-8 encoded string - * - * @static - * @access public - * @param string $string Windows-1252 encoded string - * @return string UTF-8 encoded string - */ - function windows_1252_to_utf8($string) - { - static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); - - return strtr($string, $convert_table); - } - - function change_encoding($data, $input, $output) - { - $input = SimplePie_Misc::encoding($input); - $output = SimplePie_Misc::encoding($output); - - // We fail to fail on non US-ASCII bytes - if ($input === 'US-ASCII') - { - static $non_ascii_octects = ''; - if (!$non_ascii_octects) - { - for ($i = 0x80; $i <= 0xFF; $i++) - { - $non_ascii_octects .= chr($i); - } - } - $data = substr($data, 0, strcspn($data, $non_ascii_octects)); - } - - // This is first, as behaviour of this is completely predictable - if ($input === 'Windows-1252' && $output === 'UTF-8') - { - return SimplePie_Misc::windows_1252_to_utf8($data); - } - // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). - elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && ($return = @mb_convert_encoding($data, $output, $input))) - { - return $return; - } - // This is last, as behaviour of this varies with OS userland and PHP version - elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data))) - { - return $return; - } - // If we can't do anything, just fail - else - { - return false; - } - } - - function encoding($charset) - { - // Normalization from UTS #22 - switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) - { - case 'adobestandardencoding': - case 'csadobestandardencoding': - return 'Adobe-Standard-Encoding'; - - case 'adobesymbolencoding': - case 'cshppsmath': - return 'Adobe-Symbol-Encoding'; - - case 'ami1251': - case 'amiga1251': - return 'Amiga-1251'; - - case 'ansix31101983': - case 'csat5001983': - case 'csiso99naplps': - case 'isoir99': - case 'naplps': - return 'ANSI_X3.110-1983'; - - case 'arabic7': - case 'asmo449': - case 'csiso89asmo449': - case 'iso9036': - case 'isoir89': - return 'ASMO_449'; - - case 'big5': - case 'csbig5': - case 'xxbig5': - return 'Big5'; - - case 'big5hkscs': - return 'Big5-HKSCS'; - - case 'bocu1': - case 'csbocu1': - return 'BOCU-1'; - - case 'brf': - case 'csbrf': - return 'BRF'; - - case 'bs4730': - case 'csiso4unitedkingdom': - case 'gb': - case 'iso646gb': - case 'isoir4': - case 'uk': - return 'BS_4730'; - - case 'bsviewdata': - case 'csiso47bsviewdata': - case 'isoir47': - return 'BS_viewdata'; - - case 'cesu8': - case 'cscesu8': - return 'CESU-8'; - - case 'ca': - case 'csa71': - case 'csaz243419851': - case 'csiso121canadian1': - case 'iso646ca': - case 'isoir121': - return 'CSA_Z243.4-1985-1'; - - case 'csa72': - case 'csaz243419852': - case 'csiso122canadian2': - case 'iso646ca2': - case 'isoir122': - return 'CSA_Z243.4-1985-2'; - - case 'csaz24341985gr': - case 'csiso123csaz24341985gr': - case 'isoir123': - return 'CSA_Z243.4-1985-gr'; - - case 'csiso139csn369103': - case 'csn369103': - case 'isoir139': - return 'CSN_369103'; - - case 'csdecmcs': - case 'dec': - case 'decmcs': - return 'DEC-MCS'; - - case 'csiso21german': - case 'de': - case 'din66003': - case 'iso646de': - case 'isoir21': - return 'DIN_66003'; - - case 'csdkus': - case 'dkus': - return 'dk-us'; - - case 'csiso646danish': - case 'dk': - case 'ds2089': - case 'iso646dk': - return 'DS_2089'; - - case 'csibmebcdicatde': - case 'ebcdicatde': - return 'EBCDIC-AT-DE'; - - case 'csebcdicatdea': - case 'ebcdicatdea': - return 'EBCDIC-AT-DE-A'; - - case 'csebcdiccafr': - case 'ebcdiccafr': - return 'EBCDIC-CA-FR'; - - case 'csebcdicdkno': - case 'ebcdicdkno': - return 'EBCDIC-DK-NO'; - - case 'csebcdicdknoa': - case 'ebcdicdknoa': - return 'EBCDIC-DK-NO-A'; - - case 'csebcdices': - case 'ebcdices': - return 'EBCDIC-ES'; - - case 'csebcdicesa': - case 'ebcdicesa': - return 'EBCDIC-ES-A'; - - case 'csebcdicess': - case 'ebcdicess': - return 'EBCDIC-ES-S'; - - case 'csebcdicfise': - case 'ebcdicfise': - return 'EBCDIC-FI-SE'; - - case 'csebcdicfisea': - case 'ebcdicfisea': - return 'EBCDIC-FI-SE-A'; - - case 'csebcdicfr': - case 'ebcdicfr': - return 'EBCDIC-FR'; - - case 'csebcdicit': - case 'ebcdicit': - return 'EBCDIC-IT'; - - case 'csebcdicpt': - case 'ebcdicpt': - return 'EBCDIC-PT'; - - case 'csebcdicuk': - case 'ebcdicuk': - return 'EBCDIC-UK'; - - case 'csebcdicus': - case 'ebcdicus': - return 'EBCDIC-US'; - - case 'csiso111ecmacyrillic': - case 'ecmacyrillic': - case 'isoir111': - case 'koi8e': - return 'ECMA-cyrillic'; - - case 'csiso17spanish': - case 'es': - case 'iso646es': - case 'isoir17': - return 'ES'; - - case 'csiso85spanish2': - case 'es2': - case 'iso646es2': - case 'isoir85': - return 'ES2'; - - case 'cseucfixwidjapanese': - case 'extendedunixcodefixedwidthforjapanese': - return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; - - case 'cseucpkdfmtjapanese': - case 'eucjp': - case 'extendedunixcodepackedformatforjapanese': - return 'Extended_UNIX_Code_Packed_Format_for_Japanese'; - - case 'gb18030': - return 'GB18030'; - - case 'chinese': - case 'cp936': - case 'csgb2312': - case 'csiso58gb231280': - case 'gb2312': - case 'gb231280': - case 'gbk': - case 'isoir58': - case 'ms936': - case 'windows936': - return 'GBK'; - - case 'cn': - case 'csiso57gb1988': - case 'gb198880': - case 'iso646cn': - case 'isoir57': - return 'GB_1988-80'; - - case 'csiso153gost1976874': - case 'gost1976874': - case 'isoir153': - case 'stsev35888': - return 'GOST_19768-74'; - - case 'csiso150': - case 'csiso150greekccitt': - case 'greekccitt': - case 'isoir150': - return 'greek-ccitt'; - - case 'csiso88greek7': - case 'greek7': - case 'isoir88': - return 'greek7'; - - case 'csiso18greek7old': - case 'greek7old': - case 'isoir18': - return 'greek7-old'; - - case 'cshpdesktop': - case 'hpdesktop': - return 'HP-DeskTop'; - - case 'cshplegal': - case 'hplegal': - return 'HP-Legal'; - - case 'cshpmath8': - case 'hpmath8': - return 'HP-Math8'; - - case 'cshppifont': - case 'hppifont': - return 'HP-Pi-font'; - - case 'cshproman8': - case 'hproman8': - case 'r8': - case 'roman8': - return 'hp-roman8'; - - case 'hzgb2312': - return 'HZ-GB-2312'; - - case 'csibmsymbols': - case 'ibmsymbols': - return 'IBM-Symbols'; - - case 'csibmthai': - case 'ibmthai': - return 'IBM-Thai'; - - case 'ccsid858': - case 'cp858': - case 'ibm858': - case 'pcmultilingual850euro': - return 'IBM00858'; - - case 'ccsid924': - case 'cp924': - case 'ebcdiclatin9euro': - case 'ibm924': - return 'IBM00924'; - - case 'ccsid1140': - case 'cp1140': - case 'ebcdicus37euro': - case 'ibm1140': - return 'IBM01140'; - - case 'ccsid1141': - case 'cp1141': - case 'ebcdicde273euro': - case 'ibm1141': - return 'IBM01141'; - - case 'ccsid1142': - case 'cp1142': - case 'ebcdicdk277euro': - case 'ebcdicno277euro': - case 'ibm1142': - return 'IBM01142'; - - case 'ccsid1143': - case 'cp1143': - case 'ebcdicfi278euro': - case 'ebcdicse278euro': - case 'ibm1143': - return 'IBM01143'; - - case 'ccsid1144': - case 'cp1144': - case 'ebcdicit280euro': - case 'ibm1144': - return 'IBM01144'; - - case 'ccsid1145': - case 'cp1145': - case 'ebcdices284euro': - case 'ibm1145': - return 'IBM01145'; - - case 'ccsid1146': - case 'cp1146': - case 'ebcdicgb285euro': - case 'ibm1146': - return 'IBM01146'; - - case 'ccsid1147': - case 'cp1147': - case 'ebcdicfr297euro': - case 'ibm1147': - return 'IBM01147'; - - case 'ccsid1148': - case 'cp1148': - case 'ebcdicinternational500euro': - case 'ibm1148': - return 'IBM01148'; - - case 'ccsid1149': - case 'cp1149': - case 'ebcdicis871euro': - case 'ibm1149': - return 'IBM01149'; - - case 'cp37': - case 'csibm37': - case 'ebcdiccpca': - case 'ebcdiccpnl': - case 'ebcdiccpus': - case 'ebcdiccpwt': - case 'ibm37': - return 'IBM037'; - - case 'cp38': - case 'csibm38': - case 'ebcdicint': - case 'ibm38': - return 'IBM038'; - - case 'cp273': - case 'csibm273': - case 'ibm273': - return 'IBM273'; - - case 'cp274': - case 'csibm274': - case 'ebcdicbe': - case 'ibm274': - return 'IBM274'; - - case 'cp275': - case 'csibm275': - case 'ebcdicbr': - case 'ibm275': - return 'IBM275'; - - case 'csibm277': - case 'ebcdiccpdk': - case 'ebcdiccpno': - case 'ibm277': - return 'IBM277'; - - case 'cp278': - case 'csibm278': - case 'ebcdiccpfi': - case 'ebcdiccpse': - case 'ibm278': - return 'IBM278'; - - case 'cp280': - case 'csibm280': - case 'ebcdiccpit': - case 'ibm280': - return 'IBM280'; - - case 'cp281': - case 'csibm281': - case 'ebcdicjpe': - case 'ibm281': - return 'IBM281'; - - case 'cp284': - case 'csibm284': - case 'ebcdiccpes': - case 'ibm284': - return 'IBM284'; - - case 'cp285': - case 'csibm285': - case 'ebcdiccpgb': - case 'ibm285': - return 'IBM285'; - - case 'cp290': - case 'csibm290': - case 'ebcdicjpkana': - case 'ibm290': - return 'IBM290'; - - case 'cp297': - case 'csibm297': - case 'ebcdiccpfr': - case 'ibm297': - return 'IBM297'; - - case 'cp420': - case 'csibm420': - case 'ebcdiccpar1': - case 'ibm420': - return 'IBM420'; - - case 'cp423': - case 'csibm423': - case 'ebcdiccpgr': - case 'ibm423': - return 'IBM423'; - - case 'cp424': - case 'csibm424': - case 'ebcdiccphe': - case 'ibm424': - return 'IBM424'; - - case '437': - case 'cp437': - case 'cspc8codepage437': - case 'ibm437': - return 'IBM437'; - - case 'cp500': - case 'csibm500': - case 'ebcdiccpbe': - case 'ebcdiccpch': - case 'ibm500': - return 'IBM500'; - - case 'cp775': - case 'cspc775baltic': - case 'ibm775': - return 'IBM775'; - - case '850': - case 'cp850': - case 'cspc850multilingual': - case 'ibm850': - return 'IBM850'; - - case '851': - case 'cp851': - case 'csibm851': - case 'ibm851': - return 'IBM851'; - - case '852': - case 'cp852': - case 'cspcp852': - case 'ibm852': - return 'IBM852'; - - case '855': - case 'cp855': - case 'csibm855': - case 'ibm855': - return 'IBM855'; - - case '857': - case 'cp857': - case 'csibm857': - case 'ibm857': - return 'IBM857'; - - case '860': - case 'cp860': - case 'csibm860': - case 'ibm860': - return 'IBM860'; - - case '861': - case 'cp861': - case 'cpis': - case 'csibm861': - case 'ibm861': - return 'IBM861'; - - case '862': - case 'cp862': - case 'cspc862latinhebrew': - case 'ibm862': - return 'IBM862'; - - case '863': - case 'cp863': - case 'csibm863': - case 'ibm863': - return 'IBM863'; - - case 'cp864': - case 'csibm864': - case 'ibm864': - return 'IBM864'; - - case '865': - case 'cp865': - case 'csibm865': - case 'ibm865': - return 'IBM865'; - - case '866': - case 'cp866': - case 'csibm866': - case 'ibm866': - return 'IBM866'; - - case 'cp868': - case 'cpar': - case 'csibm868': - case 'ibm868': - return 'IBM868'; - - case '869': - case 'cp869': - case 'cpgr': - case 'csibm869': - case 'ibm869': - return 'IBM869'; - - case 'cp870': - case 'csibm870': - case 'ebcdiccproece': - case 'ebcdiccpyu': - case 'ibm870': - return 'IBM870'; - - case 'cp871': - case 'csibm871': - case 'ebcdiccpis': - case 'ibm871': - return 'IBM871'; - - case 'cp880': - case 'csibm880': - case 'ebcdiccyrillic': - case 'ibm880': - return 'IBM880'; - - case 'cp891': - case 'csibm891': - case 'ibm891': - return 'IBM891'; - - case 'cp903': - case 'csibm903': - case 'ibm903': - return 'IBM903'; - - case '904': - case 'cp904': - case 'csibbm904': - case 'ibm904': - return 'IBM904'; - - case 'cp905': - case 'csibm905': - case 'ebcdiccptr': - case 'ibm905': - return 'IBM905'; - - case 'cp918': - case 'csibm918': - case 'ebcdiccpar2': - case 'ibm918': - return 'IBM918'; - - case 'cp1026': - case 'csibm1026': - case 'ibm1026': - return 'IBM1026'; - - case 'ibm1047': - return 'IBM1047'; - - case 'csiso143iecp271': - case 'iecp271': - case 'isoir143': - return 'IEC_P27-1'; - - case 'csiso49inis': - case 'inis': - case 'isoir49': - return 'INIS'; - - case 'csiso50inis8': - case 'inis8': - case 'isoir50': - return 'INIS-8'; - - case 'csiso51iniscyrillic': - case 'iniscyrillic': - case 'isoir51': - return 'INIS-cyrillic'; - - case 'csinvariant': - case 'invariant': - return 'INVARIANT'; - - case 'iso2022cn': - return 'ISO-2022-CN'; - - case 'iso2022cnext': - return 'ISO-2022-CN-EXT'; - - case 'csiso2022jp': - case 'iso2022jp': - return 'ISO-2022-JP'; - - case 'csiso2022jp2': - case 'iso2022jp2': - return 'ISO-2022-JP-2'; - - case 'csiso2022kr': - case 'iso2022kr': - return 'ISO-2022-KR'; - - case 'cswindows30latin1': - case 'iso88591windows30latin1': - return 'ISO-8859-1-Windows-3.0-Latin-1'; - - case 'cswindows31latin1': - case 'iso88591windows31latin1': - return 'ISO-8859-1-Windows-3.1-Latin-1'; - - case 'csisolatin2': - case 'iso88592': - case 'iso885921987': - case 'isoir101': - case 'l2': - case 'latin2': - return 'ISO-8859-2'; - - case 'cswindows31latin2': - case 'iso88592windowslatin2': - return 'ISO-8859-2-Windows-Latin-2'; - - case 'csisolatin3': - case 'iso88593': - case 'iso885931988': - case 'isoir109': - case 'l3': - case 'latin3': - return 'ISO-8859-3'; - - case 'csisolatin4': - case 'iso88594': - case 'iso885941988': - case 'isoir110': - case 'l4': - case 'latin4': - return 'ISO-8859-4'; - - case 'csisolatincyrillic': - case 'cyrillic': - case 'iso88595': - case 'iso885951988': - case 'isoir144': - return 'ISO-8859-5'; - - case 'arabic': - case 'asmo708': - case 'csisolatinarabic': - case 'ecma114': - case 'iso88596': - case 'iso885961987': - case 'isoir127': - return 'ISO-8859-6'; - - case 'csiso88596e': - case 'iso88596e': - return 'ISO-8859-6-E'; - - case 'csiso88596i': - case 'iso88596i': - return 'ISO-8859-6-I'; - - case 'csisolatingreek': - case 'ecma118': - case 'elot928': - case 'greek': - case 'greek8': - case 'iso88597': - case 'iso885971987': - case 'isoir126': - return 'ISO-8859-7'; - - case 'csisolatinhebrew': - case 'hebrew': - case 'iso88598': - case 'iso885981988': - case 'isoir138': - return 'ISO-8859-8'; - - case 'csiso88598e': - case 'iso88598e': - return 'ISO-8859-8-E'; - - case 'csiso88598i': - case 'iso88598i': - return 'ISO-8859-8-I'; - - case 'cswindows31latin5': - case 'iso88599windowslatin5': - return 'ISO-8859-9-Windows-Latin-5'; - - case 'csisolatin6': - case 'iso885910': - case 'iso8859101992': - case 'isoir157': - case 'l6': - case 'latin6': - return 'ISO-8859-10'; - - case 'iso885913': - return 'ISO-8859-13'; - - case 'iso885914': - case 'iso8859141998': - case 'isoceltic': - case 'isoir199': - case 'l8': - case 'latin8': - return 'ISO-8859-14'; - - case 'iso885915': - case 'latin9': - return 'ISO-8859-15'; - - case 'iso885916': - case 'iso8859162001': - case 'isoir226': - case 'l10': - case 'latin10': - return 'ISO-8859-16'; - - case 'iso10646j1': - return 'ISO-10646-J-1'; - - case 'csunicode': - case 'iso10646ucs2': - return 'ISO-10646-UCS-2'; - - case 'csucs4': - case 'iso10646ucs4': - return 'ISO-10646-UCS-4'; - - case 'csunicodeascii': - case 'iso10646ucsbasic': - return 'ISO-10646-UCS-Basic'; - - case 'csunicodelatin1': - case 'iso10646': - case 'iso10646unicodelatin1': - return 'ISO-10646-Unicode-Latin1'; - - case 'csiso10646utf1': - case 'iso10646utf1': - return 'ISO-10646-UTF-1'; - - case 'csiso115481': - case 'iso115481': - case 'isotr115481': - return 'ISO-11548-1'; - - case 'csiso90': - case 'isoir90': - return 'iso-ir-90'; - - case 'csunicodeibm1261': - case 'isounicodeibm1261': - return 'ISO-Unicode-IBM-1261'; - - case 'csunicodeibm1264': - case 'isounicodeibm1264': - return 'ISO-Unicode-IBM-1264'; - - case 'csunicodeibm1265': - case 'isounicodeibm1265': - return 'ISO-Unicode-IBM-1265'; - - case 'csunicodeibm1268': - case 'isounicodeibm1268': - return 'ISO-Unicode-IBM-1268'; - - case 'csunicodeibm1276': - case 'isounicodeibm1276': - return 'ISO-Unicode-IBM-1276'; - - case 'csiso646basic1983': - case 'iso646basic1983': - case 'ref': - return 'ISO_646.basic:1983'; - - case 'csiso2intlrefversion': - case 'irv': - case 'iso646irv1983': - case 'isoir2': - return 'ISO_646.irv:1983'; - - case 'csiso2033': - case 'e13b': - case 'iso20331983': - case 'isoir98': - return 'ISO_2033-1983'; - - case 'csiso5427cyrillic': - case 'iso5427': - case 'isoir37': - return 'ISO_5427'; - - case 'iso5427cyrillic1981': - case 'iso54271981': - case 'isoir54': - return 'ISO_5427:1981'; - - case 'csiso5428greek': - case 'iso54281980': - case 'isoir55': - return 'ISO_5428:1980'; - - case 'csiso6937add': - case 'iso6937225': - case 'isoir152': - return 'ISO_6937-2-25'; - - case 'csisotextcomm': - case 'iso69372add': - case 'isoir142': - return 'ISO_6937-2-add'; - - case 'csiso8859supp': - case 'iso8859supp': - case 'isoir154': - case 'latin125': - return 'ISO_8859-supp'; - - case 'csiso10367box': - case 'iso10367box': - case 'isoir155': - return 'ISO_10367-box'; - - case 'csiso15italian': - case 'iso646it': - case 'isoir15': - case 'it': - return 'IT'; - - case 'csiso13jisc6220jp': - case 'isoir13': - case 'jisc62201969': - case 'jisc62201969jp': - case 'katakana': - case 'x2017': - return 'JIS_C6220-1969-jp'; - - case 'csiso14jisc6220ro': - case 'iso646jp': - case 'isoir14': - case 'jisc62201969ro': - case 'jp': - return 'JIS_C6220-1969-ro'; - - case 'csiso42jisc62261978': - case 'isoir42': - case 'jisc62261978': - return 'JIS_C6226-1978'; - - case 'csiso87jisx208': - case 'isoir87': - case 'jisc62261983': - case 'jisx2081983': - case 'x208': - return 'JIS_C6226-1983'; - - case 'csiso91jisc62291984a': - case 'isoir91': - case 'jisc62291984a': - case 'jpocra': - return 'JIS_C6229-1984-a'; - - case 'csiso92jisc62991984b': - case 'iso646jpocrb': - case 'isoir92': - case 'jisc62291984b': - case 'jpocrb': - return 'JIS_C6229-1984-b'; - - case 'csiso93jis62291984badd': - case 'isoir93': - case 'jisc62291984badd': - case 'jpocrbadd': - return 'JIS_C6229-1984-b-add'; - - case 'csiso94jis62291984hand': - case 'isoir94': - case 'jisc62291984hand': - case 'jpocrhand': - return 'JIS_C6229-1984-hand'; - - case 'csiso95jis62291984handadd': - case 'isoir95': - case 'jisc62291984handadd': - case 'jpocrhandadd': - return 'JIS_C6229-1984-hand-add'; - - case 'csiso96jisc62291984kana': - case 'isoir96': - case 'jisc62291984kana': - return 'JIS_C6229-1984-kana'; - - case 'csjisencoding': - case 'jisencoding': - return 'JIS_Encoding'; - - case 'cshalfwidthkatakana': - case 'jisx201': - case 'x201': - return 'JIS_X0201'; - - case 'csiso159jisx2121990': - case 'isoir159': - case 'jisx2121990': - case 'x212': - return 'JIS_X0212-1990'; - - case 'csiso141jusib1002': - case 'iso646yu': - case 'isoir141': - case 'js': - case 'jusib1002': - case 'yu': - return 'JUS_I.B1.002'; - - case 'csiso147macedonian': - case 'isoir147': - case 'jusib1003mac': - case 'macedonian': - return 'JUS_I.B1.003-mac'; - - case 'csiso146serbian': - case 'isoir146': - case 'jusib1003serb': - case 'serbian': - return 'JUS_I.B1.003-serb'; - - case 'koi7switched': - return 'KOI7-switched'; - - case 'cskoi8r': - case 'koi8r': - return 'KOI8-R'; - - case 'koi8u': - return 'KOI8-U'; - - case 'csksc5636': - case 'iso646kr': - case 'ksc5636': - return 'KSC5636'; - - case 'cskz1048': - case 'kz1048': - case 'rk1048': - case 'strk10482002': - return 'KZ-1048'; - - case 'csiso19latingreek': - case 'isoir19': - case 'latingreek': - return 'latin-greek'; - - case 'csiso27latingreek1': - case 'isoir27': - case 'latingreek1': - return 'Latin-greek-1'; - - case 'csiso158lap': - case 'isoir158': - case 'lap': - case 'latinlap': - return 'latin-lap'; - - case 'csmacintosh': - case 'mac': - case 'macintosh': - return 'macintosh'; - - case 'csmicrosoftpublishing': - case 'microsoftpublishing': - return 'Microsoft-Publishing'; - - case 'csmnem': - case 'mnem': - return 'MNEM'; - - case 'csmnemonic': - case 'mnemonic': - return 'MNEMONIC'; - - case 'csiso86hungarian': - case 'hu': - case 'iso646hu': - case 'isoir86': - case 'msz77953': - return 'MSZ_7795.3'; - - case 'csnatsdano': - case 'isoir91': - case 'natsdano': - return 'NATS-DANO'; - - case 'csnatsdanoadd': - case 'isoir92': - case 'natsdanoadd': - return 'NATS-DANO-ADD'; - - case 'csnatssefi': - case 'isoir81': - case 'natssefi': - return 'NATS-SEFI'; - - case 'csnatssefiadd': - case 'isoir82': - case 'natssefiadd': - return 'NATS-SEFI-ADD'; - - case 'csiso151cuba': - case 'cuba': - case 'iso646cu': - case 'isoir151': - case 'ncnc1081': - return 'NC_NC00-10:81'; - - case 'csiso69french': - case 'fr': - case 'iso646fr': - case 'isoir69': - case 'nfz62010': - return 'NF_Z_62-010'; - - case 'csiso25french': - case 'iso646fr1': - case 'isoir25': - case 'nfz620101973': - return 'NF_Z_62-010_(1973)'; - - case 'csiso60danishnorwegian': - case 'csiso60norwegian1': - case 'iso646no': - case 'isoir60': - case 'no': - case 'ns45511': - return 'NS_4551-1'; - - case 'csiso61norwegian2': - case 'iso646no2': - case 'isoir61': - case 'no2': - case 'ns45512': - return 'NS_4551-2'; - - case 'osdebcdicdf3irv': - return 'OSD_EBCDIC_DF03_IRV'; - - case 'osdebcdicdf41': - return 'OSD_EBCDIC_DF04_1'; - - case 'osdebcdicdf415': - return 'OSD_EBCDIC_DF04_15'; - - case 'cspc8danishnorwegian': - case 'pc8danishnorwegian': - return 'PC8-Danish-Norwegian'; - - case 'cspc8turkish': - case 'pc8turkish': - return 'PC8-Turkish'; - - case 'csiso16portuguese': - case 'iso646pt': - case 'isoir16': - case 'pt': - return 'PT'; - - case 'csiso84portuguese2': - case 'iso646pt2': - case 'isoir84': - case 'pt2': - return 'PT2'; - - case 'cp154': - case 'csptcp154': - case 'cyrillicasian': - case 'pt154': - case 'ptcp154': - return 'PTCP154'; - - case 'scsu': - return 'SCSU'; - - case 'csiso10swedish': - case 'fi': - case 'iso646fi': - case 'iso646se': - case 'isoir10': - case 'se': - case 'sen850200b': - return 'SEN_850200_B'; - - case 'csiso11swedishfornames': - case 'iso646se2': - case 'isoir11': - case 'se2': - case 'sen850200c': - return 'SEN_850200_C'; - - case 'csshiftjis': - case 'mskanji': - case 'shiftjis': - return 'Shift_JIS'; - - case 'csiso102t617bit': - case 'isoir102': - case 't617bit': - return 'T.61-7bit'; - - case 'csiso103t618bit': - case 'isoir103': - case 't61': - case 't618bit': - return 'T.61-8bit'; - - case 'csiso128t101g2': - case 'isoir128': - case 't101g2': - return 'T.101-G2'; - - case 'cstscii': - case 'tscii': - return 'TSCII'; - - case 'csunicode11': - case 'unicode11': - return 'UNICODE-1-1'; - - case 'csunicode11utf7': - case 'unicode11utf7': - return 'UNICODE-1-1-UTF-7'; - - case 'csunknown8bit': - case 'unknown8bit': - return 'UNKNOWN-8BIT'; - - case 'ansix341968': - case 'ansix341986': - case 'ascii': - case 'cp367': - case 'csascii': - case 'ibm367': - case 'iso646irv1991': - case 'iso646us': - case 'isoir6': - case 'us': - case 'usascii': - return 'US-ASCII'; - - case 'csusdk': - case 'usdk': - return 'us-dk'; - - case 'utf7': - return 'UTF-7'; - - case 'utf8': - return 'UTF-8'; - - case 'utf16': - return 'UTF-16'; - - case 'utf16be': - return 'UTF-16BE'; - - case 'utf16le': - return 'UTF-16LE'; - - case 'utf32': - return 'UTF-32'; - - case 'utf32be': - return 'UTF-32BE'; - - case 'utf32le': - return 'UTF-32LE'; - - case 'csventurainternational': - case 'venturainternational': - return 'Ventura-International'; - - case 'csventuramath': - case 'venturamath': - return 'Ventura-Math'; - - case 'csventuraus': - case 'venturaus': - return 'Ventura-US'; - - case 'csiso70videotexsupp1': - case 'isoir70': - case 'videotexsuppl': - return 'videotex-suppl'; - - case 'csviqr': - case 'viqr': - return 'VIQR'; - - case 'csviscii': - case 'viscii': - return 'VISCII'; - - case 'cswindows31j': - case 'windows31j': - return 'Windows-31J'; - - case 'iso885911': - case 'tis620': - return 'windows-874'; - - case 'cseuckr': - case 'csksc56011987': - case 'euckr': - case 'isoir149': - case 'korean': - case 'ksc5601': - case 'ksc56011987': - case 'ksc56011989': - case 'windows949': - return 'windows-949'; - - case 'windows1250': - return 'windows-1250'; - - case 'windows1251': - return 'windows-1251'; - - case 'cp819': - case 'csisolatin1': - case 'ibm819': - case 'iso88591': - case 'iso885911987': - case 'isoir100': - case 'l1': - case 'latin1': - case 'windows1252': - return 'windows-1252'; - - case 'windows1253': - return 'windows-1253'; - - case 'csisolatin5': - case 'iso88599': - case 'iso885991989': - case 'isoir148': - case 'l5': - case 'latin5': - case 'windows1254': - return 'windows-1254'; - - case 'windows1255': - return 'windows-1255'; - - case 'windows1256': - return 'windows-1256'; - - case 'windows1257': - return 'windows-1257'; - - case 'windows1258': - return 'windows-1258'; - - default: - return $charset; - } - } - - function get_curl_version() - { - if (is_array($curl = curl_version())) - { - $curl = $curl['version']; - } - elseif (substr($curl, 0, 5) === 'curl/') - { - $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); - } - elseif (substr($curl, 0, 8) === 'libcurl/') - { - $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); - } - else - { - $curl = 0; - } - return $curl; - } - - function is_subclass_of($class1, $class2) - { - if (func_num_args() !== 2) - { - trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING); - } - elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1)) - { - return is_subclass_of($class1, $class2); - } - elseif (is_string($class1) && is_string($class2)) - { - if (class_exists($class1)) - { - if (class_exists($class2)) - { - $class2 = strtolower($class2); - while ($class1 = strtolower(get_parent_class($class1))) - { - if ($class1 === $class2) - { - return true; - } - } - } - } - else - { - trigger_error('Unknown class passed as parameter', E_USER_WARNNG); - } - } - return false; - } - - /** - * Strip HTML comments - * - * @access public - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - function strip_comments($data) - { - $output = ''; - while (($start = strpos($data, '', $start)) !== false) - { - $data = substr_replace($data, '', 0, $end + 3); - } - else - { - $data = ''; - } - } - return $output . $data; - } - - function parse_date($dt) - { - $parser = SimplePie_Parse_Date::get(); - return $parser->parse($dt); - } - - /** - * Decode HTML entities - * - * @static - * @access public - * @param string $data Input data - * @return string Output data - */ - function entities_decode($data) - { - $decoder = new SimplePie_Decode_HTML_Entities($data); - return $decoder->parse(); - } - - /** - * Remove RFC822 comments - * - * @access public - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - function uncomment_rfc822($string) - { - $string = (string) $string; - $position = 0; - $length = strlen($string); - $depth = 0; - - $output = ''; - - while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) - { - $output .= substr($string, $position, $pos - $position); - $position = $pos + 1; - if ($string[$pos - 1] !== '\\') - { - $depth++; - while ($depth && $position < $length) - { - $position += strcspn($string, '()', $position); - if ($string[$position - 1] === '\\') - { - $position++; - continue; - } - elseif (isset($string[$position])) - { - switch ($string[$position]) - { - case '(': - $depth++; - break; - - case ')': - $depth--; - break; - } - $position++; - } - else - { - break; - } - } - } - else - { - $output .= '('; - } - } - $output .= substr($string, $position); - - return $output; - } - - function parse_mime($mime) - { - if (($pos = strpos($mime, ';')) === false) - { - return trim($mime); - } - else - { - return trim(substr($mime, 0, $pos)); - } - } - - function htmlspecialchars_decode($string, $quote_style) - { - if (function_exists('htmlspecialchars_decode')) - { - return htmlspecialchars_decode($string, $quote_style); - } - else - { - return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style))); - } - } - - function atom_03_construct_type($attribs) - { - if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) - { - $mode = SIMPLEPIE_CONSTRUCT_BASE64; - } - else - { - $mode = SIMPLEPIE_CONSTRUCT_NONE; - } - if (isset($attribs['']['type'])) - { - switch (strtolower(trim($attribs['']['type']))) - { - case 'text': - case 'text/plain': - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - - case 'html': - case 'text/html': - return SIMPLEPIE_CONSTRUCT_HTML | $mode; - - case 'xhtml': - case 'application/xhtml+xml': - return SIMPLEPIE_CONSTRUCT_XHTML | $mode; - - default: - return SIMPLEPIE_CONSTRUCT_NONE | $mode; - } - } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - } - } - - function atom_10_construct_type($attribs) - { - if (isset($attribs['']['type'])) - { - switch (strtolower(trim($attribs['']['type']))) - { - case 'text': - return SIMPLEPIE_CONSTRUCT_TEXT; - - case 'html': - return SIMPLEPIE_CONSTRUCT_HTML; - - case 'xhtml': - return SIMPLEPIE_CONSTRUCT_XHTML; - - default: - return SIMPLEPIE_CONSTRUCT_NONE; - } - } - return SIMPLEPIE_CONSTRUCT_TEXT; - } - - function atom_10_content_construct_type($attribs) - { - if (isset($attribs['']['type'])) - { - $type = strtolower(trim($attribs['']['type'])); - switch ($type) - { - case 'text': - return SIMPLEPIE_CONSTRUCT_TEXT; - - case 'html': - return SIMPLEPIE_CONSTRUCT_HTML; - - case 'xhtml': - return SIMPLEPIE_CONSTRUCT_XHTML; - } - if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/') - { - return SIMPLEPIE_CONSTRUCT_NONE; - } - else - { - return SIMPLEPIE_CONSTRUCT_BASE64; - } - } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT; - } - } - - function is_isegment_nz_nc($string) - { - return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); - } - - function space_seperated_tokens($string) - { - $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; - $string_length = strlen($string); - - $position = strspn($string, $space_characters); - $tokens = array(); - - while ($position < $string_length) - { - $len = strcspn($string, $space_characters, $position); - $tokens[] = substr($string, $position, $len); - $position += $len; - $position += strspn($string, $space_characters, $position); - } - - return $tokens; - } - - function array_unique($array) - { - if (version_compare(PHP_VERSION, '5.2', '>=')) - { - return array_unique($array); - } - else - { - $array = (array) $array; - $new_array = array(); - $new_array_strings = array(); - foreach ($array as $key => $value) - { - if (is_object($value)) - { - if (method_exists($value, '__toString')) - { - $cmp = $value->__toString(); - } - else - { - trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR); - } - } - elseif (is_array($value)) - { - $cmp = (string) reset($value); - } - else - { - $cmp = (string) $value; - } - if (!in_array($cmp, $new_array_strings)) - { - $new_array[$key] = $value; - $new_array_strings[] = $cmp; - } - } - return $new_array; - } - } - - /** - * Converts a unicode codepoint to a UTF-8 character - * - * @static - * @access public - * @param int $codepoint Unicode codepoint - * @return string UTF-8 character - */ - function codepoint_to_utf8($codepoint) - { - $codepoint = (int) $codepoint; - if ($codepoint < 0) - { - return false; - } - else if ($codepoint <= 0x7f) - { - return chr($codepoint); - } - else if ($codepoint <= 0x7ff) - { - return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); - } - else if ($codepoint <= 0xffff) - { - return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); - } - else if ($codepoint <= 0x10ffff) - { - return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); - } - else - { - // U+FFFD REPLACEMENT CHARACTER - return "\xEF\xBF\xBD"; - } - } - - /** - * Re-implementation of PHP 5's stripos() - * - * Returns the numeric position of the first occurrence of needle in the - * haystack string. - * - * @static - * @access string - * @param object $haystack - * @param string $needle Note that the needle may be a string of one or more - * characters. If needle is not a string, it is converted to an integer - * and applied as the ordinal value of a character. - * @param int $offset The optional offset parameter allows you to specify which - * character in haystack to start searching. The position returned is still - * relative to the beginning of haystack. - * @return bool If needle is not found, stripos() will return boolean false. - */ - function stripos($haystack, $needle, $offset = 0) - { - if (function_exists('stripos')) - { - return stripos($haystack, $needle, $offset); - } - else - { - if (is_string($needle)) - { - $needle = strtolower($needle); - } - elseif (is_int($needle) || is_bool($needle) || is_double($needle)) - { - $needle = strtolower(chr($needle)); - } - else - { - trigger_error('needle is not a string or an integer', E_USER_WARNING); - return false; - } - - return strpos(strtolower($haystack), $needle, $offset); - } - } - - /** - * Similar to parse_str() - * - * Returns an associative array of name/value pairs, where the value is an - * array of values that have used the same name - * - * @static - * @access string - * @param string $str The input string. - * @return array - */ - function parse_str($str) - { - $return = array(); - $str = explode('&', $str); - - foreach ($str as $section) - { - if (strpos($section, '=') !== false) - { - list($name, $value) = explode('=', $section, 2); - $return[urldecode($name)][] = urldecode($value); - } - else - { - $return[urldecode($section)][] = null; - } - } - - return $return; - } - - /** - * Detect XML encoding, as per XML 1.0 Appendix F.1 - * - * @todo Add support for EBCDIC - * @param string $data XML data - * @return array Possible encodings - */ - function xml_encoding($data) - { - // UTF-32 Big Endian BOM - if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") - { - $encoding[] = 'UTF-32BE'; - } - // UTF-32 Little Endian BOM - elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") - { - $encoding[] = 'UTF-32LE'; - } - // UTF-16 Big Endian BOM - elseif (substr($data, 0, 2) === "\xFE\xFF") - { - $encoding[] = 'UTF-16BE'; - } - // UTF-16 Little Endian BOM - elseif (substr($data, 0, 2) === "\xFF\xFE") - { - $encoding[] = 'UTF-16LE'; - } - // UTF-8 BOM - elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") - { - $encoding[] = 'UTF-8'; - } - // UTF-32 Big Endian Without BOM - elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") - { - if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-32BE'; - } - // UTF-32 Little Endian Without BOM - elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") - { - if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-32LE'; - } - // UTF-16 Big Endian Without BOM - elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") - { - if ($pos = strpos($data, "\x00\x3F\x00\x3E")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-16BE'; - } - // UTF-16 Little Endian Without BOM - elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") - { - if ($pos = strpos($data, "\x3F\x00\x3E\x00")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-16LE'; - } - // US-ASCII (or superset) - elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") - { - if ($pos = strpos($data, "\x3F\x3E")) - { - $parser = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-8'; - } - // Fallback to UTF-8 - else - { - $encoding[] = 'UTF-8'; - } - return $encoding; - } - - function output_javascript() - { - if (function_exists('ob_gzhandler')) - { - ob_start('ob_gzhandler'); - } - header('Content-type: text/javascript; charset: UTF-8'); - header('Cache-Control: must-revalidate'); - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days - ?> -function embed_odeo(link) { - document.writeln(''); -} - -function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { - if (placeholder != '') { - document.writeln(''); - } - else { - document.writeln(''); - } -} - -function embed_flash(bgcolor, width, height, link, loop, type) { - document.writeln(''); -} - -function embed_flv(width, height, link, placeholder, loop, player) { - document.writeln(''); -} - -function embed_wmedia(width, height, link) { - document.writeln(''); -} - data = $data; - } - - /** - * Parse the input data - * - * @access public - * @return string Output data - */ - function parse() - { - while (($this->position = strpos($this->data, '&', $this->position)) !== false) - { - $this->consume(); - $this->entity(); - $this->consumed = ''; - } - return $this->data; - } - - /** - * Consume the next byte - * - * @access private - * @return mixed The next byte, or false, if there is no more data - */ - function consume() - { - if (isset($this->data[$this->position])) - { - $this->consumed .= $this->data[$this->position]; - return $this->data[$this->position++]; - } - else - { - return false; - } - } - - /** - * Consume a range of characters - * - * @access private - * @param string $chars Characters to consume - * @return mixed A series of characters that match the range, or false - */ - function consume_range($chars) - { - if ($len = strspn($this->data, $chars, $this->position)) - { - $data = substr($this->data, $this->position, $len); - $this->consumed .= $data; - $this->position += $len; - return $data; - } - else - { - return false; - } - } - - /** - * Unconsume one byte - * - * @access private - */ - function unconsume() - { - $this->consumed = substr($this->consumed, 0, -1); - $this->position--; - } - - /** - * Decode an entity - * - * @access private - */ - function entity() - { - switch ($this->consume()) - { - case "\x09": - case "\x0A": - case "\x0B": - case "\x0B": - case "\x0C": - case "\x20": - case "\x3C": - case "\x26": - case false: - break; - - case "\x23": - switch ($this->consume()) - { - case "\x78": - case "\x58": - $range = '0123456789ABCDEFabcdef'; - $hex = true; - break; - - default: - $range = '0123456789'; - $hex = false; - $this->unconsume(); - break; - } - - if ($codepoint = $this->consume_range($range)) - { - static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"); - - if ($hex) - { - $codepoint = hexdec($codepoint); - } - else - { - $codepoint = intval($codepoint); - } - - if (isset($windows_1252_specials[$codepoint])) - { - $replacement = $windows_1252_specials[$codepoint]; - } - else - { - $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint); - } - - if (!in_array($this->consume(), array(';', false), true)) - { - $this->unconsume(); - } - - $consumed_length = strlen($this->consumed); - $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length); - $this->position += strlen($replacement) - $consumed_length; - } - break; - - default: - static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C"); - - for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) - { - $consumed = substr($this->consumed, 1); - if (isset($entities[$consumed])) - { - $match = $consumed; - } - } - - if ($match !== null) - { - $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1); - $this->position += strlen($entities[$match]) - strlen($consumed) - 1; - } - break; - } - } -} - -/** - * IRI parser/serialiser - * - * @package SimplePie - */ -class SimplePie_IRI -{ - /** - * Scheme - * - * @access private - * @var string - */ - var $scheme; - - /** - * User Information - * - * @access private - * @var string - */ - var $userinfo; - - /** - * Host - * - * @access private - * @var string - */ - var $host; - - /** - * Port - * - * @access private - * @var string - */ - var $port; - - /** - * Path - * - * @access private - * @var string - */ - var $path; - - /** - * Query - * - * @access private - * @var string - */ - var $query; - - /** - * Fragment - * - * @access private - * @var string - */ - var $fragment; - - /** - * Whether the object represents a valid IRI - * - * @access private - * @var array - */ - var $valid = array(); - - /** - * Return the entire IRI when you try and read the object as a string - * - * @access public - * @return string - */ - function __toString() - { - return $this->get_iri(); - } - - /** - * Create a new IRI object, from a specified string - * - * @access public - * @param string $iri - * @return SimplePie_IRI - */ - function SimplePie_IRI($iri) - { - $iri = (string) $iri; - if ($iri !== '') - { - $parsed = $this->parse_iri($iri); - $this->set_scheme($parsed['scheme']); - $this->set_authority($parsed['authority']); - $this->set_path($parsed['path']); - $this->set_query($parsed['query']); - $this->set_fragment($parsed['fragment']); - } - } - - /** - * Create a new IRI object by resolving a relative IRI - * - * @static - * @access public - * @param SimplePie_IRI $base Base IRI - * @param string $relative Relative IRI - * @return SimplePie_IRI - */ - function absolutize($base, $relative) - { - $relative = (string) $relative; - if ($relative !== '') - { - $relative = new SimplePie_IRI($relative); - if ($relative->get_scheme() !== null) - { - $target = $relative; - } - elseif ($base->get_iri() !== null) - { - if ($relative->get_authority() !== null) - { - $target = $relative; - $target->set_scheme($base->get_scheme()); - } - else - { - $target = new SimplePie_IRI(''); - $target->set_scheme($base->get_scheme()); - $target->set_userinfo($base->get_userinfo()); - $target->set_host($base->get_host()); - $target->set_port($base->get_port()); - if ($relative->get_path() !== null) - { - if (strpos($relative->get_path(), '/') === 0) - { - $target->set_path($relative->get_path()); - } - elseif (($base->get_userinfo() !== null || $base->get_host() !== null || $base->get_port() !== null) && $base->get_path() === null) - { - $target->set_path('/' . $relative->get_path()); - } - elseif (($last_segment = strrpos($base->get_path(), '/')) !== false) - { - $target->set_path(substr($base->get_path(), 0, $last_segment + 1) . $relative->get_path()); - } - else - { - $target->set_path($relative->get_path()); - } - $target->set_query($relative->get_query()); - } - else - { - $target->set_path($base->get_path()); - if ($relative->get_query() !== null) - { - $target->set_query($relative->get_query()); - } - elseif ($base->get_query() !== null) - { - $target->set_query($base->get_query()); - } - } - } - $target->set_fragment($relative->get_fragment()); - } - else - { - // No base URL, just return the relative URL - $target = $relative; - } - } - else - { - $target = $base; - } - return $target; - } - - /** - * Parse an IRI into scheme/authority/path/query/fragment segments - * - * @access private - * @param string $iri - * @return array - */ - function parse_iri($iri) - { - preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $iri, $match); - for ($i = count($match); $i <= 9; $i++) - { - $match[$i] = ''; - } - return array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); - } - - /** - * Remove dot segments from a path - * - * @access private - * @param string $input - * @return string - */ - function remove_dot_segments($input) - { - $output = ''; - while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') - { - // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, - if (strpos($input, '../') === 0) - { - $input = substr($input, 3); - } - elseif (strpos($input, './') === 0) - { - $input = substr($input, 2); - } - // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, - elseif (strpos($input, '/./') === 0) - { - $input = substr_replace($input, '/', 0, 3); - } - elseif ($input === '/.') - { - $input = '/'; - } - // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, - elseif (strpos($input, '/../') === 0) - { - $input = substr_replace($input, '/', 0, 4); - $output = substr_replace($output, '', strrpos($output, '/')); - } - elseif ($input === '/..') - { - $input = '/'; - $output = substr_replace($output, '', strrpos($output, '/')); - } - // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, - elseif ($input === '.' || $input === '..') - { - $input = ''; - } - // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer - elseif (($pos = strpos($input, '/', 1)) !== false) - { - $output .= substr($input, 0, $pos); - $input = substr_replace($input, '', 0, $pos); - } - else - { - $output .= $input; - $input = ''; - } - } - return $output . $input; - } - - /** - * Replace invalid character with percent encoding - * - * @access private - * @param string $string Input string - * @param string $valid_chars Valid characters - * @param int $case Normalise case - * @return string - */ - function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE) - { - // Normalise case - if ($case & SIMPLEPIE_LOWERCASE) - { - $string = strtolower($string); - } - elseif ($case & SIMPLEPIE_UPPERCASE) - { - $string = strtoupper($string); - } - - // Store position and string length (to avoid constantly recalculating this) - $position = 0; - $strlen = strlen($string); - - // Loop as long as we have invalid characters, advancing the position to the next invalid character - while (($position += strspn($string, $valid_chars, $position)) < $strlen) - { - // If we have a % character - if ($string[$position] === '%') - { - // If we have a pct-encoded section - if ($position + 2 < $strlen && strspn($string, '0123456789ABCDEFabcdef', $position + 1, 2) === 2) - { - // Get the the represented character - $chr = chr(hexdec(substr($string, $position + 1, 2))); - - // If the character is valid, replace the pct-encoded with the actual character while normalising case - if (strpos($valid_chars, $chr) !== false) - { - if ($case & SIMPLEPIE_LOWERCASE) - { - $chr = strtolower($chr); - } - elseif ($case & SIMPLEPIE_UPPERCASE) - { - $chr = strtoupper($chr); - } - $string = substr_replace($string, $chr, $position, 3); - $strlen -= 2; - $position++; - } - - // Otherwise just normalise the pct-encoded to uppercase - else - { - $string = substr_replace($string, strtoupper(substr($string, $position + 1, 2)), $position + 1, 2); - $position += 3; - } - } - // If we don't have a pct-encoded section, just replace the % with its own esccaped form - else - { - $string = substr_replace($string, '%25', $position, 1); - $strlen += 2; - $position += 3; - } - } - // If we have an invalid character, change into its pct-encoded form - else - { - $replacement = sprintf("%%%02X", ord($string[$position])); - $string = str_replace($string[$position], $replacement, $string); - $strlen = strlen($string); - } - } - return $string; - } - - /** - * Check if the object represents a valid IRI - * - * @access public - * @return bool - */ - function is_valid() - { - return array_sum($this->valid) === count($this->valid); - } - - /** - * Set the scheme. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $scheme - * @return bool - */ - function set_scheme($scheme) - { - if ($scheme === null || $scheme === '') - { - $this->scheme = null; - } - else - { - $len = strlen($scheme); - switch (true) - { - case $len > 1: - if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-.', 1)) - { - $this->scheme = null; - $this->valid[__FUNCTION__] = false; - return false; - } - - case $len > 0: - if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 0, 1)) - { - $this->scheme = null; - $this->valid[__FUNCTION__] = false; - return false; - } - } - $this->scheme = strtolower($scheme); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Set the authority. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $authority - * @return bool - */ - function set_authority($authority) - { - if (($userinfo_end = strrpos($authority, '@')) !== false) - { - $userinfo = substr($authority, 0, $userinfo_end); - $authority = substr($authority, $userinfo_end + 1); - } - else - { - $userinfo = null; - } - - if (($port_start = strpos($authority, ':')) !== false) - { - $port = substr($authority, $port_start + 1); - $authority = substr($authority, 0, $port_start); - } - else - { - $port = null; - } - - return $this->set_userinfo($userinfo) && $this->set_host($authority) && $this->set_port($port); - } - - /** - * Set the userinfo. - * - * @access public - * @param string $userinfo - * @return bool - */ - function set_userinfo($userinfo) - { - if ($userinfo === null || $userinfo === '') - { - $this->userinfo = null; - } - else - { - $this->userinfo = $this->replace_invalid_with_pct_encoding($userinfo, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:'); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Set the host. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $host - * @return bool - */ - function set_host($host) - { - if ($host === null || $host === '') - { - $this->host = null; - $this->valid[__FUNCTION__] = true; - return true; - } - elseif ($host[0] === '[' && substr($host, -1) === ']') - { - if (Net_IPv6::checkIPv6(substr($host, 1, -1))) - { - $this->host = $host; - $this->valid[__FUNCTION__] = true; - return true; - } - else - { - $this->host = null; - $this->valid[__FUNCTION__] = false; - return false; - } - } - else - { - $this->host = $this->replace_invalid_with_pct_encoding($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=', SIMPLEPIE_LOWERCASE); - $this->valid[__FUNCTION__] = true; - return true; - } - } - - /** - * Set the port. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $port - * @return bool - */ - function set_port($port) - { - if ($port === null || $port === '') - { - $this->port = null; - $this->valid[__FUNCTION__] = true; - return true; - } - elseif (strspn($port, '0123456789') === strlen($port)) - { - $this->port = (int) $port; - $this->valid[__FUNCTION__] = true; - return true; - } - else - { - $this->port = null; - $this->valid[__FUNCTION__] = false; - return false; - } - } - - /** - * Set the path. - * - * @access public - * @param string $path - * @return bool - */ - function set_path($path) - { - if ($path === null || $path === '') - { - $this->path = null; - $this->valid[__FUNCTION__] = true; - return true; - } - elseif (substr($path, 0, 2) === '//' && $this->userinfo === null && $this->host === null && $this->port === null) - { - $this->path = null; - $this->valid[__FUNCTION__] = false; - return false; - } - else - { - $this->path = $this->replace_invalid_with_pct_encoding($path, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=@/'); - if ($this->scheme !== null) - { - $this->path = $this->remove_dot_segments($this->path); - } - $this->valid[__FUNCTION__] = true; - return true; - } - } - - /** - * Set the query. - * - * @access public - * @param string $query - * @return bool - */ - function set_query($query) - { - if ($query === null || $query === '') - { - $this->query = null; - } - else - { - $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$\'()*+,;:@/?'); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Set the fragment. - * - * @access public - * @param string $fragment - * @return bool - */ - function set_fragment($fragment) - { - if ($fragment === null || $fragment === '') - { - $this->fragment = null; - } - else - { - $this->fragment = $this->replace_invalid_with_pct_encoding($fragment, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?'); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Get the complete IRI - * - * @access public - * @return string - */ - function get_iri() - { - $iri = ''; - if ($this->scheme !== null) - { - $iri .= $this->scheme . ':'; - } - if (($authority = $this->get_authority()) !== null) - { - $iri .= '//' . $authority; - } - if ($this->path !== null) - { - $iri .= $this->path; - } - if ($this->query !== null) - { - $iri .= '?' . $this->query; - } - if ($this->fragment !== null) - { - $iri .= '#' . $this->fragment; - } - - if ($iri !== '') - { - return $iri; - } - else - { - return null; - } - } - - /** - * Get the scheme - * - * @access public - * @return string - */ - function get_scheme() - { - return $this->scheme; - } - - /** - * Get the complete authority - * - * @access public - * @return string - */ - function get_authority() - { - $authority = ''; - if ($this->userinfo !== null) - { - $authority .= $this->userinfo . '@'; - } - if ($this->host !== null) - { - $authority .= $this->host; - } - if ($this->port !== null) - { - $authority .= ':' . $this->port; - } - - if ($authority !== '') - { - return $authority; - } - else - { - return null; - } - } - - /** - * Get the user information - * - * @access public - * @return string - */ - function get_userinfo() - { - return $this->userinfo; - } - - /** - * Get the host - * - * @access public - * @return string - */ - function get_host() - { - return $this->host; - } - - /** - * Get the port - * - * @access public - * @return string - */ - function get_port() - { - return $this->port; - } - - /** - * Get the path - * - * @access public - * @return string - */ - function get_path() - { - return $this->path; - } - - /** - * Get the query - * - * @access public - * @return string - */ - function get_query() - { - return $this->query; - } - - /** - * Get the fragment - * - * @access public - * @return string - */ - function get_fragment() - { - return $this->fragment; - } -} - -/** - * Class to validate and to work with IPv6 addresses. - * - * @package SimplePie - * @copyright 2003-2005 The PHP Group - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/package/Net_IPv6 - * @author Alexander Merz - * @author elfrink at introweb dot nl - * @author Josh Peck - * @author Geoffrey Sneddon - */ -class SimplePie_Net_IPv6 -{ - /** - * Removes a possible existing netmask specification of an IP address. - * - * @param string $ip the (compressed) IP as Hex representation - * @return string the IP the without netmask - * @since 1.1.0 - * @access public - * @static - */ - function removeNetmaskSpec($ip) - { - if (strpos($ip, '/') !== false) - { - list($addr, $nm) = explode('/', $ip); - } - else - { - $addr = $ip; - } - return $addr; - } - - /** - * Uncompresses an IPv6 address - * - * RFC 2373 allows you to compress zeros in an address to '::'. This - * function expects an valid IPv6 address and expands the '::' to - * the required zeros. - * - * Example: FF01::101 -> FF01:0:0:0:0:0:0:101 - * ::1 -> 0:0:0:0:0:0:0:1 - * - * @access public - * @static - * @param string $ip a valid IPv6-address (hex format) - * @return string the uncompressed IPv6-address (hex format) - */ - function Uncompress($ip) - { - $uip = SimplePie_Net_IPv6::removeNetmaskSpec($ip); - $c1 = -1; - $c2 = -1; - if (strpos($ip, '::') !== false) - { - list($ip1, $ip2) = explode('::', $ip); - if ($ip1 === '') - { - $c1 = -1; - } - else - { - $pos = 0; - if (($pos = substr_count($ip1, ':')) > 0) - { - $c1 = $pos; - } - else - { - $c1 = 0; - } - } - if ($ip2 === '') - { - $c2 = -1; - } - else - { - $pos = 0; - if (($pos = substr_count($ip2, ':')) > 0) - { - $c2 = $pos; - } - else - { - $c2 = 0; - } - } - if (strstr($ip2, '.')) - { - $c2++; - } - // :: - if ($c1 === -1 && $c2 === -1) - { - $uip = '0:0:0:0:0:0:0:0'; - } - // ::xxx - else if ($c1 === -1) - { - $fill = str_repeat('0:', 7 - $c2); - $uip = str_replace('::', $fill, $uip); - } - // xxx:: - else if ($c2 === -1) - { - $fill = str_repeat(':0', 7 - $c1); - $uip = str_replace('::', $fill, $uip); - } - // xxx::xxx - else - { - $fill = str_repeat(':0:', 6 - $c2 - $c1); - $uip = str_replace('::', $fill, $uip); - $uip = str_replace('::', ':', $uip); - } - } - return $uip; - } - - /** - * Splits an IPv6 address into the IPv6 and a possible IPv4 part - * - * RFC 2373 allows you to note the last two parts of an IPv6 address as - * an IPv4 compatible address - * - * Example: 0:0:0:0:0:0:13.1.68.3 - * 0:0:0:0:0:FFFF:129.144.52.38 - * - * @access public - * @static - * @param string $ip a valid IPv6-address (hex format) - * @return array [0] contains the IPv6 part, [1] the IPv4 part (hex format) - */ - function SplitV64($ip) - { - $ip = SimplePie_Net_IPv6::Uncompress($ip); - if (strstr($ip, '.')) - { - $pos = strrpos($ip, ':'); - $ip[$pos] = '_'; - $ipPart = explode('_', $ip); - return $ipPart; - } - else - { - return array($ip, ''); - } - } - - /** - * Checks an IPv6 address - * - * Checks if the given IP is IPv6-compatible - * - * @access public - * @static - * @param string $ip a valid IPv6-address - * @return bool true if $ip is an IPv6 address - */ - function checkIPv6($ip) - { - $ipPart = SimplePie_Net_IPv6::SplitV64($ip); - $count = 0; - if (!empty($ipPart[0])) - { - $ipv6 = explode(':', $ipPart[0]); - for ($i = 0; $i < count($ipv6); $i++) - { - $dec = hexdec($ipv6[$i]); - $hex = strtoupper(preg_replace('/^[0]{1,3}(.*[0-9a-fA-F])$/', '\\1', $ipv6[$i])); - if ($ipv6[$i] >= 0 && $dec <= 65535 && $hex === strtoupper(dechex($dec))) - { - $count++; - } - } - if ($count === 8) - { - return true; - } - elseif ($count === 6 && !empty($ipPart[1])) - { - $ipv4 = explode('.', $ipPart[1]); - $count = 0; - foreach ($ipv4 as $ipv4_part) - { - if ($ipv4_part >= 0 && $ipv4_part <= 255 && preg_match('/^\d{1,3}$/', $ipv4_part)) - { - $count++; - } - } - if ($count === 4) - { - return true; - } - } - else - { - return false; - } - - } - else - { - return false; - } - } -} - -/** - * Date Parser - * - * @package SimplePie - */ -class SimplePie_Parse_Date -{ - /** - * Input data - * - * @access protected - * @var string - */ - var $date; - - /** - * List of days, calendar day name => ordinal day number in the week - * - * @access protected - * @var array - */ - var $day = array( - // English - 'mon' => 1, - 'monday' => 1, - 'tue' => 2, - 'tuesday' => 2, - 'wed' => 3, - 'wednesday' => 3, - 'thu' => 4, - 'thursday' => 4, - 'fri' => 5, - 'friday' => 5, - 'sat' => 6, - 'saturday' => 6, - 'sun' => 7, - 'sunday' => 7, - // Dutch - 'maandag' => 1, - 'dinsdag' => 2, - 'woensdag' => 3, - 'donderdag' => 4, - 'vrijdag' => 5, - 'zaterdag' => 6, - 'zondag' => 7, - // French - 'lundi' => 1, - 'mardi' => 2, - 'mercredi' => 3, - 'jeudi' => 4, - 'vendredi' => 5, - 'samedi' => 6, - 'dimanche' => 7, - // German - 'montag' => 1, - 'dienstag' => 2, - 'mittwoch' => 3, - 'donnerstag' => 4, - 'freitag' => 5, - 'samstag' => 6, - 'sonnabend' => 6, - 'sonntag' => 7, - // Italian - 'lunedì' => 1, - 'martedì' => 2, - 'mercoledì' => 3, - 'giovedì' => 4, - 'venerdì' => 5, - 'sabato' => 6, - 'domenica' => 7, - // Spanish - 'lunes' => 1, - 'martes' => 2, - 'miércoles' => 3, - 'jueves' => 4, - 'viernes' => 5, - 'sábado' => 6, - 'domingo' => 7, - // Finnish - 'maanantai' => 1, - 'tiistai' => 2, - 'keskiviikko' => 3, - 'torstai' => 4, - 'perjantai' => 5, - 'lauantai' => 6, - 'sunnuntai' => 7, - // Hungarian - 'hétfő' => 1, - 'kedd' => 2, - 'szerda' => 3, - 'csütörtok' => 4, - 'péntek' => 5, - 'szombat' => 6, - 'vasárnap' => 7, - // Greek - 'Δευ' => 1, - 'Τρι' => 2, - 'Τετ' => 3, - 'Πεμ' => 4, - 'Παρ' => 5, - 'Σαβ' => 6, - 'Κυρ' => 7, - ); - - /** - * List of months, calendar month name => calendar month number - * - * @access protected - * @var array - */ - var $month = array( - // English - 'jan' => 1, - 'january' => 1, - 'feb' => 2, - 'february' => 2, - 'mar' => 3, - 'march' => 3, - 'apr' => 4, - 'april' => 4, - 'may' => 5, - // No long form of May - 'jun' => 6, - 'june' => 6, - 'jul' => 7, - 'july' => 7, - 'aug' => 8, - 'august' => 8, - 'sep' => 9, - 'september' => 8, - 'oct' => 10, - 'october' => 10, - 'nov' => 11, - 'november' => 11, - 'dec' => 12, - 'december' => 12, - // Dutch - 'januari' => 1, - 'februari' => 2, - 'maart' => 3, - 'april' => 4, - 'mei' => 5, - 'juni' => 6, - 'juli' => 7, - 'augustus' => 8, - 'september' => 9, - 'oktober' => 10, - 'november' => 11, - 'december' => 12, - // French - 'janvier' => 1, - 'février' => 2, - 'mars' => 3, - 'avril' => 4, - 'mai' => 5, - 'juin' => 6, - 'juillet' => 7, - 'août' => 8, - 'septembre' => 9, - 'octobre' => 10, - 'novembre' => 11, - 'décembre' => 12, - // German - 'januar' => 1, - 'februar' => 2, - 'märz' => 3, - 'april' => 4, - 'mai' => 5, - 'juni' => 6, - 'juli' => 7, - 'august' => 8, - 'september' => 9, - 'oktober' => 10, - 'november' => 11, - 'dezember' => 12, - // Italian - 'gennaio' => 1, - 'febbraio' => 2, - 'marzo' => 3, - 'aprile' => 4, - 'maggio' => 5, - 'giugno' => 6, - 'luglio' => 7, - 'agosto' => 8, - 'settembre' => 9, - 'ottobre' => 10, - 'novembre' => 11, - 'dicembre' => 12, - // Spanish - 'enero' => 1, - 'febrero' => 2, - 'marzo' => 3, - 'abril' => 4, - 'mayo' => 5, - 'junio' => 6, - 'julio' => 7, - 'agosto' => 8, - 'septiembre' => 9, - 'setiembre' => 9, - 'octubre' => 10, - 'noviembre' => 11, - 'diciembre' => 12, - // Finnish - 'tammikuu' => 1, - 'helmikuu' => 2, - 'maaliskuu' => 3, - 'huhtikuu' => 4, - 'toukokuu' => 5, - 'kesäkuu' => 6, - 'heinäkuu' => 7, - 'elokuu' => 8, - 'suuskuu' => 9, - 'lokakuu' => 10, - 'marras' => 11, - 'joulukuu' => 12, - // Hungarian - 'január' => 1, - 'február' => 2, - 'március' => 3, - 'április' => 4, - 'május' => 5, - 'június' => 6, - 'július' => 7, - 'augusztus' => 8, - 'szeptember' => 9, - 'október' => 10, - 'november' => 11, - 'december' => 12, - // Greek - 'Ιαν' => 1, - 'Φεβ' => 2, - 'Μάώ' => 3, - 'Μαώ' => 3, - 'Απρ' => 4, - 'Μάι' => 5, - 'Μαϊ' => 5, - 'Μαι' => 5, - 'Ιούν' => 6, - 'Ιον' => 6, - 'Ιούλ' => 7, - 'Ιολ' => 7, - 'Αύγ' => 8, - 'Αυγ' => 8, - 'Σεπ' => 9, - 'Οκτ' => 10, - 'Νοέ' => 11, - 'Δεκ' => 12, - ); - - /** - * List of timezones, abbreviation => offset from UTC - * - * @access protected - * @var array - */ - var $timezone = array( - 'ACDT' => 37800, - 'ACIT' => 28800, - 'ACST' => 34200, - 'ACT' => -18000, - 'ACWDT' => 35100, - 'ACWST' => 31500, - 'AEDT' => 39600, - 'AEST' => 36000, - 'AFT' => 16200, - 'AKDT' => -28800, - 'AKST' => -32400, - 'AMDT' => 18000, - 'AMT' => -14400, - 'ANAST' => 46800, - 'ANAT' => 43200, - 'ART' => -10800, - 'AZOST' => -3600, - 'AZST' => 18000, - 'AZT' => 14400, - 'BIOT' => 21600, - 'BIT' => -43200, - 'BOT' => -14400, - 'BRST' => -7200, - 'BRT' => -10800, - 'BST' => 3600, - 'BTT' => 21600, - 'CAST' => 18000, - 'CAT' => 7200, - 'CCT' => 23400, - 'CDT' => -18000, - 'CEDT' => 7200, - 'CET' => 3600, - 'CGST' => -7200, - 'CGT' => -10800, - 'CHADT' => 49500, - 'CHAST' => 45900, - 'CIST' => -28800, - 'CKT' => -36000, - 'CLDT' => -10800, - 'CLST' => -14400, - 'COT' => -18000, - 'CST' => -21600, - 'CVT' => -3600, - 'CXT' => 25200, - 'DAVT' => 25200, - 'DTAT' => 36000, - 'EADT' => -18000, - 'EAST' => -21600, - 'EAT' => 10800, - 'ECT' => -18000, - 'EDT' => -14400, - 'EEST' => 10800, - 'EET' => 7200, - 'EGT' => -3600, - 'EKST' => 21600, - 'EST' => -18000, - 'FJT' => 43200, - 'FKDT' => -10800, - 'FKST' => -14400, - 'FNT' => -7200, - 'GALT' => -21600, - 'GEDT' => 14400, - 'GEST' => 10800, - 'GFT' => -10800, - 'GILT' => 43200, - 'GIT' => -32400, - 'GST' => 14400, - 'GST' => -7200, - 'GYT' => -14400, - 'HAA' => -10800, - 'HAC' => -18000, - 'HADT' => -32400, - 'HAE' => -14400, - 'HAP' => -25200, - 'HAR' => -21600, - 'HAST' => -36000, - 'HAT' => -9000, - 'HAY' => -28800, - 'HKST' => 28800, - 'HMT' => 18000, - 'HNA' => -14400, - 'HNC' => -21600, - 'HNE' => -18000, - 'HNP' => -28800, - 'HNR' => -25200, - 'HNT' => -12600, - 'HNY' => -32400, - 'IRDT' => 16200, - 'IRKST' => 32400, - 'IRKT' => 28800, - 'IRST' => 12600, - 'JFDT' => -10800, - 'JFST' => -14400, - 'JST' => 32400, - 'KGST' => 21600, - 'KGT' => 18000, - 'KOST' => 39600, - 'KOVST' => 28800, - 'KOVT' => 25200, - 'KRAST' => 28800, - 'KRAT' => 25200, - 'KST' => 32400, - 'LHDT' => 39600, - 'LHST' => 37800, - 'LINT' => 50400, - 'LKT' => 21600, - 'MAGST' => 43200, - 'MAGT' => 39600, - 'MAWT' => 21600, - 'MDT' => -21600, - 'MESZ' => 7200, - 'MEZ' => 3600, - 'MHT' => 43200, - 'MIT' => -34200, - 'MNST' => 32400, - 'MSDT' => 14400, - 'MSST' => 10800, - 'MST' => -25200, - 'MUT' => 14400, - 'MVT' => 18000, - 'MYT' => 28800, - 'NCT' => 39600, - 'NDT' => -9000, - 'NFT' => 41400, - 'NMIT' => 36000, - 'NOVST' => 25200, - 'NOVT' => 21600, - 'NPT' => 20700, - 'NRT' => 43200, - 'NST' => -12600, - 'NUT' => -39600, - 'NZDT' => 46800, - 'NZST' => 43200, - 'OMSST' => 25200, - 'OMST' => 21600, - 'PDT' => -25200, - 'PET' => -18000, - 'PETST' => 46800, - 'PETT' => 43200, - 'PGT' => 36000, - 'PHOT' => 46800, - 'PHT' => 28800, - 'PKT' => 18000, - 'PMDT' => -7200, - 'PMST' => -10800, - 'PONT' => 39600, - 'PST' => -28800, - 'PWT' => 32400, - 'PYST' => -10800, - 'PYT' => -14400, - 'RET' => 14400, - 'ROTT' => -10800, - 'SAMST' => 18000, - 'SAMT' => 14400, - 'SAST' => 7200, - 'SBT' => 39600, - 'SCDT' => 46800, - 'SCST' => 43200, - 'SCT' => 14400, - 'SEST' => 3600, - 'SGT' => 28800, - 'SIT' => 28800, - 'SRT' => -10800, - 'SST' => -39600, - 'SYST' => 10800, - 'SYT' => 7200, - 'TFT' => 18000, - 'THAT' => -36000, - 'TJT' => 18000, - 'TKT' => -36000, - 'TMT' => 18000, - 'TOT' => 46800, - 'TPT' => 32400, - 'TRUT' => 36000, - 'TVT' => 43200, - 'TWT' => 28800, - 'UYST' => -7200, - 'UYT' => -10800, - 'UZT' => 18000, - 'VET' => -14400, - 'VLAST' => 39600, - 'VLAT' => 36000, - 'VOST' => 21600, - 'VUT' => 39600, - 'WAST' => 7200, - 'WAT' => 3600, - 'WDT' => 32400, - 'WEST' => 3600, - 'WFT' => 43200, - 'WIB' => 25200, - 'WIT' => 32400, - 'WITA' => 28800, - 'WKST' => 18000, - 'WST' => 28800, - 'YAKST' => 36000, - 'YAKT' => 32400, - 'YAPT' => 36000, - 'YEKST' => 21600, - 'YEKT' => 18000, - ); - - /** - * Cached PCRE for SimplePie_Parse_Date::$day - * - * @access protected - * @var string - */ - var $day_pcre; - - /** - * Cached PCRE for SimplePie_Parse_Date::$month - * - * @access protected - * @var string - */ - var $month_pcre; - - /** - * Array of user-added callback methods - * - * @access private - * @var array - */ - var $built_in = array(); - - /** - * Array of user-added callback methods - * - * @access private - * @var array - */ - var $user = array(); - - /** - * Create new SimplePie_Parse_Date object, and set self::day_pcre, - * self::month_pcre, and self::built_in - * - * @access private - */ - function SimplePie_Parse_Date() - { - $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')'; - $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')'; - - static $cache; - if (!isset($cache[get_class($this)])) - { - $all_methods = get_class_methods($this); - - foreach ($all_methods as $method) - { - if (strtolower(substr($method, 0, 5)) === 'date_') - { - $cache[get_class($this)][] = $method; - } - } - } - - foreach ($cache[get_class($this)] as $method) - { - $this->built_in[] = $method; - } - } - - /** - * Get the object - * - * @access public - */ - function get() - { - static $object; - if (!$object) - { - $object = new SimplePie_Parse_Date; - } - return $object; - } - - /** - * Parse a date - * - * @final - * @access public - * @param string $date Date to parse - * @return int Timestamp corresponding to date string, or false on failure - */ - function parse($date) - { - foreach ($this->user as $method) - { - if (($returned = call_user_func($method, $date)) !== false) - { - return $returned; - } - } - - foreach ($this->built_in as $method) - { - if (($returned = call_user_func(array(&$this, $method), $date)) !== false) - { - return $returned; - } - } - - return false; - } - - /** - * Add a callback method to parse a date - * - * @final - * @access public - * @param callback $callback - */ - function add_callback($callback) - { - if (is_callable($callback)) - { - $this->user[] = $callback; - } - else - { - trigger_error('User-supplied function must be a valid callback', E_USER_WARNING); - } - } - - /** - * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as - * well as allowing any of upper or lower case "T", horizontal tabs, or - * spaces to be used as the time seperator (including more than one)) - * - * @access protected - * @return int Timestamp - */ - function date_w3cdtf($date) - { - static $pcre; - if (!$pcre) - { - $year = '([0-9]{4})'; - $month = $day = $hour = $minute = $second = '([0-9]{2})'; - $decimal = '([0-9]*)'; - $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; - $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Year - 2: Month - 3: Day - 4: Hour - 5: Minute - 6: Second - 7: Decimal fraction of a second - 8: Zulu - 9: Timezone ± - 10: Timezone hours - 11: Timezone minutes - */ - - // Fill in empty matches - for ($i = count($match); $i <= 3; $i++) - { - $match[$i] = '1'; - } - - for ($i = count($match); $i <= 7; $i++) - { - $match[$i] = '0'; - } - - // Numeric timezone - if (isset($match[9]) && $match[9] !== '') - { - $timezone = $match[10] * 3600; - $timezone += $match[11] * 60; - if ($match[9] === '-') - { - $timezone = 0 - $timezone; - } - } - else - { - $timezone = 0; - } - - // Convert the number of seconds to an integer, taking decimals into account - $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); - - return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; - } - else - { - return false; - } - } - - /** - * Remove RFC822 comments - * - * @access protected - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - function remove_rfc2822_comments($string) - { - $string = (string) $string; - $position = 0; - $length = strlen($string); - $depth = 0; - - $output = ''; - - while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) - { - $output .= substr($string, $position, $pos - $position); - $position = $pos + 1; - if ($string[$pos - 1] !== '\\') - { - $depth++; - while ($depth && $position < $length) - { - $position += strcspn($string, '()', $position); - if ($string[$position - 1] === '\\') - { - $position++; - continue; - } - elseif (isset($string[$position])) - { - switch ($string[$position]) - { - case '(': - $depth++; - break; - - case ')': - $depth--; - break; - } - $position++; - } - else - { - break; - } - } - } - else - { - $output .= '('; - } - } - $output .= substr($string, $position); - - return $output; - } - - /** - * Parse RFC2822's date format - * - * @access protected - * @return int Timestamp - */ - function date_rfc2822($date) - { - static $pcre; - if (!$pcre) - { - $wsp = '[\x09\x20]'; - $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; - $optional_fws = $fws . '?'; - $day_name = $this->day_pcre; - $month = $this->month_pcre; - $day = '([0-9]{1,2})'; - $hour = $minute = $second = '([0-9]{2})'; - $year = '([0-9]{2,4})'; - $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; - $character_zone = '([A-Z]{1,5})'; - $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; - $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; - } - if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Day - 3: Month - 4: Year - 5: Hour - 6: Minute - 7: Second - 8: Timezone ± - 9: Timezone hours - 10: Timezone minutes - 11: Alphabetic timezone - */ - - // Find the month number - $month = $this->month[strtolower($match[3])]; - - // Numeric timezone - if ($match[8] !== '') - { - $timezone = $match[9] * 3600; - $timezone += $match[10] * 60; - if ($match[8] === '-') - { - $timezone = 0 - $timezone; - } - } - // Character timezone - elseif (isset($this->timezone[strtoupper($match[11])])) - { - $timezone = $this->timezone[strtoupper($match[11])]; - } - // Assume everything else to be -0000 - else - { - $timezone = 0; - } - - // Deal with 2/3 digit years - if ($match[4] < 50) - { - $match[4] += 2000; - } - elseif ($match[4] < 1000) - { - $match[4] += 1900; - } - - // Second is optional, if it is empty set it to zero - if ($match[7] !== '') - { - $second = $match[7]; - } - else - { - $second = 0; - } - - return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; - } - else - { - return false; - } - } - - /** - * Parse RFC850's date format - * - * @access protected - * @return int Timestamp - */ - function date_rfc850($date) - { - static $pcre; - if (!$pcre) - { - $space = '[\x09\x20]+'; - $day_name = $this->day_pcre; - $month = $this->month_pcre; - $day = '([0-9]{1,2})'; - $year = $hour = $minute = $second = '([0-9]{2})'; - $zone = '([A-Z]{1,5})'; - $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Day - 3: Month - 4: Year - 5: Hour - 6: Minute - 7: Second - 8: Timezone - */ - - // Month - $month = $this->month[strtolower($match[3])]; - - // Character timezone - if (isset($this->timezone[strtoupper($match[8])])) - { - $timezone = $this->timezone[strtoupper($match[8])]; - } - // Assume everything else to be -0000 - else - { - $timezone = 0; - } - - // Deal with 2 digit year - if ($match[4] < 50) - { - $match[4] += 2000; - } - else - { - $match[4] += 1900; - } - - return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; - } - else - { - return false; - } - } - - /** - * Parse C99's asctime()'s date format - * - * @access protected - * @return int Timestamp - */ - function date_asctime($date) - { - static $pcre; - if (!$pcre) - { - $space = '[\x09\x20]+'; - $wday_name = $this->day_pcre; - $mon_name = $this->month_pcre; - $day = '([0-9]{1,2})'; - $hour = $sec = $min = '([0-9]{2})'; - $year = '([0-9]{4})'; - $terminator = '\x0A?\x00?'; - $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Month - 3: Day - 4: Hour - 5: Minute - 6: Second - 7: Year - */ - - $month = $this->month[strtolower($match[2])]; - return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); - } - else - { - return false; - } - } - - /** - * Parse dates using strtotime() - * - * @access protected - * @return int Timestamp - */ - function date_strtotime($date) - { - $strtotime = strtotime($date); - if ($strtotime === -1 || $strtotime === false) - { - return false; - } - else - { - return $strtotime; - } - } -} - -/** - * Content-type sniffing - * - * @package SimplePie - */ -class SimplePie_Content_Type_Sniffer -{ - /** - * File object - * - * @var SimplePie_File - * @access private - */ - var $file; - - /** - * Create an instance of the class with the input file - * - * @access public - * @param SimplePie_Content_Type_Sniffer $file Input file - */ - function SimplePie_Content_Type_Sniffer($file) - { - $this->file = $file; - } - - /** - * Get the Content-Type of the specified file - * - * @access public - * @return string Actual Content-Type - */ - function get_type() - { - if (isset($this->file->headers['content-type'])) - { - if (!isset($this->file->headers['content-encoding']) - && ($this->file->headers['content-type'] === 'text/plain' - || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1' - || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1')) - { - return $this->text_or_binary(); - } - - if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) - { - $official = substr($this->file->headers['content-type'], 0, $pos); - } - else - { - $official = $this->file->headers['content-type']; - } - $official = strtolower($official); - - if ($official === 'unknown/unknown' - || $official === 'application/unknown') - { - return $this->unknown(); - } - elseif (substr($official, -4) === '+xml' - || $official === 'text/xml' - || $official === 'application/xml') - { - return $official; - } - elseif (substr($official, 0, 6) === 'image/') - { - if ($return = $this->image()) - { - return $return; - } - else - { - return $official; - } - } - elseif ($official === 'text/html') - { - return $this->feed_or_html(); - } - else - { - return $official; - } - } - else - { - return $this->unknown(); - } - } - - /** - * Sniff text or binary - * - * @access private - * @return string Actual Content-Type - */ - function text_or_binary() - { - if (substr($this->file->body, 0, 2) === "\xFE\xFF" - || substr($this->file->body, 0, 2) === "\xFF\xFE" - || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF" - || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") - { - return 'text/plain'; - } - elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) - { - return 'application/octect-stream'; - } - else - { - return 'text/plain'; - } - } - - /** - * Sniff unknown - * - * @access private - * @return string Actual Content-Type - */ - function unknown() - { - $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20"); - if (strtolower(substr($this->file->body, $ws, 14)) === 'file->body, $ws, 5)) === 'file->body, $ws, 7)) === 'file->body, 0, 5) === '%PDF-') - { - return 'application/pdf'; - } - elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') - { - return 'application/postscript'; - } - elseif (substr($this->file->body, 0, 6) === 'GIF87a' - || substr($this->file->body, 0, 6) === 'GIF89a') - { - return 'image/gif'; - } - elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") - { - return 'image/png'; - } - elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") - { - return 'image/jpeg'; - } - elseif (substr($this->file->body, 0, 2) === "\x42\x4D") - { - return 'image/bmp'; - } - else - { - return $this->text_or_binary(); - } - } - - /** - * Sniff images - * - * @access private - * @return string Actual Content-Type - */ - function image() - { - if (substr($this->file->body, 0, 6) === 'GIF87a' - || substr($this->file->body, 0, 6) === 'GIF89a') - { - return 'image/gif'; - } - elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") - { - return 'image/png'; - } - elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") - { - return 'image/jpeg'; - } - elseif (substr($this->file->body, 0, 2) === "\x42\x4D") - { - return 'image/bmp'; - } - else - { - return false; - } - } - - /** - * Sniff HTML - * - * @access private - * @return string Actual Content-Type - */ - function feed_or_html() - { - $len = strlen($this->file->body); - $pos = strspn($this->file->body, "\x09\x0A\x0D\x20"); - - while ($pos < $len) - { - switch ($this->file->body[$pos]) - { - case "\x09": - case "\x0A": - case "\x0D": - case "\x20": - $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos); - continue 2; - - case '<': - $pos++; - break; - - default: - return 'text/html'; - } - - if (substr($this->file->body, $pos, 3) === '!--') - { - $pos += 3; - if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) - { - $pos += 3; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 1) === '!') - { - if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) - { - $pos++; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 1) === '?') - { - if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) - { - $pos += 2; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 3) === 'rss' - || substr($this->file->body, $pos, 7) === 'rdf:RDF') - { - return 'application/rss+xml'; - } - elseif (substr($this->file->body, $pos, 4) === 'feed') - { - return 'application/atom+xml'; - } - else - { - return 'text/html'; - } - } - - return 'text/html'; - } -} - -/** - * Parses the XML Declaration - * - * @package SimplePie - */ -class SimplePie_XML_Declaration_Parser -{ - /** - * XML Version - * - * @access public - * @var string - */ - var $version = '1.0'; - - /** - * Encoding - * - * @access public - * @var string - */ - var $encoding = 'UTF-8'; - - /** - * Standalone - * - * @access public - * @var bool - */ - var $standalone = false; - - /** - * Current state of the state machine - * - * @access private - * @var string - */ - var $state = 'before_version_name'; - - /** - * Input data - * - * @access private - * @var string - */ - var $data = ''; - - /** - * Input data length (to avoid calling strlen() everytime this is needed) - * - * @access private - * @var int - */ - var $data_length = 0; - - /** - * Current position of the pointer - * - * @var int - * @access private - */ - var $position = 0; - - /** - * Create an instance of the class with the input data - * - * @access public - * @param string $data Input data - */ - function SimplePie_XML_Declaration_Parser($data) - { - $this->data = $data; - $this->data_length = strlen($this->data); - } - - /** - * Parse the input data - * - * @access public - * @return bool true on success, false on failure - */ - function parse() - { - while ($this->state && $this->state !== 'emit' && $this->has_data()) - { - $state = $this->state; - $this->$state(); - } - $this->data = ''; - if ($this->state === 'emit') - { - return true; - } - else - { - $this->version = ''; - $this->encoding = ''; - $this->standalone = ''; - return false; - } - } - - /** - * Check whether there is data beyond the pointer - * - * @access private - * @return bool true if there is further data, false if not - */ - function has_data() - { - return (bool) ($this->position < $this->data_length); - } - - /** - * Advance past any whitespace - * - * @return int Number of whitespace characters passed - */ - function skip_whitespace() - { - $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); - $this->position += $whitespace; - return $whitespace; - } - - /** - * Read value - */ - function get_value() - { - $quote = substr($this->data, $this->position, 1); - if ($quote === '"' || $quote === "'") - { - $this->position++; - $len = strcspn($this->data, $quote, $this->position); - if ($this->has_data()) - { - $value = substr($this->data, $this->position, $len); - $this->position += $len + 1; - return $value; - } - } - return false; - } - - function before_version_name() - { - if ($this->skip_whitespace()) - { - $this->state = 'version_name'; - } - else - { - $this->state = false; - } - } - - function version_name() - { - if (substr($this->data, $this->position, 7) === 'version') - { - $this->position += 7; - $this->skip_whitespace(); - $this->state = 'version_equals'; - } - else - { - $this->state = false; - } - } - - function version_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'version_value'; - } - else - { - $this->state = false; - } - } - - function version_value() - { - if ($this->version = $this->get_value()) - { - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = 'encoding_name'; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } - - function encoding_name() - { - if (substr($this->data, $this->position, 8) === 'encoding') - { - $this->position += 8; - $this->skip_whitespace(); - $this->state = 'encoding_equals'; - } - else - { - $this->state = 'standalone_name'; - } - } - - function encoding_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'encoding_value'; - } - else - { - $this->state = false; - } - } - - function encoding_value() - { - if ($this->encoding = $this->get_value()) - { - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = 'standalone_name'; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } - - function standalone_name() - { - if (substr($this->data, $this->position, 10) === 'standalone') - { - $this->position += 10; - $this->skip_whitespace(); - $this->state = 'standalone_equals'; - } - else - { - $this->state = false; - } - } - - function standalone_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'standalone_value'; - } - else - { - $this->state = false; - } - } - - function standalone_value() - { - if ($standalone = $this->get_value()) - { - switch ($standalone) - { - case 'yes': - $this->standalone = true; - break; - - case 'no': - $this->standalone = false; - break; - - default: - $this->state = false; - return; - } - - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = false; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } -} - -class SimplePie_Locator -{ - var $useragent; - var $timeout; - var $file; - var $local = array(); - var $elsewhere = array(); - var $file_class = 'SimplePie_File'; - var $cached_entities = array(); - var $http_base; - var $base; - var $base_location = 0; - var $checked_feeds = 0; - var $max_checked_feeds = 10; - var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; - - function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer') - { - $this->file =& $file; - $this->file_class = $file_class; - $this->useragent = $useragent; - $this->timeout = $timeout; - $this->max_checked_feeds = $max_checked_feeds; - $this->content_type_sniffer_class = $content_type_sniffer_class; - } - - function find($type = SIMPLEPIE_LOCATOR_ALL, &$working) - { - if ($this->is_feed($this->file)) - { - return $this->file; - } - - if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) - { - $sniffer = new $this->content_type_sniffer_class($this->file); - if ($sniffer->get_type() !== 'text/html') - { - return null; - } - } - - if ($type & ~SIMPLEPIE_LOCATOR_NONE) - { - $this->get_base(); - } - - if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) - { - return $working[0]; - } - - if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links()) - { - if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) - { - return $working; - } - } - return null; - } - - function is_feed(&$file) - { - if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) - { - $sniffer = new $this->content_type_sniffer_class($file); - $sniffed = $sniffer->get_type(); - if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml'))) - { - return true; - } - else - { - return false; - } - } - elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) - { - return true; - } - else - { - return false; - } - } - - function get_base() - { - $this->http_base = $this->file->url; - $this->base = $this->http_base; - $elements = SimplePie_Misc::get_element('base', $this->file->body); - foreach ($elements as $element) - { - if ($element['attribs']['href']['data'] !== '') - { - $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base); - $this->base_location = $element['offset']; - break; - } - } - } - - function autodiscovery() - { - $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body)); - $done = array(); - $feeds = array(); - foreach ($links as $link) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data'])) - { - $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data']))); - - if ($this->base_location < $link['offset']) - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); - } - else - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); - } - - if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href])) - { - $this->checked_feeds++; - $feed = new $this->file_class($href, $this->timeout, 5, null, $this->useragent); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - $feeds[$href] = $feed; - } - } - $done[] = $href; - } - } - - if (!empty($feeds)) - { - return array_values($feeds); - } - else { - return null; - } - } - - function get_links() - { - $links = SimplePie_Misc::get_element('a', $this->file->body); - foreach ($links as $link) - { - if (isset($link['attribs']['href']['data'])) - { - $href = trim($link['attribs']['href']['data']); - $parsed = SimplePie_Misc::parse_url($href); - if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme'])) - { - if ($this->base_location < $link['offset']) - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); - } - else - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); - } - - $current = SimplePie_Misc::parse_url($this->file->url); - - if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) - { - $this->local[] = $href; - } - else - { - $this->elsewhere[] = $href; - } - } - } - } - $this->local = array_unique($this->local); - $this->elsewhere = array_unique($this->elsewhere); - if (!empty($this->local) || !empty($this->elsewhere)) - { - return true; - } - return null; - } - - function extension(&$array) - { - foreach ($array as $key => $value) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml'))) - { - $this->checked_feeds++; - $feed = new $this->file_class($value, $this->timeout, 5, null, $this->useragent); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - return $feed; - } - else - { - unset($array[$key]); - } - } - } - return null; - } - - function body(&$array) - { - foreach ($array as $key => $value) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (preg_match('/(rss|rdf|atom|xml)/i', $value)) - { - $this->checked_feeds++; - $feed = new $this->file_class($value, $this->timeout, 5, null, $this->useragent); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - return $feed; - } - else - { - unset($array[$key]); - } - } - } - return null; - } -} - -class SimplePie_Parser -{ - var $error_code; - var $error_string; - var $current_line; - var $current_column; - var $current_byte; - var $separator = ' '; - var $namespace = array(''); - var $element = array(''); - var $xml_base = array(''); - var $xml_base_explicit = array(false); - var $xml_lang = array(''); - var $data = array(); - var $datas = array(array()); - var $current_xhtml_construct = -1; - var $encoding; - - function parse(&$data, $encoding) - { - // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character - if (strtoupper($encoding) === 'US-ASCII') - { - $this->encoding = 'UTF-8'; - } - else - { - $this->encoding = $encoding; - } - - // Strip BOM: - // UTF-32 Big Endian BOM - if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") - { - $data = substr($data, 4); - } - // UTF-32 Little Endian BOM - elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") - { - $data = substr($data, 4); - } - // UTF-16 Big Endian BOM - elseif (substr($data, 0, 2) === "\xFE\xFF") - { - $data = substr($data, 2); - } - // UTF-16 Little Endian BOM - elseif (substr($data, 0, 2) === "\xFF\xFE") - { - $data = substr($data, 2); - } - // UTF-8 BOM - elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") - { - $data = substr($data, 3); - } - - if (substr($data, 0, 5) === '')) !== false) - { - $declaration = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); - if ($declaration->parse()) - { - $data = substr($data, $pos + 2); - $data = 'version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data; - } - else - { - $this->error_string = 'SimplePie bug! Please report this!'; - return false; - } - } - - $return = true; - - static $xml_is_sane = null; - if ($xml_is_sane === null) - { - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '&', $values); - xml_parser_free($parser_check); - $xml_is_sane = isset($values[0]['value']); - } - - // Create the parser - if ($xml_is_sane) - { - $xml = xml_parser_create_ns($this->encoding, $this->separator); - xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); - xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); - xml_set_object($xml, $this); - xml_set_character_data_handler($xml, 'cdata'); - xml_set_element_handler($xml, 'tag_open', 'tag_close'); - - // Parse! - if (!xml_parse($xml, $data, true)) - { - $this->error_code = xml_get_error_code($xml); - $this->error_string = xml_error_string($this->error_code); - $return = false; - } - $this->current_line = xml_get_current_line_number($xml); - $this->current_column = xml_get_current_column_number($xml); - $this->current_byte = xml_get_current_byte_index($xml); - xml_parser_free($xml); - return $return; - } - else - { - libxml_clear_errors(); - $xml = new XMLReader(); - $xml->xml($data); - while (@$xml->read()) - { - switch ($xml->nodeType) - { - - case constant('XMLReader::END_ELEMENT'): - if ($xml->namespaceURI !== '') - { - $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; - } - else - { - $tagName = $xml->localName; - } - $this->tag_close(null, $tagName); - break; - case constant('XMLReader::ELEMENT'): - $empty = $xml->isEmptyElement; - if ($xml->namespaceURI !== '') - { - $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; - } - else - { - $tagName = $xml->localName; - } - $attributes = array(); - while ($xml->moveToNextAttribute()) - { - if ($xml->namespaceURI !== '') - { - $attrName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; - } - else - { - $attrName = $xml->localName; - } - $attributes[$attrName] = $xml->value; - } - $this->tag_open(null, $tagName, $attributes); - if ($empty) - { - $this->tag_close(null, $tagName); - } - break; - case constant('XMLReader::TEXT'): - - case constant('XMLReader::CDATA'): - $this->cdata(null, $xml->value); - break; - } - } - if ($error = libxml_get_last_error()) - { - $this->error_code = $error->code; - $this->error_string = $error->message; - $this->current_line = $error->line; - $this->current_column = $error->column; - return false; - } - else - { - return true; - } - } - } - - function get_error_code() - { - return $this->error_code; - } - - function get_error_string() - { - return $this->error_string; - } - - function get_current_line() - { - return $this->current_line; - } - - function get_current_column() - { - return $this->current_column; - } - - function get_current_byte() - { - return $this->current_byte; - } - - function get_data() - { - return $this->data; - } - - function tag_open($parser, $tag, $attributes) - { - list($this->namespace[], $this->element[]) = $this->split_ns($tag); - - $attribs = array(); - foreach ($attributes as $name => $value) - { - list($attrib_namespace, $attribute) = $this->split_ns($name); - $attribs[$attrib_namespace][$attribute] = $value; - } - - if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base'])) - { - $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base)); - $this->xml_base_explicit[] = true; - } - else - { - $this->xml_base[] = end($this->xml_base); - $this->xml_base_explicit[] = end($this->xml_base_explicit); - } - - if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang'])) - { - $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang']; - } - else - { - $this->xml_lang[] = end($this->xml_lang); - } - - if ($this->current_xhtml_construct >= 0) - { - $this->current_xhtml_construct++; - if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML) - { - $this->data['data'] .= '<' . end($this->element); - if (isset($attribs[''])) - { - foreach ($attribs[''] as $name => $value) - { - $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"'; - } - } - $this->data['data'] .= '>'; - } - } - else - { - $this->datas[] =& $this->data; - $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; - $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); - if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml') - || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')) - { - $this->current_xhtml_construct = 0; - } - } - } - - function cdata($parser, $cdata) - { - if ($this->current_xhtml_construct >= 0) - { - $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); - } - else - { - $this->data['data'] .= $cdata; - } - } - - function tag_close($parser, $tag) - { - if ($this->current_xhtml_construct >= 0) - { - $this->current_xhtml_construct--; - if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) - { - $this->data['data'] .= 'element) . '>'; - } - } - if ($this->current_xhtml_construct === -1) - { - $this->data =& $this->datas[count($this->datas) - 1]; - array_pop($this->datas); - } - - array_pop($this->element); - array_pop($this->namespace); - array_pop($this->xml_base); - array_pop($this->xml_base_explicit); - array_pop($this->xml_lang); - } - - function split_ns($string) - { - static $cache = array(); - if (!isset($cache[$string])) - { - if ($pos = strpos($string, $this->separator)) - { - static $separator_length; - if (!$separator_length) - { - $separator_length = strlen($this->separator); - } - $namespace = substr($string, 0, $pos); - $local_name = substr($string, $pos + $separator_length); - if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES) - { - $namespace = SIMPLEPIE_NAMESPACE_ITUNES; - } - - // Normalize the Media RSS namespaces - if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG) - { - $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS; - } - $cache[$string] = array($namespace, $local_name); - } - else - { - $cache[$string] = array('', $string); - } - } - return $cache[$string]; - } -} - -/** - * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags - */ -class SimplePie_Sanitize -{ - // Private vars - var $base; - - // Options - var $remove_div = true; - var $image_handler = ''; - var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); - var $encode_instead_of_strip = false; - var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); - var $strip_comments = false; - var $output_encoding = 'UTF-8'; - var $enable_cache = true; - var $cache_location = './cache'; - var $cache_name_function = 'md5'; - var $cache_class = 'SimplePie_Cache'; - var $file_class = 'SimplePie_File'; - var $timeout = 10; - var $useragent = ''; - var $force_fsockopen = false; - - var $replace_url_attributes = array( - 'a' => 'href', - 'area' => 'href', - 'blockquote' => 'cite', - 'del' => 'cite', - 'form' => 'action', - 'img' => array('longdesc', 'src'), - 'input' => 'src', - 'ins' => 'cite', - 'q' => 'cite' - ); - - function remove_div($enable = true) - { - $this->remove_div = (bool) $enable; - } - - function set_image_handler($page = false) - { - if ($page) - { - $this->image_handler = (string) $page; - } - else - { - $this->image_handler = false; - } - } - - function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache') - { - if (isset($enable_cache)) - { - $this->enable_cache = (bool) $enable_cache; - } - - if ($cache_location) - { - $this->cache_location = (string) $cache_location; - } - - if ($cache_name_function) - { - $this->cache_name_function = (string) $cache_name_function; - } - - if ($cache_class) - { - $this->cache_class = (string) $cache_class; - } - } - - function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false) - { - if ($file_class) - { - $this->file_class = (string) $file_class; - } - - if ($timeout) - { - $this->timeout = (string) $timeout; - } - - if ($useragent) - { - $this->useragent = (string) $useragent; - } - - if ($force_fsockopen) - { - $this->force_fsockopen = (string) $force_fsockopen; - } - } - - function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style')) - { - if ($tags) - { - if (is_array($tags)) - { - $this->strip_htmltags = $tags; - } - else - { - $this->strip_htmltags = explode(',', $tags); - } - } - else - { - $this->strip_htmltags = false; - } - } - - function encode_instead_of_strip($encode = false) - { - $this->encode_instead_of_strip = (bool) $encode; - } - - function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) - { - if ($attribs) - { - if (is_array($attribs)) - { - $this->strip_attributes = $attribs; - } - else - { - $this->strip_attributes = explode(',', $attribs); - } - } - else - { - $this->strip_attributes = false; - } - } - - function strip_comments($strip = false) - { - $this->strip_comments = (bool) $strip; - } - - function set_output_encoding($encoding = 'UTF-8') - { - $this->output_encoding = (string) $encoding; - } - - /** - * Set element/attribute key/value pairs of HTML attributes - * containing URLs that need to be resolved relative to the feed - * - * @access public - * @since 1.0 - * @param array $element_attribute Element/attribute key/value pairs - */ - function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) - { - $this->replace_url_attributes = (array) $element_attribute; - } - - function sanitize($data, $type, $base = '') - { - $data = trim($data); - if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI) - { - if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML) - { - if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) - { - $type |= SIMPLEPIE_CONSTRUCT_HTML; - } - else - { - $type |= SIMPLEPIE_CONSTRUCT_TEXT; - } - } - - if ($type & SIMPLEPIE_CONSTRUCT_BASE64) - { - $data = base64_decode($data); - } - - if ($type & SIMPLEPIE_CONSTRUCT_XHTML) - { - if ($this->remove_div) - { - $data = preg_replace('/^/', '', $data); - $data = preg_replace('/<\/div>$/', '', $data); - } - else - { - $data = preg_replace('/^/', '
', $data); - } - } - - if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) - { - // Strip comments - if ($this->strip_comments) - { - $data = SimplePie_Misc::strip_comments($data); - } - - // Strip out HTML tags and attributes that might cause various security problems. - // Based on recommendations by Mark Pilgrim at: - // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely - if ($this->strip_htmltags) - { - foreach ($this->strip_htmltags as $tag) - { - $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU'; - while (preg_match($pcre, $data)) - { - $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data); - } - } - } - - if ($this->strip_attributes) - { - foreach ($this->strip_attributes as $attrib) - { - $data = preg_replace('/(<[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . trim($attrib) . '(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>/', '\1\2\3>', $data); - } - } - - // Replace relative URLs - $this->base = $base; - foreach ($this->replace_url_attributes as $element => $attributes) - { - $data = $this->replace_urls($data, $element, $attributes); - } - - // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags. - if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) - { - $images = SimplePie_Misc::get_element('img', $data); - foreach ($images as $img) - { - if (isset($img['attribs']['src']['data'])) - { - $image_url = call_user_func($this->cache_name_function, $img['attribs']['src']['data']); - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $image_url, 'spi'); - - if ($cache->load()) - { - $img['attribs']['src']['data'] = $this->image_handler . $image_url; - $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); - } - else - { - $file = new $this->file_class($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); - $headers = $file->headers; - - if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) - { - $img['attribs']['src']['data'] = $this->image_handler . $image_url; - $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); - } - else - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - } - } - } - } - } - - // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data - $data = trim($data); - } - - if ($type & SIMPLEPIE_CONSTRUCT_IRI) - { - $data = SimplePie_Misc::absolutize_url($data, $base); - } - - if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI)) - { - $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); - } - - if ($this->output_encoding !== 'UTF-8') - { - $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding); - } - } - return $data; - } - - function replace_urls($data, $tag, $attributes) - { - if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) - { - $elements = SimplePie_Misc::get_element($tag, $data); - foreach ($elements as $element) - { - if (is_array($attributes)) - { - foreach ($attributes as $attribute) - { - if (isset($element['attribs'][$attribute]['data'])) - { - $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base); - $new_element = SimplePie_Misc::element_implode($element); - $data = str_replace($element['full'], $new_element, $data); - $element['full'] = $new_element; - } - } - } - elseif (isset($element['attribs'][$attributes]['data'])) - { - $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base); - $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data); - } - } - } - return $data; - } - - function do_strip_htmltags($match) - { - if ($this->encode_instead_of_strip) - { - if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) - { - $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8'); - $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8'); - return "<$match[1]$match[2]>$match[3]</$match[1]>"; - } - else - { - return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8'); - } - } - elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) - { - return $match[4]; - } - else - { - return ''; - } - } -} - -?> diff --git a/mod/item.php b/mod/item.php index 7e575a17e4..2ade524a05 100644 --- a/mod/item.php +++ b/mod/item.php @@ -160,6 +160,9 @@ function item_post(&$a) { logger('no contact found: '.print_r($thrparent, true), LOGGER_DEBUG); } else logger('parent contact: '.print_r($parent_contact, true), LOGGER_DEBUG); + + if ($parent_contact["nick"] == "") + $parent_contact["nick"] = $parent_contact["name"]; } } diff --git a/mod/noscrape.php b/mod/noscrape.php index 51bd7234cf..1f7105b769 100644 --- a/mod/noscrape.php +++ b/mod/noscrape.php @@ -22,13 +22,17 @@ function noscrape_init(&$a) { $keywords = str_replace(array('#',',',' ',',,'),array('',' ',',',','),$keywords); $keywords = explode(',', $keywords); + $r = q("SELECT `photo` FROM `contact` WHERE `self` AND `uid` = %d", + intval($a->profile['uid'])); + $json_info = array( 'fn' => $a->profile['name'], 'addr' => $a->profile['addr'], + 'nick' => $a->user['nickname'], 'key' => $a->profile['pubkey'], 'homepage' => $a->get_baseurl()."/profile/{$which}", 'comm' => (x($a->profile,'page-flags')) && ($a->profile['page-flags'] == PAGE_COMMUNITY), - 'photo' => $a->profile['photo'], + 'photo' => $r[0]["photo"], 'tags' => $keywords ); diff --git a/util/README b/util/README index 20a539215e..fad1270d47 100644 --- a/util/README +++ b/util/README @@ -10,7 +10,7 @@ Internationalisation extract.php - extracts translatable strings from our project files. It currently doesn't pick up strings in other libraries we might be using such as -tinymce, simplepie, and the HTML parsers. +tinymce and the HTML parsers. In order for extract to do its job, every use of the t() translation function must be preceded by one space. The string also can not contain parentheses. If diff --git a/util/make_credits.py b/util/make_credits.py index 404b059133..eacb8707f4 100755 --- a/util/make_credits.py +++ b/util/make_credits.py @@ -46,17 +46,20 @@ for i in c: n1 = len(contributors) print(' > found %d contributors' % n1) # get the contributors to the addons -os.chdir(path+'/addon') -# get the contributors -print('> getting contributors to the addons') -p = subprocess.Popen(['git', 'shortlog', '--no-merges', '-s'], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) -c = iter(p.stdout.readline, b'') -for i in c: - name = i.decode().split('\t')[1].split('\n')[0] - if not name in contributors and name not in dontinclude: - contributors.append(name) +try: + os.chdir(path+'/addon') + # get the contributors + print('> getting contributors to the addons') + p = subprocess.Popen(['git', 'shortlog', '--no-merges', '-s'], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + c = iter(p.stdout.readline, b'') + for i in c: + name = i.decode().split('\t')[1].split('\n')[0] + if not name in contributors and name not in dontinclude: + contributors.append(name) +except FileNotFoundError: + print(' > no addon directory found ( THE LIST OF CONTRIBUTORS WILL BE INCOMPLETE )') n2 = len(contributors) print(' > found %d new contributors' % (n2-n1)) print('> total of %d contributors to the repositories of friendica' % n2) diff --git a/view/ru/messages.po b/view/ru/messages.po index 4b0e372dd6..7f65e8f1be 100644 --- a/view/ru/messages.po +++ b/view/ru/messages.po @@ -1,8 +1,9 @@ # FRIENDICA Distributed Social Network # Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project # This file is distributed under the same license as the Friendica package. -# +# # Translators: +# Aliaksei Sakalou , 2016 # Alex , 2013 # vislav , 2014 # Alex , 2013 @@ -15,1151 +16,1317 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-09 08:57+0100\n" -"PO-Revision-Date: 2015-02-09 09:46+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/friendica/language/ru/)\n" +"POT-Creation-Date: 2016-01-24 06:49+0100\n" +"PO-Revision-Date: 2016-02-16 18:28+0300\n" +"Last-Translator: Aliaksei Sakalou \n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/" +"language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" +"X-Generator: Poedit 1.5.4\n" -#: ../../mod/contacts.php:108 +#: mod/contacts.php:50 include/identity.php:395 +msgid "Network:" +msgstr "Сеть:" + +#: mod/contacts.php:51 mod/contacts.php:961 mod/videos.php:37 +#: mod/viewcontacts.php:105 mod/dirfind.php:214 mod/network.php:598 +#: mod/allfriends.php:77 mod/match.php:82 mod/directory.php:172 +#: mod/common.php:123 mod/suggest.php:95 mod/photos.php:41 +#: include/identity.php:298 +msgid "Forum" +msgstr "Форум" + +#: mod/contacts.php:128 #, php-format msgid "%d contact edited." -msgid_plural "%d contacts edited" -msgstr[0] "%d контакт изменён." -msgstr[1] "%d контакты изменены" -msgstr[2] "%d контакты изменены" +msgid_plural "%d contacts edited." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: ../../mod/contacts.php:139 ../../mod/contacts.php:272 +#: mod/contacts.php:159 mod/contacts.php:383 msgid "Could not access contact record." msgstr "Не удалось получить доступ к записи контакта." -#: ../../mod/contacts.php:153 +#: mod/contacts.php:173 msgid "Could not locate selected profile." msgstr "Не удалось найти выбранный профиль." -#: ../../mod/contacts.php:186 +#: mod/contacts.php:206 msgid "Contact updated." msgstr "Контакт обновлен." -#: ../../mod/contacts.php:188 ../../mod/dfrn_request.php:576 +#: mod/contacts.php:208 mod/dfrn_request.php:575 msgid "Failed to update contact record." msgstr "Не удалось обновить запись контакта." -#: ../../mod/contacts.php:254 ../../mod/manage.php:96 -#: ../../mod/display.php:499 ../../mod/profile_photo.php:19 -#: ../../mod/profile_photo.php:169 ../../mod/profile_photo.php:180 -#: ../../mod/profile_photo.php:193 ../../mod/follow.php:9 -#: ../../mod/item.php:168 ../../mod/item.php:184 ../../mod/group.php:19 -#: ../../mod/dfrn_confirm.php:55 ../../mod/fsuggest.php:78 -#: ../../mod/wall_upload.php:66 ../../mod/viewcontacts.php:24 -#: ../../mod/notifications.php:66 ../../mod/message.php:38 -#: ../../mod/message.php:174 ../../mod/crepair.php:119 -#: ../../mod/nogroup.php:25 ../../mod/network.php:4 ../../mod/allfriends.php:9 -#: ../../mod/events.php:140 ../../mod/install.php:151 -#: ../../mod/wallmessage.php:9 ../../mod/wallmessage.php:33 -#: ../../mod/wallmessage.php:79 ../../mod/wallmessage.php:103 -#: ../../mod/wall_attach.php:55 ../../mod/settings.php:102 -#: ../../mod/settings.php:596 ../../mod/settings.php:601 -#: ../../mod/register.php:42 ../../mod/delegate.php:12 ../../mod/mood.php:114 -#: ../../mod/suggest.php:58 ../../mod/profiles.php:165 -#: ../../mod/profiles.php:618 ../../mod/editpost.php:10 ../../mod/api.php:26 -#: ../../mod/api.php:31 ../../mod/notes.php:20 ../../mod/poke.php:135 -#: ../../mod/invite.php:15 ../../mod/invite.php:101 ../../mod/photos.php:134 -#: ../../mod/photos.php:1050 ../../mod/regmod.php:110 ../../mod/uimport.php:23 -#: ../../mod/attach.php:33 ../../include/items.php:4712 ../../index.php:369 +#: mod/contacts.php:365 mod/manage.php:96 mod/display.php:509 +#: mod/profile_photo.php:19 mod/profile_photo.php:175 +#: mod/profile_photo.php:186 mod/profile_photo.php:199 +#: mod/ostatus_subscribe.php:9 mod/follow.php:11 mod/follow.php:73 +#: mod/follow.php:155 mod/item.php:180 mod/item.php:192 mod/group.php:19 +#: mod/dfrn_confirm.php:55 mod/fsuggest.php:78 mod/wall_upload.php:77 +#: mod/wall_upload.php:80 mod/viewcontacts.php:40 mod/notifications.php:69 +#: mod/message.php:45 mod/message.php:181 mod/crepair.php:117 +#: mod/dirfind.php:11 mod/nogroup.php:25 mod/network.php:4 +#: mod/allfriends.php:12 mod/events.php:165 mod/wallmessage.php:9 +#: mod/wallmessage.php:33 mod/wallmessage.php:79 mod/wallmessage.php:103 +#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/settings.php:20 +#: mod/settings.php:126 mod/settings.php:646 mod/register.php:42 +#: mod/delegate.php:12 mod/common.php:18 mod/mood.php:114 mod/suggest.php:58 +#: mod/profiles.php:165 mod/profiles.php:615 mod/editpost.php:10 +#: mod/api.php:26 mod/api.php:31 mod/notes.php:22 mod/poke.php:149 +#: mod/repair_ostatus.php:9 mod/invite.php:15 mod/invite.php:101 +#: mod/photos.php:171 mod/photos.php:1105 mod/regmod.php:110 +#: mod/uimport.php:23 mod/attach.php:33 include/items.php:5096 index.php:383 msgid "Permission denied." msgstr "Нет разрешения." -#: ../../mod/contacts.php:287 +#: mod/contacts.php:404 msgid "Contact has been blocked" msgstr "Контакт заблокирован" -#: ../../mod/contacts.php:287 +#: mod/contacts.php:404 msgid "Contact has been unblocked" msgstr "Контакт разблокирован" -#: ../../mod/contacts.php:298 +#: mod/contacts.php:415 msgid "Contact has been ignored" msgstr "Контакт проигнорирован" -#: ../../mod/contacts.php:298 +#: mod/contacts.php:415 msgid "Contact has been unignored" msgstr "У контакта отменено игнорирование" -#: ../../mod/contacts.php:310 +#: mod/contacts.php:427 msgid "Contact has been archived" msgstr "Контакт заархивирован" -#: ../../mod/contacts.php:310 +#: mod/contacts.php:427 msgid "Contact has been unarchived" msgstr "Контакт разархивирован" -#: ../../mod/contacts.php:335 ../../mod/contacts.php:711 +#: mod/contacts.php:454 mod/contacts.php:802 msgid "Do you really want to delete this contact?" msgstr "Вы действительно хотите удалить этот контакт?" -#: ../../mod/contacts.php:337 ../../mod/message.php:209 -#: ../../mod/settings.php:1010 ../../mod/settings.php:1016 -#: ../../mod/settings.php:1024 ../../mod/settings.php:1028 -#: ../../mod/settings.php:1033 ../../mod/settings.php:1039 -#: ../../mod/settings.php:1045 ../../mod/settings.php:1051 -#: ../../mod/settings.php:1081 ../../mod/settings.php:1082 -#: ../../mod/settings.php:1083 ../../mod/settings.php:1084 -#: ../../mod/settings.php:1085 ../../mod/dfrn_request.php:830 -#: ../../mod/register.php:233 ../../mod/suggest.php:29 -#: ../../mod/profiles.php:661 ../../mod/profiles.php:664 ../../mod/api.php:105 -#: ../../include/items.php:4557 +#: mod/contacts.php:456 mod/follow.php:110 mod/message.php:216 +#: mod/settings.php:1103 mod/settings.php:1109 mod/settings.php:1117 +#: mod/settings.php:1121 mod/settings.php:1126 mod/settings.php:1132 +#: mod/settings.php:1138 mod/settings.php:1144 mod/settings.php:1170 +#: mod/settings.php:1171 mod/settings.php:1172 mod/settings.php:1173 +#: mod/settings.php:1174 mod/dfrn_request.php:857 mod/register.php:238 +#: mod/suggest.php:29 mod/profiles.php:658 mod/profiles.php:661 +#: mod/profiles.php:687 mod/api.php:105 include/items.php:4928 msgid "Yes" msgstr "Да" -#: ../../mod/contacts.php:340 ../../mod/tagrm.php:11 ../../mod/tagrm.php:94 -#: ../../mod/message.php:212 ../../mod/fbrowser.php:81 -#: ../../mod/fbrowser.php:116 ../../mod/settings.php:615 -#: ../../mod/settings.php:641 ../../mod/dfrn_request.php:844 -#: ../../mod/suggest.php:32 ../../mod/editpost.php:148 -#: ../../mod/photos.php:203 ../../mod/photos.php:292 -#: ../../include/conversation.php:1129 ../../include/items.php:4560 +#: mod/contacts.php:459 mod/tagrm.php:11 mod/tagrm.php:94 mod/follow.php:121 +#: mod/videos.php:131 mod/message.php:219 mod/fbrowser.php:93 +#: mod/fbrowser.php:128 mod/settings.php:660 mod/settings.php:686 +#: mod/dfrn_request.php:871 mod/suggest.php:32 mod/editpost.php:148 +#: mod/photos.php:247 mod/photos.php:336 include/conversation.php:1220 +#: include/items.php:4931 msgid "Cancel" msgstr "Отмена" -#: ../../mod/contacts.php:352 +#: mod/contacts.php:471 msgid "Contact has been removed." msgstr "Контакт удален." -#: ../../mod/contacts.php:390 +#: mod/contacts.php:512 #, php-format msgid "You are mutual friends with %s" msgstr "У Вас взаимная дружба с %s" -#: ../../mod/contacts.php:394 +#: mod/contacts.php:516 #, php-format msgid "You are sharing with %s" msgstr "Вы делитесь с %s" -#: ../../mod/contacts.php:399 +#: mod/contacts.php:521 #, php-format msgid "%s is sharing with you" msgstr "%s делитса с Вами" -#: ../../mod/contacts.php:416 +#: mod/contacts.php:541 msgid "Private communications are not available for this contact." msgstr "Личные коммуникации недоступны для этого контакта." -#: ../../mod/contacts.php:419 ../../mod/admin.php:569 +#: mod/contacts.php:544 mod/admin.php:822 msgid "Never" msgstr "Никогда" -#: ../../mod/contacts.php:423 +#: mod/contacts.php:548 msgid "(Update was successful)" msgstr "(Обновление было успешно)" -#: ../../mod/contacts.php:423 +#: mod/contacts.php:548 msgid "(Update was not successful)" msgstr "(Обновление не удалось)" -#: ../../mod/contacts.php:425 +#: mod/contacts.php:550 msgid "Suggest friends" msgstr "Предложить друзей" -#: ../../mod/contacts.php:429 +#: mod/contacts.php:554 #, php-format msgid "Network type: %s" msgstr "Сеть: %s" -#: ../../mod/contacts.php:432 ../../include/contact_widgets.php:200 -#, php-format -msgid "%d contact in common" -msgid_plural "%d contacts in common" -msgstr[0] "%d Контакт" -msgstr[1] "%d Контактов" -msgstr[2] "%d Контактов" - -#: ../../mod/contacts.php:437 -msgid "View all contacts" -msgstr "Показать все контакты" - -#: ../../mod/contacts.php:442 ../../mod/contacts.php:501 -#: ../../mod/contacts.php:714 ../../mod/admin.php:1009 -msgid "Unblock" -msgstr "Разблокировать" - -#: ../../mod/contacts.php:442 ../../mod/contacts.php:501 -#: ../../mod/contacts.php:714 ../../mod/admin.php:1008 -msgid "Block" -msgstr "Заблокировать" - -#: ../../mod/contacts.php:445 -msgid "Toggle Blocked status" -msgstr "Изменить статус блокированности (заблокировать/разблокировать)" - -#: ../../mod/contacts.php:448 ../../mod/contacts.php:502 -#: ../../mod/contacts.php:715 -msgid "Unignore" -msgstr "Не игнорировать" - -#: ../../mod/contacts.php:448 ../../mod/contacts.php:502 -#: ../../mod/contacts.php:715 ../../mod/notifications.php:51 -#: ../../mod/notifications.php:164 ../../mod/notifications.php:210 -msgid "Ignore" -msgstr "Игнорировать" - -#: ../../mod/contacts.php:451 -msgid "Toggle Ignored status" -msgstr "Изменить статус игнорирования" - -#: ../../mod/contacts.php:455 ../../mod/contacts.php:716 -msgid "Unarchive" -msgstr "Разархивировать" - -#: ../../mod/contacts.php:455 ../../mod/contacts.php:716 -msgid "Archive" -msgstr "Архивировать" - -#: ../../mod/contacts.php:458 -msgid "Toggle Archive status" -msgstr "Сменить статус архивации (архивирова/не архивировать)" - -#: ../../mod/contacts.php:461 -msgid "Repair" -msgstr "Восстановить" - -#: ../../mod/contacts.php:464 -msgid "Advanced Contact Settings" -msgstr "Дополнительные Настройки Контакта" - -#: ../../mod/contacts.php:470 +#: mod/contacts.php:567 msgid "Communications lost with this contact!" msgstr "Связь с контактом утеряна!" -#: ../../mod/contacts.php:473 -msgid "Contact Editor" -msgstr "Редактор контакта" +#: mod/contacts.php:570 +msgid "Fetch further information for feeds" +msgstr "" -#: ../../mod/contacts.php:475 ../../mod/manage.php:110 -#: ../../mod/fsuggest.php:107 ../../mod/message.php:335 -#: ../../mod/message.php:564 ../../mod/crepair.php:186 -#: ../../mod/events.php:478 ../../mod/content.php:710 -#: ../../mod/install.php:248 ../../mod/install.php:286 ../../mod/mood.php:137 -#: ../../mod/profiles.php:686 ../../mod/localtime.php:45 -#: ../../mod/poke.php:199 ../../mod/invite.php:140 ../../mod/photos.php:1084 -#: ../../mod/photos.php:1203 ../../mod/photos.php:1514 -#: ../../mod/photos.php:1565 ../../mod/photos.php:1609 -#: ../../mod/photos.php:1697 ../../object/Item.php:678 -#: ../../view/theme/cleanzero/config.php:80 -#: ../../view/theme/dispy/config.php:70 ../../view/theme/quattro/config.php:64 -#: ../../view/theme/diabook/config.php:148 -#: ../../view/theme/diabook/theme.php:633 ../../view/theme/vier/config.php:53 -#: ../../view/theme/duepuntozero/config.php:59 +#: mod/contacts.php:571 mod/admin.php:831 +msgid "Disabled" +msgstr "Отключенный" + +#: mod/contacts.php:571 +msgid "Fetch information" +msgstr "" + +#: mod/contacts.php:571 +msgid "Fetch information and keywords" +msgstr "" + +#: mod/contacts.php:587 mod/manage.php:143 mod/fsuggest.php:107 +#: mod/message.php:342 mod/message.php:525 mod/crepair.php:196 +#: mod/events.php:574 mod/content.php:712 mod/install.php:261 +#: mod/install.php:299 mod/mood.php:137 mod/profiles.php:696 +#: mod/localtime.php:45 mod/poke.php:198 mod/invite.php:140 +#: mod/photos.php:1137 mod/photos.php:1261 mod/photos.php:1579 +#: mod/photos.php:1630 mod/photos.php:1678 mod/photos.php:1766 +#: object/Item.php:710 view/theme/cleanzero/config.php:80 +#: view/theme/dispy/config.php:70 view/theme/quattro/config.php:64 +#: view/theme/diabook/config.php:148 view/theme/diabook/theme.php:633 +#: view/theme/vier/config.php:107 view/theme/duepuntozero/config.php:59 msgid "Submit" -msgstr "Подтвердить" +msgstr "Добавить" -#: ../../mod/contacts.php:476 +#: mod/contacts.php:588 msgid "Profile Visibility" msgstr "Видимость профиля" -#: ../../mod/contacts.php:477 +#: mod/contacts.php:589 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " "profile securely." -msgstr "Пожалуйста, выберите профиль, который вы хотите отображать %s, когда просмотр вашего профиля безопасен." +msgstr "" +"Пожалуйста, выберите профиль, который вы хотите отображать %s, когда " +"просмотр вашего профиля безопасен." -#: ../../mod/contacts.php:478 +#: mod/contacts.php:590 msgid "Contact Information / Notes" msgstr "Информация о контакте / Заметки" -#: ../../mod/contacts.php:479 +#: mod/contacts.php:591 msgid "Edit contact notes" msgstr "Редактировать заметки контакта" -#: ../../mod/contacts.php:484 ../../mod/contacts.php:679 -#: ../../mod/viewcontacts.php:64 ../../mod/nogroup.php:40 +#: mod/contacts.php:596 mod/contacts.php:952 mod/viewcontacts.php:97 +#: mod/nogroup.php:41 #, php-format msgid "Visit %s's profile [%s]" msgstr "Посетить профиль %s [%s]" -#: ../../mod/contacts.php:485 +#: mod/contacts.php:597 msgid "Block/Unblock contact" msgstr "Блокировать / Разблокировать контакт" -#: ../../mod/contacts.php:486 +#: mod/contacts.php:598 msgid "Ignore contact" msgstr "Игнорировать контакт" -#: ../../mod/contacts.php:487 +#: mod/contacts.php:599 msgid "Repair URL settings" msgstr "Восстановить настройки URL" -#: ../../mod/contacts.php:488 +#: mod/contacts.php:600 msgid "View conversations" msgstr "Просмотр бесед" -#: ../../mod/contacts.php:490 +#: mod/contacts.php:602 msgid "Delete contact" msgstr "Удалить контакт" -#: ../../mod/contacts.php:494 +#: mod/contacts.php:606 msgid "Last update:" msgstr "Последнее обновление: " -#: ../../mod/contacts.php:496 +#: mod/contacts.php:608 msgid "Update public posts" msgstr "Обновить публичные сообщения" -#: ../../mod/contacts.php:498 ../../mod/admin.php:1503 +#: mod/contacts.php:610 msgid "Update now" msgstr "Обновить сейчас" -#: ../../mod/contacts.php:505 +#: mod/contacts.php:612 mod/follow.php:103 mod/dirfind.php:196 +#: mod/allfriends.php:65 mod/match.php:71 mod/suggest.php:82 +#: include/contact_widgets.php:32 include/Contact.php:297 +#: include/conversation.php:924 +msgid "Connect/Follow" +msgstr "Подключиться/Следовать" + +#: mod/contacts.php:615 mod/contacts.php:806 mod/contacts.php:865 +#: mod/admin.php:1312 +msgid "Unblock" +msgstr "Разблокировать" + +#: mod/contacts.php:615 mod/contacts.php:806 mod/contacts.php:865 +#: mod/admin.php:1311 +msgid "Block" +msgstr "Заблокировать" + +#: mod/contacts.php:616 mod/contacts.php:807 mod/contacts.php:872 +msgid "Unignore" +msgstr "Не игнорировать" + +#: mod/contacts.php:616 mod/contacts.php:807 mod/contacts.php:872 +#: mod/notifications.php:54 mod/notifications.php:179 +#: mod/notifications.php:259 +msgid "Ignore" +msgstr "Игнорировать" + +#: mod/contacts.php:619 msgid "Currently blocked" msgstr "В настоящее время заблокирован" -#: ../../mod/contacts.php:506 +#: mod/contacts.php:620 msgid "Currently ignored" msgstr "В настоящее время игнорируется" -#: ../../mod/contacts.php:507 +#: mod/contacts.php:621 msgid "Currently archived" msgstr "В данный момент архивирован" -#: ../../mod/contacts.php:508 ../../mod/notifications.php:157 -#: ../../mod/notifications.php:204 +#: mod/contacts.php:622 mod/notifications.php:172 mod/notifications.php:251 msgid "Hide this contact from others" msgstr "Скрыть этот контакт от других" -#: ../../mod/contacts.php:508 +#: mod/contacts.php:622 msgid "" "Replies/likes to your public posts may still be visible" msgstr "Ответы/лайки ваших публичных сообщений будут видимы." -#: ../../mod/contacts.php:509 +#: mod/contacts.php:623 msgid "Notification for new posts" msgstr "" -#: ../../mod/contacts.php:509 +#: mod/contacts.php:623 msgid "Send a notification of every new post of this contact" msgstr "" -#: ../../mod/contacts.php:510 -msgid "Fetch further information for feeds" -msgstr "" - -#: ../../mod/contacts.php:511 -msgid "Disabled" -msgstr "" - -#: ../../mod/contacts.php:511 -msgid "Fetch information" -msgstr "" - -#: ../../mod/contacts.php:511 -msgid "Fetch information and keywords" -msgstr "" - -#: ../../mod/contacts.php:513 +#: mod/contacts.php:626 msgid "Blacklisted keywords" msgstr "" -#: ../../mod/contacts.php:513 +#: mod/contacts.php:626 msgid "" "Comma separated list of keywords that should not be converted to hashtags, " "when \"Fetch information and keywords\" is selected" msgstr "" -#: ../../mod/contacts.php:564 +#: mod/contacts.php:633 mod/follow.php:126 mod/notifications.php:255 +msgid "Profile URL" +msgstr "URL профиля" + +#: mod/contacts.php:636 mod/notifications.php:244 mod/events.php:566 +#: mod/directory.php:145 include/identity.php:308 include/bb2diaspora.php:170 +#: include/event.php:36 include/event.php:60 +msgid "Location:" +msgstr "Откуда:" + +#: mod/contacts.php:638 mod/notifications.php:246 mod/directory.php:153 +#: include/identity.php:317 include/identity.php:631 +msgid "About:" +msgstr "О себе:" + +#: mod/contacts.php:640 mod/follow.php:134 mod/notifications.php:248 +#: include/identity.php:625 +msgid "Tags:" +msgstr "Ключевые слова: " + +#: mod/contacts.php:685 msgid "Suggestions" msgstr "Предложения" -#: ../../mod/contacts.php:567 +#: mod/contacts.php:688 msgid "Suggest potential friends" msgstr "Предложить потенциального знакомого" -#: ../../mod/contacts.php:570 ../../mod/group.php:194 +#: mod/contacts.php:693 mod/group.php:192 msgid "All Contacts" msgstr "Все контакты" -#: ../../mod/contacts.php:573 +#: mod/contacts.php:696 msgid "Show all contacts" msgstr "Показать все контакты" -#: ../../mod/contacts.php:576 +#: mod/contacts.php:701 msgid "Unblocked" msgstr "Не блокирован" -#: ../../mod/contacts.php:579 +#: mod/contacts.php:704 msgid "Only show unblocked contacts" msgstr "Показать только не блокированные контакты" -#: ../../mod/contacts.php:583 +#: mod/contacts.php:710 msgid "Blocked" msgstr "Заблокирован" -#: ../../mod/contacts.php:586 +#: mod/contacts.php:713 msgid "Only show blocked contacts" msgstr "Показать только блокированные контакты" -#: ../../mod/contacts.php:590 +#: mod/contacts.php:719 msgid "Ignored" msgstr "Игнорирован" -#: ../../mod/contacts.php:593 +#: mod/contacts.php:722 msgid "Only show ignored contacts" msgstr "Показать только игнорируемые контакты" -#: ../../mod/contacts.php:597 +#: mod/contacts.php:728 msgid "Archived" msgstr "Архивированные" -#: ../../mod/contacts.php:600 +#: mod/contacts.php:731 msgid "Only show archived contacts" msgstr "Показывать только архивные контакты" -#: ../../mod/contacts.php:604 +#: mod/contacts.php:737 msgid "Hidden" msgstr "Скрытые" -#: ../../mod/contacts.php:607 +#: mod/contacts.php:740 msgid "Only show hidden contacts" msgstr "Показывать только скрытые контакты" -#: ../../mod/contacts.php:655 -msgid "Mutual Friendship" -msgstr "Взаимная дружба" - -#: ../../mod/contacts.php:659 -msgid "is a fan of yours" -msgstr "является вашим поклонником" - -#: ../../mod/contacts.php:663 -msgid "you are a fan of" -msgstr "Вы - поклонник" - -#: ../../mod/contacts.php:680 ../../mod/nogroup.php:41 -msgid "Edit contact" -msgstr "Редактировать контакт" - -#: ../../mod/contacts.php:702 ../../include/nav.php:177 -#: ../../view/theme/diabook/theme.php:125 +#: mod/contacts.php:793 mod/contacts.php:841 mod/viewcontacts.php:116 +#: include/identity.php:741 include/identity.php:744 include/text.php:1012 +#: include/nav.php:123 include/nav.php:187 view/theme/diabook/theme.php:125 msgid "Contacts" msgstr "Контакты" -#: ../../mod/contacts.php:706 +#: mod/contacts.php:797 msgid "Search your contacts" msgstr "Поиск ваших контактов" -#: ../../mod/contacts.php:707 ../../mod/directory.php:61 +#: mod/contacts.php:798 msgid "Finding: " msgstr "Результат поиска: " -#: ../../mod/contacts.php:708 ../../mod/directory.php:63 -#: ../../include/contact_widgets.php:34 +#: mod/contacts.php:799 mod/directory.php:210 include/contact_widgets.php:34 msgid "Find" msgstr "Найти" -#: ../../mod/contacts.php:713 ../../mod/settings.php:132 -#: ../../mod/settings.php:640 +#: mod/contacts.php:805 mod/settings.php:156 mod/settings.php:685 msgid "Update" msgstr "Обновление" -#: ../../mod/contacts.php:717 ../../mod/group.php:171 ../../mod/admin.php:1007 -#: ../../mod/content.php:438 ../../mod/content.php:741 -#: ../../mod/settings.php:677 ../../mod/photos.php:1654 -#: ../../object/Item.php:130 ../../include/conversation.php:614 +#: mod/contacts.php:808 mod/contacts.php:879 +msgid "Archive" +msgstr "Архивировать" + +#: mod/contacts.php:808 mod/contacts.php:879 +msgid "Unarchive" +msgstr "Разархивировать" + +#: mod/contacts.php:809 mod/group.php:171 mod/admin.php:1310 +#: mod/content.php:440 mod/content.php:743 mod/settings.php:722 +#: mod/photos.php:1723 object/Item.php:134 include/conversation.php:635 msgid "Delete" msgstr "Удалить" -#: ../../mod/hcard.php:10 +#: mod/contacts.php:822 include/identity.php:686 include/nav.php:75 +msgid "Status" +msgstr "Посты" + +#: mod/contacts.php:825 mod/follow.php:143 include/identity.php:689 +msgid "Status Messages and Posts" +msgstr "Ваши посты" + +#: mod/contacts.php:830 mod/profperm.php:104 mod/newmember.php:32 +#: include/identity.php:579 include/identity.php:665 include/identity.php:694 +#: include/nav.php:76 view/theme/diabook/theme.php:124 +msgid "Profile" +msgstr "Информация" + +#: mod/contacts.php:833 include/identity.php:697 +msgid "Profile Details" +msgstr "Информация о вас" + +#: mod/contacts.php:844 +msgid "View all contacts" +msgstr "Показать все контакты" + +#: mod/contacts.php:850 mod/common.php:134 +msgid "Common Friends" +msgstr "Общие друзья" + +#: mod/contacts.php:853 +msgid "View all common friends" +msgstr "" + +#: mod/contacts.php:857 +msgid "Repair" +msgstr "Восстановить" + +#: mod/contacts.php:860 +msgid "Advanced Contact Settings" +msgstr "Дополнительные Настройки Контакта" + +#: mod/contacts.php:868 +msgid "Toggle Blocked status" +msgstr "Изменить статус блокированности (заблокировать/разблокировать)" + +#: mod/contacts.php:875 +msgid "Toggle Ignored status" +msgstr "Изменить статус игнорирования" + +#: mod/contacts.php:882 +msgid "Toggle Archive status" +msgstr "Сменить статус архивации (архивирова/не архивировать)" + +#: mod/contacts.php:924 +msgid "Mutual Friendship" +msgstr "Взаимная дружба" + +#: mod/contacts.php:928 +msgid "is a fan of yours" +msgstr "является вашим поклонником" + +#: mod/contacts.php:932 +msgid "you are a fan of" +msgstr "Вы - поклонник" + +#: mod/contacts.php:953 mod/nogroup.php:42 +msgid "Edit contact" +msgstr "Редактировать контакт" + +#: mod/hcard.php:10 msgid "No profile" msgstr "Нет профиля" -#: ../../mod/manage.php:106 +#: mod/manage.php:139 msgid "Manage Identities and/or Pages" msgstr "Управление идентификацией и / или страницами" -#: ../../mod/manage.php:107 +#: mod/manage.php:140 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:108 +#: mod/manage.php:141 msgid "Select an identity to manage: " msgstr "Выберите идентификацию для управления: " -#: ../../mod/oexchange.php:25 +#: mod/oexchange.php:25 msgid "Post successful." msgstr "Успешно добавлено." -#: ../../mod/profperm.php:19 ../../mod/group.php:72 ../../index.php:368 +#: mod/profperm.php:19 mod/group.php:72 index.php:382 msgid "Permission denied" msgstr "Доступ запрещен" -#: ../../mod/profperm.php:25 ../../mod/profperm.php:55 +#: mod/profperm.php:25 mod/profperm.php:56 msgid "Invalid profile identifier." msgstr "Недопустимый идентификатор профиля." -#: ../../mod/profperm.php:101 +#: mod/profperm.php:102 msgid "Profile Visibility Editor" msgstr "Редактор видимости профиля" -#: ../../mod/profperm.php:103 ../../mod/newmember.php:32 ../../boot.php:2119 -#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:87 -#: ../../include/nav.php:77 ../../view/theme/diabook/theme.php:124 -msgid "Profile" -msgstr "Профиль" - -#: ../../mod/profperm.php:105 ../../mod/group.php:224 +#: mod/profperm.php:106 mod/group.php:223 msgid "Click on a contact to add or remove." msgstr "Нажмите на контакт, чтобы добавить или удалить." -#: ../../mod/profperm.php:114 +#: mod/profperm.php:115 msgid "Visible To" msgstr "Видимый для" -#: ../../mod/profperm.php:130 +#: mod/profperm.php:131 msgid "All Contacts (with secure profile access)" msgstr "Все контакты (с безопасным доступом к профилю)" -#: ../../mod/display.php:82 ../../mod/display.php:284 -#: ../../mod/display.php:503 ../../mod/viewsrc.php:15 ../../mod/admin.php:169 -#: ../../mod/admin.php:1052 ../../mod/admin.php:1265 ../../mod/notice.php:15 -#: ../../include/items.php:4516 +#: mod/display.php:82 mod/display.php:291 mod/display.php:513 +#: mod/viewsrc.php:15 mod/admin.php:234 mod/admin.php:1365 mod/admin.php:1599 +#: mod/notice.php:15 include/items.php:4887 msgid "Item not found." msgstr "Пункт не найден." -#: ../../mod/display.php:212 ../../mod/videos.php:115 -#: ../../mod/viewcontacts.php:19 ../../mod/community.php:18 -#: ../../mod/dfrn_request.php:762 ../../mod/search.php:89 -#: ../../mod/directory.php:33 ../../mod/photos.php:920 +#: mod/display.php:220 mod/videos.php:197 mod/viewcontacts.php:35 +#: mod/community.php:22 mod/dfrn_request.php:786 mod/search.php:93 +#: mod/search.php:99 mod/directory.php:37 mod/photos.php:976 msgid "Public access denied." msgstr "Свободный доступ закрыт." -#: ../../mod/display.php:332 ../../mod/profile.php:155 +#: mod/display.php:339 mod/profile.php:155 msgid "Access to this profile has been restricted." msgstr "Доступ к этому профилю ограничен." -#: ../../mod/display.php:496 +#: mod/display.php:506 msgid "Item has been removed." msgstr "Пункт был удален." -#: ../../mod/newmember.php:6 +#: mod/newmember.php:6 msgid "Welcome to Friendica" msgstr "Добро пожаловать в Friendica" -#: ../../mod/newmember.php:8 +#: mod/newmember.php:8 msgid "New Member Checklist" msgstr "Новый контрольный список участников" -#: ../../mod/newmember.php:12 +#: mod/newmember.php:12 msgid "" "We would like to offer some tips and links to help make your experience " "enjoyable. Click any item to visit the relevant page. A link to this page " "will be visible from your home page for two weeks after your initial " "registration and then will quietly disappear." -msgstr "Мы хотели бы предложить некоторые советы и ссылки, помогающие сделать вашу работу приятнее. Нажмите на любой элемент, чтобы посетить соответствующую страницу. Ссылка на эту страницу будет видна на вашей домашней странице в течение двух недель после первоначальной регистрации, а затем она исчезнет." +msgstr "" +"Мы хотели бы предложить некоторые советы и ссылки, помогающие сделать вашу " +"работу приятнее. Нажмите на любой элемент, чтобы посетить соответствующую " +"страницу. Ссылка на эту страницу будет видна на вашей домашней странице в " +"течение двух недель после первоначальной регистрации, а затем она исчезнет." -#: ../../mod/newmember.php:14 +#: mod/newmember.php:14 msgid "Getting Started" msgstr "Начало работы" -#: ../../mod/newmember.php:18 +#: mod/newmember.php:18 msgid "Friendica Walk-Through" msgstr "Friendica тур" -#: ../../mod/newmember.php:18 +#: mod/newmember.php:18 msgid "" "On your Quick Start page - find a brief introduction to your " -"profile and network tabs, make some new connections, and find some groups to" -" join." -msgstr "На вашей странице Быстрый старт - можно найти краткое введение в ваш профиль и сетевые закладки, создать новые связи, и найти группы, чтобы присоединиться к ним." +"profile and network tabs, make some new connections, and find some groups to " +"join." +msgstr "" +"На вашей странице Быстрый старт - можно найти краткое введение в " +"ваш профиль и сетевые закладки, создать новые связи, и найти группы, чтобы " +"присоединиться к ним." -#: ../../mod/newmember.php:22 ../../mod/admin.php:1104 -#: ../../mod/admin.php:1325 ../../mod/settings.php:85 -#: ../../include/nav.php:172 ../../view/theme/diabook/theme.php:544 -#: ../../view/theme/diabook/theme.php:648 +#: mod/newmember.php:22 mod/admin.php:1418 mod/admin.php:1676 +#: mod/settings.php:109 include/nav.php:182 view/theme/diabook/theme.php:544 +#: view/theme/diabook/theme.php:648 msgid "Settings" msgstr "Настройки" -#: ../../mod/newmember.php:26 +#: mod/newmember.php:26 msgid "Go to Your Settings" msgstr "Перейти к вашим настройкам" -#: ../../mod/newmember.php:26 +#: mod/newmember.php:26 msgid "" "On your Settings page - change your initial password. Also make a " "note of your Identity Address. This looks just like an email address - and " "will be useful in making friends on the free social web." -msgstr "На вашей странице Настройки - вы можете изменить свой первоначальный пароль. Также обратите внимание на ваш личный адрес. Он выглядит так же, как адрес электронной почты - и будет полезен для поиска друзей в свободной социальной сети." +msgstr "" +"На вашей странице Настройки - вы можете изменить свой " +"первоначальный пароль. Также обратите внимание на ваш личный адрес. Он " +"выглядит так же, как адрес электронной почты - и будет полезен для поиска " +"друзей в свободной социальной сети." -#: ../../mod/newmember.php:28 +#: mod/newmember.php:28 msgid "" -"Review the other settings, particularly the privacy settings. An unpublished" -" directory listing is like having an unlisted phone number. In general, you " +"Review the other settings, particularly the privacy settings. An unpublished " +"directory listing is like having an unlisted phone number. In general, you " "should probably publish your listing - unless all of your friends and " "potential friends know exactly how to find you." -msgstr "Просмотрите другие установки, в частности, параметры конфиденциальности. Неопубликованные пункты каталога с частными номерами телефона. В общем, вам, вероятно, следует опубликовать свою информацию - если все ваши друзья и потенциальные друзья точно знают, как вас найти." +msgstr "" +"Просмотрите другие установки, в частности, параметры конфиденциальности. " +"Неопубликованные пункты каталога с частными номерами телефона. В общем, вам, " +"вероятно, следует опубликовать свою информацию - если все ваши друзья и " +"потенциальные друзья точно знают, как вас найти." -#: ../../mod/newmember.php:36 ../../mod/profile_photo.php:244 -#: ../../mod/profiles.php:699 +#: mod/newmember.php:36 mod/profile_photo.php:250 mod/profiles.php:709 msgid "Upload Profile Photo" msgstr "Загрузить фото профиля" -#: ../../mod/newmember.php:36 +#: mod/newmember.php:36 msgid "" "Upload a profile photo if you have not done so already. Studies have shown " -"that people with real photos of themselves are ten times more likely to make" -" friends than people who do not." -msgstr "Загрузите фотографию профиля, если вы еще не сделали это. Исследования показали, что люди с реальными фотографиями имеют в десять раз больше шансов подружиться, чем люди, которые этого не делают." +"that people with real photos of themselves are ten times more likely to make " +"friends than people who do not." +msgstr "" +"Загрузите фотографию профиля, если вы еще не сделали это. Исследования " +"показали, что люди с реальными фотографиями имеют в десять раз больше шансов " +"подружиться, чем люди, которые этого не делают." -#: ../../mod/newmember.php:38 +#: mod/newmember.php:38 msgid "Edit Your Profile" msgstr "Редактировать профиль" -#: ../../mod/newmember.php:38 +#: mod/newmember.php:38 msgid "" "Edit your default profile to your liking. Review the " -"settings for hiding your list of friends and hiding the profile from unknown" -" visitors." -msgstr "Отредактируйте профиль по умолчанию на свой ​​вкус. Просмотрите установки для сокрытия вашего списка друзей и сокрытия профиля от неизвестных посетителей." +"settings for hiding your list of friends and hiding the profile from unknown " +"visitors." +msgstr "" +"Отредактируйте профиль по умолчанию на свой ​​вкус. " +"Просмотрите установки для сокрытия вашего списка друзей и сокрытия профиля " +"от неизвестных посетителей." -#: ../../mod/newmember.php:40 +#: mod/newmember.php:40 msgid "Profile Keywords" msgstr "Ключевые слова профиля" -#: ../../mod/newmember.php:40 +#: mod/newmember.php:40 msgid "" "Set some public keywords for your default profile which describe your " "interests. We may be able to find other people with similar interests and " "suggest friendships." -msgstr "Установите некоторые публичные ключевые слова для вашего профиля по умолчанию, которые описывают ваши интересы. Мы можем быть в состоянии найти других людей со схожими интересами и предложить дружбу." +msgstr "" +"Установите некоторые публичные ключевые слова для вашего профиля по " +"умолчанию, которые описывают ваши интересы. Мы можем быть в состоянии найти " +"других людей со схожими интересами и предложить дружбу." -#: ../../mod/newmember.php:44 +#: mod/newmember.php:44 msgid "Connecting" msgstr "Подключение" -#: ../../mod/newmember.php:49 ../../mod/newmember.php:51 -#: ../../include/contact_selectors.php:81 -msgid "Facebook" -msgstr "Facebook" - -#: ../../mod/newmember.php:49 -msgid "" -"Authorise the Facebook Connector if you currently have a Facebook account " -"and we will (optionally) import all your Facebook friends and conversations." -msgstr "Авторизуйте Facebook Connector , если у вас уже есть аккаунт на Facebook, и мы (по желанию) импортируем всех ваших друзей и беседы с Facebook." - -#: ../../mod/newmember.php:51 -msgid "" -"If this is your own personal server, installing the Facebook addon " -"may ease your transition to the free social web." -msgstr "Если это ваш личный сервер, установите дополнение Facebook, это может облегчить ваш переход на свободную социальную сеть." - -#: ../../mod/newmember.php:56 +#: mod/newmember.php:51 msgid "Importing Emails" msgstr "Импортирование Email-ов" -#: ../../mod/newmember.php:56 +#: mod/newmember.php:51 msgid "" "Enter your email access information on your Connector Settings page if you " "wish to import and interact with friends or mailing lists from your email " "INBOX" -msgstr "Введите информацию о доступе к вашему email на странице настроек вашего коннектора, если вы хотите импортировать, и общаться с друзьями или получать рассылки на ваш ящик электронной почты" +msgstr "" +"Введите информацию о доступе к вашему email на странице настроек вашего " +"коннектора, если вы хотите импортировать, и общаться с друзьями или получать " +"рассылки на ваш ящик электронной почты" -#: ../../mod/newmember.php:58 +#: mod/newmember.php:53 msgid "Go to Your Contacts Page" msgstr "Перейти на страницу ваших контактов" -#: ../../mod/newmember.php:58 +#: mod/newmember.php:53 msgid "" "Your Contacts page is your gateway to managing friendships and connecting " "with friends on other networks. Typically you enter their address or site " "URL in the Add New Contact dialog." -msgstr "Ваша страница контактов - это ваш шлюз к управлению дружбой и общением с друзьями в других сетях. Обычно вы вводите свой ​​адрес или адрес сайта в диалог Добавить новый контакт." +msgstr "" +"Ваша страница контактов - это ваш шлюз к управлению дружбой и общением с " +"друзьями в других сетях. Обычно вы вводите свой ​​адрес или адрес сайта в " +"диалог Добавить новый контакт." -#: ../../mod/newmember.php:60 +#: mod/newmember.php:55 msgid "Go to Your Site's Directory" msgstr "Перейти в каталог вашего сайта" -#: ../../mod/newmember.php:60 +#: mod/newmember.php:55 msgid "" "The Directory page lets you find other people in this network or other " "federated sites. Look for a Connect or Follow link on " "their profile page. Provide your own Identity Address if requested." -msgstr "На странице каталога вы можете найти других людей в этой сети или на других похожих сайтах. Ищите ссылки Подключить или Следовать на страницах их профилей. Укажите свой собственный адрес идентификации, если требуется." +msgstr "" +"На странице каталога вы можете найти других людей в этой сети или на других " +"похожих сайтах. Ищите ссылки Подключить или Следовать на " +"страницах их профилей. Укажите свой собственный адрес идентификации, если " +"требуется." -#: ../../mod/newmember.php:62 +#: mod/newmember.php:57 msgid "Finding New People" msgstr "Поиск людей" -#: ../../mod/newmember.php:62 +#: mod/newmember.php:57 msgid "" "On the side panel of the Contacts page are several tools to find new " "friends. We can match people by interest, look up people by name or " -"interest, and provide suggestions based on network relationships. On a brand" -" new site, friend suggestions will usually begin to be populated within 24 " +"interest, and provide suggestions based on network relationships. On a brand " +"new site, friend suggestions will usually begin to be populated within 24 " "hours." -msgstr "На боковой панели страницы Контакты есть несколько инструментов, чтобы найти новых друзей. Мы можем искать по соответствию интересам, посмотреть людей по имени или интересам, и внести предложения на основе сетевых отношений. На новом сайте, предложения дружбы, как правило, начинают заполняться в течение 24 часов." +msgstr "" +"На боковой панели страницы Контакты есть несколько инструментов, чтобы найти " +"новых друзей. Мы можем искать по соответствию интересам, посмотреть людей " +"по имени или интересам, и внести предложения на основе сетевых отношений. На " +"новом сайте, предложения дружбы, как правило, начинают заполняться в течение " +"24 часов." -#: ../../mod/newmember.php:66 ../../include/group.php:270 +#: mod/newmember.php:61 include/group.php:283 msgid "Groups" msgstr "Группы" -#: ../../mod/newmember.php:70 +#: mod/newmember.php:65 msgid "Group Your Contacts" msgstr "Группа \"ваши контакты\"" -#: ../../mod/newmember.php:70 +#: mod/newmember.php:65 msgid "" "Once you have made some friends, organize them into private conversation " -"groups from the sidebar of your Contacts page and then you can interact with" -" each group privately on your Network page." -msgstr "После того, как вы найдете несколько друзей, организуйте их в группы частных бесед в боковой панели на странице Контакты, а затем вы можете взаимодействовать с каждой группой приватно или на вашей странице Сеть." +"groups from the sidebar of your Contacts page and then you can interact with " +"each group privately on your Network page." +msgstr "" +"После того, как вы найдете несколько друзей, организуйте их в группы частных " +"бесед в боковой панели на странице Контакты, а затем вы можете " +"взаимодействовать с каждой группой приватно или на вашей странице Сеть." -#: ../../mod/newmember.php:73 +#: mod/newmember.php:68 msgid "Why Aren't My Posts Public?" msgstr "Почему мои посты не публичные?" -#: ../../mod/newmember.php:73 +#: mod/newmember.php:68 msgid "" -"Friendica respects your privacy. By default, your posts will only show up to" -" people you've added as friends. For more information, see the help section " +"Friendica respects your privacy. By default, your posts will only show up to " +"people you've added as friends. For more information, see the help section " "from the link above." -msgstr "Friendica уважает вашу приватность. По умолчанию, ваши сообщения будут показываться только для людей, которых вы добавили в список друзей. Для получения дополнительной информации см. раздел справки по ссылке выше." +msgstr "" +"Friendica уважает вашу приватность. По умолчанию, ваши сообщения будут " +"показываться только для людей, которых вы добавили в список друзей. Для " +"получения дополнительной информации см. раздел справки по ссылке выше." -#: ../../mod/newmember.php:78 +#: mod/newmember.php:73 msgid "Getting Help" msgstr "Получить помощь" -#: ../../mod/newmember.php:82 +#: mod/newmember.php:77 msgid "Go to the Help Section" msgstr "Перейти в раздел справки" -#: ../../mod/newmember.php:82 +#: mod/newmember.php:77 msgid "" -"Our help pages may be consulted for detail on other program" -" features and resources." -msgstr "Наши страницы помощи могут проконсультировать о подробностях и возможностях программы и ресурса." +"Our help pages may be consulted for detail on other program " +"features and resources." +msgstr "" +"Наши страницы помощи могут проконсультировать о " +"подробностях и возможностях программы и ресурса." -#: ../../mod/openid.php:24 +#: mod/openid.php:24 msgid "OpenID protocol error. No ID returned." msgstr "Ошибка протокола OpenID. Не возвращён ID." -#: ../../mod/openid.php:53 +#: mod/openid.php:53 msgid "" "Account not found and OpenID registration is not permitted on this site." msgstr "Аккаунт не найден и OpenID регистрация не допускается на этом сайте." -#: ../../mod/openid.php:93 ../../include/auth.php:112 -#: ../../include/auth.php:175 +#: mod/openid.php:93 include/auth.php:118 include/auth.php:181 msgid "Login failed." msgstr "Войти не удалось." -#: ../../mod/profile_photo.php:44 +#: mod/profile_photo.php:44 msgid "Image uploaded but image cropping failed." msgstr "Изображение загружено, но обрезка изображения не удалась." -#: ../../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 -#: ../../mod/photos.php:155 ../../mod/photos.php:731 ../../mod/photos.php:1187 -#: ../../mod/photos.php:1210 ../../include/user.php:335 -#: ../../include/user.php:342 ../../include/user.php:349 -#: ../../view/theme/diabook/theme.php:500 +#: mod/profile_photo.php:74 mod/profile_photo.php:81 mod/profile_photo.php:88 +#: mod/profile_photo.php:210 mod/profile_photo.php:302 +#: mod/profile_photo.php:311 mod/photos.php:78 mod/photos.php:192 +#: mod/photos.php:775 mod/photos.php:1245 mod/photos.php:1268 +#: mod/photos.php:1862 include/user.php:345 include/user.php:352 +#: include/user.php:359 view/theme/diabook/theme.php:500 msgid "Profile Photos" msgstr "Фотографии профиля" -#: ../../mod/profile_photo.php:77 ../../mod/profile_photo.php:84 -#: ../../mod/profile_photo.php:91 ../../mod/profile_photo.php:308 +#: mod/profile_photo.php:77 mod/profile_photo.php:84 mod/profile_photo.php:91 +#: mod/profile_photo.php:314 #, php-format msgid "Image size reduction [%s] failed." msgstr "Уменьшение размера изображения [%s] не удалось." -#: ../../mod/profile_photo.php:118 +#: mod/profile_photo.php:124 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." -msgstr "Перезагрузите страницу с зажатой клавишей \"Shift\" для того, чтобы увидеть свое новое фото немедленно." +msgstr "" +"Перезагрузите страницу с зажатой клавишей \"Shift\" для того, чтобы увидеть " +"свое новое фото немедленно." -#: ../../mod/profile_photo.php:128 +#: mod/profile_photo.php:134 msgid "Unable to process image" msgstr "Не удается обработать изображение" -#: ../../mod/profile_photo.php:144 ../../mod/wall_upload.php:122 +#: mod/profile_photo.php:150 mod/wall_upload.php:151 mod/photos.php:811 #, php-format -msgid "Image exceeds size limit of %d" -msgstr "Изображение превышает предельный размер %d" +msgid "Image exceeds size limit of %s" +msgstr "" -#: ../../mod/profile_photo.php:153 ../../mod/wall_upload.php:144 -#: ../../mod/photos.php:807 +#: mod/profile_photo.php:159 mod/wall_upload.php:183 mod/photos.php:851 msgid "Unable to process image." msgstr "Невозможно обработать фото." -#: ../../mod/profile_photo.php:242 +#: mod/profile_photo.php:248 msgid "Upload File:" msgstr "Загрузить файл:" -#: ../../mod/profile_photo.php:243 +#: mod/profile_photo.php:249 msgid "Select a profile:" msgstr "Выбрать этот профиль:" -#: ../../mod/profile_photo.php:245 +#: mod/profile_photo.php:251 msgid "Upload" msgstr "Загрузить" -#: ../../mod/profile_photo.php:248 ../../mod/settings.php:1062 +#: mod/profile_photo.php:254 msgid "or" msgstr "или" -#: ../../mod/profile_photo.php:248 +#: mod/profile_photo.php:254 msgid "skip this step" msgstr "пропустить этот шаг" -#: ../../mod/profile_photo.php:248 +#: mod/profile_photo.php:254 msgid "select a photo from your photo albums" msgstr "выберите фото из ваших фотоальбомов" -#: ../../mod/profile_photo.php:262 +#: mod/profile_photo.php:268 msgid "Crop Image" msgstr "Обрезать изображение" -#: ../../mod/profile_photo.php:263 +#: mod/profile_photo.php:269 msgid "Please adjust the image cropping for optimum viewing." msgstr "Пожалуйста, настройте обрезку изображения для оптимального просмотра." -#: ../../mod/profile_photo.php:265 +#: mod/profile_photo.php:271 msgid "Done Editing" msgstr "Редактирование выполнено" -#: ../../mod/profile_photo.php:299 +#: mod/profile_photo.php:305 msgid "Image uploaded successfully." msgstr "Изображение загружено успешно." -#: ../../mod/profile_photo.php:301 ../../mod/wall_upload.php:172 -#: ../../mod/photos.php:834 +#: mod/profile_photo.php:307 mod/wall_upload.php:216 mod/photos.php:878 msgid "Image upload failed." msgstr "Загрузка фото неудачная." -#: ../../mod/subthread.php:87 ../../mod/tagger.php:62 ../../mod/like.php:149 -#: ../../include/conversation.php:126 ../../include/conversation.php:254 -#: ../../include/text.php:1968 ../../include/diaspora.php:2087 -#: ../../view/theme/diabook/theme.php:471 +#: mod/subthread.php:87 mod/tagger.php:62 include/like.php:165 +#: include/conversation.php:130 include/conversation.php:266 +#: include/text.php:2000 include/diaspora.php:2169 +#: view/theme/diabook/theme.php:471 msgid "photo" msgstr "фото" -#: ../../mod/subthread.php:87 ../../mod/tagger.php:62 ../../mod/like.php:149 -#: ../../mod/like.php:319 ../../include/conversation.php:121 -#: ../../include/conversation.php:130 ../../include/conversation.php:249 -#: ../../include/conversation.php:258 ../../include/diaspora.php:2087 -#: ../../view/theme/diabook/theme.php:466 -#: ../../view/theme/diabook/theme.php:475 +#: mod/subthread.php:87 mod/tagger.php:62 include/like.php:165 +#: include/like.php:334 include/conversation.php:125 +#: include/conversation.php:134 include/conversation.php:261 +#: include/conversation.php:270 include/diaspora.php:2169 +#: view/theme/diabook/theme.php:466 view/theme/diabook/theme.php:475 msgid "status" msgstr "статус" -#: ../../mod/subthread.php:103 +#: mod/subthread.php:103 #, php-format msgid "%1$s is following %2$s's %3$s" msgstr "" -#: ../../mod/tagrm.php:41 +#: mod/tagrm.php:41 msgid "Tag removed" msgstr "Ключевое слово удалено" -#: ../../mod/tagrm.php:79 +#: mod/tagrm.php:79 msgid "Remove Item Tag" msgstr "Удалить ключевое слово" -#: ../../mod/tagrm.php:81 +#: mod/tagrm.php:81 msgid "Select a tag to remove: " msgstr "Выберите ключевое слово для удаления: " -#: ../../mod/tagrm.php:93 ../../mod/delegate.php:139 +#: mod/tagrm.php:93 mod/delegate.php:139 msgid "Remove" msgstr "Удалить" -#: ../../mod/filer.php:30 ../../include/conversation.php:1006 -#: ../../include/conversation.php:1024 +#: mod/ostatus_subscribe.php:14 +msgid "Subscribing to OStatus contacts" +msgstr "" + +#: mod/ostatus_subscribe.php:25 +msgid "No contact provided." +msgstr "" + +#: mod/ostatus_subscribe.php:30 +msgid "Couldn't fetch information for contact." +msgstr "" + +#: mod/ostatus_subscribe.php:38 +msgid "Couldn't fetch friends for contact." +msgstr "" + +#: mod/ostatus_subscribe.php:51 mod/repair_ostatus.php:44 +msgid "Done" +msgstr "Готово" + +#: mod/ostatus_subscribe.php:65 +msgid "success" +msgstr "удачно" + +#: mod/ostatus_subscribe.php:67 +msgid "failed" +msgstr "неудача" + +#: mod/ostatus_subscribe.php:69 object/Item.php:235 +msgid "ignored" +msgstr "" + +#: mod/ostatus_subscribe.php:73 mod/repair_ostatus.php:50 +msgid "Keep this window open until done." +msgstr "" + +#: mod/filer.php:30 include/conversation.php:1132 +#: include/conversation.php:1150 msgid "Save to Folder:" msgstr "Сохранить в папку:" -#: ../../mod/filer.php:30 +#: mod/filer.php:30 msgid "- select -" msgstr "- выбрать -" -#: ../../mod/filer.php:31 ../../mod/editpost.php:109 ../../mod/notes.php:63 -#: ../../include/text.php:956 +#: mod/filer.php:31 mod/editpost.php:109 mod/notes.php:61 +#: include/text.php:1004 msgid "Save" msgstr "Сохранить" -#: ../../mod/follow.php:27 +#: mod/follow.php:19 mod/dfrn_request.php:870 +msgid "Submit Request" +msgstr "Отправить запрос" + +#: mod/follow.php:30 +msgid "You already added this contact." +msgstr "" + +#: mod/follow.php:39 +msgid "Diaspora support isn't enabled. Contact can't be added." +msgstr "" + +#: mod/follow.php:46 +msgid "OStatus support is disabled. Contact can't be added." +msgstr "" + +#: mod/follow.php:53 +msgid "The network type couldn't be detected. Contact can't be added." +msgstr "" + +#: mod/follow.php:109 mod/dfrn_request.php:856 +msgid "Please answer the following:" +msgstr "Пожалуйста, ответьте следующее:" + +#: mod/follow.php:110 mod/dfrn_request.php:857 +#, php-format +msgid "Does %s know you?" +msgstr "%s знает вас?" + +#: mod/follow.php:110 mod/settings.php:1103 mod/settings.php:1109 +#: mod/settings.php:1117 mod/settings.php:1121 mod/settings.php:1126 +#: mod/settings.php:1132 mod/settings.php:1138 mod/settings.php:1144 +#: mod/settings.php:1170 mod/settings.php:1171 mod/settings.php:1172 +#: mod/settings.php:1173 mod/settings.php:1174 mod/dfrn_request.php:857 +#: mod/register.php:239 mod/profiles.php:658 mod/profiles.php:662 +#: mod/profiles.php:687 mod/api.php:106 +msgid "No" +msgstr "Нет" + +#: mod/follow.php:111 mod/dfrn_request.php:861 +msgid "Add a personal note:" +msgstr "Добавить личную заметку:" + +#: mod/follow.php:117 mod/dfrn_request.php:867 +msgid "Your Identity Address:" +msgstr "Ваш идентификационный адрес:" + +#: mod/follow.php:180 msgid "Contact added" msgstr "Контакт добавлен" -#: ../../mod/item.php:113 +#: mod/item.php:114 msgid "Unable to locate original post." msgstr "Не удалось найти оригинальный пост." -#: ../../mod/item.php:345 +#: mod/item.php:329 msgid "Empty post discarded." msgstr "Пустое сообщение отбрасывается." -#: ../../mod/item.php:484 ../../mod/wall_upload.php:169 -#: ../../mod/wall_upload.php:178 ../../mod/wall_upload.php:185 -#: ../../include/Photo.php:916 ../../include/Photo.php:931 -#: ../../include/Photo.php:938 ../../include/Photo.php:960 -#: ../../include/message.php:144 +#: mod/item.php:467 mod/wall_upload.php:213 mod/wall_upload.php:227 +#: mod/wall_upload.php:234 include/Photo.php:958 include/Photo.php:973 +#: include/Photo.php:980 include/Photo.php:1002 include/message.php:145 msgid "Wall Photos" msgstr "Фото стены" -#: ../../mod/item.php:938 +#: mod/item.php:842 msgid "System error. Post not saved." msgstr "Системная ошибка. Сообщение не сохранено." -#: ../../mod/item.php:964 +#: mod/item.php:971 #, php-format msgid "" -"This message was sent to you by %s, a member of the Friendica social " -"network." -msgstr "Это сообщение было отправлено вам %s, участником социальной сети Friendica." +"This message was sent to you by %s, a member of the Friendica social network." +msgstr "" +"Это сообщение было отправлено вам %s, участником социальной сети Friendica." -#: ../../mod/item.php:966 +#: mod/item.php:973 #, php-format msgid "You may visit them online at %s" msgstr "Вы можете посетить их в онлайне на %s" -#: ../../mod/item.php:967 +#: mod/item.php:974 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." -msgstr "Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не хотите получать эти сообщения." +msgstr "" +"Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не " +"хотите получать эти сообщения." -#: ../../mod/item.php:971 +#: mod/item.php:978 #, php-format msgid "%s posted an update." msgstr "%s отправил/а/ обновление." -#: ../../mod/group.php:29 +#: mod/group.php:29 msgid "Group created." msgstr "Группа создана." -#: ../../mod/group.php:35 +#: mod/group.php:35 msgid "Could not create group." msgstr "Не удалось создать группу." -#: ../../mod/group.php:47 ../../mod/group.php:140 +#: mod/group.php:47 mod/group.php:140 msgid "Group not found." msgstr "Группа не найдена." -#: ../../mod/group.php:60 +#: mod/group.php:60 msgid "Group name changed." msgstr "Название группы изменено." -#: ../../mod/group.php:87 +#: mod/group.php:87 msgid "Save Group" msgstr "Сохранить группу" -#: ../../mod/group.php:93 +#: mod/group.php:93 msgid "Create a group of contacts/friends." msgstr "Создать группу контактов / друзей." -#: ../../mod/group.php:94 ../../mod/group.php:180 +#: mod/group.php:94 mod/group.php:178 include/group.php:289 msgid "Group Name: " msgstr "Название группы: " -#: ../../mod/group.php:113 +#: mod/group.php:113 msgid "Group removed." msgstr "Группа удалена." -#: ../../mod/group.php:115 +#: mod/group.php:115 msgid "Unable to remove group." msgstr "Не удается удалить группу." -#: ../../mod/group.php:179 +#: mod/group.php:177 msgid "Group Editor" msgstr "Редактор групп" -#: ../../mod/group.php:192 +#: mod/group.php:190 msgid "Members" msgstr "Участники" -#: ../../mod/apps.php:7 ../../index.php:212 +#: mod/group.php:193 mod/network.php:576 mod/content.php:130 +msgid "Group is empty" +msgstr "Группа пуста" + +#: mod/apps.php:7 index.php:226 msgid "You must be logged in to use addons. " msgstr "Вы должны войти в систему, чтобы использовать аддоны." -#: ../../mod/apps.php:11 +#: mod/apps.php:11 msgid "Applications" msgstr "Приложения" -#: ../../mod/apps.php:14 +#: mod/apps.php:14 msgid "No installed applications." msgstr "Нет установленных приложений." -#: ../../mod/dfrn_confirm.php:64 ../../mod/profiles.php:18 -#: ../../mod/profiles.php:133 ../../mod/profiles.php:179 -#: ../../mod/profiles.php:630 +#: mod/dfrn_confirm.php:64 mod/profiles.php:18 mod/profiles.php:133 +#: mod/profiles.php:179 mod/profiles.php:627 msgid "Profile not found." msgstr "Профиль не найден." -#: ../../mod/dfrn_confirm.php:120 ../../mod/fsuggest.php:20 -#: ../../mod/fsuggest.php:92 ../../mod/crepair.php:133 +#: mod/dfrn_confirm.php:120 mod/fsuggest.php:20 mod/fsuggest.php:92 +#: mod/crepair.php:131 msgid "Contact not found." msgstr "Контакт не найден." -#: ../../mod/dfrn_confirm.php:121 +#: mod/dfrn_confirm.php:121 msgid "" -"This may occasionally happen if contact was requested by both persons and it" -" has already been approved." -msgstr "Это может иногда происходить, если контакт запрашивали двое людей, и он был уже одобрен." +"This may occasionally happen if contact was requested by both persons and it " +"has already been approved." +msgstr "" +"Это может иногда происходить, если контакт запрашивали двое людей, и он был " +"уже одобрен." -#: ../../mod/dfrn_confirm.php:240 +#: mod/dfrn_confirm.php:240 msgid "Response from remote site was not understood." msgstr "Ответ от удаленного сайта не был понят." -#: ../../mod/dfrn_confirm.php:249 ../../mod/dfrn_confirm.php:254 +#: mod/dfrn_confirm.php:249 mod/dfrn_confirm.php:254 msgid "Unexpected response from remote site: " msgstr "Неожиданный ответ от удаленного сайта: " -#: ../../mod/dfrn_confirm.php:263 +#: mod/dfrn_confirm.php:263 msgid "Confirmation completed successfully." msgstr "Подтверждение успешно завершено." -#: ../../mod/dfrn_confirm.php:265 ../../mod/dfrn_confirm.php:279 -#: ../../mod/dfrn_confirm.php:286 +#: mod/dfrn_confirm.php:265 mod/dfrn_confirm.php:279 mod/dfrn_confirm.php:286 msgid "Remote site reported: " msgstr "Удаленный сайт сообщил: " -#: ../../mod/dfrn_confirm.php:277 +#: mod/dfrn_confirm.php:277 msgid "Temporary failure. Please wait and try again." msgstr "Временные неудачи. Подождите и попробуйте еще раз." -#: ../../mod/dfrn_confirm.php:284 +#: mod/dfrn_confirm.php:284 msgid "Introduction failed or was revoked." msgstr "Запрос ошибочен или был отозван." -#: ../../mod/dfrn_confirm.php:429 +#: mod/dfrn_confirm.php:430 msgid "Unable to set contact photo." msgstr "Не удается установить фото контакта." -#: ../../mod/dfrn_confirm.php:486 ../../include/conversation.php:172 -#: ../../include/diaspora.php:620 +#: mod/dfrn_confirm.php:487 include/conversation.php:185 +#: include/diaspora.php:637 #, php-format msgid "%1$s is now friends with %2$s" msgstr "%1$s и %2$s теперь друзья" -#: ../../mod/dfrn_confirm.php:571 +#: mod/dfrn_confirm.php:572 #, php-format msgid "No user record found for '%s' " msgstr "Не найдено записи пользователя для '%s' " -#: ../../mod/dfrn_confirm.php:581 +#: mod/dfrn_confirm.php:582 msgid "Our site encryption key is apparently messed up." msgstr "Наш ключ шифрования сайта, по-видимому, перепутался." -#: ../../mod/dfrn_confirm.php:592 +#: mod/dfrn_confirm.php:593 msgid "Empty site URL was provided or URL could not be decrypted by us." -msgstr "Был предоставлен пустой URL сайта ​​или URL не может быть расшифрован нами." +msgstr "" +"Был предоставлен пустой URL сайта ​​или URL не может быть расшифрован нами." -#: ../../mod/dfrn_confirm.php:613 +#: mod/dfrn_confirm.php:614 msgid "Contact record was not found for you on our site." msgstr "Запись контакта не найдена для вас на нашем сайте." -#: ../../mod/dfrn_confirm.php:627 +#: mod/dfrn_confirm.php:628 #, php-format msgid "Site public key not available in contact record for URL %s." msgstr "Публичный ключ недоступен в записи о контакте по ссылке %s" -#: ../../mod/dfrn_confirm.php:647 +#: mod/dfrn_confirm.php:648 msgid "" "The ID provided by your system is a duplicate on our system. It should work " "if you try again." -msgstr "ID, предложенный вашей системой, является дубликатом в нашей системе. Он должен работать, если вы повторите попытку." +msgstr "" +"ID, предложенный вашей системой, является дубликатом в нашей системе. Он " +"должен работать, если вы повторите попытку." -#: ../../mod/dfrn_confirm.php:658 +#: mod/dfrn_confirm.php:659 msgid "Unable to set your contact credentials on our system." msgstr "Не удалось установить ваши учетные данные контакта в нашей системе." -#: ../../mod/dfrn_confirm.php:725 +#: mod/dfrn_confirm.php:726 msgid "Unable to update your contact profile details on our system" msgstr "Не удается обновить ваши контактные детали профиля в нашей системе" -#: ../../mod/dfrn_confirm.php:752 ../../mod/dfrn_request.php:717 -#: ../../include/items.php:4008 +#: mod/dfrn_confirm.php:753 mod/dfrn_request.php:741 include/items.php:4299 msgid "[Name Withheld]" msgstr "[Имя не разглашается]" -#: ../../mod/dfrn_confirm.php:797 +#: mod/dfrn_confirm.php:798 #, php-format msgid "%1$s has joined %2$s" msgstr "%1$s присоединился %2$s" -#: ../../mod/profile.php:21 ../../boot.php:1458 +#: mod/profile.php:21 include/identity.php:51 msgid "Requested profile is not available." msgstr "Запрашиваемый профиль недоступен." -#: ../../mod/profile.php:180 +#: mod/profile.php:179 msgid "Tips for New Members" msgstr "Советы для новых участников" -#: ../../mod/videos.php:125 +#: mod/videos.php:123 +msgid "Do you really want to delete this video?" +msgstr "" + +#: mod/videos.php:128 +msgid "Delete Video" +msgstr "Удалить видео" + +#: mod/videos.php:207 msgid "No videos selected" msgstr "Видео не выбрано" -#: ../../mod/videos.php:226 ../../mod/photos.php:1031 +#: mod/videos.php:308 mod/photos.php:1087 msgid "Access to this item is restricted." msgstr "Доступ к этому пункту ограничен." -#: ../../mod/videos.php:301 ../../include/text.php:1405 +#: mod/videos.php:383 include/text.php:1472 msgid "View Video" msgstr "Просмотреть видео" -#: ../../mod/videos.php:308 ../../mod/photos.php:1808 +#: mod/videos.php:390 mod/photos.php:1890 msgid "View Album" msgstr "Просмотреть альбом" -#: ../../mod/videos.php:317 +#: mod/videos.php:399 msgid "Recent Videos" msgstr "Последние видео" -#: ../../mod/videos.php:319 +#: mod/videos.php:401 msgid "Upload New Videos" msgstr "Загрузить новые видео" -#: ../../mod/tagger.php:95 ../../include/conversation.php:266 +#: mod/tagger.php:95 include/conversation.php:278 #, php-format msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "%1$s tagged %2$s's %3$s в %4$s" -#: ../../mod/fsuggest.php:63 +#: mod/fsuggest.php:63 msgid "Friend suggestion sent." msgstr "Приглашение в друзья отправлено." -#: ../../mod/fsuggest.php:97 +#: mod/fsuggest.php:97 msgid "Suggest Friends" msgstr "Предложить друзей" -#: ../../mod/fsuggest.php:99 +#: mod/fsuggest.php:99 #, php-format msgid "Suggest a friend for %s" msgstr "Предложить друга для %s." -#: ../../mod/lostpass.php:19 +#: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86 +#: mod/wall_upload.php:122 mod/wall_upload.php:125 mod/wall_attach.php:17 +#: mod/wall_attach.php:25 mod/wall_attach.php:76 include/api.php:1781 +msgid "Invalid request." +msgstr "Неверный запрос." + +#: mod/lostpass.php:19 msgid "No valid account found." msgstr "Не найдено действительного аккаунта." -#: ../../mod/lostpass.php:35 +#: mod/lostpass.php:35 msgid "Password reset request issued. Check your email." msgstr "Запрос на сброс пароля принят. Проверьте вашу электронную почту." -#: ../../mod/lostpass.php:42 +#: mod/lostpass.php:42 #, php-format msgid "" "\n" "\t\tDear %1$s,\n" "\t\t\tA request was recently received at \"%2$s\" to reset your account\n" -"\t\tpassword. In order to confirm this request, please select the verification link\n" +"\t\tpassword. In order to confirm this request, please select the " +"verification link\n" "\t\tbelow or paste it into your web browser address bar.\n" "\n" "\t\tIf you did NOT request this change, please DO NOT follow the link\n" @@ -1169,7 +1336,7 @@ msgid "" "\t\tissued this request." msgstr "" -#: ../../mod/lostpass.php:53 +#: mod/lostpass.php:53 #, php-format msgid "" "\n" @@ -1178,7 +1345,8 @@ msgid "" "\t\t%1$s\n" "\n" "\t\tYou will then receive a follow-up message containing the new password.\n" -"\t\tYou may change that password from your account settings page after logging in.\n" +"\t\tYou may change that password from your account settings page after " +"logging in.\n" "\n" "\t\tThe login details are as follows:\n" "\n" @@ -1186,55 +1354,60 @@ msgid "" "\t\tLogin Name:\t%3$s" msgstr "" -#: ../../mod/lostpass.php:72 +#: mod/lostpass.php:72 #, php-format msgid "Password reset requested at %s" msgstr "Запрос на сброс пароля получен %s" -#: ../../mod/lostpass.php:92 +#: mod/lostpass.php:92 msgid "" "Request could not be verified. (You may have previously submitted it.) " "Password reset failed." -msgstr "Запрос не может быть проверен. (Вы, возможно, ранее представляли его.) Попытка сброса пароля неудачная." +msgstr "" +"Запрос не может быть проверен. (Вы, возможно, ранее представляли его.) " +"Попытка сброса пароля неудачная." -#: ../../mod/lostpass.php:109 ../../boot.php:1280 +#: mod/lostpass.php:109 boot.php:1444 msgid "Password Reset" msgstr "Сброс пароля" -#: ../../mod/lostpass.php:110 +#: mod/lostpass.php:110 msgid "Your password has been reset as requested." msgstr "Ваш пароль был сброшен по требованию." -#: ../../mod/lostpass.php:111 +#: mod/lostpass.php:111 msgid "Your new password is" msgstr "Ваш новый пароль" -#: ../../mod/lostpass.php:112 +#: mod/lostpass.php:112 msgid "Save or copy your new password - and then" msgstr "Сохраните или скопируйте новый пароль - и затем" -#: ../../mod/lostpass.php:113 +#: mod/lostpass.php:113 msgid "click here to login" msgstr "нажмите здесь для входа" -#: ../../mod/lostpass.php:114 +#: mod/lostpass.php:114 msgid "" "Your password may be changed from the Settings page after " "successful login." -msgstr "Ваш пароль может быть изменен на странице Настройки после успешного входа." +msgstr "" +"Ваш пароль может быть изменен на странице Настройки после успешного " +"входа." -#: ../../mod/lostpass.php:125 +#: mod/lostpass.php:125 #, php-format msgid "" "\n" "\t\t\t\tDear %1$s,\n" "\t\t\t\t\tYour password has been changed as requested. Please retain this\n" -"\t\t\t\tinformation for your records (or change your password immediately to\n" +"\t\t\t\tinformation for your records (or change your password immediately " +"to\n" "\t\t\t\tsomething that you will remember).\n" "\t\t\t" msgstr "" -#: ../../mod/lostpass.php:131 +#: mod/lostpass.php:131 #, php-format msgid "" "\n" @@ -1244,1379 +1417,1693 @@ msgid "" "\t\t\t\tLogin Name:\t%2$s\n" "\t\t\t\tPassword:\t%3$s\n" "\n" -"\t\t\t\tYou may change that password from your account settings page after logging in.\n" +"\t\t\t\tYou may change that password from your account settings page after " +"logging in.\n" "\t\t\t" msgstr "" -#: ../../mod/lostpass.php:147 +#: mod/lostpass.php:147 #, php-format msgid "Your password has been changed at %s" msgstr "Ваш пароль был изменен %s" -#: ../../mod/lostpass.php:159 +#: mod/lostpass.php:159 msgid "Forgot your Password?" msgstr "Забыли пароль?" -#: ../../mod/lostpass.php:160 +#: mod/lostpass.php:160 msgid "" "Enter your email address and submit to have your password reset. Then check " "your email for further instructions." -msgstr "Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш пароль. Затем проверьте свою электронную почту для получения дальнейших инструкций." +msgstr "" +"Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш " +"пароль. Затем проверьте свою электронную почту для получения дальнейших " +"инструкций." -#: ../../mod/lostpass.php:161 +#: mod/lostpass.php:161 msgid "Nickname or Email: " msgstr "Ник или E-mail: " -#: ../../mod/lostpass.php:162 +#: mod/lostpass.php:162 msgid "Reset" msgstr "Сброс" -#: ../../mod/like.php:166 ../../include/conversation.php:137 -#: ../../include/diaspora.php:2103 ../../view/theme/diabook/theme.php:480 -#, php-format -msgid "%1$s likes %2$s's %3$s" -msgstr "%1$s нравится %3$s от %2$s " - -#: ../../mod/like.php:168 ../../include/conversation.php:140 -#, php-format -msgid "%1$s doesn't like %2$s's %3$s" -msgstr "%1$s не нравится %3$s от %2$s " - -#: ../../mod/ping.php:240 +#: mod/ping.php:265 msgid "{0} wants to be your friend" msgstr "{0} хочет стать Вашим другом" -#: ../../mod/ping.php:245 +#: mod/ping.php:280 msgid "{0} sent you a message" msgstr "{0} отправил Вам сообщение" -#: ../../mod/ping.php:250 +#: mod/ping.php:295 msgid "{0} requested registration" msgstr "{0} требуемая регистрация" -#: ../../mod/ping.php:256 -#, php-format -msgid "{0} commented %s's post" -msgstr "{0} прокомментировал сообщение от %s" - -#: ../../mod/ping.php:261 -#, php-format -msgid "{0} liked %s's post" -msgstr "{0} нравится сообщение от %s" - -#: ../../mod/ping.php:266 -#, php-format -msgid "{0} disliked %s's post" -msgstr "{0} не нравится сообщение от %s" - -#: ../../mod/ping.php:271 -#, php-format -msgid "{0} is now friends with %s" -msgstr "{0} теперь друзья с %s" - -#: ../../mod/ping.php:276 -msgid "{0} posted" -msgstr "{0} опубликовано" - -#: ../../mod/ping.php:281 -#, php-format -msgid "{0} tagged %s's post with #%s" -msgstr "{0} пометил сообщение %s с #%s" - -#: ../../mod/ping.php:287 -msgid "{0} mentioned you in a post" -msgstr "{0} упоменул Вас в сообщение" - -#: ../../mod/viewcontacts.php:41 +#: mod/viewcontacts.php:72 msgid "No contacts." msgstr "Нет контактов." -#: ../../mod/viewcontacts.php:78 ../../include/text.php:876 -msgid "View Contacts" -msgstr "Просмотр контактов" - -#: ../../mod/notifications.php:26 +#: mod/notifications.php:29 msgid "Invalid request identifier." msgstr "Неверный идентификатор запроса." -#: ../../mod/notifications.php:35 ../../mod/notifications.php:165 -#: ../../mod/notifications.php:211 +#: mod/notifications.php:38 mod/notifications.php:180 +#: mod/notifications.php:260 msgid "Discard" msgstr "Отказаться" -#: ../../mod/notifications.php:78 +#: mod/notifications.php:81 msgid "System" msgstr "Система" -#: ../../mod/notifications.php:83 ../../include/nav.php:145 +#: mod/notifications.php:87 mod/admin.php:390 include/nav.php:154 msgid "Network" -msgstr "Сеть" +msgstr "Новости" -#: ../../mod/notifications.php:88 ../../mod/network.php:371 +#: mod/notifications.php:93 mod/network.php:384 msgid "Personal" msgstr "Персонал" -#: ../../mod/notifications.php:93 ../../include/nav.php:105 -#: ../../include/nav.php:148 ../../view/theme/diabook/theme.php:123 +#: mod/notifications.php:99 include/nav.php:104 include/nav.php:157 +#: view/theme/diabook/theme.php:123 msgid "Home" -msgstr "Главная" +msgstr "Мой профиль" -#: ../../mod/notifications.php:98 ../../include/nav.php:154 +#: mod/notifications.php:105 include/nav.php:162 msgid "Introductions" msgstr "Запросы" -#: ../../mod/notifications.php:122 +#: mod/notifications.php:130 msgid "Show Ignored Requests" msgstr "Показать проигнорированные запросы" -#: ../../mod/notifications.php:122 +#: mod/notifications.php:130 msgid "Hide Ignored Requests" msgstr "Скрыть проигнорированные запросы" -#: ../../mod/notifications.php:149 ../../mod/notifications.php:195 +#: mod/notifications.php:164 mod/notifications.php:234 msgid "Notification type: " msgstr "Тип уведомления: " -#: ../../mod/notifications.php:150 +#: mod/notifications.php:165 msgid "Friend Suggestion" msgstr "Предложение в друзья" -#: ../../mod/notifications.php:152 +#: mod/notifications.php:167 #, php-format msgid "suggested by %s" msgstr "предложено юзером %s" -#: ../../mod/notifications.php:158 ../../mod/notifications.php:205 +#: mod/notifications.php:173 mod/notifications.php:252 msgid "Post a new friend activity" msgstr "Настроение" -#: ../../mod/notifications.php:158 ../../mod/notifications.php:205 +#: mod/notifications.php:173 mod/notifications.php:252 msgid "if applicable" msgstr "если требуется" -#: ../../mod/notifications.php:161 ../../mod/notifications.php:208 -#: ../../mod/admin.php:1005 +#: mod/notifications.php:176 mod/notifications.php:257 mod/admin.php:1308 msgid "Approve" msgstr "Одобрить" -#: ../../mod/notifications.php:181 +#: mod/notifications.php:196 msgid "Claims to be known to you: " msgstr "Утверждения, о которых должно быть вам известно: " -#: ../../mod/notifications.php:181 +#: mod/notifications.php:196 msgid "yes" msgstr "да" -#: ../../mod/notifications.php:181 +#: mod/notifications.php:196 msgid "no" msgstr "нет" -#: ../../mod/notifications.php:188 -msgid "Approve as: " -msgstr "Утвердить как: " +#: mod/notifications.php:197 +msgid "" +"Shall your connection be bidirectional or not? \"Friend\" implies that you " +"allow to read and you subscribe to their posts. \"Fan/Admirer\" means that " +"you allow to read but you do not want to read theirs. Approve as: " +msgstr "" -#: ../../mod/notifications.php:189 +#: mod/notifications.php:200 +msgid "" +"Shall your connection be bidirectional or not? \"Friend\" implies that you " +"allow to read and you subscribe to their posts. \"Sharer\" means that you " +"allow to read but you do not want to read theirs. Approve as: " +msgstr "" + +#: mod/notifications.php:208 msgid "Friend" msgstr "Друг" -#: ../../mod/notifications.php:190 +#: mod/notifications.php:209 msgid "Sharer" msgstr "Участник" -#: ../../mod/notifications.php:190 +#: mod/notifications.php:209 msgid "Fan/Admirer" msgstr "Фанат / Поклонник" -#: ../../mod/notifications.php:196 +#: mod/notifications.php:235 msgid "Friend/Connect Request" msgstr "Запрос в друзья / на подключение" -#: ../../mod/notifications.php:196 +#: mod/notifications.php:235 msgid "New Follower" msgstr "Новый фолловер" -#: ../../mod/notifications.php:217 +#: mod/notifications.php:250 mod/directory.php:147 include/identity.php:310 +#: include/identity.php:590 +msgid "Gender:" +msgstr "Пол:" + +#: mod/notifications.php:266 msgid "No introductions." msgstr "Запросов нет." -#: ../../mod/notifications.php:220 ../../include/nav.php:155 +#: mod/notifications.php:269 include/nav.php:165 msgid "Notifications" msgstr "Уведомления" -#: ../../mod/notifications.php:258 ../../mod/notifications.php:387 -#: ../../mod/notifications.php:478 +#: mod/notifications.php:307 mod/notifications.php:436 +#: mod/notifications.php:527 #, php-format msgid "%s liked %s's post" msgstr "%s нравится %s сообшение" -#: ../../mod/notifications.php:268 ../../mod/notifications.php:397 -#: ../../mod/notifications.php:488 +#: mod/notifications.php:317 mod/notifications.php:446 +#: mod/notifications.php:537 #, php-format msgid "%s disliked %s's post" msgstr "%s не нравится %s сообшение" -#: ../../mod/notifications.php:283 ../../mod/notifications.php:412 -#: ../../mod/notifications.php:503 +#: mod/notifications.php:332 mod/notifications.php:461 +#: mod/notifications.php:552 #, php-format msgid "%s is now friends with %s" msgstr "%s теперь друзья с %s" -#: ../../mod/notifications.php:290 ../../mod/notifications.php:419 +#: mod/notifications.php:339 mod/notifications.php:468 #, php-format msgid "%s created a new post" msgstr "%s написал новое сообщение" -#: ../../mod/notifications.php:291 ../../mod/notifications.php:420 -#: ../../mod/notifications.php:513 +#: mod/notifications.php:340 mod/notifications.php:469 +#: mod/notifications.php:562 #, php-format msgid "%s commented on %s's post" msgstr "%s прокомментировал %s сообщение" -#: ../../mod/notifications.php:306 +#: mod/notifications.php:355 msgid "No more network notifications." msgstr "Уведомлений из сети больше нет." -#: ../../mod/notifications.php:310 +#: mod/notifications.php:359 msgid "Network Notifications" msgstr "Уведомления сети" -#: ../../mod/notifications.php:336 ../../mod/notify.php:75 +#: mod/notifications.php:385 mod/notify.php:72 msgid "No more system notifications." msgstr "Системных уведомлений больше нет." -#: ../../mod/notifications.php:340 ../../mod/notify.php:79 +#: mod/notifications.php:389 mod/notify.php:76 msgid "System Notifications" msgstr "Уведомления системы" -#: ../../mod/notifications.php:435 +#: mod/notifications.php:484 msgid "No more personal notifications." msgstr "Персональных уведомлений больше нет." -#: ../../mod/notifications.php:439 +#: mod/notifications.php:488 msgid "Personal Notifications" msgstr "Личные уведомления" -#: ../../mod/notifications.php:520 +#: mod/notifications.php:569 msgid "No more home notifications." msgstr "Уведомлений больше нет." -#: ../../mod/notifications.php:524 +#: mod/notifications.php:573 msgid "Home Notifications" msgstr "Уведомления" -#: ../../mod/babel.php:17 +#: mod/babel.php:17 msgid "Source (bbcode) text:" msgstr "Код (bbcode):" -#: ../../mod/babel.php:23 +#: mod/babel.php:23 msgid "Source (Diaspora) text to convert to BBcode:" msgstr "Код (Diaspora) для конвертации в BBcode:" -#: ../../mod/babel.php:31 +#: mod/babel.php:31 msgid "Source input: " msgstr "Ввести код:" -#: ../../mod/babel.php:35 +#: mod/babel.php:35 msgid "bb2html (raw HTML): " msgstr "bb2html (raw HTML): " -#: ../../mod/babel.php:39 +#: mod/babel.php:39 msgid "bb2html: " msgstr "bb2html: " -#: ../../mod/babel.php:43 +#: mod/babel.php:43 msgid "bb2html2bb: " msgstr "bb2html2bb: " -#: ../../mod/babel.php:47 +#: mod/babel.php:47 msgid "bb2md: " msgstr "bb2md: " -#: ../../mod/babel.php:51 +#: mod/babel.php:51 msgid "bb2md2html: " msgstr "bb2md2html: " -#: ../../mod/babel.php:55 +#: mod/babel.php:55 msgid "bb2dia2bb: " msgstr "bb2dia2bb: " -#: ../../mod/babel.php:59 +#: mod/babel.php:59 msgid "bb2md2html2bb: " msgstr "bb2md2html2bb: " -#: ../../mod/babel.php:69 +#: mod/babel.php:69 msgid "Source input (Diaspora format): " msgstr "Ввод кода (формат Diaspora):" -#: ../../mod/babel.php:74 +#: mod/babel.php:74 msgid "diaspora2bb: " msgstr "diaspora2bb: " -#: ../../mod/navigation.php:20 ../../include/nav.php:34 +#: mod/navigation.php:19 include/nav.php:33 msgid "Nothing new here" msgstr "Ничего нового здесь" -#: ../../mod/navigation.php:24 ../../include/nav.php:38 +#: mod/navigation.php:23 include/nav.php:37 msgid "Clear notifications" msgstr "Стереть уведомления" -#: ../../mod/message.php:9 ../../include/nav.php:164 +#: mod/message.php:15 include/nav.php:174 msgid "New Message" msgstr "Новое сообщение" -#: ../../mod/message.php:63 ../../mod/wallmessage.php:56 +#: mod/message.php:70 mod/wallmessage.php:56 msgid "No recipient selected." msgstr "Не выбран получатель." -#: ../../mod/message.php:67 +#: mod/message.php:74 msgid "Unable to locate contact information." msgstr "Не удалось найти контактную информацию." -#: ../../mod/message.php:70 ../../mod/wallmessage.php:62 +#: mod/message.php:77 mod/wallmessage.php:62 msgid "Message could not be sent." msgstr "Сообщение не может быть отправлено." -#: ../../mod/message.php:73 ../../mod/wallmessage.php:65 +#: mod/message.php:80 mod/wallmessage.php:65 msgid "Message collection failure." msgstr "Неудача коллекции сообщения." -#: ../../mod/message.php:76 ../../mod/wallmessage.php:68 +#: mod/message.php:83 mod/wallmessage.php:68 msgid "Message sent." msgstr "Сообщение отправлено." -#: ../../mod/message.php:182 ../../include/nav.php:161 +#: mod/message.php:189 include/nav.php:171 msgid "Messages" msgstr "Сообщения" -#: ../../mod/message.php:207 +#: mod/message.php:214 msgid "Do you really want to delete this message?" msgstr "Вы действительно хотите удалить это сообщение?" -#: ../../mod/message.php:227 +#: mod/message.php:234 msgid "Message deleted." msgstr "Сообщение удалено." -#: ../../mod/message.php:258 +#: mod/message.php:265 msgid "Conversation removed." msgstr "Беседа удалена." -#: ../../mod/message.php:283 ../../mod/message.php:291 -#: ../../mod/message.php:466 ../../mod/message.php:474 -#: ../../mod/wallmessage.php:127 ../../mod/wallmessage.php:135 -#: ../../include/conversation.php:1002 ../../include/conversation.php:1020 +#: mod/message.php:290 mod/message.php:298 mod/message.php:427 +#: mod/message.php:435 mod/wallmessage.php:127 mod/wallmessage.php:135 +#: include/conversation.php:1128 include/conversation.php:1146 msgid "Please enter a link URL:" msgstr "Пожалуйста, введите URL ссылки:" -#: ../../mod/message.php:319 ../../mod/wallmessage.php:142 +#: mod/message.php:326 mod/wallmessage.php:142 msgid "Send Private Message" msgstr "Отправить личное сообщение" -#: ../../mod/message.php:320 ../../mod/message.php:553 -#: ../../mod/wallmessage.php:144 +#: mod/message.php:327 mod/message.php:514 mod/wallmessage.php:144 msgid "To:" msgstr "Кому:" -#: ../../mod/message.php:325 ../../mod/message.php:555 -#: ../../mod/wallmessage.php:145 +#: mod/message.php:332 mod/message.php:516 mod/wallmessage.php:145 msgid "Subject:" msgstr "Тема:" -#: ../../mod/message.php:329 ../../mod/message.php:558 -#: ../../mod/wallmessage.php:151 ../../mod/invite.php:134 +#: mod/message.php:336 mod/message.php:519 mod/wallmessage.php:151 +#: mod/invite.php:134 msgid "Your message:" msgstr "Ваше сообщение:" -#: ../../mod/message.php:332 ../../mod/message.php:562 -#: ../../mod/wallmessage.php:154 ../../mod/editpost.php:110 -#: ../../include/conversation.php:1091 +#: mod/message.php:339 mod/message.php:523 mod/wallmessage.php:154 +#: mod/editpost.php:110 include/conversation.php:1183 msgid "Upload photo" msgstr "Загрузить фото" -#: ../../mod/message.php:333 ../../mod/message.php:563 -#: ../../mod/wallmessage.php:155 ../../mod/editpost.php:114 -#: ../../include/conversation.php:1095 +#: mod/message.php:340 mod/message.php:524 mod/wallmessage.php:155 +#: mod/editpost.php:114 include/conversation.php:1187 msgid "Insert web link" msgstr "Вставить веб-ссылку" -#: ../../mod/message.php:334 ../../mod/message.php:565 -#: ../../mod/content.php:499 ../../mod/content.php:883 -#: ../../mod/wallmessage.php:156 ../../mod/editpost.php:124 -#: ../../mod/photos.php:1545 ../../object/Item.php:364 -#: ../../include/conversation.php:692 ../../include/conversation.php:1109 +#: mod/message.php:341 mod/message.php:526 mod/content.php:501 +#: mod/content.php:885 mod/wallmessage.php:156 mod/editpost.php:124 +#: mod/photos.php:1610 object/Item.php:396 include/conversation.php:713 +#: include/conversation.php:1201 msgid "Please wait" msgstr "Пожалуйста, подождите" -#: ../../mod/message.php:371 +#: mod/message.php:368 msgid "No messages." msgstr "Нет сообщений." -#: ../../mod/message.php:378 +#: mod/message.php:411 +msgid "Message not available." +msgstr "Сообщение не доступно." + +#: mod/message.php:481 +msgid "Delete message" +msgstr "Удалить сообщение" + +#: mod/message.php:507 mod/message.php:584 +msgid "Delete conversation" +msgstr "Удалить историю общения" + +#: mod/message.php:509 +msgid "" +"No secure communications available. You may be able to " +"respond from the sender's profile page." +msgstr "" +"Невозможно защищённое соединение. Вы имеете возможность " +"ответить со страницы профиля отправителя." + +#: mod/message.php:513 +msgid "Send Reply" +msgstr "Отправить ответ" + +#: mod/message.php:557 #, php-format msgid "Unknown sender - %s" msgstr "Неизвестный отправитель - %s" -#: ../../mod/message.php:381 +#: mod/message.php:560 #, php-format msgid "You and %s" msgstr "Вы и %s" -#: ../../mod/message.php:384 +#: mod/message.php:563 #, php-format msgid "%s and You" msgstr "%s и Вы" -#: ../../mod/message.php:405 ../../mod/message.php:546 -msgid "Delete conversation" -msgstr "Удалить историю общения" - -#: ../../mod/message.php:408 +#: mod/message.php:587 msgid "D, d M Y - g:i A" msgstr "D, d M Y - g:i A" -#: ../../mod/message.php:411 +#: mod/message.php:590 #, php-format msgid "%d message" msgid_plural "%d messages" msgstr[0] "%d сообщение" msgstr[1] "%d сообщений" msgstr[2] "%d сообщений" +msgstr[3] "%d сообщений" -#: ../../mod/message.php:450 -msgid "Message not available." -msgstr "Сообщение не доступно." - -#: ../../mod/message.php:520 -msgid "Delete message" -msgstr "Удалить сообщение" - -#: ../../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:552 -msgid "Send Reply" -msgstr "Отправить ответ" - -#: ../../mod/update_display.php:22 ../../mod/update_community.php:18 -#: ../../mod/update_notes.php:37 ../../mod/update_profile.php:41 -#: ../../mod/update_network.php:25 +#: mod/update_display.php:22 mod/update_community.php:18 +#: mod/update_notes.php:37 mod/update_profile.php:41 mod/update_network.php:25 msgid "[Embedded content - reload page to view]" msgstr "[Встроенное содержание - перезагрузите страницу для просмотра]" -#: ../../mod/crepair.php:106 +#: mod/crepair.php:104 msgid "Contact settings applied." msgstr "Установки контакта приняты." -#: ../../mod/crepair.php:108 +#: mod/crepair.php:106 msgid "Contact update failed." msgstr "Обновление контакта неудачное." -#: ../../mod/crepair.php:139 -msgid "Repair Contact Settings" -msgstr "Восстановить установки контакта" - -#: ../../mod/crepair.php:141 +#: mod/crepair.php:137 msgid "" -"WARNING: This is highly advanced and if you enter incorrect" -" information your communications with this contact may stop working." -msgstr "ВНИМАНИЕ: Это крайне важно! Если вы введете неверную информацию, ваша связь с этим контактом перестанет работать." +"WARNING: This is highly advanced and if you enter incorrect " +"information your communications with this contact may stop working." +msgstr "" +"ВНИМАНИЕ: Это крайне важно! Если вы введете неверную " +"информацию, ваша связь с этим контактом перестанет работать." -#: ../../mod/crepair.php:142 +#: mod/crepair.php:138 msgid "" "Please use your browser 'Back' button now if you are " "uncertain what to do on this page." -msgstr "Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' сейчас, если вы не уверены, что делаете на этой странице." +msgstr "" +"Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' " +"сейчас, если вы не уверены, что делаете на этой странице." -#: ../../mod/crepair.php:148 -msgid "Return to contact editor" -msgstr "Возврат к редактору контакта" - -#: ../../mod/crepair.php:159 ../../mod/crepair.php:161 +#: mod/crepair.php:151 mod/crepair.php:153 msgid "No mirroring" msgstr "" -#: ../../mod/crepair.php:159 +#: mod/crepair.php:151 msgid "Mirror as forwarded posting" msgstr "" -#: ../../mod/crepair.php:159 ../../mod/crepair.php:161 +#: mod/crepair.php:151 mod/crepair.php:153 msgid "Mirror as my own posting" msgstr "" -#: ../../mod/crepair.php:165 ../../mod/admin.php:1003 ../../mod/admin.php:1015 -#: ../../mod/admin.php:1016 ../../mod/admin.php:1029 -#: ../../mod/settings.php:616 ../../mod/settings.php:642 +#: mod/crepair.php:167 +msgid "Return to contact editor" +msgstr "Возврат к редактору контакта" + +#: mod/crepair.php:169 +msgid "Refetch contact data" +msgstr "" + +#: mod/crepair.php:170 mod/admin.php:1306 mod/admin.php:1318 +#: mod/admin.php:1319 mod/admin.php:1332 mod/settings.php:661 +#: mod/settings.php:687 msgid "Name" msgstr "Имя" -#: ../../mod/crepair.php:166 +#: mod/crepair.php:171 msgid "Account Nickname" msgstr "Ник аккаунта" -#: ../../mod/crepair.php:167 +#: mod/crepair.php:172 msgid "@Tagname - overrides Name/Nickname" msgstr "" -#: ../../mod/crepair.php:168 +#: mod/crepair.php:173 msgid "Account URL" msgstr "URL аккаунта" -#: ../../mod/crepair.php:169 +#: mod/crepair.php:174 msgid "Friend Request URL" msgstr "URL запроса в друзья" -#: ../../mod/crepair.php:170 +#: mod/crepair.php:175 msgid "Friend Confirm URL" msgstr "URL подтверждения друга" -#: ../../mod/crepair.php:171 +#: mod/crepair.php:176 msgid "Notification Endpoint URL" msgstr "URL эндпоинта уведомления" -#: ../../mod/crepair.php:172 +#: mod/crepair.php:177 msgid "Poll/Feed URL" msgstr "URL опроса/ленты" -#: ../../mod/crepair.php:173 +#: mod/crepair.php:178 msgid "New photo from this URL" msgstr "Новое фото из этой URL" -#: ../../mod/crepair.php:174 +#: mod/crepair.php:179 msgid "Remote Self" msgstr "" -#: ../../mod/crepair.php:176 +#: mod/crepair.php:182 msgid "Mirror postings from this contact" msgstr "" -#: ../../mod/crepair.php:176 +#: mod/crepair.php:184 msgid "" "Mark this contact as remote_self, this will cause friendica to repost new " "entries from this contact." msgstr "" -#: ../../mod/bookmarklet.php:12 ../../boot.php:1266 ../../include/nav.php:92 +#: mod/bookmarklet.php:12 boot.php:1430 include/nav.php:91 msgid "Login" msgstr "Вход" -#: ../../mod/bookmarklet.php:41 +#: mod/bookmarklet.php:41 msgid "The post was created" msgstr "" -#: ../../mod/viewsrc.php:7 +#: mod/viewsrc.php:7 msgid "Access denied." msgstr "Доступ запрещен." -#: ../../mod/dirfind.php:26 -msgid "People Search" -msgstr "Поиск людей" +#: mod/dirfind.php:194 mod/allfriends.php:80 mod/match.php:85 +#: mod/suggest.php:98 include/contact_widgets.php:10 include/identity.php:212 +msgid "Connect" +msgstr "Подключить" -#: ../../mod/dirfind.php:60 ../../mod/match.php:65 +#: mod/dirfind.php:195 mod/allfriends.php:64 mod/match.php:70 +#: mod/directory.php:162 mod/suggest.php:81 include/Contact.php:283 +#: include/Contact.php:296 include/Contact.php:338 +#: include/conversation.php:912 include/conversation.php:926 +msgid "View Profile" +msgstr "Просмотреть профиль" + +#: mod/dirfind.php:224 +#, php-format +msgid "People Search - %s" +msgstr "" + +#: mod/dirfind.php:231 mod/match.php:105 msgid "No matches" msgstr "Нет соответствий" -#: ../../mod/fbrowser.php:25 ../../boot.php:2126 ../../include/nav.php:78 -#: ../../view/theme/diabook/theme.php:126 +#: mod/fbrowser.php:32 include/identity.php:702 include/nav.php:77 +#: view/theme/diabook/theme.php:126 msgid "Photos" msgstr "Фото" -#: ../../mod/fbrowser.php:113 +#: mod/fbrowser.php:41 mod/fbrowser.php:62 mod/photos.php:62 +#: mod/photos.php:192 mod/photos.php:1119 mod/photos.php:1245 +#: mod/photos.php:1268 mod/photos.php:1838 mod/photos.php:1850 +#: view/theme/diabook/theme.php:499 +msgid "Contact Photos" +msgstr "Фотографии контакта" + +#: mod/fbrowser.php:125 msgid "Files" msgstr "Файлы" -#: ../../mod/nogroup.php:59 +#: mod/nogroup.php:63 msgid "Contacts who are not members of a group" msgstr "Контакты, которые не являются членами группы" -#: ../../mod/admin.php:57 +#: mod/admin.php:92 msgid "Theme settings updated." msgstr "Настройки темы обновлены." -#: ../../mod/admin.php:104 ../../mod/admin.php:619 +#: mod/admin.php:156 mod/admin.php:888 msgid "Site" msgstr "Сайт" -#: ../../mod/admin.php:105 ../../mod/admin.php:998 ../../mod/admin.php:1013 +#: mod/admin.php:157 mod/admin.php:832 mod/admin.php:1301 mod/admin.php:1316 msgid "Users" msgstr "Пользователи" -#: ../../mod/admin.php:106 ../../mod/admin.php:1102 ../../mod/admin.php:1155 -#: ../../mod/settings.php:57 +#: mod/admin.php:158 mod/admin.php:1416 mod/admin.php:1476 mod/settings.php:72 msgid "Plugins" msgstr "Плагины" -#: ../../mod/admin.php:107 ../../mod/admin.php:1323 ../../mod/admin.php:1357 +#: mod/admin.php:159 mod/admin.php:1674 mod/admin.php:1724 msgid "Themes" msgstr "Темы" -#: ../../mod/admin.php:108 +#: mod/admin.php:160 mod/settings.php:50 +msgid "Additional features" +msgstr "Дополнительные возможности" + +#: mod/admin.php:161 msgid "DB updates" msgstr "Обновление БД" -#: ../../mod/admin.php:123 ../../mod/admin.php:132 ../../mod/admin.php:1444 +#: mod/admin.php:162 mod/admin.php:385 +msgid "Inspect Queue" +msgstr "" + +#: mod/admin.php:163 mod/admin.php:354 +msgid "Federation Statistics" +msgstr "" + +#: mod/admin.php:177 mod/admin.php:188 mod/admin.php:1792 msgid "Logs" msgstr "Журналы" -#: ../../mod/admin.php:124 +#: mod/admin.php:178 mod/admin.php:1859 +msgid "View Logs" +msgstr "Просмотр логов" + +#: mod/admin.php:179 msgid "probe address" msgstr "" -#: ../../mod/admin.php:125 +#: mod/admin.php:180 msgid "check webfinger" msgstr "" -#: ../../mod/admin.php:130 ../../include/nav.php:184 +#: mod/admin.php:186 include/nav.php:194 msgid "Admin" msgstr "Администратор" -#: ../../mod/admin.php:131 +#: mod/admin.php:187 msgid "Plugin Features" msgstr "Возможности плагина" -#: ../../mod/admin.php:133 +#: mod/admin.php:189 msgid "diagnostics" -msgstr "" +msgstr "Диагностика" -#: ../../mod/admin.php:134 +#: mod/admin.php:190 msgid "User registrations waiting for confirmation" msgstr "Регистрации пользователей, ожидающие подтверждения" -#: ../../mod/admin.php:193 ../../mod/admin.php:952 -msgid "Normal Account" -msgstr "Обычный аккаунт" +#: mod/admin.php:347 +msgid "" +"This page offers you some numbers to the known part of the federated social " +"network your Friendica node is part of. These numbers are not complete but " +"only reflect the part of the network your node is aware of." +msgstr "" -#: ../../mod/admin.php:194 ../../mod/admin.php:953 -msgid "Soapbox Account" -msgstr "Аккаунт Витрина" +#: mod/admin.php:348 +msgid "" +"The Auto Discovered Contact Directory feature is not enabled, it " +"will improve the data displayed here." +msgstr "" -#: ../../mod/admin.php:195 ../../mod/admin.php:954 -msgid "Community/Celebrity Account" -msgstr "Аккаунт Сообщество / Знаменитость" - -#: ../../mod/admin.php:196 ../../mod/admin.php:955 -msgid "Automatic Friend Account" -msgstr "\"Автоматический друг\" Аккаунт" - -#: ../../mod/admin.php:197 -msgid "Blog Account" -msgstr "Аккаунт блога" - -#: ../../mod/admin.php:198 -msgid "Private Forum" -msgstr "Личный форум" - -#: ../../mod/admin.php:217 -msgid "Message queues" -msgstr "Очереди сообщений" - -#: ../../mod/admin.php:222 ../../mod/admin.php:618 ../../mod/admin.php:997 -#: ../../mod/admin.php:1101 ../../mod/admin.php:1154 ../../mod/admin.php:1322 -#: ../../mod/admin.php:1356 ../../mod/admin.php:1443 +#: mod/admin.php:353 mod/admin.php:384 mod/admin.php:441 mod/admin.php:887 +#: mod/admin.php:1300 mod/admin.php:1415 mod/admin.php:1475 mod/admin.php:1673 +#: mod/admin.php:1723 mod/admin.php:1791 mod/admin.php:1858 msgid "Administration" msgstr "Администрация" -#: ../../mod/admin.php:223 +#: mod/admin.php:360 +#, php-format +msgid "Currently this node is aware of %d nodes from the following platforms:" +msgstr "" + +#: mod/admin.php:387 +msgid "ID" +msgstr "" + +#: mod/admin.php:388 +msgid "Recipient Name" +msgstr "" + +#: mod/admin.php:389 +msgid "Recipient Profile" +msgstr "" + +#: mod/admin.php:391 +msgid "Created" +msgstr "" + +#: mod/admin.php:392 +msgid "Last Tried" +msgstr "" + +#: mod/admin.php:393 +msgid "" +"This page lists the content of the queue for outgoing postings. These are " +"postings the initial delivery failed for. They will be resend later and " +"eventually deleted if the delivery fails permanently." +msgstr "" + +#: mod/admin.php:412 mod/admin.php:1254 +msgid "Normal Account" +msgstr "Обычный аккаунт" + +#: mod/admin.php:413 mod/admin.php:1255 +msgid "Soapbox Account" +msgstr "Аккаунт Витрина" + +#: mod/admin.php:414 mod/admin.php:1256 +msgid "Community/Celebrity Account" +msgstr "Аккаунт Сообщество / Знаменитость" + +#: mod/admin.php:415 mod/admin.php:1257 +msgid "Automatic Friend Account" +msgstr "\"Автоматический друг\" Аккаунт" + +#: mod/admin.php:416 +msgid "Blog Account" +msgstr "Аккаунт блога" + +#: mod/admin.php:417 +msgid "Private Forum" +msgstr "Личный форум" + +#: mod/admin.php:436 +msgid "Message queues" +msgstr "Очереди сообщений" + +#: mod/admin.php:442 msgid "Summary" msgstr "Резюме" -#: ../../mod/admin.php:225 +#: mod/admin.php:444 msgid "Registered users" msgstr "Зарегистрированные пользователи" -#: ../../mod/admin.php:227 +#: mod/admin.php:446 msgid "Pending registrations" msgstr "Ожидающие регистрации" -#: ../../mod/admin.php:228 +#: mod/admin.php:447 msgid "Version" msgstr "Версия" -#: ../../mod/admin.php:232 +#: mod/admin.php:452 msgid "Active plugins" msgstr "Активные плагины" -#: ../../mod/admin.php:255 +#: mod/admin.php:475 msgid "Can not parse base url. Must have at least ://" -msgstr "Невозможно определить базовый URL. Он должен иметь следующий вид - ://" +msgstr "" +"Невозможно определить базовый URL. Он должен иметь следующий вид - " +"://" -#: ../../mod/admin.php:516 +#: mod/admin.php:760 +msgid "RINO2 needs mcrypt php extension to work." +msgstr "Для функционирования RINO2 необходим пакет php5-mcrypt" + +#: mod/admin.php:768 msgid "Site settings updated." msgstr "Установки сайта обновлены." -#: ../../mod/admin.php:545 ../../mod/settings.php:828 +#: mod/admin.php:796 mod/settings.php:912 msgid "No special theme for mobile devices" msgstr "Нет специальной темы для мобильных устройств" -#: ../../mod/admin.php:562 +#: mod/admin.php:815 msgid "No community page" msgstr "" -#: ../../mod/admin.php:563 +#: mod/admin.php:816 msgid "Public postings from users of this site" msgstr "" -#: ../../mod/admin.php:564 +#: mod/admin.php:817 msgid "Global community page" msgstr "" -#: ../../mod/admin.php:570 +#: mod/admin.php:823 msgid "At post arrival" msgstr "" -#: ../../mod/admin.php:571 ../../include/contact_selectors.php:56 +#: mod/admin.php:824 include/contact_selectors.php:56 msgid "Frequently" msgstr "Часто" -#: ../../mod/admin.php:572 ../../include/contact_selectors.php:57 +#: mod/admin.php:825 include/contact_selectors.php:57 msgid "Hourly" msgstr "Раз в час" -#: ../../mod/admin.php:573 ../../include/contact_selectors.php:58 +#: mod/admin.php:826 include/contact_selectors.php:58 msgid "Twice daily" msgstr "Два раза в день" -#: ../../mod/admin.php:574 ../../include/contact_selectors.php:59 +#: mod/admin.php:827 include/contact_selectors.php:59 msgid "Daily" msgstr "Ежедневно" -#: ../../mod/admin.php:579 +#: mod/admin.php:833 +msgid "Users, Global Contacts" +msgstr "" + +#: mod/admin.php:834 +msgid "Users, Global Contacts/fallback" +msgstr "" + +#: mod/admin.php:838 +msgid "One month" +msgstr "Один месяц" + +#: mod/admin.php:839 +msgid "Three months" +msgstr "Три месяца" + +#: mod/admin.php:840 +msgid "Half a year" +msgstr "Пол года" + +#: mod/admin.php:841 +msgid "One year" +msgstr "Один год" + +#: mod/admin.php:846 msgid "Multi user instance" msgstr "Многопользовательский вид" -#: ../../mod/admin.php:602 +#: mod/admin.php:869 msgid "Closed" msgstr "Закрыто" -#: ../../mod/admin.php:603 +#: mod/admin.php:870 msgid "Requires approval" msgstr "Требуется подтверждение" -#: ../../mod/admin.php:604 +#: mod/admin.php:871 msgid "Open" msgstr "Открыто" -#: ../../mod/admin.php:608 +#: mod/admin.php:875 msgid "No SSL policy, links will track page SSL state" msgstr "Нет режима SSL, состояние SSL не будет отслеживаться" -#: ../../mod/admin.php:609 +#: mod/admin.php:876 msgid "Force all links to use SSL" msgstr "Заставить все ссылки использовать SSL" -#: ../../mod/admin.php:610 +#: mod/admin.php:877 msgid "Self-signed certificate, use SSL for local links only (discouraged)" -msgstr "Само-подписанный сертификат, использовать SSL только локально (не рекомендуется)" +msgstr "" +"Само-подписанный сертификат, использовать SSL только локально (не " +"рекомендуется)" -#: ../../mod/admin.php:620 ../../mod/admin.php:1156 ../../mod/admin.php:1358 -#: ../../mod/admin.php:1445 ../../mod/settings.php:614 -#: ../../mod/settings.php:724 ../../mod/settings.php:798 -#: ../../mod/settings.php:880 ../../mod/settings.php:1113 +#: mod/admin.php:889 mod/admin.php:1477 mod/admin.php:1725 mod/admin.php:1793 +#: mod/admin.php:1942 mod/settings.php:659 mod/settings.php:769 +#: mod/settings.php:813 mod/settings.php:882 mod/settings.php:969 +#: mod/settings.php:1204 msgid "Save Settings" msgstr "Сохранить настройки" -#: ../../mod/admin.php:621 ../../mod/register.php:255 +#: mod/admin.php:890 mod/register.php:263 msgid "Registration" msgstr "Регистрация" -#: ../../mod/admin.php:622 +#: mod/admin.php:891 msgid "File upload" msgstr "Загрузка файлов" -#: ../../mod/admin.php:623 +#: mod/admin.php:892 msgid "Policies" msgstr "Политики" -#: ../../mod/admin.php:624 +#: mod/admin.php:893 msgid "Advanced" msgstr "Расширенный" -#: ../../mod/admin.php:625 +#: mod/admin.php:894 +msgid "Auto Discovered Contact Directory" +msgstr "" + +#: mod/admin.php:895 msgid "Performance" msgstr "Производительность" -#: ../../mod/admin.php:626 +#: mod/admin.php:896 msgid "" "Relocate - WARNING: advanced function. Could make this server unreachable." -msgstr "Переместить - ПРЕДУПРЕЖДЕНИЕ: расширеная функция. Может сделать этот сервер недоступным." +msgstr "" +"Переместить - ПРЕДУПРЕЖДЕНИЕ: расширеная функция. Может сделать этот сервер " +"недоступным." -#: ../../mod/admin.php:629 +#: mod/admin.php:899 msgid "Site name" msgstr "Название сайта" -#: ../../mod/admin.php:630 +#: mod/admin.php:900 msgid "Host name" -msgstr "" +msgstr "Имя хоста" -#: ../../mod/admin.php:631 +#: mod/admin.php:901 msgid "Sender Email" -msgstr "" +msgstr "Системный Email" -#: ../../mod/admin.php:632 +#: mod/admin.php:901 +msgid "" +"The email address your server shall use to send notification emails from." +msgstr "Адрес с которого будут приходить письма пользователям." + +#: mod/admin.php:902 msgid "Banner/Logo" msgstr "Баннер/Логотип" -#: ../../mod/admin.php:633 +#: mod/admin.php:903 msgid "Shortcut icon" msgstr "" -#: ../../mod/admin.php:634 +#: mod/admin.php:903 +msgid "Link to an icon that will be used for browsers." +msgstr "" + +#: mod/admin.php:904 msgid "Touch icon" msgstr "" -#: ../../mod/admin.php:635 +#: mod/admin.php:904 +msgid "Link to an icon that will be used for tablets and mobiles." +msgstr "" + +#: mod/admin.php:905 msgid "Additional Info" msgstr "Дополнительная информация" -#: ../../mod/admin.php:635 +#: mod/admin.php:905 +#, php-format msgid "" "For public servers: you can add additional information here that will be " -"listed at dir.friendica.com/siteinfo." -msgstr "Для публичных серверов: вы можете добавить дополнительную информацию, которая будет перечислена в dir.friendica.com/siteinfo." +"listed at %s/siteinfo." +msgstr "" -#: ../../mod/admin.php:636 +#: mod/admin.php:906 msgid "System language" msgstr "Системный язык" -#: ../../mod/admin.php:637 +#: mod/admin.php:907 msgid "System theme" msgstr "Системная тема" -#: ../../mod/admin.php:637 +#: mod/admin.php:907 msgid "" "Default system theme - may be over-ridden by user profiles - change theme settings" -msgstr "Тема системы по умолчанию - может быть переопределена пользователем - изменить настройки темы" +msgstr "" +"Тема системы по умолчанию - может быть переопределена пользователем - изменить настройки темы" -#: ../../mod/admin.php:638 +#: mod/admin.php:908 msgid "Mobile system theme" msgstr "Мобильная тема системы" -#: ../../mod/admin.php:638 +#: mod/admin.php:908 msgid "Theme for mobile devices" msgstr "Тема для мобильных устройств" -#: ../../mod/admin.php:639 +#: mod/admin.php:909 msgid "SSL link policy" msgstr "Политика SSL" -#: ../../mod/admin.php:639 +#: mod/admin.php:909 msgid "Determines whether generated links should be forced to use SSL" msgstr "Ссылки должны быть вынуждены использовать SSL" -#: ../../mod/admin.php:640 +#: mod/admin.php:910 msgid "Force SSL" -msgstr "" +msgstr "SSL принудительно" -#: ../../mod/admin.php:640 +#: mod/admin.php:910 msgid "" -"Force all Non-SSL requests to SSL - Attention: on some systems it could lead" -" to endless loops." +"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " +"to endless loops." msgstr "" -#: ../../mod/admin.php:641 +#: mod/admin.php:911 msgid "Old style 'Share'" msgstr "Старый стиль 'Share'" -#: ../../mod/admin.php:641 +#: mod/admin.php:911 msgid "Deactivates the bbcode element 'share' for repeating items." msgstr "Отключение BBCode элемента 'share' для повторяющихся элементов." -#: ../../mod/admin.php:642 +#: mod/admin.php:912 msgid "Hide help entry from navigation menu" msgstr "Скрыть пункт \"помощь\" в меню навигации" -#: ../../mod/admin.php:642 +#: mod/admin.php:912 msgid "" "Hides the menu entry for the Help pages from the navigation menu. You can " "still access it calling /help directly." -msgstr "Скрывает элемент меню для страницы справки из меню навигации. Вы все еще можете получить доступ к нему через вызов/помощь напрямую." +msgstr "" +"Скрывает элемент меню для страницы справки из меню навигации. Вы все еще " +"можете получить доступ к нему через вызов/помощь напрямую." -#: ../../mod/admin.php:643 +#: mod/admin.php:913 msgid "Single user instance" msgstr "Однопользовательский режим" -#: ../../mod/admin.php:643 +#: mod/admin.php:913 msgid "Make this instance multi-user or single-user for the named user" -msgstr "Сделать этот экземпляр многопользовательским, или однопользовательским для названного пользователя" +msgstr "" +"Сделать этот экземпляр многопользовательским, или однопользовательским для " +"названного пользователя" -#: ../../mod/admin.php:644 +#: mod/admin.php:914 msgid "Maximum image size" msgstr "Максимальный размер изображения" -#: ../../mod/admin.php:644 +#: mod/admin.php:914 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." -msgstr "Максимальный размер в байтах для загружаемых изображений. По умолчанию 0, что означает отсутствие ограничений." +msgstr "" +"Максимальный размер в байтах для загружаемых изображений. По умолчанию 0, " +"что означает отсутствие ограничений." -#: ../../mod/admin.php:645 +#: mod/admin.php:915 msgid "Maximum image length" msgstr "Максимальная длина картинки" -#: ../../mod/admin.php:645 +#: mod/admin.php:915 msgid "" "Maximum length in pixels of the longest side of uploaded images. Default is " "-1, which means no limits." -msgstr "Максимальная длина в пикселях для длинной стороны загруженных изображений. По умолчанию равно -1, что означает отсутствие ограничений." +msgstr "" +"Максимальная длина в пикселях для длинной стороны загруженных изображений. " +"По умолчанию равно -1, что означает отсутствие ограничений." -#: ../../mod/admin.php:646 +#: mod/admin.php:916 msgid "JPEG image quality" msgstr "Качество JPEG изображения" -#: ../../mod/admin.php:646 +#: mod/admin.php:916 msgid "" "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " "100, which is full quality." -msgstr "Загруженные изображения JPEG будут сохранены в этом качестве [0-100]. По умолчанию 100, что означает полное качество." +msgstr "" +"Загруженные изображения JPEG будут сохранены в этом качестве [0-100]. По " +"умолчанию 100, что означает полное качество." -#: ../../mod/admin.php:648 +#: mod/admin.php:918 msgid "Register policy" msgstr "Политика регистрация" -#: ../../mod/admin.php:649 +#: mod/admin.php:919 msgid "Maximum Daily Registrations" msgstr "Максимальное число регистраций в день" -#: ../../mod/admin.php:649 +#: mod/admin.php:919 msgid "" -"If registration is permitted above, this sets the maximum number of new user" -" registrations to accept per day. If register is set to closed, this " -"setting has no effect." -msgstr "Если регистрация разрешена, этот параметр устанавливает максимальное количество новых регистраций пользователей в день. Если регистрация закрыта, эта опция не имеет никакого эффекта." +"If registration is permitted above, this sets the maximum number of new user " +"registrations to accept per day. If register is set to closed, this setting " +"has no effect." +msgstr "" +"Если регистрация разрешена, этот параметр устанавливает максимальное " +"количество новых регистраций пользователей в день. Если регистрация закрыта, " +"эта опция не имеет никакого эффекта." -#: ../../mod/admin.php:650 +#: mod/admin.php:920 msgid "Register text" msgstr "Текст регистрации" -#: ../../mod/admin.php:650 +#: mod/admin.php:920 msgid "Will be displayed prominently on the registration page." msgstr "Будет находиться на видном месте на странице регистрации." -#: ../../mod/admin.php:651 +#: mod/admin.php:921 msgid "Accounts abandoned after x days" msgstr "Аккаунт считается после x дней не воспользованным" -#: ../../mod/admin.php:651 +#: mod/admin.php:921 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." -msgstr "Не будет тратить ресурсы для опроса сайтов для бесхозных контактов. Введите 0 для отключения лимита времени." +msgstr "" +"Не будет тратить ресурсы для опроса сайтов для бесхозных контактов. Введите " +"0 для отключения лимита времени." -#: ../../mod/admin.php:652 +#: mod/admin.php:922 msgid "Allowed friend domains" msgstr "Разрешенные домены друзей" -#: ../../mod/admin.php:652 +#: mod/admin.php:922 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" -msgstr "Разделенный запятыми список доменов, которые разрешены для установления связей. Групповые символы принимаются. Оставьте пустым для разрешения связи со всеми доменами." +msgstr "" +"Разделенный запятыми список доменов, которые разрешены для установления " +"связей. Групповые символы принимаются. Оставьте пустым для разрешения связи " +"со всеми доменами." -#: ../../mod/admin.php:653 +#: mod/admin.php:923 msgid "Allowed email domains" msgstr "Разрешенные почтовые домены" -#: ../../mod/admin.php:653 +#: mod/admin.php:923 msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" -msgstr "Разделенный запятыми список доменов, которые разрешены для установления связей. Групповые символы принимаются. Оставьте пустым для разрешения связи со всеми доменами." +msgstr "" +"Разделенный запятыми список доменов, которые разрешены для установления " +"связей. Групповые символы принимаются. Оставьте пустым для разрешения связи " +"со всеми доменами." -#: ../../mod/admin.php:654 +#: mod/admin.php:924 msgid "Block public" msgstr "Блокировать общественный доступ" -#: ../../mod/admin.php:654 +#: mod/admin.php:924 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." -msgstr "Отметьте, чтобы заблокировать публичный доступ ко всем иным публичным персональным страницам на этом сайте, если вы не вошли на сайт." +msgstr "" +"Отметьте, чтобы заблокировать публичный доступ ко всем иным публичным " +"персональным страницам на этом сайте, если вы не вошли на сайт." -#: ../../mod/admin.php:655 +#: mod/admin.php:925 msgid "Force publish" msgstr "Принудительная публикация" -#: ../../mod/admin.php:655 +#: mod/admin.php:925 msgid "" "Check to force all profiles on this site to be listed in the site directory." -msgstr "Отметьте, чтобы принудительно заставить все профили на этом сайте, быть перечислеными в каталоге сайта." +msgstr "" +"Отметьте, чтобы принудительно заставить все профили на этом сайте, быть " +"перечислеными в каталоге сайта." -#: ../../mod/admin.php:656 -msgid "Global directory update URL" -msgstr "URL обновления глобального каталога" +#: mod/admin.php:926 +msgid "Global directory URL" +msgstr "" -#: ../../mod/admin.php:656 +#: mod/admin.php:926 msgid "" -"URL to update the global directory. If this is not set, the global directory" -" is completely unavailable to the application." -msgstr "URL для обновления глобального каталога. Если он не установлен, глобальный каталог полностью недоступен для приложения." +"URL to the global directory. If this is not set, the global directory is " +"completely unavailable to the application." +msgstr "" -#: ../../mod/admin.php:657 +#: mod/admin.php:927 msgid "Allow threaded items" msgstr "Разрешить темы в обсуждении" -#: ../../mod/admin.php:657 +#: mod/admin.php:927 msgid "Allow infinite level threading for items on this site." msgstr "Разрешить бесконечный уровень для тем на этом сайте." -#: ../../mod/admin.php:658 +#: mod/admin.php:928 msgid "Private posts by default for new users" msgstr "Частные сообщения по умолчанию для новых пользователей" -#: ../../mod/admin.php:658 +#: mod/admin.php:928 msgid "" "Set default post permissions for all new members to the default privacy " "group rather than public." -msgstr "Установить права на создание постов по умолчанию для всех участников в дефолтной приватной группе, а не для публичных участников." +msgstr "" +"Установить права на создание постов по умолчанию для всех участников в " +"дефолтной приватной группе, а не для публичных участников." -#: ../../mod/admin.php:659 +#: mod/admin.php:929 msgid "Don't include post content in email notifications" msgstr "Не включать текст сообщения в email-оповещение." -#: ../../mod/admin.php:659 +#: mod/admin.php:929 msgid "" "Don't include the content of a post/comment/private message/etc. in the " "email notifications that are sent out from this site, as a privacy measure." -msgstr "Не включать содержание сообщения/комментария/личного сообщения и т.д.. в уведомления электронной почты, отправленных с сайта, в качестве меры конфиденциальности." +msgstr "" +"Не включать содержание сообщения/комментария/личного сообщения и т.д.. в " +"уведомления электронной почты, отправленных с сайта, в качестве меры " +"конфиденциальности." -#: ../../mod/admin.php:660 +#: mod/admin.php:930 msgid "Disallow public access to addons listed in the apps menu." msgstr "Запретить публичный доступ к аддонам, перечисленным в меню приложений." -#: ../../mod/admin.php:660 +#: mod/admin.php:930 msgid "" "Checking this box will restrict addons listed in the apps menu to members " "only." -msgstr "При установке этого флажка, будут ограничены аддоны, перечисленные в меню приложений, только для участников." +msgstr "" +"При установке этого флажка, будут ограничены аддоны, перечисленные в меню " +"приложений, только для участников." -#: ../../mod/admin.php:661 +#: mod/admin.php:931 msgid "Don't embed private images in posts" msgstr "Не вставлять личные картинки в постах" -#: ../../mod/admin.php:661 +#: mod/admin.php:931 msgid "" "Don't replace locally-hosted private photos in posts with an embedded copy " "of the image. This means that contacts who receive posts containing private " -"photos will have to authenticate and load each image, which may take a " -"while." -msgstr "Не заменяйте локально расположенные фотографии в постах на внедрённые копии изображений. Это означает, что контакты, которые получают сообщения, содержащие личные фотографии, будут вынуждены идентефицироваться и грузить каждое изображение, что может занять некоторое время." +"photos will have to authenticate and load each image, which may take a while." +msgstr "" +"Не заменяйте локально расположенные фотографии в постах на внедрённые копии " +"изображений. Это означает, что контакты, которые получают сообщения, " +"содержащие личные фотографии, будут вынуждены идентефицироваться и грузить " +"каждое изображение, что может занять некоторое время." -#: ../../mod/admin.php:662 +#: mod/admin.php:932 msgid "Allow Users to set remote_self" msgstr "Разрешить пользователям установить remote_self" -#: ../../mod/admin.php:662 +#: mod/admin.php:932 msgid "" "With checking this, every user is allowed to mark every contact as a " "remote_self in the repair contact dialog. Setting this flag on a contact " "causes mirroring every posting of that contact in the users stream." msgstr "" -#: ../../mod/admin.php:663 +#: mod/admin.php:933 msgid "Block multiple registrations" msgstr "Блокировать множественные регистрации" -#: ../../mod/admin.php:663 +#: mod/admin.php:933 msgid "Disallow users to register additional accounts for use as pages." -msgstr "Запретить пользователям регистрировать дополнительные аккаунты для использования в качестве страниц." +msgstr "" +"Запретить пользователям регистрировать дополнительные аккаунты для " +"использования в качестве страниц." -#: ../../mod/admin.php:664 +#: mod/admin.php:934 msgid "OpenID support" msgstr "Поддержка OpenID" -#: ../../mod/admin.php:664 +#: mod/admin.php:934 msgid "OpenID support for registration and logins." msgstr "OpenID поддержка для регистрации и входа в систему." -#: ../../mod/admin.php:665 +#: mod/admin.php:935 msgid "Fullname check" msgstr "Проверка полного имени" -#: ../../mod/admin.php:665 +#: mod/admin.php:935 msgid "" "Force users to register with a space between firstname and lastname in Full " "name, as an antispam measure" -msgstr "Принудить пользователей регистрироваться с пробелом между именем и фамилией в строке \"полное имя\". Антиспам мера." +msgstr "" +"Принудить пользователей регистрироваться с пробелом между именем и фамилией " +"в строке \"полное имя\". Антиспам мера." -#: ../../mod/admin.php:666 +#: mod/admin.php:936 msgid "UTF-8 Regular expressions" msgstr "UTF-8 регулярные выражения" -#: ../../mod/admin.php:666 +#: mod/admin.php:936 msgid "Use PHP UTF8 regular expressions" msgstr "Используйте PHP UTF-8 для регулярных выражений" -#: ../../mod/admin.php:667 +#: mod/admin.php:937 msgid "Community Page Style" msgstr "" -#: ../../mod/admin.php:667 +#: mod/admin.php:937 msgid "" "Type of community page to show. 'Global community' shows every public " "posting from an open distributed network that arrived on this server." msgstr "" -#: ../../mod/admin.php:668 +#: mod/admin.php:938 msgid "Posts per user on community page" msgstr "" -#: ../../mod/admin.php:668 +#: mod/admin.php:938 msgid "" "The maximum number of posts per user on the community page. (Not valid for " "'Global Community')" msgstr "" -#: ../../mod/admin.php:669 +#: mod/admin.php:939 msgid "Enable OStatus support" msgstr "Включить поддержку OStatus" -#: ../../mod/admin.php:669 +#: mod/admin.php:939 msgid "" "Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " "communications in OStatus are public, so privacy warnings will be " "occasionally displayed." msgstr "" -#: ../../mod/admin.php:670 +#: mod/admin.php:940 msgid "OStatus conversation completion interval" msgstr "" -#: ../../mod/admin.php:670 +#: mod/admin.php:940 msgid "" "How often shall the poller check for new entries in OStatus conversations? " "This can be a very ressource task." -msgstr "Как часто процессы должны проверять наличие новых записей в OStatus разговорах? Это может быть очень ресурсоёмкой задачей." +msgstr "" +"Как часто процессы должны проверять наличие новых записей в OStatus " +"разговорах? Это может быть очень ресурсоёмкой задачей." -#: ../../mod/admin.php:671 +#: mod/admin.php:941 +msgid "OStatus support can only be enabled if threading is enabled." +msgstr "" + +#: mod/admin.php:943 +msgid "" +"Diaspora support can't be enabled because Friendica was installed into a sub " +"directory." +msgstr "" + +#: mod/admin.php:944 msgid "Enable Diaspora support" msgstr "Включить поддержку Diaspora" -#: ../../mod/admin.php:671 +#: mod/admin.php:944 msgid "Provide built-in Diaspora network compatibility." msgstr "Обеспечить встроенную поддержку сети Diaspora." -#: ../../mod/admin.php:672 +#: mod/admin.php:945 msgid "Only allow Friendica contacts" msgstr "Позвольть только Friendica контакты" -#: ../../mod/admin.php:672 +#: mod/admin.php:945 msgid "" "All contacts must use Friendica protocols. All other built-in communication " "protocols disabled." -msgstr "Все контакты должны использовать только Friendica протоколы. Все другие встроенные коммуникационные протоколы отключены." +msgstr "" +"Все контакты должны использовать только Friendica протоколы. Все другие " +"встроенные коммуникационные протоколы отключены." -#: ../../mod/admin.php:673 +#: mod/admin.php:946 msgid "Verify SSL" msgstr "Проверка SSL" -#: ../../mod/admin.php:673 +#: mod/admin.php:946 msgid "" -"If you wish, you can turn on strict certificate checking. This will mean you" -" cannot connect (at all) to self-signed SSL sites." -msgstr "Если хотите, вы можете включить строгую проверку сертификатов. Это будет означать, что вы не сможете соединиться (вообще) с сайтами, имеющими само-подписанный SSL сертификат." +"If you wish, you can turn on strict certificate checking. This will mean you " +"cannot connect (at all) to self-signed SSL sites." +msgstr "" +"Если хотите, вы можете включить строгую проверку сертификатов. Это будет " +"означать, что вы не сможете соединиться (вообще) с сайтами, имеющими само-" +"подписанный SSL сертификат." -#: ../../mod/admin.php:674 +#: mod/admin.php:947 msgid "Proxy user" msgstr "Прокси пользователь" -#: ../../mod/admin.php:675 +#: mod/admin.php:948 msgid "Proxy URL" msgstr "Прокси URL" -#: ../../mod/admin.php:676 +#: mod/admin.php:949 msgid "Network timeout" msgstr "Тайм-аут сети" -#: ../../mod/admin.php:676 +#: mod/admin.php:949 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." -msgstr "Значение указывается в секундах. Установите 0 для снятия ограничений (не рекомендуется)." +msgstr "" +"Значение указывается в секундах. Установите 0 для снятия ограничений (не " +"рекомендуется)." -#: ../../mod/admin.php:677 +#: mod/admin.php:950 msgid "Delivery interval" msgstr "Интервал поставки" -#: ../../mod/admin.php:677 +#: mod/admin.php:950 msgid "" "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." -msgstr "Установите задержку выполнения фоновых процессов доставки до указанного количества секунд, чтобы уменьшить нагрузку на систему. Рекомендация: 4-5 для обычного shared хостинга, 2-3 для виртуальных частных серверов. 0-1 для мощных выделенных серверов." +msgstr "" +"Установите задержку выполнения фоновых процессов доставки до указанного " +"количества секунд, чтобы уменьшить нагрузку на систему. Рекомендация: 4-5 " +"для обычного shared хостинга, 2-3 для виртуальных частных серверов. 0-1 для " +"мощных выделенных серверов." -#: ../../mod/admin.php:678 +#: mod/admin.php:951 msgid "Poll interval" msgstr "Интервал опроса" -#: ../../mod/admin.php:678 +#: mod/admin.php:951 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." -msgstr "Установить задержку фоновых процессов опросов путем ограничения количества секунд, чтобы уменьшить нагрузку на систему. Если 0, используется интервал доставки." +msgstr "" +"Установить задержку фоновых процессов опросов путем ограничения количества " +"секунд, чтобы уменьшить нагрузку на систему. Если 0, используется интервал " +"доставки." -#: ../../mod/admin.php:679 +#: mod/admin.php:952 msgid "Maximum Load Average" msgstr "Средняя максимальная нагрузка" -#: ../../mod/admin.php:679 +#: mod/admin.php:952 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." -msgstr "Максимальная нагрузка на систему перед приостановкой процессов доставки и опросов - по умолчанию 50." +msgstr "" +"Максимальная нагрузка на систему перед приостановкой процессов доставки и " +"опросов - по умолчанию 50." -#: ../../mod/admin.php:681 +#: mod/admin.php:953 +msgid "Maximum Load Average (Frontend)" +msgstr "" + +#: mod/admin.php:953 +msgid "Maximum system load before the frontend quits service - default 50." +msgstr "" + +#: mod/admin.php:954 +msgid "Maximum table size for optimization" +msgstr "" + +#: mod/admin.php:954 +msgid "" +"Maximum table size (in MB) for the automatic optimization - default 100 MB. " +"Enter -1 to disable it." +msgstr "" + +#: mod/admin.php:955 +msgid "Minimum level of fragmentation" +msgstr "" + +#: mod/admin.php:955 +msgid "" +"Minimum fragmenation level to start the automatic optimization - default " +"value is 30%." +msgstr "" + +#: mod/admin.php:957 +msgid "Periodical check of global contacts" +msgstr "" + +#: mod/admin.php:957 +msgid "" +"If enabled, the global contacts are checked periodically for missing or " +"outdated data and the vitality of the contacts and servers." +msgstr "" + +#: mod/admin.php:958 +msgid "Days between requery" +msgstr "" + +#: mod/admin.php:958 +msgid "Number of days after which a server is requeried for his contacts." +msgstr "" + +#: mod/admin.php:959 +msgid "Discover contacts from other servers" +msgstr "" + +#: mod/admin.php:959 +msgid "" +"Periodically query other servers for contacts. You can choose between " +"'users': the users on the remote system, 'Global Contacts': active contacts " +"that are known on the system. The fallback is meant for Redmatrix servers " +"and older friendica servers, where global contacts weren't available. The " +"fallback increases the server load, so the recommened setting is 'Users, " +"Global Contacts'." +msgstr "" + +#: mod/admin.php:960 +msgid "Timeframe for fetching global contacts" +msgstr "" + +#: mod/admin.php:960 +msgid "" +"When the discovery is activated, this value defines the timeframe for the " +"activity of the global contacts that are fetched from other servers." +msgstr "" + +#: mod/admin.php:961 +msgid "Search the local directory" +msgstr "" + +#: mod/admin.php:961 +msgid "" +"Search the local directory instead of the global directory. When searching " +"locally, every search will be executed on the global directory in the " +"background. This improves the search results when the search is repeated." +msgstr "" + +#: mod/admin.php:963 +msgid "Publish server information" +msgstr "" + +#: mod/admin.php:963 +msgid "" +"If enabled, general server and usage data will be published. The data " +"contains the name and version of the server, number of users with public " +"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." +msgstr "" + +#: mod/admin.php:965 msgid "Use MySQL full text engine" msgstr "Использовать систему полнотексного поиска MySQL" -#: ../../mod/admin.php:681 +#: mod/admin.php:965 msgid "" "Activates the full text engine. Speeds up search - but can only search for " "four and more characters." -msgstr "Активизирует систему полнотексного поиска. Ускоряет поиск - но может искать только при указании четырех и более символов." +msgstr "" +"Активизирует систему полнотексного поиска. Ускоряет поиск - но может искать " +"только при указании четырех и более символов." -#: ../../mod/admin.php:682 +#: mod/admin.php:966 msgid "Suppress Language" msgstr "" -#: ../../mod/admin.php:682 +#: mod/admin.php:966 msgid "Suppress language information in meta information about a posting." msgstr "" -#: ../../mod/admin.php:683 +#: mod/admin.php:967 msgid "Suppress Tags" msgstr "" -#: ../../mod/admin.php:683 +#: mod/admin.php:967 msgid "Suppress showing a list of hashtags at the end of the posting." msgstr "" -#: ../../mod/admin.php:684 +#: mod/admin.php:968 msgid "Path to item cache" msgstr "Путь к элементам кэша" -#: ../../mod/admin.php:685 +#: mod/admin.php:968 +msgid "The item caches buffers generated bbcode and external images." +msgstr "" + +#: mod/admin.php:969 msgid "Cache duration in seconds" msgstr "Время жизни кэша в секундах" -#: ../../mod/admin.php:685 +#: mod/admin.php:969 msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One" -" day). To disable the item cache, set the value to -1." +"How long should the cache files be hold? Default value is 86400 seconds (One " +"day). To disable the item cache, set the value to -1." msgstr "" -#: ../../mod/admin.php:686 +#: mod/admin.php:970 msgid "Maximum numbers of comments per post" msgstr "" -#: ../../mod/admin.php:686 +#: mod/admin.php:970 msgid "How much comments should be shown for each post? Default value is 100." msgstr "" -#: ../../mod/admin.php:687 +#: mod/admin.php:971 msgid "Path for lock file" msgstr "Путь к файлу блокировки" -#: ../../mod/admin.php:688 +#: mod/admin.php:971 +msgid "" +"The lock file is used to avoid multiple pollers at one time. Only define a " +"folder here." +msgstr "" + +#: mod/admin.php:972 msgid "Temp path" msgstr "Временная папка" -#: ../../mod/admin.php:689 +#: mod/admin.php:972 +msgid "" +"If you have a restricted system where the webserver can't access the system " +"temp path, enter another path here." +msgstr "" + +#: mod/admin.php:973 msgid "Base path to installation" msgstr "Путь для установки" -#: ../../mod/admin.php:690 +#: mod/admin.php:973 +msgid "" +"If the system cannot detect the correct path to your installation, enter the " +"correct path here. This setting should only be set if you are using a " +"restricted system and symbolic links to your webroot." +msgstr "" + +#: mod/admin.php:974 msgid "Disable picture proxy" msgstr "" -#: ../../mod/admin.php:690 +#: mod/admin.php:974 msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on" -" systems with very low bandwith." +"The picture proxy increases performance and privacy. It shouldn't be used on " +"systems with very low bandwith." msgstr "" -#: ../../mod/admin.php:691 +#: mod/admin.php:975 msgid "Enable old style pager" msgstr "" -#: ../../mod/admin.php:691 +#: mod/admin.php:975 msgid "" -"The old style pager has page numbers but slows down massively the page " -"speed." +"The old style pager has page numbers but slows down massively the page speed." msgstr "" -#: ../../mod/admin.php:692 +#: mod/admin.php:976 msgid "Only search in tags" msgstr "" -#: ../../mod/admin.php:692 +#: mod/admin.php:976 msgid "On large systems the text search can slow down the system extremely." msgstr "" -#: ../../mod/admin.php:694 +#: mod/admin.php:978 msgid "New base url" msgstr "Новый базовый url" -#: ../../mod/admin.php:711 +#: mod/admin.php:978 +msgid "" +"Change base url for this server. Sends relocate message to all DFRN contacts " +"of all users." +msgstr "" + +#: mod/admin.php:980 +msgid "RINO Encryption" +msgstr "RINO шифрование" + +#: mod/admin.php:980 +msgid "Encryption layer between nodes." +msgstr "Слой шифрования между узлами." + +#: mod/admin.php:981 +msgid "Embedly API key" +msgstr "" + +#: mod/admin.php:981 +msgid "" +"Embedly is used to fetch additional data for " +"web pages. This is an optional parameter." +msgstr "" + +#: mod/admin.php:1010 msgid "Update has been marked successful" msgstr "Обновление было успешно отмечено" -#: ../../mod/admin.php:719 +#: mod/admin.php:1018 #, php-format msgid "Database structure update %s was successfully applied." msgstr "" -#: ../../mod/admin.php:722 +#: mod/admin.php:1021 #, php-format msgid "Executing of database structure update %s failed with error: %s" msgstr "" -#: ../../mod/admin.php:734 +#: mod/admin.php:1033 #, php-format msgid "Executing %s failed with error: %s" msgstr "" -#: ../../mod/admin.php:737 +#: mod/admin.php:1036 #, php-format msgid "Update %s was successfully applied." msgstr "Обновление %s успешно применено." -#: ../../mod/admin.php:741 +#: mod/admin.php:1040 #, php-format msgid "Update %s did not return a status. Unknown if it succeeded." -msgstr "Процесс обновления %s не вернул статус. Не известно, выполнено, или нет." +msgstr "" +"Процесс обновления %s не вернул статус. Не известно, выполнено, или нет." -#: ../../mod/admin.php:743 +#: mod/admin.php:1042 #, php-format msgid "There was no additional update function %s that needed to be called." msgstr "" -#: ../../mod/admin.php:762 +#: mod/admin.php:1061 msgid "No failed updates." msgstr "Неудавшихся обновлений нет." -#: ../../mod/admin.php:763 +#: mod/admin.php:1062 msgid "Check database structure" msgstr "" -#: ../../mod/admin.php:768 +#: mod/admin.php:1067 msgid "Failed Updates" msgstr "Неудавшиеся обновления" -#: ../../mod/admin.php:769 +#: mod/admin.php:1068 msgid "" "This does not include updates prior to 1139, which did not return a status." -msgstr "Эта цифра не включает обновления до 1139, которое не возвращает статус." +msgstr "" +"Эта цифра не включает обновления до 1139, которое не возвращает статус." -#: ../../mod/admin.php:770 +#: mod/admin.php:1069 msgid "Mark success (if update was manually applied)" msgstr "Отмечено успешно (если обновление было применено вручную)" -#: ../../mod/admin.php:771 +#: mod/admin.php:1070 msgid "Attempt to execute this update step automatically" msgstr "Попытаться выполнить этот шаг обновления автоматически" -#: ../../mod/admin.php:803 +#: mod/admin.php:1102 #, php-format msgid "" "\n" @@ -2624,7 +3111,7 @@ msgid "" "\t\t\t\tthe administrator of %2$s has set up an account for you." msgstr "" -#: ../../mod/admin.php:806 +#: mod/admin.php:1105 #, php-format msgid "" "\n" @@ -2634,310 +3121,354 @@ msgid "" "\t\t\tLogin Name:\t\t%2$s\n" "\t\t\tPassword:\t\t%3$s\n" "\n" -"\t\t\tYou may change your password from your account \"Settings\" page after logging\n" +"\t\t\tYou may change your password from your account \"Settings\" page after " +"logging\n" "\t\t\tin.\n" "\n" -"\t\t\tPlease take a few moments to review the other account settings on that page.\n" +"\t\t\tPlease take a few moments to review the other account settings on that " +"page.\n" "\n" -"\t\t\tYou may also wish to add some basic information to your default profile\n" +"\t\t\tYou may also wish to add some basic information to your default " +"profile\n" "\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" "\n" "\t\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n" -"\t\t\tperhaps what country you live in; if you do not wish to be more specific\n" +"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - " +"and\n" +"\t\t\tperhaps what country you live in; if you do not wish to be more " +"specific\n" "\t\t\tthan that.\n" "\n" -"\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n" +"\t\t\tWe fully respect your right to privacy, and none of these items are " +"necessary.\n" "\t\t\tIf you are new and do not know anybody here, they may help\n" "\t\t\tyou to make some new and interesting friends.\n" "\n" "\t\t\tThank you and welcome to %4$s." msgstr "" -#: ../../mod/admin.php:838 ../../include/user.php:413 +#: mod/admin.php:1137 include/user.php:423 #, php-format msgid "Registration details for %s" msgstr "Подробности регистрации для %s" -#: ../../mod/admin.php:850 +#: mod/admin.php:1149 #, php-format msgid "%s user blocked/unblocked" msgid_plural "%s users blocked/unblocked" msgstr[0] "%s пользователь заблокирован/разблокирован" msgstr[1] "%s пользователей заблокировано/разблокировано" msgstr[2] "%s пользователей заблокировано/разблокировано" +msgstr[3] "%s пользователей заблокировано/разблокировано" -#: ../../mod/admin.php:857 +#: mod/admin.php:1156 #, php-format msgid "%s user deleted" msgid_plural "%s users deleted" msgstr[0] "%s человек удален" msgstr[1] "%s чел. удалено" msgstr[2] "%s чел. удалено" +msgstr[3] "%s чел. удалено" -#: ../../mod/admin.php:896 +#: mod/admin.php:1203 #, php-format msgid "User '%s' deleted" msgstr "Пользователь '%s' удален" -#: ../../mod/admin.php:904 +#: mod/admin.php:1211 #, php-format msgid "User '%s' unblocked" msgstr "Пользователь '%s' разблокирован" -#: ../../mod/admin.php:904 +#: mod/admin.php:1211 #, php-format msgid "User '%s' blocked" msgstr "Пользователь '%s' блокирован" -#: ../../mod/admin.php:999 +#: mod/admin.php:1302 msgid "Add User" msgstr "Добавить пользователя" -#: ../../mod/admin.php:1000 +#: mod/admin.php:1303 msgid "select all" msgstr "выбрать все" -#: ../../mod/admin.php:1001 +#: mod/admin.php:1304 msgid "User registrations waiting for confirm" msgstr "Регистрации пользователей, ожидающие подтверждения" -#: ../../mod/admin.php:1002 +#: mod/admin.php:1305 msgid "User waiting for permanent deletion" msgstr "Пользователь ожидает окончательного удаления" -#: ../../mod/admin.php:1003 +#: mod/admin.php:1306 msgid "Request date" msgstr "Запрос даты" -#: ../../mod/admin.php:1003 ../../mod/admin.php:1015 ../../mod/admin.php:1016 -#: ../../mod/admin.php:1031 ../../include/contact_selectors.php:79 -#: ../../include/contact_selectors.php:86 +#: mod/admin.php:1306 mod/admin.php:1318 mod/admin.php:1319 mod/admin.php:1334 +#: include/contact_selectors.php:79 include/contact_selectors.php:86 msgid "Email" msgstr "Эл. почта" -#: ../../mod/admin.php:1004 +#: mod/admin.php:1307 msgid "No registrations." msgstr "Нет регистраций." -#: ../../mod/admin.php:1006 +#: mod/admin.php:1309 msgid "Deny" msgstr "Отклонить" -#: ../../mod/admin.php:1010 +#: mod/admin.php:1313 msgid "Site admin" msgstr "Админ сайта" -#: ../../mod/admin.php:1011 +#: mod/admin.php:1314 msgid "Account expired" msgstr "Аккаунт просрочен" -#: ../../mod/admin.php:1014 +#: mod/admin.php:1317 msgid "New User" msgstr "Новый пользователь" -#: ../../mod/admin.php:1015 ../../mod/admin.php:1016 +#: mod/admin.php:1318 mod/admin.php:1319 msgid "Register date" msgstr "Дата регистрации" -#: ../../mod/admin.php:1015 ../../mod/admin.php:1016 +#: mod/admin.php:1318 mod/admin.php:1319 msgid "Last login" msgstr "Последний вход" -#: ../../mod/admin.php:1015 ../../mod/admin.php:1016 +#: mod/admin.php:1318 mod/admin.php:1319 msgid "Last item" msgstr "Последний пункт" -#: ../../mod/admin.php:1015 +#: mod/admin.php:1318 msgid "Deleted since" msgstr "Удалён с" -#: ../../mod/admin.php:1016 ../../mod/settings.php:36 +#: mod/admin.php:1319 mod/settings.php:41 msgid "Account" msgstr "Аккаунт" -#: ../../mod/admin.php:1018 +#: mod/admin.php:1321 msgid "" "Selected users will be deleted!\\n\\nEverything these users had posted on " "this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "Выбранные пользователи будут удалены!\\n\\nВсе, что эти пользователи написали на этом сайте, будет удалено!\\n\\nВы уверены в вашем действии?" +msgstr "" +"Выбранные пользователи будут удалены!\\n\\nВсе, что эти пользователи " +"написали на этом сайте, будет удалено!\\n\\nВы уверены в вашем действии?" -#: ../../mod/admin.php:1019 +#: mod/admin.php:1322 msgid "" "The user {0} will be deleted!\\n\\nEverything this user has posted on this " "site will be permanently deleted!\\n\\nAre you sure?" -msgstr "Пользователь {0} будет удален!\\n\\nВсе, что этот пользователь написал на этом сайте, будет удалено!\\n\\nВы уверены в вашем действии?" +msgstr "" +"Пользователь {0} будет удален!\\n\\nВсе, что этот пользователь написал на " +"этом сайте, будет удалено!\\n\\nВы уверены в вашем действии?" -#: ../../mod/admin.php:1029 +#: mod/admin.php:1332 msgid "Name of the new user." msgstr "Имя нового пользователя." -#: ../../mod/admin.php:1030 +#: mod/admin.php:1333 msgid "Nickname" msgstr "Ник" -#: ../../mod/admin.php:1030 +#: mod/admin.php:1333 msgid "Nickname of the new user." msgstr "Ник нового пользователя." -#: ../../mod/admin.php:1031 +#: mod/admin.php:1334 msgid "Email address of the new user." msgstr "Email адрес нового пользователя." -#: ../../mod/admin.php:1064 +#: mod/admin.php:1377 #, php-format msgid "Plugin %s disabled." msgstr "Плагин %s отключен." -#: ../../mod/admin.php:1068 +#: mod/admin.php:1381 #, php-format msgid "Plugin %s enabled." msgstr "Плагин %s включен." -#: ../../mod/admin.php:1078 ../../mod/admin.php:1294 +#: mod/admin.php:1392 mod/admin.php:1628 msgid "Disable" msgstr "Отключить" -#: ../../mod/admin.php:1080 ../../mod/admin.php:1296 +#: mod/admin.php:1394 mod/admin.php:1630 msgid "Enable" msgstr "Включить" -#: ../../mod/admin.php:1103 ../../mod/admin.php:1324 +#: mod/admin.php:1417 mod/admin.php:1675 msgid "Toggle" msgstr "Переключить" -#: ../../mod/admin.php:1111 ../../mod/admin.php:1334 +#: mod/admin.php:1425 mod/admin.php:1684 msgid "Author: " msgstr "Автор:" -#: ../../mod/admin.php:1112 ../../mod/admin.php:1335 +#: mod/admin.php:1426 mod/admin.php:1685 msgid "Maintainer: " msgstr "Программа обслуживания: " -#: ../../mod/admin.php:1254 +#: mod/admin.php:1478 +msgid "Reload active plugins" +msgstr "" + +#: mod/admin.php:1483 +#, php-format +msgid "" +"There are currently no plugins available on your node. You can find the " +"official plugin repository at %1$s and might find other interesting plugins " +"in the open plugin registry at %2$s" +msgstr "" + +#: mod/admin.php:1588 msgid "No themes found." msgstr "Темы не найдены." -#: ../../mod/admin.php:1316 +#: mod/admin.php:1666 msgid "Screenshot" msgstr "Скриншот" -#: ../../mod/admin.php:1362 +#: mod/admin.php:1726 +msgid "Reload active themes" +msgstr "" + +#: mod/admin.php:1731 +#, php-format +msgid "No themes found on the system. They should be paced in %1$s" +msgstr "" + +#: mod/admin.php:1732 msgid "[Experimental]" msgstr "[экспериментально]" -#: ../../mod/admin.php:1363 +#: mod/admin.php:1733 msgid "[Unsupported]" msgstr "[Неподдерживаемое]" -#: ../../mod/admin.php:1390 +#: mod/admin.php:1757 msgid "Log settings updated." msgstr "Настройки журнала обновлены." -#: ../../mod/admin.php:1446 +#: mod/admin.php:1794 msgid "Clear" msgstr "Очистить" -#: ../../mod/admin.php:1452 +#: mod/admin.php:1799 msgid "Enable Debugging" msgstr "Включить отладку" -#: ../../mod/admin.php:1453 +#: mod/admin.php:1800 msgid "Log file" msgstr "Лог-файл" -#: ../../mod/admin.php:1453 +#: mod/admin.php:1800 msgid "" "Must be writable by web server. Relative to your Friendica top-level " "directory." -msgstr "Должно быть доступно для записи в веб-сервере. Относительно вашего Friendica каталога верхнего уровня." +msgstr "" +"Должно быть доступно для записи в веб-сервере. Относительно вашего Friendica " +"каталога верхнего уровня." -#: ../../mod/admin.php:1454 +#: mod/admin.php:1801 msgid "Log level" msgstr "Уровень лога" -#: ../../mod/admin.php:1504 -msgid "Close" -msgstr "Закрыть" +#: mod/admin.php:1804 +msgid "PHP logging" +msgstr "PHP логирование" -#: ../../mod/admin.php:1510 -msgid "FTP Host" -msgstr "FTP хост" +#: mod/admin.php:1805 +msgid "" +"To enable logging of PHP errors and warnings you can add the following to " +"the .htconfig.php file of your installation. The filename set in the " +"'error_log' line is relative to the friendica top-level directory and must " +"be writeable by the web server. The option '1' for 'log_errors' and " +"'display_errors' is to enable these options, set to '0' to disable them." +msgstr "" -#: ../../mod/admin.php:1511 -msgid "FTP Path" -msgstr "Путь FTP" +#: mod/admin.php:1931 mod/admin.php:1932 mod/settings.php:759 +msgid "Off" +msgstr "Выкл." -#: ../../mod/admin.php:1512 -msgid "FTP User" -msgstr "FTP пользователь" +#: mod/admin.php:1931 mod/admin.php:1932 mod/settings.php:759 +msgid "On" +msgstr "Вкл." -#: ../../mod/admin.php:1513 -msgid "FTP Password" -msgstr "FTP пароль" +#: mod/admin.php:1932 +#, php-format +msgid "Lock feature %s" +msgstr "" -#: ../../mod/network.php:142 -msgid "Search Results For:" -msgstr "Результаты поиска для:" +#: mod/admin.php:1940 +msgid "Manage Additional Features" +msgstr "" -#: ../../mod/network.php:185 ../../mod/search.php:21 +#: mod/network.php:146 +#, php-format +msgid "Search Results For: %s" +msgstr "" + +#: mod/network.php:191 mod/search.php:25 msgid "Remove term" msgstr "Удалить элемент" -#: ../../mod/network.php:194 ../../mod/search.php:30 -#: ../../include/features.php:42 +#: mod/network.php:200 mod/search.php:34 include/features.php:84 msgid "Saved Searches" msgstr "запомненные поиски" -#: ../../mod/network.php:195 ../../include/group.php:275 +#: mod/network.php:201 include/group.php:293 msgid "add" msgstr "добавить" -#: ../../mod/network.php:356 +#: mod/network.php:365 msgid "Commented Order" -msgstr "Прокомментированный запрос" +msgstr "Последние комментарии" -#: ../../mod/network.php:359 +#: mod/network.php:368 msgid "Sort by Comment Date" msgstr "Сортировать по дате комментария" -#: ../../mod/network.php:362 +#: mod/network.php:373 msgid "Posted Order" -msgstr "Отправленный запрос" +msgstr "Лента записей" -#: ../../mod/network.php:365 +#: mod/network.php:376 msgid "Sort by Post Date" msgstr "Сортировать по дате отправки" -#: ../../mod/network.php:374 +#: mod/network.php:387 msgid "Posts that mention or involve you" msgstr "" -#: ../../mod/network.php:380 +#: mod/network.php:395 msgid "New" msgstr "Новый" -#: ../../mod/network.php:383 +#: mod/network.php:398 msgid "Activity Stream - by date" msgstr "Лента активности - по дате" -#: ../../mod/network.php:389 +#: mod/network.php:406 msgid "Shared Links" msgstr "Ссылки, которыми поделились" -#: ../../mod/network.php:392 +#: mod/network.php:409 msgid "Interesting Links" msgstr "Интересные ссылки" -#: ../../mod/network.php:398 +#: mod/network.php:417 msgid "Starred" msgstr "Помеченный" -#: ../../mod/network.php:401 +#: mod/network.php:420 msgid "Favourite Posts" msgstr "Избранные посты" -#: ../../mod/network.php:463 +#: mod/network.php:479 #, php-format msgid "Warning: This group contains %s member from an insecure network." msgid_plural "" @@ -2945,4152 +3476,4632 @@ msgid_plural "" msgstr[0] "Внимание: Эта группа содержит %s участника с незащищенной сети." msgstr[1] "Внимание: Эта группа содержит %s участников с незащищенной сети." msgstr[2] "Внимание: Эта группа содержит %s участников с незащищенной сети." +msgstr[3] "Внимание: Эта группа содержит %s участников с незащищенной сети." -#: ../../mod/network.php:466 +#: mod/network.php:482 msgid "Private messages to this group are at risk of public disclosure." msgstr "Личные сообщения к этой группе находятся под угрозой обнародования." -#: ../../mod/network.php:520 ../../mod/content.php:119 +#: mod/network.php:549 mod/content.php:119 msgid "No such group" msgstr "Нет такой группы" -#: ../../mod/network.php:537 ../../mod/content.php:130 -msgid "Group is empty" -msgstr "Группа пуста" +#: mod/network.php:580 mod/content.php:135 +#, php-format +msgid "Group: %s" +msgstr "Группа: %s" -#: ../../mod/network.php:544 ../../mod/content.php:134 -msgid "Group: " -msgstr "Группа: " - -#: ../../mod/network.php:554 -msgid "Contact: " -msgstr "Контакт: " - -#: ../../mod/network.php:556 +#: mod/network.php:608 msgid "Private messages to this person are at risk of public disclosure." msgstr "Личные сообщения этому человеку находятся под угрозой обнародования." -#: ../../mod/network.php:561 +#: mod/network.php:613 msgid "Invalid contact." msgstr "Недопустимый контакт." -#: ../../mod/allfriends.php:34 -#, php-format -msgid "Friends of %s" -msgstr "%s Друзья" - -#: ../../mod/allfriends.php:40 +#: mod/allfriends.php:43 msgid "No friends to display." msgstr "Нет друзей." -#: ../../mod/events.php:66 +#: mod/events.php:71 mod/events.php:73 +msgid "Event can not end before it has started." +msgstr "" + +#: mod/events.php:80 mod/events.php:82 msgid "Event title and start time are required." msgstr "Название мероприятия и время начала обязательны для заполнения." -#: ../../mod/events.php:291 +#: mod/events.php:201 +msgid "Sun" +msgstr "Вс" + +#: mod/events.php:202 +msgid "Mon" +msgstr "Пн" + +#: mod/events.php:203 +msgid "Tue" +msgstr "Вт" + +#: mod/events.php:204 +msgid "Wed" +msgstr "Ср" + +#: mod/events.php:205 +msgid "Thu" +msgstr "Чт" + +#: mod/events.php:206 +msgid "Fri" +msgstr "Пт" + +#: mod/events.php:207 +msgid "Sat" +msgstr "Сб" + +#: mod/events.php:208 mod/settings.php:948 include/text.php:1274 +msgid "Sunday" +msgstr "Воскресенье" + +#: mod/events.php:209 mod/settings.php:948 include/text.php:1274 +msgid "Monday" +msgstr "Понедельник" + +#: mod/events.php:210 include/text.php:1274 +msgid "Tuesday" +msgstr "Вторник" + +#: mod/events.php:211 include/text.php:1274 +msgid "Wednesday" +msgstr "Среда" + +#: mod/events.php:212 include/text.php:1274 +msgid "Thursday" +msgstr "Четверг" + +#: mod/events.php:213 include/text.php:1274 +msgid "Friday" +msgstr "Пятница" + +#: mod/events.php:214 include/text.php:1274 +msgid "Saturday" +msgstr "Суббота" + +#: mod/events.php:215 +msgid "Jan" +msgstr "Янв" + +#: mod/events.php:216 +msgid "Feb" +msgstr "Фев" + +#: mod/events.php:217 +msgid "Mar" +msgstr "Мрт" + +#: mod/events.php:218 +msgid "Apr" +msgstr "Апр" + +#: mod/events.php:219 mod/events.php:231 include/text.php:1278 +msgid "May" +msgstr "Май" + +#: mod/events.php:220 +msgid "Jun" +msgstr "Июн" + +#: mod/events.php:221 +msgid "Jul" +msgstr "Июл" + +#: mod/events.php:222 +msgid "Aug" +msgstr "Авг" + +#: mod/events.php:223 +msgid "Sept" +msgstr "Сен" + +#: mod/events.php:224 +msgid "Oct" +msgstr "Окт" + +#: mod/events.php:225 +msgid "Nov" +msgstr "Нбр" + +#: mod/events.php:226 +msgid "Dec" +msgstr "Дек" + +#: mod/events.php:227 include/text.php:1278 +msgid "January" +msgstr "Январь" + +#: mod/events.php:228 include/text.php:1278 +msgid "February" +msgstr "Февраль" + +#: mod/events.php:229 include/text.php:1278 +msgid "March" +msgstr "Март" + +#: mod/events.php:230 include/text.php:1278 +msgid "April" +msgstr "Апрель" + +#: mod/events.php:232 include/text.php:1278 +msgid "June" +msgstr "Июнь" + +#: mod/events.php:233 include/text.php:1278 +msgid "July" +msgstr "Июль" + +#: mod/events.php:234 include/text.php:1278 +msgid "August" +msgstr "Август" + +#: mod/events.php:235 include/text.php:1278 +msgid "September" +msgstr "Сентябрь" + +#: mod/events.php:236 include/text.php:1278 +msgid "October" +msgstr "Октябрь" + +#: mod/events.php:237 include/text.php:1278 +msgid "November" +msgstr "Ноябрь" + +#: mod/events.php:238 include/text.php:1278 +msgid "December" +msgstr "Декабрь" + +#: mod/events.php:239 +msgid "today" +msgstr "сегодня" + +#: mod/events.php:240 include/datetime.php:288 +msgid "month" +msgstr "мес." + +#: mod/events.php:241 include/datetime.php:289 +msgid "week" +msgstr "неделя" + +#: mod/events.php:242 include/datetime.php:290 +msgid "day" +msgstr "день" + +#: mod/events.php:377 msgid "l, F j" msgstr "l, j F" -#: ../../mod/events.php:313 +#: mod/events.php:399 msgid "Edit event" msgstr "Редактировать мероприятие" -#: ../../mod/events.php:335 ../../include/text.php:1647 -#: ../../include/text.php:1657 +#: mod/events.php:421 include/text.php:1728 include/text.php:1735 msgid "link to source" -msgstr "ссылка на источник" +msgstr "ссылка на сообщение" -#: ../../mod/events.php:370 ../../boot.php:2143 ../../include/nav.php:80 -#: ../../view/theme/diabook/theme.php:127 +#: mod/events.php:456 include/identity.php:722 include/nav.php:79 +#: include/nav.php:140 view/theme/diabook/theme.php:127 msgid "Events" msgstr "Мероприятия" -#: ../../mod/events.php:371 +#: mod/events.php:457 msgid "Create New Event" msgstr "Создать новое мероприятие" -#: ../../mod/events.php:372 +#: mod/events.php:458 msgid "Previous" msgstr "Назад" -#: ../../mod/events.php:373 ../../mod/install.php:207 +#: mod/events.php:459 mod/install.php:220 msgid "Next" msgstr "Далее" -#: ../../mod/events.php:446 -msgid "hour:minute" -msgstr "час:минута" - -#: ../../mod/events.php:456 +#: mod/events.php:554 msgid "Event details" msgstr "Сведения о мероприятии" -#: ../../mod/events.php:457 -#, php-format -msgid "Format is %s %s. Starting date and Title are required." -msgstr "Формат %s %s. Необхлдима дата старта и заголовок." +#: mod/events.php:555 +msgid "Starting date and Title are required." +msgstr "" -#: ../../mod/events.php:459 +#: mod/events.php:556 msgid "Event Starts:" msgstr "Начало мероприятия:" -#: ../../mod/events.php:459 ../../mod/events.php:473 +#: mod/events.php:556 mod/events.php:568 msgid "Required" msgstr "Требуется" -#: ../../mod/events.php:462 +#: mod/events.php:558 msgid "Finish date/time is not known or not relevant" msgstr "Дата/время окончания не известны, или не указаны" -#: ../../mod/events.php:464 +#: mod/events.php:560 msgid "Event Finishes:" msgstr "Окончание мероприятия:" -#: ../../mod/events.php:467 +#: mod/events.php:562 msgid "Adjust for viewer timezone" msgstr "Настройка часового пояса" -#: ../../mod/events.php:469 +#: mod/events.php:564 msgid "Description:" msgstr "Описание:" -#: ../../mod/events.php:471 ../../mod/directory.php:136 ../../boot.php:1648 -#: ../../include/bb2diaspora.php:170 ../../include/event.php:40 -msgid "Location:" -msgstr "Откуда:" - -#: ../../mod/events.php:473 +#: mod/events.php:568 msgid "Title:" msgstr "Титул:" -#: ../../mod/events.php:475 +#: mod/events.php:570 msgid "Share this event" msgstr "Поделитесь этим мероприятием" -#: ../../mod/content.php:437 ../../mod/content.php:740 -#: ../../mod/photos.php:1653 ../../object/Item.php:129 -#: ../../include/conversation.php:613 +#: mod/events.php:572 mod/content.php:721 mod/editpost.php:145 +#: mod/photos.php:1631 mod/photos.php:1679 mod/photos.php:1767 +#: object/Item.php:719 include/conversation.php:1216 +msgid "Preview" +msgstr "Предварительный просмотр" + +#: mod/credits.php:16 +msgid "Credits" +msgstr "" + +#: mod/credits.php:17 +msgid "" +"Friendica is a community project, that would not be possible without the " +"help of many people. Here is a list of those who have contributed to the " +"code or the translation of Friendica. Thank you all!" +msgstr "" + +#: mod/content.php:439 mod/content.php:742 mod/photos.php:1722 +#: object/Item.php:133 include/conversation.php:634 msgid "Select" msgstr "Выберите" -#: ../../mod/content.php:471 ../../mod/content.php:852 -#: ../../mod/content.php:853 ../../object/Item.php:326 -#: ../../object/Item.php:327 ../../include/conversation.php:654 +#: mod/content.php:473 mod/content.php:854 mod/content.php:855 +#: object/Item.php:357 object/Item.php:358 include/conversation.php:675 #, php-format msgid "View %s's profile @ %s" msgstr "Просмотреть профиль %s [@ %s]" -#: ../../mod/content.php:481 ../../mod/content.php:864 -#: ../../object/Item.php:340 ../../include/conversation.php:674 +#: mod/content.php:483 mod/content.php:866 object/Item.php:371 +#: include/conversation.php:695 #, php-format msgid "%s from %s" msgstr "%s с %s" -#: ../../mod/content.php:497 ../../include/conversation.php:690 +#: mod/content.php:499 include/conversation.php:711 msgid "View in context" msgstr "Смотреть в контексте" -#: ../../mod/content.php:603 ../../object/Item.php:387 +#: mod/content.php:605 object/Item.php:419 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d комментарий" msgstr[1] "%d комментариев" msgstr[2] "%d комментариев" +msgstr[3] "%d комментариев" -#: ../../mod/content.php:605 ../../object/Item.php:389 -#: ../../object/Item.php:402 ../../include/text.php:1972 +#: mod/content.php:607 object/Item.php:421 object/Item.php:434 +#: include/text.php:2004 msgid "comment" msgid_plural "comments" msgstr[0] "" msgstr[1] "" msgstr[2] "комментарий" +msgstr[3] "комментарий" -#: ../../mod/content.php:606 ../../boot.php:751 ../../object/Item.php:390 -#: ../../include/contact_widgets.php:205 +#: mod/content.php:608 boot.php:870 object/Item.php:422 +#: include/contact_widgets.php:242 include/forums.php:110 +#: include/items.php:5207 view/theme/vier/theme.php:264 msgid "show more" msgstr "показать больше" -#: ../../mod/content.php:620 ../../mod/photos.php:1359 -#: ../../object/Item.php:116 +#: mod/content.php:622 mod/photos.php:1418 object/Item.php:117 msgid "Private Message" msgstr "Личное сообщение" -#: ../../mod/content.php:684 ../../mod/photos.php:1542 -#: ../../object/Item.php:231 +#: mod/content.php:686 mod/photos.php:1607 object/Item.php:253 msgid "I like this (toggle)" msgstr "Нравится" -#: ../../mod/content.php:684 ../../object/Item.php:231 +#: mod/content.php:686 object/Item.php:253 msgid "like" msgstr "нравится" -#: ../../mod/content.php:685 ../../mod/photos.php:1543 -#: ../../object/Item.php:232 +#: mod/content.php:687 mod/photos.php:1608 object/Item.php:254 msgid "I don't like this (toggle)" msgstr "Не нравится" -#: ../../mod/content.php:685 ../../object/Item.php:232 +#: mod/content.php:687 object/Item.php:254 msgid "dislike" msgstr "не нравитса" -#: ../../mod/content.php:687 ../../object/Item.php:234 +#: mod/content.php:689 object/Item.php:256 msgid "Share this" msgstr "Поделитесь этим" -#: ../../mod/content.php:687 ../../object/Item.php:234 +#: mod/content.php:689 object/Item.php:256 msgid "share" msgstr "делиться" -#: ../../mod/content.php:707 ../../mod/photos.php:1562 -#: ../../mod/photos.php:1606 ../../mod/photos.php:1694 -#: ../../object/Item.php:675 +#: mod/content.php:709 mod/photos.php:1627 mod/photos.php:1675 +#: mod/photos.php:1763 object/Item.php:707 msgid "This is you" msgstr "Это вы" -#: ../../mod/content.php:709 ../../mod/photos.php:1564 -#: ../../mod/photos.php:1608 ../../mod/photos.php:1696 ../../boot.php:750 -#: ../../object/Item.php:361 ../../object/Item.php:677 +#: mod/content.php:711 mod/photos.php:1629 mod/photos.php:1677 +#: mod/photos.php:1765 boot.php:869 object/Item.php:393 object/Item.php:709 msgid "Comment" -msgstr "Комментарий" +msgstr "Оставить комментарий" -#: ../../mod/content.php:711 ../../object/Item.php:679 +#: mod/content.php:713 object/Item.php:711 msgid "Bold" msgstr "Жирный" -#: ../../mod/content.php:712 ../../object/Item.php:680 +#: mod/content.php:714 object/Item.php:712 msgid "Italic" msgstr "Kурсивный" -#: ../../mod/content.php:713 ../../object/Item.php:681 +#: mod/content.php:715 object/Item.php:713 msgid "Underline" msgstr "Подчеркнутый" -#: ../../mod/content.php:714 ../../object/Item.php:682 +#: mod/content.php:716 object/Item.php:714 msgid "Quote" msgstr "Цитата" -#: ../../mod/content.php:715 ../../object/Item.php:683 +#: mod/content.php:717 object/Item.php:715 msgid "Code" msgstr "Код" -#: ../../mod/content.php:716 ../../object/Item.php:684 +#: mod/content.php:718 object/Item.php:716 msgid "Image" msgstr "Изображение / Фото" -#: ../../mod/content.php:717 ../../object/Item.php:685 +#: mod/content.php:719 object/Item.php:717 msgid "Link" msgstr "Ссылка" -#: ../../mod/content.php:718 ../../object/Item.php:686 +#: mod/content.php:720 object/Item.php:718 msgid "Video" msgstr "Видео" -#: ../../mod/content.php:719 ../../mod/editpost.php:145 -#: ../../mod/photos.php:1566 ../../mod/photos.php:1610 -#: ../../mod/photos.php:1698 ../../object/Item.php:687 -#: ../../include/conversation.php:1126 -msgid "Preview" -msgstr "предварительный просмотр" - -#: ../../mod/content.php:728 ../../mod/settings.php:676 -#: ../../object/Item.php:120 +#: mod/content.php:730 mod/settings.php:721 object/Item.php:122 +#: object/Item.php:124 msgid "Edit" msgstr "Редактировать" -#: ../../mod/content.php:753 ../../object/Item.php:195 +#: mod/content.php:755 object/Item.php:217 msgid "add star" msgstr "пометить" -#: ../../mod/content.php:754 ../../object/Item.php:196 +#: mod/content.php:756 object/Item.php:218 msgid "remove star" msgstr "убрать метку" -#: ../../mod/content.php:755 ../../object/Item.php:197 +#: mod/content.php:757 object/Item.php:219 msgid "toggle star status" msgstr "переключить статус" -#: ../../mod/content.php:758 ../../object/Item.php:200 +#: mod/content.php:760 object/Item.php:222 msgid "starred" msgstr "помечено" -#: ../../mod/content.php:759 ../../object/Item.php:220 +#: mod/content.php:761 object/Item.php:242 msgid "add tag" msgstr "добавить ключевое слово (таг)" -#: ../../mod/content.php:763 ../../object/Item.php:133 +#: mod/content.php:765 object/Item.php:137 msgid "save to folder" msgstr "сохранить в папке" -#: ../../mod/content.php:854 ../../object/Item.php:328 +#: mod/content.php:856 object/Item.php:359 msgid "to" msgstr "к" -#: ../../mod/content.php:855 ../../object/Item.php:330 +#: mod/content.php:857 object/Item.php:361 msgid "Wall-to-Wall" msgstr "Стена-на-Стену" -#: ../../mod/content.php:856 ../../object/Item.php:331 +#: mod/content.php:858 object/Item.php:362 msgid "via Wall-To-Wall:" msgstr "через Стена-на-Стену:" -#: ../../mod/removeme.php:46 ../../mod/removeme.php:49 +#: mod/removeme.php:46 mod/removeme.php:49 msgid "Remove My Account" msgstr "Удалить мой аккаунт" -#: ../../mod/removeme.php:47 +#: mod/removeme.php:47 msgid "" "This will completely remove your account. Once this has been done it is not " "recoverable." -msgstr "Это позволит полностью удалить ваш аккаунт. Как только это будет сделано, аккаунт восстановлению не подлежит." +msgstr "" +"Это позволит полностью удалить ваш аккаунт. Как только это будет сделано, " +"аккаунт восстановлению не подлежит." -#: ../../mod/removeme.php:48 +#: mod/removeme.php:48 msgid "Please enter your password for verification:" msgstr "Пожалуйста, введите свой пароль для проверки:" -#: ../../mod/install.php:117 +#: mod/install.php:128 msgid "Friendica Communications Server - Setup" msgstr "Коммуникационный сервер Friendica - Доступ" -#: ../../mod/install.php:123 +#: mod/install.php:134 msgid "Could not connect to database." msgstr "Не удалось подключиться к базе данных." -#: ../../mod/install.php:127 +#: mod/install.php:138 msgid "Could not create table." msgstr "Не удалось создать таблицу." -#: ../../mod/install.php:133 +#: mod/install.php:144 msgid "Your Friendica site database has been installed." msgstr "База данных сайта установлена." -#: ../../mod/install.php:138 +#: mod/install.php:149 msgid "" "You may need to import the file \"database.sql\" manually using phpmyadmin " "or mysql." -msgstr "Вам может понадобиться импортировать файл \"database.sql\" вручную с помощью PhpMyAdmin или MySQL." +msgstr "" +"Вам может понадобиться импортировать файл \"database.sql\" вручную с помощью " +"PhpMyAdmin или MySQL." -#: ../../mod/install.php:139 ../../mod/install.php:206 -#: ../../mod/install.php:525 +#: mod/install.php:150 mod/install.php:219 mod/install.php:577 msgid "Please see the file \"INSTALL.txt\"." msgstr "Пожалуйста, смотрите файл \"INSTALL.txt\"." -#: ../../mod/install.php:203 +#: mod/install.php:162 +msgid "Database already in use." +msgstr "" + +#: mod/install.php:216 msgid "System check" msgstr "Проверить систему" -#: ../../mod/install.php:208 +#: mod/install.php:221 msgid "Check again" msgstr "Проверить еще раз" -#: ../../mod/install.php:227 +#: mod/install.php:240 msgid "Database connection" msgstr "Подключение к базе данных" -#: ../../mod/install.php:228 +#: mod/install.php:241 msgid "" "In order to install Friendica we need to know how to connect to your " "database." -msgstr "Для того, чтобы установить Friendica, мы должны знать, как подключиться к базе данных." +msgstr "" +"Для того, чтобы установить Friendica, мы должны знать, как подключиться к " +"базе данных." -#: ../../mod/install.php:229 +#: mod/install.php:242 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." -msgstr "Пожалуйста, свяжитесь с вашим хостинг-провайдером или администратором сайта, если у вас есть вопросы об этих параметрах." +msgstr "" +"Пожалуйста, свяжитесь с вашим хостинг-провайдером или администратором сайта, " +"если у вас есть вопросы об этих параметрах." -#: ../../mod/install.php:230 +#: mod/install.php:243 msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." -msgstr "Базы данных, указанная ниже, должна уже существовать. Если этого нет, пожалуйста, создайте ее перед продолжением." +msgstr "" +"Базы данных, указанная ниже, должна уже существовать. Если этого нет, " +"пожалуйста, создайте ее перед продолжением." -#: ../../mod/install.php:234 +#: mod/install.php:247 msgid "Database Server Name" msgstr "Имя сервера базы данных" -#: ../../mod/install.php:235 +#: mod/install.php:248 msgid "Database Login Name" msgstr "Логин базы данных" -#: ../../mod/install.php:236 +#: mod/install.php:249 msgid "Database Login Password" msgstr "Пароль базы данных" -#: ../../mod/install.php:237 +#: mod/install.php:250 msgid "Database Name" msgstr "Имя базы данных" -#: ../../mod/install.php:238 ../../mod/install.php:277 +#: mod/install.php:251 mod/install.php:290 msgid "Site administrator email address" msgstr "Адрес электронной почты администратора сайта" -#: ../../mod/install.php:238 ../../mod/install.php:277 +#: mod/install.php:251 mod/install.php:290 msgid "" "Your account email address must match this in order to use the web admin " "panel." -msgstr "Ваш адрес электронной почты аккаунта должен соответствовать этому, чтобы использовать веб-панель администратора." +msgstr "" +"Ваш адрес электронной почты аккаунта должен соответствовать этому, чтобы " +"использовать веб-панель администратора." -#: ../../mod/install.php:242 ../../mod/install.php:280 +#: mod/install.php:255 mod/install.php:293 msgid "Please select a default timezone for your website" msgstr "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта" -#: ../../mod/install.php:267 +#: mod/install.php:280 msgid "Site settings" msgstr "Настройки сайта" -#: ../../mod/install.php:321 +#: mod/install.php:334 msgid "Could not find a command line version of PHP in the web server PATH." msgstr "Не удалось найти PATH веб-сервера в установках PHP." -#: ../../mod/install.php:322 +#: mod/install.php:335 msgid "" "If you don't have a command line version of PHP installed on server, you " -"will not be able to run background polling via cron. See 'Activating scheduled tasks'" -msgstr "Если на вашем сервере не установлена версия командной строки PHP, вы не будете иметь возможность запускать фоновые опросы через крон. См. 'Активация запланированных задачах' " +"will not be able to run background polling via cron. See 'Setup the poller'" +msgstr "" -#: ../../mod/install.php:326 +#: mod/install.php:339 msgid "PHP executable path" msgstr "PHP executable path" -#: ../../mod/install.php:326 +#: mod/install.php:339 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." -msgstr "Введите полный путь к исполняемому файлу PHP. Вы можете оставить это поле пустым, чтобы продолжить установку." +msgstr "" +"Введите полный путь к исполняемому файлу PHP. Вы можете оставить это поле " +"пустым, чтобы продолжить установку." -#: ../../mod/install.php:331 +#: mod/install.php:344 msgid "Command line PHP" msgstr "Command line PHP" -#: ../../mod/install.php:340 +#: mod/install.php:353 msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" msgstr "" -#: ../../mod/install.php:341 +#: mod/install.php:354 msgid "Found PHP version: " msgstr "Найденная PHP версия: " -#: ../../mod/install.php:343 +#: mod/install.php:356 msgid "PHP cli binary" msgstr "PHP cli binary" -#: ../../mod/install.php:354 +#: mod/install.php:367 msgid "" "The command line version of PHP on your system does not have " "\"register_argc_argv\" enabled." msgstr "Не включено \"register_argc_argv\" в установках PHP." -#: ../../mod/install.php:355 +#: mod/install.php:368 msgid "This is required for message delivery to work." msgstr "Это необходимо для работы доставки сообщений." -#: ../../mod/install.php:357 +#: mod/install.php:370 msgid "PHP register_argc_argv" msgstr "PHP register_argc_argv" -#: ../../mod/install.php:378 +#: mod/install.php:391 msgid "" "Error: the \"openssl_pkey_new\" function on this system is not able to " "generate encryption keys" -msgstr "Ошибка: функция \"openssl_pkey_new\" в этой системе не в состоянии генерировать ключи шифрования" +msgstr "" +"Ошибка: функция \"openssl_pkey_new\" в этой системе не в состоянии " +"генерировать ключи шифрования" -#: ../../mod/install.php:379 +#: mod/install.php:392 msgid "" -"If running under Windows, please see " -"\"http://www.php.net/manual/en/openssl.installation.php\"." -msgstr "Если вы работаете под Windows, см. \"http://www.php.net/manual/en/openssl.installation.php\"." +"If running under Windows, please see \"http://www.php.net/manual/en/openssl." +"installation.php\"." +msgstr "" +"Если вы работаете под Windows, см. \"http://www.php.net/manual/en/openssl." +"installation.php\"." -#: ../../mod/install.php:381 +#: mod/install.php:394 msgid "Generate encryption keys" msgstr "Генерация шифрованых ключей" -#: ../../mod/install.php:388 +#: mod/install.php:401 msgid "libCurl PHP module" msgstr "libCurl PHP модуль" -#: ../../mod/install.php:389 +#: mod/install.php:402 msgid "GD graphics PHP module" msgstr "GD graphics PHP модуль" -#: ../../mod/install.php:390 +#: mod/install.php:403 msgid "OpenSSL PHP module" msgstr "OpenSSL PHP модуль" -#: ../../mod/install.php:391 +#: mod/install.php:404 msgid "mysqli PHP module" msgstr "mysqli PHP модуль" -#: ../../mod/install.php:392 +#: mod/install.php:405 msgid "mb_string PHP module" msgstr "mb_string PHP модуль" -#: ../../mod/install.php:397 ../../mod/install.php:399 +#: mod/install.php:406 +msgid "mcrypt PHP module" +msgstr "" + +#: mod/install.php:411 mod/install.php:413 msgid "Apache mod_rewrite module" msgstr "Apache mod_rewrite module" -#: ../../mod/install.php:397 +#: mod/install.php:411 msgid "" "Error: Apache webserver mod-rewrite module is required but not installed." -msgstr "Ошибка: необходим модуль веб-сервера Apache mod-rewrite, но он не установлен." +msgstr "" +"Ошибка: необходим модуль веб-сервера Apache mod-rewrite, но он не установлен." -#: ../../mod/install.php:405 +#: mod/install.php:419 msgid "Error: libCURL PHP module required but not installed." msgstr "Ошибка: необходим libCURL PHP модуль, но он не установлен." -#: ../../mod/install.php:409 +#: mod/install.php:423 msgid "" "Error: GD graphics PHP module with JPEG support required but not installed." -msgstr "Ошибка: необходим PHP модуль GD графики с поддержкой JPEG, но он не установлен." +msgstr "" +"Ошибка: необходим PHP модуль GD графики с поддержкой JPEG, но он не " +"установлен." -#: ../../mod/install.php:413 +#: mod/install.php:427 msgid "Error: openssl PHP module required but not installed." msgstr "Ошибка: необходим PHP модуль OpenSSL, но он не установлен." -#: ../../mod/install.php:417 +#: mod/install.php:431 msgid "Error: mysqli PHP module required but not installed." msgstr "Ошибка: необходим PHP модуль MySQLi, но он не установлен." -#: ../../mod/install.php:421 +#: mod/install.php:435 msgid "Error: mb_string PHP module required but not installed." msgstr "Ошибка: необходим PHP модуль mb_string, но он не установлен." -#: ../../mod/install.php:438 -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 "Веб-инсталлятору требуется создать файл с именем \". htconfig.php\" в верхней папке веб-сервера, но он не в состоянии это сделать." +#: mod/install.php:439 +msgid "Error: mcrypt PHP module required but not installed." +msgstr "" -#: ../../mod/install.php:439 +#: mod/install.php:451 +msgid "" +"Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 " +"encryption layer." +msgstr "" + +#: mod/install.php:453 +msgid "mcrypt_create_iv() function" +msgstr "" + +#: mod/install.php:469 +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 "" +"Веб-инсталлятору требуется создать файл с именем \". htconfig.php\" в " +"верхней папке веб-сервера, но он не в состоянии это сделать." + +#: mod/install.php:470 msgid "" "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." -msgstr "Это наиболее частые параметры разрешений, когда веб-сервер не может записать файлы в папке - даже если вы можете." +msgstr "" +"Это наиболее частые параметры разрешений, когда веб-сервер не может записать " +"файлы в папке - даже если вы можете." -#: ../../mod/install.php:440 +#: mod/install.php:471 msgid "" "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." -msgstr "В конце этой процедуры, мы дадим вам текст, для сохранения в файле с именем .htconfig.php в корневой папке, где установлена Friendica." +msgstr "" +"В конце этой процедуры, мы дадим вам текст, для сохранения в файле с именем ." +"htconfig.php в корневой папке, где установлена Friendica." -#: ../../mod/install.php:441 +#: mod/install.php:472 msgid "" -"You can alternatively skip this procedure and perform a manual installation." -" Please see the file \"INSTALL.txt\" for instructions." -msgstr "В качестве альтернативы вы можете пропустить эту процедуру и выполнить установку вручную. Пожалуйста, обратитесь к файлу \"INSTALL.txt\" для получения инструкций." +"You can alternatively skip this procedure and perform a manual installation. " +"Please see the file \"INSTALL.txt\" for instructions." +msgstr "" +"В качестве альтернативы вы можете пропустить эту процедуру и выполнить " +"установку вручную. Пожалуйста, обратитесь к файлу \"INSTALL.txt\" для " +"получения инструкций." -#: ../../mod/install.php:444 +#: mod/install.php:475 msgid ".htconfig.php is writable" msgstr ".htconfig.php is writable" -#: ../../mod/install.php:454 +#: mod/install.php:485 msgid "" "Friendica uses the Smarty3 template engine to render its web views. Smarty3 " "compiles templates to PHP to speed up rendering." -msgstr "Friendica использует механизм шаблонов Smarty3 для генерации веб-страниц. Smarty3 компилирует шаблоны в PHP для увеличения скорости загрузки." +msgstr "" +"Friendica использует механизм шаблонов Smarty3 для генерации веб-страниц. " +"Smarty3 компилирует шаблоны в PHP для увеличения скорости загрузки." -#: ../../mod/install.php:455 +#: mod/install.php:486 msgid "" "In order to store these compiled templates, the web server needs to have " "write access to the directory view/smarty3/ under the Friendica top level " "folder." -msgstr "Для того чтобы хранить эти скомпилированные шаблоны, веб-сервер должен иметь доступ на запись для папки view/smarty3 в директории, где установлена Friendica." +msgstr "" +"Для того чтобы хранить эти скомпилированные шаблоны, веб-сервер должен иметь " +"доступ на запись для папки view/smarty3 в директории, где установлена " +"Friendica." -#: ../../mod/install.php:456 +#: mod/install.php:487 msgid "" -"Please ensure that the user that your web server runs as (e.g. www-data) has" -" write access to this folder." -msgstr "Пожалуйста, убедитесь, что пользователь, под которым работает ваш веб-сервер (например www-data), имеет доступ на запись в этой папке." +"Please ensure that the user that your web server runs as (e.g. www-data) has " +"write access to this folder." +msgstr "" +"Пожалуйста, убедитесь, что пользователь, под которым работает ваш веб-сервер " +"(например www-data), имеет доступ на запись в этой папке." -#: ../../mod/install.php:457 +#: mod/install.php:488 msgid "" "Note: as a security measure, you should give the web server write access to " "view/smarty3/ only--not the template files (.tpl) that it contains." -msgstr "Примечание: в качестве меры безопасности, вы должны дать вебсерверу доступ на запись только в view/smarty3 - но не на сами файлы шаблонов (.tpl)., Которые содержатся в этой папке." +msgstr "" +"Примечание: в качестве меры безопасности, вы должны дать вебсерверу доступ " +"на запись только в view/smarty3 - но не на сами файлы шаблонов (.tpl)., " +"Которые содержатся в этой папке." -#: ../../mod/install.php:460 +#: mod/install.php:491 msgid "view/smarty3 is writable" msgstr "view/smarty3 доступен для записи" -#: ../../mod/install.php:472 +#: mod/install.php:507 msgid "" "Url rewrite in .htaccess is not working. Check your server configuration." -msgstr "Url rewrite в .htaccess не работает. Проверьте конфигурацию вашего сервера.." +msgstr "" +"Url rewrite в .htaccess не работает. Проверьте конфигурацию вашего сервера.." -#: ../../mod/install.php:474 +#: mod/install.php:509 msgid "Url rewrite is working" msgstr "Url rewrite работает" -#: ../../mod/install.php:484 +#: mod/install.php:526 +msgid "ImageMagick PHP extension is installed" +msgstr "" + +#: mod/install.php:528 +msgid "ImageMagick supports GIF" +msgstr "" + +#: mod/install.php:536 msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " "server root." -msgstr "Файл конфигурации базы данных \".htconfig.php\" не могла быть записан. Пожалуйста, используйте приложенный текст, чтобы создать конфигурационный файл в корневом каталоге веб-сервера." +msgstr "" +"Файл конфигурации базы данных \".htconfig.php\" не могла быть записан. " +"Пожалуйста, используйте приложенный текст, чтобы создать конфигурационный " +"файл в корневом каталоге веб-сервера." -#: ../../mod/install.php:523 +#: mod/install.php:575 msgid "

What next

" msgstr "

Что далее

" -#: ../../mod/install.php:524 +#: mod/install.php:576 msgid "" -"IMPORTANT: You will need to [manually] setup a scheduled task for the " -"poller." -msgstr "ВАЖНО: Вам нужно будет [вручную] установить запланированное задание для регистратора." +"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." +msgstr "" +"ВАЖНО: Вам нужно будет [вручную] установить запланированное задание для " +"регистратора." -#: ../../mod/wallmessage.php:42 ../../mod/wallmessage.php:112 +#: mod/wallmessage.php:42 mod/wallmessage.php:112 #, php-format msgid "Number of daily wall messages for %s exceeded. Message failed." -msgstr "Количество ежедневных сообщений на стене %s превышено. Сообщение отменено.." +msgstr "" +"Количество ежедневных сообщений на стене %s превышено. Сообщение отменено.." -#: ../../mod/wallmessage.php:59 +#: mod/wallmessage.php:59 msgid "Unable to check your home location." msgstr "Невозможно проверить местоположение." -#: ../../mod/wallmessage.php:86 ../../mod/wallmessage.php:95 +#: mod/wallmessage.php:86 mod/wallmessage.php:95 msgid "No recipient." msgstr "Без адресата." -#: ../../mod/wallmessage.php:143 +#: 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 "Если Вы хотите ответить %s, пожалуйста, проверьте, позволяют ли настройки конфиденциальности на Вашем сайте принимать персональную почту от неизвестных отправителей." +msgstr "" +"Если Вы хотите ответить %s, пожалуйста, проверьте, позволяют ли настройки " +"конфиденциальности на Вашем сайте принимать персональную почту от " +"неизвестных отправителей." -#: ../../mod/help.php:79 +#: mod/help.php:41 msgid "Help:" msgstr "Помощь:" -#: ../../mod/help.php:84 ../../include/nav.php:114 +#: mod/help.php:47 include/nav.php:113 view/theme/vier/theme.php:302 msgid "Help" msgstr "Помощь" -#: ../../mod/help.php:90 ../../index.php:256 +#: mod/help.php:53 mod/p.php:16 mod/p.php:25 index.php:270 msgid "Not Found" msgstr "Не найдено" -#: ../../mod/help.php:93 ../../index.php:259 +#: mod/help.php:56 index.php:273 msgid "Page not found." msgstr "Страница не найдена." -#: ../../mod/dfrn_poll.php:103 ../../mod/dfrn_poll.php:536 +#: mod/dfrn_poll.php:103 mod/dfrn_poll.php:536 #, php-format msgid "%1$s welcomes %2$s" msgstr "%1$s добро пожаловать %2$s" -#: ../../mod/home.php:35 +#: mod/home.php:35 #, php-format msgid "Welcome to %s" msgstr "Добро пожаловать на %s!" -#: ../../mod/wall_attach.php:75 +#: mod/wall_attach.php:94 msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" msgstr "" -#: ../../mod/wall_attach.php:75 +#: mod/wall_attach.php:94 msgid "Or - did you try to upload an empty file?" msgstr "" -#: ../../mod/wall_attach.php:81 +#: mod/wall_attach.php:105 #, php-format -msgid "File exceeds size limit of %d" -msgstr "Файл превышает предельный размер %d" +msgid "File exceeds size limit of %s" +msgstr "" -#: ../../mod/wall_attach.php:122 ../../mod/wall_attach.php:133 +#: mod/wall_attach.php:156 mod/wall_attach.php:172 msgid "File upload failed." msgstr "Загрузка файла не удалась." -#: ../../mod/match.php:12 -msgid "Profile Match" -msgstr "Похожие профили" - -#: ../../mod/match.php:20 +#: mod/match.php:33 msgid "No keywords to match. Please add keywords to your default profile." -msgstr "Нет соответствующих ключевых слов. Пожалуйста, добавьте ключевые слова для вашего профиля по умолчанию." +msgstr "" +"Нет соответствующих ключевых слов. Пожалуйста, добавьте ключевые слова для " +"вашего профиля по умолчанию." -#: ../../mod/match.php:57 +#: mod/match.php:84 msgid "is interested in:" msgstr "интересуется:" -#: ../../mod/match.php:58 ../../mod/suggest.php:90 ../../boot.php:1568 -#: ../../include/contact_widgets.php:10 -msgid "Connect" -msgstr "Подключить" +#: mod/match.php:98 +msgid "Profile Match" +msgstr "Похожие профили" -#: ../../mod/share.php:44 +#: mod/share.php:38 msgid "link" msgstr "ссылка" -#: ../../mod/community.php:23 +#: mod/community.php:27 msgid "Not available." msgstr "Недоступно." -#: ../../mod/community.php:32 ../../include/nav.php:129 -#: ../../include/nav.php:131 ../../view/theme/diabook/theme.php:129 +#: mod/community.php:36 include/nav.php:136 include/nav.php:138 +#: view/theme/diabook/theme.php:129 msgid "Community" msgstr "Сообщество" -#: ../../mod/community.php:62 ../../mod/community.php:71 -#: ../../mod/search.php:168 ../../mod/search.php:192 +#: mod/community.php:66 mod/community.php:75 mod/search.php:228 msgid "No results." msgstr "Нет результатов." -#: ../../mod/settings.php:29 ../../mod/photos.php:80 +#: mod/settings.php:34 mod/photos.php:117 msgid "everybody" msgstr "каждый" -#: ../../mod/settings.php:41 -msgid "Additional features" -msgstr "Дополнительные возможности" - -#: ../../mod/settings.php:46 +#: mod/settings.php:58 msgid "Display" -msgstr "" +msgstr "Внешний вид" -#: ../../mod/settings.php:52 ../../mod/settings.php:780 +#: mod/settings.php:65 mod/settings.php:864 msgid "Social Networks" -msgstr "" +msgstr "Социальные сети" -#: ../../mod/settings.php:62 ../../include/nav.php:170 +#: mod/settings.php:79 include/nav.php:180 msgid "Delegations" -msgstr "" +msgstr "Делегирование" -#: ../../mod/settings.php:67 +#: mod/settings.php:86 msgid "Connected apps" msgstr "Подключенные приложения" -#: ../../mod/settings.php:72 ../../mod/uexport.php:85 +#: mod/settings.php:93 mod/uexport.php:85 msgid "Export personal data" msgstr "Экспорт личных данных" -#: ../../mod/settings.php:77 +#: mod/settings.php:100 msgid "Remove account" msgstr "Удалить аккаунт" -#: ../../mod/settings.php:129 +#: mod/settings.php:153 msgid "Missing some important data!" msgstr "Не хватает важных данных!" -#: ../../mod/settings.php:238 +#: mod/settings.php:266 msgid "Failed to connect with email account using the settings provided." -msgstr "Не удалось подключиться к аккаунту e-mail, используя указанные настройки." +msgstr "" +"Не удалось подключиться к аккаунту e-mail, используя указанные настройки." -#: ../../mod/settings.php:243 +#: mod/settings.php:271 msgid "Email settings updated." msgstr "Настройки эл. почты обновлены." -#: ../../mod/settings.php:258 +#: mod/settings.php:286 msgid "Features updated" msgstr "Настройки обновлены" -#: ../../mod/settings.php:321 +#: mod/settings.php:353 msgid "Relocate message has been send to your contacts" msgstr "Перемещённое сообщение было отправлено списку контактов" -#: ../../mod/settings.php:335 +#: mod/settings.php:367 include/user.php:39 msgid "Passwords do not match. Password unchanged." msgstr "Пароли не совпадают. Пароль не изменен." -#: ../../mod/settings.php:340 +#: mod/settings.php:372 msgid "Empty passwords are not allowed. Password unchanged." msgstr "Пустые пароли не допускаются. Пароль не изменен." -#: ../../mod/settings.php:348 +#: mod/settings.php:380 msgid "Wrong password." msgstr "Неверный пароль." -#: ../../mod/settings.php:359 +#: mod/settings.php:391 msgid "Password changed." msgstr "Пароль изменен." -#: ../../mod/settings.php:361 +#: mod/settings.php:393 msgid "Password update failed. Please try again." msgstr "Обновление пароля не удалось. Пожалуйста, попробуйте еще раз." -#: ../../mod/settings.php:428 +#: mod/settings.php:462 msgid " Please use a shorter name." msgstr " Пожалуйста, используйте более короткое имя." -#: ../../mod/settings.php:430 +#: mod/settings.php:464 msgid " Name too short." msgstr " Имя слишком короткое." -#: ../../mod/settings.php:439 +#: mod/settings.php:473 msgid "Wrong Password" msgstr "Неверный пароль." -#: ../../mod/settings.php:444 +#: mod/settings.php:478 msgid " Not valid email." msgstr " Неверный e-mail." -#: ../../mod/settings.php:450 +#: mod/settings.php:484 msgid " Cannot change to that email." msgstr " Невозможно изменить на этот e-mail." -#: ../../mod/settings.php:506 +#: mod/settings.php:540 msgid "Private forum has no privacy permissions. Using default privacy group." -msgstr "Частный форум не имеет настроек приватности. Используется группа конфиденциальности по умолчанию." +msgstr "" +"Частный форум не имеет настроек приватности. Используется группа " +"конфиденциальности по умолчанию." -#: ../../mod/settings.php:510 +#: mod/settings.php:544 msgid "Private forum has no privacy permissions and no default privacy group." -msgstr "Частный форум не имеет настроек приватности и не имеет групп приватности по умолчанию." +msgstr "" +"Частный форум не имеет настроек приватности и не имеет групп приватности по " +"умолчанию." -#: ../../mod/settings.php:540 +#: mod/settings.php:583 msgid "Settings updated." msgstr "Настройки обновлены." -#: ../../mod/settings.php:613 ../../mod/settings.php:639 -#: ../../mod/settings.php:675 +#: mod/settings.php:658 mod/settings.php:684 mod/settings.php:720 msgid "Add application" msgstr "Добавить приложения" -#: ../../mod/settings.php:617 ../../mod/settings.php:643 +#: mod/settings.php:662 mod/settings.php:688 msgid "Consumer Key" msgstr "Consumer Key" -#: ../../mod/settings.php:618 ../../mod/settings.php:644 +#: mod/settings.php:663 mod/settings.php:689 msgid "Consumer Secret" msgstr "Consumer Secret" -#: ../../mod/settings.php:619 ../../mod/settings.php:645 +#: mod/settings.php:664 mod/settings.php:690 msgid "Redirect" msgstr "Перенаправление" -#: ../../mod/settings.php:620 ../../mod/settings.php:646 +#: mod/settings.php:665 mod/settings.php:691 msgid "Icon url" msgstr "URL символа" -#: ../../mod/settings.php:631 +#: mod/settings.php:676 msgid "You can't edit this application." msgstr "Вы не можете изменить это приложение." -#: ../../mod/settings.php:674 +#: mod/settings.php:719 msgid "Connected Apps" msgstr "Подключенные приложения" -#: ../../mod/settings.php:678 +#: mod/settings.php:723 msgid "Client key starts with" msgstr "Ключ клиента начинается с" -#: ../../mod/settings.php:679 +#: mod/settings.php:724 msgid "No name" msgstr "Нет имени" -#: ../../mod/settings.php:680 +#: mod/settings.php:725 msgid "Remove authorization" msgstr "Удалить авторизацию" -#: ../../mod/settings.php:692 +#: mod/settings.php:737 msgid "No Plugin settings configured" msgstr "Нет сконфигурированных настроек плагина" -#: ../../mod/settings.php:700 +#: mod/settings.php:745 msgid "Plugin Settings" msgstr "Настройки плагина" -#: ../../mod/settings.php:714 -msgid "Off" -msgstr "" - -#: ../../mod/settings.php:714 -msgid "On" -msgstr "" - -#: ../../mod/settings.php:722 +#: mod/settings.php:767 msgid "Additional Features" msgstr "Дополнительные возможности" -#: ../../mod/settings.php:736 ../../mod/settings.php:737 +#: mod/settings.php:777 mod/settings.php:781 +msgid "General Social Media Settings" +msgstr "" + +#: mod/settings.php:787 +msgid "Disable intelligent shortening" +msgstr "" + +#: mod/settings.php:789 +msgid "" +"Normally the system tries to find the best link to add to shortened posts. " +"If this option is enabled then every shortened post will always point to the " +"original friendica post." +msgstr "" + +#: mod/settings.php:795 +msgid "Automatically follow any GNU Social (OStatus) followers/mentioners" +msgstr "" + +#: mod/settings.php:797 +msgid "" +"If you receive a message from an unknown OStatus user, this option decides " +"what to do. If it is checked, a new contact will be created for every " +"unknown user." +msgstr "" + +#: mod/settings.php:806 +msgid "Your legacy GNU Social account" +msgstr "" + +#: mod/settings.php:808 +msgid "" +"If you enter your old GNU Social/Statusnet account name here (in the format " +"user@domain.tld), your contacts will be added automatically. The field will " +"be emptied when done." +msgstr "" + +#: mod/settings.php:811 +msgid "Repair OStatus subscriptions" +msgstr "" + +#: mod/settings.php:820 mod/settings.php:821 #, php-format msgid "Built-in support for %s connectivity is %s" msgstr "Встроенная поддержка для %s подключение %s" -#: ../../mod/settings.php:736 ../../mod/dfrn_request.php:838 -#: ../../include/contact_selectors.php:80 +#: mod/settings.php:820 mod/dfrn_request.php:865 +#: include/contact_selectors.php:80 msgid "Diaspora" msgstr "Diaspora" -#: ../../mod/settings.php:736 ../../mod/settings.php:737 +#: mod/settings.php:820 mod/settings.php:821 msgid "enabled" msgstr "подключено" -#: ../../mod/settings.php:736 ../../mod/settings.php:737 +#: mod/settings.php:820 mod/settings.php:821 msgid "disabled" msgstr "отключено" -#: ../../mod/settings.php:737 -msgid "StatusNet" -msgstr "StatusNet" +#: mod/settings.php:821 +msgid "GNU Social (OStatus)" +msgstr "" -#: ../../mod/settings.php:773 +#: mod/settings.php:857 msgid "Email access is disabled on this site." msgstr "Доступ эл. почты отключен на этом сайте." -#: ../../mod/settings.php:785 +#: mod/settings.php:869 msgid "Email/Mailbox Setup" msgstr "Настройка эл. почты / почтового ящика" -#: ../../mod/settings.php:786 +#: mod/settings.php:870 msgid "" "If you wish to communicate with email contacts using this service " "(optional), please specify how to connect to your mailbox." -msgstr "Если вы хотите общаться с Email контактами, используя этот сервис (по желанию), пожалуйста, уточните, как подключиться к вашему почтовому ящику." +msgstr "" +"Если вы хотите общаться с Email контактами, используя этот сервис (по " +"желанию), пожалуйста, уточните, как подключиться к вашему почтовому ящику." -#: ../../mod/settings.php:787 +#: mod/settings.php:871 msgid "Last successful email check:" msgstr "Последняя успешная проверка электронной почты:" -#: ../../mod/settings.php:789 +#: mod/settings.php:873 msgid "IMAP server name:" msgstr "Имя IMAP сервера:" -#: ../../mod/settings.php:790 +#: mod/settings.php:874 msgid "IMAP port:" msgstr "Порт IMAP:" -#: ../../mod/settings.php:791 +#: mod/settings.php:875 msgid "Security:" msgstr "Безопасность:" -#: ../../mod/settings.php:791 ../../mod/settings.php:796 +#: mod/settings.php:875 mod/settings.php:880 msgid "None" msgstr "Ничего" -#: ../../mod/settings.php:792 +#: mod/settings.php:876 msgid "Email login name:" msgstr "Логин эл. почты:" -#: ../../mod/settings.php:793 +#: mod/settings.php:877 msgid "Email password:" msgstr "Пароль эл. почты:" -#: ../../mod/settings.php:794 +#: mod/settings.php:878 msgid "Reply-to address:" msgstr "Адрес для ответа:" -#: ../../mod/settings.php:795 +#: mod/settings.php:879 msgid "Send public posts to all email contacts:" msgstr "Отправлять открытые сообщения на все контакты электронной почты:" -#: ../../mod/settings.php:796 +#: mod/settings.php:880 msgid "Action after import:" msgstr "Действие после импорта:" -#: ../../mod/settings.php:796 +#: mod/settings.php:880 msgid "Mark as seen" msgstr "Отметить, как прочитанное" -#: ../../mod/settings.php:796 +#: mod/settings.php:880 msgid "Move to folder" msgstr "Переместить в папку" -#: ../../mod/settings.php:797 +#: mod/settings.php:881 msgid "Move to folder:" msgstr "Переместить в папку:" -#: ../../mod/settings.php:878 +#: mod/settings.php:967 msgid "Display Settings" msgstr "Параметры дисплея" -#: ../../mod/settings.php:884 ../../mod/settings.php:899 +#: mod/settings.php:973 mod/settings.php:991 msgid "Display Theme:" msgstr "Показать тему:" -#: ../../mod/settings.php:885 +#: mod/settings.php:974 msgid "Mobile Theme:" msgstr "Мобильная тема:" -#: ../../mod/settings.php:886 +#: mod/settings.php:975 msgid "Update browser every xx seconds" msgstr "Обновление браузера каждые хх секунд" -#: ../../mod/settings.php:886 -msgid "Minimum of 10 seconds, no maximum" -msgstr "Минимум 10 секунд, максимума нет" +#: mod/settings.php:975 +msgid "Minimum of 10 seconds. Enter -1 to disable it." +msgstr "" -#: ../../mod/settings.php:887 +#: mod/settings.php:976 msgid "Number of items to display per page:" msgstr "Количество элементов, отображаемых на одной странице:" -#: ../../mod/settings.php:887 ../../mod/settings.php:888 +#: mod/settings.php:976 mod/settings.php:977 msgid "Maximum of 100 items" msgstr "Максимум 100 элементов" -#: ../../mod/settings.php:888 +#: mod/settings.php:977 msgid "Number of items to display per page when viewed from mobile device:" -msgstr "Количество элементов на странице, когда просмотр осуществляется с мобильных устройств:" +msgstr "" +"Количество элементов на странице, когда просмотр осуществляется с мобильных " +"устройств:" -#: ../../mod/settings.php:889 +#: mod/settings.php:978 msgid "Don't show emoticons" msgstr "не показывать emoticons" -#: ../../mod/settings.php:890 +#: mod/settings.php:979 +msgid "Calendar" +msgstr "" + +#: mod/settings.php:980 +msgid "Beginning of week:" +msgstr "" + +#: mod/settings.php:981 msgid "Don't show notices" msgstr "" -#: ../../mod/settings.php:891 +#: mod/settings.php:982 msgid "Infinite scroll" msgstr "Бесконечная прокрутка" -#: ../../mod/settings.php:892 +#: mod/settings.php:983 msgid "Automatic updates only at the top of the network page" msgstr "" -#: ../../mod/settings.php:969 +#: mod/settings.php:985 view/theme/cleanzero/config.php:82 +#: view/theme/dispy/config.php:72 view/theme/quattro/config.php:66 +#: view/theme/diabook/config.php:150 view/theme/vier/config.php:109 +#: view/theme/duepuntozero/config.php:61 +msgid "Theme settings" +msgstr "Настройки темы" + +#: mod/settings.php:1062 msgid "User Types" msgstr "" -#: ../../mod/settings.php:970 +#: mod/settings.php:1063 msgid "Community Types" msgstr "" -#: ../../mod/settings.php:971 +#: mod/settings.php:1064 msgid "Normal Account Page" msgstr "Стандартная страница аккаунта" -#: ../../mod/settings.php:972 +#: mod/settings.php:1065 msgid "This account is a normal personal profile" msgstr "Этот аккаунт является обычным персональным профилем" -#: ../../mod/settings.php:975 +#: mod/settings.php:1068 msgid "Soapbox Page" msgstr "" -#: ../../mod/settings.php:976 +#: mod/settings.php:1069 msgid "Automatically approve all connection/friend requests as read-only fans" -msgstr "Автоматически одобряются все подключения / запросы в друзья, \"только для чтения\" поклонниками" +msgstr "" +"Автоматически одобряются все подключения / запросы в друзья, \"только для " +"чтения\" поклонниками" -#: ../../mod/settings.php:979 +#: mod/settings.php:1072 msgid "Community Forum/Celebrity Account" msgstr "Аккаунт сообщества Форум/Знаменитость" -#: ../../mod/settings.php:980 -msgid "" -"Automatically approve all connection/friend requests as read-write fans" -msgstr "Автоматически одобряются все подключения / запросы в друзья, \"для чтения и записей\" поклонников" +#: mod/settings.php:1073 +msgid "Automatically approve all connection/friend requests as read-write fans" +msgstr "" +"Автоматически одобряются все подключения / запросы в друзья, \"для чтения и " +"записей\" поклонников" -#: ../../mod/settings.php:983 +#: mod/settings.php:1076 msgid "Automatic Friend Page" msgstr "\"Автоматический друг\" страница" -#: ../../mod/settings.php:984 +#: mod/settings.php:1077 msgid "Automatically approve all connection/friend requests as friends" -msgstr "Автоматически одобряются все подключения / запросы в друзья, расширяется список друзей" +msgstr "" +"Автоматически одобряются все подключения / запросы в друзья, расширяется " +"список друзей" -#: ../../mod/settings.php:987 +#: mod/settings.php:1080 msgid "Private Forum [Experimental]" msgstr "Личный форум [экспериментально]" -#: ../../mod/settings.php:988 +#: mod/settings.php:1081 msgid "Private forum - approved members only" msgstr "Приватный форум - разрешено только участникам" -#: ../../mod/settings.php:1000 +#: mod/settings.php:1093 msgid "OpenID:" msgstr "OpenID:" -#: ../../mod/settings.php:1000 +#: mod/settings.php:1093 msgid "(Optional) Allow this OpenID to login to this account." msgstr "(Необязательно) Разрешить этому OpenID входить в этот аккаунт" -#: ../../mod/settings.php:1010 +#: mod/settings.php:1103 msgid "Publish your default profile in your local site directory?" -msgstr "Публиковать ваш профиль по умолчанию в вашем локальном каталоге на сайте?" +msgstr "" +"Публиковать ваш профиль по умолчанию в вашем локальном каталоге на сайте?" -#: ../../mod/settings.php:1010 ../../mod/settings.php:1016 -#: ../../mod/settings.php:1024 ../../mod/settings.php:1028 -#: ../../mod/settings.php:1033 ../../mod/settings.php:1039 -#: ../../mod/settings.php:1045 ../../mod/settings.php:1051 -#: ../../mod/settings.php:1081 ../../mod/settings.php:1082 -#: ../../mod/settings.php:1083 ../../mod/settings.php:1084 -#: ../../mod/settings.php:1085 ../../mod/dfrn_request.php:830 -#: ../../mod/register.php:234 ../../mod/profiles.php:661 -#: ../../mod/profiles.php:665 ../../mod/api.php:106 -msgid "No" -msgstr "Нет" - -#: ../../mod/settings.php:1016 +#: mod/settings.php:1109 msgid "Publish your default profile in the global social directory?" msgstr "Публиковать ваш профиль по умолчанию в глобальном социальном каталоге?" -#: ../../mod/settings.php:1024 +#: mod/settings.php:1117 msgid "Hide your contact/friend list from viewers of your default profile?" -msgstr "Скрывать ваш список контактов/друзей от посетителей вашего профиля по умолчанию?" +msgstr "" +"Скрывать ваш список контактов/друзей от посетителей вашего профиля по " +"умолчанию?" -#: ../../mod/settings.php:1028 ../../include/conversation.php:1057 +#: mod/settings.php:1121 include/acl_selectors.php:331 msgid "Hide your profile details from unknown viewers?" msgstr "Скрыть данные профиля из неизвестных зрителей?" -#: ../../mod/settings.php:1028 +#: mod/settings.php:1121 msgid "" "If enabled, posting public messages to Diaspora and other networks isn't " "possible." msgstr "" -#: ../../mod/settings.php:1033 +#: mod/settings.php:1126 msgid "Allow friends to post to your profile page?" msgstr "Разрешить друзьям оставлять сообщения на страницу вашего профиля?" -#: ../../mod/settings.php:1039 +#: mod/settings.php:1132 msgid "Allow friends to tag your posts?" msgstr "Разрешить друзьям отмечять ваши сообщения?" -#: ../../mod/settings.php:1045 +#: mod/settings.php:1138 msgid "Allow us to suggest you as a potential friend to new members?" msgstr "Позвольть предлогать Вам потенциальных друзей?" -#: ../../mod/settings.php:1051 +#: mod/settings.php:1144 msgid "Permit unknown people to send you private mail?" msgstr "Разрешить незнакомым людям отправлять вам личные сообщения?" -#: ../../mod/settings.php:1059 +#: mod/settings.php:1152 msgid "Profile is not published." msgstr "Профиль не публикуется." -#: ../../mod/settings.php:1067 -msgid "Your Identity Address is" -msgstr "Ваш идентификационный адрес" +#: mod/settings.php:1160 +#, php-format +msgid "Your Identity Address is '%s' or '%s'." +msgstr "" -#: ../../mod/settings.php:1078 +#: mod/settings.php:1167 msgid "Automatically expire posts after this many days:" msgstr "Автоматическое истекание срока действия сообщения после стольких дней:" -#: ../../mod/settings.php:1078 +#: mod/settings.php:1167 msgid "If empty, posts will not expire. Expired posts will be deleted" -msgstr "Если пусто, срок действия сообщений не будет ограничен. Сообщения с истекшим сроком действия будут удалены" +msgstr "" +"Если пусто, срок действия сообщений не будет ограничен. Сообщения с истекшим " +"сроком действия будут удалены" -#: ../../mod/settings.php:1079 +#: mod/settings.php:1168 msgid "Advanced expiration settings" msgstr "Настройки расширенного окончания срока действия" -#: ../../mod/settings.php:1080 +#: mod/settings.php:1169 msgid "Advanced Expiration" msgstr "Расширенное окончание срока действия" -#: ../../mod/settings.php:1081 +#: mod/settings.php:1170 msgid "Expire posts:" msgstr "Срок хранения сообщений:" -#: ../../mod/settings.php:1082 +#: mod/settings.php:1171 msgid "Expire personal notes:" msgstr "Срок хранения личных заметок:" -#: ../../mod/settings.php:1083 +#: mod/settings.php:1172 msgid "Expire starred posts:" msgstr "Срок хранения усеянных сообщений:" -#: ../../mod/settings.php:1084 +#: mod/settings.php:1173 msgid "Expire photos:" msgstr "Срок хранения фотографий:" -#: ../../mod/settings.php:1085 +#: mod/settings.php:1174 msgid "Only expire posts by others:" msgstr "Только устаревшие посты других:" -#: ../../mod/settings.php:1111 +#: mod/settings.php:1202 msgid "Account Settings" msgstr "Настройки аккаунта" -#: ../../mod/settings.php:1119 +#: mod/settings.php:1210 msgid "Password Settings" -msgstr "Настройка пароля" +msgstr "Смена пароля" -#: ../../mod/settings.php:1120 +#: mod/settings.php:1211 mod/register.php:274 msgid "New Password:" msgstr "Новый пароль:" -#: ../../mod/settings.php:1121 +#: mod/settings.php:1212 mod/register.php:275 msgid "Confirm:" msgstr "Подтвердите:" -#: ../../mod/settings.php:1121 +#: mod/settings.php:1212 msgid "Leave password fields blank unless changing" msgstr "Оставьте поля пароля пустыми, если он не изменяется" -#: ../../mod/settings.php:1122 +#: mod/settings.php:1213 msgid "Current Password:" msgstr "Текущий пароль:" -#: ../../mod/settings.php:1122 ../../mod/settings.php:1123 +#: mod/settings.php:1213 mod/settings.php:1214 msgid "Your current password to confirm the changes" msgstr "Ваш текущий пароль, для подтверждения изменений" -#: ../../mod/settings.php:1123 +#: mod/settings.php:1214 msgid "Password:" msgstr "Пароль:" -#: ../../mod/settings.php:1127 +#: mod/settings.php:1218 msgid "Basic Settings" msgstr "Основные параметры" -#: ../../mod/settings.php:1128 ../../include/profile_advanced.php:15 +#: mod/settings.php:1219 include/identity.php:588 msgid "Full Name:" msgstr "Полное имя:" -#: ../../mod/settings.php:1129 +#: mod/settings.php:1220 msgid "Email Address:" msgstr "Адрес электронной почты:" -#: ../../mod/settings.php:1130 +#: mod/settings.php:1221 msgid "Your Timezone:" msgstr "Ваш часовой пояс:" -#: ../../mod/settings.php:1131 +#: mod/settings.php:1222 +msgid "Your Language:" +msgstr "" + +#: mod/settings.php:1222 +msgid "" +"Set the language we use to show you friendica interface and to send you " +"emails" +msgstr "" + +#: mod/settings.php:1223 msgid "Default Post Location:" msgstr "Местонахождение по умолчанию:" -#: ../../mod/settings.php:1132 +#: mod/settings.php:1224 msgid "Use Browser Location:" msgstr "Использовать определение местоположения браузером:" -#: ../../mod/settings.php:1135 +#: mod/settings.php:1227 msgid "Security and Privacy Settings" msgstr "Параметры безопасности и конфиденциальности" -#: ../../mod/settings.php:1137 +#: mod/settings.php:1229 msgid "Maximum Friend Requests/Day:" msgstr "Максимум запросов в друзья в день:" -#: ../../mod/settings.php:1137 ../../mod/settings.php:1167 +#: mod/settings.php:1229 mod/settings.php:1259 msgid "(to prevent spam abuse)" msgstr "(для предотвращения спама)" -#: ../../mod/settings.php:1138 +#: mod/settings.php:1230 msgid "Default Post Permissions" msgstr "Разрешение на сообщения по умолчанию" -#: ../../mod/settings.php:1139 +#: mod/settings.php:1231 msgid "(click to open/close)" msgstr "(нажмите, чтобы открыть / закрыть)" -#: ../../mod/settings.php:1148 ../../mod/photos.php:1146 -#: ../../mod/photos.php:1519 +#: mod/settings.php:1240 mod/photos.php:1199 mod/photos.php:1584 msgid "Show to Groups" msgstr "Показать в группах" -#: ../../mod/settings.php:1149 ../../mod/photos.php:1147 -#: ../../mod/photos.php:1520 +#: mod/settings.php:1241 mod/photos.php:1200 mod/photos.php:1585 msgid "Show to Contacts" msgstr "Показывать контактам" -#: ../../mod/settings.php:1150 +#: mod/settings.php:1242 msgid "Default Private Post" msgstr "Личное сообщение по умолчанию" -#: ../../mod/settings.php:1151 +#: mod/settings.php:1243 msgid "Default Public Post" msgstr "Публичное сообщение по умолчанию" -#: ../../mod/settings.php:1155 +#: mod/settings.php:1247 msgid "Default Permissions for New Posts" msgstr "Права для новых записей по умолчанию" -#: ../../mod/settings.php:1167 +#: mod/settings.php:1259 msgid "Maximum private messages per day from unknown people:" msgstr "Максимальное количество личных сообщений от незнакомых людей в день:" -#: ../../mod/settings.php:1170 +#: mod/settings.php:1262 msgid "Notification Settings" msgstr "Настройка уведомлений" -#: ../../mod/settings.php:1171 +#: mod/settings.php:1263 msgid "By default post a status message when:" msgstr "Отправить состояние о статусе по умолчанию, если:" -#: ../../mod/settings.php:1172 +#: mod/settings.php:1264 msgid "accepting a friend request" msgstr "принятие запроса на добавление в друзья" -#: ../../mod/settings.php:1173 +#: mod/settings.php:1265 msgid "joining a forum/community" msgstr "вступление в сообщество/форум" -#: ../../mod/settings.php:1174 +#: mod/settings.php:1266 msgid "making an interesting profile change" msgstr "сделать изменения в настройках интересов профиля" -#: ../../mod/settings.php:1175 +#: mod/settings.php:1267 msgid "Send a notification email when:" msgstr "Отправлять уведомление по электронной почте, когда:" -#: ../../mod/settings.php:1176 +#: mod/settings.php:1268 msgid "You receive an introduction" msgstr "Вы получили запрос" -#: ../../mod/settings.php:1177 +#: mod/settings.php:1269 msgid "Your introductions are confirmed" msgstr "Ваши запросы подтверждены" -#: ../../mod/settings.php:1178 +#: mod/settings.php:1270 msgid "Someone writes on your profile wall" msgstr "Кто-то пишет на стене вашего профиля" -#: ../../mod/settings.php:1179 +#: mod/settings.php:1271 msgid "Someone writes a followup comment" msgstr "Кто-то пишет последующий комментарий" -#: ../../mod/settings.php:1180 +#: mod/settings.php:1272 msgid "You receive a private message" msgstr "Вы получаете личное сообщение" -#: ../../mod/settings.php:1181 +#: mod/settings.php:1273 msgid "You receive a friend suggestion" msgstr "Вы полулили предложение о добавлении в друзья" -#: ../../mod/settings.php:1182 +#: mod/settings.php:1274 msgid "You are tagged in a post" msgstr "Вы отмечены в посте" -#: ../../mod/settings.php:1183 +#: mod/settings.php:1275 msgid "You are poked/prodded/etc. in a post" msgstr "" -#: ../../mod/settings.php:1185 +#: mod/settings.php:1277 +msgid "Activate desktop notifications" +msgstr "" + +#: mod/settings.php:1277 +msgid "Show desktop popup on new notifications" +msgstr "" + +#: mod/settings.php:1279 msgid "Text-only notification emails" msgstr "" -#: ../../mod/settings.php:1187 +#: mod/settings.php:1281 msgid "Send text only notification emails, without the html part" msgstr "" -#: ../../mod/settings.php:1189 +#: mod/settings.php:1283 msgid "Advanced Account/Page Type Settings" -msgstr "Расширенные настройки типа аккаунта/страницы" +msgstr "Расширенные настройки учётной записи" -#: ../../mod/settings.php:1190 +#: mod/settings.php:1284 msgid "Change the behaviour of this account for special situations" msgstr "Измените поведение этого аккаунта в специальных ситуациях" -#: ../../mod/settings.php:1193 +#: mod/settings.php:1287 msgid "Relocate" -msgstr "Переместить" +msgstr "Перемещение" -#: ../../mod/settings.php:1194 +#: mod/settings.php:1288 msgid "" "If you have moved this profile from another server, and some of your " "contacts don't receive your updates, try pushing this button." -msgstr "Если вы переместили эту анкету с другого сервера, и некоторые из ваших контактов не получили ваши обновления, попробуйте нажать эту кнопку." +msgstr "" +"Если вы переместили эту анкету с другого сервера, и некоторые из ваших " +"контактов не получили ваши обновления, попробуйте нажать эту кнопку." -#: ../../mod/settings.php:1195 +#: mod/settings.php:1289 msgid "Resend relocate message to contacts" msgstr "Отправить перемещённые сообщения контактам" -#: ../../mod/dfrn_request.php:95 +#: mod/dfrn_request.php:96 msgid "This introduction has already been accepted." msgstr "Этот запрос был уже принят." -#: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:518 +#: mod/dfrn_request.php:119 mod/dfrn_request.php:516 msgid "Profile location is not valid or does not contain profile information." -msgstr "Местоположение профиля является недопустимым или не содержит информацию о профиле." +msgstr "" +"Местоположение профиля является недопустимым или не содержит информацию о " +"профиле." -#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:523 +#: mod/dfrn_request.php:124 mod/dfrn_request.php:521 msgid "Warning: profile location has no identifiable owner name." -msgstr "Внимание: местоположение профиля не имеет идентифицируемого имени владельца." +msgstr "" +"Внимание: местоположение профиля не имеет идентифицируемого имени владельца." -#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:525 +#: mod/dfrn_request.php:126 mod/dfrn_request.php:523 msgid "Warning: profile location has no profile photo." msgstr "Внимание: местоположение профиля не имеет еще фотографии профиля." -#: ../../mod/dfrn_request.php:130 ../../mod/dfrn_request.php:528 +#: mod/dfrn_request.php:129 mod/dfrn_request.php:526 #, php-format msgid "%d required parameter was not found at the given location" msgid_plural "%d required parameters were not found at the given location" msgstr[0] "%d требуемый параметр не был найден в заданном месте" msgstr[1] "%d требуемых параметров не были найдены в заданном месте" msgstr[2] "%d требуемых параметров не были найдены в заданном месте" +msgstr[3] "%d требуемых параметров не были найдены в заданном месте" -#: ../../mod/dfrn_request.php:172 +#: mod/dfrn_request.php:172 msgid "Introduction complete." msgstr "Запрос создан." -#: ../../mod/dfrn_request.php:214 +#: mod/dfrn_request.php:214 msgid "Unrecoverable protocol error." msgstr "Неисправимая ошибка протокола." -#: ../../mod/dfrn_request.php:242 +#: mod/dfrn_request.php:242 msgid "Profile unavailable." msgstr "Профиль недоступен." -#: ../../mod/dfrn_request.php:267 +#: mod/dfrn_request.php:267 #, php-format msgid "%s has received too many connection requests today." msgstr "К %s пришло сегодня слишком много запросов на подключение." -#: ../../mod/dfrn_request.php:268 +#: mod/dfrn_request.php:268 msgid "Spam protection measures have been invoked." msgstr "Были применены меры защиты от спама." -#: ../../mod/dfrn_request.php:269 +#: mod/dfrn_request.php:269 msgid "Friends are advised to please try again in 24 hours." msgstr "Друзья советуют попробовать еще раз в ближайшие 24 часа." -#: ../../mod/dfrn_request.php:331 +#: mod/dfrn_request.php:331 msgid "Invalid locator" msgstr "Недопустимый локатор" -#: ../../mod/dfrn_request.php:340 +#: mod/dfrn_request.php:340 msgid "Invalid email address." msgstr "Неверный адрес электронной почты." -#: ../../mod/dfrn_request.php:367 +#: mod/dfrn_request.php:367 msgid "This account has not been configured for email. Request failed." msgstr "Этот аккаунт не настроен для электронной почты. Запрос не удался." -#: ../../mod/dfrn_request.php:463 -msgid "Unable to resolve your name at the provided location." -msgstr "Не удается установить ваше имя на предложенном местоположении." - -#: ../../mod/dfrn_request.php:476 +#: mod/dfrn_request.php:474 msgid "You have already introduced yourself here." msgstr "Вы уже ввели информацию о себе здесь." -#: ../../mod/dfrn_request.php:480 +#: mod/dfrn_request.php:478 #, php-format msgid "Apparently you are already friends with %s." msgstr "Похоже, что вы уже друзья с %s." -#: ../../mod/dfrn_request.php:501 +#: mod/dfrn_request.php:499 msgid "Invalid profile URL." msgstr "Неверный URL профиля." -#: ../../mod/dfrn_request.php:507 ../../include/follow.php:27 +#: mod/dfrn_request.php:505 include/follow.php:72 msgid "Disallowed profile URL." msgstr "Запрещенный URL профиля." -#: ../../mod/dfrn_request.php:597 +#: mod/dfrn_request.php:596 msgid "Your introduction has been sent." msgstr "Ваш запрос отправлен." -#: ../../mod/dfrn_request.php:650 +#: mod/dfrn_request.php:636 +msgid "" +"Remote subscription can't be done for your network. Please subscribe " +"directly on your system." +msgstr "" + +#: mod/dfrn_request.php:659 msgid "Please login to confirm introduction." msgstr "Для подтверждения запроса войдите пожалуйста с паролем." -#: ../../mod/dfrn_request.php:660 +#: mod/dfrn_request.php:669 msgid "" -"Incorrect identity currently logged in. Please login to " -"this profile." -msgstr "Неверно идентифицирован вход. Пожалуйста, войдите в этот профиль." +"Incorrect identity currently logged in. Please login to this profile." +msgstr "" +"Неверно идентифицирован вход. Пожалуйста, войдите в этот " +"профиль." -#: ../../mod/dfrn_request.php:671 +#: mod/dfrn_request.php:683 mod/dfrn_request.php:700 +msgid "Confirm" +msgstr "Подтвердить" + +#: mod/dfrn_request.php:695 msgid "Hide this contact" msgstr "Скрыть этот контакт" -#: ../../mod/dfrn_request.php:674 +#: mod/dfrn_request.php:698 #, php-format msgid "Welcome home %s." msgstr "Добро пожаловать домой, %s!" -#: ../../mod/dfrn_request.php:675 +#: mod/dfrn_request.php:699 #, php-format msgid "Please confirm your introduction/connection request to %s." -msgstr "Пожалуйста, подтвердите краткую информацию / запрос на подключение к %s." +msgstr "" +"Пожалуйста, подтвердите краткую информацию / запрос на подключение к %s." -#: ../../mod/dfrn_request.php:676 -msgid "Confirm" -msgstr "Подтвердить" - -#: ../../mod/dfrn_request.php:804 +#: mod/dfrn_request.php:828 msgid "" "Please enter your 'Identity Address' from one of the following supported " "communications networks:" -msgstr "Пожалуйста, введите ваш 'идентификационный адрес' одной из следующих поддерживаемых социальных сетей:" +msgstr "" +"Пожалуйста, введите ваш 'идентификационный адрес' одной из следующих " +"поддерживаемых социальных сетей:" -#: ../../mod/dfrn_request.php:824 +#: mod/dfrn_request.php:849 +#, php-format msgid "" -"If you are not yet a member of the free social web, follow this link to find a public" -" Friendica site and join us today." -msgstr "Если вы еще не являетесь членом свободной социальной сети, перейдите по этой ссылке, чтобы найти публичный сервер Friendica и присоединиться к нам сейчас ." +"If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today." +msgstr "" -#: ../../mod/dfrn_request.php:827 +#: mod/dfrn_request.php:854 msgid "Friend/Connection Request" msgstr "Запрос в друзья / на подключение" -#: ../../mod/dfrn_request.php:828 +#: mod/dfrn_request.php:855 msgid "" "Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " "testuser@identi.ca" -msgstr "Примеры: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca" +msgstr "" +"Примеры: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " +"testuser@identi.ca" -#: ../../mod/dfrn_request.php:829 -msgid "Please answer the following:" -msgstr "Пожалуйста, ответьте следующее:" - -#: ../../mod/dfrn_request.php:830 -#, php-format -msgid "Does %s know you?" -msgstr "%s знает вас?" - -#: ../../mod/dfrn_request.php:834 -msgid "Add a personal note:" -msgstr "Добавить личную заметку:" - -#: ../../mod/dfrn_request.php:836 ../../include/contact_selectors.php:76 +#: mod/dfrn_request.php:863 include/contact_selectors.php:76 msgid "Friendica" msgstr "Friendica" -#: ../../mod/dfrn_request.php:837 +#: mod/dfrn_request.php:864 msgid "StatusNet/Federated Social Web" msgstr "StatusNet / Federated Social Web" -#: ../../mod/dfrn_request.php:839 +#: mod/dfrn_request.php:866 #, php-format msgid "" -" - please do not use this form. Instead, enter %s into your Diaspora search" -" bar." -msgstr "Участники сети Diaspora: пожалуйста, не пользуйтесь этой формой. Вместо этого введите %s в строке поиска Diaspora" +" - please do not use this form. Instead, enter %s into your Diaspora search " +"bar." +msgstr "" +"Участники сети Diaspora: пожалуйста, не пользуйтесь этой формой. Вместо " +"этого введите %s в строке поиска Diaspora" -#: ../../mod/dfrn_request.php:840 -msgid "Your Identity Address:" -msgstr "Ваш идентификационный адрес:" - -#: ../../mod/dfrn_request.php:843 -msgid "Submit Request" -msgstr "Отправить запрос" - -#: ../../mod/register.php:90 +#: mod/register.php:92 msgid "" "Registration successful. Please check your email for further instructions." -msgstr "Регистрация успешна. Пожалуйста, проверьте свою электронную почту для получения дальнейших инструкций." +msgstr "" +"Регистрация успешна. Пожалуйста, проверьте свою электронную почту для " +"получения дальнейших инструкций." -#: ../../mod/register.php:96 +#: mod/register.php:97 #, php-format msgid "" "Failed to send email message. Here your accout details:
login: %s
" "password: %s

You can change your password after login." msgstr "" -#: ../../mod/register.php:105 +#: mod/register.php:104 +msgid "Registration successful." +msgstr "" + +#: mod/register.php:110 msgid "Your registration can not be processed." msgstr "Ваша регистрация не может быть обработана." -#: ../../mod/register.php:148 +#: mod/register.php:153 msgid "Your registration is pending approval by the site owner." msgstr "Ваша регистрация в ожидании одобрения владельцем сайта." -#: ../../mod/register.php:186 ../../mod/uimport.php:50 +#: mod/register.php:191 mod/uimport.php:50 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." -msgstr "Этот сайт превысил допустимое количество ежедневных регистраций. Пожалуйста, повторите попытку завтра." +msgstr "" +"Этот сайт превысил допустимое количество ежедневных регистраций. Пожалуйста, " +"повторите попытку завтра." -#: ../../mod/register.php:214 +#: mod/register.php:219 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking 'Register'." -msgstr "Вы можете (по желанию), заполнить эту форму с помощью OpenID, поддерживая ваш OpenID и нажав клавишу \"Регистрация\"." +msgstr "" +"Вы можете (по желанию), заполнить эту форму с помощью OpenID, поддерживая " +"ваш OpenID и нажав клавишу \"Регистрация\"." -#: ../../mod/register.php:215 +#: mod/register.php:220 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." -msgstr "Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и заполните остальные элементы." +msgstr "" +"Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и " +"заполните остальные элементы." -#: ../../mod/register.php:216 +#: mod/register.php:221 msgid "Your OpenID (optional): " msgstr "Ваш OpenID (необязательно):" -#: ../../mod/register.php:230 +#: mod/register.php:235 msgid "Include your profile in member directory?" msgstr "Включить ваш профиль в каталог участников?" -#: ../../mod/register.php:251 +#: mod/register.php:259 msgid "Membership on this site is by invitation only." msgstr "Членство на сайте только по приглашению." -#: ../../mod/register.php:252 +#: mod/register.php:260 msgid "Your invitation ID: " msgstr "ID вашего приглашения:" -#: ../../mod/register.php:263 -msgid "Your Full Name (e.g. Joe Smith): " -msgstr "Ваше полное имя (например, Joe Smith): " +#: mod/register.php:271 +msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " +msgstr "" -#: ../../mod/register.php:264 +#: mod/register.php:272 msgid "Your Email Address: " msgstr "Ваш адрес электронной почты: " -#: ../../mod/register.php:265 +#: mod/register.php:274 +msgid "Leave empty for an auto generated password." +msgstr "" + +#: mod/register.php:276 msgid "" "Choose a profile nickname. This must begin with a text character. Your " -"profile address on this site will then be " -"'nickname@$sitename'." -msgstr "Выбор псевдонима профиля. Он должен начинаться с буквы. Адрес вашего профиля на данном сайте будет в этом случае 'nickname@$sitename'." +"profile address on this site will then be 'nickname@$sitename'." +msgstr "" +"Выбор псевдонима профиля. Он должен начинаться с буквы. Адрес вашего профиля " +"на данном сайте будет в этом случае 'nickname@$sitename'." -#: ../../mod/register.php:266 +#: mod/register.php:277 msgid "Choose a nickname: " msgstr "Выберите псевдоним: " -#: ../../mod/register.php:269 ../../boot.php:1241 ../../include/nav.php:109 +#: mod/register.php:280 boot.php:1405 include/nav.php:108 msgid "Register" msgstr "Регистрация" -#: ../../mod/register.php:275 ../../mod/uimport.php:64 +#: mod/register.php:286 mod/uimport.php:64 msgid "Import" msgstr "Импорт" -#: ../../mod/register.php:276 +#: mod/register.php:287 msgid "Import your profile to this friendica instance" msgstr "Импорт своего профиля в этот экземпляр friendica" -#: ../../mod/maintenance.php:5 +#: mod/maintenance.php:5 msgid "System down for maintenance" msgstr "Система закрыта на техническое обслуживание" -#: ../../mod/search.php:99 ../../include/text.php:953 -#: ../../include/text.php:954 ../../include/nav.php:119 +#: mod/search.php:100 +msgid "Only logged in users are permitted to perform a search." +msgstr "" + +#: mod/search.php:124 +msgid "Too Many Requests" +msgstr "" + +#: mod/search.php:125 +msgid "Only one search per minute is permitted for not logged in users." +msgstr "" + +#: mod/search.php:136 include/text.php:1003 include/nav.php:118 msgid "Search" msgstr "Поиск" -#: ../../mod/directory.php:51 ../../view/theme/diabook/theme.php:525 -msgid "Global Directory" -msgstr "Глобальный каталог" +#: mod/search.php:234 +#, php-format +msgid "Items tagged with: %s" +msgstr "" -#: ../../mod/directory.php:59 -msgid "Find on this site" -msgstr "Найти на этом сайте" +#: mod/search.php:236 +#, php-format +msgid "Search results for: %s" +msgstr "" -#: ../../mod/directory.php:62 -msgid "Site Directory" -msgstr "Каталог сайта" - -#: ../../mod/directory.php:113 ../../mod/profiles.php:750 -msgid "Age: " -msgstr "Возраст: " - -#: ../../mod/directory.php:116 -msgid "Gender: " -msgstr "Пол: " - -#: ../../mod/directory.php:138 ../../boot.php:1650 -#: ../../include/profile_advanced.php:17 -msgid "Gender:" -msgstr "Пол:" - -#: ../../mod/directory.php:140 ../../boot.php:1653 -#: ../../include/profile_advanced.php:37 +#: mod/directory.php:149 include/identity.php:313 include/identity.php:610 msgid "Status:" msgstr "Статус:" -#: ../../mod/directory.php:142 ../../boot.php:1655 -#: ../../include/profile_advanced.php:48 +#: mod/directory.php:151 include/identity.php:315 include/identity.php:621 msgid "Homepage:" msgstr "Домашняя страничка:" -#: ../../mod/directory.php:144 ../../boot.php:1657 -#: ../../include/profile_advanced.php:58 -msgid "About:" -msgstr "О себе:" +#: mod/directory.php:203 view/theme/diabook/theme.php:525 +#: view/theme/vier/theme.php:205 +msgid "Global Directory" +msgstr "Глобальный каталог" -#: ../../mod/directory.php:189 +#: mod/directory.php:205 +msgid "Find on this site" +msgstr "Найти на этом сайте" + +#: mod/directory.php:207 +msgid "Finding:" +msgstr "" + +#: mod/directory.php:209 +msgid "Site Directory" +msgstr "Каталог сайта" + +#: mod/directory.php:216 msgid "No entries (some entries may be hidden)." msgstr "Нет записей (некоторые записи могут быть скрыты)." -#: ../../mod/delegate.php:101 +#: mod/delegate.php:101 msgid "No potential page delegates located." msgstr "" -#: ../../mod/delegate.php:130 ../../include/nav.php:170 +#: mod/delegate.php:130 include/nav.php:180 msgid "Delegate Page Management" msgstr "Делегировать управление страницей" -#: ../../mod/delegate.php:132 +#: mod/delegate.php:132 msgid "" "Delegates are able to manage all aspects of this account/page except for " "basic account settings. Please do not delegate your personal account to " "anybody that you do not trust completely." -msgstr "Доверенные лица могут управлять всеми аспектами этого аккаунта/страницы, за исключением основных настроек аккаунта. Пожалуйста, не предоставляйте доступ в личный кабинет тому, кому вы не полностью доверяете." +msgstr "" +"Доверенные лица могут управлять всеми аспектами этого аккаунта/страницы, за " +"исключением основных настроек аккаунта. Пожалуйста, не предоставляйте доступ " +"в личный кабинет тому, кому вы не полностью доверяете." -#: ../../mod/delegate.php:133 +#: mod/delegate.php:133 msgid "Existing Page Managers" msgstr "Существующие менеджеры страницы" -#: ../../mod/delegate.php:135 +#: mod/delegate.php:135 msgid "Existing Page Delegates" msgstr "Существующие уполномоченные страницы" -#: ../../mod/delegate.php:137 +#: mod/delegate.php:137 msgid "Potential Delegates" msgstr "Возможные доверенные лица" -#: ../../mod/delegate.php:140 +#: mod/delegate.php:140 msgid "Add" msgstr "Добавить" -#: ../../mod/delegate.php:141 +#: mod/delegate.php:141 msgid "No entries." msgstr "Нет записей." -#: ../../mod/common.php:42 -msgid "Common Friends" -msgstr "Общие друзья" - -#: ../../mod/common.php:78 +#: mod/common.php:86 msgid "No contacts in common." msgstr "Нет общих контактов." -#: ../../mod/uexport.php:77 +#: mod/uexport.php:77 msgid "Export account" msgstr "Экспорт аккаунта" -#: ../../mod/uexport.php:77 +#: mod/uexport.php:77 msgid "" "Export your account info and contacts. Use this to make a backup of your " "account and/or to move it to another server." -msgstr "Экспорт ваших регистрационных данные и контактов. Используйте, чтобы создать резервную копию вашего аккаунта и/или переместить его на другой сервер." +msgstr "" +"Экспорт ваших регистрационных данные и контактов. Используйте, чтобы создать " +"резервную копию вашего аккаунта и/или переместить его на другой сервер." -#: ../../mod/uexport.php:78 +#: mod/uexport.php:78 msgid "Export all" msgstr "Экспорт всего" -#: ../../mod/uexport.php:78 +#: mod/uexport.php:78 msgid "" "Export your accout info, contacts and all your items as json. Could be a " "very big file, and could take a lot of time. Use this to make a full backup " "of your account (photos are not exported)" -msgstr "Экспорт информации вашего аккаунта, контактов и всех ваших пунктов, как JSON. Может получиться очень большой файл и это может занять много времени. Используйте, чтобы создать полную резервную копию вашего аккаунта (фото не экспортируются)" +msgstr "" +"Экспорт информации вашего аккаунта, контактов и всех ваших пунктов, как " +"JSON. Может получиться очень большой файл и это может занять много времени. " +"Используйте, чтобы создать полную резервную копию вашего аккаунта (фото не " +"экспортируются)" -#: ../../mod/mood.php:62 ../../include/conversation.php:227 +#: mod/mood.php:62 include/conversation.php:239 #, php-format msgid "%1$s is currently %2$s" msgstr "" -#: ../../mod/mood.php:133 +#: mod/mood.php:133 msgid "Mood" msgstr "Настроение" -#: ../../mod/mood.php:134 +#: mod/mood.php:134 msgid "Set your current mood and tell your friends" msgstr "Напишите о вашем настроении и расскажите своим друзьям" -#: ../../mod/suggest.php:27 +#: mod/suggest.php:27 msgid "Do you really want to delete this suggestion?" msgstr "Вы действительно хотите удалить это предложение?" -#: ../../mod/suggest.php:68 ../../include/contact_widgets.php:35 -#: ../../view/theme/diabook/theme.php:527 -msgid "Friend Suggestions" -msgstr "Предложения друзей" - -#: ../../mod/suggest.php:74 +#: mod/suggest.php:71 msgid "" "No suggestions available. If this is a new site, please try again in 24 " "hours." -msgstr "Нет предложений. Если это новый сайт, пожалуйста, попробуйте снова через 24 часа." +msgstr "" +"Нет предложений. Если это новый сайт, пожалуйста, попробуйте снова через 24 " +"часа." -#: ../../mod/suggest.php:92 +#: mod/suggest.php:83 mod/suggest.php:101 msgid "Ignore/Hide" msgstr "Проигнорировать/Скрыть" -#: ../../mod/profiles.php:37 +#: mod/suggest.php:111 include/contact_widgets.php:35 +#: view/theme/diabook/theme.php:527 view/theme/vier/theme.php:207 +msgid "Friend Suggestions" +msgstr "Предложения друзей" + +#: mod/profiles.php:37 msgid "Profile deleted." msgstr "Профиль удален." -#: ../../mod/profiles.php:55 ../../mod/profiles.php:89 +#: mod/profiles.php:55 mod/profiles.php:89 msgid "Profile-" msgstr "Профиль-" -#: ../../mod/profiles.php:74 ../../mod/profiles.php:117 +#: mod/profiles.php:74 mod/profiles.php:117 msgid "New profile created." msgstr "Новый профиль создан." -#: ../../mod/profiles.php:95 +#: mod/profiles.php:95 msgid "Profile unavailable to clone." msgstr "Профиль недоступен для клонирования." -#: ../../mod/profiles.php:189 +#: mod/profiles.php:189 msgid "Profile Name is required." msgstr "Необходимо имя профиля." -#: ../../mod/profiles.php:340 +#: mod/profiles.php:336 msgid "Marital Status" msgstr "Семейное положение" -#: ../../mod/profiles.php:344 +#: mod/profiles.php:340 msgid "Romantic Partner" msgstr "Любимый человек" -#: ../../mod/profiles.php:348 +#: mod/profiles.php:344 mod/photos.php:1647 include/conversation.php:508 msgid "Likes" msgstr "Лайки" -#: ../../mod/profiles.php:352 +#: mod/profiles.php:348 mod/photos.php:1647 include/conversation.php:508 msgid "Dislikes" msgstr "Дизлайк" -#: ../../mod/profiles.php:356 +#: mod/profiles.php:352 msgid "Work/Employment" msgstr "Работа/Занятость" -#: ../../mod/profiles.php:359 +#: mod/profiles.php:355 msgid "Religion" msgstr "Религия" -#: ../../mod/profiles.php:363 +#: mod/profiles.php:359 msgid "Political Views" msgstr "Политические взгляды" -#: ../../mod/profiles.php:367 +#: mod/profiles.php:363 msgid "Gender" msgstr "Пол" -#: ../../mod/profiles.php:371 +#: mod/profiles.php:367 msgid "Sexual Preference" msgstr "Сексуальные предпочтения" -#: ../../mod/profiles.php:375 +#: mod/profiles.php:371 msgid "Homepage" msgstr "Домашняя страница" -#: ../../mod/profiles.php:379 ../../mod/profiles.php:698 +#: mod/profiles.php:375 mod/profiles.php:708 msgid "Interests" msgstr "Хобби / Интересы" -#: ../../mod/profiles.php:383 +#: mod/profiles.php:379 msgid "Address" msgstr "Адрес" -#: ../../mod/profiles.php:390 ../../mod/profiles.php:694 +#: mod/profiles.php:386 mod/profiles.php:704 msgid "Location" msgstr "Местонахождение" -#: ../../mod/profiles.php:473 +#: mod/profiles.php:469 msgid "Profile updated." msgstr "Профиль обновлен." -#: ../../mod/profiles.php:568 +#: mod/profiles.php:565 msgid " and " msgstr "и" -#: ../../mod/profiles.php:576 +#: mod/profiles.php:573 msgid "public profile" msgstr "публичный профиль" -#: ../../mod/profiles.php:579 +#: mod/profiles.php:576 #, php-format msgid "%1$s changed %2$s to “%3$s”" msgstr "%1$s изменились с %2$s на “%3$s”" -#: ../../mod/profiles.php:580 +#: mod/profiles.php:577 #, php-format msgid " - Visit %1$s's %2$s" msgstr " - Посетить профиль %1$s [%2$s]" -#: ../../mod/profiles.php:583 +#: mod/profiles.php:580 #, php-format msgid "%1$s has an updated %2$s, changing %3$s." msgstr "" -#: ../../mod/profiles.php:658 +#: mod/profiles.php:655 msgid "Hide contacts and friends:" msgstr "" -#: ../../mod/profiles.php:663 +#: mod/profiles.php:660 msgid "Hide your contact/friend list from viewers of this profile?" msgstr "Скрывать ваш список контактов / друзей от посетителей этого профиля?" -#: ../../mod/profiles.php:685 +#: mod/profiles.php:684 +msgid "Show more profile fields:" +msgstr "" + +#: mod/profiles.php:695 msgid "Edit Profile Details" msgstr "Редактировать детали профиля" -#: ../../mod/profiles.php:687 +#: mod/profiles.php:697 msgid "Change Profile Photo" msgstr "Изменить фото профиля" -#: ../../mod/profiles.php:688 +#: mod/profiles.php:698 msgid "View this profile" msgstr "Просмотреть этот профиль" -#: ../../mod/profiles.php:689 +#: mod/profiles.php:699 msgid "Create a new profile using these settings" msgstr "Создать новый профиль, используя эти настройки" -#: ../../mod/profiles.php:690 +#: mod/profiles.php:700 msgid "Clone this profile" msgstr "Клонировать этот профиль" -#: ../../mod/profiles.php:691 +#: mod/profiles.php:701 msgid "Delete this profile" msgstr "Удалить этот профиль" -#: ../../mod/profiles.php:692 +#: mod/profiles.php:702 msgid "Basic information" msgstr "" -#: ../../mod/profiles.php:693 +#: mod/profiles.php:703 msgid "Profile picture" msgstr "" -#: ../../mod/profiles.php:695 +#: mod/profiles.php:705 msgid "Preferences" msgstr "" -#: ../../mod/profiles.php:696 +#: mod/profiles.php:706 msgid "Status information" msgstr "" -#: ../../mod/profiles.php:697 +#: mod/profiles.php:707 msgid "Additional information" msgstr "" -#: ../../mod/profiles.php:700 +#: mod/profiles.php:710 msgid "Profile Name:" msgstr "Имя профиля:" -#: ../../mod/profiles.php:701 +#: mod/profiles.php:711 msgid "Your Full Name:" msgstr "Ваше полное имя:" -#: ../../mod/profiles.php:702 +#: mod/profiles.php:712 msgid "Title/Description:" msgstr "Заголовок / Описание:" -#: ../../mod/profiles.php:703 +#: mod/profiles.php:713 msgid "Your Gender:" msgstr "Ваш пол:" -#: ../../mod/profiles.php:704 -#, php-format -msgid "Birthday (%s):" -msgstr "День рождения (%s):" +#: mod/profiles.php:714 +msgid "Birthday :" +msgstr "" -#: ../../mod/profiles.php:705 +#: mod/profiles.php:715 msgid "Street Address:" msgstr "Адрес:" -#: ../../mod/profiles.php:706 +#: mod/profiles.php:716 msgid "Locality/City:" msgstr "Город / Населенный пункт:" -#: ../../mod/profiles.php:707 +#: mod/profiles.php:717 msgid "Postal/Zip Code:" msgstr "Почтовый индекс:" -#: ../../mod/profiles.php:708 +#: mod/profiles.php:718 msgid "Country:" msgstr "Страна:" -#: ../../mod/profiles.php:709 +#: mod/profiles.php:719 msgid "Region/State:" msgstr "Район / Область:" -#: ../../mod/profiles.php:710 +#: mod/profiles.php:720 msgid " Marital Status:" msgstr " Семейное положение:" -#: ../../mod/profiles.php:711 +#: mod/profiles.php:721 msgid "Who: (if applicable)" msgstr "Кто: (если требуется)" -#: ../../mod/profiles.php:712 +#: mod/profiles.php:722 msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "Примеры: cathy123, Кэти Уильямс, cathy@example.com" -#: ../../mod/profiles.php:713 +#: mod/profiles.php:723 msgid "Since [date]:" msgstr "С какого времени [дата]:" -#: ../../mod/profiles.php:714 ../../include/profile_advanced.php:46 +#: mod/profiles.php:724 include/identity.php:619 msgid "Sexual Preference:" msgstr "Сексуальные предпочтения:" -#: ../../mod/profiles.php:715 +#: mod/profiles.php:725 msgid "Homepage URL:" msgstr "Адрес домашней странички:" -#: ../../mod/profiles.php:716 ../../include/profile_advanced.php:50 +#: mod/profiles.php:726 include/identity.php:623 msgid "Hometown:" msgstr "Родной город:" -#: ../../mod/profiles.php:717 ../../include/profile_advanced.php:54 +#: mod/profiles.php:727 include/identity.php:627 msgid "Political Views:" msgstr "Политические взгляды:" -#: ../../mod/profiles.php:718 +#: mod/profiles.php:728 msgid "Religious Views:" msgstr "Религиозные взгляды:" -#: ../../mod/profiles.php:719 +#: mod/profiles.php:729 msgid "Public Keywords:" msgstr "Общественные ключевые слова:" -#: ../../mod/profiles.php:720 +#: mod/profiles.php:730 msgid "Private Keywords:" msgstr "Личные ключевые слова:" -#: ../../mod/profiles.php:721 ../../include/profile_advanced.php:62 +#: mod/profiles.php:731 include/identity.php:635 msgid "Likes:" msgstr "Нравится:" -#: ../../mod/profiles.php:722 ../../include/profile_advanced.php:64 +#: mod/profiles.php:732 include/identity.php:637 msgid "Dislikes:" msgstr "Не нравится:" -#: ../../mod/profiles.php:723 +#: mod/profiles.php:733 msgid "Example: fishing photography software" msgstr "Пример: рыбалка фотографии программное обеспечение" -#: ../../mod/profiles.php:724 +#: mod/profiles.php:734 msgid "(Used for suggesting potential friends, can be seen by others)" -msgstr "(Используется для предложения потенциальным друзьям, могут увидеть другие)" +msgstr "" +"(Используется для предложения потенциальным друзьям, могут увидеть другие)" -#: ../../mod/profiles.php:725 +#: mod/profiles.php:735 msgid "(Used for searching profiles, never shown to others)" msgstr "(Используется для поиска профилей, никогда не показывается другим)" -#: ../../mod/profiles.php:726 +#: mod/profiles.php:736 msgid "Tell us about yourself..." msgstr "Расскажите нам о себе ..." -#: ../../mod/profiles.php:727 +#: mod/profiles.php:737 msgid "Hobbies/Interests" msgstr "Хобби / Интересы" -#: ../../mod/profiles.php:728 +#: mod/profiles.php:738 msgid "Contact information and Social Networks" msgstr "Контактная информация и социальные сети" -#: ../../mod/profiles.php:729 +#: mod/profiles.php:739 msgid "Musical interests" msgstr "Музыкальные интересы" -#: ../../mod/profiles.php:730 +#: mod/profiles.php:740 msgid "Books, literature" msgstr "Книги, литература" -#: ../../mod/profiles.php:731 +#: mod/profiles.php:741 msgid "Television" msgstr "Телевидение" -#: ../../mod/profiles.php:732 +#: mod/profiles.php:742 msgid "Film/dance/culture/entertainment" msgstr "Кино / танцы / культура / развлечения" -#: ../../mod/profiles.php:733 +#: mod/profiles.php:743 msgid "Love/romance" msgstr "Любовь / романтика" -#: ../../mod/profiles.php:734 +#: mod/profiles.php:744 msgid "Work/employment" msgstr "Работа / занятость" -#: ../../mod/profiles.php:735 +#: mod/profiles.php:745 msgid "School/education" msgstr "Школа / образование" -#: ../../mod/profiles.php:740 +#: mod/profiles.php:750 msgid "" "This is your public profile.
It may " "be visible to anybody using the internet." -msgstr "Это ваш публичный профиль.
Он может быть виден каждому через Интернет." +msgstr "" +"Это ваш публичный профиль.
Он может " +"быть виден каждому через Интернет." -#: ../../mod/profiles.php:803 +#: mod/profiles.php:760 +msgid "Age: " +msgstr "Возраст: " + +#: mod/profiles.php:813 msgid "Edit/Manage Profiles" msgstr "Редактировать профиль" -#: ../../mod/profiles.php:804 ../../boot.php:1611 ../../boot.php:1637 +#: mod/profiles.php:814 include/identity.php:260 include/identity.php:286 msgid "Change profile photo" msgstr "Изменить фото профиля" -#: ../../mod/profiles.php:805 ../../boot.php:1612 +#: mod/profiles.php:815 include/identity.php:261 msgid "Create New Profile" msgstr "Создать новый профиль" -#: ../../mod/profiles.php:816 ../../boot.php:1622 +#: mod/profiles.php:826 include/identity.php:271 msgid "Profile Image" msgstr "Фото профиля" -#: ../../mod/profiles.php:818 ../../boot.php:1625 +#: mod/profiles.php:828 include/identity.php:274 msgid "visible to everybody" msgstr "видимый всем" -#: ../../mod/profiles.php:819 ../../boot.php:1626 +#: mod/profiles.php:829 include/identity.php:275 msgid "Edit visibility" msgstr "Редактировать видимость" -#: ../../mod/editpost.php:17 ../../mod/editpost.php:27 +#: mod/editpost.php:17 mod/editpost.php:27 msgid "Item not found" msgstr "Элемент не найден" -#: ../../mod/editpost.php:39 +#: mod/editpost.php:40 msgid "Edit post" msgstr "Редактировать сообщение" -#: ../../mod/editpost.php:111 ../../include/conversation.php:1092 +#: mod/editpost.php:111 include/conversation.php:1184 msgid "upload photo" msgstr "загрузить фото" -#: ../../mod/editpost.php:112 ../../include/conversation.php:1093 +#: mod/editpost.php:112 include/conversation.php:1185 msgid "Attach file" -msgstr "Приложить файл" +msgstr "Прикрепить файл" -#: ../../mod/editpost.php:113 ../../include/conversation.php:1094 +#: mod/editpost.php:113 include/conversation.php:1186 msgid "attach file" msgstr "приложить файл" -#: ../../mod/editpost.php:115 ../../include/conversation.php:1096 +#: mod/editpost.php:115 include/conversation.php:1188 msgid "web link" msgstr "веб-ссылка" -#: ../../mod/editpost.php:116 ../../include/conversation.php:1097 +#: mod/editpost.php:116 include/conversation.php:1189 msgid "Insert video link" msgstr "Вставить ссылку видео" -#: ../../mod/editpost.php:117 ../../include/conversation.php:1098 +#: mod/editpost.php:117 include/conversation.php:1190 msgid "video link" msgstr "видео-ссылка" -#: ../../mod/editpost.php:118 ../../include/conversation.php:1099 +#: mod/editpost.php:118 include/conversation.php:1191 msgid "Insert audio link" msgstr "Вставить ссылку аудио" -#: ../../mod/editpost.php:119 ../../include/conversation.php:1100 +#: mod/editpost.php:119 include/conversation.php:1192 msgid "audio link" msgstr "аудио-ссылка" -#: ../../mod/editpost.php:120 ../../include/conversation.php:1101 +#: mod/editpost.php:120 include/conversation.php:1193 msgid "Set your location" msgstr "Задать ваше местоположение" -#: ../../mod/editpost.php:121 ../../include/conversation.php:1102 +#: mod/editpost.php:121 include/conversation.php:1194 msgid "set location" msgstr "установить местонахождение" -#: ../../mod/editpost.php:122 ../../include/conversation.php:1103 +#: mod/editpost.php:122 include/conversation.php:1195 msgid "Clear browser location" msgstr "Очистить местонахождение браузера" -#: ../../mod/editpost.php:123 ../../include/conversation.php:1104 +#: mod/editpost.php:123 include/conversation.php:1196 msgid "clear location" msgstr "убрать местонахождение" -#: ../../mod/editpost.php:125 ../../include/conversation.php:1110 +#: mod/editpost.php:125 include/conversation.php:1202 msgid "Permission settings" msgstr "Настройки разрешений" -#: ../../mod/editpost.php:133 ../../include/conversation.php:1119 +#: mod/editpost.php:133 include/acl_selectors.php:344 msgid "CC: email addresses" msgstr "Копии на email адреса" -#: ../../mod/editpost.php:134 ../../include/conversation.php:1120 +#: mod/editpost.php:134 include/conversation.php:1211 msgid "Public post" msgstr "Публичное сообщение" -#: ../../mod/editpost.php:137 ../../include/conversation.php:1106 +#: mod/editpost.php:137 include/conversation.php:1198 msgid "Set title" msgstr "Установить заголовок" -#: ../../mod/editpost.php:139 ../../include/conversation.php:1108 +#: mod/editpost.php:139 include/conversation.php:1200 msgid "Categories (comma-separated list)" msgstr "Категории (список через запятую)" -#: ../../mod/editpost.php:140 ../../include/conversation.php:1122 +#: mod/editpost.php:140 include/acl_selectors.php:345 msgid "Example: bob@example.com, mary@example.com" msgstr "Пример: bob@example.com, mary@example.com" -#: ../../mod/friendica.php:59 +#: mod/friendica.php:70 msgid "This is Friendica, version" msgstr "Это Friendica, версия" -#: ../../mod/friendica.php:60 +#: mod/friendica.php:71 msgid "running at web location" msgstr "работает на веб-узле" -#: ../../mod/friendica.php:62 +#: mod/friendica.php:73 msgid "" "Please visit Friendica.com to learn " "more about the Friendica project." -msgstr "Пожалуйста, посетите сайт Friendica.com, чтобы узнать больше о проекте Friendica." +msgstr "" +"Пожалуйста, посетите сайт Friendica.com, чтобы узнать больше о проекте Friendica." -#: ../../mod/friendica.php:64 +#: mod/friendica.php:75 msgid "Bug reports and issues: please visit" msgstr "Отчет об ошибках и проблемах: пожалуйста, посетите" -#: ../../mod/friendica.php:65 +#: mod/friendica.php:75 +msgid "the bugtracker at github" +msgstr "" + +#: mod/friendica.php:76 msgid "" "Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " "dot com" -msgstr "Предложения, похвала, пожертвования? Пишите на \"info\" на Friendica - точка com" +msgstr "" +"Предложения, похвала, пожертвования? Пишите на \"info\" на Friendica - точка " +"com" -#: ../../mod/friendica.php:79 +#: mod/friendica.php:90 msgid "Installed plugins/addons/apps:" msgstr "Установленные плагины / добавки / приложения:" -#: ../../mod/friendica.php:92 +#: mod/friendica.php:103 msgid "No installed plugins/addons/apps" msgstr "Нет установленных плагинов / добавок / приложений" -#: ../../mod/api.php:76 ../../mod/api.php:102 +#: mod/api.php:76 mod/api.php:102 msgid "Authorize application connection" msgstr "Разрешить связь с приложением" -#: ../../mod/api.php:77 +#: mod/api.php:77 msgid "Return to your app and insert this Securty Code:" msgstr "Вернитесь в ваше приложение и задайте этот код:" -#: ../../mod/api.php:89 +#: mod/api.php:89 msgid "Please login to continue." msgstr "Пожалуйста, войдите для продолжения." -#: ../../mod/api.php:104 +#: mod/api.php:104 msgid "" -"Do you want to authorize this application to access your posts and contacts," -" and/or create new posts for you?" -msgstr "Вы действительно хотите разрешить этому приложению доступ к своим постам и контактам, а также создавать новые записи от вашего имени?" +"Do you want to authorize this application to access your posts and contacts, " +"and/or create new posts for you?" +msgstr "" +"Вы действительно хотите разрешить этому приложению доступ к своим постам и " +"контактам, а также создавать новые записи от вашего имени?" -#: ../../mod/lockview.php:31 ../../mod/lockview.php:39 +#: mod/lockview.php:31 mod/lockview.php:39 msgid "Remote privacy information not available." msgstr "Личная информация удаленно недоступна." -#: ../../mod/lockview.php:48 +#: mod/lockview.php:48 msgid "Visible to:" msgstr "Кто может видеть:" -#: ../../mod/notes.php:44 ../../boot.php:2150 +#: mod/notes.php:46 include/identity.php:730 msgid "Personal Notes" msgstr "Личные заметки" -#: ../../mod/localtime.php:12 ../../include/bb2diaspora.php:148 -#: ../../include/event.php:11 +#: mod/localtime.php:12 include/bb2diaspora.php:148 include/event.php:13 msgid "l F d, Y \\@ g:i A" msgstr "l F d, Y \\@ g:i A" -#: ../../mod/localtime.php:24 +#: mod/localtime.php:24 msgid "Time Conversion" msgstr "История общения" -#: ../../mod/localtime.php:26 +#: mod/localtime.php:26 msgid "" "Friendica provides this service for sharing events with other networks and " "friends in unknown timezones." -msgstr "Friendica предоставляет этот сервис для обмена событиями с другими сетями и друзьями, находящимися в неопределённых часовых поясах." +msgstr "" +"Friendica предоставляет этот сервис для обмена событиями с другими сетями и " +"друзьями, находящимися в неопределённых часовых поясах." -#: ../../mod/localtime.php:30 +#: mod/localtime.php:30 #, php-format msgid "UTC time: %s" msgstr "UTC время: %s" -#: ../../mod/localtime.php:33 +#: mod/localtime.php:33 #, php-format msgid "Current timezone: %s" msgstr "Ваш часовой пояс: %s" -#: ../../mod/localtime.php:36 +#: mod/localtime.php:36 #, php-format msgid "Converted localtime: %s" msgstr "Ваше изменённое время: %s" -#: ../../mod/localtime.php:41 +#: mod/localtime.php:41 msgid "Please select your timezone:" msgstr "Выберите пожалуйста ваш часовой пояс:" -#: ../../mod/poke.php:192 +#: mod/poke.php:191 msgid "Poke/Prod" msgstr "" -#: ../../mod/poke.php:193 +#: mod/poke.php:192 msgid "poke, prod or do other things to somebody" msgstr "" -#: ../../mod/poke.php:194 +#: mod/poke.php:193 msgid "Recipient" msgstr "Получатель" -#: ../../mod/poke.php:195 +#: mod/poke.php:194 msgid "Choose what you wish to do to recipient" msgstr "Выберите действия для получателя" -#: ../../mod/poke.php:198 +#: mod/poke.php:197 msgid "Make this post private" msgstr "Сделать эту запись личной" -#: ../../mod/invite.php:27 +#: mod/repair_ostatus.php:14 +msgid "Resubscribing to OStatus contacts" +msgstr "" + +#: mod/repair_ostatus.php:30 +msgid "Error" +msgstr "Ошибка" + +#: mod/invite.php:27 msgid "Total invitation limit exceeded." msgstr "Превышен общий лимит приглашений." -#: ../../mod/invite.php:49 +#: mod/invite.php:49 #, php-format msgid "%s : Not a valid email address." msgstr "%s: Неверный адрес электронной почты." -#: ../../mod/invite.php:73 +#: mod/invite.php:73 msgid "Please join us on Friendica" msgstr "Пожалуйста, присоединяйтесь к нам на Friendica" -#: ../../mod/invite.php:84 +#: mod/invite.php:84 msgid "Invitation limit exceeded. Please contact your site administrator." -msgstr "Лимит приглашений превышен. Пожалуйста, свяжитесь с администратором сайта." +msgstr "" +"Лимит приглашений превышен. Пожалуйста, свяжитесь с администратором сайта." -#: ../../mod/invite.php:89 +#: mod/invite.php:89 #, php-format msgid "%s : Message delivery failed." msgstr "%s: Доставка сообщения не удалась." -#: ../../mod/invite.php:93 +#: mod/invite.php:93 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "%d сообщение отправлено." msgstr[1] "%d сообщений отправлено." msgstr[2] "%d сообщений отправлено." +msgstr[3] "%d сообщений отправлено." -#: ../../mod/invite.php:112 +#: mod/invite.php:112 msgid "You have no more invitations available" msgstr "У вас нет больше приглашений" -#: ../../mod/invite.php:120 +#: mod/invite.php:120 #, php-format msgid "" "Visit %s for a list of public sites that you can join. Friendica members on " -"other sites can all connect with each other, as well as with members of many" -" other social networks." -msgstr "Посетите %s со списком общедоступных сайтов, к которым вы можете присоединиться. Все участники Friendica на других сайтах могут соединиться друг с другом, а также с участниками многих других социальных сетей." +"other sites can all connect with each other, as well as with members of many " +"other social networks." +msgstr "" +"Посетите %s со списком общедоступных сайтов, к которым вы можете " +"присоединиться. Все участники Friendica на других сайтах могут соединиться " +"друг с другом, а также с участниками многих других социальных сетей." -#: ../../mod/invite.php:122 +#: mod/invite.php:122 #, php-format msgid "" "To accept this invitation, please visit and register at %s or any other " "public Friendica website." -msgstr "Для одобрения этого приглашения, пожалуйста, посетите и зарегистрируйтесь на %s ,или любом другом публичном сервере Friendica" +msgstr "" +"Для одобрения этого приглашения, пожалуйста, посетите и зарегистрируйтесь на " +"%s ,или любом другом публичном сервере Friendica" -#: ../../mod/invite.php:123 +#: mod/invite.php:123 #, php-format msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " "web that is owned and controlled by its members. They can also connect with " "many traditional social networks. See %s for a list of alternate Friendica " "sites you can join." -msgstr "Сайты Friendica, подключившись между собой, могут создать сеть с повышенной безопасностью, которая принадлежит и управляется её членами. Они также могут подключаться ко многим традиционным социальным сетям. См. %s со списком альтернативных сайтов Friendica, к которым вы можете присоединиться." +msgstr "" +"Сайты Friendica, подключившись между собой, могут создать сеть с повышенной " +"безопасностью, которая принадлежит и управляется её членами. Они также могут " +"подключаться ко многим традиционным социальным сетям. См. %s со списком " +"альтернативных сайтов Friendica, к которым вы можете присоединиться." -#: ../../mod/invite.php:126 +#: mod/invite.php:126 msgid "" -"Our apologies. This system is not currently configured to connect with other" -" public sites or invite members." -msgstr "Извините. Эта система в настоящее время не сконфигурирована для соединения с другими общественными сайтами и для приглашения участников." +"Our apologies. This system is not currently configured to connect with other " +"public sites or invite members." +msgstr "" +"Извините. Эта система в настоящее время не сконфигурирована для соединения с " +"другими общественными сайтами и для приглашения участников." -#: ../../mod/invite.php:132 +#: mod/invite.php:132 msgid "Send invitations" msgstr "Отправить приглашения" -#: ../../mod/invite.php:133 +#: mod/invite.php:133 msgid "Enter email addresses, one per line:" msgstr "Введите адреса электронной почты, по одному в строке:" -#: ../../mod/invite.php:135 +#: 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 "Приглашаем Вас присоединиться ко мне и другим близким друзьям на Friendica - помочь нам создать лучшую социальную сеть." +msgstr "" +"Приглашаем Вас присоединиться ко мне и другим близким друзьям на Friendica - " +"помочь нам создать лучшую социальную сеть." -#: ../../mod/invite.php:137 +#: mod/invite.php:137 msgid "You will need to supply this invitation code: $invite_code" msgstr "Вам нужно будет предоставить этот код приглашения: $invite_code" -#: ../../mod/invite.php:137 +#: mod/invite.php:137 msgid "" "Once you have registered, please connect with me via my profile page at:" -msgstr "После того как вы зарегистрировались, пожалуйста, свяжитесь со мной через мою страницу профиля по адресу:" +msgstr "" +"После того как вы зарегистрировались, пожалуйста, свяжитесь со мной через " +"мою страницу профиля по адресу:" -#: ../../mod/invite.php:139 +#: mod/invite.php:139 msgid "" "For more information about the Friendica project and why we feel it is " "important, please visit http://friendica.com" -msgstr "Для получения более подробной информации о проекте Friendica, пожалуйста, посетите http://friendica.com" +msgstr "" +"Для получения более подробной информации о проекте Friendica, пожалуйста, " +"посетите http://friendica.com" -#: ../../mod/photos.php:52 ../../boot.php:2129 +#: mod/photos.php:99 include/identity.php:705 msgid "Photo Albums" msgstr "Фотоальбомы" -#: ../../mod/photos.php:60 ../../mod/photos.php:155 ../../mod/photos.php:1064 -#: ../../mod/photos.php:1187 ../../mod/photos.php:1210 -#: ../../mod/photos.php:1760 ../../mod/photos.php:1772 -#: ../../view/theme/diabook/theme.php:499 -msgid "Contact Photos" -msgstr "Фотографии контакта" +#: mod/photos.php:100 mod/photos.php:1899 +msgid "Recent Photos" +msgstr "Последние фото" -#: ../../mod/photos.php:67 ../../mod/photos.php:1262 ../../mod/photos.php:1819 +#: mod/photos.php:103 mod/photos.php:1320 mod/photos.php:1901 msgid "Upload New Photos" msgstr "Загрузить новые фото" -#: ../../mod/photos.php:144 +#: mod/photos.php:181 msgid "Contact information unavailable" msgstr "Информация о контакте недоступна" -#: ../../mod/photos.php:165 +#: mod/photos.php:202 msgid "Album not found." msgstr "Альбом не найден." -#: ../../mod/photos.php:188 ../../mod/photos.php:200 ../../mod/photos.php:1204 +#: mod/photos.php:232 mod/photos.php:244 mod/photos.php:1262 msgid "Delete Album" msgstr "Удалить альбом" -#: ../../mod/photos.php:198 +#: mod/photos.php:242 msgid "Do you really want to delete this photo album and all its photos?" msgstr "Вы действительно хотите удалить этот альбом и все его фотографии?" -#: ../../mod/photos.php:278 ../../mod/photos.php:289 ../../mod/photos.php:1515 +#: mod/photos.php:322 mod/photos.php:333 mod/photos.php:1580 msgid "Delete Photo" msgstr "Удалить фото" -#: ../../mod/photos.php:287 +#: mod/photos.php:331 msgid "Do you really want to delete this photo?" msgstr "Вы действительно хотите удалить эту фотографию?" -#: ../../mod/photos.php:662 +#: mod/photos.php:706 #, php-format msgid "%1$s was tagged in %2$s by %3$s" msgstr "%1$s отмечен/а/ в %2$s by %3$s" -#: ../../mod/photos.php:662 +#: mod/photos.php:706 msgid "a photo" msgstr "фото" -#: ../../mod/photos.php:767 -msgid "Image exceeds size limit of " -msgstr "Размер фото превышает лимит " - -#: ../../mod/photos.php:775 +#: mod/photos.php:819 msgid "Image file is empty." msgstr "Файл изображения пуст." -#: ../../mod/photos.php:930 +#: mod/photos.php:986 msgid "No photos selected" msgstr "Не выбрано фото." -#: ../../mod/photos.php:1094 +#: mod/photos.php:1147 #, php-format msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." -msgstr "Вы использовали %1$.2f мегабайт из %2$.2f возможных для хранения фотографий." +msgstr "" +"Вы использовали %1$.2f мегабайт из %2$.2f возможных для хранения фотографий." -#: ../../mod/photos.php:1129 +#: mod/photos.php:1182 msgid "Upload Photos" msgstr "Загрузить фото" -#: ../../mod/photos.php:1133 ../../mod/photos.php:1199 +#: mod/photos.php:1186 mod/photos.php:1257 msgid "New album name: " msgstr "Название нового альбома: " -#: ../../mod/photos.php:1134 +#: mod/photos.php:1187 msgid "or existing album name: " msgstr "или название существующего альбома: " -#: ../../mod/photos.php:1135 +#: mod/photos.php:1188 msgid "Do not show a status post for this upload" msgstr "Не показывать статус-сообщение для этой закачки" -#: ../../mod/photos.php:1137 ../../mod/photos.php:1510 +#: mod/photos.php:1190 mod/photos.php:1575 include/acl_selectors.php:347 msgid "Permissions" msgstr "Разрешения" -#: ../../mod/photos.php:1148 +#: mod/photos.php:1201 msgid "Private Photo" msgstr "Личное фото" -#: ../../mod/photos.php:1149 +#: mod/photos.php:1202 msgid "Public Photo" msgstr "Публичное фото" -#: ../../mod/photos.php:1212 +#: mod/photos.php:1270 msgid "Edit Album" msgstr "Редактировать альбом" -#: ../../mod/photos.php:1218 +#: mod/photos.php:1276 msgid "Show Newest First" msgstr "Показать новые первыми" -#: ../../mod/photos.php:1220 +#: mod/photos.php:1278 msgid "Show Oldest First" msgstr "Показать старые первыми" -#: ../../mod/photos.php:1248 ../../mod/photos.php:1802 +#: mod/photos.php:1306 mod/photos.php:1884 msgid "View Photo" msgstr "Просмотр фото" -#: ../../mod/photos.php:1294 +#: mod/photos.php:1353 msgid "Permission denied. Access to this item may be restricted." msgstr "Нет разрешения. Доступ к этому элементу ограничен." -#: ../../mod/photos.php:1296 +#: mod/photos.php:1355 msgid "Photo not available" msgstr "Фото недоступно" -#: ../../mod/photos.php:1352 +#: mod/photos.php:1411 msgid "View photo" msgstr "Просмотр фото" -#: ../../mod/photos.php:1352 +#: mod/photos.php:1411 msgid "Edit photo" msgstr "Редактировать фото" -#: ../../mod/photos.php:1353 +#: mod/photos.php:1412 msgid "Use as profile photo" msgstr "Использовать как фото профиля" -#: ../../mod/photos.php:1378 +#: mod/photos.php:1437 msgid "View Full Size" msgstr "Просмотреть полный размер" -#: ../../mod/photos.php:1457 +#: mod/photos.php:1523 msgid "Tags: " msgstr "Ключевые слова: " -#: ../../mod/photos.php:1460 +#: mod/photos.php:1526 msgid "[Remove any tag]" msgstr "[Удалить любое ключевое слово]" -#: ../../mod/photos.php:1500 -msgid "Rotate CW (right)" -msgstr "Поворот по часовой стрелке (направо)" - -#: ../../mod/photos.php:1501 -msgid "Rotate CCW (left)" -msgstr "Поворот против часовой стрелки (налево)" - -#: ../../mod/photos.php:1503 +#: mod/photos.php:1566 msgid "New album name" msgstr "Название нового альбома" -#: ../../mod/photos.php:1506 +#: mod/photos.php:1567 msgid "Caption" msgstr "Подпись" -#: ../../mod/photos.php:1508 +#: mod/photos.php:1568 msgid "Add a Tag" msgstr "Добавить ключевое слово (таг)" -#: ../../mod/photos.php:1512 -msgid "" -"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" +#: mod/photos.php:1568 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "Пример: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" -#: ../../mod/photos.php:1521 +#: mod/photos.php:1569 +msgid "Do not rotate" +msgstr "" + +#: mod/photos.php:1570 +msgid "Rotate CW (right)" +msgstr "Поворот по часовой стрелке (направо)" + +#: mod/photos.php:1571 +msgid "Rotate CCW (left)" +msgstr "Поворот против часовой стрелки (налево)" + +#: mod/photos.php:1586 msgid "Private photo" msgstr "Личное фото" -#: ../../mod/photos.php:1522 +#: mod/photos.php:1587 msgid "Public photo" msgstr "Публичное фото" -#: ../../mod/photos.php:1544 ../../include/conversation.php:1090 +#: mod/photos.php:1609 include/conversation.php:1182 msgid "Share" msgstr "Поделиться" -#: ../../mod/photos.php:1817 -msgid "Recent Photos" -msgstr "Последние фото" +#: mod/photos.php:1648 include/conversation.php:509 +#: include/conversation.php:1413 +msgid "Attending" +msgid_plural "Attending" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: ../../mod/regmod.php:55 +#: mod/photos.php:1648 include/conversation.php:509 +msgid "Not attending" +msgstr "" + +#: mod/photos.php:1648 include/conversation.php:509 +msgid "Might attend" +msgstr "" + +#: mod/photos.php:1813 +msgid "Map" +msgstr "Карта" + +#: mod/p.php:9 +msgid "Not Extended" +msgstr "" + +#: mod/regmod.php:55 msgid "Account approved." msgstr "Аккаунт утвержден." -#: ../../mod/regmod.php:92 +#: mod/regmod.php:92 #, php-format msgid "Registration revoked for %s" msgstr "Регистрация отменена для %s" -#: ../../mod/regmod.php:104 +#: mod/regmod.php:104 msgid "Please login." msgstr "Пожалуйста, войдите с паролем." -#: ../../mod/uimport.php:66 +#: mod/uimport.php:66 msgid "Move account" msgstr "Удалить аккаунт" -#: ../../mod/uimport.php:67 +#: mod/uimport.php:67 msgid "You can import an account from another Friendica server." msgstr "Вы можете импортировать учетную запись с другого сервера Friendica." -#: ../../mod/uimport.php:68 +#: mod/uimport.php:68 msgid "" "You need to export your account from the old server and upload it here. We " -"will recreate your old account here with all your contacts. We will try also" -" to inform your friends that you moved here." -msgstr "Вам нужно экспортировать свой ​​аккаунт со старого сервера и загрузить его сюда. Мы восстановим ваш ​​старый аккаунт здесь со всеми вашими контактами. Мы постараемся также сообщить друзьям, что вы переехали сюда." +"will recreate your old account here with all your contacts. We will try also " +"to inform your friends that you moved here." +msgstr "" +"Вам нужно экспортировать свой ​​аккаунт со старого сервера и загрузить его " +"сюда. Мы восстановим ваш ​​старый аккаунт здесь со всеми вашими контактами. Мы " +"постараемся также сообщить друзьям, что вы переехали сюда." -#: ../../mod/uimport.php:69 +#: mod/uimport.php:69 msgid "" "This feature is experimental. We can't import contacts from the OStatus " -"network (statusnet/identi.ca) or from Diaspora" -msgstr "Это экспериментальная функция. Мы не можем импортировать контакты из сети OStatus (StatusNet / identi.ca) или из Diaspora" +"network (GNU Social/Statusnet) or from Diaspora" +msgstr "" -#: ../../mod/uimport.php:70 +#: mod/uimport.php:70 msgid "Account file" msgstr "Файл аккаунта" -#: ../../mod/uimport.php:70 +#: mod/uimport.php:70 msgid "" "To export your account, go to \"Settings->Export your personal data\" and " "select \"Export account\"" -msgstr "Для экспорта аккаунта, перейдите в \"Настройки->Экспортировать ваши данные\" и выберите \"Экспорт аккаунта\"" +msgstr "" +"Для экспорта аккаунта, перейдите в \"Настройки->Экспортировать ваши данные\" " +"и выберите \"Экспорт аккаунта\"" -#: ../../mod/attach.php:8 +#: mod/attach.php:8 msgid "Item not available." msgstr "Пункт не доступен." -#: ../../mod/attach.php:20 +#: mod/attach.php:20 msgid "Item was not found." msgstr "Пункт не был найден." -#: ../../boot.php:749 +#: boot.php:868 msgid "Delete this item?" msgstr "Удалить этот элемент?" -#: ../../boot.php:752 +#: boot.php:871 msgid "show fewer" msgstr "показать меньше" -#: ../../boot.php:1122 +#: boot.php:1292 #, php-format msgid "Update %s failed. See error logs." msgstr "Обновление %s не удалось. Смотрите журнал ошибок." -#: ../../boot.php:1240 +#: boot.php:1404 msgid "Create a New Account" msgstr "Создать новый аккаунт" -#: ../../boot.php:1265 ../../include/nav.php:73 +#: boot.php:1429 include/nav.php:72 msgid "Logout" msgstr "Выход" -#: ../../boot.php:1268 +#: boot.php:1432 msgid "Nickname or Email address: " msgstr "Ник или адрес электронной почты: " -#: ../../boot.php:1269 +#: boot.php:1433 msgid "Password: " msgstr "Пароль: " -#: ../../boot.php:1270 +#: boot.php:1434 msgid "Remember me" msgstr "Запомнить" -#: ../../boot.php:1273 +#: boot.php:1437 msgid "Or login using OpenID: " msgstr "Или зайти с OpenID: " -#: ../../boot.php:1279 +#: boot.php:1443 msgid "Forgot your password?" msgstr "Забыли пароль?" -#: ../../boot.php:1282 +#: boot.php:1446 msgid "Website Terms of Service" msgstr "Правила сайта" -#: ../../boot.php:1283 +#: boot.php:1447 msgid "terms of service" msgstr "правила" -#: ../../boot.php:1285 +#: boot.php:1449 msgid "Website Privacy Policy" msgstr "Политика конфиденциальности сервера" -#: ../../boot.php:1286 +#: boot.php:1450 msgid "privacy policy" msgstr "политика конфиденциальности" -#: ../../boot.php:1419 -msgid "Requested account is not available." -msgstr "Запрашиваемый профиль недоступен." - -#: ../../boot.php:1501 ../../boot.php:1635 -#: ../../include/profile_advanced.php:84 -msgid "Edit profile" -msgstr "Редактировать профиль" - -#: ../../boot.php:1600 -msgid "Message" -msgstr "Сообщение" - -#: ../../boot.php:1606 ../../include/nav.php:175 -msgid "Profiles" -msgstr "Профили" - -#: ../../boot.php:1606 -msgid "Manage/edit profiles" -msgstr "Управление / редактирование профилей" - -#: ../../boot.php:1706 -msgid "Network:" -msgstr "" - -#: ../../boot.php:1736 ../../boot.php:1822 -msgid "g A l F d" -msgstr "g A l F d" - -#: ../../boot.php:1737 ../../boot.php:1823 -msgid "F d" -msgstr "F d" - -#: ../../boot.php:1782 ../../boot.php:1863 -msgid "[today]" -msgstr "[сегодня]" - -#: ../../boot.php:1794 -msgid "Birthday Reminders" -msgstr "Напоминания о днях рождения" - -#: ../../boot.php:1795 -msgid "Birthdays this week:" -msgstr "Дни рождения на этой неделе:" - -#: ../../boot.php:1856 -msgid "[No description]" -msgstr "[без описания]" - -#: ../../boot.php:1874 -msgid "Event Reminders" -msgstr "Напоминания о мероприятиях" - -#: ../../boot.php:1875 -msgid "Events this week:" -msgstr "Мероприятия на этой неделе:" - -#: ../../boot.php:2112 ../../include/nav.php:76 -msgid "Status" -msgstr "Статус" - -#: ../../boot.php:2115 -msgid "Status Messages and Posts" -msgstr "Сообщение статуса и посты" - -#: ../../boot.php:2122 -msgid "Profile Details" -msgstr "Детали профиля" - -#: ../../boot.php:2133 ../../boot.php:2136 ../../include/nav.php:79 -msgid "Videos" -msgstr "Видео" - -#: ../../boot.php:2146 -msgid "Events and Calendar" -msgstr "Календарь и события" - -#: ../../boot.php:2153 -msgid "Only You Can See This" -msgstr "Только вы можете это видеть" - -#: ../../object/Item.php:94 +#: object/Item.php:95 msgid "This entry was edited" msgstr "Эта запись была отредактирована" -#: ../../object/Item.php:208 +#: object/Item.php:191 +msgid "I will attend" +msgstr "" + +#: object/Item.php:191 +msgid "I will not attend" +msgstr "" + +#: object/Item.php:191 +msgid "I might attend" +msgstr "" + +#: object/Item.php:230 msgid "ignore thread" msgstr "" -#: ../../object/Item.php:209 +#: object/Item.php:231 msgid "unignore thread" msgstr "" -#: ../../object/Item.php:210 +#: object/Item.php:232 msgid "toggle ignore status" msgstr "" -#: ../../object/Item.php:213 -msgid "ignored" -msgstr "" - -#: ../../object/Item.php:316 ../../include/conversation.php:666 +#: object/Item.php:345 include/conversation.php:687 msgid "Categories:" msgstr "Категории:" -#: ../../object/Item.php:317 ../../include/conversation.php:667 +#: object/Item.php:346 include/conversation.php:688 msgid "Filed under:" msgstr "В рубрике:" -#: ../../object/Item.php:329 +#: object/Item.php:360 msgid "via" msgstr "через" -#: ../../include/dbstructure.php:26 +#: include/dbstructure.php:26 #, php-format msgid "" "\n" "\t\t\tThe friendica developers released update %s recently,\n" "\t\t\tbut when I tried to install it, something went terribly wrong.\n" "\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n" -"\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." +"\t\t\tfriendica developer if you can not help me on your own. My database " +"might be invalid." msgstr "" -#: ../../include/dbstructure.php:31 +#: include/dbstructure.php:31 #, php-format msgid "" "The error message is\n" "[pre]%s[/pre]" msgstr "" -#: ../../include/dbstructure.php:162 +#: include/dbstructure.php:153 msgid "Errors encountered creating database tables." msgstr "Обнаружены ошибки при создании таблиц базы данных." -#: ../../include/dbstructure.php:220 +#: include/dbstructure.php:230 msgid "Errors encountered performing database changes." msgstr "" -#: ../../include/auth.php:38 +#: include/auth.php:44 msgid "Logged out." msgstr "Выход из системы." -#: ../../include/auth.php:128 ../../include/user.php:67 +#: include/auth.php:134 include/user.php:75 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." -msgstr "Мы столкнулись с проблемой при входе с OpenID, который вы указали. Пожалуйста, проверьте правильность написания ID." +msgstr "" +"Мы столкнулись с проблемой при входе с OpenID, который вы указали. " +"Пожалуйста, проверьте правильность написания ID." -#: ../../include/auth.php:128 ../../include/user.php:67 +#: include/auth.php:134 include/user.php:75 msgid "The error message was:" msgstr "Сообщение об ошибке было:" -#: ../../include/contact_widgets.php:6 +#: include/contact_widgets.php:6 msgid "Add New Contact" msgstr "Добавить контакт" -#: ../../include/contact_widgets.php:7 +#: include/contact_widgets.php:7 msgid "Enter address or web location" msgstr "Введите адрес или веб-местонахождение" -#: ../../include/contact_widgets.php:8 +#: include/contact_widgets.php:8 msgid "Example: bob@example.com, http://example.com/barbara" msgstr "Пример: bob@example.com, http://example.com/barbara" -#: ../../include/contact_widgets.php:24 +#: include/contact_widgets.php:24 #, php-format msgid "%d invitation available" msgid_plural "%d invitations available" msgstr[0] "%d приглашение доступно" msgstr[1] "%d приглашений доступно" msgstr[2] "%d приглашений доступно" +msgstr[3] "%d приглашений доступно" -#: ../../include/contact_widgets.php:30 +#: include/contact_widgets.php:30 msgid "Find People" msgstr "Поиск людей" -#: ../../include/contact_widgets.php:31 +#: include/contact_widgets.php:31 msgid "Enter name or interest" msgstr "Введите имя или интерес" -#: ../../include/contact_widgets.php:32 -msgid "Connect/Follow" -msgstr "Подключиться/Следовать" - -#: ../../include/contact_widgets.php:33 +#: include/contact_widgets.php:33 msgid "Examples: Robert Morgenstein, Fishing" msgstr "Примеры: Роберт Morgenstein, Рыбалка" -#: ../../include/contact_widgets.php:36 ../../view/theme/diabook/theme.php:526 +#: include/contact_widgets.php:36 view/theme/diabook/theme.php:526 +#: view/theme/vier/theme.php:206 msgid "Similar Interests" msgstr "Похожие интересы" -#: ../../include/contact_widgets.php:37 +#: include/contact_widgets.php:37 msgid "Random Profile" msgstr "Случайный профиль" -#: ../../include/contact_widgets.php:38 ../../view/theme/diabook/theme.php:528 +#: include/contact_widgets.php:38 view/theme/diabook/theme.php:528 +#: view/theme/vier/theme.php:208 msgid "Invite Friends" msgstr "Пригласить друзей" -#: ../../include/contact_widgets.php:71 +#: include/contact_widgets.php:108 msgid "Networks" msgstr "Сети" -#: ../../include/contact_widgets.php:74 +#: include/contact_widgets.php:111 msgid "All Networks" msgstr "Все сети" -#: ../../include/contact_widgets.php:104 ../../include/features.php:60 +#: include/contact_widgets.php:141 include/features.php:102 msgid "Saved Folders" msgstr "Сохранённые папки" -#: ../../include/contact_widgets.php:107 ../../include/contact_widgets.php:139 +#: include/contact_widgets.php:144 include/contact_widgets.php:176 msgid "Everything" msgstr "Всё" -#: ../../include/contact_widgets.php:136 +#: include/contact_widgets.php:173 msgid "Categories" msgstr "Категории" -#: ../../include/features.php:23 +#: include/contact_widgets.php:237 +#, php-format +msgid "%d contact in common" +msgid_plural "%d contacts in common" +msgstr[0] "%d Контакт" +msgstr[1] "%d Контактов" +msgstr[2] "%d Контактов" +msgstr[3] "%d Контактов" + +#: include/features.php:63 msgid "General Features" msgstr "Основные возможности" -#: ../../include/features.php:25 +#: include/features.php:65 msgid "Multiple Profiles" msgstr "Несколько профилей" -#: ../../include/features.php:25 +#: include/features.php:65 msgid "Ability to create multiple profiles" msgstr "Возможность создания нескольких профилей" -#: ../../include/features.php:30 -msgid "Post Composition Features" +#: include/features.php:66 +msgid "Photo Location" msgstr "" -#: ../../include/features.php:31 +#: include/features.php:66 +msgid "" +"Photo metadata is normally stripped. This extracts the location (if present) " +"prior to stripping metadata and links it to a map." +msgstr "" + +#: include/features.php:71 +msgid "Post Composition Features" +msgstr "Составление сообщений" + +#: include/features.php:72 msgid "Richtext Editor" msgstr "Редактор RTF" -#: ../../include/features.php:31 +#: include/features.php:72 msgid "Enable richtext editor" msgstr "Включить редактор RTF" -#: ../../include/features.php:32 +#: include/features.php:73 msgid "Post Preview" -msgstr "предварительный просмотр" +msgstr "Предварительный просмотр" -#: ../../include/features.php:32 +#: include/features.php:73 msgid "Allow previewing posts and comments before publishing them" msgstr "Разрешить предпросмотр сообщения и комментария перед их публикацией" -#: ../../include/features.php:33 +#: include/features.php:74 msgid "Auto-mention Forums" msgstr "" -#: ../../include/features.php:33 +#: include/features.php:74 msgid "" "Add/remove mention when a fourm page is selected/deselected in ACL window." msgstr "" -#: ../../include/features.php:38 +#: include/features.php:79 msgid "Network Sidebar Widgets" msgstr "Виджет боковой панели \"Сеть\"" -#: ../../include/features.php:39 +#: include/features.php:80 msgid "Search by Date" msgstr "Поиск по датам" -#: ../../include/features.php:39 +#: include/features.php:80 msgid "Ability to select posts by date ranges" msgstr "Возможность выбора постов по диапазону дат" -#: ../../include/features.php:40 +#: include/features.php:81 include/features.php:111 +msgid "List Forums" +msgstr "" + +#: include/features.php:81 +msgid "Enable widget to display the forums your are connected with" +msgstr "" + +#: include/features.php:82 msgid "Group Filter" msgstr "Фильтр групп" -#: ../../include/features.php:40 +#: include/features.php:82 msgid "Enable widget to display Network posts only from selected group" -msgstr "Включить виджет для отображения сообщений сети только от выбранной группы" +msgstr "" +"Включить виджет для отображения сообщений сети только от выбранной группы" -#: ../../include/features.php:41 +#: include/features.php:83 msgid "Network Filter" msgstr "Фильтр сети" -#: ../../include/features.php:41 +#: include/features.php:83 msgid "Enable widget to display Network posts only from selected network" -msgstr "Включить виджет для отображения сообщений сети только от выбранной сети" +msgstr "" +"Включить виджет для отображения сообщений сети только от выбранной сети" -#: ../../include/features.php:42 +#: include/features.php:84 msgid "Save search terms for re-use" msgstr "Сохранить условия поиска для повторного использования" -#: ../../include/features.php:47 +#: include/features.php:89 msgid "Network Tabs" msgstr "Сетевые вкладки" -#: ../../include/features.php:48 +#: include/features.php:90 msgid "Network Personal Tab" msgstr "Персональные сетевые вкладки" -#: ../../include/features.php:48 +#: include/features.php:90 msgid "Enable tab to display only Network posts that you've interacted on" -msgstr "Включить вкладку для отображения только сообщений сети, с которой вы взаимодействовали" +msgstr "" +"Включить вкладку для отображения только сообщений сети, с которой вы " +"взаимодействовали" -#: ../../include/features.php:49 +#: include/features.php:91 msgid "Network New Tab" msgstr "Новая вкладка сеть" -#: ../../include/features.php:49 +#: include/features.php:91 msgid "Enable tab to display only new Network posts (from the last 12 hours)" -msgstr "Включить вкладку для отображения только новых сообщений сети (за последние 12 часов)" +msgstr "" +"Включить вкладку для отображения только новых сообщений сети (за последние " +"12 часов)" -#: ../../include/features.php:50 +#: include/features.php:92 msgid "Network Shared Links Tab" msgstr "Вкладка shared ссылок сети" -#: ../../include/features.php:50 +#: include/features.php:92 msgid "Enable tab to display only Network posts with links in them" -msgstr "Включить вкладку для отображения только сообщений сети со ссылками на них" +msgstr "" +"Включить вкладку для отображения только сообщений сети со ссылками на них" -#: ../../include/features.php:55 +#: include/features.php:97 msgid "Post/Comment Tools" msgstr "Инструменты пост/комментарий" -#: ../../include/features.php:56 +#: include/features.php:98 msgid "Multiple Deletion" msgstr "Множественное удаление" -#: ../../include/features.php:56 +#: include/features.php:98 msgid "Select and delete multiple posts/comments at once" msgstr "Выбрать и удалить несколько постов/комментариев одновременно." -#: ../../include/features.php:57 +#: include/features.php:99 msgid "Edit Sent Posts" msgstr "Редактировать отправленные посты" -#: ../../include/features.php:57 +#: include/features.php:99 msgid "Edit and correct posts and comments after sending" msgstr "Редактировать и править посты и комментарии после отправления" -#: ../../include/features.php:58 +#: include/features.php:100 msgid "Tagging" msgstr "Отмеченное" -#: ../../include/features.php:58 +#: include/features.php:100 msgid "Ability to tag existing posts" msgstr "Возможность отмечать существующие посты" -#: ../../include/features.php:59 +#: include/features.php:101 msgid "Post Categories" msgstr "Категории постов" -#: ../../include/features.php:59 +#: include/features.php:101 msgid "Add categories to your posts" msgstr "Добавить категории вашего поста" -#: ../../include/features.php:60 +#: include/features.php:102 msgid "Ability to file posts under folders" msgstr "" -#: ../../include/features.php:61 +#: include/features.php:103 msgid "Dislike Posts" msgstr "Посты дизлайк" -#: ../../include/features.php:61 +#: include/features.php:103 msgid "Ability to dislike posts/comments" msgstr "Возможность дизлайка постов/комментариев" -#: ../../include/features.php:62 +#: include/features.php:104 msgid "Star Posts" msgstr "Популярные посты" -#: ../../include/features.php:62 +#: include/features.php:104 msgid "Ability to mark special posts with a star indicator" msgstr "Возможность отметить специальные сообщения индикатором популярности" -#: ../../include/features.php:63 +#: include/features.php:105 msgid "Mute Post Notifications" msgstr "" -#: ../../include/features.php:63 +#: include/features.php:105 msgid "Ability to mute notifications for a thread" msgstr "" -#: ../../include/follow.php:32 +#: include/features.php:110 +msgid "Advanced Profile Settings" +msgstr "Расширенные настройки профиля" + +#: include/features.php:111 +msgid "Show visitors public community forums at the Advanced Profile Page" +msgstr "" + +#: include/follow.php:77 msgid "Connect URL missing." msgstr "Connect-URL отсутствует." -#: ../../include/follow.php:59 +#: include/follow.php:104 msgid "" "This site is not configured to allow communications with other networks." msgstr "Данный сайт не настроен так, чтобы держать связь с другими сетями." -#: ../../include/follow.php:60 ../../include/follow.php:80 +#: include/follow.php:105 include/follow.php:125 msgid "No compatible communication protocols or feeds were discovered." msgstr "Обнаружены несовместимые протоколы связи или каналы." -#: ../../include/follow.php:78 +#: include/follow.php:123 msgid "The profile address specified does not provide adequate information." msgstr "Указанный адрес профиля не дает адекватной информации." -#: ../../include/follow.php:82 +#: include/follow.php:127 msgid "An author or name was not found." msgstr "Автор или имя не найдены." -#: ../../include/follow.php:84 +#: include/follow.php:129 msgid "No browser URL could be matched to this address." msgstr "Нет URL браузера, который соответствует этому адресу." -#: ../../include/follow.php:86 +#: include/follow.php:131 msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." msgstr "" -#: ../../include/follow.php:87 +#: include/follow.php:132 msgid "Use mailto: in front of address to force email check." msgstr "Bcgjkmpeqnt mailto: перед адресом для быстрого доступа к email." -#: ../../include/follow.php:93 +#: include/follow.php:138 msgid "" "The profile address specified belongs to a network which has been disabled " "on this site." msgstr "Указанный адрес профиля принадлежит сети, недоступной на этом сайта." -#: ../../include/follow.php:103 +#: include/follow.php:148 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." -msgstr "Ограниченный профиль. Этот человек не сможет получить прямые / личные уведомления от вас." +msgstr "" +"Ограниченный профиль. Этот человек не сможет получить прямые / личные " +"уведомления от вас." -#: ../../include/follow.php:205 +#: include/follow.php:249 msgid "Unable to retrieve contact information." msgstr "Невозможно получить контактную информацию." -#: ../../include/follow.php:258 +#: include/follow.php:302 msgid "following" msgstr "следует" -#: ../../include/group.php:25 +#: include/group.php:25 msgid "" "A deleted group with this name was revived. Existing item permissions " "may apply to this group and any future members. If this is " "not what you intended, please create another group with a different name." -msgstr "Удаленная группа с таким названием была восстановлена. Существующие права доступа могут применяться к этой группе и любым будущим участникам. Если это не то, что вы хотели, пожалуйста, создайте еще ​​одну группу с другим названием." +msgstr "" +"Удаленная группа с таким названием была восстановлена. Существующие права " +"доступа могут применяться к этой группе и любым будущим " +"участникам. Если это не то, что вы хотели, пожалуйста, создайте еще ​​одну " +"группу с другим названием." -#: ../../include/group.php:207 +#: include/group.php:209 msgid "Default privacy group for new contacts" msgstr "Группа доступа по умолчанию для новых контактов" -#: ../../include/group.php:226 +#: include/group.php:239 msgid "Everybody" msgstr "Каждый" -#: ../../include/group.php:249 +#: include/group.php:262 msgid "edit" msgstr "редактировать" -#: ../../include/group.php:271 +#: include/group.php:285 +msgid "Edit groups" +msgstr "" + +#: include/group.php:287 msgid "Edit group" msgstr "Редактировать группу" -#: ../../include/group.php:272 +#: include/group.php:288 msgid "Create a new group" msgstr "Создать новую группу" -#: ../../include/group.php:273 +#: include/group.php:291 msgid "Contacts not in any group" msgstr "Контакты не состоят в группе" -#: ../../include/datetime.php:43 ../../include/datetime.php:45 +#: include/datetime.php:43 include/datetime.php:45 msgid "Miscellaneous" msgstr "Разное" -#: ../../include/datetime.php:153 ../../include/datetime.php:290 -msgid "year" -msgstr "год" +#: include/datetime.php:141 +msgid "YYYY-MM-DD or MM-DD" +msgstr "" -#: ../../include/datetime.php:158 ../../include/datetime.php:291 -msgid "month" -msgstr "мес." - -#: ../../include/datetime.php:163 ../../include/datetime.php:293 -msgid "day" -msgstr "день" - -#: ../../include/datetime.php:276 +#: include/datetime.php:271 msgid "never" msgstr "никогда" -#: ../../include/datetime.php:282 +#: include/datetime.php:277 msgid "less than a second ago" msgstr "менее сек. назад" -#: ../../include/datetime.php:290 +#: include/datetime.php:287 +msgid "year" +msgstr "год" + +#: include/datetime.php:287 msgid "years" msgstr "лет" -#: ../../include/datetime.php:291 +#: include/datetime.php:288 msgid "months" msgstr "мес." -#: ../../include/datetime.php:292 -msgid "week" -msgstr "неделя" - -#: ../../include/datetime.php:292 +#: include/datetime.php:289 msgid "weeks" msgstr "недель" -#: ../../include/datetime.php:293 +#: include/datetime.php:290 msgid "days" msgstr "дней" -#: ../../include/datetime.php:294 +#: include/datetime.php:291 msgid "hour" msgstr "час" -#: ../../include/datetime.php:294 +#: include/datetime.php:291 msgid "hours" msgstr "час." -#: ../../include/datetime.php:295 +#: include/datetime.php:292 msgid "minute" msgstr "минута" -#: ../../include/datetime.php:295 +#: include/datetime.php:292 msgid "minutes" msgstr "мин." -#: ../../include/datetime.php:296 +#: include/datetime.php:293 msgid "second" msgstr "секунда" -#: ../../include/datetime.php:296 +#: include/datetime.php:293 msgid "seconds" msgstr "сек." -#: ../../include/datetime.php:305 +#: include/datetime.php:302 #, php-format msgid "%1$d %2$s ago" msgstr "%1$d %2$s назад" -#: ../../include/datetime.php:477 ../../include/items.php:2211 +#: include/datetime.php:474 include/items.php:2500 #, php-format msgid "%s's birthday" msgstr "день рождения %s" -#: ../../include/datetime.php:478 ../../include/items.php:2212 +#: include/datetime.php:475 include/items.php:2501 #, php-format msgid "Happy Birthday %s" msgstr "С днём рождения %s" -#: ../../include/acl_selectors.php:333 -msgid "Visible to everybody" -msgstr "Видимо всем" +#: include/identity.php:42 +msgid "Requested account is not available." +msgstr "Запрашиваемый профиль недоступен." -#: ../../include/acl_selectors.php:334 ../../view/theme/diabook/config.php:142 -#: ../../view/theme/diabook/theme.php:621 -msgid "show" -msgstr "показывать" +#: include/identity.php:95 include/identity.php:284 include/identity.php:662 +msgid "Edit profile" +msgstr "Редактировать профиль" -#: ../../include/acl_selectors.php:335 ../../view/theme/diabook/config.php:142 -#: ../../view/theme/diabook/theme.php:621 -msgid "don't show" -msgstr "не показывать" - -#: ../../include/message.php:15 ../../include/message.php:172 -msgid "[no subject]" -msgstr "[без темы]" - -#: ../../include/Contact.php:115 -msgid "stopped following" -msgstr "остановлено следование" - -#: ../../include/Contact.php:228 ../../include/conversation.php:882 -msgid "Poke" +#: include/identity.php:244 +msgid "Atom feed" msgstr "" -#: ../../include/Contact.php:229 ../../include/conversation.php:876 -msgid "View Status" -msgstr "Просмотреть статус" +#: include/identity.php:249 +msgid "Message" +msgstr "Сообщение" -#: ../../include/Contact.php:230 ../../include/conversation.php:877 -msgid "View Profile" -msgstr "Просмотреть профиль" +#: include/identity.php:255 include/nav.php:185 +msgid "Profiles" +msgstr "Профили" -#: ../../include/Contact.php:231 ../../include/conversation.php:878 -msgid "View Photos" -msgstr "Просмотреть фото" +#: include/identity.php:255 +msgid "Manage/edit profiles" +msgstr "Управление / редактирование профилей" -#: ../../include/Contact.php:232 ../../include/Contact.php:255 -#: ../../include/conversation.php:879 -msgid "Network Posts" -msgstr "Посты сети" +#: include/identity.php:425 include/identity.php:509 +msgid "g A l F d" +msgstr "g A l F d" -#: ../../include/Contact.php:233 ../../include/Contact.php:255 -#: ../../include/conversation.php:880 -msgid "Edit Contact" -msgstr "Редактировать контакт" +#: include/identity.php:426 include/identity.php:510 +msgid "F d" +msgstr "F d" -#: ../../include/Contact.php:234 -msgid "Drop Contact" -msgstr "Удалить контакт" +#: include/identity.php:471 include/identity.php:556 +msgid "[today]" +msgstr "[сегодня]" -#: ../../include/Contact.php:235 ../../include/Contact.php:255 -#: ../../include/conversation.php:881 -msgid "Send PM" -msgstr "Отправить ЛС" +#: include/identity.php:483 +msgid "Birthday Reminders" +msgstr "Напоминания о днях рождения" -#: ../../include/security.php:22 -msgid "Welcome " -msgstr "Добро пожаловать, " +#: include/identity.php:484 +msgid "Birthdays this week:" +msgstr "Дни рождения на этой неделе:" -#: ../../include/security.php:23 -msgid "Please upload a profile photo." -msgstr "Пожалуйста, загрузите фотографию профиля." +#: include/identity.php:543 +msgid "[No description]" +msgstr "[без описания]" -#: ../../include/security.php:26 -msgid "Welcome back " -msgstr "Добро пожаловать обратно, " +#: include/identity.php:567 +msgid "Event Reminders" +msgstr "Напоминания о мероприятиях" -#: ../../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." -msgstr "Ключ формы безопасности неправильный. Вероятно, это произошло потому, что форма была открыта слишком долго (более 3 часов) до её отправки." +#: include/identity.php:568 +msgid "Events this week:" +msgstr "Мероприятия на этой неделе:" -#: ../../include/conversation.php:118 ../../include/conversation.php:246 -#: ../../include/text.php:1966 ../../view/theme/diabook/theme.php:463 +#: include/identity.php:595 +msgid "j F, Y" +msgstr "j F, Y" + +#: include/identity.php:596 +msgid "j F" +msgstr "j F" + +#: include/identity.php:603 +msgid "Birthday:" +msgstr "День рождения:" + +#: include/identity.php:607 +msgid "Age:" +msgstr "Возраст:" + +#: include/identity.php:616 +#, php-format +msgid "for %1$d %2$s" +msgstr "" + +#: include/identity.php:629 +msgid "Religion:" +msgstr "Религия:" + +#: include/identity.php:633 +msgid "Hobbies/Interests:" +msgstr "Хобби / Интересы:" + +#: include/identity.php:640 +msgid "Contact information and Social Networks:" +msgstr "Информация о контакте и социальных сетях:" + +#: include/identity.php:642 +msgid "Musical interests:" +msgstr "Музыкальные интересы:" + +#: include/identity.php:644 +msgid "Books, literature:" +msgstr "Книги, литература:" + +#: include/identity.php:646 +msgid "Television:" +msgstr "Телевидение:" + +#: include/identity.php:648 +msgid "Film/dance/culture/entertainment:" +msgstr "Кино / Танцы / Культура / Развлечения:" + +#: include/identity.php:650 +msgid "Love/Romance:" +msgstr "Любовь / Романтика:" + +#: include/identity.php:652 +msgid "Work/employment:" +msgstr "Работа / Занятость:" + +#: include/identity.php:654 +msgid "School/education:" +msgstr "Школа / Образование:" + +#: include/identity.php:658 +msgid "Forums:" +msgstr "" + +#: include/identity.php:710 include/identity.php:713 include/nav.php:78 +msgid "Videos" +msgstr "Видео" + +#: include/identity.php:725 include/nav.php:140 +msgid "Events and Calendar" +msgstr "Календарь и события" + +#: include/identity.php:733 +msgid "Only You Can See This" +msgstr "Только вы можете это видеть" + +#: include/like.php:167 include/conversation.php:122 +#: include/conversation.php:258 include/text.php:1998 +#: view/theme/diabook/theme.php:463 msgid "event" msgstr "мероприятие" -#: ../../include/conversation.php:207 +#: include/like.php:184 include/conversation.php:141 include/diaspora.php:2185 +#: view/theme/diabook/theme.php:480 #, php-format -msgid "%1$s poked %2$s" +msgid "%1$s likes %2$s's %3$s" +msgstr "%1$s нравится %3$s от %2$s " + +#: include/like.php:186 include/conversation.php:144 +#, php-format +msgid "%1$s doesn't like %2$s's %3$s" +msgstr "%1$s не нравится %3$s от %2$s " + +#: include/like.php:188 +#, php-format +msgid "%1$s is attending %2$s's %3$s" msgstr "" -#: ../../include/conversation.php:211 ../../include/text.php:1005 -msgid "poked" +#: include/like.php:190 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" msgstr "" -#: ../../include/conversation.php:291 -msgid "post/item" -msgstr "пост/элемент" - -#: ../../include/conversation.php:292 +#: include/like.php:192 #, php-format -msgid "%1$s marked %2$s's %3$s as favorite" -msgstr "%1$s пометил %2$s %3$s как Фаворит" - -#: ../../include/conversation.php:772 -msgid "remove" -msgstr "удалить" - -#: ../../include/conversation.php:776 -msgid "Delete Selected Items" -msgstr "Удалить выбранные позиции" - -#: ../../include/conversation.php:875 -msgid "Follow Thread" +msgid "%1$s may attend %2$s's %3$s" msgstr "" -#: ../../include/conversation.php:944 -#, php-format -msgid "%s likes this." -msgstr "%s нравится это." - -#: ../../include/conversation.php:944 -#, php-format -msgid "%s doesn't like this." -msgstr "%s не нравится это." - -#: ../../include/conversation.php:949 -#, php-format -msgid "%2$d people like this" -msgstr "%2$d людям нравится это" - -#: ../../include/conversation.php:952 -#, php-format -msgid "%2$d people don't like this" -msgstr "%2$d людям не нравится это" - -#: ../../include/conversation.php:966 -msgid "and" -msgstr "и" - -#: ../../include/conversation.php:972 -#, php-format -msgid ", and %d other people" -msgstr ", и %d других чел." - -#: ../../include/conversation.php:974 -#, php-format -msgid "%s like this." -msgstr "%s нравится это." - -#: ../../include/conversation.php:974 -#, php-format -msgid "%s don't like this." -msgstr "%s не нравится это." - -#: ../../include/conversation.php:1001 ../../include/conversation.php:1019 -msgid "Visible to everybody" -msgstr "Видимое всем" - -#: ../../include/conversation.php:1003 ../../include/conversation.php:1021 -msgid "Please enter a video link/URL:" -msgstr "Введите ссылку на видео link/URL:" - -#: ../../include/conversation.php:1004 ../../include/conversation.php:1022 -msgid "Please enter an audio link/URL:" -msgstr "Введите ссылку на аудио link/URL:" - -#: ../../include/conversation.php:1005 ../../include/conversation.php:1023 -msgid "Tag term:" -msgstr "" - -#: ../../include/conversation.php:1007 ../../include/conversation.php:1025 -msgid "Where are you right now?" -msgstr "И где вы сейчас?" - -#: ../../include/conversation.php:1008 -msgid "Delete item(s)?" -msgstr "Удалить елемент(ты)?" - -#: ../../include/conversation.php:1051 +#: include/acl_selectors.php:325 msgid "Post to Email" msgstr "Отправить на Email" -#: ../../include/conversation.php:1056 +#: include/acl_selectors.php:330 #, php-format msgid "Connectors disabled, since \"%s\" is enabled." msgstr "" -#: ../../include/conversation.php:1111 +#: include/acl_selectors.php:336 +msgid "Visible to everybody" +msgstr "Видимо всем" + +#: include/acl_selectors.php:337 view/theme/diabook/config.php:142 +#: view/theme/diabook/theme.php:621 view/theme/vier/config.php:103 +msgid "show" +msgstr "показывать" + +#: include/acl_selectors.php:338 view/theme/diabook/config.php:142 +#: view/theme/diabook/theme.php:621 view/theme/vier/config.php:103 +msgid "don't show" +msgstr "не показывать" + +#: include/acl_selectors.php:348 +msgid "Close" +msgstr "Закрыть" + +#: include/message.php:15 include/message.php:173 +msgid "[no subject]" +msgstr "[без темы]" + +#: include/Contact.php:119 +msgid "stopped following" +msgstr "остановлено следование" + +#: include/Contact.php:337 include/conversation.php:911 +msgid "View Status" +msgstr "Просмотреть статус" + +#: include/Contact.php:339 include/conversation.php:913 +msgid "View Photos" +msgstr "Просмотреть фото" + +#: include/Contact.php:340 include/conversation.php:914 +msgid "Network Posts" +msgstr "Посты сети" + +#: include/Contact.php:341 include/conversation.php:915 +msgid "Edit Contact" +msgstr "Редактировать контакт" + +#: include/Contact.php:342 +msgid "Drop Contact" +msgstr "Удалить контакт" + +#: include/Contact.php:343 include/conversation.php:916 +msgid "Send PM" +msgstr "Отправить ЛС" + +#: include/Contact.php:344 include/conversation.php:920 +msgid "Poke" +msgstr "" + +#: include/security.php:22 +msgid "Welcome " +msgstr "Добро пожаловать, " + +#: include/security.php:23 +msgid "Please upload a profile photo." +msgstr "Пожалуйста, загрузите фотографию профиля." + +#: include/security.php:26 +msgid "Welcome back " +msgstr "Добро пожаловать обратно, " + +#: include/security.php:375 +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." +msgstr "" +"Ключ формы безопасности неправильный. Вероятно, это произошло потому, что " +"форма была открыта слишком долго (более 3 часов) до её отправки." + +#: include/conversation.php:147 +#, php-format +msgid "%1$s attends %2$s's %3$s" +msgstr "" + +#: include/conversation.php:150 +#, php-format +msgid "%1$s doesn't attend %2$s's %3$s" +msgstr "" + +#: include/conversation.php:153 +#, php-format +msgid "%1$s attends maybe %2$s's %3$s" +msgstr "" + +#: include/conversation.php:219 +#, php-format +msgid "%1$s poked %2$s" +msgstr "" + +#: include/conversation.php:303 +msgid "post/item" +msgstr "пост/элемент" + +#: include/conversation.php:304 +#, php-format +msgid "%1$s marked %2$s's %3$s as favorite" +msgstr "%1$s пометил %2$s %3$s как Фаворит" + +#: include/conversation.php:792 +msgid "remove" +msgstr "удалить" + +#: include/conversation.php:796 +msgid "Delete Selected Items" +msgstr "Удалить выбранные позиции" + +#: include/conversation.php:910 +msgid "Follow Thread" +msgstr "" + +#: include/conversation.php:1034 +#, php-format +msgid "%s likes this." +msgstr "%s нравится это." + +#: include/conversation.php:1037 +#, php-format +msgid "%s doesn't like this." +msgstr "%s не нравится это." + +#: include/conversation.php:1040 +#, php-format +msgid "%s attends." +msgstr "" + +#: include/conversation.php:1043 +#, php-format +msgid "%s doesn't attend." +msgstr "" + +#: include/conversation.php:1046 +#, php-format +msgid "%s attends maybe." +msgstr "" + +#: include/conversation.php:1056 +msgid "and" +msgstr "и" + +#: include/conversation.php:1062 +#, php-format +msgid ", and %d other people" +msgstr ", и %d других чел." + +#: include/conversation.php:1071 +#, php-format +msgid "%2$d people like this" +msgstr "%2$d людям нравится это" + +#: include/conversation.php:1072 +#, php-format +msgid "%s like this." +msgstr "" + +#: include/conversation.php:1075 +#, php-format +msgid "%2$d people don't like this" +msgstr "%2$d людям не нравится это" + +#: include/conversation.php:1076 +#, php-format +msgid "%s don't like this." +msgstr "" + +#: include/conversation.php:1079 +#, php-format +msgid "%2$d people attend" +msgstr "" + +#: include/conversation.php:1080 +#, php-format +msgid "%s attend." +msgstr "" + +#: include/conversation.php:1083 +#, php-format +msgid "%2$d people don't attend" +msgstr "" + +#: include/conversation.php:1084 +#, php-format +msgid "%s don't attend." +msgstr "" + +#: include/conversation.php:1087 +#, php-format +msgid "%2$d people anttend maybe" +msgstr "" + +#: include/conversation.php:1088 +#, php-format +msgid "%s anttend maybe." +msgstr "" + +#: include/conversation.php:1127 include/conversation.php:1145 +msgid "Visible to everybody" +msgstr "Видимое всем" + +#: include/conversation.php:1129 include/conversation.php:1147 +msgid "Please enter a video link/URL:" +msgstr "Введите ссылку на видео link/URL:" + +#: include/conversation.php:1130 include/conversation.php:1148 +msgid "Please enter an audio link/URL:" +msgstr "Введите ссылку на аудио link/URL:" + +#: include/conversation.php:1131 include/conversation.php:1149 +msgid "Tag term:" +msgstr "" + +#: include/conversation.php:1133 include/conversation.php:1151 +msgid "Where are you right now?" +msgstr "И где вы сейчас?" + +#: include/conversation.php:1134 +msgid "Delete item(s)?" +msgstr "Удалить елемент(ты)?" + +#: include/conversation.php:1203 msgid "permissions" msgstr "разрешения" -#: ../../include/conversation.php:1135 +#: include/conversation.php:1226 msgid "Post to Groups" msgstr "Пост для групп" -#: ../../include/conversation.php:1136 +#: include/conversation.php:1227 msgid "Post to Contacts" msgstr "Пост для контактов" -#: ../../include/conversation.php:1137 +#: include/conversation.php:1228 msgid "Private post" msgstr "Личное сообщение" -#: ../../include/network.php:895 +#: include/conversation.php:1385 +msgid "View all" +msgstr "" + +#: include/conversation.php:1407 +msgid "Like" +msgid_plural "Likes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: include/conversation.php:1410 +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: include/conversation.php:1416 +msgid "Not Attending" +msgid_plural "Not Attending" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: include/conversation.php:1419 include/profile_selectors.php:6 +msgid "Undecided" +msgid_plural "Undecided" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: include/forums.php:105 include/text.php:1015 include/nav.php:126 +#: view/theme/vier/theme.php:259 +msgid "Forums" +msgstr "" + +#: include/forums.php:107 view/theme/vier/theme.php:261 +msgid "External link to forum" +msgstr "" + +#: include/network.php:967 msgid "view full size" msgstr "посмотреть в полный размер" -#: ../../include/text.php:297 +#: include/text.php:303 msgid "newer" msgstr "новее" -#: ../../include/text.php:299 +#: include/text.php:305 msgid "older" msgstr "старее" -#: ../../include/text.php:304 +#: include/text.php:310 msgid "prev" msgstr "пред." -#: ../../include/text.php:306 +#: include/text.php:312 msgid "first" msgstr "первый" -#: ../../include/text.php:338 +#: include/text.php:344 msgid "last" msgstr "последний" -#: ../../include/text.php:341 +#: include/text.php:347 msgid "next" msgstr "след." -#: ../../include/text.php:855 +#: include/text.php:402 +msgid "Loading more entries..." +msgstr "" + +#: include/text.php:403 +msgid "The end" +msgstr "" + +#: include/text.php:894 msgid "No contacts" msgstr "Нет контактов" -#: ../../include/text.php:864 +#: include/text.php:909 #, php-format msgid "%d Contact" msgid_plural "%d Contacts" msgstr[0] "%d контакт" msgstr[1] "%d контактов" msgstr[2] "%d контактов" +msgstr[3] "%d контактов" -#: ../../include/text.php:1005 +#: include/text.php:921 +msgid "View Contacts" +msgstr "Просмотр контактов" + +#: include/text.php:1010 include/nav.php:121 +msgid "Full Text" +msgstr "Контент" + +#: include/text.php:1011 include/nav.php:122 +msgid "Tags" +msgstr "Тэги" + +#: include/text.php:1066 msgid "poke" msgstr "poke" -#: ../../include/text.php:1006 +#: include/text.php:1066 +msgid "poked" +msgstr "" + +#: include/text.php:1067 msgid "ping" msgstr "пинг" -#: ../../include/text.php:1006 +#: include/text.php:1067 msgid "pinged" msgstr "пингуется" -#: ../../include/text.php:1007 +#: include/text.php:1068 msgid "prod" msgstr "" -#: ../../include/text.php:1007 +#: include/text.php:1068 msgid "prodded" msgstr "" -#: ../../include/text.php:1008 +#: include/text.php:1069 msgid "slap" msgstr "" -#: ../../include/text.php:1008 +#: include/text.php:1069 msgid "slapped" msgstr "" -#: ../../include/text.php:1009 +#: include/text.php:1070 msgid "finger" msgstr "" -#: ../../include/text.php:1009 +#: include/text.php:1070 msgid "fingered" msgstr "" -#: ../../include/text.php:1010 +#: include/text.php:1071 msgid "rebuff" msgstr "" -#: ../../include/text.php:1010 +#: include/text.php:1071 msgid "rebuffed" msgstr "" -#: ../../include/text.php:1024 +#: include/text.php:1085 msgid "happy" msgstr "" -#: ../../include/text.php:1025 +#: include/text.php:1086 msgid "sad" msgstr "" -#: ../../include/text.php:1026 +#: include/text.php:1087 msgid "mellow" msgstr "" -#: ../../include/text.php:1027 +#: include/text.php:1088 msgid "tired" msgstr "" -#: ../../include/text.php:1028 +#: include/text.php:1089 msgid "perky" msgstr "" -#: ../../include/text.php:1029 +#: include/text.php:1090 msgid "angry" msgstr "" -#: ../../include/text.php:1030 +#: include/text.php:1091 msgid "stupified" msgstr "" -#: ../../include/text.php:1031 +#: include/text.php:1092 msgid "puzzled" msgstr "" -#: ../../include/text.php:1032 +#: include/text.php:1093 msgid "interested" msgstr "" -#: ../../include/text.php:1033 +#: include/text.php:1094 msgid "bitter" msgstr "" -#: ../../include/text.php:1034 +#: include/text.php:1095 msgid "cheerful" msgstr "" -#: ../../include/text.php:1035 +#: include/text.php:1096 msgid "alive" msgstr "" -#: ../../include/text.php:1036 +#: include/text.php:1097 msgid "annoyed" msgstr "" -#: ../../include/text.php:1037 +#: include/text.php:1098 msgid "anxious" msgstr "" -#: ../../include/text.php:1038 +#: include/text.php:1099 msgid "cranky" msgstr "" -#: ../../include/text.php:1039 +#: include/text.php:1100 msgid "disturbed" msgstr "" -#: ../../include/text.php:1040 +#: include/text.php:1101 msgid "frustrated" msgstr "" -#: ../../include/text.php:1041 +#: include/text.php:1102 msgid "motivated" msgstr "" -#: ../../include/text.php:1042 +#: include/text.php:1103 msgid "relaxed" msgstr "" -#: ../../include/text.php:1043 +#: include/text.php:1104 msgid "surprised" msgstr "" -#: ../../include/text.php:1213 -msgid "Monday" -msgstr "Понедельник" - -#: ../../include/text.php:1213 -msgid "Tuesday" -msgstr "Вторник" - -#: ../../include/text.php:1213 -msgid "Wednesday" -msgstr "Среда" - -#: ../../include/text.php:1213 -msgid "Thursday" -msgstr "Четверг" - -#: ../../include/text.php:1213 -msgid "Friday" -msgstr "Пятница" - -#: ../../include/text.php:1213 -msgid "Saturday" -msgstr "Суббота" - -#: ../../include/text.php:1213 -msgid "Sunday" -msgstr "Воскресенье" - -#: ../../include/text.php:1217 -msgid "January" -msgstr "Январь" - -#: ../../include/text.php:1217 -msgid "February" -msgstr "Февраль" - -#: ../../include/text.php:1217 -msgid "March" -msgstr "Март" - -#: ../../include/text.php:1217 -msgid "April" -msgstr "Апрель" - -#: ../../include/text.php:1217 -msgid "May" -msgstr "Май" - -#: ../../include/text.php:1217 -msgid "June" -msgstr "Июнь" - -#: ../../include/text.php:1217 -msgid "July" -msgstr "Июль" - -#: ../../include/text.php:1217 -msgid "August" -msgstr "Август" - -#: ../../include/text.php:1217 -msgid "September" -msgstr "Сентябрь" - -#: ../../include/text.php:1217 -msgid "October" -msgstr "Октябрь" - -#: ../../include/text.php:1217 -msgid "November" -msgstr "Ноябрь" - -#: ../../include/text.php:1217 -msgid "December" -msgstr "Декабрь" - -#: ../../include/text.php:1437 +#: include/text.php:1504 msgid "bytes" msgstr "байт" -#: ../../include/text.php:1461 ../../include/text.php:1473 +#: include/text.php:1536 include/text.php:1548 msgid "Click to open/close" msgstr "Нажмите, чтобы открыть / закрыть" -#: ../../include/text.php:1702 ../../include/user.php:247 -#: ../../view/theme/duepuntozero/config.php:44 -msgid "default" -msgstr "значение по умолчанию" +#: include/text.php:1722 +msgid "View on separate page" +msgstr "" -#: ../../include/text.php:1714 -msgid "Select an alternate language" -msgstr "Выбор альтернативного языка" +#: include/text.php:1723 +msgid "view on separate page" +msgstr "" -#: ../../include/text.php:1970 +#: include/text.php:2002 msgid "activity" msgstr "активность" -#: ../../include/text.php:1973 +#: include/text.php:2005 msgid "post" msgstr "сообщение" -#: ../../include/text.php:2141 +#: include/text.php:2173 msgid "Item filed" msgstr "" -#: ../../include/bbcode.php:428 ../../include/bbcode.php:1047 -#: ../../include/bbcode.php:1048 +#: include/bbcode.php:482 include/bbcode.php:1157 include/bbcode.php:1158 msgid "Image/photo" msgstr "Изображение / Фото" -#: ../../include/bbcode.php:528 +#: include/bbcode.php:595 #, php-format msgid "%2$s %3$s" msgstr "" -#: ../../include/bbcode.php:562 +#: include/bbcode.php:629 #, php-format msgid "" -"%s wrote the following post" +"%s wrote the following post" msgstr "" -#: ../../include/bbcode.php:1011 ../../include/bbcode.php:1031 +#: include/bbcode.php:1117 include/bbcode.php:1137 msgid "$1 wrote:" msgstr "$1 написал:" -#: ../../include/bbcode.php:1056 ../../include/bbcode.php:1057 +#: include/bbcode.php:1166 include/bbcode.php:1167 msgid "Encrypted content" msgstr "Зашифрованный контент" -#: ../../include/notifier.php:786 ../../include/delivery.php:456 -msgid "(no subject)" -msgstr "(без темы)" - -#: ../../include/notifier.php:796 ../../include/delivery.php:467 -#: ../../include/enotify.php:33 -msgid "noreply" -msgstr "без ответа" - -#: ../../include/dba_pdo.php:72 ../../include/dba.php:56 +#: include/dba_pdo.php:72 include/dba.php:55 #, php-format msgid "Cannot locate DNS info for database server '%s'" msgstr "Не могу найти информацию для DNS-сервера базы данных '%s'" -#: ../../include/contact_selectors.php:32 +#: include/contact_selectors.php:32 msgid "Unknown | Not categorised" msgstr "Неизвестно | Не определено" -#: ../../include/contact_selectors.php:33 +#: include/contact_selectors.php:33 msgid "Block immediately" msgstr "Блокировать немедленно" -#: ../../include/contact_selectors.php:34 +#: include/contact_selectors.php:34 msgid "Shady, spammer, self-marketer" msgstr "Тролль, спаммер, рассылает рекламу" -#: ../../include/contact_selectors.php:35 +#: include/contact_selectors.php:35 msgid "Known to me, but no opinion" msgstr "Известные мне, но нет определенного мнения" -#: ../../include/contact_selectors.php:36 +#: include/contact_selectors.php:36 msgid "OK, probably harmless" msgstr "Хорошо, наверное, безвредные" -#: ../../include/contact_selectors.php:37 +#: include/contact_selectors.php:37 msgid "Reputable, has my trust" msgstr "Уважаемые, есть мое доверие" -#: ../../include/contact_selectors.php:60 +#: include/contact_selectors.php:60 msgid "Weekly" msgstr "Еженедельно" -#: ../../include/contact_selectors.php:61 +#: include/contact_selectors.php:61 msgid "Monthly" msgstr "Ежемесячно" -#: ../../include/contact_selectors.php:77 +#: include/contact_selectors.php:77 msgid "OStatus" msgstr "OStatus" -#: ../../include/contact_selectors.php:78 +#: include/contact_selectors.php:78 msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/contact_selectors.php:82 +#: include/contact_selectors.php:81 +msgid "Facebook" +msgstr "Facebook" + +#: include/contact_selectors.php:82 msgid "Zot!" msgstr "Zot!" -#: ../../include/contact_selectors.php:83 +#: include/contact_selectors.php:83 msgid "LinkedIn" msgstr "LinkedIn" -#: ../../include/contact_selectors.php:84 +#: include/contact_selectors.php:84 msgid "XMPP/IM" msgstr "XMPP/IM" -#: ../../include/contact_selectors.php:85 +#: include/contact_selectors.php:85 msgid "MySpace" msgstr "MySpace" -#: ../../include/contact_selectors.php:87 +#: include/contact_selectors.php:87 msgid "Google+" msgstr "Google+" -#: ../../include/contact_selectors.php:88 +#: include/contact_selectors.php:88 msgid "pump.io" msgstr "pump.io" -#: ../../include/contact_selectors.php:89 +#: include/contact_selectors.php:89 msgid "Twitter" msgstr "Twitter" -#: ../../include/contact_selectors.php:90 +#: include/contact_selectors.php:90 msgid "Diaspora Connector" msgstr "" -#: ../../include/contact_selectors.php:91 -msgid "Statusnet" +#: include/contact_selectors.php:91 +msgid "GNU Social" msgstr "" -#: ../../include/contact_selectors.php:92 +#: include/contact_selectors.php:92 msgid "App.net" msgstr "" -#: ../../include/Scrape.php:614 +#: include/contact_selectors.php:103 +msgid "Redmatrix" +msgstr "" + +#: include/Scrape.php:624 msgid " on Last.fm" msgstr "на Last.fm" -#: ../../include/bb2diaspora.php:154 ../../include/event.php:20 +#: include/bb2diaspora.php:154 include/event.php:30 include/event.php:48 msgid "Starts:" msgstr "Начало:" -#: ../../include/bb2diaspora.php:162 ../../include/event.php:30 +#: include/bb2diaspora.php:162 include/event.php:33 include/event.php:54 msgid "Finishes:" msgstr "Окончание:" -#: ../../include/profile_advanced.php:22 -msgid "j F, Y" -msgstr "j F, Y" - -#: ../../include/profile_advanced.php:23 -msgid "j F" -msgstr "j F" - -#: ../../include/profile_advanced.php:30 -msgid "Birthday:" -msgstr "День рождения:" - -#: ../../include/profile_advanced.php:34 -msgid "Age:" -msgstr "Возраст:" - -#: ../../include/profile_advanced.php:43 -#, php-format -msgid "for %1$d %2$s" -msgstr "" - -#: ../../include/profile_advanced.php:52 -msgid "Tags:" -msgstr "Ключевые слова: " - -#: ../../include/profile_advanced.php:56 -msgid "Religion:" -msgstr "Религия:" - -#: ../../include/profile_advanced.php:60 -msgid "Hobbies/Interests:" -msgstr "Хобби / Интересы:" - -#: ../../include/profile_advanced.php:67 -msgid "Contact information and Social Networks:" -msgstr "Информация о контакте и социальных сетях:" - -#: ../../include/profile_advanced.php:69 -msgid "Musical interests:" -msgstr "Музыкальные интересы:" - -#: ../../include/profile_advanced.php:71 -msgid "Books, literature:" -msgstr "Книги, литература:" - -#: ../../include/profile_advanced.php:73 -msgid "Television:" -msgstr "Телевидение:" - -#: ../../include/profile_advanced.php:75 -msgid "Film/dance/culture/entertainment:" -msgstr "Кино / Танцы / Культура / Развлечения:" - -#: ../../include/profile_advanced.php:77 -msgid "Love/Romance:" -msgstr "Любовь / Романтика:" - -#: ../../include/profile_advanced.php:79 -msgid "Work/employment:" -msgstr "Работа / Занятость:" - -#: ../../include/profile_advanced.php:81 -msgid "School/education:" -msgstr "Школа / Образование:" - -#: ../../include/plugin.php:455 ../../include/plugin.php:457 +#: include/plugin.php:522 include/plugin.php:524 msgid "Click here to upgrade." msgstr "Нажмите для обновления." -#: ../../include/plugin.php:463 +#: include/plugin.php:530 msgid "This action exceeds the limits set by your subscription plan." msgstr "Это действие превышает лимиты, установленные вашим тарифным планом." -#: ../../include/plugin.php:468 +#: include/plugin.php:535 msgid "This action is not available under your subscription plan." msgstr "Это действие не доступно в соответствии с вашим планом подписки." -#: ../../include/nav.php:73 +#: include/nav.php:72 msgid "End this session" -msgstr "Конец этой сессии" +msgstr "Завершить эту сессию" -#: ../../include/nav.php:76 ../../include/nav.php:148 -#: ../../view/theme/diabook/theme.php:123 +#: include/nav.php:75 include/nav.php:157 view/theme/diabook/theme.php:123 msgid "Your posts and conversations" -msgstr "Ваши сообщения и беседы" +msgstr "Данные вашей учётной записи" -#: ../../include/nav.php:77 ../../view/theme/diabook/theme.php:124 +#: include/nav.php:76 view/theme/diabook/theme.php:124 msgid "Your profile page" -msgstr "Страница Вашего профиля" +msgstr "Информация о вас" -#: ../../include/nav.php:78 ../../view/theme/diabook/theme.php:126 +#: include/nav.php:77 view/theme/diabook/theme.php:126 msgid "Your photos" msgstr "Ваши фотографии" -#: ../../include/nav.php:79 +#: include/nav.php:78 msgid "Your videos" msgstr "" -#: ../../include/nav.php:80 ../../view/theme/diabook/theme.php:127 +#: include/nav.php:79 view/theme/diabook/theme.php:127 msgid "Your events" msgstr "Ваши события" -#: ../../include/nav.php:81 ../../view/theme/diabook/theme.php:128 +#: include/nav.php:80 view/theme/diabook/theme.php:128 msgid "Personal notes" msgstr "Личные заметки" -#: ../../include/nav.php:81 +#: include/nav.php:80 msgid "Your personal notes" msgstr "" -#: ../../include/nav.php:92 +#: include/nav.php:91 msgid "Sign in" msgstr "Вход" -#: ../../include/nav.php:105 +#: include/nav.php:104 msgid "Home Page" msgstr "Главная страница" -#: ../../include/nav.php:109 +#: include/nav.php:108 msgid "Create an account" msgstr "Создать аккаунт" -#: ../../include/nav.php:114 +#: include/nav.php:113 msgid "Help and documentation" msgstr "Помощь и документация" -#: ../../include/nav.php:117 +#: include/nav.php:116 msgid "Apps" msgstr "Приложения" -#: ../../include/nav.php:117 +#: include/nav.php:116 msgid "Addon applications, utilities, games" msgstr "Дополнительные приложения, утилиты, игры" -#: ../../include/nav.php:119 +#: include/nav.php:118 msgid "Search site content" msgstr "Поиск по сайту" -#: ../../include/nav.php:129 +#: include/nav.php:136 msgid "Conversations on this site" msgstr "Беседы на этом сайте" -#: ../../include/nav.php:131 +#: include/nav.php:138 msgid "Conversations on the network" msgstr "" -#: ../../include/nav.php:133 +#: include/nav.php:142 msgid "Directory" msgstr "Каталог" -#: ../../include/nav.php:133 +#: include/nav.php:142 msgid "People directory" msgstr "Каталог участников" -#: ../../include/nav.php:135 +#: include/nav.php:144 msgid "Information" -msgstr "" +msgstr "Информация" -#: ../../include/nav.php:135 +#: include/nav.php:144 msgid "Information about this friendica instance" msgstr "" -#: ../../include/nav.php:145 +#: include/nav.php:154 msgid "Conversations from your friends" -msgstr "Беседы с друзьями" +msgstr "Посты ваших друзей" -#: ../../include/nav.php:146 +#: include/nav.php:155 msgid "Network Reset" msgstr "Перезагрузка сети" -#: ../../include/nav.php:146 +#: include/nav.php:155 msgid "Load Network page with no filters" msgstr "Загрузить страницу сети без фильтров" -#: ../../include/nav.php:154 +#: include/nav.php:162 msgid "Friend Requests" msgstr "Запросы на добавление в список друзей" -#: ../../include/nav.php:156 +#: include/nav.php:166 msgid "See all notifications" msgstr "Посмотреть все уведомления" -#: ../../include/nav.php:157 +#: include/nav.php:167 msgid "Mark all system notifications seen" msgstr "Отметить все системные уведомления, как прочитанные" -#: ../../include/nav.php:161 +#: include/nav.php:171 msgid "Private mail" msgstr "Личная почта" -#: ../../include/nav.php:162 +#: include/nav.php:172 msgid "Inbox" msgstr "Входящие" -#: ../../include/nav.php:163 +#: include/nav.php:173 msgid "Outbox" msgstr "Исходящие" -#: ../../include/nav.php:167 +#: include/nav.php:177 msgid "Manage" msgstr "Управлять" -#: ../../include/nav.php:167 +#: include/nav.php:177 msgid "Manage other pages" msgstr "Управление другими страницами" -#: ../../include/nav.php:172 +#: include/nav.php:182 msgid "Account settings" msgstr "Настройки аккаунта" -#: ../../include/nav.php:175 +#: include/nav.php:185 msgid "Manage/Edit Profiles" msgstr "Управление/редактирование профилей" -#: ../../include/nav.php:177 +#: include/nav.php:187 msgid "Manage/edit friends and contacts" msgstr "Управление / редактирование друзей и контактов" -#: ../../include/nav.php:184 +#: include/nav.php:194 msgid "Site setup and configuration" -msgstr "Установка и конфигурация сайта" +msgstr "Конфигурация сайта" -#: ../../include/nav.php:188 +#: include/nav.php:198 msgid "Navigation" msgstr "Навигация" -#: ../../include/nav.php:188 +#: include/nav.php:198 msgid "Site map" msgstr "Карта сайта" -#: ../../include/api.php:304 ../../include/api.php:315 -#: ../../include/api.php:416 ../../include/api.php:1063 -#: ../../include/api.php:1065 -msgid "User not found." -msgstr "Пользователь не найден." - -#: ../../include/api.php:771 +#: include/api.php:878 #, php-format msgid "Daily posting limit of %d posts reached. The post was rejected." msgstr "" -#: ../../include/api.php:790 +#: include/api.php:897 #, php-format msgid "Weekly posting limit of %d posts reached. The post was rejected." msgstr "" -#: ../../include/api.php:809 +#: include/api.php:916 #, php-format msgid "Monthly posting limit of %d posts reached. The post was rejected." msgstr "" -#: ../../include/api.php:1272 -msgid "There is no status with this id." -msgstr "Нет статуса с таким id." - -#: ../../include/api.php:1342 -msgid "There is no conversation with this id." -msgstr "" - -#: ../../include/api.php:1614 -msgid "Invalid request." -msgstr "" - -#: ../../include/api.php:1625 -msgid "Invalid item." -msgstr "" - -#: ../../include/api.php:1635 -msgid "Invalid action. " -msgstr "" - -#: ../../include/api.php:1643 -msgid "DB error" -msgstr "" - -#: ../../include/user.php:40 +#: include/user.php:48 msgid "An invitation is required." msgstr "Требуется приглашение." -#: ../../include/user.php:45 +#: include/user.php:53 msgid "Invitation could not be verified." msgstr "Приглашение не может быть проверено." -#: ../../include/user.php:53 +#: include/user.php:61 msgid "Invalid OpenID url" msgstr "Неверный URL OpenID" -#: ../../include/user.php:74 +#: include/user.php:82 msgid "Please enter the required information." msgstr "Пожалуйста, введите необходимую информацию." -#: ../../include/user.php:88 +#: include/user.php:96 msgid "Please use a shorter name." msgstr "Пожалуйста, используйте более короткое имя." -#: ../../include/user.php:90 +#: include/user.php:98 msgid "Name too short." msgstr "Имя слишком короткое." -#: ../../include/user.php:105 +#: include/user.php:113 msgid "That doesn't appear to be your full (First Last) name." msgstr "Кажется, что это ваше неполное (Имя Фамилия) имя." -#: ../../include/user.php:110 +#: include/user.php:118 msgid "Your email domain is not among those allowed on this site." -msgstr "Домен вашего адреса электронной почты не относится к числу разрешенных на этом сайте." +msgstr "" +"Домен вашего адреса электронной почты не относится к числу разрешенных на " +"этом сайте." -#: ../../include/user.php:113 +#: include/user.php:121 msgid "Not a valid email address." msgstr "Неверный адрес электронной почты." -#: ../../include/user.php:126 +#: include/user.php:134 msgid "Cannot use that email." msgstr "Нельзя использовать этот Email." -#: ../../include/user.php:132 -msgid "" -"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and " -"must also begin with a letter." -msgstr "Ваш \"ник\" может содержать только \"a-z\", \"0-9\", \"-\", и \"_\", а также должен начинаться с буквы." +#: include/user.php:140 +msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"." +msgstr "" -#: ../../include/user.php:138 ../../include/user.php:236 +#: include/user.php:147 include/user.php:245 msgid "Nickname is already registered. Please choose another." msgstr "Такой ник уже зарегистрирован. Пожалуйста, выберите другой." -#: ../../include/user.php:148 +#: include/user.php:157 msgid "" "Nickname was once registered here and may not be re-used. Please choose " "another." -msgstr "Ник уже зарегистрирован на этом сайте и не может быть изменён. Пожалуйста, выберите другой ник." +msgstr "" +"Ник уже зарегистрирован на этом сайте и не может быть изменён. Пожалуйста, " +"выберите другой ник." -#: ../../include/user.php:164 +#: include/user.php:173 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась." -#: ../../include/user.php:222 +#: include/user.php:231 msgid "An error occurred during registration. Please try again." msgstr "Ошибка при регистрации. Пожалуйста, попробуйте еще раз." -#: ../../include/user.php:257 +#: include/user.php:256 view/theme/duepuntozero/config.php:44 +msgid "default" +msgstr "значение по умолчанию" + +#: include/user.php:266 msgid "An error occurred creating your default profile. Please try again." msgstr "Ошибка создания вашего профиля. Пожалуйста, попробуйте еще раз." -#: ../../include/user.php:289 ../../include/user.php:293 -#: ../../include/profile_selectors.php:42 +#: include/user.php:299 include/user.php:303 include/profile_selectors.php:42 msgid "Friends" msgstr "Друзья" -#: ../../include/user.php:377 +#: include/user.php:387 #, php-format msgid "" "\n" @@ -7099,7 +8110,7 @@ msgid "" "\t" msgstr "" -#: ../../include/user.php:381 +#: include/user.php:391 #, php-format msgid "" "\n" @@ -7108,20 +8119,25 @@ msgid "" "\t\t\tLogin Name:\t%1$s\n" "\t\t\tPassword:\t%5$s\n" "\n" -"\t\tYou may change your password from your account \"Settings\" page after logging\n" +"\t\tYou may change your password from your account \"Settings\" page after " +"logging\n" "\t\tin.\n" "\n" -"\t\tPlease take a few moments to review the other account settings on that page.\n" +"\t\tPlease take a few moments to review the other account settings on that " +"page.\n" "\n" "\t\tYou may also wish to add some basic information to your default profile\n" "\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" "\n" "\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n" -"\t\tperhaps what country you live in; if you do not wish to be more specific\n" +"\t\tadding some profile \"keywords\" (very useful in making new friends) - " +"and\n" +"\t\tperhaps what country you live in; if you do not wish to be more " +"specific\n" "\t\tthan that.\n" "\n" -"\t\tWe fully respect your right to privacy, and none of these items are necessary.\n" +"\t\tWe fully respect your right to privacy, and none of these items are " +"necessary.\n" "\t\tIf you are new and do not know anybody here, they may help\n" "\t\tyou to make some new and interesting friends.\n" "\n" @@ -7129,495 +8145,504 @@ msgid "" "\t\tThank you and welcome to %2$s." msgstr "" -#: ../../include/diaspora.php:703 +#: include/diaspora.php:720 msgid "Sharing notification from Diaspora network" msgstr "Делиться уведомлениями из сети Diaspora" -#: ../../include/diaspora.php:2520 +#: include/diaspora.php:2625 msgid "Attachments:" msgstr "Вложения:" -#: ../../include/items.php:4555 +#: include/delivery.php:533 +msgid "(no subject)" +msgstr "(без темы)" + +#: include/delivery.php:544 include/enotify.php:37 +msgid "noreply" +msgstr "без ответа" + +#: include/items.php:4926 msgid "Do you really want to delete this item?" msgstr "Вы действительно хотите удалить этот элемент?" -#: ../../include/items.php:4778 +#: include/items.php:5201 msgid "Archives" msgstr "Архивы" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Male" msgstr "Мужчина" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Female" msgstr "Женщина" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Currently Male" msgstr "В данный момент мужчина" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Currently Female" msgstr "В настоящее время женщина" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Mostly Male" msgstr "В основном мужчина" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Mostly Female" msgstr "В основном женщина" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Transgender" msgstr "Транссексуал" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Intersex" msgstr "Интерсексуал" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Transsexual" msgstr "Транссексуал" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Hermaphrodite" msgstr "Гермафродит" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Neuter" msgstr "Средний род" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Non-specific" msgstr "Не определен" -#: ../../include/profile_selectors.php:6 +#: include/profile_selectors.php:6 msgid "Other" msgstr "Другой" -#: ../../include/profile_selectors.php:6 -msgid "Undecided" -msgstr "Не решено" - -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Males" msgstr "Мужчины" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Females" msgstr "Женщины" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Gay" msgstr "Гей" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Lesbian" msgstr "Лесбиянка" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "No Preference" msgstr "Без предпочтений" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Bisexual" msgstr "Бисексуал" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Autosexual" msgstr "Автосексуал" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Abstinent" msgstr "Воздержанный" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Virgin" msgstr "Девственница" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Deviant" msgstr "Deviant" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Fetish" msgstr "Фетиш" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Oodles" msgstr "Групповой" -#: ../../include/profile_selectors.php:23 +#: include/profile_selectors.php:23 msgid "Nonsexual" msgstr "Нет интереса к сексу" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Single" msgstr "Без пары" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Lonely" msgstr "Пока никого нет" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Available" msgstr "Доступный" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Unavailable" msgstr "Не ищу никого" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Has crush" msgstr "Имеет ошибку" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Infatuated" msgstr "Влюблён" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Dating" msgstr "Свидания" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Unfaithful" msgstr "Изменяю супругу" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Sex Addict" msgstr "Люблю секс" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Friends/Benefits" msgstr "Друзья / Предпочтения" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Casual" msgstr "Обычный" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Engaged" msgstr "Занят" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Married" msgstr "Женат / Замужем" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Imaginarily married" msgstr "" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Partners" msgstr "Партнеры" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Cohabiting" msgstr "Партнерство" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Common law" msgstr "" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Happy" msgstr "Счастлив/а/" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Not looking" msgstr "Не в поиске" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Swinger" msgstr "Свинг" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Betrayed" msgstr "Преданный" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Separated" msgstr "Разделенный" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Unstable" msgstr "Нестабильный" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Divorced" msgstr "Разведен(а)" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Imaginarily divorced" msgstr "" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Widowed" msgstr "Овдовевший" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Uncertain" msgstr "Неопределенный" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "It's complicated" msgstr "влишком сложно" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Don't care" msgstr "Не беспокоить" -#: ../../include/profile_selectors.php:42 +#: include/profile_selectors.php:42 msgid "Ask me" msgstr "Спросите меня" -#: ../../include/enotify.php:18 +#: include/enotify.php:18 msgid "Friendica Notification" msgstr "Friendica уведомления" -#: ../../include/enotify.php:21 +#: include/enotify.php:21 msgid "Thank You," msgstr "Спасибо," -#: ../../include/enotify.php:23 +#: include/enotify.php:24 #, php-format msgid "%s Administrator" msgstr "%s администратор" -#: ../../include/enotify.php:64 +#: include/enotify.php:26 +#, php-format +msgid "%1$s, %2$s Administrator" +msgstr "" + +#: include/enotify.php:68 #, php-format msgid "%s " msgstr "%s " -#: ../../include/enotify.php:68 +#: include/enotify.php:82 #, php-format msgid "[Friendica:Notify] New mail received at %s" msgstr "[Friendica: Оповещение] Новое сообщение, пришедшее на %s" -#: ../../include/enotify.php:70 +#: include/enotify.php:84 #, php-format msgid "%1$s sent you a new private message at %2$s." msgstr "%1$s отправил вам новое личное сообщение на %2$s." -#: ../../include/enotify.php:71 +#: include/enotify.php:85 #, php-format msgid "%1$s sent you %2$s." msgstr "%1$s послал вам %2$s." -#: ../../include/enotify.php:71 +#: include/enotify.php:85 msgid "a private message" msgstr "личное сообщение" -#: ../../include/enotify.php:72 +#: include/enotify.php:86 #, php-format msgid "Please visit %s to view and/or reply to your private messages." -msgstr "Пожалуйста, посетите %s для просмотра и/или ответа на личные сообщения." +msgstr "" +"Пожалуйста, посетите %s для просмотра и/или ответа на личные сообщения." -#: ../../include/enotify.php:124 +#: include/enotify.php:138 #, php-format msgid "%1$s commented on [url=%2$s]a %3$s[/url]" msgstr "%1$s прокомментировал [url=%2$s]a %3$s[/url]" -#: ../../include/enotify.php:131 +#: include/enotify.php:145 #, php-format msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]" msgstr "%1$s прокомментировал [url=%2$s]%3$s's %4$s[/url]" -#: ../../include/enotify.php:139 +#: include/enotify.php:153 #, php-format msgid "%1$s commented on [url=%2$s]your %3$s[/url]" msgstr "%1$s прокомментировал [url=%2$s]your %3$s[/url]" -#: ../../include/enotify.php:149 +#: include/enotify.php:163 #, php-format msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s" msgstr "" -#: ../../include/enotify.php:150 +#: include/enotify.php:164 #, php-format msgid "%s commented on an item/conversation you have been following." msgstr "" -#: ../../include/enotify.php:153 ../../include/enotify.php:168 -#: ../../include/enotify.php:181 ../../include/enotify.php:194 -#: ../../include/enotify.php:212 ../../include/enotify.php:225 +#: include/enotify.php:167 include/enotify.php:182 include/enotify.php:195 +#: include/enotify.php:208 include/enotify.php:226 include/enotify.php:239 #, php-format msgid "Please visit %s to view and/or reply to the conversation." msgstr "" -#: ../../include/enotify.php:160 +#: include/enotify.php:174 #, php-format msgid "[Friendica:Notify] %s posted to your profile wall" msgstr "[Friendica:Оповещение] %s написал на стене вашего профиля" -#: ../../include/enotify.php:162 +#: include/enotify.php:176 #, php-format msgid "%1$s posted to your profile wall at %2$s" msgstr "" -#: ../../include/enotify.php:164 +#: include/enotify.php:178 #, php-format msgid "%1$s posted to [url=%2$s]your wall[/url]" msgstr "" -#: ../../include/enotify.php:175 +#: include/enotify.php:189 #, php-format msgid "[Friendica:Notify] %s tagged you" msgstr "" -#: ../../include/enotify.php:176 +#: include/enotify.php:190 #, php-format msgid "%1$s tagged you at %2$s" msgstr "" -#: ../../include/enotify.php:177 +#: include/enotify.php:191 #, php-format msgid "%1$s [url=%2$s]tagged you[/url]." msgstr "" -#: ../../include/enotify.php:188 +#: include/enotify.php:202 #, php-format msgid "[Friendica:Notify] %s shared a new post" msgstr "" -#: ../../include/enotify.php:189 +#: include/enotify.php:203 #, php-format msgid "%1$s shared a new post at %2$s" msgstr "" -#: ../../include/enotify.php:190 +#: include/enotify.php:204 #, php-format msgid "%1$s [url=%2$s]shared a post[/url]." msgstr "" -#: ../../include/enotify.php:202 +#: include/enotify.php:216 #, php-format msgid "[Friendica:Notify] %1$s poked you" msgstr "" -#: ../../include/enotify.php:203 +#: include/enotify.php:217 #, php-format msgid "%1$s poked you at %2$s" msgstr "" -#: ../../include/enotify.php:204 +#: include/enotify.php:218 #, php-format msgid "%1$s [url=%2$s]poked you[/url]." msgstr "" -#: ../../include/enotify.php:219 +#: include/enotify.php:233 #, php-format msgid "[Friendica:Notify] %s tagged your post" msgstr "" -#: ../../include/enotify.php:220 +#: include/enotify.php:234 #, php-format msgid "%1$s tagged your post at %2$s" msgstr "" -#: ../../include/enotify.php:221 +#: include/enotify.php:235 #, php-format msgid "%1$s tagged [url=%2$s]your post[/url]" msgstr "" -#: ../../include/enotify.php:232 +#: include/enotify.php:246 msgid "[Friendica:Notify] Introduction received" msgstr "[Friendica:Сообщение] получен запрос" -#: ../../include/enotify.php:233 +#: include/enotify.php:247 #, php-format msgid "You've received an introduction from '%1$s' at %2$s" msgstr "" -#: ../../include/enotify.php:234 +#: include/enotify.php:248 #, php-format msgid "You've received [url=%1$s]an introduction[/url] from %2$s." msgstr "" -#: ../../include/enotify.php:237 ../../include/enotify.php:279 +#: include/enotify.php:251 include/enotify.php:293 #, php-format msgid "You may visit their profile at %s" msgstr "Вы можете посмотреть его профиль здесь %s" -#: ../../include/enotify.php:239 +#: include/enotify.php:253 #, php-format msgid "Please visit %s to approve or reject the introduction." msgstr "Посетите %s для подтверждения или отказа запроса." -#: ../../include/enotify.php:247 +#: include/enotify.php:261 msgid "[Friendica:Notify] A new person is sharing with you" msgstr "" -#: ../../include/enotify.php:248 ../../include/enotify.php:249 +#: include/enotify.php:262 include/enotify.php:263 #, php-format msgid "%1$s is sharing with you at %2$s" msgstr "" -#: ../../include/enotify.php:255 +#: include/enotify.php:269 msgid "[Friendica:Notify] You have a new follower" msgstr "" -#: ../../include/enotify.php:256 ../../include/enotify.php:257 +#: include/enotify.php:270 include/enotify.php:271 #, php-format msgid "You have a new follower at %2$s : %1$s" msgstr "" -#: ../../include/enotify.php:270 +#: include/enotify.php:284 msgid "[Friendica:Notify] Friend suggestion received" msgstr "[Friendica: Оповещение] получено предложение дружбы" -#: ../../include/enotify.php:271 +#: include/enotify.php:285 #, php-format msgid "You've received a friend suggestion from '%1$s' at %2$s" msgstr "Вы получили предложение дружбы от '%1$s' на %2$s" -#: ../../include/enotify.php:272 +#: include/enotify.php:286 #, php-format -msgid "" -"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." +msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." msgstr "" -#: ../../include/enotify.php:277 +#: include/enotify.php:291 msgid "Name:" msgstr "Имя:" -#: ../../include/enotify.php:278 +#: include/enotify.php:292 msgid "Photo:" msgstr "Фото:" -#: ../../include/enotify.php:281 +#: include/enotify.php:295 #, php-format msgid "Please visit %s to approve or reject the suggestion." msgstr "Пожалуйста, посетите %s для подтверждения, или отказа запроса." -#: ../../include/enotify.php:289 ../../include/enotify.php:302 +#: include/enotify.php:303 include/enotify.php:316 msgid "[Friendica:Notify] Connection accepted" msgstr "" -#: ../../include/enotify.php:290 ../../include/enotify.php:303 +#: include/enotify.php:304 include/enotify.php:317 #, php-format -msgid "'%1$s' has acepted your connection request at %2$s" +msgid "'%1$s' has accepted your connection request at %2$s" msgstr "" -#: ../../include/enotify.php:291 ../../include/enotify.php:304 +#: include/enotify.php:305 include/enotify.php:318 #, php-format msgid "%2$s has accepted your [url=%1$s]connection request[/url]." msgstr "" -#: ../../include/enotify.php:294 +#: include/enotify.php:308 msgid "" -"You are now mutual friends and may exchange status updates, photos, and email\n" +"You are now mutual friends and may exchange status updates, photos, and " +"email\n" "\twithout restriction." msgstr "" -#: ../../include/enotify.php:297 ../../include/enotify.php:311 +#: include/enotify.php:311 include/enotify.php:325 #, php-format msgid "Please visit %s if you wish to make any changes to this relationship." msgstr "" -#: ../../include/enotify.php:307 +#: include/enotify.php:321 #, php-format msgid "" "'%1$s' has chosen to accept you a \"fan\", which restricts some forms of " @@ -7626,266 +8651,261 @@ msgid "" "automatically." msgstr "" -#: ../../include/enotify.php:309 +#: include/enotify.php:323 #, php-format msgid "" "'%1$s' may choose to extend this into a two-way or more permissive " "relationship in the future. " msgstr "" -#: ../../include/enotify.php:322 +#: include/enotify.php:336 msgid "[Friendica System:Notify] registration request" msgstr "" -#: ../../include/enotify.php:323 +#: include/enotify.php:337 #, php-format msgid "You've received a registration request from '%1$s' at %2$s" msgstr "" -#: ../../include/enotify.php:324 +#: include/enotify.php:338 #, php-format msgid "You've received a [url=%1$s]registration request[/url] from %2$s." msgstr "" -#: ../../include/enotify.php:327 +#: include/enotify.php:341 #, php-format msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)" msgstr "" -#: ../../include/enotify.php:330 +#: include/enotify.php:344 #, php-format msgid "Please visit %s to approve or reject the request." msgstr "" -#: ../../include/oembed.php:212 +#: include/oembed.php:226 msgid "Embedded content" msgstr "Встроенное содержание" -#: ../../include/oembed.php:221 +#: include/oembed.php:235 msgid "Embedding disabled" msgstr "Встраивание отключено" -#: ../../include/uimport.php:94 +#: include/uimport.php:94 msgid "Error decoding account file" msgstr "Ошибка расшифровки файла аккаунта" -#: ../../include/uimport.php:100 +#: include/uimport.php:100 msgid "Error! No version data in file! This is not a Friendica account file?" -msgstr "Ошибка! Неправильная версия данных в файле! Это не файл аккаунта Friendica?" +msgstr "" +"Ошибка! Неправильная версия данных в файле! Это не файл аккаунта Friendica?" -#: ../../include/uimport.php:116 ../../include/uimport.php:127 +#: include/uimport.php:116 include/uimport.php:127 msgid "Error! Cannot check nickname" msgstr "Ошибка! Невозможно проверить никнейм" -#: ../../include/uimport.php:120 ../../include/uimport.php:131 +#: include/uimport.php:120 include/uimport.php:131 #, php-format msgid "User '%s' already exists on this server!" msgstr "Пользователь '%s' уже существует на этом сервере!" -#: ../../include/uimport.php:153 +#: include/uimport.php:153 msgid "User creation error" msgstr "Ошибка создания пользователя" -#: ../../include/uimport.php:171 +#: include/uimport.php:173 msgid "User profile creation error" msgstr "Ошибка создания профиля пользователя" -#: ../../include/uimport.php:220 +#: include/uimport.php:222 #, php-format msgid "%d contact not imported" msgid_plural "%d contacts not imported" msgstr[0] "%d контакт не импортирован" msgstr[1] "%d контакты не импортированы" msgstr[2] "%d контакты не импортированы" +msgstr[3] "%d контакты не импортированы" -#: ../../include/uimport.php:290 +#: include/uimport.php:292 msgid "Done. You can now login with your username and password" msgstr "Завершено. Теперь вы можете войти с вашим логином и паролем" -#: ../../index.php:428 +#: index.php:442 msgid "toggle mobile" msgstr "мобильная версия" -#: ../../view/theme/cleanzero/config.php:82 -#: ../../view/theme/dispy/config.php:72 ../../view/theme/quattro/config.php:66 -#: ../../view/theme/diabook/config.php:150 ../../view/theme/vier/config.php:55 -#: ../../view/theme/duepuntozero/config.php:61 -msgid "Theme settings" -msgstr "Настройки темы" - -#: ../../view/theme/cleanzero/config.php:83 +#: view/theme/cleanzero/config.php:83 msgid "Set resize level for images in posts and comments (width and height)" -msgstr "Установить уровень изменения размера изображений в постах и ​​комментариях (ширина и высота)" +msgstr "" +"Установить уровень изменения размера изображений в постах и ​​комментариях " +"(ширина и высота)" -#: ../../view/theme/cleanzero/config.php:84 -#: ../../view/theme/dispy/config.php:73 -#: ../../view/theme/diabook/config.php:151 +#: view/theme/cleanzero/config.php:84 view/theme/dispy/config.php:73 +#: view/theme/diabook/config.php:151 msgid "Set font-size for posts and comments" msgstr "Установить шрифт-размер для постов и комментариев" -#: ../../view/theme/cleanzero/config.php:85 +#: view/theme/cleanzero/config.php:85 msgid "Set theme width" msgstr "Установить ширину темы" -#: ../../view/theme/cleanzero/config.php:86 -#: ../../view/theme/quattro/config.php:68 +#: view/theme/cleanzero/config.php:86 view/theme/quattro/config.php:68 msgid "Color scheme" msgstr "Цветовая схема" -#: ../../view/theme/dispy/config.php:74 -#: ../../view/theme/diabook/config.php:152 +#: view/theme/dispy/config.php:74 view/theme/diabook/config.php:152 msgid "Set line-height for posts and comments" msgstr "Установить высоту строки для постов и комментариев" -#: ../../view/theme/dispy/config.php:75 +#: view/theme/dispy/config.php:75 msgid "Set colour scheme" msgstr "Установить цветовую схему" -#: ../../view/theme/quattro/config.php:67 +#: view/theme/quattro/config.php:67 msgid "Alignment" msgstr "Выравнивание" -#: ../../view/theme/quattro/config.php:67 +#: view/theme/quattro/config.php:67 msgid "Left" msgstr "" -#: ../../view/theme/quattro/config.php:67 +#: view/theme/quattro/config.php:67 msgid "Center" msgstr "Центр" -#: ../../view/theme/quattro/config.php:69 +#: view/theme/quattro/config.php:69 msgid "Posts font size" msgstr "Размер шрифта постов" -#: ../../view/theme/quattro/config.php:70 +#: view/theme/quattro/config.php:70 msgid "Textareas font size" msgstr "Размер шрифта текстовых полей" -#: ../../view/theme/diabook/config.php:153 +#: view/theme/diabook/config.php:153 msgid "Set resolution for middle column" msgstr "Установить разрешение для средней колонки" -#: ../../view/theme/diabook/config.php:154 +#: view/theme/diabook/config.php:154 msgid "Set color scheme" msgstr "Установить цветовую схему" -#: ../../view/theme/diabook/config.php:155 +#: view/theme/diabook/config.php:155 msgid "Set zoomfactor for Earth Layer" msgstr "Установить масштаб карты" -#: ../../view/theme/diabook/config.php:156 -#: ../../view/theme/diabook/theme.php:585 +#: view/theme/diabook/config.php:156 view/theme/diabook/theme.php:585 msgid "Set longitude (X) for Earth Layers" msgstr "Установить длину (X) карты" -#: ../../view/theme/diabook/config.php:157 -#: ../../view/theme/diabook/theme.php:586 +#: view/theme/diabook/config.php:157 view/theme/diabook/theme.php:586 msgid "Set latitude (Y) for Earth Layers" msgstr "Установить ширину (Y) карты" -#: ../../view/theme/diabook/config.php:158 -#: ../../view/theme/diabook/theme.php:130 -#: ../../view/theme/diabook/theme.php:544 -#: ../../view/theme/diabook/theme.php:624 +#: view/theme/diabook/config.php:158 view/theme/diabook/theme.php:130 +#: view/theme/diabook/theme.php:544 view/theme/diabook/theme.php:624 +#: view/theme/vier/config.php:111 msgid "Community Pages" msgstr "Страницы сообщества" -#: ../../view/theme/diabook/config.php:159 -#: ../../view/theme/diabook/theme.php:579 -#: ../../view/theme/diabook/theme.php:625 +#: view/theme/diabook/config.php:159 view/theme/diabook/theme.php:579 +#: view/theme/diabook/theme.php:625 msgid "Earth Layers" msgstr "Карта" -#: ../../view/theme/diabook/config.php:160 -#: ../../view/theme/diabook/theme.php:391 -#: ../../view/theme/diabook/theme.php:626 +#: view/theme/diabook/config.php:160 view/theme/diabook/theme.php:391 +#: view/theme/diabook/theme.php:626 view/theme/vier/config.php:112 +#: view/theme/vier/theme.php:156 msgid "Community Profiles" msgstr "Профили сообщества" -#: ../../view/theme/diabook/config.php:161 -#: ../../view/theme/diabook/theme.php:599 -#: ../../view/theme/diabook/theme.php:627 +#: view/theme/diabook/config.php:161 view/theme/diabook/theme.php:599 +#: view/theme/diabook/theme.php:627 view/theme/vier/config.php:113 msgid "Help or @NewHere ?" msgstr "Помощь" -#: ../../view/theme/diabook/config.php:162 -#: ../../view/theme/diabook/theme.php:606 -#: ../../view/theme/diabook/theme.php:628 +#: view/theme/diabook/config.php:162 view/theme/diabook/theme.php:606 +#: view/theme/diabook/theme.php:628 view/theme/vier/config.php:114 +#: view/theme/vier/theme.php:377 msgid "Connect Services" msgstr "Подключить службы" -#: ../../view/theme/diabook/config.php:163 -#: ../../view/theme/diabook/theme.php:523 -#: ../../view/theme/diabook/theme.php:629 +#: view/theme/diabook/config.php:163 view/theme/diabook/theme.php:523 +#: view/theme/diabook/theme.php:629 view/theme/vier/config.php:115 +#: view/theme/vier/theme.php:203 msgid "Find Friends" msgstr "Найти друзей" -#: ../../view/theme/diabook/config.php:164 -#: ../../view/theme/diabook/theme.php:412 -#: ../../view/theme/diabook/theme.php:630 +#: view/theme/diabook/config.php:164 view/theme/diabook/theme.php:412 +#: view/theme/diabook/theme.php:630 view/theme/vier/config.php:116 +#: view/theme/vier/theme.php:185 msgid "Last users" msgstr "Последние пользователи" -#: ../../view/theme/diabook/config.php:165 -#: ../../view/theme/diabook/theme.php:486 -#: ../../view/theme/diabook/theme.php:631 +#: view/theme/diabook/config.php:165 view/theme/diabook/theme.php:486 +#: view/theme/diabook/theme.php:631 msgid "Last photos" msgstr "Последние фото" -#: ../../view/theme/diabook/config.php:166 -#: ../../view/theme/diabook/theme.php:441 -#: ../../view/theme/diabook/theme.php:632 +#: view/theme/diabook/config.php:166 view/theme/diabook/theme.php:441 +#: view/theme/diabook/theme.php:632 msgid "Last likes" msgstr "Последние likes" -#: ../../view/theme/diabook/theme.php:125 +#: view/theme/diabook/theme.php:125 msgid "Your contacts" msgstr "Ваши контакты" -#: ../../view/theme/diabook/theme.php:128 +#: view/theme/diabook/theme.php:128 msgid "Your personal photos" msgstr "Ваши личные фотографии" -#: ../../view/theme/diabook/theme.php:524 +#: view/theme/diabook/theme.php:524 view/theme/vier/theme.php:204 msgid "Local Directory" msgstr "Локальный каталог" -#: ../../view/theme/diabook/theme.php:584 +#: view/theme/diabook/theme.php:584 msgid "Set zoomfactor for Earth Layers" msgstr "Установить масштаб карты" -#: ../../view/theme/diabook/theme.php:622 +#: view/theme/diabook/theme.php:622 msgid "Show/hide boxes at right-hand column:" msgstr "Показать/скрыть блоки в правой колонке:" -#: ../../view/theme/vier/config.php:56 +#: view/theme/vier/config.php:64 +msgid "Comma separated list of helper forums" +msgstr "" + +#: view/theme/vier/config.php:110 msgid "Set style" msgstr "" -#: ../../view/theme/duepuntozero/config.php:45 +#: view/theme/vier/theme.php:295 +msgid "Quick Start" +msgstr "Быстрый запуск" + +#: view/theme/duepuntozero/config.php:45 msgid "greenzero" msgstr "" -#: ../../view/theme/duepuntozero/config.php:46 +#: view/theme/duepuntozero/config.php:46 msgid "purplezero" msgstr "" -#: ../../view/theme/duepuntozero/config.php:47 +#: view/theme/duepuntozero/config.php:47 msgid "easterbunny" msgstr "" -#: ../../view/theme/duepuntozero/config.php:48 +#: view/theme/duepuntozero/config.php:48 msgid "darkzero" msgstr "" -#: ../../view/theme/duepuntozero/config.php:49 +#: view/theme/duepuntozero/config.php:49 msgid "comix" msgstr "" -#: ../../view/theme/duepuntozero/config.php:50 +#: view/theme/duepuntozero/config.php:50 msgid "slackr" msgstr "" -#: ../../view/theme/duepuntozero/config.php:62 +#: view/theme/duepuntozero/config.php:62 msgid "Variations" msgstr "" diff --git a/view/ru/strings.php b/view/ru/strings.php index 09755ca7bb..81600c48f3 100644 --- a/view/ru/strings.php +++ b/view/ru/strings.php @@ -2,13 +2,16 @@ if(! function_exists("string_plural_select_ru")) { function string_plural_select_ru($n){ - return ($n%10==1 && $n%100!=11 ? 0 : $n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2);; + return ; }} ; +$a->strings["Network:"] = "Сеть:"; +$a->strings["Forum"] = "Форум"; $a->strings["%d contact edited."] = array( - 0 => "%d контакт изменён.", - 1 => "%d контакты изменены", - 2 => "%d контакты изменены", + 0 => "", + 1 => "", + 2 => "", + 3 => "", ); $a->strings["Could not access contact record."] = "Не удалось получить доступ к записи контакта."; $a->strings["Could not locate selected profile."] = "Не удалось найти выбранный профиль."; @@ -34,26 +37,12 @@ $a->strings["(Update was successful)"] = "(Обновление было усп $a->strings["(Update was not successful)"] = "(Обновление не удалось)"; $a->strings["Suggest friends"] = "Предложить друзей"; $a->strings["Network type: %s"] = "Сеть: %s"; -$a->strings["%d contact in common"] = array( - 0 => "%d Контакт", - 1 => "%d Контактов", - 2 => "%d Контактов", -); -$a->strings["View all contacts"] = "Показать все контакты"; -$a->strings["Unblock"] = "Разблокировать"; -$a->strings["Block"] = "Заблокировать"; -$a->strings["Toggle Blocked status"] = "Изменить статус блокированности (заблокировать/разблокировать)"; -$a->strings["Unignore"] = "Не игнорировать"; -$a->strings["Ignore"] = "Игнорировать"; -$a->strings["Toggle Ignored status"] = "Изменить статус игнорирования"; -$a->strings["Unarchive"] = "Разархивировать"; -$a->strings["Archive"] = "Архивировать"; -$a->strings["Toggle Archive status"] = "Сменить статус архивации (архивирова/не архивировать)"; -$a->strings["Repair"] = "Восстановить"; -$a->strings["Advanced Contact Settings"] = "Дополнительные Настройки Контакта"; $a->strings["Communications lost with this contact!"] = "Связь с контактом утеряна!"; -$a->strings["Contact Editor"] = "Редактор контакта"; -$a->strings["Submit"] = "Подтвердить"; +$a->strings["Fetch further information for feeds"] = ""; +$a->strings["Disabled"] = "Отключенный"; +$a->strings["Fetch information"] = ""; +$a->strings["Fetch information and keywords"] = ""; +$a->strings["Submit"] = "Добавить"; $a->strings["Profile Visibility"] = "Видимость профиля"; $a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Пожалуйста, выберите профиль, который вы хотите отображать %s, когда просмотр вашего профиля безопасен."; $a->strings["Contact Information / Notes"] = "Информация о контакте / Заметки"; @@ -67,6 +56,11 @@ $a->strings["Delete contact"] = "Удалить контакт"; $a->strings["Last update:"] = "Последнее обновление: "; $a->strings["Update public posts"] = "Обновить публичные сообщения"; $a->strings["Update now"] = "Обновить сейчас"; +$a->strings["Connect/Follow"] = "Подключиться/Следовать"; +$a->strings["Unblock"] = "Разблокировать"; +$a->strings["Block"] = "Заблокировать"; +$a->strings["Unignore"] = "Не игнорировать"; +$a->strings["Ignore"] = "Игнорировать"; $a->strings["Currently blocked"] = "В настоящее время заблокирован"; $a->strings["Currently ignored"] = "В настоящее время игнорируется"; $a->strings["Currently archived"] = "В данный момент архивирован"; @@ -74,12 +68,12 @@ $a->strings["Hide this contact from others"] = "Скрыть этот конта $a->strings["Replies/likes to your public posts may still be visible"] = "Ответы/лайки ваших публичных сообщений будут видимы."; $a->strings["Notification for new posts"] = ""; $a->strings["Send a notification of every new post of this contact"] = ""; -$a->strings["Fetch further information for feeds"] = ""; -$a->strings["Disabled"] = ""; -$a->strings["Fetch information"] = ""; -$a->strings["Fetch information and keywords"] = ""; $a->strings["Blacklisted keywords"] = ""; $a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = ""; +$a->strings["Profile URL"] = "URL профиля"; +$a->strings["Location:"] = "Откуда:"; +$a->strings["About:"] = "О себе:"; +$a->strings["Tags:"] = "Ключевые слова: "; $a->strings["Suggestions"] = "Предложения"; $a->strings["Suggest potential friends"] = "Предложить потенциального знакомого"; $a->strings["All Contacts"] = "Все контакты"; @@ -94,16 +88,30 @@ $a->strings["Archived"] = "Архивированные"; $a->strings["Only show archived contacts"] = "Показывать только архивные контакты"; $a->strings["Hidden"] = "Скрытые"; $a->strings["Only show hidden contacts"] = "Показывать только скрытые контакты"; -$a->strings["Mutual Friendship"] = "Взаимная дружба"; -$a->strings["is a fan of yours"] = "является вашим поклонником"; -$a->strings["you are a fan of"] = "Вы - поклонник"; -$a->strings["Edit contact"] = "Редактировать контакт"; $a->strings["Contacts"] = "Контакты"; $a->strings["Search your contacts"] = "Поиск ваших контактов"; $a->strings["Finding: "] = "Результат поиска: "; $a->strings["Find"] = "Найти"; $a->strings["Update"] = "Обновление"; +$a->strings["Archive"] = "Архивировать"; +$a->strings["Unarchive"] = "Разархивировать"; $a->strings["Delete"] = "Удалить"; +$a->strings["Status"] = "Посты"; +$a->strings["Status Messages and Posts"] = "Ваши посты"; +$a->strings["Profile"] = "Информация"; +$a->strings["Profile Details"] = "Информация о вас"; +$a->strings["View all contacts"] = "Показать все контакты"; +$a->strings["Common Friends"] = "Общие друзья"; +$a->strings["View all common friends"] = ""; +$a->strings["Repair"] = "Восстановить"; +$a->strings["Advanced Contact Settings"] = "Дополнительные Настройки Контакта"; +$a->strings["Toggle Blocked status"] = "Изменить статус блокированности (заблокировать/разблокировать)"; +$a->strings["Toggle Ignored status"] = "Изменить статус игнорирования"; +$a->strings["Toggle Archive status"] = "Сменить статус архивации (архивирова/не архивировать)"; +$a->strings["Mutual Friendship"] = "Взаимная дружба"; +$a->strings["is a fan of yours"] = "является вашим поклонником"; +$a->strings["you are a fan of"] = "Вы - поклонник"; +$a->strings["Edit contact"] = "Редактировать контакт"; $a->strings["No profile"] = "Нет профиля"; $a->strings["Manage Identities and/or Pages"] = "Управление идентификацией и / или страницами"; $a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = ""; @@ -112,7 +120,6 @@ $a->strings["Post successful."] = "Успешно добавлено."; $a->strings["Permission denied"] = "Доступ запрещен"; $a->strings["Invalid profile identifier."] = "Недопустимый идентификатор профиля."; $a->strings["Profile Visibility Editor"] = "Редактор видимости профиля"; -$a->strings["Profile"] = "Профиль"; $a->strings["Click on a contact to add or remove."] = "Нажмите на контакт, чтобы добавить или удалить."; $a->strings["Visible To"] = "Видимый для"; $a->strings["All Contacts (with secure profile access)"] = "Все контакты (с безопасным доступом к профилю)"; @@ -137,9 +144,6 @@ $a->strings["Edit your default profile to your liking. Review t $a->strings["Profile Keywords"] = "Ключевые слова профиля"; $a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Установите некоторые публичные ключевые слова для вашего профиля по умолчанию, которые описывают ваши интересы. Мы можем быть в состоянии найти других людей со схожими интересами и предложить дружбу."; $a->strings["Connecting"] = "Подключение"; -$a->strings["Facebook"] = "Facebook"; -$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Авторизуйте Facebook Connector , если у вас уже есть аккаунт на Facebook, и мы (по желанию) импортируем всех ваших друзей и беседы с Facebook."; -$a->strings["If this is your own personal server, installing the Facebook addon may ease your transition to the free social web."] = "Если это ваш личный сервер, установите дополнение Facebook, это может облегчить ваш переход на свободную социальную сеть."; $a->strings["Importing Emails"] = "Импортирование Email-ов"; $a->strings["Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Введите информацию о доступе к вашему email на странице настроек вашего коннектора, если вы хотите импортировать, и общаться с друзьями или получать рассылки на ваш ящик электронной почты"; $a->strings["Go to Your Contacts Page"] = "Перейти на страницу ваших контактов"; @@ -164,7 +168,7 @@ $a->strings["Profile Photos"] = "Фотографии профиля"; $a->strings["Image size reduction [%s] failed."] = "Уменьшение размера изображения [%s] не удалось."; $a->strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Перезагрузите страницу с зажатой клавишей \"Shift\" для того, чтобы увидеть свое новое фото немедленно."; $a->strings["Unable to process image"] = "Не удается обработать изображение"; -$a->strings["Image exceeds size limit of %d"] = "Изображение превышает предельный размер %d"; +$a->strings["Image exceeds size limit of %s"] = ""; $a->strings["Unable to process image."] = "Невозможно обработать фото."; $a->strings["Upload File:"] = "Загрузить файл:"; $a->strings["Select a profile:"] = "Выбрать этот профиль:"; @@ -184,9 +188,28 @@ $a->strings["Tag removed"] = "Ключевое слово удалено"; $a->strings["Remove Item Tag"] = "Удалить ключевое слово"; $a->strings["Select a tag to remove: "] = "Выберите ключевое слово для удаления: "; $a->strings["Remove"] = "Удалить"; +$a->strings["Subscribing to OStatus contacts"] = ""; +$a->strings["No contact provided."] = ""; +$a->strings["Couldn't fetch information for contact."] = ""; +$a->strings["Couldn't fetch friends for contact."] = ""; +$a->strings["Done"] = "Готово"; +$a->strings["success"] = "удачно"; +$a->strings["failed"] = "неудача"; +$a->strings["ignored"] = ""; +$a->strings["Keep this window open until done."] = ""; $a->strings["Save to Folder:"] = "Сохранить в папку:"; $a->strings["- select -"] = "- выбрать -"; $a->strings["Save"] = "Сохранить"; +$a->strings["Submit Request"] = "Отправить запрос"; +$a->strings["You already added this contact."] = ""; +$a->strings["Diaspora support isn't enabled. Contact can't be added."] = ""; +$a->strings["OStatus support is disabled. Contact can't be added."] = ""; +$a->strings["The network type couldn't be detected. Contact can't be added."] = ""; +$a->strings["Please answer the following:"] = "Пожалуйста, ответьте следующее:"; +$a->strings["Does %s know you?"] = "%s знает вас?"; +$a->strings["No"] = "Нет"; +$a->strings["Add a personal note:"] = "Добавить личную заметку:"; +$a->strings["Your Identity Address:"] = "Ваш идентификационный адрес:"; $a->strings["Contact added"] = "Контакт добавлен"; $a->strings["Unable to locate original post."] = "Не удалось найти оригинальный пост."; $a->strings["Empty post discarded."] = "Пустое сообщение отбрасывается."; @@ -207,6 +230,7 @@ $a->strings["Group removed."] = "Группа удалена."; $a->strings["Unable to remove group."] = "Не удается удалить группу."; $a->strings["Group Editor"] = "Редактор групп"; $a->strings["Members"] = "Участники"; +$a->strings["Group is empty"] = "Группа пуста"; $a->strings["You must be logged in to use addons. "] = "Вы должны войти в систему, чтобы использовать аддоны."; $a->strings["Applications"] = "Приложения"; $a->strings["No installed applications."] = "Нет установленных приложений."; @@ -233,6 +257,8 @@ $a->strings["[Name Withheld]"] = "[Имя не разглашается]"; $a->strings["%1\$s has joined %2\$s"] = "%1\$s присоединился %2\$s"; $a->strings["Requested profile is not available."] = "Запрашиваемый профиль недоступен."; $a->strings["Tips for New Members"] = "Советы для новых участников"; +$a->strings["Do you really want to delete this video?"] = ""; +$a->strings["Delete Video"] = "Удалить видео"; $a->strings["No videos selected"] = "Видео не выбрано"; $a->strings["Access to this item is restricted."] = "Доступ к этому пункту ограничен."; $a->strings["View Video"] = "Просмотреть видео"; @@ -243,6 +269,7 @@ $a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s tagged %2\$s's %3\ $a->strings["Friend suggestion sent."] = "Приглашение в друзья отправлено."; $a->strings["Suggest Friends"] = "Предложить друзей"; $a->strings["Suggest a friend for %s"] = "Предложить друга для %s."; +$a->strings["Invalid request."] = "Неверный запрос."; $a->strings["No valid account found."] = "Не найдено действительного аккаунта."; $a->strings["Password reset request issued. Check your email."] = "Запрос на сброс пароля принят. Проверьте вашу электронную почту."; $a->strings["\n\t\tDear %1\$s,\n\t\t\tA request was recently received at \"%2\$s\" to reset your account\n\t\tpassword. In order to confirm this request, please select the verification link\n\t\tbelow or paste it into your web browser address bar.\n\n\t\tIf you did NOT request this change, please DO NOT follow the link\n\t\tprovided and ignore and/or delete this email.\n\n\t\tYour password will not be changed unless we can verify that you\n\t\tissued this request."] = ""; @@ -262,26 +289,16 @@ $a->strings["Forgot your Password?"] = "Забыли пароль?"; $a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Введите адрес электронной почты и подтвердите, что вы хотите сбросить ваш пароль. Затем проверьте свою электронную почту для получения дальнейших инструкций."; $a->strings["Nickname or Email: "] = "Ник или E-mail: "; $a->strings["Reset"] = "Сброс"; -$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %3\$s от %2\$s "; -$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %3\$s от %2\$s "; $a->strings["{0} wants to be your friend"] = "{0} хочет стать Вашим другом"; $a->strings["{0} sent you a message"] = "{0} отправил Вам сообщение"; $a->strings["{0} requested registration"] = "{0} требуемая регистрация"; -$a->strings["{0} commented %s's post"] = "{0} прокомментировал сообщение от %s"; -$a->strings["{0} liked %s's post"] = "{0} нравится сообщение от %s"; -$a->strings["{0} disliked %s's post"] = "{0} не нравится сообщение от %s"; -$a->strings["{0} is now friends with %s"] = "{0} теперь друзья с %s"; -$a->strings["{0} posted"] = "{0} опубликовано"; -$a->strings["{0} tagged %s's post with #%s"] = "{0} пометил сообщение %s с #%s"; -$a->strings["{0} mentioned you in a post"] = "{0} упоменул Вас в сообщение"; $a->strings["No contacts."] = "Нет контактов."; -$a->strings["View Contacts"] = "Просмотр контактов"; $a->strings["Invalid request identifier."] = "Неверный идентификатор запроса."; $a->strings["Discard"] = "Отказаться"; $a->strings["System"] = "Система"; -$a->strings["Network"] = "Сеть"; +$a->strings["Network"] = "Новости"; $a->strings["Personal"] = "Персонал"; -$a->strings["Home"] = "Главная"; +$a->strings["Home"] = "Мой профиль"; $a->strings["Introductions"] = "Запросы"; $a->strings["Show Ignored Requests"] = "Показать проигнорированные запросы"; $a->strings["Hide Ignored Requests"] = "Скрыть проигнорированные запросы"; @@ -294,12 +311,14 @@ $a->strings["Approve"] = "Одобрить"; $a->strings["Claims to be known to you: "] = "Утверждения, о которых должно быть вам известно: "; $a->strings["yes"] = "да"; $a->strings["no"] = "нет"; -$a->strings["Approve as: "] = "Утвердить как: "; +$a->strings["Shall your connection be bidirectional or not? \"Friend\" implies that you allow to read and you subscribe to their posts. \"Fan/Admirer\" means that you allow to read but you do not want to read theirs. Approve as: "] = ""; +$a->strings["Shall your connection be bidirectional or not? \"Friend\" implies that you allow to read and you subscribe to their posts. \"Sharer\" means that you allow to read but you do not want to read theirs. Approve as: "] = ""; $a->strings["Friend"] = "Друг"; $a->strings["Sharer"] = "Участник"; $a->strings["Fan/Admirer"] = "Фанат / Поклонник"; $a->strings["Friend/Connect Request"] = "Запрос в друзья / на подключение"; $a->strings["New Follower"] = "Новый фолловер"; +$a->strings["Gender:"] = "Пол:"; $a->strings["No introductions."] = "Запросов нет."; $a->strings["Notifications"] = "Уведомления"; $a->strings["%s liked %s's post"] = "%s нравится %s сообшение"; @@ -348,30 +367,31 @@ $a->strings["Upload photo"] = "Загрузить фото"; $a->strings["Insert web link"] = "Вставить веб-ссылку"; $a->strings["Please wait"] = "Пожалуйста, подождите"; $a->strings["No messages."] = "Нет сообщений."; +$a->strings["Message not available."] = "Сообщение не доступно."; +$a->strings["Delete message"] = "Удалить сообщение"; +$a->strings["Delete conversation"] = "Удалить историю общения"; +$a->strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Невозможно защищённое соединение. Вы имеете возможность ответить со страницы профиля отправителя."; +$a->strings["Send Reply"] = "Отправить ответ"; $a->strings["Unknown sender - %s"] = "Неизвестный отправитель - %s"; $a->strings["You and %s"] = "Вы и %s"; $a->strings["%s and You"] = "%s и Вы"; -$a->strings["Delete conversation"] = "Удалить историю общения"; $a->strings["D, d M Y - g:i A"] = "D, d M Y - g:i A"; $a->strings["%d message"] = array( 0 => "%d сообщение", 1 => "%d сообщений", 2 => "%d сообщений", + 3 => "%d сообщений", ); -$a->strings["Message not available."] = "Сообщение не доступно."; -$a->strings["Delete message"] = "Удалить сообщение"; -$a->strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Невозможно защищённое соединение. Вы имеете возможность ответить со страницы профиля отправителя."; -$a->strings["Send Reply"] = "Отправить ответ"; $a->strings["[Embedded content - reload page to view]"] = "[Встроенное содержание - перезагрузите страницу для просмотра]"; $a->strings["Contact settings applied."] = "Установки контакта приняты."; $a->strings["Contact update failed."] = "Обновление контакта неудачное."; -$a->strings["Repair Contact Settings"] = "Восстановить установки контакта"; $a->strings["WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working."] = "ВНИМАНИЕ: Это крайне важно! Если вы введете неверную информацию, ваша связь с этим контактом перестанет работать."; $a->strings["Please use your browser 'Back' button now if you are uncertain what to do on this page."] = "Пожалуйста, нажмите клавишу вашего браузера 'Back' или 'Назад' сейчас, если вы не уверены, что делаете на этой странице."; -$a->strings["Return to contact editor"] = "Возврат к редактору контакта"; $a->strings["No mirroring"] = ""; $a->strings["Mirror as forwarded posting"] = ""; $a->strings["Mirror as my own posting"] = ""; +$a->strings["Return to contact editor"] = "Возврат к редактору контакта"; +$a->strings["Refetch contact data"] = ""; $a->strings["Name"] = "Имя"; $a->strings["Account Nickname"] = "Ник аккаунта"; $a->strings["@Tagname - overrides Name/Nickname"] = ""; @@ -387,9 +407,12 @@ $a->strings["Mark this contact as remote_self, this will cause friendica to repo $a->strings["Login"] = "Вход"; $a->strings["The post was created"] = ""; $a->strings["Access denied."] = "Доступ запрещен."; -$a->strings["People Search"] = "Поиск людей"; +$a->strings["Connect"] = "Подключить"; +$a->strings["View Profile"] = "Просмотреть профиль"; +$a->strings["People Search - %s"] = ""; $a->strings["No matches"] = "Нет соответствий"; $a->strings["Photos"] = "Фото"; +$a->strings["Contact Photos"] = "Фотографии контакта"; $a->strings["Files"] = "Файлы"; $a->strings["Contacts who are not members of a group"] = "Контакты, которые не являются членами группы"; $a->strings["Theme settings updated."] = "Настройки темы обновлены."; @@ -397,14 +420,28 @@ $a->strings["Site"] = "Сайт"; $a->strings["Users"] = "Пользователи"; $a->strings["Plugins"] = "Плагины"; $a->strings["Themes"] = "Темы"; +$a->strings["Additional features"] = "Дополнительные возможности"; $a->strings["DB updates"] = "Обновление БД"; +$a->strings["Inspect Queue"] = ""; +$a->strings["Federation Statistics"] = ""; $a->strings["Logs"] = "Журналы"; +$a->strings["View Logs"] = "Просмотр логов"; $a->strings["probe address"] = ""; $a->strings["check webfinger"] = ""; $a->strings["Admin"] = "Администратор"; $a->strings["Plugin Features"] = "Возможности плагина"; -$a->strings["diagnostics"] = ""; +$a->strings["diagnostics"] = "Диагностика"; $a->strings["User registrations waiting for confirmation"] = "Регистрации пользователей, ожидающие подтверждения"; +$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = ""; +$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = ""; +$a->strings["Administration"] = "Администрация"; +$a->strings["Currently this node is aware of %d nodes from the following platforms:"] = ""; +$a->strings["ID"] = ""; +$a->strings["Recipient Name"] = ""; +$a->strings["Recipient Profile"] = ""; +$a->strings["Created"] = ""; +$a->strings["Last Tried"] = ""; +$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = ""; $a->strings["Normal Account"] = "Обычный аккаунт"; $a->strings["Soapbox Account"] = "Аккаунт Витрина"; $a->strings["Community/Celebrity Account"] = "Аккаунт Сообщество / Знаменитость"; @@ -412,13 +449,13 @@ $a->strings["Automatic Friend Account"] = "\"Автоматический дру $a->strings["Blog Account"] = "Аккаунт блога"; $a->strings["Private Forum"] = "Личный форум"; $a->strings["Message queues"] = "Очереди сообщений"; -$a->strings["Administration"] = "Администрация"; $a->strings["Summary"] = "Резюме"; $a->strings["Registered users"] = "Зарегистрированные пользователи"; $a->strings["Pending registrations"] = "Ожидающие регистрации"; $a->strings["Version"] = "Версия"; $a->strings["Active plugins"] = "Активные плагины"; $a->strings["Can not parse base url. Must have at least ://"] = "Невозможно определить базовый URL. Он должен иметь следующий вид - ://"; +$a->strings["RINO2 needs mcrypt php extension to work."] = "Для функционирования RINO2 необходим пакет php5-mcrypt"; $a->strings["Site settings updated."] = "Установки сайта обновлены."; $a->strings["No special theme for mobile devices"] = "Нет специальной темы для мобильных устройств"; $a->strings["No community page"] = ""; @@ -429,6 +466,12 @@ $a->strings["Frequently"] = "Часто"; $a->strings["Hourly"] = "Раз в час"; $a->strings["Twice daily"] = "Два раза в день"; $a->strings["Daily"] = "Ежедневно"; +$a->strings["Users, Global Contacts"] = ""; +$a->strings["Users, Global Contacts/fallback"] = ""; +$a->strings["One month"] = "Один месяц"; +$a->strings["Three months"] = "Три месяца"; +$a->strings["Half a year"] = "Пол года"; +$a->strings["One year"] = "Один год"; $a->strings["Multi user instance"] = "Многопользовательский вид"; $a->strings["Closed"] = "Закрыто"; $a->strings["Requires approval"] = "Требуется подтверждение"; @@ -441,16 +484,20 @@ $a->strings["Registration"] = "Регистрация"; $a->strings["File upload"] = "Загрузка файлов"; $a->strings["Policies"] = "Политики"; $a->strings["Advanced"] = "Расширенный"; +$a->strings["Auto Discovered Contact Directory"] = ""; $a->strings["Performance"] = "Производительность"; $a->strings["Relocate - WARNING: advanced function. Could make this server unreachable."] = "Переместить - ПРЕДУПРЕЖДЕНИЕ: расширеная функция. Может сделать этот сервер недоступным."; $a->strings["Site name"] = "Название сайта"; -$a->strings["Host name"] = ""; -$a->strings["Sender Email"] = ""; +$a->strings["Host name"] = "Имя хоста"; +$a->strings["Sender Email"] = "Системный Email"; +$a->strings["The email address your server shall use to send notification emails from."] = "Адрес с которого будут приходить письма пользователям."; $a->strings["Banner/Logo"] = "Баннер/Логотип"; $a->strings["Shortcut icon"] = ""; +$a->strings["Link to an icon that will be used for browsers."] = ""; $a->strings["Touch icon"] = ""; +$a->strings["Link to an icon that will be used for tablets and mobiles."] = ""; $a->strings["Additional Info"] = "Дополнительная информация"; -$a->strings["For public servers: you can add additional information here that will be listed at dir.friendica.com/siteinfo."] = "Для публичных серверов: вы можете добавить дополнительную информацию, которая будет перечислена в dir.friendica.com/siteinfo."; +$a->strings["For public servers: you can add additional information here that will be listed at %s/siteinfo."] = ""; $a->strings["System language"] = "Системный язык"; $a->strings["System theme"] = "Системная тема"; $a->strings["Default system theme - may be over-ridden by user profiles - change theme settings"] = "Тема системы по умолчанию - может быть переопределена пользователем - изменить настройки темы"; @@ -458,7 +505,7 @@ $a->strings["Mobile system theme"] = "Мобильная тема системы $a->strings["Theme for mobile devices"] = "Тема для мобильных устройств"; $a->strings["SSL link policy"] = "Политика SSL"; $a->strings["Determines whether generated links should be forced to use SSL"] = "Ссылки должны быть вынуждены использовать SSL"; -$a->strings["Force SSL"] = ""; +$a->strings["Force SSL"] = "SSL принудительно"; $a->strings["Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops."] = ""; $a->strings["Old style 'Share'"] = "Старый стиль 'Share'"; $a->strings["Deactivates the bbcode element 'share' for repeating items."] = "Отключение BBCode элемента 'share' для повторяющихся элементов."; @@ -487,8 +534,8 @@ $a->strings["Block public"] = "Блокировать общественный $a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Отметьте, чтобы заблокировать публичный доступ ко всем иным публичным персональным страницам на этом сайте, если вы не вошли на сайт."; $a->strings["Force publish"] = "Принудительная публикация"; $a->strings["Check to force all profiles on this site to be listed in the site directory."] = "Отметьте, чтобы принудительно заставить все профили на этом сайте, быть перечислеными в каталоге сайта."; -$a->strings["Global directory update URL"] = "URL обновления глобального каталога"; -$a->strings["URL to update the global directory. If this is not set, the global directory is completely unavailable to the application."] = "URL для обновления глобального каталога. Если он не установлен, глобальный каталог полностью недоступен для приложения."; +$a->strings["Global directory URL"] = ""; +$a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = ""; $a->strings["Allow threaded items"] = "Разрешить темы в обсуждении"; $a->strings["Allow infinite level threading for items on this site."] = "Разрешить бесконечный уровень для тем на этом сайте."; $a->strings["Private posts by default for new users"] = "Частные сообщения по умолчанию для новых пользователей"; @@ -517,6 +564,8 @@ $a->strings["Enable OStatus support"] = "Включить поддержку OSt $a->strings["Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = ""; $a->strings["OStatus conversation completion interval"] = ""; $a->strings["How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."] = "Как часто процессы должны проверять наличие новых записей в OStatus разговорах? Это может быть очень ресурсоёмкой задачей."; +$a->strings["OStatus support can only be enabled if threading is enabled."] = ""; +$a->strings["Diaspora support can't be enabled because Friendica was installed into a sub directory."] = ""; $a->strings["Enable Diaspora support"] = "Включить поддержку Diaspora"; $a->strings["Provide built-in Diaspora network compatibility."] = "Обеспечить встроенную поддержку сети Diaspora."; $a->strings["Only allow Friendica contacts"] = "Позвольть только Friendica контакты"; @@ -533,6 +582,24 @@ $a->strings["Poll interval"] = "Интервал опроса"; $a->strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Установить задержку фоновых процессов опросов путем ограничения количества секунд, чтобы уменьшить нагрузку на систему. Если 0, используется интервал доставки."; $a->strings["Maximum Load Average"] = "Средняя максимальная нагрузка"; $a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Максимальная нагрузка на систему перед приостановкой процессов доставки и опросов - по умолчанию 50."; +$a->strings["Maximum Load Average (Frontend)"] = ""; +$a->strings["Maximum system load before the frontend quits service - default 50."] = ""; +$a->strings["Maximum table size for optimization"] = ""; +$a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = ""; +$a->strings["Minimum level of fragmentation"] = ""; +$a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = ""; +$a->strings["Periodical check of global contacts"] = ""; +$a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = ""; +$a->strings["Days between requery"] = ""; +$a->strings["Number of days after which a server is requeried for his contacts."] = ""; +$a->strings["Discover contacts from other servers"] = ""; +$a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommened setting is 'Users, Global Contacts'."] = ""; +$a->strings["Timeframe for fetching global contacts"] = ""; +$a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = ""; +$a->strings["Search the local directory"] = ""; +$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = ""; +$a->strings["Publish server information"] = ""; +$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."] = ""; $a->strings["Use MySQL full text engine"] = "Использовать систему полнотексного поиска MySQL"; $a->strings["Activates the full text engine. Speeds up search - but can only search for four and more characters."] = "Активизирует систему полнотексного поиска. Ускоряет поиск - но может искать только при указании четырех и более символов."; $a->strings["Suppress Language"] = ""; @@ -540,13 +607,17 @@ $a->strings["Suppress language information in meta information about a posting." $a->strings["Suppress Tags"] = ""; $a->strings["Suppress showing a list of hashtags at the end of the posting."] = ""; $a->strings["Path to item cache"] = "Путь к элементам кэша"; +$a->strings["The item caches buffers generated bbcode and external images."] = ""; $a->strings["Cache duration in seconds"] = "Время жизни кэша в секундах"; $a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = ""; $a->strings["Maximum numbers of comments per post"] = ""; $a->strings["How much comments should be shown for each post? Default value is 100."] = ""; $a->strings["Path for lock file"] = "Путь к файлу блокировки"; +$a->strings["The lock file is used to avoid multiple pollers at one time. Only define a folder here."] = ""; $a->strings["Temp path"] = "Временная папка"; +$a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = ""; $a->strings["Base path to installation"] = "Путь для установки"; +$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = ""; $a->strings["Disable picture proxy"] = ""; $a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = ""; $a->strings["Enable old style pager"] = ""; @@ -554,6 +625,11 @@ $a->strings["The old style pager has page numbers but slows down massively the p $a->strings["Only search in tags"] = ""; $a->strings["On large systems the text search can slow down the system extremely."] = ""; $a->strings["New base url"] = "Новый базовый url"; +$a->strings["Change base url for this server. Sends relocate message to all DFRN contacts of all users."] = ""; +$a->strings["RINO Encryption"] = "RINO шифрование"; +$a->strings["Encryption layer between nodes."] = "Слой шифрования между узлами."; +$a->strings["Embedly API key"] = ""; +$a->strings["Embedly is used to fetch additional data for web pages. This is an optional parameter."] = ""; $a->strings["Update has been marked successful"] = "Обновление было успешно отмечено"; $a->strings["Database structure update %s was successfully applied."] = ""; $a->strings["Executing of database structure update %s failed with error: %s"] = ""; @@ -574,11 +650,13 @@ $a->strings["%s user blocked/unblocked"] = array( 0 => "%s пользователь заблокирован/разблокирован", 1 => "%s пользователей заблокировано/разблокировано", 2 => "%s пользователей заблокировано/разблокировано", + 3 => "%s пользователей заблокировано/разблокировано", ); $a->strings["%s user deleted"] = array( 0 => "%s человек удален", 1 => "%s чел. удалено", 2 => "%s чел. удалено", + 3 => "%s чел. удалено", ); $a->strings["User '%s' deleted"] = "Пользователь '%s' удален"; $a->strings["User '%s' unblocked"] = "Пользователь '%s' разблокирован"; @@ -612,8 +690,12 @@ $a->strings["Enable"] = "Включить"; $a->strings["Toggle"] = "Переключить"; $a->strings["Author: "] = "Автор:"; $a->strings["Maintainer: "] = "Программа обслуживания: "; +$a->strings["Reload active plugins"] = ""; +$a->strings["There are currently no plugins available on your node. You can find the official plugin repository at %1\$s and might find other interesting plugins in the open plugin registry at %2\$s"] = ""; $a->strings["No themes found."] = "Темы не найдены."; $a->strings["Screenshot"] = "Скриншот"; +$a->strings["Reload active themes"] = ""; +$a->strings["No themes found on the system. They should be paced in %1\$s"] = ""; $a->strings["[Experimental]"] = "[экспериментально]"; $a->strings["[Unsupported]"] = "[Неподдерживаемое]"; $a->strings["Log settings updated."] = "Настройки журнала обновлены."; @@ -622,18 +704,19 @@ $a->strings["Enable Debugging"] = "Включить отладку"; $a->strings["Log file"] = "Лог-файл"; $a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = "Должно быть доступно для записи в веб-сервере. Относительно вашего Friendica каталога верхнего уровня."; $a->strings["Log level"] = "Уровень лога"; -$a->strings["Close"] = "Закрыть"; -$a->strings["FTP Host"] = "FTP хост"; -$a->strings["FTP Path"] = "Путь FTP"; -$a->strings["FTP User"] = "FTP пользователь"; -$a->strings["FTP Password"] = "FTP пароль"; -$a->strings["Search Results For:"] = "Результаты поиска для:"; +$a->strings["PHP logging"] = "PHP логирование"; +$a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = ""; +$a->strings["Off"] = "Выкл."; +$a->strings["On"] = "Вкл."; +$a->strings["Lock feature %s"] = ""; +$a->strings["Manage Additional Features"] = ""; +$a->strings["Search Results For: %s"] = ""; $a->strings["Remove term"] = "Удалить элемент"; $a->strings["Saved Searches"] = "запомненные поиски"; $a->strings["add"] = "добавить"; -$a->strings["Commented Order"] = "Прокомментированный запрос"; +$a->strings["Commented Order"] = "Последние комментарии"; $a->strings["Sort by Comment Date"] = "Сортировать по дате комментария"; -$a->strings["Posted Order"] = "Отправленный запрос"; +$a->strings["Posted Order"] = "Лента записей"; $a->strings["Sort by Post Date"] = "Сортировать по дате отправки"; $a->strings["Posts that mention or involve you"] = ""; $a->strings["New"] = "Новый"; @@ -646,36 +729,77 @@ $a->strings["Warning: This group contains %s member from an insecure network."] 0 => "Внимание: Эта группа содержит %s участника с незащищенной сети.", 1 => "Внимание: Эта группа содержит %s участников с незащищенной сети.", 2 => "Внимание: Эта группа содержит %s участников с незащищенной сети.", + 3 => "Внимание: Эта группа содержит %s участников с незащищенной сети.", ); $a->strings["Private messages to this group are at risk of public disclosure."] = "Личные сообщения к этой группе находятся под угрозой обнародования."; $a->strings["No such group"] = "Нет такой группы"; -$a->strings["Group is empty"] = "Группа пуста"; -$a->strings["Group: "] = "Группа: "; -$a->strings["Contact: "] = "Контакт: "; +$a->strings["Group: %s"] = "Группа: %s"; $a->strings["Private messages to this person are at risk of public disclosure."] = "Личные сообщения этому человеку находятся под угрозой обнародования."; $a->strings["Invalid contact."] = "Недопустимый контакт."; -$a->strings["Friends of %s"] = "%s Друзья"; $a->strings["No friends to display."] = "Нет друзей."; +$a->strings["Event can not end before it has started."] = ""; $a->strings["Event title and start time are required."] = "Название мероприятия и время начала обязательны для заполнения."; +$a->strings["Sun"] = "Вс"; +$a->strings["Mon"] = "Пн"; +$a->strings["Tue"] = "Вт"; +$a->strings["Wed"] = "Ср"; +$a->strings["Thu"] = "Чт"; +$a->strings["Fri"] = "Пт"; +$a->strings["Sat"] = "Сб"; +$a->strings["Sunday"] = "Воскресенье"; +$a->strings["Monday"] = "Понедельник"; +$a->strings["Tuesday"] = "Вторник"; +$a->strings["Wednesday"] = "Среда"; +$a->strings["Thursday"] = "Четверг"; +$a->strings["Friday"] = "Пятница"; +$a->strings["Saturday"] = "Суббота"; +$a->strings["Jan"] = "Янв"; +$a->strings["Feb"] = "Фев"; +$a->strings["Mar"] = "Мрт"; +$a->strings["Apr"] = "Апр"; +$a->strings["May"] = "Май"; +$a->strings["Jun"] = "Июн"; +$a->strings["Jul"] = "Июл"; +$a->strings["Aug"] = "Авг"; +$a->strings["Sept"] = "Сен"; +$a->strings["Oct"] = "Окт"; +$a->strings["Nov"] = "Нбр"; +$a->strings["Dec"] = "Дек"; +$a->strings["January"] = "Январь"; +$a->strings["February"] = "Февраль"; +$a->strings["March"] = "Март"; +$a->strings["April"] = "Апрель"; +$a->strings["June"] = "Июнь"; +$a->strings["July"] = "Июль"; +$a->strings["August"] = "Август"; +$a->strings["September"] = "Сентябрь"; +$a->strings["October"] = "Октябрь"; +$a->strings["November"] = "Ноябрь"; +$a->strings["December"] = "Декабрь"; +$a->strings["today"] = "сегодня"; +$a->strings["month"] = "мес."; +$a->strings["week"] = "неделя"; +$a->strings["day"] = "день"; $a->strings["l, F j"] = "l, j F"; $a->strings["Edit event"] = "Редактировать мероприятие"; -$a->strings["link to source"] = "ссылка на источник"; +$a->strings["link to source"] = "ссылка на сообщение"; $a->strings["Events"] = "Мероприятия"; $a->strings["Create New Event"] = "Создать новое мероприятие"; $a->strings["Previous"] = "Назад"; $a->strings["Next"] = "Далее"; -$a->strings["hour:minute"] = "час:минута"; $a->strings["Event details"] = "Сведения о мероприятии"; -$a->strings["Format is %s %s. Starting date and Title are required."] = "Формат %s %s. Необхлдима дата старта и заголовок."; +$a->strings["Starting date and Title are required."] = ""; $a->strings["Event Starts:"] = "Начало мероприятия:"; $a->strings["Required"] = "Требуется"; $a->strings["Finish date/time is not known or not relevant"] = "Дата/время окончания не известны, или не указаны"; $a->strings["Event Finishes:"] = "Окончание мероприятия:"; $a->strings["Adjust for viewer timezone"] = "Настройка часового пояса"; $a->strings["Description:"] = "Описание:"; -$a->strings["Location:"] = "Откуда:"; $a->strings["Title:"] = "Титул:"; $a->strings["Share this event"] = "Поделитесь этим мероприятием"; +$a->strings["Preview"] = "Предварительный просмотр"; +$a->strings["Credits"] = ""; +$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = ""; $a->strings["Select"] = "Выберите"; $a->strings["View %s's profile @ %s"] = "Просмотреть профиль %s [@ %s]"; $a->strings["%s from %s"] = "%s с %s"; @@ -684,11 +808,13 @@ $a->strings["%d comment"] = array( 0 => "%d комментарий", 1 => "%d комментариев", 2 => "%d комментариев", + 3 => "%d комментариев", ); $a->strings["comment"] = array( 0 => "", 1 => "", 2 => "комментарий", + 3 => "комментарий", ); $a->strings["show more"] = "показать больше"; $a->strings["Private Message"] = "Личное сообщение"; @@ -699,7 +825,7 @@ $a->strings["dislike"] = "не нравитса"; $a->strings["Share this"] = "Поделитесь этим"; $a->strings["share"] = "делиться"; $a->strings["This is you"] = "Это вы"; -$a->strings["Comment"] = "Комментарий"; +$a->strings["Comment"] = "Оставить комментарий"; $a->strings["Bold"] = "Жирный"; $a->strings["Italic"] = "Kурсивный"; $a->strings["Underline"] = "Подчеркнутый"; @@ -708,7 +834,6 @@ $a->strings["Code"] = "Код"; $a->strings["Image"] = "Изображение / Фото"; $a->strings["Link"] = "Ссылка"; $a->strings["Video"] = "Видео"; -$a->strings["Preview"] = "предварительный просмотр"; $a->strings["Edit"] = "Редактировать"; $a->strings["add star"] = "пометить"; $a->strings["remove star"] = "убрать метку"; @@ -728,6 +853,7 @@ $a->strings["Could not create table."] = "Не удалось создать т $a->strings["Your Friendica site database has been installed."] = "База данных сайта установлена."; $a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Вам может понадобиться импортировать файл \"database.sql\" вручную с помощью PhpMyAdmin или MySQL."; $a->strings["Please see the file \"INSTALL.txt\"."] = "Пожалуйста, смотрите файл \"INSTALL.txt\"."; +$a->strings["Database already in use."] = ""; $a->strings["System check"] = "Проверить систему"; $a->strings["Check again"] = "Проверить еще раз"; $a->strings["Database connection"] = "Подключение к базе данных"; @@ -743,7 +869,7 @@ $a->strings["Your account email address must match this in order to use the web $a->strings["Please select a default timezone for your website"] = "Пожалуйста, выберите часовой пояс по умолчанию для вашего сайта"; $a->strings["Site settings"] = "Настройки сайта"; $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Не удалось найти PATH веб-сервера в установках PHP."; -$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See 'Activating scheduled tasks'"] = "Если на вашем сервере не установлена версия командной строки PHP, вы не будете иметь возможность запускать фоновые опросы через крон. См. 'Активация запланированных задачах' "; +$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See 'Setup the poller'"] = ""; $a->strings["PHP executable path"] = "PHP executable path"; $a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Введите полный путь к исполняемому файлу PHP. Вы можете оставить это поле пустым, чтобы продолжить установку."; $a->strings["Command line PHP"] = "Command line PHP"; @@ -761,6 +887,7 @@ $a->strings["GD graphics PHP module"] = "GD graphics PHP модуль"; $a->strings["OpenSSL PHP module"] = "OpenSSL PHP модуль"; $a->strings["mysqli PHP module"] = "mysqli PHP модуль"; $a->strings["mb_string PHP module"] = "mb_string PHP модуль"; +$a->strings["mcrypt PHP module"] = ""; $a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite module"; $a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Ошибка: необходим модуль веб-сервера Apache mod-rewrite, но он не установлен."; $a->strings["Error: libCURL PHP module required but not installed."] = "Ошибка: необходим libCURL PHP модуль, но он не установлен."; @@ -768,6 +895,9 @@ $a->strings["Error: GD graphics PHP module with JPEG support required but not in $a->strings["Error: openssl PHP module required but not installed."] = "Ошибка: необходим PHP модуль OpenSSL, но он не установлен."; $a->strings["Error: mysqli PHP module required but not installed."] = "Ошибка: необходим PHP модуль MySQLi, но он не установлен."; $a->strings["Error: mb_string PHP module required but not installed."] = "Ошибка: необходим PHP модуль mb_string, но он не установлен."; +$a->strings["Error: mcrypt PHP module required but not installed."] = ""; +$a->strings["Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 encryption layer."] = ""; +$a->strings["mcrypt_create_iv() function"] = ""; $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."] = "Веб-инсталлятору требуется создать файл с именем \". htconfig.php\" в верхней папке веб-сервера, но он не в состоянии это сделать."; $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."] = "В конце этой процедуры, мы дадим вам текст, для сохранения в файле с именем .htconfig.php в корневой папке, где установлена Friendica."; @@ -780,6 +910,8 @@ $a->strings["Note: as a security measure, you should give the web server write a $a->strings["view/smarty3 is writable"] = "view/smarty3 доступен для записи"; $a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Url rewrite в .htaccess не работает. Проверьте конфигурацию вашего сервера.."; $a->strings["Url rewrite is working"] = "Url rewrite работает"; +$a->strings["ImageMagick PHP extension is installed"] = ""; +$a->strings["ImageMagick supports GIF"] = ""; $a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Файл конфигурации базы данных \".htconfig.php\" не могла быть записан. Пожалуйста, используйте приложенный текст, чтобы создать конфигурационный файл в корневом каталоге веб-сервера."; $a->strings["

What next

"] = "

Что далее

"; $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "ВАЖНО: Вам нужно будет [вручную] установить запланированное задание для регистратора."; @@ -795,21 +927,19 @@ $a->strings["%1\$s welcomes %2\$s"] = "%1\$s добро пожаловать %2\ $a->strings["Welcome to %s"] = "Добро пожаловать на %s!"; $a->strings["Sorry, maybe your upload is bigger than the PHP configuration allows"] = ""; $a->strings["Or - did you try to upload an empty file?"] = ""; -$a->strings["File exceeds size limit of %d"] = "Файл превышает предельный размер %d"; +$a->strings["File exceeds size limit of %s"] = ""; $a->strings["File upload failed."] = "Загрузка файла не удалась."; -$a->strings["Profile Match"] = "Похожие профили"; $a->strings["No keywords to match. Please add keywords to your default profile."] = "Нет соответствующих ключевых слов. Пожалуйста, добавьте ключевые слова для вашего профиля по умолчанию."; $a->strings["is interested in:"] = "интересуется:"; -$a->strings["Connect"] = "Подключить"; +$a->strings["Profile Match"] = "Похожие профили"; $a->strings["link"] = "ссылка"; $a->strings["Not available."] = "Недоступно."; $a->strings["Community"] = "Сообщество"; $a->strings["No results."] = "Нет результатов."; $a->strings["everybody"] = "каждый"; -$a->strings["Additional features"] = "Дополнительные возможности"; -$a->strings["Display"] = ""; -$a->strings["Social Networks"] = ""; -$a->strings["Delegations"] = ""; +$a->strings["Display"] = "Внешний вид"; +$a->strings["Social Networks"] = "Социальные сети"; +$a->strings["Delegations"] = "Делегирование"; $a->strings["Connected apps"] = "Подключенные приложения"; $a->strings["Export personal data"] = "Экспорт личных данных"; $a->strings["Remove account"] = "Удалить аккаунт"; @@ -843,14 +973,20 @@ $a->strings["No name"] = "Нет имени"; $a->strings["Remove authorization"] = "Удалить авторизацию"; $a->strings["No Plugin settings configured"] = "Нет сконфигурированных настроек плагина"; $a->strings["Plugin Settings"] = "Настройки плагина"; -$a->strings["Off"] = ""; -$a->strings["On"] = ""; $a->strings["Additional Features"] = "Дополнительные возможности"; +$a->strings["General Social Media Settings"] = ""; +$a->strings["Disable intelligent shortening"] = ""; +$a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = ""; +$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = ""; +$a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = ""; +$a->strings["Your legacy GNU Social account"] = ""; +$a->strings["If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done."] = ""; +$a->strings["Repair OStatus subscriptions"] = ""; $a->strings["Built-in support for %s connectivity is %s"] = "Встроенная поддержка для %s подключение %s"; $a->strings["Diaspora"] = "Diaspora"; $a->strings["enabled"] = "подключено"; $a->strings["disabled"] = "отключено"; -$a->strings["StatusNet"] = "StatusNet"; +$a->strings["GNU Social (OStatus)"] = ""; $a->strings["Email access is disabled on this site."] = "Доступ эл. почты отключен на этом сайте."; $a->strings["Email/Mailbox Setup"] = "Настройка эл. почты / почтового ящика"; $a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Если вы хотите общаться с Email контактами, используя этот сервис (по желанию), пожалуйста, уточните, как подключиться к вашему почтовому ящику."; @@ -871,14 +1007,17 @@ $a->strings["Display Settings"] = "Параметры дисплея"; $a->strings["Display Theme:"] = "Показать тему:"; $a->strings["Mobile Theme:"] = "Мобильная тема:"; $a->strings["Update browser every xx seconds"] = "Обновление браузера каждые хх секунд"; -$a->strings["Minimum of 10 seconds, no maximum"] = "Минимум 10 секунд, максимума нет"; +$a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = ""; $a->strings["Number of items to display per page:"] = "Количество элементов, отображаемых на одной странице:"; $a->strings["Maximum of 100 items"] = "Максимум 100 элементов"; $a->strings["Number of items to display per page when viewed from mobile device:"] = "Количество элементов на странице, когда просмотр осуществляется с мобильных устройств:"; $a->strings["Don't show emoticons"] = "не показывать emoticons"; +$a->strings["Calendar"] = ""; +$a->strings["Beginning of week:"] = ""; $a->strings["Don't show notices"] = ""; $a->strings["Infinite scroll"] = "Бесконечная прокрутка"; $a->strings["Automatic updates only at the top of the network page"] = ""; +$a->strings["Theme settings"] = "Настройки темы"; $a->strings["User Types"] = ""; $a->strings["Community Types"] = ""; $a->strings["Normal Account Page"] = "Стандартная страница аккаунта"; @@ -894,7 +1033,6 @@ $a->strings["Private forum - approved members only"] = "Приватный фо $a->strings["OpenID:"] = "OpenID:"; $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Необязательно) Разрешить этому OpenID входить в этот аккаунт"; $a->strings["Publish your default profile in your local site directory?"] = "Публиковать ваш профиль по умолчанию в вашем локальном каталоге на сайте?"; -$a->strings["No"] = "Нет"; $a->strings["Publish your default profile in the global social directory?"] = "Публиковать ваш профиль по умолчанию в глобальном социальном каталоге?"; $a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Скрывать ваш список контактов/друзей от посетителей вашего профиля по умолчанию?"; $a->strings["Hide your profile details from unknown viewers?"] = "Скрыть данные профиля из неизвестных зрителей?"; @@ -904,7 +1042,7 @@ $a->strings["Allow friends to tag your posts?"] = "Разрешить друзь $a->strings["Allow us to suggest you as a potential friend to new members?"] = "Позвольть предлогать Вам потенциальных друзей?"; $a->strings["Permit unknown people to send you private mail?"] = "Разрешить незнакомым людям отправлять вам личные сообщения?"; $a->strings["Profile is not published."] = "Профиль не публикуется."; -$a->strings["Your Identity Address is"] = "Ваш идентификационный адрес"; +$a->strings["Your Identity Address is '%s' or '%s'."] = ""; $a->strings["Automatically expire posts after this many days:"] = "Автоматическое истекание срока действия сообщения после стольких дней:"; $a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Если пусто, срок действия сообщений не будет ограничен. Сообщения с истекшим сроком действия будут удалены"; $a->strings["Advanced expiration settings"] = "Настройки расширенного окончания срока действия"; @@ -915,7 +1053,7 @@ $a->strings["Expire starred posts:"] = "Срок хранения усеянны $a->strings["Expire photos:"] = "Срок хранения фотографий:"; $a->strings["Only expire posts by others:"] = "Только устаревшие посты других:"; $a->strings["Account Settings"] = "Настройки аккаунта"; -$a->strings["Password Settings"] = "Настройка пароля"; +$a->strings["Password Settings"] = "Смена пароля"; $a->strings["New Password:"] = "Новый пароль:"; $a->strings["Confirm:"] = "Подтвердите:"; $a->strings["Leave password fields blank unless changing"] = "Оставьте поля пароля пустыми, если он не изменяется"; @@ -926,6 +1064,8 @@ $a->strings["Basic Settings"] = "Основные параметры"; $a->strings["Full Name:"] = "Полное имя:"; $a->strings["Email Address:"] = "Адрес электронной почты:"; $a->strings["Your Timezone:"] = "Ваш часовой пояс:"; +$a->strings["Your Language:"] = ""; +$a->strings["Set the language we use to show you friendica interface and to send you emails"] = ""; $a->strings["Default Post Location:"] = "Местонахождение по умолчанию:"; $a->strings["Use Browser Location:"] = "Использовать определение местоположения браузером:"; $a->strings["Security and Privacy Settings"] = "Параметры безопасности и конфиденциальности"; @@ -953,11 +1093,13 @@ $a->strings["You receive a private message"] = "Вы получаете личн $a->strings["You receive a friend suggestion"] = "Вы полулили предложение о добавлении в друзья"; $a->strings["You are tagged in a post"] = "Вы отмечены в посте"; $a->strings["You are poked/prodded/etc. in a post"] = ""; +$a->strings["Activate desktop notifications"] = ""; +$a->strings["Show desktop popup on new notifications"] = ""; $a->strings["Text-only notification emails"] = ""; $a->strings["Send text only notification emails, without the html part"] = ""; -$a->strings["Advanced Account/Page Type Settings"] = "Расширенные настройки типа аккаунта/страницы"; +$a->strings["Advanced Account/Page Type Settings"] = "Расширенные настройки учётной записи"; $a->strings["Change the behaviour of this account for special situations"] = "Измените поведение этого аккаунта в специальных ситуациях"; -$a->strings["Relocate"] = "Переместить"; +$a->strings["Relocate"] = "Перемещение"; $a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Если вы переместили эту анкету с другого сервера, и некоторые из ваших контактов не получили ваши обновления, попробуйте нажать эту кнопку."; $a->strings["Resend relocate message to contacts"] = "Отправить перемещённые сообщения контактам"; $a->strings["This introduction has already been accepted."] = "Этот запрос был уже принят."; @@ -968,6 +1110,7 @@ $a->strings["%d required parameter was not found at the given location"] = array 0 => "%d требуемый параметр не был найден в заданном месте", 1 => "%d требуемых параметров не были найдены в заданном месте", 2 => "%d требуемых параметров не были найдены в заданном месте", + 3 => "%d требуемых параметров не были найдены в заданном месте", ); $a->strings["Introduction complete."] = "Запрос создан."; $a->strings["Unrecoverable protocol error."] = "Неисправимая ошибка протокола."; @@ -978,32 +1121,28 @@ $a->strings["Friends are advised to please try again in 24 hours."] = "Друз $a->strings["Invalid locator"] = "Недопустимый локатор"; $a->strings["Invalid email address."] = "Неверный адрес электронной почты."; $a->strings["This account has not been configured for email. Request failed."] = "Этот аккаунт не настроен для электронной почты. Запрос не удался."; -$a->strings["Unable to resolve your name at the provided location."] = "Не удается установить ваше имя на предложенном местоположении."; $a->strings["You have already introduced yourself here."] = "Вы уже ввели информацию о себе здесь."; $a->strings["Apparently you are already friends with %s."] = "Похоже, что вы уже друзья с %s."; $a->strings["Invalid profile URL."] = "Неверный URL профиля."; $a->strings["Disallowed profile URL."] = "Запрещенный URL профиля."; $a->strings["Your introduction has been sent."] = "Ваш запрос отправлен."; +$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = ""; $a->strings["Please login to confirm introduction."] = "Для подтверждения запроса войдите пожалуйста с паролем."; $a->strings["Incorrect identity currently logged in. Please login to this profile."] = "Неверно идентифицирован вход. Пожалуйста, войдите в этот профиль."; +$a->strings["Confirm"] = "Подтвердить"; $a->strings["Hide this contact"] = "Скрыть этот контакт"; $a->strings["Welcome home %s."] = "Добро пожаловать домой, %s!"; $a->strings["Please confirm your introduction/connection request to %s."] = "Пожалуйста, подтвердите краткую информацию / запрос на подключение к %s."; -$a->strings["Confirm"] = "Подтвердить"; $a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Пожалуйста, введите ваш 'идентификационный адрес' одной из следующих поддерживаемых социальных сетей:"; -$a->strings["If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today."] = "Если вы еще не являетесь членом свободной социальной сети, перейдите по этой ссылке, чтобы найти публичный сервер Friendica и присоединиться к нам сейчас ."; +$a->strings["If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today."] = ""; $a->strings["Friend/Connection Request"] = "Запрос в друзья / на подключение"; $a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Примеры: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"; -$a->strings["Please answer the following:"] = "Пожалуйста, ответьте следующее:"; -$a->strings["Does %s know you?"] = "%s знает вас?"; -$a->strings["Add a personal note:"] = "Добавить личную заметку:"; $a->strings["Friendica"] = "Friendica"; $a->strings["StatusNet/Federated Social Web"] = "StatusNet / Federated Social Web"; $a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = "Участники сети Diaspora: пожалуйста, не пользуйтесь этой формой. Вместо этого введите %s в строке поиска Diaspora"; -$a->strings["Your Identity Address:"] = "Ваш идентификационный адрес:"; -$a->strings["Submit Request"] = "Отправить запрос"; $a->strings["Registration successful. Please check your email for further instructions."] = "Регистрация успешна. Пожалуйста, проверьте свою электронную почту для получения дальнейших инструкций."; $a->strings["Failed to send email message. Here your accout details:
login: %s
password: %s

You can change your password after login."] = ""; +$a->strings["Registration successful."] = ""; $a->strings["Your registration can not be processed."] = "Ваша регистрация не может быть обработана."; $a->strings["Your registration is pending approval by the site owner."] = "Ваша регистрация в ожидании одобрения владельцем сайта."; $a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Этот сайт превысил допустимое количество ежедневных регистраций. Пожалуйста, повторите попытку завтра."; @@ -1013,24 +1152,27 @@ $a->strings["Your OpenID (optional): "] = "Ваш OpenID (необязатель $a->strings["Include your profile in member directory?"] = "Включить ваш профиль в каталог участников?"; $a->strings["Membership on this site is by invitation only."] = "Членство на сайте только по приглашению."; $a->strings["Your invitation ID: "] = "ID вашего приглашения:"; -$a->strings["Your Full Name (e.g. Joe Smith): "] = "Ваше полное имя (например, Joe Smith): "; +$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = ""; $a->strings["Your Email Address: "] = "Ваш адрес электронной почты: "; +$a->strings["Leave empty for an auto generated password."] = ""; $a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be 'nickname@\$sitename'."] = "Выбор псевдонима профиля. Он должен начинаться с буквы. Адрес вашего профиля на данном сайте будет в этом случае 'nickname@\$sitename'."; $a->strings["Choose a nickname: "] = "Выберите псевдоним: "; $a->strings["Register"] = "Регистрация"; $a->strings["Import"] = "Импорт"; $a->strings["Import your profile to this friendica instance"] = "Импорт своего профиля в этот экземпляр friendica"; $a->strings["System down for maintenance"] = "Система закрыта на техническое обслуживание"; +$a->strings["Only logged in users are permitted to perform a search."] = ""; +$a->strings["Too Many Requests"] = ""; +$a->strings["Only one search per minute is permitted for not logged in users."] = ""; $a->strings["Search"] = "Поиск"; -$a->strings["Global Directory"] = "Глобальный каталог"; -$a->strings["Find on this site"] = "Найти на этом сайте"; -$a->strings["Site Directory"] = "Каталог сайта"; -$a->strings["Age: "] = "Возраст: "; -$a->strings["Gender: "] = "Пол: "; -$a->strings["Gender:"] = "Пол:"; +$a->strings["Items tagged with: %s"] = ""; +$a->strings["Search results for: %s"] = ""; $a->strings["Status:"] = "Статус:"; $a->strings["Homepage:"] = "Домашняя страничка:"; -$a->strings["About:"] = "О себе:"; +$a->strings["Global Directory"] = "Глобальный каталог"; +$a->strings["Find on this site"] = "Найти на этом сайте"; +$a->strings["Finding:"] = ""; +$a->strings["Site Directory"] = "Каталог сайта"; $a->strings["No entries (some entries may be hidden)."] = "Нет записей (некоторые записи могут быть скрыты)."; $a->strings["No potential page delegates located."] = ""; $a->strings["Delegate Page Management"] = "Делегировать управление страницей"; @@ -1040,7 +1182,6 @@ $a->strings["Existing Page Delegates"] = "Существующие уполно $a->strings["Potential Delegates"] = "Возможные доверенные лица"; $a->strings["Add"] = "Добавить"; $a->strings["No entries."] = "Нет записей."; -$a->strings["Common Friends"] = "Общие друзья"; $a->strings["No contacts in common."] = "Нет общих контактов."; $a->strings["Export account"] = "Экспорт аккаунта"; $a->strings["Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server."] = "Экспорт ваших регистрационных данные и контактов. Используйте, чтобы создать резервную копию вашего аккаунта и/или переместить его на другой сервер."; @@ -1050,9 +1191,9 @@ $a->strings["%1\$s is currently %2\$s"] = ""; $a->strings["Mood"] = "Настроение"; $a->strings["Set your current mood and tell your friends"] = "Напишите о вашем настроении и расскажите своим друзьям"; $a->strings["Do you really want to delete this suggestion?"] = "Вы действительно хотите удалить это предложение?"; -$a->strings["Friend Suggestions"] = "Предложения друзей"; $a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Нет предложений. Если это новый сайт, пожалуйста, попробуйте снова через 24 часа."; $a->strings["Ignore/Hide"] = "Проигнорировать/Скрыть"; +$a->strings["Friend Suggestions"] = "Предложения друзей"; $a->strings["Profile deleted."] = "Профиль удален."; $a->strings["Profile-"] = "Профиль-"; $a->strings["New profile created."] = "Новый профиль создан."; @@ -1079,6 +1220,7 @@ $a->strings[" - Visit %1\$s's %2\$s"] = " - Посетить профиль %1\$ $a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = ""; $a->strings["Hide contacts and friends:"] = ""; $a->strings["Hide your contact/friend list from viewers of this profile?"] = "Скрывать ваш список контактов / друзей от посетителей этого профиля?"; +$a->strings["Show more profile fields:"] = ""; $a->strings["Edit Profile Details"] = "Редактировать детали профиля"; $a->strings["Change Profile Photo"] = "Изменить фото профиля"; $a->strings["View this profile"] = "Просмотреть этот профиль"; @@ -1094,7 +1236,7 @@ $a->strings["Profile Name:"] = "Имя профиля:"; $a->strings["Your Full Name:"] = "Ваше полное имя:"; $a->strings["Title/Description:"] = "Заголовок / Описание:"; $a->strings["Your Gender:"] = "Ваш пол:"; -$a->strings["Birthday (%s):"] = "День рождения (%s):"; +$a->strings["Birthday :"] = ""; $a->strings["Street Address:"] = "Адрес:"; $a->strings["Locality/City:"] = "Город / Населенный пункт:"; $a->strings["Postal/Zip Code:"] = "Почтовый индекс:"; @@ -1127,6 +1269,7 @@ $a->strings["Love/romance"] = "Любовь / романтика"; $a->strings["Work/employment"] = "Работа / занятость"; $a->strings["School/education"] = "Школа / образование"; $a->strings["This is your public profile.
It may be visible to anybody using the internet."] = "Это ваш публичный профиль.
Он может быть виден каждому через Интернет."; +$a->strings["Age: "] = "Возраст: "; $a->strings["Edit/Manage Profiles"] = "Редактировать профиль"; $a->strings["Change profile photo"] = "Изменить фото профиля"; $a->strings["Create New Profile"] = "Создать новый профиль"; @@ -1136,7 +1279,7 @@ $a->strings["Edit visibility"] = "Редактировать видимость" $a->strings["Item not found"] = "Элемент не найден"; $a->strings["Edit post"] = "Редактировать сообщение"; $a->strings["upload photo"] = "загрузить фото"; -$a->strings["Attach file"] = "Приложить файл"; +$a->strings["Attach file"] = "Прикрепить файл"; $a->strings["attach file"] = "приложить файл"; $a->strings["web link"] = "веб-ссылка"; $a->strings["Insert video link"] = "Вставить ссылку видео"; @@ -1157,6 +1300,7 @@ $a->strings["This is Friendica, version"] = "Это Friendica, версия"; $a->strings["running at web location"] = "работает на веб-узле"; $a->strings["Please visit Friendica.com to learn more about the Friendica project."] = "Пожалуйста, посетите сайт Friendica.com, чтобы узнать больше о проекте Friendica."; $a->strings["Bug reports and issues: please visit"] = "Отчет об ошибках и проблемах: пожалуйста, посетите"; +$a->strings["the bugtracker at github"] = ""; $a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Предложения, похвала, пожертвования? Пишите на \"info\" на Friendica - точка com"; $a->strings["Installed plugins/addons/apps:"] = "Установленные плагины / добавки / приложения:"; $a->strings["No installed plugins/addons/apps"] = "Нет установленных плагинов / добавок / приложений"; @@ -1179,6 +1323,8 @@ $a->strings["poke, prod or do other things to somebody"] = ""; $a->strings["Recipient"] = "Получатель"; $a->strings["Choose what you wish to do to recipient"] = "Выберите действия для получателя"; $a->strings["Make this post private"] = "Сделать эту запись личной"; +$a->strings["Resubscribing to OStatus contacts"] = ""; +$a->strings["Error"] = "Ошибка"; $a->strings["Total invitation limit exceeded."] = "Превышен общий лимит приглашений."; $a->strings["%s : Not a valid email address."] = "%s: Неверный адрес электронной почты."; $a->strings["Please join us on Friendica"] = "Пожалуйста, присоединяйтесь к нам на Friendica"; @@ -1188,6 +1334,7 @@ $a->strings["%d message sent."] = array( 0 => "%d сообщение отправлено.", 1 => "%d сообщений отправлено.", 2 => "%d сообщений отправлено.", + 3 => "%d сообщений отправлено.", ); $a->strings["You have no more invitations available"] = "У вас нет больше приглашений"; $a->strings["Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks."] = "Посетите %s со списком общедоступных сайтов, к которым вы можете присоединиться. Все участники Friendica на других сайтах могут соединиться друг с другом, а также с участниками многих других социальных сетей."; @@ -1201,7 +1348,7 @@ $a->strings["You will need to supply this invitation code: \$invite_code"] = "В $a->strings["Once you have registered, please connect with me via my profile page at:"] = "После того как вы зарегистрировались, пожалуйста, свяжитесь со мной через мою страницу профиля по адресу:"; $a->strings["For more information about the Friendica project and why we feel it is important, please visit http://friendica.com"] = "Для получения более подробной информации о проекте Friendica, пожалуйста, посетите http://friendica.com"; $a->strings["Photo Albums"] = "Фотоальбомы"; -$a->strings["Contact Photos"] = "Фотографии контакта"; +$a->strings["Recent Photos"] = "Последние фото"; $a->strings["Upload New Photos"] = "Загрузить новые фото"; $a->strings["Contact information unavailable"] = "Информация о контакте недоступна"; $a->strings["Album not found."] = "Альбом не найден."; @@ -1211,7 +1358,6 @@ $a->strings["Delete Photo"] = "Удалить фото"; $a->strings["Do you really want to delete this photo?"] = "Вы действительно хотите удалить эту фотографию?"; $a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s отмечен/а/ в %2\$s by %3\$s"; $a->strings["a photo"] = "фото"; -$a->strings["Image exceeds size limit of "] = "Размер фото превышает лимит "; $a->strings["Image file is empty."] = "Файл изображения пуст."; $a->strings["No photos selected"] = "Не выбрано фото."; $a->strings["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Вы использовали %1$.2f мегабайт из %2$.2f возможных для хранения фотографий."; @@ -1234,23 +1380,33 @@ $a->strings["Use as profile photo"] = "Использовать как фото $a->strings["View Full Size"] = "Просмотреть полный размер"; $a->strings["Tags: "] = "Ключевые слова: "; $a->strings["[Remove any tag]"] = "[Удалить любое ключевое слово]"; -$a->strings["Rotate CW (right)"] = "Поворот по часовой стрелке (направо)"; -$a->strings["Rotate CCW (left)"] = "Поворот против часовой стрелки (налево)"; $a->strings["New album name"] = "Название нового альбома"; $a->strings["Caption"] = "Подпись"; $a->strings["Add a Tag"] = "Добавить ключевое слово (таг)"; $a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Пример: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; +$a->strings["Do not rotate"] = ""; +$a->strings["Rotate CW (right)"] = "Поворот по часовой стрелке (направо)"; +$a->strings["Rotate CCW (left)"] = "Поворот против часовой стрелки (налево)"; $a->strings["Private photo"] = "Личное фото"; $a->strings["Public photo"] = "Публичное фото"; $a->strings["Share"] = "Поделиться"; -$a->strings["Recent Photos"] = "Последние фото"; +$a->strings["Attending"] = array( + 0 => "", + 1 => "", + 2 => "", + 3 => "", +); +$a->strings["Not attending"] = ""; +$a->strings["Might attend"] = ""; +$a->strings["Map"] = "Карта"; +$a->strings["Not Extended"] = ""; $a->strings["Account approved."] = "Аккаунт утвержден."; $a->strings["Registration revoked for %s"] = "Регистрация отменена для %s"; $a->strings["Please login."] = "Пожалуйста, войдите с паролем."; $a->strings["Move account"] = "Удалить аккаунт"; $a->strings["You can import an account from another Friendica server."] = "Вы можете импортировать учетную запись с другого сервера Friendica."; $a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Вам нужно экспортировать свой ​​аккаунт со старого сервера и загрузить его сюда. Мы восстановим ваш ​​старый аккаунт здесь со всеми вашими контактами. Мы постараемся также сообщить друзьям, что вы переехали сюда."; -$a->strings["This feature is experimental. We can't import contacts from the OStatus network (statusnet/identi.ca) or from Diaspora"] = "Это экспериментальная функция. Мы не можем импортировать контакты из сети OStatus (StatusNet / identi.ca) или из Diaspora"; +$a->strings["This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"] = ""; $a->strings["Account file"] = "Файл аккаунта"; $a->strings["To export your account, go to \"Settings->Export your personal data\" and select \"Export account\""] = "Для экспорта аккаунта, перейдите в \"Настройки->Экспортировать ваши данные\" и выберите \"Экспорт аккаунта\""; $a->strings["Item not available."] = "Пункт не доступен."; @@ -1269,31 +1425,13 @@ $a->strings["Website Terms of Service"] = "Правила сайта"; $a->strings["terms of service"] = "правила"; $a->strings["Website Privacy Policy"] = "Политика конфиденциальности сервера"; $a->strings["privacy policy"] = "политика конфиденциальности"; -$a->strings["Requested account is not available."] = "Запрашиваемый профиль недоступен."; -$a->strings["Edit profile"] = "Редактировать профиль"; -$a->strings["Message"] = "Сообщение"; -$a->strings["Profiles"] = "Профили"; -$a->strings["Manage/edit profiles"] = "Управление / редактирование профилей"; -$a->strings["Network:"] = ""; -$a->strings["g A l F d"] = "g A l F d"; -$a->strings["F d"] = "F d"; -$a->strings["[today]"] = "[сегодня]"; -$a->strings["Birthday Reminders"] = "Напоминания о днях рождения"; -$a->strings["Birthdays this week:"] = "Дни рождения на этой неделе:"; -$a->strings["[No description]"] = "[без описания]"; -$a->strings["Event Reminders"] = "Напоминания о мероприятиях"; -$a->strings["Events this week:"] = "Мероприятия на этой неделе:"; -$a->strings["Status"] = "Статус"; -$a->strings["Status Messages and Posts"] = "Сообщение статуса и посты"; -$a->strings["Profile Details"] = "Детали профиля"; -$a->strings["Videos"] = "Видео"; -$a->strings["Events and Calendar"] = "Календарь и события"; -$a->strings["Only You Can See This"] = "Только вы можете это видеть"; $a->strings["This entry was edited"] = "Эта запись была отредактирована"; +$a->strings["I will attend"] = ""; +$a->strings["I will not attend"] = ""; +$a->strings["I might attend"] = ""; $a->strings["ignore thread"] = ""; $a->strings["unignore thread"] = ""; $a->strings["toggle ignore status"] = ""; -$a->strings["ignored"] = ""; $a->strings["Categories:"] = "Категории:"; $a->strings["Filed under:"] = "В рубрике:"; $a->strings["via"] = "через"; @@ -1311,10 +1449,10 @@ $a->strings["%d invitation available"] = array( 0 => "%d приглашение доступно", 1 => "%d приглашений доступно", 2 => "%d приглашений доступно", + 3 => "%d приглашений доступно", ); $a->strings["Find People"] = "Поиск людей"; $a->strings["Enter name or interest"] = "Введите имя или интерес"; -$a->strings["Connect/Follow"] = "Подключиться/Следовать"; $a->strings["Examples: Robert Morgenstein, Fishing"] = "Примеры: Роберт Morgenstein, Рыбалка"; $a->strings["Similar Interests"] = "Похожие интересы"; $a->strings["Random Profile"] = "Случайный профиль"; @@ -1324,19 +1462,29 @@ $a->strings["All Networks"] = "Все сети"; $a->strings["Saved Folders"] = "Сохранённые папки"; $a->strings["Everything"] = "Всё"; $a->strings["Categories"] = "Категории"; +$a->strings["%d contact in common"] = array( + 0 => "%d Контакт", + 1 => "%d Контактов", + 2 => "%d Контактов", + 3 => "%d Контактов", +); $a->strings["General Features"] = "Основные возможности"; $a->strings["Multiple Profiles"] = "Несколько профилей"; $a->strings["Ability to create multiple profiles"] = "Возможность создания нескольких профилей"; -$a->strings["Post Composition Features"] = ""; +$a->strings["Photo Location"] = ""; +$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = ""; +$a->strings["Post Composition Features"] = "Составление сообщений"; $a->strings["Richtext Editor"] = "Редактор RTF"; $a->strings["Enable richtext editor"] = "Включить редактор RTF"; -$a->strings["Post Preview"] = "предварительный просмотр"; +$a->strings["Post Preview"] = "Предварительный просмотр"; $a->strings["Allow previewing posts and comments before publishing them"] = "Разрешить предпросмотр сообщения и комментария перед их публикацией"; $a->strings["Auto-mention Forums"] = ""; $a->strings["Add/remove mention when a fourm page is selected/deselected in ACL window."] = ""; $a->strings["Network Sidebar Widgets"] = "Виджет боковой панели \"Сеть\""; $a->strings["Search by Date"] = "Поиск по датам"; $a->strings["Ability to select posts by date ranges"] = "Возможность выбора постов по диапазону дат"; +$a->strings["List Forums"] = ""; +$a->strings["Enable widget to display the forums your are connected with"] = ""; $a->strings["Group Filter"] = "Фильтр групп"; $a->strings["Enable widget to display Network posts only from selected group"] = "Включить виджет для отображения сообщений сети только от выбранной группы"; $a->strings["Network Filter"] = "Фильтр сети"; @@ -1365,6 +1513,8 @@ $a->strings["Star Posts"] = "Популярные посты"; $a->strings["Ability to mark special posts with a star indicator"] = "Возможность отметить специальные сообщения индикатором популярности"; $a->strings["Mute Post Notifications"] = ""; $a->strings["Ability to mute notifications for a thread"] = ""; +$a->strings["Advanced Profile Settings"] = "Расширенные настройки профиля"; +$a->strings["Show visitors public community forums at the Advanced Profile Page"] = ""; $a->strings["Connect URL missing."] = "Connect-URL отсутствует."; $a->strings["This site is not configured to allow communications with other networks."] = "Данный сайт не настроен так, чтобы держать связь с другими сетями."; $a->strings["No compatible communication protocols or feeds were discovered."] = "Обнаружены несовместимые протоколы связи или каналы."; @@ -1381,18 +1531,17 @@ $a->strings["A deleted group with this name was revived. Existing item permissio $a->strings["Default privacy group for new contacts"] = "Группа доступа по умолчанию для новых контактов"; $a->strings["Everybody"] = "Каждый"; $a->strings["edit"] = "редактировать"; +$a->strings["Edit groups"] = ""; $a->strings["Edit group"] = "Редактировать группу"; $a->strings["Create a new group"] = "Создать новую группу"; $a->strings["Contacts not in any group"] = "Контакты не состоят в группе"; $a->strings["Miscellaneous"] = "Разное"; -$a->strings["year"] = "год"; -$a->strings["month"] = "мес."; -$a->strings["day"] = "день"; +$a->strings["YYYY-MM-DD or MM-DD"] = ""; $a->strings["never"] = "никогда"; $a->strings["less than a second ago"] = "менее сек. назад"; +$a->strings["year"] = "год"; $a->strings["years"] = "лет"; $a->strings["months"] = "мес."; -$a->strings["week"] = "неделя"; $a->strings["weeks"] = "недель"; $a->strings["days"] = "дней"; $a->strings["hour"] = "час"; @@ -1404,26 +1553,68 @@ $a->strings["seconds"] = "сек."; $a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s назад"; $a->strings["%s's birthday"] = "день рождения %s"; $a->strings["Happy Birthday %s"] = "С днём рождения %s"; +$a->strings["Requested account is not available."] = "Запрашиваемый профиль недоступен."; +$a->strings["Edit profile"] = "Редактировать профиль"; +$a->strings["Atom feed"] = ""; +$a->strings["Message"] = "Сообщение"; +$a->strings["Profiles"] = "Профили"; +$a->strings["Manage/edit profiles"] = "Управление / редактирование профилей"; +$a->strings["g A l F d"] = "g A l F d"; +$a->strings["F d"] = "F d"; +$a->strings["[today]"] = "[сегодня]"; +$a->strings["Birthday Reminders"] = "Напоминания о днях рождения"; +$a->strings["Birthdays this week:"] = "Дни рождения на этой неделе:"; +$a->strings["[No description]"] = "[без описания]"; +$a->strings["Event Reminders"] = "Напоминания о мероприятиях"; +$a->strings["Events this week:"] = "Мероприятия на этой неделе:"; +$a->strings["j F, Y"] = "j F, Y"; +$a->strings["j F"] = "j F"; +$a->strings["Birthday:"] = "День рождения:"; +$a->strings["Age:"] = "Возраст:"; +$a->strings["for %1\$d %2\$s"] = ""; +$a->strings["Religion:"] = "Религия:"; +$a->strings["Hobbies/Interests:"] = "Хобби / Интересы:"; +$a->strings["Contact information and Social Networks:"] = "Информация о контакте и социальных сетях:"; +$a->strings["Musical interests:"] = "Музыкальные интересы:"; +$a->strings["Books, literature:"] = "Книги, литература:"; +$a->strings["Television:"] = "Телевидение:"; +$a->strings["Film/dance/culture/entertainment:"] = "Кино / Танцы / Культура / Развлечения:"; +$a->strings["Love/Romance:"] = "Любовь / Романтика:"; +$a->strings["Work/employment:"] = "Работа / Занятость:"; +$a->strings["School/education:"] = "Школа / Образование:"; +$a->strings["Forums:"] = ""; +$a->strings["Videos"] = "Видео"; +$a->strings["Events and Calendar"] = "Календарь и события"; +$a->strings["Only You Can See This"] = "Только вы можете это видеть"; +$a->strings["event"] = "мероприятие"; +$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s нравится %3\$s от %2\$s "; +$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s не нравится %3\$s от %2\$s "; +$a->strings["%1\$s is attending %2\$s's %3\$s"] = ""; +$a->strings["%1\$s is not attending %2\$s's %3\$s"] = ""; +$a->strings["%1\$s may attend %2\$s's %3\$s"] = ""; +$a->strings["Post to Email"] = "Отправить на Email"; +$a->strings["Connectors disabled, since \"%s\" is enabled."] = ""; $a->strings["Visible to everybody"] = "Видимо всем"; $a->strings["show"] = "показывать"; $a->strings["don't show"] = "не показывать"; +$a->strings["Close"] = "Закрыть"; $a->strings["[no subject]"] = "[без темы]"; $a->strings["stopped following"] = "остановлено следование"; -$a->strings["Poke"] = ""; $a->strings["View Status"] = "Просмотреть статус"; -$a->strings["View Profile"] = "Просмотреть профиль"; $a->strings["View Photos"] = "Просмотреть фото"; $a->strings["Network Posts"] = "Посты сети"; $a->strings["Edit Contact"] = "Редактировать контакт"; $a->strings["Drop Contact"] = "Удалить контакт"; $a->strings["Send PM"] = "Отправить ЛС"; +$a->strings["Poke"] = ""; $a->strings["Welcome "] = "Добро пожаловать, "; $a->strings["Please upload a profile photo."] = "Пожалуйста, загрузите фотографию профиля."; $a->strings["Welcome back "] = "Добро пожаловать обратно, "; $a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Ключ формы безопасности неправильный. Вероятно, это произошло потому, что форма была открыта слишком долго (более 3 часов) до её отправки."; -$a->strings["event"] = "мероприятие"; +$a->strings["%1\$s attends %2\$s's %3\$s"] = ""; +$a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = ""; +$a->strings["%1\$s attends maybe %2\$s's %3\$s"] = ""; $a->strings["%1\$s poked %2\$s"] = ""; -$a->strings["poked"] = ""; $a->strings["post/item"] = "пост/элемент"; $a->strings["%1\$s marked %2\$s's %3\$s as favorite"] = "%1\$s пометил %2\$s %3\$s как Фаворит"; $a->strings["remove"] = "удалить"; @@ -1431,24 +1622,58 @@ $a->strings["Delete Selected Items"] = "Удалить выбранные поз $a->strings["Follow Thread"] = ""; $a->strings["%s likes this."] = "%s нравится это."; $a->strings["%s doesn't like this."] = "%s не нравится это."; -$a->strings["%2\$d people like this"] = "%2\$d людям нравится это"; -$a->strings["%2\$d people don't like this"] = "%2\$d людям не нравится это"; +$a->strings["%s attends."] = ""; +$a->strings["%s doesn't attend."] = ""; +$a->strings["%s attends maybe."] = ""; $a->strings["and"] = "и"; $a->strings[", and %d other people"] = ", и %d других чел."; -$a->strings["%s like this."] = "%s нравится это."; -$a->strings["%s don't like this."] = "%s не нравится это."; +$a->strings["%2\$d people like this"] = "%2\$d людям нравится это"; +$a->strings["%s like this."] = ""; +$a->strings["%2\$d people don't like this"] = "%2\$d людям не нравится это"; +$a->strings["%s don't like this."] = ""; +$a->strings["%2\$d people attend"] = ""; +$a->strings["%s attend."] = ""; +$a->strings["%2\$d people don't attend"] = ""; +$a->strings["%s don't attend."] = ""; +$a->strings["%2\$d people anttend maybe"] = ""; +$a->strings["%s anttend maybe."] = ""; $a->strings["Visible to everybody"] = "Видимое всем"; $a->strings["Please enter a video link/URL:"] = "Введите ссылку на видео link/URL:"; $a->strings["Please enter an audio link/URL:"] = "Введите ссылку на аудио link/URL:"; $a->strings["Tag term:"] = ""; $a->strings["Where are you right now?"] = "И где вы сейчас?"; $a->strings["Delete item(s)?"] = "Удалить елемент(ты)?"; -$a->strings["Post to Email"] = "Отправить на Email"; -$a->strings["Connectors disabled, since \"%s\" is enabled."] = ""; $a->strings["permissions"] = "разрешения"; $a->strings["Post to Groups"] = "Пост для групп"; $a->strings["Post to Contacts"] = "Пост для контактов"; $a->strings["Private post"] = "Личное сообщение"; +$a->strings["View all"] = ""; +$a->strings["Like"] = array( + 0 => "", + 1 => "", + 2 => "", + 3 => "", +); +$a->strings["Dislike"] = array( + 0 => "", + 1 => "", + 2 => "", + 3 => "", +); +$a->strings["Not Attending"] = array( + 0 => "", + 1 => "", + 2 => "", + 3 => "", +); +$a->strings["Undecided"] = array( + 0 => "", + 1 => "", + 2 => "", + 3 => "", +); +$a->strings["Forums"] = ""; +$a->strings["External link to forum"] = ""; $a->strings["view full size"] = "посмотреть в полный размер"; $a->strings["newer"] = "новее"; $a->strings["older"] = "старее"; @@ -1456,13 +1681,20 @@ $a->strings["prev"] = "пред."; $a->strings["first"] = "первый"; $a->strings["last"] = "последний"; $a->strings["next"] = "след."; +$a->strings["Loading more entries..."] = ""; +$a->strings["The end"] = ""; $a->strings["No contacts"] = "Нет контактов"; $a->strings["%d Contact"] = array( 0 => "%d контакт", 1 => "%d контактов", 2 => "%d контактов", + 3 => "%d контактов", ); +$a->strings["View Contacts"] = "Просмотр контактов"; +$a->strings["Full Text"] = "Контент"; +$a->strings["Tags"] = "Тэги"; $a->strings["poke"] = "poke"; +$a->strings["poked"] = ""; $a->strings["ping"] = "пинг"; $a->strings["pinged"] = "пингуется"; $a->strings["prod"] = ""; @@ -1493,29 +1725,10 @@ $a->strings["frustrated"] = ""; $a->strings["motivated"] = ""; $a->strings["relaxed"] = ""; $a->strings["surprised"] = ""; -$a->strings["Monday"] = "Понедельник"; -$a->strings["Tuesday"] = "Вторник"; -$a->strings["Wednesday"] = "Среда"; -$a->strings["Thursday"] = "Четверг"; -$a->strings["Friday"] = "Пятница"; -$a->strings["Saturday"] = "Суббота"; -$a->strings["Sunday"] = "Воскресенье"; -$a->strings["January"] = "Январь"; -$a->strings["February"] = "Февраль"; -$a->strings["March"] = "Март"; -$a->strings["April"] = "Апрель"; -$a->strings["May"] = "Май"; -$a->strings["June"] = "Июнь"; -$a->strings["July"] = "Июль"; -$a->strings["August"] = "Август"; -$a->strings["September"] = "Сентябрь"; -$a->strings["October"] = "Октябрь"; -$a->strings["November"] = "Ноябрь"; -$a->strings["December"] = "Декабрь"; $a->strings["bytes"] = "байт"; $a->strings["Click to open/close"] = "Нажмите, чтобы открыть / закрыть"; -$a->strings["default"] = "значение по умолчанию"; -$a->strings["Select an alternate language"] = "Выбор альтернативного языка"; +$a->strings["View on separate page"] = ""; +$a->strings["view on separate page"] = ""; $a->strings["activity"] = "активность"; $a->strings["post"] = "сообщение"; $a->strings["Item filed"] = ""; @@ -1524,8 +1737,6 @@ $a->strings["%2\$s %3\$s"] = ""; $a->strings["%s wrote the following post"] = ""; $a->strings["$1 wrote:"] = "$1 написал:"; $a->strings["Encrypted content"] = "Зашифрованный контент"; -$a->strings["(no subject)"] = "(без темы)"; -$a->strings["noreply"] = "без ответа"; $a->strings["Cannot locate DNS info for database server '%s'"] = "Не могу найти информацию для DNS-сервера базы данных '%s'"; $a->strings["Unknown | Not categorised"] = "Неизвестно | Не определено"; $a->strings["Block immediately"] = "Блокировать немедленно"; @@ -1537,6 +1748,7 @@ $a->strings["Weekly"] = "Еженедельно"; $a->strings["Monthly"] = "Ежемесячно"; $a->strings["OStatus"] = "OStatus"; $a->strings["RSS/Atom"] = "RSS/Atom"; +$a->strings["Facebook"] = "Facebook"; $a->strings["Zot!"] = "Zot!"; $a->strings["LinkedIn"] = "LinkedIn"; $a->strings["XMPP/IM"] = "XMPP/IM"; @@ -1545,33 +1757,18 @@ $a->strings["Google+"] = "Google+"; $a->strings["pump.io"] = "pump.io"; $a->strings["Twitter"] = "Twitter"; $a->strings["Diaspora Connector"] = ""; -$a->strings["Statusnet"] = ""; +$a->strings["GNU Social"] = ""; $a->strings["App.net"] = ""; +$a->strings["Redmatrix"] = ""; $a->strings[" on Last.fm"] = "на Last.fm"; $a->strings["Starts:"] = "Начало:"; $a->strings["Finishes:"] = "Окончание:"; -$a->strings["j F, Y"] = "j F, Y"; -$a->strings["j F"] = "j F"; -$a->strings["Birthday:"] = "День рождения:"; -$a->strings["Age:"] = "Возраст:"; -$a->strings["for %1\$d %2\$s"] = ""; -$a->strings["Tags:"] = "Ключевые слова: "; -$a->strings["Religion:"] = "Религия:"; -$a->strings["Hobbies/Interests:"] = "Хобби / Интересы:"; -$a->strings["Contact information and Social Networks:"] = "Информация о контакте и социальных сетях:"; -$a->strings["Musical interests:"] = "Музыкальные интересы:"; -$a->strings["Books, literature:"] = "Книги, литература:"; -$a->strings["Television:"] = "Телевидение:"; -$a->strings["Film/dance/culture/entertainment:"] = "Кино / Танцы / Культура / Развлечения:"; -$a->strings["Love/Romance:"] = "Любовь / Романтика:"; -$a->strings["Work/employment:"] = "Работа / Занятость:"; -$a->strings["School/education:"] = "Школа / Образование:"; $a->strings["Click here to upgrade."] = "Нажмите для обновления."; $a->strings["This action exceeds the limits set by your subscription plan."] = "Это действие превышает лимиты, установленные вашим тарифным планом."; $a->strings["This action is not available under your subscription plan."] = "Это действие не доступно в соответствии с вашим планом подписки."; -$a->strings["End this session"] = "Конец этой сессии"; -$a->strings["Your posts and conversations"] = "Ваши сообщения и беседы"; -$a->strings["Your profile page"] = "Страница Вашего профиля"; +$a->strings["End this session"] = "Завершить эту сессию"; +$a->strings["Your posts and conversations"] = "Данные вашей учётной записи"; +$a->strings["Your profile page"] = "Информация о вас"; $a->strings["Your photos"] = "Ваши фотографии"; $a->strings["Your videos"] = ""; $a->strings["Your events"] = "Ваши события"; @@ -1588,9 +1785,9 @@ $a->strings["Conversations on this site"] = "Беседы на этом сайт $a->strings["Conversations on the network"] = ""; $a->strings["Directory"] = "Каталог"; $a->strings["People directory"] = "Каталог участников"; -$a->strings["Information"] = ""; +$a->strings["Information"] = "Информация"; $a->strings["Information about this friendica instance"] = ""; -$a->strings["Conversations from your friends"] = "Беседы с друзьями"; +$a->strings["Conversations from your friends"] = "Посты ваших друзей"; $a->strings["Network Reset"] = "Перезагрузка сети"; $a->strings["Load Network page with no filters"] = "Загрузить страницу сети без фильтров"; $a->strings["Friend Requests"] = "Запросы на добавление в список друзей"; @@ -1604,19 +1801,12 @@ $a->strings["Manage other pages"] = "Управление другими стр $a->strings["Account settings"] = "Настройки аккаунта"; $a->strings["Manage/Edit Profiles"] = "Управление/редактирование профилей"; $a->strings["Manage/edit friends and contacts"] = "Управление / редактирование друзей и контактов"; -$a->strings["Site setup and configuration"] = "Установка и конфигурация сайта"; +$a->strings["Site setup and configuration"] = "Конфигурация сайта"; $a->strings["Navigation"] = "Навигация"; $a->strings["Site map"] = "Карта сайта"; -$a->strings["User not found."] = "Пользователь не найден."; $a->strings["Daily posting limit of %d posts reached. The post was rejected."] = ""; $a->strings["Weekly posting limit of %d posts reached. The post was rejected."] = ""; $a->strings["Monthly posting limit of %d posts reached. The post was rejected."] = ""; -$a->strings["There is no status with this id."] = "Нет статуса с таким id."; -$a->strings["There is no conversation with this id."] = ""; -$a->strings["Invalid request."] = ""; -$a->strings["Invalid item."] = ""; -$a->strings["Invalid action. "] = ""; -$a->strings["DB error"] = ""; $a->strings["An invitation is required."] = "Требуется приглашение."; $a->strings["Invitation could not be verified."] = "Приглашение не может быть проверено."; $a->strings["Invalid OpenID url"] = "Неверный URL OpenID"; @@ -1627,17 +1817,20 @@ $a->strings["That doesn't appear to be your full (First Last) name."] = "Каж $a->strings["Your email domain is not among those allowed on this site."] = "Домен вашего адреса электронной почты не относится к числу разрешенных на этом сайте."; $a->strings["Not a valid email address."] = "Неверный адрес электронной почты."; $a->strings["Cannot use that email."] = "Нельзя использовать этот Email."; -$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Ваш \"ник\" может содержать только \"a-z\", \"0-9\", \"-\", и \"_\", а также должен начинаться с буквы."; +$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."] = ""; $a->strings["Nickname is already registered. Please choose another."] = "Такой ник уже зарегистрирован. Пожалуйста, выберите другой."; $a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Ник уже зарегистрирован на этом сайте и не может быть изменён. Пожалуйста, выберите другой ник."; $a->strings["SERIOUS ERROR: Generation of security keys failed."] = "СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась."; $a->strings["An error occurred during registration. Please try again."] = "Ошибка при регистрации. Пожалуйста, попробуйте еще раз."; +$a->strings["default"] = "значение по умолчанию"; $a->strings["An error occurred creating your default profile. Please try again."] = "Ошибка создания вашего профиля. Пожалуйста, попробуйте еще раз."; $a->strings["Friends"] = "Друзья"; $a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t"] = ""; $a->strings["\n\t\tThe login details are as follows:\n\t\t\tSite Location:\t%3\$s\n\t\t\tLogin Name:\t%1\$s\n\t\t\tPassword:\t%5\$s\n\n\t\tYou may change your password from your account \"Settings\" page after logging\n\t\tin.\n\n\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\tYou may also wish to add some basic information to your default profile\n\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\tWe recommend setting your full name, adding a profile photo,\n\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\tthan that.\n\n\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\tIf you are new and do not know anybody here, they may help\n\t\tyou to make some new and interesting friends.\n\n\n\t\tThank you and welcome to %2\$s."] = ""; $a->strings["Sharing notification from Diaspora network"] = "Делиться уведомлениями из сети Diaspora"; $a->strings["Attachments:"] = "Вложения:"; +$a->strings["(no subject)"] = "(без темы)"; +$a->strings["noreply"] = "без ответа"; $a->strings["Do you really want to delete this item?"] = "Вы действительно хотите удалить этот элемент?"; $a->strings["Archives"] = "Архивы"; $a->strings["Male"] = "Мужчина"; @@ -1653,7 +1846,6 @@ $a->strings["Hermaphrodite"] = "Гермафродит"; $a->strings["Neuter"] = "Средний род"; $a->strings["Non-specific"] = "Не определен"; $a->strings["Other"] = "Другой"; -$a->strings["Undecided"] = "Не решено"; $a->strings["Males"] = "Мужчины"; $a->strings["Females"] = "Женщины"; $a->strings["Gay"] = "Гей"; @@ -1700,6 +1892,7 @@ $a->strings["Ask me"] = "Спросите меня"; $a->strings["Friendica Notification"] = "Friendica уведомления"; $a->strings["Thank You,"] = "Спасибо,"; $a->strings["%s Administrator"] = "%s администратор"; +$a->strings["%1\$s, %2\$s Administrator"] = ""; $a->strings["%s "] = "%s "; $a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica: Оповещение] Новое сообщение, пришедшее на %s"; $a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s отправил вам новое личное сообщение на %2\$s."; @@ -1743,7 +1936,7 @@ $a->strings["Name:"] = "Имя:"; $a->strings["Photo:"] = "Фото:"; $a->strings["Please visit %s to approve or reject the suggestion."] = "Пожалуйста, посетите %s для подтверждения, или отказа запроса."; $a->strings["[Friendica:Notify] Connection accepted"] = ""; -$a->strings["'%1\$s' has acepted your connection request at %2\$s"] = ""; +$a->strings["'%1\$s' has accepted your connection request at %2\$s"] = ""; $a->strings["%2\$s has accepted your [url=%1\$s]connection request[/url]."] = ""; $a->strings["You are now mutual friends and may exchange status updates, photos, and email\n\twithout restriction."] = ""; $a->strings["Please visit %s if you wish to make any changes to this relationship."] = ""; @@ -1766,10 +1959,10 @@ $a->strings["%d contact not imported"] = array( 0 => "%d контакт не импортирован", 1 => "%d контакты не импортированы", 2 => "%d контакты не импортированы", + 3 => "%d контакты не импортированы", ); $a->strings["Done. You can now login with your username and password"] = "Завершено. Теперь вы можете войти с вашим логином и паролем"; $a->strings["toggle mobile"] = "мобильная версия"; -$a->strings["Theme settings"] = "Настройки темы"; $a->strings["Set resize level for images in posts and comments (width and height)"] = "Установить уровень изменения размера изображений в постах и ​​комментариях (ширина и высота)"; $a->strings["Set font-size for posts and comments"] = "Установить шрифт-размер для постов и комментариев"; $a->strings["Set theme width"] = "Установить ширину темы"; @@ -1800,7 +1993,9 @@ $a->strings["Your personal photos"] = "Ваши личные фотографи $a->strings["Local Directory"] = "Локальный каталог"; $a->strings["Set zoomfactor for Earth Layers"] = "Установить масштаб карты"; $a->strings["Show/hide boxes at right-hand column:"] = "Показать/скрыть блоки в правой колонке:"; +$a->strings["Comma separated list of helper forums"] = ""; $a->strings["Set style"] = ""; +$a->strings["Quick Start"] = "Быстрый запуск"; $a->strings["greenzero"] = ""; $a->strings["purplezero"] = ""; $a->strings["easterbunny"] = "";