From 2ca6cdf6b6e0fa4a04fb1d1fb6bf5d83f9ba74e8 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 13 Feb 2016 12:26:58 +0100 Subject: [PATCH 01/16] Improvements how gcontact entries are updated --- boot.php | 26 +++-- database.sql | 18 +--- include/Scrape.php | 15 ++- include/dfrn.php | 50 ++++++---- include/items.php | 13 +-- include/socgraph.php | 219 ++++++++++++------------------------------- mod/noscrape.php | 6 +- 7 files changed, 133 insertions(+), 214 deletions(-) diff --git a/boot.php b/boot.php index 4ef30eada..2b7d81412 100644 --- a/boot.php +++ b/boot.php @@ -1037,19 +1037,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 70b315ea2..25faf0f4c 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 ca6489b16..bc6aebbdc 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -12,6 +12,18 @@ 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); + } + $s = fetch_url($url); if(! $s) @@ -91,8 +103,7 @@ function scrape_dfrn($url, $dont_probe = false) { } } } - - return $ret; + return array_merge($ret, $noscrapedata); }} diff --git a/include/dfrn.php b/include/dfrn.php index 8938a9b6f..a37aaf29c 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -1115,13 +1115,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)); @@ -1130,6 +1130,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; @@ -1159,38 +1162,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 @@ -1207,7 +1213,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"]; @@ -1217,7 +1223,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" @@ -1232,9 +1238,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); @@ -1245,6 +1253,7 @@ class dfrn { unset($fields["id"]); unset($fields["uid"]); + unset($fields["url"]); unset($fields["avatar-date"]); unset($fields["name-date"]); unset($fields["uri-date"]); @@ -1264,7 +1273,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', @@ -1283,9 +1292,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); @@ -2369,8 +2379,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/items.php b/include/items.php index 1af6fe1b5..8d6b5b471 100644 --- a/include/items.php +++ b/include/items.php @@ -500,14 +500,8 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa $arr['file'] = ((x($arr,'file')) ? trim($arr['file']) : ''); - if (($arr['author-link'] == "") AND ($arr['owner-link'] == "")) { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5); - foreach ($trace AS $func) - $function[] = $func["function"]; - - $function = implode(", ", $function); - logger("Both author-link and owner-link are empty. Called by: ".$function, LOGGER_DEBUG); - } + if (($arr['author-link'] == "") AND ($arr['owner-link'] == "")) + logger("Both author-link and owner-link are empty. Called by: ".App::callstack(), LOGGER_DEBUG); if ($arr['plink'] == "") { $a = get_app(); @@ -888,9 +882,6 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa logger('item_store: new item not found in DB, id ' . $current_post); } - // Add every contact of the post to the global contact table - poco_store($arr); - create_tags_from_item($current_post); create_files_from_item($current_post); diff --git a/include/socgraph.php b/include/socgraph.php index 3b8e9140f..8ad7a4cd3 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -10,6 +10,7 @@ require_once('include/datetime.php'); require_once("include/Scrape.php"); require_once("include/html2bbcode.php"); +require_once("include/Contact.php"); /* @@ -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` @@ -1533,7 +1424,7 @@ function update_gcontact($contact) { // 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) @@ -1546,14 +1437,22 @@ function update_gcontact($contact) { $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', @@ -1581,8 +1480,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/mod/noscrape.php b/mod/noscrape.php index 51bd7234c..1f7105b76 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 ); From 253ba45c1a9f080b5086decc9696c9cda89c7ca3 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 13 Feb 2016 13:30:53 +0100 Subject: [PATCH 02/16] Added a to-do --- include/dfrn.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/dfrn.php b/include/dfrn.php index a37aaf29c..1db2c6b33 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -1965,6 +1965,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; From a4da9fb55db84fe8a88129fe542422b70ae8e68e Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 13 Feb 2016 14:09:08 +0100 Subject: [PATCH 03/16] Update the gcontact entry when the contact entry is checked for updates --- include/follow.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/follow.php b/include/follow.php index 22ff079b6..410e0e58a 100644 --- a/include/follow.php +++ b/include/follow.php @@ -1,5 +1,6 @@ Date: Sat, 13 Feb 2016 21:35:05 +0100 Subject: [PATCH 04/16] OStatus: The gcontact table will now be updated from the conversation as well --- include/ostatus.php | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/include/ostatus.php b/include/ostatus.php index 00022f8c6..983ed6e1b 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -626,6 +626,77 @@ function check_conversations($mentions = false, $override = false) { set_config('system','ostatus_last_poll', time()); } +/** + * @brief Updates the gcontact table with actor data from the conversation + * + * @param object $actor The actor object that contains the contact data + */ +function ostatus_conv_fetch_actor($actor) { + + // We set the generation to "3" since the data here is not as reliable as the data we get on other occasions + $contact = array("network" => 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; + } + } + + $contact["server_url"] = $contact["url"]; + + $server_url = matching($contact["server_url"], $contact["alias"]); + if (strlen($server_url) > 8) + $contact["server_url"] = $server_url; + + $server_url = matching($contact["server_url"], $contact["photo"]); + if (strlen($server_url) > 8) + $contact["server_url"] = $server_url; + + if (($contact["server_url"] == $contact["url"]) OR ($contact["server_url"] == $contact["alias"])) + unset($contact["server_url"]); + else { + $hostname = str_replace("http://", "", normalise_link($contact["server_url"])); + if ($hostname AND $contact["nick"]) + $contact["addr"] = $contact["nick"]."@".$hostname; + } + + update_gcontact($contact); +} + + function ostatus_completion($conversation_url, $uid, $item = array()) { $a = get_app(); @@ -729,6 +800,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)); From 15296b8036a670fd32891d71927df81d9db6293a Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 13 Feb 2016 22:20:00 +0100 Subject: [PATCH 05/16] Avoid errors when noscrape data can't be fetched. --- include/Scrape.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/Scrape.php b/include/Scrape.php index bc6aebbdc..d54a838af 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -19,9 +19,11 @@ function scrape_dfrn($url, $dont_probe = false) { if ($noscrapejson) { $noscrapedata = json_decode($noscrapejson, true); - if (is_array($noscrapedata)) + if (is_array($noscrapedata)) { if ($noscrapedata["nick"] != "") return($noscrapedata); + } else + $noscrapedata = array(); } $s = fetch_url($url); From 5086b8b2a77c0d20898dd56e720a73f8228672fb Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 00:14:03 +0100 Subject: [PATCH 06/16] DFRN Bugfix: The poco data wasn't sent --- include/dfrn.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/dfrn.php b/include/dfrn.php index 17ef541cd..f7a05bdb6 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"]); From b9e179207678576e6ade8243a4868b523c19c919 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 07:31:57 +0100 Subject: [PATCH 07/16] The shadow contact (contact with uid=0) will be updated now as well. --- include/socgraph.php | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/include/socgraph.php b/include/socgraph.php index 8ad7a4cd3..ce5b08e64 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -11,7 +11,7 @@ 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 @@ -1467,6 +1467,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; From 5d35974c19b50c98695c57cc1ad9195a36e7c396 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 11:56:23 +0100 Subject: [PATCH 08/16] "addr" and "server_url" are now generated directly in "update_gcontact" if not given. --- include/Scrape.php | 69 ++++++++++++++++++++++++++++++++++---------- include/ostatus.php | 20 ------------- include/socgraph.php | 22 ++++++++++++++ 3 files changed, 75 insertions(+), 36 deletions(-) diff --git a/include/Scrape.php b/include/Scrape.php index d54a838af..ef1db0312 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -841,18 +841,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, "/"); @@ -907,19 +907,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/ostatus.php b/include/ostatus.php index 983ed6e1b..5c5016d0f 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -164,8 +164,6 @@ function ostatus_fetchauthor($xpath, $context, $importer, &$contact, $onlyfetch) update_contact_avatar($author["author-avatar"], $importer["uid"], $contact["id"]); } - - /// @todo Add the "addr" field $contact["generation"] = 2; $contact["photo"] = $author["author-avatar"]; update_gcontact($contact); @@ -675,24 +673,6 @@ function ostatus_conv_fetch_actor($actor) { } } - $contact["server_url"] = $contact["url"]; - - $server_url = matching($contact["server_url"], $contact["alias"]); - if (strlen($server_url) > 8) - $contact["server_url"] = $server_url; - - $server_url = matching($contact["server_url"], $contact["photo"]); - if (strlen($server_url) > 8) - $contact["server_url"] = $server_url; - - if (($contact["server_url"] == $contact["url"]) OR ($contact["server_url"] == $contact["alias"])) - unset($contact["server_url"]); - else { - $hostname = str_replace("http://", "", normalise_link($contact["server_url"])); - if ($hostname AND $contact["nick"]) - $contact["addr"] = $contact["nick"]."@".$hostname; - } - update_gcontact($contact); } diff --git a/include/socgraph.php b/include/socgraph.php index ce5b08e64..e07e0d353 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -1433,6 +1433,28 @@ 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"]); From 922186bdd1a09ddc45b346e46aef4762f9b64283 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 12:39:57 +0100 Subject: [PATCH 09/16] Small bugfix for the keyword bug in the gcontact table --- include/socgraph.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/socgraph.php b/include/socgraph.php index e07e0d353..bd5b1817f 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -1422,6 +1422,14 @@ 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]) OR ($contact[$field] == "")) From ec57b61f012562e3a2464869d62ade97fdc2e8d9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 15:02:59 +0100 Subject: [PATCH 10/16] The feed function has now a simulation mode --- include/feed.php | 89 ++++++++++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/include/feed.php b/include/feed.php index eb91f7efd..6d645ecff 100644 --- a/include/feed.php +++ b/include/feed.php @@ -2,7 +2,7 @@ require_once("include/html2bbcode.php"); require_once("include/items.php"); -function feed_import($xml,$importer,&$contact, &$hub) { +function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $a = get_app(); @@ -25,7 +25,7 @@ function feed_import($xml,$importer,&$contact, &$hub) { // 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 +36,26 @@ 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; + $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"] == "") { - // $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"] == "") { + $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"] == "") + $author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue; + 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,8 +65,6 @@ 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; - $author["edited"] = $author["created"] = $xpath->query('/atom:feed/atom:updated/text()')->item(0)->nodeValue; $author["app"] = $xpath->evaluate('/atom:feed/atom:generator/text()')->item(0)->nodeValue; @@ -69,9 +74,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 +92,18 @@ function feed_import($xml,$importer,&$contact, &$hub) { $entries = $xpath->query('/rss/channel/item'); } - //if ($author["author-link"] == "") + if (is_array($contact)) { $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"]; + } $header = array(); $header["uid"] = $importer["uid"]; @@ -120,6 +126,8 @@ function feed_import($xml,$importer,&$contact, &$hub) { if (!is_object($entries)) return; + $items = array(); + $entrylist = array(); foreach ($entries AS $entry) @@ -201,13 +209,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 +280,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); } ?> From 21fc3c60d478db88b251599ee984e363e0c39bf8 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 15:05:43 +0100 Subject: [PATCH 11/16] We now show the correct platform (redmatrix or hubzilla) --- include/contact_selectors.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/contact_selectors.php b/include/contact_selectors.php index f10486623..a884a6b52 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; } From 7f1f549c6f435bfe29bf7d331748b2623f98e6ae Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 15:08:49 +0100 Subject: [PATCH 12/16] Fallback when there is no nick name --- mod/item.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mod/item.php b/mod/item.php index 7e575a17e..2ade524a0 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"]; } } From b0548018d82cf6ecc717b3382ca5e699631458e9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 19:50:59 +0100 Subject: [PATCH 13/16] Simplepie is removed since we don't use it anymore --- boot.php | 9 - include/Scrape.php | 127 +- include/feed.php | 28 +- library/simplepie/LICENSE.txt | 26 - library/simplepie/README.markdown | 53 - .../COMPATIBILITY README.txt | 7 - .../sp_compatibility_test.php | 330 - library/simplepie/create.php | 178 - library/simplepie/db.sql | 38 - library/simplepie/demo/cli_test.php | 23 - .../demo/for_the_demo/alternate_favicon.png | Bin 28621 -> 0 bytes .../for_the_demo/background_blockquote.png | Bin 27353 -> 0 bytes .../demo/for_the_demo/background_menuitem.gif | Bin 533 -> 0 bytes .../for_the_demo/background_menuitem_off.gif | Bin 533 -> 0 bytes .../background_menuitem_shadow.gif | Bin 250 -> 0 bytes .../demo/for_the_demo/favicons/alternate.png | Bin 28621 -> 0 bytes .../demo/for_the_demo/favicons/blinklist.png | Bin 4377 -> 0 bytes .../demo/for_the_demo/favicons/blogmarks.png | Bin 3823 -> 0 bytes .../demo/for_the_demo/favicons/delicious.png | Bin 3739 -> 0 bytes .../demo/for_the_demo/favicons/digg.png | Bin 4004 -> 0 bytes .../demo/for_the_demo/favicons/magnolia.png | Bin 4574 -> 0 bytes .../demo/for_the_demo/favicons/myweb2.png | Bin 4010 -> 0 bytes .../demo/for_the_demo/favicons/newsvine.png | Bin 3804 -> 0 bytes .../demo/for_the_demo/favicons/reddit.png | Bin 4239 -> 0 bytes .../demo/for_the_demo/favicons/segnalo.png | Bin 4116 -> 0 bytes .../demo/for_the_demo/favicons/simpy.png | Bin 4256 -> 0 bytes .../demo/for_the_demo/favicons/spurl.png | Bin 3970 -> 0 bytes .../demo/for_the_demo/favicons/technorati.png | Bin 4087 -> 0 bytes .../demo/for_the_demo/favicons/wists.png | Bin 3974 -> 0 bytes library/simplepie/demo/for_the_demo/feed.png | Bin 715 -> 0 bytes .../demo/for_the_demo/logo_simplepie_demo.png | Bin 3047 -> 0 bytes .../demo/for_the_demo/lucida-grande-bold.swf | Bin 21159 -> 0 bytes .../demo/for_the_demo/mediaplayer.swf | Bin 32008 -> 0 bytes .../demo/for_the_demo/mediaplayer_readme.htm | 5 - .../demo/for_the_demo/mini_podcast.png | Bin 1202 -> 0 bytes .../demo/for_the_demo/place_audio.png | Bin 851 -> 0 bytes .../demo/for_the_demo/place_video.png | Bin 36713 -> 0 bytes .../demo/for_the_demo/sIFR-print.css | 35 - .../demo/for_the_demo/sIFR-screen.css | 39 - .../demo/for_the_demo/sifr-config.js | 40 - library/simplepie/demo/for_the_demo/sifr.js | 19 - .../simplepie/demo/for_the_demo/simplepie.css | 397 - .../simplepie/demo/for_the_demo/sleight.js | 31 - .../place_audio_fireworksfile.png | Bin 39177 -> 0 bytes .../place_video_fireworksfile.png | Bin 115826 -> 0 bytes .../source_files/sIFR-r245/SifrStyleSheet.as | 71 - .../source_files/sIFR-r245/_README_.txt | 12 - .../source_files/sIFR-r245/options.as | 12 - .../source_files/sIFR-r245/sIFR.as | 359 - .../source_files/sIFR-r245/sifr.fla | Bin 47104 -> 0 bytes .../demo/for_the_demo/top_gradient.gif | Bin 1378 -> 0 bytes .../simplepie/demo/for_the_demo/verdana.swf | Bin 28575 -> 0 bytes .../for_the_demo/yanone-kaffeesatz-bold.swf | Bin 76780 -> 0 bytes library/simplepie/demo/handler_image.php | 6 - library/simplepie/demo/index.php | 295 - library/simplepie/demo/minimalistic.php | 137 - library/simplepie/demo/multifeeds.php | 108 - library/simplepie/demo/test.php | 62 - library/simplepie/idn/LICENCE | 502 - library/simplepie/idn/ReadMe.txt | 123 - library/simplepie/idn/idna_convert.class.php | 969 - library/simplepie/idn/npdata.ser | 1 - library/simplepie/simplepie.inc | 15150 ---------------- util/README | 2 +- 64 files changed, 41 insertions(+), 19153 deletions(-) delete mode 100644 library/simplepie/LICENSE.txt delete mode 100644 library/simplepie/README.markdown delete mode 100644 library/simplepie/compatibility_test/COMPATIBILITY README.txt delete mode 100644 library/simplepie/compatibility_test/sp_compatibility_test.php delete mode 100644 library/simplepie/create.php delete mode 100644 library/simplepie/db.sql delete mode 100644 library/simplepie/demo/cli_test.php delete mode 100644 library/simplepie/demo/for_the_demo/alternate_favicon.png delete mode 100644 library/simplepie/demo/for_the_demo/background_blockquote.png delete mode 100644 library/simplepie/demo/for_the_demo/background_menuitem.gif delete mode 100644 library/simplepie/demo/for_the_demo/background_menuitem_off.gif delete mode 100644 library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif delete mode 100644 library/simplepie/demo/for_the_demo/favicons/alternate.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/blinklist.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/blogmarks.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/delicious.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/digg.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/magnolia.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/myweb2.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/newsvine.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/reddit.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/segnalo.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/simpy.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/spurl.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/technorati.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/wists.png delete mode 100644 library/simplepie/demo/for_the_demo/feed.png delete mode 100644 library/simplepie/demo/for_the_demo/logo_simplepie_demo.png delete mode 100644 library/simplepie/demo/for_the_demo/lucida-grande-bold.swf delete mode 100644 library/simplepie/demo/for_the_demo/mediaplayer.swf delete mode 100644 library/simplepie/demo/for_the_demo/mediaplayer_readme.htm delete mode 100644 library/simplepie/demo/for_the_demo/mini_podcast.png delete mode 100644 library/simplepie/demo/for_the_demo/place_audio.png delete mode 100644 library/simplepie/demo/for_the_demo/place_video.png delete mode 100644 library/simplepie/demo/for_the_demo/sIFR-print.css delete mode 100644 library/simplepie/demo/for_the_demo/sIFR-screen.css delete mode 100644 library/simplepie/demo/for_the_demo/sifr-config.js delete mode 100644 library/simplepie/demo/for_the_demo/sifr.js delete mode 100644 library/simplepie/demo/for_the_demo/simplepie.css delete mode 100644 library/simplepie/demo/for_the_demo/sleight.js delete mode 100644 library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png delete mode 100644 library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla delete mode 100644 library/simplepie/demo/for_the_demo/top_gradient.gif delete mode 100644 library/simplepie/demo/for_the_demo/verdana.swf delete mode 100644 library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf delete mode 100644 library/simplepie/demo/handler_image.php delete mode 100644 library/simplepie/demo/index.php delete mode 100644 library/simplepie/demo/minimalistic.php delete mode 100644 library/simplepie/demo/multifeeds.php delete mode 100644 library/simplepie/demo/test.php delete mode 100644 library/simplepie/idn/LICENCE delete mode 100644 library/simplepie/idn/ReadMe.txt delete mode 100644 library/simplepie/idn/idna_convert.class.php delete mode 100644 library/simplepie/idn/npdata.ser delete mode 100644 library/simplepie/simplepie.inc diff --git a/boot.php b/boot.php index 4ef30eada..62b90aa2c 100644 --- a/boot.php +++ b/boot.php @@ -588,15 +588,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']; /* diff --git a/include/Scrape.php b/include/Scrape.php index ca6489b16..95a3c0221 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) { @@ -366,8 +367,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 +603,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 +646,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 +716,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 +731,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) diff --git a/include/feed.php b/include/feed.php index 6d645ecff..184b784c7 100644 --- a/include/feed.php +++ b/include/feed.php @@ -14,12 +14,13 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $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(); @@ -36,22 +37,23 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { // Is it Atom? if ($xpath->query('/atom:feed/atom:entry')->length > 0) { - $self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes; - if (is_object($self)) - foreach($self AS $attributes) + $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"] == "") + $author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue; + if ($author["author-link"] == "") { - $alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes; - if (is_object($alternate)) - foreach($alternate AS $attributes) + $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:author/atom:uri/text()')->item(0)->nodeValue; if ($author["author-link"] == "") $author["author-link"] = $xpath->evaluate('/atom:feed/atom:id/text()')->item(0)->nodeValue; @@ -65,6 +67,14 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { if ($author["author-name"] == "") $author["author-name"] = $xpath->evaluate('/atom:feed/atom:author/atom:name/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; $author["app"] = $xpath->evaluate('/atom:feed/atom:generator/text()')->item(0)->nodeValue; diff --git a/library/simplepie/LICENSE.txt b/library/simplepie/LICENSE.txt deleted file mode 100644 index a822a4bd9..000000000 --- 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 e5ca021ce..000000000 --- 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 5b2498992..000000000 --- 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 a7a7f5fde..000000000 --- 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 908ed182b..000000000 --- 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 13f504c21..000000000 --- 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 ec933c5ad..000000000 --- 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 063fb280549db7a68a47cce157d680ed7af1a8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28621 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 jER6-t2hmNVK4OZd1iu4kC z=%Iv!kdVB5zW09beeV1F=Y8()-Dk5qXV31Onc1_mGnund?=)2&+<$bRfPmnE>YLX( z1O$YL8~FacyEo-4$uh&6ipcYos@}bu6m-w}+s!q}r#Hr)1O%j1|NIE2Rzk2hjci^@ zMqavZwqCv;JZuOwK3I9Ux!71ce0Z$v;9=wI=HcY|Sfbv3%I~Ht-9KFwJ#0RBIk>q# z)^l*NArKN05EK^>6isV?9CXuT_LGN!p88tRFO}=(Q6k>-+r@d`@2?PI$%ayJ~c#o$K0Ukh<{BuKFQX61yGZ&hs*yKG^ ziq9(k7iogTYhr{Kne-HDl`wd^oHJ??V_6WF)wu}A<8E-c;cq$aZ9cC;Vkig*8ej;S zLF2ggr5iT>M{0OaP(l5m^i>K-?WX;Wi_bcaP*uT?TZ8OrirHA}rsaIcLuQk+_lB$wG!_k-AtN5b?m6(>bv`S;| zNH-9A3?jTocK0#C>C>euss~YBWP+Byz?Er{&v6!YuC^-*fl|}hEUFmTBsQ1Xyfl^P_l|`w+MTrQ z`t#Nsr6T>Z%X8VA=x9F8pPC|Bv#foK$K`(inaK?+r`M~C_a_cCzmj8^QeB}7J|HiW zuq8gidCiug%b%1o*Q`d0wGL7q#M4H$`lSx|8J0jLCktxt(n$GCO9~b3b}O*l&!W9c z7s79i(~XF!$vy0zl0ehpTgU4_!%`* z(g%^DPUV!3n=L}lf61Je@AmXhkmly5k+DX0Z3_B5A_LtGD_mc?7XOrz;I`Cum`&jL z^EUBiWDtQIjG!S!>$h1pf$}@PcP+bV+JZS&uXG!0CcHd;bK9HHrGF`q9I4m*Qe}`N zZ;vu9>$kO`nIdMMqFdP1bC>+BCHY(I^IjP>t292zyX zTQz#@GpxJ_1_a)$1iZtz>-(5?QqXiNn?DfKqMl#Y0scJX7LT9s>F$2(6mM^;gs|&r zpnVq*IpMF>LOJ*QjRsjCZ!$u9SblLzJK(uev0{VREyG{s8osog!Fv+22^+l&#S+R) zumfI=8irSNii0gF?JV+pT;jtpfvHWWQ=`8h1&zs`M|N!q{@O~gwFqPS@<`*!C%n#s zaif+lmvD*TTQHyc{@+3(M80E*APt*|BCyj1SYlI zF4$y*7=Mg;gTmYZSxdyoj|^V!vUj!J_uHQ>Y=@Qc%HxTovo?%{KC4F)=EV}N+^+$? z=ouUn*3*mbYf<{j&{f=@b&GrE{^z&*2KGfZ54;HK*@Y+K(;N##Q%mheviK{MAt7rF z?YAsHaVQn?7yWwZZ9P^{?LfvBym|R9BtEgIoM;bl|1?0$lZF0eKgo1Ks961w+tY2k z0rV}4^y9ab)c3&0bcWnXu(vF6X+mP2nDH~^h5N#V%QG}8HCkK1dOy)O@>3$7ewqR& znG9N6M8aEQ4aJ6YbP>P)*~ifpsqo<&e1O_kX^kVh`jec(z8M3Q zBwoEr=$5)MF8`Jcf!W2-*ALI7Vx32ai3UA%@=_ALcFo$GVk6h9^F?+UBG6US&zp;d z^ki0&G%c346y%Zw_(a5`wZ`nfzZ15~8u)Q>H(tkHCy|;@F*Qfu%6^8yMAUXThTybk zkXoHFcy#SIK^&^bzE3;E^2Z|wL7EIQrTddlxk?(9Cat-IX_LCYIeqz-3kuEcnu`Sw9H={+bT2>}O`@YEYI{7|`fSu(O5_PANZf6$jHVU) z?#{x6#XaqoKT)+bhUryPBG0+c-xRzaY!{Y|u7S#|DhC$$wF+^6hFvo-hL{}(c#L~x zw`2ytzBBrgNNt(%{5J8y>l&qUB`0bLZsR(s^<;BDm2pd=q$d(pk%&Qj95eXAjdjkRi968AMXXc|A(J ztrLS1p)#uIk)M$)s^A}e)i0B1D+0O`!l0MhwYb(K#!$r%t=RT>zY@VPvlgjv@}&9H z{$a?y?i1YSz~ipRzwRv#sm7|)#CPvOAFYY^H?Pq@7k+Y;wy>A{ZEA}$f2c~_EJ8Nr zZpzn}irU{_O1cyMq6zM#0SL5FDEd`$o%O~_rTTAVKfYk&RdpEOYEaY36ygmP+8F&F z6usuixHdcbaqVuWg9U>s)#s~^1(&LF(>u`y=*vcnM4)Fgw;bUa^9PRb9*4M(2&ds) z@z1(jB+->&CP7bVhA*dRqGyQ7-UW6RrvX)di)y_cikFYd8T$fZA(Elnh8NCA3jlOJEnZ#J0uv3ckhTQT>ViH zZy!+i`fHefA>~$F8J1v#onKK5p662Qz~mI&W%SJYLZUIi-Sr}q`SA`(zpJ!tVrdb- z;*Y+vNroqxRneto3ddHR*AUL_ur;hZ5T(-B6V4L!OFkmUHjS*ugjunW;HzjcYl-kZ z@b;$|BZ&SbB2|iH-bWV`p%2nu0aDMxPV*0&Hbu_s}#O`2BI4BfJ z8zn2kHu0FuhD5{Pt5-Fbdl0J}{o*>ZCnYc|S zK`Vls`)b$V8x^=~<`m!TCE|L-zGoo)WIQ<_wXRB*Z-mvdZ@c8psr7J3jqc}tcFBFG z^g|*AEQGl?m8Pn-F8V4FWZv`lx!l`2MV_`MEkGclPI|4?!M6Y0*OUZ%yO$wMq==WpYWwf2xN1ga=H-G~{TEj0Qv*Lld=fd#3 za@v|B!Mq?XX-mNo8P&r=st=_p8VQbQdcN+VTy36?DW=yu(V$kDdpp9!L(QX4cR`T~ z6Ou05Jn6J40`|)m7xqc-p7HI!DHIPq+g4?c%1O{e-;!hg+B|0cI&JQ=*4ible}OB5TZo3cd~$7sE545H{f4|ZFSYHfpA)?mF9Ti}e; zx|F>aPf0dkmfH{(W@V-bygE@O>H>3>HYgV7b~8*_)Zfw){3?+i?a7pH$r(Bn&8+#Y z=9Q~?&B!<8vx(3(#fPtv{$BBl)(0vHpR(zsu&$M!A_vOZofmKD#5lGJ5>%3961#-j z1=nt?!d})#jO2|F>Q`)a6L~1gU8LbfVj8~nsP8u_}KEZVgjL&~H{XUyn zFq_=Uk+niagIQ;hjl{V3(7%g8Tf<(Q$%T(hAj~_Sepf$u0S;TdTUok$3?^EOUn)CS zyljIGq*i$?s2S*8!Bk4>et*AKTsQ*vOI;wZ?KxWSm7G|Lx3F|=VrmMKm)Z+Xqdk~D zAreby%DFkk!-mF+whUgoYBeq2{TxG@+t)TEtq`E~ig9RMa?D**GD=GQk0!_DQ>tJF zlcyDTejmg{Oj=lHJuZ?SE8^jlOi~>$duG^Amqt{<)$T*N#xef~n>o!4TmEh?T2AFa znJ{j}6S;aU3N1T4r2&4zzTEbcbT?KvGvFu}p4!)axTg$KLS0%*Nra?(v}M-qtD9WB zHL=N?;dtHugf&!eXFy9gE;Y#@Otn;7we(vZtEa=!DNG0dI3)TmXMA&zwOuB^Ol~G` zhWgL3w?CDv{j*1El%k7M*QrYBH<#^Tc z=#_b&B4uiuJg+x2aEBRAqtyq0mCFF;?<|j>i-Pw0YI2nx9{C{V#o3W#F~Lk9D?7ki zB!|L|S2BMJ=043jnamcf5Oh_4Yk8#2g7&Vs&#v#w3@~sAFA+ojmaLNf?{ry)sD>Z``^(RhP3tD7!^%dco)=LDN#xcWu`0(B z+{0tb-37g;G0|4>NaVyKkBi!zp$WwmBtN~k*}dk%I>C2;^9uvdLB-iucl6Z)jXZ^sVzA!{9-^=A?jY=fBcEOnfdK{|w#YotQ-IIBMm2S{csUunJ#g`aAt<&8c z7wc2SUxrn%g95BTve%-(dKp}@Crt5sT`-MP;A??(Nj<5yF+7(@zGl6sQW%^5WQyfl zEvd>0H7nD!67@5^$92O;NHhAZju+KexPox@?3>4ylxxl+tK8_y?cirPlT%=uy*GTtGDPe?!MLt2N z(HB4BX;{8*`rU^Qga&`^g@3}ECw70GQlmF}#Q7=KbHW_?@i)cqr0l^Bfia07n-8H1pWmCphs$R4}xBv}aVr|FX6Zk>g|KIgE!GWSYAp zOC(JzC0aKQzt?(xLMo0gxD6s#J4IJRFZ7tr-4P{{i)9im8@u0gNv-9cGMoP=!rYI$ z-*b2($Qe!k3_-WXrOQ9Uq&vrF#&0MD`}lyIV8Zk0rFnnD>T~n=Fh`hq-#D!_>;ufr z?FO9i4b3Ud^8FW`Uvt1&|A5dt5fwhG`eZlwS^ouP28&CyF8Uj~`}8gNOJGcwZ$O0k z+U`HNCTUgZhk}BnrQt6kI!MXPkJ?Iac-xg!^j+iqi~lCmL$50w0RnrTx*V2W)YRX` z&g!XOGAaUN^Q*iY=%S@|?}?m5R?kKwja48v0uGtA(cGUD5z8;LO6_8v4JF)t{JvZX zbt`x=YVWP~3MrD-z4B~q&qTvW(HvAEdjH^&GW!*MnTu9agVJ>zL#*7|RfNC!36tfu zoR#9lFNBfasB}nkLXkwAhRUBA{!IZPsu`lCil>uaA*-NsZb2`iBU3>HL4_d4Yp`ns zoz>Vsg1niWVOrkQ95x7AkI~KpG5w3i*WT>VZ7fS=$7QLy5GR((S0zCl*xNBU>3u1* zj{RKz;PNYQnhGv3k#YC5Rpnf6>u|}2lsAgbVBw2((BtW!!Y!y|?6Bm5cA5CLAy(CX z?IYhKZjB##q~J+ktwC5u?{p~L2Uh~`!P_jPTXA;cYts9x4CAP|&s%@0Rp4vj_ho!d z5h}i&GSj9_vv>SC5jMbXROtzB;yGTRZA$hLh8!1n5uoKxBzr~P&pP*qcv!+NVx9G` zEr#gI4aZpI6wyVr`~^P90_P zo9~h)9cY-{ZVXi$c=*9=+Rx|dpx_FI@m=e^T-~_(GYV~seDpBEir{CUavtC4oTx%& z-7kv|*9-yLQPUIBV%%}8)NWCp$uqx=$)cL>#y;bN>cF!J(D6APoSVLeyRurP95psi z%+XI;2I{`@$0$_L?S}PlV@Q==S*;PccP!qMrQg5R|HkUll0(BJlD}6afW8X)Mbf&{ zH8sDS(s=P}K>Ryfp`yFH##AJ`Oevq8+fEtI6U(-~>{z-wZ@MP_h`o5($m>84W zh4_@tBv0&6Nu`Iyp8FOSYq;3ffL1atnwb%w=XHF5TFNxS2-P^rylLQTfkIl-SF}a!9_F8#9=>)DM z`vAUNISor6zivM(-=yG+0gOu11M^~=zblk5JSTezn|!*HhyXR5D<&A;0$wD2xvX+I}N*lT^i zpD4d9v~zAB>)1h8qQm^{Y~Gofi|tg3mp=+80*WRFok7=6_xKT5;tG+JA73?vCx$$j zKYG)@O){X&rEFH>kwqgPmMc?5tANRigV-v9MbbvWsnxe0?8|%)8vP_jGm3>zIorz( zYrMy*FGRLBKZi=@i#BJi#cdC7ba7|I{p6`6W_2vrEvDWUsLQG(wS}j4>UG(=y?+w^3 z;ivk5B}vvxi)1Xd`LPN}p9Jn*{5okUH>EpKzV^FAn@Yy!<8PRUaGNqnr(Lck%w<*z$_cf#0hU8>6%op+H` zw=F8rC%bwuUW@--w|6!7DKd4vV`R5l*lcrB{rhRl$Yzxk>6;J zdh#Kfofp95_HNwfmBIMav%A~&e<=N9h4FW{Kb(kT;y6s5Otpv-Ws%+|9+bvP*@0bY z?12Vex*m=dV{x_p!E@GiO4^5aOnp~>KS+xzEHFqh*NpRJ5k^PN!U}?(+w}|TZx8+|GAt!t^AoNMtK zkpdoiit}1Mg9aL_)fr>?Nj2=Ncg^X3wewsZ<~0E;0y6F_(HganZ5-S<`ic`BV{*Be z;9<{Z4?6Ny`5^UcD>{djz}*hH=lnQ>oEZ`Kv!h$I^oC~G3wL)Milc0EgDY5p#^iX{dk)30A@s<9C&!}uoW}rO4-{k_aQJw zywMGHVg!-v`_uCsq)}tPq%!YZ>9YAg&T{Fp+-|xtY@O1_Ly+0xZe>u`kCJOu4j1hU zNQ+mror)K}htQjtuUg{ZPzSamvMYZYA3vJGh)o}Nl%r+kd1+AeiqM800{`PzMDS=; z+SN*O`Dk+cs&aS3FZZ3l7ukcjIB73YFzV4==u+^5bo@uQfdHxZ5+}v)Df&;0KUC5x zr2HPv6^knId?Q~MXipb7uZ6i|0KbTHwY^?f@cUg;W@=*KG{GtIsKz~$%$+&RO2R?7 zMz7~3c6}&K9Mf0U6FGO1bCP4C|jc->Atb+LzWgm>d@@ zww3=xwG0(F?%3qGFm=h(ZohwcpN@uv=IS<+)S2b+6BDpw%eJqk>e9|hCbKSE!Yt)8 zx`w&hMJGwAiDxV{_7w%<0xtvX0TM)dZn=3XJtFUg_4}Myiyy6aC6wsq6qijDX<89` zr+9zLb85S7J`ez$h{z$65(CW~khe1~XhSo)B*PRhUAsbONrH+t%Y7qSe=`Phn#)n) zx1apNs`W?67eCE#%+zRn?3E_ZRV!kr-(U2|N>4OHo0|R%MVytfAZH>cAyXH~^-wkU z?zWSGFsOVIU_TkkxD^t~-vIURy2pr*bR*uqBQ0?HiqnU*&*vkYN*o6`B|qp>OMbX| z6MgNt3C-SwQOz}PoKwMvhhxwaYJ#ve%Hf`f@<&CKZK2g9h8pR=#&E5CkBMQzNoiSQ zgD*sl{sz6yHd%WlyKmbPrEc}`c#kVt8F0U7oGCUgkB#At0_kHQjeTmBbu<^N;IO>j9YHepGEOj-BMBh@F|&tmg_&?GABym9@J;d_2e`ew+u zl4Z$H1T?cBnRk!s55bQsv?oKvhyTicsvST)ZV5gR&xU7d<XhCbSK*fjs$%Yi@0bn{nd=R;U<02$T!K&d<)g#U10FfmevVIj9@7 z;~IOmJp#P?gQTyoJmY>LFuu(IOVGSFt5}3oFS?Yk7K<Q|@#rE%hbPs@{~sEe3wOP5{;GQ5uW2F|mN&3w!#(}k_j z(hkFIY`n@%apkgOKIhMyT2tn-_&6X!XlOtEKV|8s#4rF&QmL9N#Gktfz>UvVu2{|X zom#{$D*V2V>>fE1Lw4-mWS#s(cC`LPoo8Vo^QZAa5&j^QcSkROdkPjGfjg%&!y#%v zKza(|G@f7k?k)AuZ#nI;XF+~kJp+uJqi<`#-11_~;;#ogc$Wl@po{sbXN_zd+Dr1o z&=4^;PXKpt)HrYRVtEQ+o;`J|c)B{!vSXuRPJ%VKa z6_~9d__S7|Bbv0G7TAOBv9q(A-p8)ZlI)TXe1$D{BKTfe9Gp8@+5tw-epf03GIMK7 zALCP2=6nQ$g688UnC5}91BGwE@A{9I>|maUjhg}k_H6SBr>YMIysno+=;s0x&R|!r z7KOo~4RDj4ONti%*Pw&cbI4)ix#;eV!M z@qNQE@s7@aztpb$^(kHl5zHTeQ~>8*l!fAE3Y5~vsl05yoxNi1Mi@4jAIIGIIuRKW zi#g&YriSKjr;{>kXS5Zt>v^N28c#;%wj1!N&DoU<|K>30eMZ;51(!&`=otjL>wQ1F ztH61QN38V<>Qi@|A(Iv{_pqlj@HgA`(5}8r(hyJ4^ps3MWla z8HOIjRo_jY>kaVwLD^*C1Kkql1_GoFUHUyPM6<9gZd+DJw%Tl*>W!&<)$uDnLF*V5 z;D?F{Y<@mJ@B|ZX(;UE$E5^27XJM!5|MoqdteiZ`10o(YuLxmjX3w{}PF3vY@JE3> zQ}MSO6M=KA&KO@A!fV-Jm6i6xMdkjY9~M{KY!_Lf4Tk}$ET6Viz$sYL%1yOHg0k7n z@xZabg(0ZTAeh%deG#+iTlyt)9F7Oiotv!_m@5@k*jD|GCWJI!GLl<_+@e4bx zat+f9%1-#0rKj$=%YZ6Ek8-f~t{aJDf3HUY@8!4S@!0|^O4ld&ZaG;L zY(?g*O>6)tjout6MR;OSySU~5+O7iE{6=EZ%=&<<-&ZjEpIH204FJKp=r($GyeJ5| zb{ViUFd3f~W(77csIAHIBe%HPcaA)3`<+5DF~CJVXN#`JONFpy7mQ3VnnH`)5w#f4GFb zTxif*K7!K*y<)|eTVp|Is7nFZy#Q3D^IxCI6o~@jo=9U>kq$ zJG#^m3L-Y#i`j7@c@?vbZ1C2y+VIKhL#T(E5&l=br!a7%nhTnL25X6XdvMrD*CLS| z7sDyHk!U2p@w1J5T)PaTef{WT?%JX|A};I9*Ds3n@FR*l34CzeWI3!BloFrdGfw|_ zby)}&H>1%e_R#5`O|}i6@IVIqN)(+fnR?CwP_u|rYRLuO^x=9gDqR9hp_sbu4y)AM83{~ ziND}ChLtk$_()Cr+ejlWB}Re^LiX@0LE()xJUt1k;hH!}VD8#VXK+g3t9}r>*WJp! zUvqxPKQ?E|J>!jrz)qDhx@BwzM;Taw8Ca|LTUob#GL>uaiA?lNt2!q>x8_{E>`aPc z>$Q1}*s^1pZC2Wuo%*i>qJS)cN}l<4)4;eiC`*gS$%-OEqr!O3y&zNOI)t$ir1#saiq7{*_Dm{Jd3;$YL{dqt#wTwDo$TPqYoQ!!>k$HZ2ZV>sw zPXtf!`^(kiH84jm0Rj2ke;crgq5p?9`oC!S4+EB&n=G8=8@2mm^4=(khr}DNnFlTQ z_T}bU?NsF<5S&q^qoZA`!$Ycj6Jem#)UNk}3}ko1{#~sBuvZrc+b~ErFla*xRRY`a z%r7IbxkPp0wfE59aUwx@-1YW!q1L}{3kRXkwxJOIj$jN@8eS!CLxjMnDF4OOfl@$P z7vNiBleh|`<%RZ@Pf9`3+z}L=Wv+Ktwnb$AsNEueq{8l~El}>0Bdj#w;E-+G3F_Tk z=N8DCPT_y21Xt;Aa}kHh1^{uWz+Jwn>&w$kRJ&h9OOXKSYpHhDJ(1Tq(DSozZO!yH zr511K=PvyBe><=XXsNIu0VlQz@>J*ti}&=7FMpFR)(o@E>9LjA@nxR|&*82{ zY0I!c1KU~r9x$sdbQHJmR-|j-d&nGM5Io7h5hgGpR}>N|W8mS_A}=@m1c0K|&$>qc zfQ&#H@o*vfras)R%oY2^@m4-A0b_=d%hh%$usV)U!?9L+TTlSY1? zql9J)8=&=HSUXnTjmOlij}KYM;?xS?dSHz-1V+NguDF6%uH*N`j@?(TpLMX;0sQhgz1}!4uhp-WTwFH%2IPI&0dV>6I)fpTf&2 ze=r(zsnLl~=!ZYy3>LV3(I08uGT|YN9_N@D_`0nEIiruCS7xE{Eu@dk3`Q%UC${Qs$C&)^?viIUmOL z9_i7g)J_}c->wIE*q+(p@WZU>)EL9eRL|Mrb_3=GSM=YD7ug02Y{y1u_H7zj{HXHa z@-?vJHl#EWn95_C^Qd%984=Rwf9Fl9nR;r-zX%@Jnu^Sgv8O!Fmaf~3O9&sTO zOuO&4_9)r6GDz2!z5=t{HJzOdIAg~flZ&HKF_-_V&~ zydOLL(&sHvqxM{4!NFMP6GT6|vKsGH@S^U*J{tK3k^%2*u$6&*XP>WJU8G?cMJlxC zl0z>w%TBayeCF6l;?0SRD*GE-kd<~;Zz``wKrqH*hxRPg_rT*+#Hd1n2xt$X3OtvH z7_hHB^F1539-Z=@^BoyPG==FitD?3HVeZLcClckyGjlN2Tsh(_p48k^`R&7Gice_> zX6?T0_47d$E1XGc2{!A@tiNP*|0=Gnmr1{$y6g~|)ktJMI)xUvlsdxi4nst&VbVjT zQg*K-2X(Sy2NCcf6~mB})Z;l{#!}(Z1L-r{02zgW_yp*8yTe1vJs`}P5`9%TLhnCu z9S51hf%-OT&txmJYQO5I&0Mhfi^zf=GvQNA5n`4{nC3;ih`Ii?<;d|NoEcGqcUm>a zSMC7K@pCo*fqT^v|2d9NE@C~~D`@YMC)Gg|SGw$q{|s6$9nZFFF&Q%slDQDl^zSPR zQWD2GUHu0qs4Bok#VkHRz$s&SPHsyk9fFsQ9Zv|>%pTirWe6P)M}r6%v2xqq+lKz- z)@8$G6_r!g0nGniJTG>a%>afHohrGBBXewQgpiF}#;q9E(HW^P*He(!w05OPs}4Jv zXwp%nFi%a>=i`N$Ydq(HVLffNSUbqwbv`=~MC`Ha4SVX_Br~Pwgc#>fV?~(#_Q*@= zaNTCoTEoC+o@0{bSjK4qnK_}DCO-}0TYl zpXPB*OT&JAR&5+@$pzSB)mZ)W!J?aV+(UF#_P9{3U5(@?1B(=u`VhG^Q_GwFO`2Mb zx+oULY+8|j?}cr^PT1}uT)Qc;vBPwe72Yv7-$~+Q1Jp93ak7vgm`#o^y6q!Fcwq7| zprx{AiP(%VZk^_l*5Rl8xXL>p={j7Wh0vV@mvxX2xa|g{h%lT^{(9h|wn@5My6L0e zKaMlEXmzO5Y@t})ZZc$1K(?~iq5R?wl1uk)CG0pthrN0)4w*^aNn>lJh;zXZCE1Aw z0UWd8Po^e?60G8&6mUDO~yr`W=4UrFMBsl$(g_W!eTzB z25eDzSb6HcDCmQ_ces<~8S89WeS~9!-m^}*_5hn~T*hgj;eONAiqI4W zLzE>gyVAIQ=EuBvK>Z0L?ItgGm61I7Ywxa}+26Qp9#+Nbq`R^&;AumpLBGH%CvRD_ zniPk(ZyTDUf71HJ3Gvsa!RvohNLngoPgECgJZQf*xON}F5ncd?H@SVLxL`$_zlRfo zA%|d7m2IL^G>dOhX7=$w%Pp2A#AYDhMwlC-oq1W8#dqtT?%jiWs!E! zd!Ft40y^${71@}UBz5=i-Il_E0lT^Kh9q5_R?a4|=jh?8WBkf~3!K9w)-=R&q|$nC zwxTibw1y`ubM_R`JnCz{fEWMINxp3TeZXK2S$1MwI8u%A{?Wl>Q>boUN(CRE{Q@U+ zQ?Q7KRUJ#qs_5j@0x}8qd=4wC>1L&6P;?0YFO84g=;EJg9t$zS>b}WJLG#}o8*I`N zg1obHW$FeV%RDc|g7-z#O8u!7i<=k(=+Q5K<}!N>a68D><6Z~^jmKI1Fdxxw)||)^ za*tDKz89PCE7#K;xSg_2Dx+L-aef{<-erKx_NWnVcU@R@cEiud&KC{@Rl78}Wi;I4 z+;IPRSbp?pI(p>TBkR2l@NnP8wi-_xzbkfMkhsV>ATirhVb!wc=4*?pV~Qz1@#@*b z#@rXj`oXcsM|^N$r47=xR@QHYId!SoC~RT0%Gs_7em-B8}W{A z#38T!^|vWHD=bQ`K<`EIxu8!mEyUY&7^mjrNVj@`R37upNX7M#;sAMl^Re&35HYX< zn>}(M2bfm#fow}DG~mvIm82R6$1O`;nRx;yao+eI*~7|n@cy#L@7fHM`&d%PXsx-N z9Dc-lGMIs<{Sph=eiWqM7Jjj@b|Hwww+dl#|Cp%9;m+5M-)%lOA}Y{vc2eOLb1kP0 z-?KpP4d+n2A|qOxfYSB^Li5y)J7$uYccGVa$01{;Rk==D_UgA_vSs8 zUOpKRxo<%m|8=~G`)F_q#U=>I=~Lo;;`_{?IsNzNtbq4lZ2W z{!Lffuqk>N?-XMRQJaJ$pO;I#5+Gjb%CblADnVv`v!!xIOYZvufNIiHeo|+COeZaO zWPTn7$v03eS=IJJ+AC-y3(*EwYyKPkw8X7eH%d%?>1UiStM8b^D`Mu9Gxv&~W4t*g zmtHo0Pna0t9RF(CM$91C28n9^1}ZN-)4AqqoZssiSzjeFz(H+>ktTY~IR{@~u3*^U zAAr_>%58*+R}-&!Tu+UWkR9OVtBcf@_*>a}?q4f(vA{X}?N%H)G5qK2E199DfA0+Vx7PgkCijm&ae`W>44hoRAQHMlsPSdU_S%6d zr~~DDH+7`{S2=ID;vT4jnS0cs+Idhg{vMoQiUK1J8q)RgmK;+-9i0{*R)Vd%JJ^v6 zdvcAu5J$I@@-yGSiKG!lY^jUk?*7@Ju(xF%GPVpaF<<#}doSD3 z4FqUiWU6rju8zFEx`aZjbC5unwutL%U*f-Vh#vAo_KM%Z#Y-b}a~F+DQe}r)OF3H7 zGWasQXBO5!HRCwvZ*T_TVn&BkRB*^u%yIQhP`yTC1e{ZXQBjW`SCLcZ##3Z!2)g<* zii~N$jL=WpDu%1}AoD-Jlm8oak1o1_D9}VDteV#8{v}_nOJrv?D zYnjtQ;9t_A(YkyJTUa0*8$kW6+!}~?!V!8E!awTD3h!Wo@~5gH{&kv*mcd$;$2N25 zz2&MKCtya16u)=$=BN^9j!I90 zMO|N*Jv}lU8C^BsJ}(=_VYQ??ggNCq4magPyi}ORu~IFi*b-Ra_KJ7tFm7L*&_yVk z_U62nIrN=j7MlT#Nf@JB5w{&+4#^M5p7LbNx=t8cniHAmGxvefB^;M5ulV^+feY#p{@-tAJ?E6-+cU>M2fpoeHy&*5f4jJ8u{YO*{|m47e+;>CaiBxf}>Sykq`9LQLNPVwYAj&Tkf~tuNDw$-I7SRF5b=t%vgDC+ocB{-?N}L!nT( zg9E3x;n1)e)>L&2)t;rUe)fv1`1bj^C;sZ{$}?odyO33XmQTL}=O z3`XFscUb@+7w>?9tl`t-q5y+#l0OH5sP> zd4})ghK1gG=6yGGFu=pG3D=h1Y9~r;_$WxzHvx~#QFLziH_MH5JGB%;^SNqJ+L)3t z>zS4F@Hww(LAG9|G1Hq?y^fp5kvC+Z@kd8TCvo3`{R&V6>g>S^8IRkhHZqYaSdanB zhTfTr4vmhU59kfQLy27Lt+H1lphYZp z_==OaY;3b=XY$9aHe1)6aM|y(mw@oGUv7IawCm@i>JP|+!wf`wkT^puEm|)98Zht! zq5qR(M7k7C75}Fk8!vF`f~*H=0tI$ARpaUxP`2mVvtihPz`;|QY3tEFu|4ZFSG4qQ z<>D|tzec;`_D>f~U?58L=-G8AhR9*Ez;A~JZzt3L?Cj~7MF)rMKDP2-GX>I3U4)H! z!EFT4v&jdKQ>#7%GmUjPU7`M3)+7Dv0cDbZ(}$eL0%E7|!7l9Ja}_97&FM*52IAa_ zYeaHi1-mKK3Qk_#4fr|7Tdoa$e(XHvV6X%JeqFPSVYi%>Im<+Li!_geT%MsUB<&ug z21-7!@~wT|wj?!@b`a$qe_=bDe$}EAj*^;fSLbmt96&JsFto^JE$j{8K&hs-ALk2a z=N_jzyXE2_CQJ>sfDWgZNW-?}0lr=Kvh#8hfPuhas+9%4@d@h5!$3yw(fZ*!{ep$_ zM+=R3YK6?n>jb=tjhsp_4$y~Z1R`-id^R%M8RITR@Iyw_A&%`=nW=%dE(7!m5eki3 z7Lc>ys!2I&R4u?W%RhcNsG{Kn2vy(8!r7%(I7l;#G$JI?oA2V3J2(vdZA7L)|5B*cj-g@e zS_<}||I@}tSe_^1iBMv*86lZ{-V9Nd%f{XIdXmuuPz&R+T8C9=l@6awU z+kpW8=Yss#sx;S-ru_dsB}i|vMW)6%E=b2^-l$C7|5ifz;s2#c{x5(VB{aM45cZxX zLYvr~lGyzrz5By|fa`-;)89L0*>e4OAXgoqbL~o z8eDnBI)^Gn$ydzyVltIxvRUSw{)@CL)IUf1|G%Y6dBA;iS(DD<3tIw$7xe!v-oGa| z2>$=rqJnvv4!LHLiEntRqI#buym>~)cvG_{7(Jt6jEaqkiHYS+18QS3k3pb4^k4kn zZzi65a{7UDBvt(IR(`!5Sg;s~V6irVuYXSYePnLWtxx8Ccbo{I;UPWeA6eEy?>{7L zxX&~Jde-H;lC)6$wd-^&$P;_2=thu|v7*2;<1W(B;jBeVv*wp2zs|KMc=DmSk_Uhy zq58e7$D3yvd%IFRw8_&fYiSko%i@)@5I0tl@;qgVf`aF-(-POQvcKk2iHo1s?-WNZ zCFusI*;`&%7#W0s9; zi#wfcGXhO%7%}Wi7MT!&aMC(fadF*!rqF?P&6Sx~+H>o(N9PBHMakY8YpB5ZIE?5Z z2mh-A&7tq43{FxEBu*Kcooz0mlJgW;*sT|Z-l6(^LBd553mnpuaLUk(QkEuj<@FD9 ziQEv<5*;OuH-=V%8g{q)K20jVO)uoo#Z{{`@OL z!Mi7h^nBU3-U*x)%?Mcgcml}#^Oo&o4Qa+C!>Glq!J);@CB7xLCRIo$OOjQxe?1*d zY^;!r>JEGJprQ2M5B1-kVj1JNHNuSc2hp#rjIy2&{Ce9??L}nM%0G;x!WKbDMEDsT zZMc#lfWI<;EIy&VXP>gP2xSSbfqpcPsA5R*i`OJ<<}z=+x^o&0>@w2d2dVPPY&E3> zuPL9CYde}xxN(@i`!IP;_)YAZ!HCKjJSMYFUjleoWb9^7@L3r|j};UXUk@#36ML(C znyO-Y5`M?mhdUi24&Y_plJ||fAA8qTV{M>dh1zBG&ajgl;9_@3ebEt4QA;cPd4*z; z!#B+2n?r!Ip5NWjhlsDwC_^iq-XSG2lp24yoL!PQDrlvh{++v8{agxSmJ7ipMr<#y z%||4(+}(R6c~!qb5uT(QTe&hg^`g*xf(HcYYY7W}h+<((W-7;CI_ zo(sJr={x?vcOIu+Zo*$Xoziyi`{Hu+@k-s@pG6SMMP11WDTxw(2l}1iZ-=qXo>cL< zR8b(aueJBccmJPezWON+=l2^cTycjMhhhbayE_!W3hr9m-48A9R$N;gio3iy+x;?ZDJG0zue(0e>YL5gLBrV-SoS*ry9mn2{xtOHt45i$^eei@f z-R_eweDc0ga*Tb9b8^l9+#L+%ue#`4M<}gRdi;*QI6R8XNWijMFDJ!5fx%3V$Gtz2#nse*71CNxaWp5D3Q2T#Cz9#wz@2!Up8f(R*``XRE?XD`%`gGP%TN; z!h#*gDT(P6am2?bzPcykC zH~)!(Q2csKiM^fhT5KH&ifu&zt*?A*mr2aDa0;|=( zizkC^|9Rbjr{$LRWR*41ep#qx&fT8;4P~E{-Y1!^;NmlKv^2|$@R&Fd@XOkD$Pmau z!Xi^Sr#MEDb(eC+k5F*b>3r-zM~jNPlKqzRjWjeshP8gVPlEgk1_v|E9S^=*^CShnbQ_^yjJF;nO2HDRh^sOW=j?{X+ncWo#T`z( znygWGfA!amW(Bt97O%EUXgRVimz8l;jt@_BdZTkpg%sYv^0FsM8C=ktiC zn6+>GR_s371?>d_z^(An#UYDBGzCZbGL9HY5JwVqm3mX-m_^qWXTib}j0qi4Kp!Q; z*~xl4{V-LENO%2jUMU@)W~|Tj7z|!2+%J_NAHqjsFHCE#{Mu%#U zr(ImmkLLxQDMBP$LBp}DDplx-@c$Tbhs!^Nh~jN_N>V>-Rk@PK2{bxuq6(UHnr20` z9vF#-VT3)80QZ`W$s%sD8d)8R!@v@~a=Z-G{l(aw#>_Z-$}jy?Bh?;w<1w;*qa46E zM|{hz+OWn3=oO8dTUzg_Dik6%T+K<;v`ztJ^;dN_=I%JS>=X0236RH>8}_yDzxY6` z^p60S?Mxj&WlX|z+~bB}j=WUMap|g*^!-!8yT;O}>-UI>nYje!;H0zItZ#WzC(Tj?V83}lGw=2IPymn(<|hYHjPEMYi-4#0negc zl}c>RN0|e9wdt1z8_{0a#l-{J9@=Dmp;ONht2GeCfp*|S6@L#qZK^!T`-w&Jj|fq- zb?>*Mrf@QaPQJXX!(Q6A`|G5DtERQK0eQaI5OliqMi)tZ`|V7O#2e|F8{DXTQr%ZP zmYawJkopgcA_k&PZ_Q^>(It${i;I9&-S_c!Z^I)>_nPBBrnK^e{a*SaUHrG=%*qkZ z6I39f^Ok*bzm6=2C<;~1z_7N2cc6Z{mjv)5;?tJQSi7!J6|d?_$ua3Z~Y`D7o=h~|s3xfv3JQ#%OPo!$!k5w)EP(yT#> za>1uQ@?a8V3423%|4mc|r7+o^)>q-k8y1h=7*Z6YmIEKV#A5f?w8H*=GgokH7n;PJ zquzdP21(^C{2;HM*7gTe2~`^QWA#xBOFYzrgNF0#u9mc%a7uB-wDs(<_R0A=qpsdr zjX`k!qUlU&$rgX2MzyVL1>V@y#qT>0df}}(nR#Dl5Tt6()4sIYUK|UApFmAA(yDvB z5BA9?S?=a{M|}=2n_A{dSky$iX41u{nCM8@Wt0b(OTf(l>BO;kPYx z?BZY0LHP5E=-+H>2;rG(pec*tPVFk4jIHNB%aqk6_=cvqr|sIH31KKb?9} z9h7^;I#TaH)*|j65;D+AN_d@BUMAFvN}5YS6_tKhpODX8-%Ap$AH`Yx zxTrIO$O<%GiPw$FzioV1KwV8eiyO`!TuL!jqcM!x@au-F&E~~3a_lw3NEW3QZ$GebF*z#vS#{=Sd zBL2_++`_y~Lpz#_*PewCY3r1lN2!JxzPV)QSMA)*6yBwq zfn-QeO`nAr%)1#wpxs0@E#?Y-7FQV*D{H7!?Oje(@F*#-|G1*H+%#*q+6c3aNgyE; zw2}Z`9~qv(L_hy-#2fy`^47?JF$r%!7Z%f=hNY=c(?ZEN!SRzXS}BZ|_G_Z-XnB0-GqDo!6iuT|Y^;kwy$aQUveNG~|P*E`w( z=4-{P&)dAsWZKZe?m&bchG|YR^A0$Tyqs<~B40p(jN)XDPFp-{P-~0OfXQ z*Ek*7rCa4J+ua51rBV4jR;VlnT!dvIQ8a^6i&vuSg>QrPfidcS#!TRpOhyR# z*`R=!rV+`x=_Y&RxYAPWu>IuAK^uNz==|{_+do^k^Fim>uvWktqZrdWcRyaq*kVAH zzdAarvmk+4)(lF}>DGbdjA_Y_Z8@SQZF@jaGAVLl*LjpqMm|cf-lBx4$6YRKiJcQF zD}(mN@c5T(#~O2Bm-lt5pMI~Kjwg3Xl`wxafpOLQDlU}+@|!;Lp9IabS%Qlac}QQK z3;82sS{MG7*uUp3{qjUVpL?i!+7+dfco@EyTdBXn?{Hgqhl}0bqlF|+?-6jDG~^7; z{OBELb~_v0e!7*h#qdLot?^!}Lys=;?Mn-^CeU_$S~qp2iiA9=@bB~oYDxZ|X$21G z?uQ;xhP084@lx^dm2eSUJ{zGWP-|vkhr7oy8E>!X1Lj1MMhUkxr)x|PT6fkPOo|}_ zDDWeH@2g82JN~iEWXpi2OU)zF{y`7GVp?snE43!U?2DO4j2;G4#jmPutXe`LJBn=n z-6f!xIMplUZ$dF7utJZr6RU&Fy=EMY=lg~kALmqo<2SrxD&bMG?m@>0n!N_o{3@3|!*jlhe#e|j=mbKmb6Wl^8ggeyrJR3UeLbddf5 zT@uzqY10RGnu!|K>K4m%`h+*WWjl<@s}a(NcFPbl0^qhi9k0iO(E4JC57F9@B$08R z_J0RmtRQJK+3A~u8;yH9SKpp6)1ngoFZJV&a~Z{rQ3MSA#A45Uygmub0`z}K3Z{Y2 zhf~*UAlZ;mEwr5;CW%)4giZ!b86>4~aMzljXQAc#8CaPUauV!)&`(Zwg!IpHq7nXr>H42YD4XQwWKYPXf8`TwGerLY?;hAAo@%3^`Gv}J zRgvMGqvyFA$x;lg-;wR#-E_SG}u@qNmT(lDBk45^*X;a=tEzIX<`5)PAx z?;%d*S!!dZw8F0B1Y{qOh)!qQiBa`9I&H4(Y%XaqX(VM+KD4}jG)lj4A54Jv2wSiu z36W~9gc~k4XBWe~^a+cQz3j;kprTE&7HKn%8L)_JrwNtH{WyzzY^C>Qt6?m154GX7 zuR1wCDMM)0&bFS6S&;5SI&t5fzyFm?etOQ&DnO{jd3yuV9p{d0rLETj?#9~Duse>; zJ?bcRRilqapW`NhM#m(HB@pD<7FH=}$a_ozjX_UOT}JXjB%jkAVhD-<9JsFz`<2RO zH05+bWUEljO}b7OxJJW0srjh}`n|=rL01OCx+pCx2=k3c*yMHq_ac`7J?t;tT*6iU zk?^5~y$EwU_9M3veV>?;dNT@>A=V&2^fp1DSr|-5s(ivNN}o7FeRrzsEe(aKaAf%0 z1UdNI1kq$;TTtQ@(HovaVTh%pHo&*GPo{R2)@Ej2JbYDgWzU(QUR#bfS}oi^kbWc$ zi*$}Tw7EVJ^`FFVEfmW$#!A%|UP>=^?%;*WZ@=FuiZ^QC1<@h93LNBkO)2qS)suIS zK2AH+Ur@o8V#u(O+X_RA8LS09dY1~*oY#b%+4(6Y)`)2*R@?$kmSsq_*5Wkwdhpb~ zqY>PP`>EL6iwQ;D#wwqLYBf!rhULXAHoOFYKacCKe5sg-kFVbz$?c}vR zo-079U8L{>c&!S7cZ^gWnQ=}egRjEkizm@tYvpb(FJAE2#?<|fb;os|vf>4vZ7DKb zQMsqMN$mLU9)2+EjJ$iY0vU)bTh^?0!fBTS+cbrh%im;~d6vQ%83>n)%%f1XS@xjj}ZeSDMj38}VOJA`#O=ZPPJlT}cnn$h*seQf^@M8}a z>g+1@BY!IjzjafZH^Myr=as>bc0a4g(|ewyF7dMi7@+Gw}KcE2YMdZ7JrKwvZa9` zz~B;lEN6M!&)alO)u}B;>tB$)rk9Ff-0{JypwrT5BqLMySsLRPdoz}qUhYWAi=HD8 z`pFe8lsAPcY$eu6uxRO4xlnhAiI(Lu0~SHYbCdL7R6U<74)th-ep+F?pmS z@zPT0U#4G5{?RLw>wWwDp{hyI2r<49(AlMd*_*P*S4%|@WXMSxTB-Sc7x)tGn%iIi4LCD@_^XgO)+0qX?Z=fz_C1WCOjrB&e7}=rHT&~c zCVQ^W+!LFN`y?QS?D5z43H*}&eg&UMw>@DkC|OU2YSL!VKi#{bMd?ZkM_@_U_lGu( zeVCUPQ6Dw|f%gakBN4TWz^4H@4rv^^R+JlcmyuLG?gtKDL z{01#JN;x~7#qBj1u0Z^Ft2~=UupV&9!4FLls{^`8`{Pz0O|{RajU$yDy1w#M&z(JJWwZG@buCR7Go9JcG8-3u!4^DO210@G7|{iYej~* z5afil#do)j#GarqsB8j1U2@8%bYOg+Teb#k!G^0Ub`G|#XbiA6@sCYfTO=)(m&mw% z8dG;X)RqK>nuPRp421^njGV*&cxfGx%6ISKFageDBdfVdtz3zK*{FRgKOQgkCO_aS zmXJ;m{X3so`IVcn1V)}rBd3n7J-6Xy4(YAwze{aNK?nPFQW7KAXH!#)ip~Wp6x^zu z@(NDcWfP}EJj4Lbw@ntK@jLrbY_b(W@3Kn(S=e#F4ZI|{ns3`s!d{Oc1*;>{bTHue zF52x3t-U-dt|AqM&$xY8qzEA-385UfdXnr!Q!jHYCT$QOn{6PFU~#_xtWdV@LbDDn z90}Ko*57R67PG53T~Qy9SVd%fVe~%=otR8Jb3^{>F=TJqcavtf>c#m+%@kl0bY?N(E92Td}XX^)(UJa zKEU}e?+D*svT`#qHIJ39Zce{4TA_az;54^~<@JLJ#m*>I_B)Hal=G7|&p&tr?v>x` zxa<(63`L-01KN0WtR(@Otl5M2o0;gkkUs|kihYg0;Z#Xgaa!SX7CeFmkoiiBUtf|a zM#K#|6i~{oK6Y{)BvGL*6(cR<&?iUrb^)ao2J zTlWZC-Rot+jOlJi(FaG#e{J-dEw$d$0i=;FY41t#sW{iww{OXjR<%V|elq>dfOSVK zhMjZ{wu0S59`;~dh(^d=xS6ka60`elNaG|IiEFbC7p>48{ z_1gGv2?`sDqJw`=<0~gl6J)~CQiM6%$~{8OSZ_k~8tutNjoQse)&e_$oM{bHQ$_WlolUR0s(07w zdqJ*qeb+zU*8k+E1jLw27TMC|BX-DBt5U6U1)G{OBvp*3-fQMgF|*UU>9II{#qm!% z97r+XU_9JUO@6cqOFs4i_1*nS{a1@l?g;ckw(DSGx=I_X#l25FhQ}*yl95blzr3V3fKh+D6$S>okD9v)zFAg> zR$?$d=UPC=>`^Ehf82${EWWtBWT?3@?FnS*Yj9m^RkpyXDJFNRr#62 zLLhTh;8%aJyCPa#RDD3{xqAK(>=;6yF#$k6F>9h~V@2x{1Hrn-moFkMjnBE8NvNKF zIq&bo_X6OR+}zhI3JghWx;mf`XOa>Z;`fFb%WmLUX+EMi6pj1&*DrQ^na zTdf7^(mjt&Zp-f+l3xHE$y#u)pSWrR|6Av*l*V1T48crS*>Qk}BG=-GsUBkYN zAh$$R&HVD;$06X+>U$FA`^|FEC8?oEoTkOg7mj0fWNzNrtm)*8`ZZYB6qK&bQY=C9 zI!~_JeM^Tg%H&*Cv1}pFISmjq61HV}ww3)~ojtWdiN0{C`6G|O)#f+cAZ#@OEB5xE zmz`rs%sFHw1mWm;vXgTce0M*@T`(pR3DQyhFq8wM0)Q}J#7Z!sF?w9+>l6N#G3Nn9TDL9NYTw+xVd&8S?otg z1C-1;$t*+ytj7~1q5-(6=asVRrUCU&1EEYqmP?m6S5zctV23y9`VI@fWHG`b5BaUg zSe~%e=C;+L0@m`lg@Bt8g z#I4L*ksu51BznCCjSp-p-tZrgWbre%%$?7zFTpd`Wl_V}ZvxkT=mUM3Bgi|mF@_XL z@)&A8lQIGpB}yf=1D$DV-Jk`Mc?i44RcSa(Wx(~nrosOv?4;6_&;2EgywBZQC7%su z&rR6nDE7B+Aj!zTW9we)_O%!Xx!R~?2}@5SM#V(?cY9t~!E*oJHK}1lZIIsSSQ!h6 zG5S*@5eXR|XGJ>`YF=?igm0aOX}|Q^JFI~+Q+`@W^5s2uc8GLcLPGFTjEiSdJ!u~k zs22*)NG*mMH28?An+E(FUCOs9z($vl8Xy(u5oudz z?w%_<^RRxS`RPAhmS=ASEIy&23+CG-DM-jQq^+Z{T-@zMff`HE)lwV7>x&x`@-vtV z5L8E6gWqQ^Q~@kLRID$urpe)2za_#(Df^o7?dbj8Wms1ST1>82H9aR^kmEN~s zoT%5GZ0fM&nB#!r|7|+ms1eAWC%KKjD>7|icw*r4Gso#0?mcI0@{rS(l|d#d)eDwB z7}pc%V4qLed-Q(BV$oxatZ$m%^9r8o-T0|whHmrKjOYGE>;ru0qj_)VF2KhQ8IW^0Dj~{m6ay;3LV#QojQuU{HnJN~!o?G+?QRk?%l_d2MoeBLt(A zNe;IYEt>gJvPMZkW3Q2FA-meu_OL#}rb- zdIG6mqWJMh8L~EZe?VVqTyZmKL)|t^G6?L!Ck_;oNhr_9G^R9fd&g{6^ zh8jHt`l<9Qe?#W>Bd|B*ZnDhzdWL>2UQMoivJ-42I1M(hVy|>FFD%Qw&*rrly$!0rXPqeD1mh#V{hITab=)AeI%^CU`6T7w!dTO{ADLSJ8r}Q@qLX<@Vth(Z5UJfal{xC1 zYllGa2;!|&fi?!+nlnQ+S1c1>R|syhDNDHn|X;CSqXcHhba}8HzS`=HoAf} z=a#%E5S;`6q!kUWv$gx7F(LDt!uMOaP@XT;jTt-A2Ky$N~6f zwy0n2RO3EF`Ij}&g|>>e6ZQ#Z8FMdNAGoc?-4Ds;MmN{it^LWm>KO|NkUOFal#G`(2h7YZ?3% z5*nZ^C;jymHM>}d)60b|-#5hfSo@9?KXuxS0VXn#!v2iBs$;hzyw?a1>;{vY$JQg} zh4z*)WnW3|^p*;qFzz98bDx-x|Bo>&!SlMWikDBLi+w#A%VCLsUF=MXg#O14iQfF5 j2y~{OueXQZ&toa44-!7rf2;l_{rvp=`}_O)`uh3#`S|$w_xJbq_V)Gl z_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}()<>ch# zG>j0Ay?kSK!zdx?sTj0KvTng*Vqk)eT;0hWlIou8@) ztgQ&Iun3~Fb9sG@sI9EAunE4u2@1l)!nDR{c$S-=vA@K^3(?XG4As^R*bT?qV|S(l zss_Hq*4NqC4(aL-?ClTS@Lq$Mx(CGB>+b9j{QVLC03`^FN03V&RI#S1O9wEZz=skh zNSsKaV#R_OwIuoktem@u6DL?4S)ruK3Kmk5s?5l;%0^GX&h?vkQl-iZICJ8}z_TZY zmO!Dr6z9uYyN4!o`t+Hhsnez!qDl=)l?ft_MXRxcX!EJmuTeLM9XpnT*{W!fT=g^z z+f0cno02VSwys^X9rEf;%Qr^>Egk|39!$8f;lqd%D_+dFvE#>(BTJr4xw7TUm@{kM X%(=7Y&!9t#9!C>o9hX4ROX5}q3 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 236cf406dc2528b538ed078628f9f95e3240f9fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y!oNk%w1VJrb00K@_{rvp=`}_O)`uh3#`S|$w_xJbq_V)Gl z_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}()<>ch# zG>j0Ay?kSK!zdx?sTj0KvTng*Vqk)eT;0hWlIou8@) ztgQ&Iun3~Fb9sG@sI9EAunE4u2@1l)!nDR{c$S-=vA@K^3(?XG4As^R*bT?qV|S(l zss_Hq*4NqC4(aL-?ClTS@Lq$Mx(CGB>+b9j{QVLC03`^FN03V&RI#S1O9wEZz=skh zNSsKaV#R_OwIuoktem@u6DL?4S)ruK3Kmk5s?5l;%0^GX&h?vkQl-iZICJ8}z_TZY zmO!Dr6z9uYyN4!o`t+Hhsnez!qDl=)l?ft_MXRxcX!EJmuTeLM9XpnT*{W!fT=g^z z+f0cno02VSwys^X9rEf;%Qr^>Egk|39!$8f;lqd%D_+dFvE#>(BTJr4xw7TUm@{kM X%(=7Y&!9t#9!C>o9hX4RO5uq&s 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 95cfb820d47f717cc9ddd31d626d497e23f1a38a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmV+9?4>gws~>FDU_=jZ3<=H}() z<>ch#;^N}q;Naii-`(BaA^8LV2LS&7EC2ui015zj000E1@U2H>RW3WMn{UYnG9*Hl z=drAdx*AEGz;S`xh>aV3?-RhFFgPe02Y`SwkX$;ON+^`MoJyZntTW4{cCB5nc&v?v zuir9wYfih{V>Eobj-T)IX<1zFtM_|ye1C6bcy@V*b##Pqeua99jf0SEiI<3(i-D4r zn2es9laZK@j-!^Mp{9nVsIFn0u&1G*w6~PFq^i1|bF#d-!n>@3#)r1UzG4voJBQbb A?f?J) 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 063fb280549db7a68a47cce157d680ed7af1a8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28621 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 Tm7TM^00000NkvXXu0mjfB^P<7 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 c5372614a4a623d418be15ececf2768a87f70f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3823 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 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 2e6021d26e2d699ace681e80b4dff96eee0a5830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3739 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 FV1i(EKivQT 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 3aa96770e80ac18446c0254f37af3d75740cc415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4004 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 KMNUMnLSTY_%g(I; 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 da519f5ab92d84c56d4e55f0c74f17d828391960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4574 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 IM6N<$f?ZhTO8@`> 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 2a12968d5ea10ae7b39e47855deb2040e35a5881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4010 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 QS^xk507*qoM6N<$g7XK!pa1{> 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 5cdbb31c69adf4c0a52bcb93193c7a1f9566c76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3804 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 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 748149b3713b90ee4c3e8e8e85f73d743d0eec38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4116 zcmV+v5bN)WP)4Tx0C=30S9dto58wWL&oqzYI96n@aI9mmjL3}ak-f{F8Ie(u%#4&IqmV=> zQc@v>sH`Lv2~o+ZRK|J!=y~7YAMf>C&-LDa-JkoqKJ%Z?bpx>Rc!h@tqW~ZzG&<5| zzk!gGvx^XZ5^%r?XdnUA%O@&a-`d&&{v&=)00IE;lHwH}9_;qs17BC{+MnT6iqfks z)%eeO002OUbaHk9Kx6@c9PpRx0RY+iFSi2#a$IzHGyoC^0A!y)FJAy82>@gx?Q9GI zkU9V$1pMV406_5m%Lf2}5bF~V4S-Am;7FmqL7@QnRREl>uV0i806`W2e0`&QLI4Q) z03a6<66Om)=m7vJpYX_N0KyUgP@J4yg#M0vhzUS-4**X7A1zt}ptTY}(D@%t;wk`_ z4Z!t_|7bKDKmY*Y8j13!Dggih!eRh`ou$)h5&-x@fb9Z0eY1*A->wEg&j9oU`@}@X z{`+1CG7RwF;=eop8)yUo1pr)N0T&T0Vu@6t(5Oh%Dmog2$24GFaNM}J_zs5ij5$ns z%;#B}Sw{&QL>2Zp(ja*^X9(9Qk3MfBA0K~_0A4U(m?TmxMij4-q)4?%E6EH{tmI}C z4l6EFgOpcPW7W|b37RzRNS*I{Yi$^8{p=n% zNI1qjO}ePMRvg-JckpQQV)gd+Y4Jn+odd21(hln#$qAkcl@1FFzZtO^r4bz&b369y zQHgl}gtElJq^)F1iu>{0)Rwe28R!$@CrwXun(YG9ptJ+*=V8v5FD ziG+&3Cizxp%AHC*J?i)BYgq zq1z*+UR>{Z-}U~a$L0gP1M^RAJxv)j8{!_CAFh8EGom|+jP^WFe4+eey7*EsL^ zz(m%h-sJjJ{VUID&gsXmkIg8~%)Kd{-9P)|?bUbo?~(V{=RD`x=i5K{EpRT}`{=hw zSnOExS!P*o{^Y!ZU8!HST%~<3|6=fE;cM=i+S=Q1r`F}yU(-%~SN*>Dqw=TQhTz8X zuioDsf1YiL?y%D70Kg7fkO(7)G;#`ANBN=V(P0=orWR|BW5V^}^B8;?^_Ya2xmXxk zQ3NuZAW@OsffUbii9E=;!>z&-#oNA%&TqN9Qea(3Q}~?7Z?Oa7Es`u!NB2y~P-P1! zG z9dYokEt{RKeYL}yla_O;OYb2DH#_$VkJnxT-d;YnzH9#S0Y?IF2CW6B}M7DQ))!o>Gax+hbP{gT+d|95<9J&t$W5g z$2~VLFF8M~z@yOatU(dASgJ&zlvqkX_o-~+eE)^6@|ugK6(=r5R=Qr+uad6jszKMR z)DB&_d9|i4v;J^{)isqyp2k1d-!(nBQQ4f?5_Hp~RjQ4#ZMA*)*45kD9f6%jcSO4| zU5j^z?p^6lyYJOw_(1f*&cmrk?Y+f)@%=83)dx5RXisLI-Wtps3LCb5CO5(|@^y6J zdHsvbmqBBu<5Ck06U&nWQ#G$rr#)Zm&hXD{znPisd|Ui3;=R?J{5;G2hYwE{sy`lI z^jOkf=3b_K8dWh4Vqgx(pbJ4G#z-NufYL|RpxMxA=q*etmK9r$qvFQ#2@K*4lZ<&x zmdxzTGc5J22?T341tK%?C;K$%0Y@YG0%tB)I(IxzC~v?nPd*QR*WC^R2L%rb*$CT- z*o#_<8Ht-q7)k0$Y3@;#7LgHCvkKFSFO-I;1IqVR+ElNpRjZe2{T389MzmOoT)BquGB*cZVK*79%`OCUYg!&KI*<&etZ431B?QVgNzUB9MKEb4KWEd z3ZsS#MGzylBA243qlaSd#9ocdJ{lYEnP8KsktBYMcuKe%+5CcD` zg%5}@;)awVFHr=PF)9Vsf%=A)M*E^KpvN#Q7(>i4Oef|$mV))iR$*sxd^ks3F>V~s zjZ>vt!tO*tf7m(X(<5sWXU4zr3?#KvOp;!rqKTt03RFNhDoH{&-M%ovIp-Z9ED z9%CG2+Qk&Y)Wu9-_F?X1A+iLp+-K!sjbI%jND|Ts@7VO%YKd545OI{9%3e-lAjOd8 zIczx|kyXfboI;#MTufY<+`yf{y}=X1v%#Cl`)5}&AD%CppTu9Xn{Ri$fTBQ`;C{hz zA%CIY!g(U1BJH9kq6=cF;(X#A5)Kk;lDSe;saJdArG=%R$t1`M$-bbRlv9!WC|{xA zq{yK-qI8C8u1rv#QYljnP*YLIs*h{bYQ}1rYD?+hbw29$?XA(v(T_54GBn<&X{2l{ zwqMYM)s)?gVs2sKXPI-L$!f^@iw(D}sa=wNlf$GF+1c17#r2*W%H7hV$aB(L&?nLN zxj$DxWZ=ug3P*B-e}_7U^+%{jmPeCfvf_}VN8{HL6Ow4j$;a`jdFkYgl9QBEkFxAf z&!0)j70r8C;8sX0DlFMsx>S~UL9TqE;!LI1WmC1h5^ojYP#xVag`smjeZ^uR^?oHKCSIrd77Q8E%%lUBP z5i&aNgtFMbk#&+b?O8G-kL=Y<@Fd4y*~ z%0!*TB*a$5+ayvX^`(eXb9=5yr^z_WN>b32S-EEUJcUrj14?pK0(DJ!Mx|S|QLRk< zghqtsAuSVaJsmY&%3cvY9(^7ICPSuu%tk!M-1~)0_)KNYEX_kLaxFU#ytRgdGBysj zXYC%_(;elU!kz0~mJi9hCAvTJE4+crn;9q%TY^{7NJ#Dk}yX zn-;edpO}bA%1CBUsZ5ngYtPU+@%+@0EaddrGnAaMyto3+!loj#;ykJx{8@ZZ@H*n11R2JZTwpAI3kc z9F==M^wNE7YQl2z{wvD#x!1HeduKD>4!$!y<(&4EOyPbNBy6NN~*m^gsZB#V^#} z763>9zz>EH2Eh;pkst&XUPGt=jRpWP3=5Bs33=0X5iS~<>6*3L=k&_itQczF<0QeU?a{Ut552?Wb00E>)L_t(IjeU~6 zZqz^&g}-ahuD!bwZ-B&8&;$?>;-^W2#0yZQ~=>Dg>Hs+m`j2U-6Zd;KTyxMxbo_X;3o+V3UWFYY7 z##_n80^Z*`ls2{J0<~9?B|7VfeFVT=hWDiV!__Z4_B%BsODD)eE;$D`-^rkY|2{Fg z4pG2^tbjVFe3VA3t_}Z73}=vl2IL4h0$GAofL@{4T@HdAfdA>t77=}2BIY-kUBuq5e_nADNrSdKpg%pCmt+;D9o;hP4^FTBPbFg=&?^X+=0UjqF^nA z!kLg3Q*Nh1*GmTCpas8HZ>xk5lIf1G1;p|EByo0V!yhw Skr1f>00004Tx0C=30S9dto58wWL&oqzYI96n@aI9mmjL3}ak-f{F8Ie(u%#4&IqmV=> zQc@v>sH`Lv2~o+ZRK|J!=y~7YAMf>C&-LDa-JkoqKJ%Z?bpx>Rc!h@tqW~ZzG&<5| zzk!gGvx^XZ5^%r?XdnUA%O@&a-`d&&{v&=)00IE;lHwH}9_;qs17BC{+MnT6iqfks z)%eeO002OUbaHk9Kx6@c9PpRx0RY+iFSi2#a$IzHGyoC^0A!y)FJAy82>@gx?Q9GI zkU9V$1pMV406_5m%Lf2}5bF~V4S-Am;7FmqL7@QnRREl>uV0i806`W2e0`&QLI4Q) z03a6<66Om)=m7vJpYX_N0KyUgP@J4yg#M0vhzUS-4**X7A1zt}ptTY}(D@%t;wk`_ z4Z!t_|7bKDKmY*Y8j13!Dggih!eRh`ou$)h5&-x@fb9Z0eY1*A->wEg&j9oU`@}@X z{`+1CG7RwF;=eop8)yUo1pr)N0T&T0Vu@6t(5Oh%Dmog2$24GFaNM}J_zs5ij5$ns z%;#B}Sw{&QL>2Zp(ja*^X9(9Qk3MfBA0K~_0A4U(m?TmxMij4-q)4?%E6EH{tmI}C z4l6EFgOpcPW7W|b37RzRNS*I{Yi$^8{p=n% zNI1qjO}ePMRvg-JckpQQV)gd+Y4Jn+odd21(hln#$qAkcl@1FFzZtO^r4bz&b369y zQHgl}gtElJq^)F1iu>{0)Rwe28R!$@CrwXun(YG9ptJ+*=V8v5FD ziG+&3Cizxp%AHC*J?i)BYgq zq1z*+UR>{Z-}U~a$L0gP1M^RAJxv)j8{!_CAFh8EGom|+jP^WFe4+eey7*EsL^ zz(m%h-sJjJ{VUID&gsXmkIg8~%)Kd{-9P)|?bUbo?~(V{=RD`x=i5K{EpRT}`{=hw zSnOExS!P*o{^Y!ZU8!HST%~<3|6=fE;cM=i+S=Q1r`F}yU(-%~SN*>Dqw=TQhTz8X zuioDsf1YiL?y%D70Kg7fkO(7)G;#`ANBN=V(P0=orWR|BW5V^}^B8;?^_Ya2xmXxk zQ3NuZAW@OsffUbii9E=;!>z&-#oNA%&TqN9Qea(3Q}~?7Z?Oa7Es`u!NB2y~P-P1! zG z9dYokEt{RKeYL}yla_O;OYb2DH#_$VkJnxT-d;YnzH9#S0Y?IF2CW6B}M7DQ))!o>Gax+hbP{gT+d|95<9J&t$W5g z$2~VLFF8M~z@yOatU(dASgJ&zlvqkX_o-~+eE)^6@|ugK6(=r5R=Qr+uad6jszKMR z)DB&_d9|i4v;J^{)isqyp2k1d-!(nBQQ4f?5_Hp~RjQ4#ZMA*)*45kD9f6%jcSO4| zU5j^z?p^6lyYJOw_(1f*&cmrk?Y+f)@%=83)dx5RXisLI-Wtps3LCb5CO5(|@^y6J zdHsvbmqBBu<5Ck06U&nWQ#G$rr#)Zm&hXD{znPisd|Ui3;=R?J{5;G2hYwE{sy`lI z^jOkf=3b_K8dWh4Vqgx(pbJ4G#z-NufYL|RpxMxA=q*etmK9r$qvFQ#2@K*4lZ<&x zmdxzTGc5J22?T341tK%?C;K$%0Y@YG0%tB)I(IxzC~v?nPd*QR*WC^R2L%rb*$CT- z*o#_<8Ht-q7)k0$Y3@;#7LgHCvkKFSFO-I;1IqVR+ElNpRjZe2{T389MzmOoT)BquGB*cZVK*79%`OCUYg!&KI*<&etZ431B?QVgNzUB9MKEb4KWEd z3ZsS#MGzylBA243qlaSd#9ocdJ{lYEnP8KsktBYMcuKe%+5CcD` zg%5}@;)awVFHr=PF)9Vsf%=A)M*E^KpvN#Q7(>i4Oef|$mV))iR$*sxd^ks3F>V~s zjZ>vt!tO*tf7m(X(<5sWXU4zr3?#KvOp;!rqKTt03RFNhDoH{&-M%ovIp-Z9ED z9%CG2+Qk&Y)Wu9-_F?X1A+iLp+-K!sjbI%jND|Ts@7VO%YKd545OI{9%3e-lAjOd8 zIczx|kyXfboI;#MTufY<+`yf{y}=X1v%#Cl`)5}&AD%CppTu9Xn{Ri$fTBQ`;C{hz zA%CIY!g(U1BJH9kq6=cF;(X#A5)Kk;lDSe;saJdArG=%R$t1`M$-bbRlv9!WC|{xA zq{yK-qI8C8u1rv#QYljnP*YLIs*h{bYQ}1rYD?+hbw29$?XA(v(T_54GBn<&X{2l{ zwqMYM)s)?gVs2sKXPI-L$!f^@iw(D}sa=wNlf$GF+1c17#r2*W%H7hV$aB(L&?nLN zxj$DxWZ=ug3P*B-e}_7U^+%{jmPeCfvf_}VN8{HL6Ow4j$;a`jdFkYgl9QBEkFxAf z&!0)j70r8C;8sX0DlFMsx>S~UL9TqE;!LI1WmC1h5^ojYP#xVag`smjeZ^uR^?oHKCSIrd77Q8E%%lUBP z5i&aNgtFMbk#&+b?O8G-kL=Y<@Fd4y*~ z%0!*TB*a$5+ayvX^`(eXb9=5yr^z_WN>b32S-EEUJcUrj14?pK0(DJ!Mx|S|QLRk< zghqtsAuSVaJsmY&%3cvY9(^7ICPSuu%tk!M-1~)0_)KNYEX_kLaxFU#ytRgdGBysj zXYC%_(;elU!kz0~mJi9hCAvTJE4+crn;9q%TY^{7NJ#Dk}yX zn-;edpO}bA%1CBUsZ5ngYtPU+@%+@0EaddrGnAaMyto3+!loj#;ykJx{8@ZZ@H*n11R2JZTwpAI3kc z9F==M^wNE7YQl2z{wvD#x!1HeduKD>4!$!y<(&4EOyPbNBy6NN~*m^gsZB#V^#} z763>9zz>EH2Eh;pkst&XUPGt=jRpWP3=5Bs33=0X5iS~<>6*3L=k&_itQczF<0QeU?a{Ut552?Wb00J;cL_t(IjfIn2 zNK*kA$A3H9I>)n}m^ui=X<4DAiIs{-J`|;4Bt2v#fzX8ljkKP8i(V`uXd!}-Qi0e7 zfj=r((%eP$ZfMx)MmP(vCNtDYX0>JM%=HCo)@x)#313aoe zaJnEjzSd@yq5wjghI?@Gc~8VvlW`2b6G?c^@m_Xf&NrMVT0XhNsA zJ!4K&Y8)5zWdMtWDL<8S!DPpDxH7<&c%{@7WyTTC1W+U#i}D63lD|v4Xn4R&>4tRPhXZoAkwkIe`b-l+61OV3Dzv$$d%>2Tlcam%| zujZ;62z9i+KK!u$&a2g2&=2g%&bg#71Bjv|?A(=pMbFm^M9G#NdbZ+8a>}{`s;d5s zG@u3-N7o(rI?&e;T3%jL)-;VD-@Y{Hxls>#Kf1h$+meZiwdWa4CIKKAT-1gV`K&*$#8=EsfhaJfI^o4~eAJ%eok00004Tx0C=30S9dto58wWL&oqzYI96n@aI9mmjL3}ak-f{F8Ie(u%#4&IqmV=> zQc@v>sH`Lv2~o+ZRK|J!=y~7YAMf>C&-LDa-JkoqKJ%Z?bpx>Rc!h@tqW~ZzG&<5| zzk!gGvx^XZ5^%r?XdnUA%O@&a-`d&&{v&=)00IE;lHwH}9_;qs17BC{+MnT6iqfks z)%eeO002OUbaHk9Kx6@c9PpRx0RY+iFSi2#a$IzHGyoC^0A!y)FJAy82>@gx?Q9GI zkU9V$1pMV406_5m%Lf2}5bF~V4S-Am;7FmqL7@QnRREl>uV0i806`W2e0`&QLI4Q) z03a6<66Om)=m7vJpYX_N0KyUgP@J4yg#M0vhzUS-4**X7A1zt}ptTY}(D@%t;wk`_ z4Z!t_|7bKDKmY*Y8j13!Dggih!eRh`ou$)h5&-x@fb9Z0eY1*A->wEg&j9oU`@}@X z{`+1CG7RwF;=eop8)yUo1pr)N0T&T0Vu@6t(5Oh%Dmog2$24GFaNM}J_zs5ij5$ns z%;#B}Sw{&QL>2Zp(ja*^X9(9Qk3MfBA0K~_0A4U(m?TmxMij4-q)4?%E6EH{tmI}C z4l6EFgOpcPW7W|b37RzRNS*I{Yi$^8{p=n% zNI1qjO}ePMRvg-JckpQQV)gd+Y4Jn+odd21(hln#$qAkcl@1FFzZtO^r4bz&b369y zQHgl}gtElJq^)F1iu>{0)Rwe28R!$@CrwXun(YG9ptJ+*=V8v5FD ziG+&3Cizxp%AHC*J?i)BYgq zq1z*+UR>{Z-}U~a$L0gP1M^RAJxv)j8{!_CAFh8EGom|+jP^WFe4+eey7*EsL^ zz(m%h-sJjJ{VUID&gsXmkIg8~%)Kd{-9P)|?bUbo?~(V{=RD`x=i5K{EpRT}`{=hw zSnOExS!P*o{^Y!ZU8!HST%~<3|6=fE;cM=i+S=Q1r`F}yU(-%~SN*>Dqw=TQhTz8X zuioDsf1YiL?y%D70Kg7fkO(7)G;#`ANBN=V(P0=orWR|BW5V^}^B8;?^_Ya2xmXxk zQ3NuZAW@OsffUbii9E=;!>z&-#oNA%&TqN9Qea(3Q}~?7Z?Oa7Es`u!NB2y~P-P1! zG z9dYokEt{RKeYL}yla_O;OYb2DH#_$VkJnxT-d;YnzH9#S0Y?IF2CW6B}M7DQ))!o>Gax+hbP{gT+d|95<9J&t$W5g z$2~VLFF8M~z@yOatU(dASgJ&zlvqkX_o-~+eE)^6@|ugK6(=r5R=Qr+uad6jszKMR z)DB&_d9|i4v;J^{)isqyp2k1d-!(nBQQ4f?5_Hp~RjQ4#ZMA*)*45kD9f6%jcSO4| zU5j^z?p^6lyYJOw_(1f*&cmrk?Y+f)@%=83)dx5RXisLI-Wtps3LCb5CO5(|@^y6J zdHsvbmqBBu<5Ck06U&nWQ#G$rr#)Zm&hXD{znPisd|Ui3;=R?J{5;G2hYwE{sy`lI z^jOkf=3b_K8dWh4Vqgx(pbJ4G#z-NufYL|RpxMxA=q*etmK9r$qvFQ#2@K*4lZ<&x zmdxzTGc5J22?T341tK%?C;K$%0Y@YG0%tB)I(IxzC~v?nPd*QR*WC^R2L%rb*$CT- z*o#_<8Ht-q7)k0$Y3@;#7LgHCvkKFSFO-I;1IqVR+ElNpRjZe2{T389MzmOoT)BquGB*cZVK*79%`OCUYg!&KI*<&etZ431B?QVgNzUB9MKEb4KWEd z3ZsS#MGzylBA243qlaSd#9ocdJ{lYEnP8KsktBYMcuKe%+5CcD` zg%5}@;)awVFHr=PF)9Vsf%=A)M*E^KpvN#Q7(>i4Oef|$mV))iR$*sxd^ks3F>V~s zjZ>vt!tO*tf7m(X(<5sWXU4zr3?#KvOp;!rqKTt03RFNhDoH{&-M%ovIp-Z9ED z9%CG2+Qk&Y)Wu9-_F?X1A+iLp+-K!sjbI%jND|Ts@7VO%YKd545OI{9%3e-lAjOd8 zIczx|kyXfboI;#MTufY<+`yf{y}=X1v%#Cl`)5}&AD%CppTu9Xn{Ri$fTBQ`;C{hz zA%CIY!g(U1BJH9kq6=cF;(X#A5)Kk;lDSe;saJdArG=%R$t1`M$-bbRlv9!WC|{xA zq{yK-qI8C8u1rv#QYljnP*YLIs*h{bYQ}1rYD?+hbw29$?XA(v(T_54GBn<&X{2l{ zwqMYM)s)?gVs2sKXPI-L$!f^@iw(D}sa=wNlf$GF+1c17#r2*W%H7hV$aB(L&?nLN zxj$DxWZ=ug3P*B-e}_7U^+%{jmPeCfvf_}VN8{HL6Ow4j$;a`jdFkYgl9QBEkFxAf z&!0)j70r8C;8sX0DlFMsx>S~UL9TqE;!LI1WmC1h5^ojYP#xVag`smjeZ^uR^?oHKCSIrd77Q8E%%lUBP z5i&aNgtFMbk#&+b?O8G-kL=Y<@Fd4y*~ z%0!*TB*a$5+ayvX^`(eXb9=5yr^z_WN>b32S-EEUJcUrj14?pK0(DJ!Mx|S|QLRk< zghqtsAuSVaJsmY&%3cvY9(^7ICPSuu%tk!M-1~)0_)KNYEX_kLaxFU#ytRgdGBysj zXYC%_(;elU!kz0~mJi9hCAvTJE4+crn;9q%TY^{7NJ#Dk}yX zn-;edpO}bA%1CBUsZ5ngYtPU+@%+@0EaddrGnAaMyto3+!loj#;ykJx{8@ZZ@H*n11R2JZTwpAI3kc z9F==M^wNE7YQl2z{wvD#x!1HeduKD>4!$!y<(&4EOyPbNBy6NN~*m^gsZB#V^#} z763>9zz>EH2Eh;pkst&XUPGt=jRpWP3=5Bs33=0X5iS~<>6*3L=k&_itQczF<0QeU?a{Ut552?Wb009z7L_t(2k%f{W zQYAqUM2jD7G2DPVtY5_uIKz4bfkm+qYp@&vk0N3fmLs5X2n=f8OGNbyU;Ka;6C<*# zUuM?P-E(U1BvJdLB2g9zpfL8;CS{UHkR(wM1^ajG&9*E;jB$z)Pz{PWHj+QTc2!li zt3&7d;T05jtxi0s+fExm#`^rUe*5&{v^NzBG#Bc~%w@i?+EXElbW#dIhUoz3g^SH@1c`Sa&+_fCL8uwj0;<^y(%QpjHXAMY}>MAGOW9sBvm!stC4M~XE#o1 c+3KqL1fvc2iMm!3F#rGn07*qoM6N<$f@o#5;s5{u 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 0f19e824e614e7d56638174c33690d77606df22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4087 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 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 2e2d294d1ec6198f50c3a37253cc7252a2d4b3a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3974 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 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 e23c50c85b2fc311da507ea1a36b05c859477153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)+60z1wux?1B>3(E=W@nR>oP6QkosV~Z^E|V&0*rblG7hKyj7<|R zpB~c<)A3vFRu=s_()x^_5#I9fB+Bb^NQ^=o902q=7S!4nA9z>D|LDWt0tlH9&YLs8 z#jznnPdxz&cY(cirJ#}Zwze*Sn1Hh);QbKANWE4yq65Rg<~`uZQ=r>ml?9ZRfL|HF zw%TA+@fV0t?EaQ!YM$2tffqnI4@9{*KFS;i&eO_B0Z2Y11S&%ULAgFM@jEGG>GaYC5e0Jxn25xX4php5d2R%e0NXMy~41aX|Iu4V)2 zsD%J7aa;m+-|uio;=Xh6!~@{m3~+M|xV8x72wI*}kZ!^+K2jEJHDtRwG@BGuLumyb zTq&n!lic+VK|k4Fd921#gm;;$HUMZ6paXxx3$jMZ3;ZIl#<&yDpp(9@^Dy6W=Soqn zx-_k78w#Y4CV-a-x3lW-UXH1%IHmVb0v~2ozjwR|2+qKltp?xkBAmhRf%I^u9V)cH!U>vs1-eg7H z^~7Zbka36$PtrooQe!67#W>#Iht0QNVdZm037{z~8ZjHE6IFC{@xDgT%IJZVch1r9 xZQ~TIqV&z5Nj^h}`kntTq@Q$Zp_KV2zyNZ!0q^m>#MuA<002ovPDHLkV1i)rMIQhF 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 eda2d868b54949e2f4f7c12d21f0ae1f9052f0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3047 zcmVWdJZTFEBGNFg9|O{E`3w z3p`0gK~#90?Ojic+N-@^sq(vQx$`X+c$wNd)f=|VHI3*Z@KCP^ZiaW4S8;)P!;f{q;!D0Wf7z9?*Sg;&#vU zrUT0K zX^X9-hpqs;1Mrlu=lpvCV8VLjG*RbWnR}lw=9cs`Xi*+W_g$^3UQK8sO|>CrEvFxx zEYo?2jln6hG$-}ueZdFtLj5`j^9mBt2(sSz#3n)#Q8zLYv93OVHpVo1Fc6Ust=5>R zY%RC+-IY>m#4B`&v@ShYO7%J4gI3KZN~t8X*A5~|jbEh{u{(1LJzkTrj)P-IT<2bA zmhJJC96X1B3*a;P&I{!RRR+y%)&n)IzifD!RJg}ULn*Z+q6yeOV&FW=hh7;EJ|QZl zLLwRh_$Xu#pjEJwLtHHXa#U9rU+|v(=Xe$Vx6NJBq8vggkzJ0B0!uGRI{=^;ijzcA z=br6AU*7d~P5;egaLLNvVO_jd5K)ha+^oUP`L1DjD$;JhO1*+@XVRMk+lp6-#w}?n z0*T(t`x(!))PKr*UPZ=A7EMLUCB^b%4G+Ag|2U!gP2dZ8QW~IxEZn??g}{hOjth%Mh| z0K*Nclo}m^76T#D{h9K=^Ta=dcH^4qqL17NQFev)qk2Q=g~mf7h>HL3oZC*RncPof zvz`%jHGv)rDc+46)c);!#PNzLO8`&QZ_`FLA_^f}%wJ_0$%tr-v`+a{DdiK<67>aU z+$yD9zUK%90!J9Jkj^}V8V?d5vSBI03P7LrREd_Wh)J0VBt7;i^k9tLM=3=Ht)*zm zDDwcDLCwe?A;-8{FxcsxQfkQMhXDRsgua4^89;>)XbE!wZj!-IK`b}jWwwVhvZd#U zI9Vc7oe@_ThIr+zww9i=_+1BHL5rj} zLf*>Amx4gD81#ngT?u&|6q^{N;Gd{niJl^DxT%-$=qQBm~;Ep`=3rqTr_rhNifB%%1}y;Sznq6 z*)tjJRh>!k|_;Xm;taGFn2~vO^}#%tdyFvT_!o{ zWUZ)EeqK|^Qp||+$IwQxB>EP57CeTgkR?vn{1Ibr^}Aq!;}^|=wJh?nc>Y1kLp&~e z*9f<$E2$TG?i^Q0Hn(a@E3H%q&}x7W;Ik!vvPW9#gme$z_@1^#*W*qNE$LF*=0qXY zi;aV?QrTbNHy}V|+e_-02p;6wvPt@P-H@2SYE)JS_9(^M0->&T(o!dyMpsWrn_0d` zhc?y+M;m8h>W1N#F6KkI>Lse)d`dQF&=VlX4#QpYT*-vH2;&pz@#%88^4Z1g=J+IUn(e65p~x)2I!E2gOn zO;c(mRZ7kFyeB*?Q0Ae3B%gHW1V!_*Xo8U|LS3{-QiEh%Edtwt z6^((&-0Eep!W!cSFlp7RjMdv#wpXH!Q^NwyVeVbi5>~8t2+xXJpiCHju^(-$Me`w! z@1Vd?eH++(*%F#Eh_^vlq0TL|&OF1$Fcg}bGG>bpSFp|jwYEPpU$M9_sfRsDJ?*$V!F?(168{f4f_c{;r`7GiZW znHvDGhIb^!wI$Ya5Csv9d7o}Fy$kzF-$ZfUwWR0KDoH0+7tStDsWGs3S~8yV+z?|^ z8!>EdF5cL&Yge(0Msu02XV8H=yYzAU0zIzfyIJP}h29mWu7VHrC&xoGeczg~zYjz)CNc9z zuM5hl)mQM7AA zvlu(hC(Z)$WEES0^Tl$8`aZaUeo;Y_MD!`v=-C*X;THXmj1`(^MC`zRYDrOAC-sn0 z3nqsq0O|b&Q^B`F`AlaXJ#$zVq}b`F zRX{`M5_;C?ZPidVX3(?hRE=|2Y7y+`bg?nkbfE`oi1M2sb_UA{rY{iRR58WoeP&he zF)-RQ`(Xxsa6(w6-D9W4ps9z=vCL7Q`{00i1ix1ehL@6jRec;Xft6SUmbqKhg`F^Wi|S~ZyG30nZBT2`qQ!BbW$qR&P82P3w`g&qXqmf3ixWl5+|5HW pz~UC$y~Lo!BSmX1Z_(mJ@qc@qaLI98VlDsx002ovPDHLkV1fZ`uyFtY 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 0a41e15eb87253083c1233fbd9e4aff27d438082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21159 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 JLhMM>=Kb?J~S+n_*SrvEA{}eAOAF^Bv~YSUSuZ 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 - - - - \ 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 fd6faf2a318701ec923687afd472e5db89ffd651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmV;j1Wo&iP)WdJZSFEBGNFg8Pc<_`b> z1P4h(K~z|U<(5%s8+9DVKbKs3UDGUUdPA;ewlJ|+hry}%3F6bRK24+ral#N8EuCdZMQ9>}wTxzKK)a>7uEi{AZ5mtCw9DG&d`NQ1EOJ$1N6qbgWIx06^0Qd2 zR!k-n0758rQ$2d~J?g~TZBgi>#Fp1rIG6o^*PnichK2@ACKKk^+oC^_T_&DMfQoi0 z7P;!NO(9EU@is4{Tajg%nwlEK(Aq8H_siU?k%_PWKd^|rKzK4tb8|EG_4SDVmT+W` znt8) z;+cfT4|Mk74fQZMKdRFSboLqay`dfk+-G&TBIUjuLaal_E9gCp831B=P^pzUH*=B6 z!{1`J)HCG%jNaQ9*ezNCm|ctKp1<0naGo1UW8R9rup)FnD(q;g1ef?}UyYTr8WkbaB$u(`E0XJYUyGmf|!&gc$$=-?>#~m+_6; zy1Rw<_rC>z|CfH2H&RsMRRh*Neu%EFE?h1bqSxVJU@>4wi2OB6_e8H=WVM3u4#)P+ zS&$?NQ4|3%z3V*5t_@4^uu_vxC_TVbDJHIidq%QbmDTkXlrZ3 z;cy@b0)m=bq|<4V$t0;%N;}tA^Abf7o6Uy9;lOIOA_xLN&XE7Owr#ck0iew8UF$dq Q>i_@%07*qoM6N<$f^gwQSO5S3 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 560ea0039310545ed1c4dcf7a1004abcd2b780af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)WdJlUH7_tW zlXA8~0000VbVXQnQ*UN;cVTj608L?Ia&K*AWNBd_Mrm?ocW-iQb09diXwrB900OH? zL_t(oh3%KWPZMDn$3J(}f=ErHU?>n%8C+ZlR0kcn$-zjh0|O3XOe`yde?b2L`wuXX zhJ_d%8euf16FM9Ts~z;>k5g1Ea?lD?UWfMDYwzt3VrUcF@AT&TJkR%i-uL_T?y4|9 z%G1wi{dCZLSp@v0pUT8T@&^mcg|>5)dYfeG!x z#P-2%!b}=_W|MnsFAVpneERL?<5#2cYtiJl^|-N;xc(%1CDQ!f+6W#+<*b)9?0^Ls z$ns!hDm<)dujZ29*S8O?@Y-W-Ak^wk{|g*J4h|p-8L(gn(vZbd$oK<54uE}(9n&yP z0EJ**An`64?$;6@lc>-IAZGM@o${>UkeJqsYd0gNYvsFZoh21j)fgvPSLaw#?##L* zpe%(Dh}jYYC=2p|_PD8_FAz_yCT_;&U&nyx*xcCp%kyh7?5CHA=tVgZ(UnD8I%`WR zWrDSDTplYw!+w=Zex;h?s$ z^|t5@)orgf3$@22A8n-Re;Kz1rQBrWn@as?v>$EQ~J{a#-*6xsNZ%0HAkI9a^h zRJb$5tw5_AX>YtRRW|oq-9_8uLq^5e?m d@n(zJ;9uZFSmaT$)Vu%y002ovPDHLkV1g28gKhu- 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 be5ec8219eb952d55d581e40b104d8a74a58af2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36713 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 ATmS$7 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 ec89b1961..000000000 --- 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 778e09d2b..000000000 --- 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 e7066b361..000000000 --- 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 0a8b1b6dc..000000000 --- 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 3753cb96d..000000000 --- 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 4b5058e9a..000000000 --- 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 2bfd87d0ce14c424fd3b72377b085bb0b1510bd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39177 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 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 d0629769cfec742664ec0b739d93ebf4418d15e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115826 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

~kgknkHRvCi+5lr|NL) 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 - - =: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 2b9d32d20..000000000 --- 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 4d371954b..000000000 --- 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 4902e003f..000000000 --- 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 2aa3f647f4902e189eba92767e211ed0ee15d8b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47104 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 INr#WW0e?>J6951J 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 f77bd38f97bb39339a19d79a31dbdb97c279b5b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1378 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 - -
- -
- -
-
-
- - - -

 

- - -
-
- - - 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 56509c00c..000000000 --- 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 b23d792a2..000000000 --- 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 5b9943abb..000000000 --- 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 25a1d22df..000000000 --- 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 7ca8c7e6d..000000000 --- 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 ed2bae26d..000000000 --- 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 d7ce6d03f..000000000 --- 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 96ad06678..000000000 --- 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/util/README b/util/README index 20a539215..fad1270d4 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 From a18fde458c9b8d8d1b575de4420f301610e5ca9c Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Tue, 16 Feb 2016 08:06:55 +0100 Subject: [PATCH 14/16] Added documentation. --- include/feed.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/include/feed.php b/include/feed.php index 184b784c7..04cfba75a 100644 --- a/include/feed.php +++ b/include/feed.php @@ -2,6 +2,17 @@ require_once("include/html2bbcode.php"); require_once("include/items.php"); +/** + * @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(); @@ -102,7 +113,7 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $entries = $xpath->query('/rss/channel/item'); } - if (is_array($contact)) { + if (!$simulate) { $author["author-link"] = $contact["url"]; if ($author["author-name"] == "") @@ -113,6 +124,9 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $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(); From a9f80d435b475f4f23414b06ecc2b6af591dd1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Saka=C5=82o=C5=AD=20Alaksiej?= Date: Tue, 16 Feb 2016 20:57:15 +0300 Subject: [PATCH 15/16] Complemented and improved russian translation --- view/ru/messages.po | 6800 +++++++++++++++++++++++++------------------ view/ru/strings.php | 637 ++-- 2 files changed, 4326 insertions(+), 3111 deletions(-) diff --git a/view/ru/messages.po b/view/ru/messages.po index 4b0e372dd..7f65e8f1b 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 09755ca7b..81600c48f 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"] = ""; From b21275ee9c59a9f9d184b4f1f4cb7421b04e0f1c Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 17 Feb 2016 08:00:38 +0100 Subject: [PATCH 16/16] handle exception with non-existing addon directory --- util/make_credits.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/util/make_credits.py b/util/make_credits.py index 404b05913..eacb8707f 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)

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 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 c812a79dcf951f14f4332e8b98ad9dd2b903a179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76780 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�D@5klsu(RUKw!RLXp<@L$za8>kC3N>qct( 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 aqNdr=v`Hb- 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 KVan(Gss9a8mXT%v diff --git a/library/simplepie/demo/handler_image.php b/library/simplepie/demo/handler_image.php deleted file mode 100644 index 49c3ec89b..000000000 --- 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 1481ba917..000000000 --- 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 - - - - - - - - - - - - - -